{
  "version": 3,
  "sources": ["../../../node_modules/hammerjs/hammer.js", "../../../node_modules/@kurkle/color/dist/color.esm.js", "../../../node_modules/chart.js/src/helpers/helpers.core.ts", "../../../node_modules/chart.js/src/helpers/helpers.math.ts", "../../../node_modules/chart.js/src/helpers/helpers.collection.ts", "../../../node_modules/chart.js/src/helpers/helpers.extras.ts", "../../../node_modules/chart.js/src/helpers/helpers.easing.ts", "../../../node_modules/chart.js/src/helpers/helpers.color.ts", "../../../node_modules/chart.js/src/core/core.animations.defaults.js", "../../../node_modules/chart.js/src/core/core.layouts.defaults.js", "../../../node_modules/chart.js/src/helpers/helpers.intl.ts", "../../../node_modules/chart.js/src/core/core.ticks.js", "../../../node_modules/chart.js/src/core/core.scale.defaults.js", "../../../node_modules/chart.js/src/core/core.defaults.js", "../../../node_modules/chart.js/src/helpers/helpers.canvas.ts", "../../../node_modules/chart.js/src/helpers/helpers.options.ts", "../../../node_modules/chart.js/src/helpers/helpers.config.ts", "../../../node_modules/chart.js/src/helpers/helpers.curve.ts", "../../../node_modules/chart.js/src/helpers/helpers.dom.ts", "../../../node_modules/chart.js/src/helpers/helpers.interpolation.ts", "../../../node_modules/chart.js/src/helpers/helpers.rtl.ts", "../../../node_modules/chart.js/src/helpers/helpers.segment.js", "../../../node_modules/chart.js/src/helpers/helpers.dataset.ts", "../../../node_modules/chart.js/src/core/core.animator.js", "../../../node_modules/chart.js/src/core/core.animation.js", "../../../node_modules/chart.js/src/core/core.animations.js", "../../../node_modules/chart.js/src/core/core.datasetController.js", "../../../node_modules/chart.js/src/controllers/controller.bar.js", "../../../node_modules/chart.js/src/controllers/controller.bubble.js", "../../../node_modules/chart.js/src/controllers/controller.doughnut.js", "../../../node_modules/chart.js/src/controllers/controller.line.js", "../../../node_modules/chart.js/src/controllers/controller.polarArea.js", "../../../node_modules/chart.js/src/controllers/controller.pie.js", "../../../node_modules/chart.js/src/controllers/controller.radar.js", "../../../node_modules/chart.js/src/controllers/controller.scatter.js", "../../../node_modules/chart.js/src/core/core.adapters.ts", "../../../node_modules/chart.js/src/core/core.interaction.js", "../../../node_modules/chart.js/src/core/core.layouts.js", "../../../node_modules/chart.js/src/platform/platform.base.js", "../../../node_modules/chart.js/src/platform/platform.basic.js", "../../../node_modules/chart.js/src/platform/platform.dom.js", "../../../node_modules/chart.js/src/platform/index.js", "../../../node_modules/chart.js/src/core/core.element.ts", "../../../node_modules/chart.js/src/core/core.scale.autoskip.js", "../../../node_modules/chart.js/src/core/core.scale.js", "../../../node_modules/chart.js/src/core/core.typedRegistry.js", "../../../node_modules/chart.js/src/core/core.registry.js", "../../../node_modules/chart.js/src/core/core.plugins.js", "../../../node_modules/chart.js/src/core/core.config.js", "../../../node_modules/chart.js/src/core/core.controller.js", "../../../node_modules/chart.js/src/elements/element.arc.ts", "../../../node_modules/chart.js/src/elements/element.line.js", "../../../node_modules/chart.js/src/elements/element.point.ts", "../../../node_modules/chart.js/src/elements/element.bar.js", "../../../node_modules/chart.js/src/plugins/plugin.colors.ts", "../../../node_modules/chart.js/src/plugins/plugin.decimation.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/index.js", "../../../node_modules/chart.js/src/plugins/plugin.legend.js", "../../../node_modules/chart.js/src/plugins/plugin.title.js", "../../../node_modules/chart.js/src/plugins/plugin.subtitle.js", "../../../node_modules/chart.js/src/plugins/plugin.tooltip.js", "../../../node_modules/chart.js/src/scales/scale.category.js", "../../../node_modules/chart.js/src/scales/scale.linearbase.js", "../../../node_modules/chart.js/src/scales/scale.linear.js", "../../../node_modules/chart.js/src/scales/scale.logarithmic.js", "../../../node_modules/chart.js/src/scales/scale.radialLinear.js", "../../../node_modules/chart.js/src/scales/scale.time.js", "../../../node_modules/chart.js/src/scales/scale.timeseries.js", "../../../node_modules/chart.js/src/index.ts", "../../../node_modules/chart.js/auto/auto.js", "../../../node_modules/chartjs-plugin-zoom/dist/chartjs-plugin-zoom.esm.js", "../../../node_modules/htmx.org/dist/htmx.esm.js", "../src/custom_htmx.js", "../../../node_modules/ag-grid-community/dist/package/main.esm.mjs", "../../../node_modules/ag-charts-community/dist/package/main.esm.mjs", "../../../node_modules/ag-grid-enterprise/dist/package/main.esm.mjs", "../src/igsdb-webapp.project.js"],
  "sourcesContent": ["/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n  'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n    return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n    if (Array.isArray(arg)) {\n        each(arg, context[fn], context);\n        return true;\n    }\n    return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n    var i;\n\n    if (!obj) {\n        return;\n    }\n\n    if (obj.forEach) {\n        obj.forEach(iterator, context);\n    } else if (obj.length !== undefined) {\n        i = 0;\n        while (i < obj.length) {\n            iterator.call(context, obj[i], i, obj);\n            i++;\n        }\n    } else {\n        for (i in obj) {\n            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n        }\n    }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n    return function() {\n        var e = new Error('get-stack-trace');\n        var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n            .replace(/^\\s+at\\s+/gm, '')\n            .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n        var log = window.console && (window.console.warn || window.console.log);\n        if (log) {\n            log.call(window.console, deprecationMessage, stack);\n        }\n        return method.apply(this, arguments);\n    };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n    assign = function assign(target) {\n        if (target === undefined || target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n        }\n\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                for (var nextKey in source) {\n                    if (source.hasOwnProperty(nextKey)) {\n                        output[nextKey] = source[nextKey];\n                    }\n                }\n            }\n        }\n        return output;\n    };\n} else {\n    assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n    var keys = Object.keys(src);\n    var i = 0;\n    while (i < keys.length) {\n        if (!merge || (merge && dest[keys[i]] === undefined)) {\n            dest[keys[i]] = src[keys[i]];\n        }\n        i++;\n    }\n    return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n    return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n    var baseP = base.prototype,\n        childP;\n\n    childP = child.prototype = Object.create(baseP);\n    childP.constructor = child;\n    childP._super = baseP;\n\n    if (properties) {\n        assign(childP, properties);\n    }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n    return function boundFn() {\n        return fn.apply(context, arguments);\n    };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n    if (typeof val == TYPE_FUNCTION) {\n        return val.apply(args ? args[0] || undefined : undefined, args);\n    }\n    return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n    return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.addEventListener(type, handler, false);\n    });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.removeEventListener(type, handler, false);\n    });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n    while (node) {\n        if (node == parent) {\n            return true;\n        }\n        node = node.parentNode;\n    }\n    return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n    return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n    return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n    if (src.indexOf && !findByKey) {\n        return src.indexOf(find);\n    } else {\n        var i = 0;\n        while (i < src.length) {\n            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n                return i;\n            }\n            i++;\n        }\n        return -1;\n    }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n    return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n    var results = [];\n    var values = [];\n    var i = 0;\n\n    while (i < src.length) {\n        var val = key ? src[i][key] : src[i];\n        if (inArray(values, val) < 0) {\n            results.push(src[i]);\n        }\n        values[i] = val;\n        i++;\n    }\n\n    if (sort) {\n        if (!key) {\n            results = results.sort();\n        } else {\n            results = results.sort(function sortUniqueArray(a, b) {\n                return a[key] > b[key];\n            });\n        }\n    }\n\n    return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n    var prefix, prop;\n    var camelProp = property[0].toUpperCase() + property.slice(1);\n\n    var i = 0;\n    while (i < VENDOR_PREFIXES.length) {\n        prefix = VENDOR_PREFIXES[i];\n        prop = (prefix) ? prefix + camelProp : property;\n\n        if (prop in obj) {\n            return prop;\n        }\n        i++;\n    }\n    return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n    return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n    var doc = element.ownerDocument || element;\n    return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget;\n\n    // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n    this.domHandler = function(ev) {\n        if (boolOrFn(manager.options.enable, [manager])) {\n            self.handler(ev);\n        }\n    };\n\n    this.init();\n\n}\n\nInput.prototype = {\n    /**\n     * should handle the inputEvent data and trigger the callback\n     * @virtual\n     */\n    handler: function() { },\n\n    /**\n     * bind the events\n     */\n    init: function() {\n        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    },\n\n    /**\n     * unbind the events\n     */\n    destroy: function() {\n        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n    var Type;\n    var inputClass = manager.options.inputClass;\n\n    if (inputClass) {\n        Type = inputClass;\n    } else if (SUPPORT_POINTER_EVENTS) {\n        Type = PointerEventInput;\n    } else if (SUPPORT_ONLY_TOUCH) {\n        Type = TouchInput;\n    } else if (!SUPPORT_TOUCH) {\n        Type = MouseInput;\n    } else {\n        Type = TouchMouseInput;\n    }\n    return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n    var pointersLen = input.pointers.length;\n    var changedPointersLen = input.changedPointers.length;\n    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n    input.isFirst = !!isFirst;\n    input.isFinal = !!isFinal;\n\n    if (isFirst) {\n        manager.session = {};\n    }\n\n    // source event is the normalized value of the domEvents\n    // like 'touchstart, mouseup, pointerdown'\n    input.eventType = eventType;\n\n    // compute scale, rotation etc\n    computeInputData(manager, input);\n\n    // emit secret event\n    manager.emit('hammer.input', input);\n\n    manager.recognize(input);\n    manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n    var session = manager.session;\n    var pointers = input.pointers;\n    var pointersLength = pointers.length;\n\n    // store the first input to calculate the distance and direction\n    if (!session.firstInput) {\n        session.firstInput = simpleCloneInputData(input);\n    }\n\n    // to compute scale and rotation we need to store the multiple touches\n    if (pointersLength > 1 && !session.firstMultiple) {\n        session.firstMultiple = simpleCloneInputData(input);\n    } else if (pointersLength === 1) {\n        session.firstMultiple = false;\n    }\n\n    var firstInput = session.firstInput;\n    var firstMultiple = session.firstMultiple;\n    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n    var center = input.center = getCenter(pointers);\n    input.timeStamp = now();\n    input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n    input.angle = getAngle(offsetCenter, center);\n    input.distance = getDistance(offsetCenter, center);\n\n    computeDeltaXY(session, input);\n    input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n    input.overallVelocityX = overallVelocity.x;\n    input.overallVelocityY = overallVelocity.y;\n    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n    computeIntervalInputData(session, input);\n\n    // find the correct target\n    var target = manager.element;\n    if (hasParent(input.srcEvent.target, target)) {\n        target = input.srcEvent.target;\n    }\n    input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n    var center = input.center;\n    var offset = session.offsetDelta || {};\n    var prevDelta = session.prevDelta || {};\n    var prevInput = session.prevInput || {};\n\n    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n        prevDelta = session.prevDelta = {\n            x: prevInput.deltaX || 0,\n            y: prevInput.deltaY || 0\n        };\n\n        offset = session.offsetDelta = {\n            x: center.x,\n            y: center.y\n        };\n    }\n\n    input.deltaX = prevDelta.x + (center.x - offset.x);\n    input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n    var last = session.lastInterval || input,\n        deltaTime = input.timeStamp - last.timeStamp,\n        velocity, velocityX, velocityY, direction;\n\n    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n        var deltaX = input.deltaX - last.deltaX;\n        var deltaY = input.deltaY - last.deltaY;\n\n        var v = getVelocity(deltaTime, deltaX, deltaY);\n        velocityX = v.x;\n        velocityY = v.y;\n        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n        direction = getDirection(deltaX, deltaY);\n\n        session.lastInterval = input;\n    } else {\n        // use latest velocity info if it doesn't overtake a minimum period\n        velocity = last.velocity;\n        velocityX = last.velocityX;\n        velocityY = last.velocityY;\n        direction = last.direction;\n    }\n\n    input.velocity = velocity;\n    input.velocityX = velocityX;\n    input.velocityY = velocityY;\n    input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n    // make a simple copy of the pointers because we will get a reference if we don't\n    // we only need clientXY for the calculations\n    var pointers = [];\n    var i = 0;\n    while (i < input.pointers.length) {\n        pointers[i] = {\n            clientX: round(input.pointers[i].clientX),\n            clientY: round(input.pointers[i].clientY)\n        };\n        i++;\n    }\n\n    return {\n        timeStamp: now(),\n        pointers: pointers,\n        center: getCenter(pointers),\n        deltaX: input.deltaX,\n        deltaY: input.deltaY\n    };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n    var pointersLength = pointers.length;\n\n    // no need to loop when only one touch\n    if (pointersLength === 1) {\n        return {\n            x: round(pointers[0].clientX),\n            y: round(pointers[0].clientY)\n        };\n    }\n\n    var x = 0, y = 0, i = 0;\n    while (i < pointersLength) {\n        x += pointers[i].clientX;\n        y += pointers[i].clientY;\n        i++;\n    }\n\n    return {\n        x: round(x / pointersLength),\n        y: round(y / pointersLength)\n    };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n    return {\n        x: x / deltaTime || 0,\n        y: y / deltaTime || 0\n    };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n    if (x === y) {\n        return DIRECTION_NONE;\n    }\n\n    if (abs(x) >= abs(y)) {\n        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n\n    return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n    return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n    mousedown: INPUT_START,\n    mousemove: INPUT_MOVE,\n    mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n    this.evEl = MOUSE_ELEMENT_EVENTS;\n    this.evWin = MOUSE_WINDOW_EVENTS;\n\n    this.pressed = false; // mousedown state\n\n    Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function MEhandler(ev) {\n        var eventType = MOUSE_INPUT_MAP[ev.type];\n\n        // on start we want to have the left mouse button down\n        if (eventType & INPUT_START && ev.button === 0) {\n            this.pressed = true;\n        }\n\n        if (eventType & INPUT_MOVE && ev.which !== 1) {\n            eventType = INPUT_END;\n        }\n\n        // mouse must be down\n        if (!this.pressed) {\n            return;\n        }\n\n        if (eventType & INPUT_END) {\n            this.pressed = false;\n        }\n\n        this.callback(this.manager, eventType, {\n            pointers: [ev],\n            changedPointers: [ev],\n            pointerType: INPUT_TYPE_MOUSE,\n            srcEvent: ev\n        });\n    }\n});\n\nvar POINTER_INPUT_MAP = {\n    pointerdown: INPUT_START,\n    pointermove: INPUT_MOVE,\n    pointerup: INPUT_END,\n    pointercancel: INPUT_CANCEL,\n    pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n    2: INPUT_TYPE_TOUCH,\n    3: INPUT_TYPE_PEN,\n    4: INPUT_TYPE_MOUSE,\n    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n    POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n    this.evEl = POINTER_ELEMENT_EVENTS;\n    this.evWin = POINTER_WINDOW_EVENTS;\n\n    Input.apply(this, arguments);\n\n    this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function PEhandler(ev) {\n        var store = this.store;\n        var removePointer = false;\n\n        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n        var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n        // get index of the event in the store\n        var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n        // start and mouse must be down\n        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n            if (storeIndex < 0) {\n                store.push(ev);\n                storeIndex = store.length - 1;\n            }\n        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n            removePointer = true;\n        }\n\n        // it not found, so the pointer hasn't been down (so it's probably a hover)\n        if (storeIndex < 0) {\n            return;\n        }\n\n        // update the event in the store\n        store[storeIndex] = ev;\n\n        this.callback(this.manager, eventType, {\n            pointers: store,\n            changedPointers: [ev],\n            pointerType: pointerType,\n            srcEvent: ev\n        });\n\n        if (removePointer) {\n            // remove from the store\n            store.splice(storeIndex, 1);\n        }\n    }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    this.started = false;\n\n    Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n    handler: function TEhandler(ev) {\n        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n        // should we handle the touch events?\n        if (type === INPUT_START) {\n            this.started = true;\n        }\n\n        if (!this.started) {\n            return;\n        }\n\n        var touches = normalizeSingleTouches.call(this, ev, type);\n\n        // when done, reset the started state\n        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n            this.started = false;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n    var all = toArray(ev.touches);\n    var changed = toArray(ev.changedTouches);\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n        all = uniqueArray(all.concat(changed), 'identifier', true);\n    }\n\n    return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n    this.evTarget = TOUCH_TARGET_EVENTS;\n    this.targetIds = {};\n\n    Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n    handler: function MTEhandler(ev) {\n        var type = TOUCH_INPUT_MAP[ev.type];\n        var touches = getTouches.call(this, ev, type);\n        if (!touches) {\n            return;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n    var allTouches = toArray(ev.touches);\n    var targetIds = this.targetIds;\n\n    // when there is only one touch, the process can be simplified\n    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n        targetIds[allTouches[0].identifier] = true;\n        return [allTouches, allTouches];\n    }\n\n    var i,\n        targetTouches,\n        changedTouches = toArray(ev.changedTouches),\n        changedTargetTouches = [],\n        target = this.target;\n\n    // get target touches from touches\n    targetTouches = allTouches.filter(function(touch) {\n        return hasParent(touch.target, target);\n    });\n\n    // collect touches\n    if (type === INPUT_START) {\n        i = 0;\n        while (i < targetTouches.length) {\n            targetIds[targetTouches[i].identifier] = true;\n            i++;\n        }\n    }\n\n    // filter changed touches to only contain touches that exist in the collected target ids\n    i = 0;\n    while (i < changedTouches.length) {\n        if (targetIds[changedTouches[i].identifier]) {\n            changedTargetTouches.push(changedTouches[i]);\n        }\n\n        // cleanup removed touches\n        if (type & (INPUT_END | INPUT_CANCEL)) {\n            delete targetIds[changedTouches[i].identifier];\n        }\n        i++;\n    }\n\n    if (!changedTargetTouches.length) {\n        return;\n    }\n\n    return [\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n        changedTargetTouches\n    ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n    Input.apply(this, arguments);\n\n    var handler = bindFn(this.handler, this);\n    this.touch = new TouchInput(this.manager, handler);\n    this.mouse = new MouseInput(this.manager, handler);\n\n    this.primaryTouch = null;\n    this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n    /**\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n    handler: function TMEhandler(manager, inputEvent, inputData) {\n        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n            return;\n        }\n\n        // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n        if (isTouch) {\n            recordTouches.call(this, inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n            return;\n        }\n\n        this.callback(manager, inputEvent, inputData);\n    },\n\n    /**\n     * remove the event listeners\n     */\n    destroy: function destroy() {\n        this.touch.destroy();\n        this.mouse.destroy();\n    }\n});\n\nfunction recordTouches(eventType, eventData) {\n    if (eventType & INPUT_START) {\n        this.primaryTouch = eventData.changedPointers[0].identifier;\n        setLastTouch.call(this, eventData);\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n        setLastTouch.call(this, eventData);\n    }\n}\n\nfunction setLastTouch(eventData) {\n    var touch = eventData.changedPointers[0];\n\n    if (touch.identifier === this.primaryTouch) {\n        var lastTouch = {x: touch.clientX, y: touch.clientY};\n        this.lastTouches.push(lastTouch);\n        var lts = this.lastTouches;\n        var removeLastTouch = function() {\n            var i = lts.indexOf(lastTouch);\n            if (i > -1) {\n                lts.splice(i, 1);\n            }\n        };\n        setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n    }\n}\n\nfunction isSyntheticEvent(eventData) {\n    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n    for (var i = 0; i < this.lastTouches.length; i++) {\n        var t = this.lastTouches[i];\n        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n}\n\nTouchAction.prototype = {\n    /**\n     * set the touchAction value on the element or enable the polyfill\n     * @param {String} value\n     */\n    set: function(value) {\n        // find out the touch-action by the event handlers\n        if (value == TOUCH_ACTION_COMPUTE) {\n            value = this.compute();\n        }\n\n        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n        }\n        this.actions = value.toLowerCase().trim();\n    },\n\n    /**\n     * just re-set the touchAction value\n     */\n    update: function() {\n        this.set(this.manager.options.touchAction);\n    },\n\n    /**\n     * compute the value for the touchAction property based on the recognizer's settings\n     * @returns {String} value\n     */\n    compute: function() {\n        var actions = [];\n        each(this.manager.recognizers, function(recognizer) {\n            if (boolOrFn(recognizer.options.enable, [recognizer])) {\n                actions = actions.concat(recognizer.getTouchAction());\n            }\n        });\n        return cleanTouchActions(actions.join(' '));\n    },\n\n    /**\n     * this method is called on each input cycle and provides the preventing of the browser behavior\n     * @param {Object} input\n     */\n    preventDefaults: function(input) {\n        var srcEvent = input.srcEvent;\n        var direction = input.offsetDirection;\n\n        // if the touch action did prevented once this session\n        if (this.manager.session.prevented) {\n            srcEvent.preventDefault();\n            return;\n        }\n\n        var actions = this.actions;\n        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n        if (hasNone) {\n            //do not prevent defaults if this is a tap gesture\n\n            var isTapPointer = input.pointers.length === 1;\n            var isTapMovement = input.distance < 2;\n            var isTapTouchTime = input.deltaTime < 250;\n\n            if (isTapPointer && isTapMovement && isTapTouchTime) {\n                return;\n            }\n        }\n\n        if (hasPanX && hasPanY) {\n            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n            return;\n        }\n\n        if (hasNone ||\n            (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n            (hasPanX && direction & DIRECTION_VERTICAL)) {\n            return this.preventSrc(srcEvent);\n        }\n    },\n\n    /**\n     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n     * @param {Object} srcEvent\n     */\n    preventSrc: function(srcEvent) {\n        this.manager.session.prevented = true;\n        srcEvent.preventDefault();\n    }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n    // none\n    if (inStr(actions, TOUCH_ACTION_NONE)) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n    // if both pan-x and pan-y are set (different recognizers\n    // for different directions, e.g. horizontal pan but vertical swipe?)\n    // we need none (as otherwise with pan-x pan-y combined none of these\n    // recognizers will work, since the browser would handle all panning\n    if (hasPanX && hasPanY) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    // pan-x OR pan-y\n    if (hasPanX || hasPanY) {\n        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n    }\n\n    // manipulation\n    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n        return TOUCH_ACTION_MANIPULATION;\n    }\n\n    return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n    if (!NATIVE_TOUCH_ACTION) {\n        return false;\n    }\n    var touchMap = {};\n    var cssSupports = window.CSS && window.CSS.supports;\n    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n        // If css.supports is not supported but there is native touch-action assume it supports\n        // all values. This is the case for IE 10 and 11.\n        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n    });\n    return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n    this.options = assign({}, this.defaults, options || {});\n\n    this.id = uniqueId();\n\n    this.manager = null;\n\n    // default is enable true\n    this.options.enable = ifUndefined(this.options.enable, true);\n\n    this.state = STATE_POSSIBLE;\n\n    this.simultaneous = {};\n    this.requireFail = [];\n}\n\nRecognizer.prototype = {\n    /**\n     * @virtual\n     * @type {Object}\n     */\n    defaults: {},\n\n    /**\n     * set options\n     * @param {Object} options\n     * @return {Recognizer}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // also update the touchAction, in case something changed about the directions/enabled state\n        this.manager && this.manager.touchAction.update();\n        return this;\n    },\n\n    /**\n     * recognize simultaneous with an other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    recognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n            return this;\n        }\n\n        var simultaneous = this.simultaneous;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (!simultaneous[otherRecognizer.id]) {\n            simultaneous[otherRecognizer.id] = otherRecognizer;\n            otherRecognizer.recognizeWith(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRecognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        delete this.simultaneous[otherRecognizer.id];\n        return this;\n    },\n\n    /**\n     * recognizer can only run when an other is failing\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    requireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n            return this;\n        }\n\n        var requireFail = this.requireFail;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (inArray(requireFail, otherRecognizer) === -1) {\n            requireFail.push(otherRecognizer);\n            otherRecognizer.requireFailure(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the requireFailure link. it does not remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRequireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        var index = inArray(this.requireFail, otherRecognizer);\n        if (index > -1) {\n            this.requireFail.splice(index, 1);\n        }\n        return this;\n    },\n\n    /**\n     * has require failures boolean\n     * @returns {boolean}\n     */\n    hasRequireFailures: function() {\n        return this.requireFail.length > 0;\n    },\n\n    /**\n     * if the recognizer can recognize simultaneous with an other recognizer\n     * @param {Recognizer} otherRecognizer\n     * @returns {Boolean}\n     */\n    canRecognizeWith: function(otherRecognizer) {\n        return !!this.simultaneous[otherRecognizer.id];\n    },\n\n    /**\n     * You should use `tryEmit` instead of `emit` directly to check\n     * that all the needed recognizers has failed before emitting.\n     * @param {Object} input\n     */\n    emit: function(input) {\n        var self = this;\n        var state = this.state;\n\n        function emit(event) {\n            self.manager.emit(event, input);\n        }\n\n        // 'panstart' and 'panmove'\n        if (state < STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n\n        emit(self.options.event); // simple 'eventName' events\n\n        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n            emit(input.additionalEvent);\n        }\n\n        // panend and pancancel\n        if (state >= STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n    },\n\n    /**\n     * Check that all the require failure recognizers has failed,\n     * if true, it emits a gesture event,\n     * otherwise, setup the state to FAILED.\n     * @param {Object} input\n     */\n    tryEmit: function(input) {\n        if (this.canEmit()) {\n            return this.emit(input);\n        }\n        // it's failing anyway\n        this.state = STATE_FAILED;\n    },\n\n    /**\n     * can we emit?\n     * @returns {boolean}\n     */\n    canEmit: function() {\n        var i = 0;\n        while (i < this.requireFail.length) {\n            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n                return false;\n            }\n            i++;\n        }\n        return true;\n    },\n\n    /**\n     * update the recognizer\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        // make a new copy of the inputData\n        // so we can change the inputData without messing up the other recognizers\n        var inputDataClone = assign({}, inputData);\n\n        // is is enabled and allow recognizing?\n        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n            this.reset();\n            this.state = STATE_FAILED;\n            return;\n        }\n\n        // reset when we've reached the end\n        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n            this.state = STATE_POSSIBLE;\n        }\n\n        this.state = this.process(inputDataClone);\n\n        // the recognizer has recognized a gesture\n        // so trigger an event\n        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n            this.tryEmit(inputDataClone);\n        }\n    },\n\n    /**\n     * return the state of the recognizer\n     * the actual recognizing happens in this method\n     * @virtual\n     * @param {Object} inputData\n     * @returns {Const} STATE\n     */\n    process: function(inputData) { }, // jshint ignore:line\n\n    /**\n     * return the preferred touch-action\n     * @virtual\n     * @returns {Array}\n     */\n    getTouchAction: function() { },\n\n    /**\n     * called when the gesture isn't allowed to recognize\n     * like when another is being recognized or it is disabled\n     * @virtual\n     */\n    reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n    if (state & STATE_CANCELLED) {\n        return 'cancel';\n    } else if (state & STATE_ENDED) {\n        return 'end';\n    } else if (state & STATE_CHANGED) {\n        return 'move';\n    } else if (state & STATE_BEGAN) {\n        return 'start';\n    }\n    return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n    if (direction == DIRECTION_DOWN) {\n        return 'down';\n    } else if (direction == DIRECTION_UP) {\n        return 'up';\n    } else if (direction == DIRECTION_LEFT) {\n        return 'left';\n    } else if (direction == DIRECTION_RIGHT) {\n        return 'right';\n    }\n    return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n    var manager = recognizer.manager;\n    if (manager) {\n        return manager.get(otherRecognizer);\n    }\n    return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n    Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof AttrRecognizer\n     */\n    defaults: {\n        /**\n         * @type {Number}\n         * @default 1\n         */\n        pointers: 1\n    },\n\n    /**\n     * Used to check if it the recognizer receives valid input, like input.distance > 10.\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {Boolean} recognized\n     */\n    attrTest: function(input) {\n        var optionPointers = this.options.pointers;\n        return optionPointers === 0 || input.pointers.length === optionPointers;\n    },\n\n    /**\n     * Process the input and return the state for the recognizer\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {*} State\n     */\n    process: function(input) {\n        var state = this.state;\n        var eventType = input.eventType;\n\n        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n        var isValid = this.attrTest(input);\n\n        // on cancel input and we've recognized before, return STATE_CANCELLED\n        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n            return state | STATE_CANCELLED;\n        } else if (isRecognized || isValid) {\n            if (eventType & INPUT_END) {\n                return state | STATE_ENDED;\n            } else if (!(state & STATE_BEGAN)) {\n                return STATE_BEGAN;\n            }\n            return state | STATE_CHANGED;\n        }\n        return STATE_FAILED;\n    }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n\n    this.pX = null;\n    this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PanRecognizer\n     */\n    defaults: {\n        event: 'pan',\n        threshold: 10,\n        pointers: 1,\n        direction: DIRECTION_ALL\n    },\n\n    getTouchAction: function() {\n        var direction = this.options.direction;\n        var actions = [];\n        if (direction & DIRECTION_HORIZONTAL) {\n            actions.push(TOUCH_ACTION_PAN_Y);\n        }\n        if (direction & DIRECTION_VERTICAL) {\n            actions.push(TOUCH_ACTION_PAN_X);\n        }\n        return actions;\n    },\n\n    directionTest: function(input) {\n        var options = this.options;\n        var hasMoved = true;\n        var distance = input.distance;\n        var direction = input.direction;\n        var x = input.deltaX;\n        var y = input.deltaY;\n\n        // lock to axis?\n        if (!(direction & options.direction)) {\n            if (options.direction & DIRECTION_HORIZONTAL) {\n                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n                hasMoved = x != this.pX;\n                distance = Math.abs(input.deltaX);\n            } else {\n                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n                hasMoved = y != this.pY;\n                distance = Math.abs(input.deltaY);\n            }\n        }\n        input.direction = direction;\n        return hasMoved && distance > options.threshold && direction & options.direction;\n    },\n\n    attrTest: function(input) {\n        return AttrRecognizer.prototype.attrTest.call(this, input) &&\n            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n    },\n\n    emit: function(input) {\n\n        this.pX = input.deltaX;\n        this.pY = input.deltaY;\n\n        var direction = directionStr(input.direction);\n\n        if (direction) {\n            input.additionalEvent = this.options.event + direction;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'pinch',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n    },\n\n    emit: function(input) {\n        if (input.scale !== 1) {\n            var inOut = input.scale < 1 ? 'in' : 'out';\n            input.additionalEvent = this.options.event + inOut;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    this._timer = null;\n    this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PressRecognizer\n     */\n    defaults: {\n        event: 'press',\n        pointers: 1,\n        time: 251, // minimal time of the pointer to be pressed\n        threshold: 9 // a minimal movement is ok, but keep it low\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_AUTO];\n    },\n\n    process: function(input) {\n        var options = this.options;\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTime = input.deltaTime > options.time;\n\n        this._input = input;\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n            this.reset();\n        } else if (input.eventType & INPUT_START) {\n            this.reset();\n            this._timer = setTimeoutContext(function() {\n                this.state = STATE_RECOGNIZED;\n                this.tryEmit();\n            }, options.time, this);\n        } else if (input.eventType & INPUT_END) {\n            return STATE_RECOGNIZED;\n        }\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function(input) {\n        if (this.state !== STATE_RECOGNIZED) {\n            return;\n        }\n\n        if (input && (input.eventType & INPUT_END)) {\n            this.manager.emit(this.options.event + 'up', input);\n        } else {\n            this._input.timeStamp = now();\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof RotateRecognizer\n     */\n    defaults: {\n        event: 'rotate',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n    }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof SwipeRecognizer\n     */\n    defaults: {\n        event: 'swipe',\n        threshold: 10,\n        velocity: 0.3,\n        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n        pointers: 1\n    },\n\n    getTouchAction: function() {\n        return PanRecognizer.prototype.getTouchAction.call(this);\n    },\n\n    attrTest: function(input) {\n        var direction = this.options.direction;\n        var velocity;\n\n        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n            velocity = input.overallVelocity;\n        } else if (direction & DIRECTION_HORIZONTAL) {\n            velocity = input.overallVelocityX;\n        } else if (direction & DIRECTION_VERTICAL) {\n            velocity = input.overallVelocityY;\n        }\n\n        return this._super.attrTest.call(this, input) &&\n            direction & input.offsetDirection &&\n            input.distance > this.options.threshold &&\n            input.maxPointers == this.options.pointers &&\n            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n    },\n\n    emit: function(input) {\n        var direction = directionStr(input.offsetDirection);\n        if (direction) {\n            this.manager.emit(this.options.event + direction, input);\n        }\n\n        this.manager.emit(this.options.event, input);\n    }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    // previous time and center,\n    // used for tap counting\n    this.pTime = false;\n    this.pCenter = false;\n\n    this._timer = null;\n    this._input = null;\n    this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'tap',\n        pointers: 1,\n        taps: 1,\n        interval: 300, // max time between the multi-tap taps\n        time: 250, // max time of the pointer to be down (like finger on the screen)\n        threshold: 9, // a minimal movement is ok, but keep it low\n        posThreshold: 10 // a multi-tap can be a bit off the initial position\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_MANIPULATION];\n    },\n\n    process: function(input) {\n        var options = this.options;\n\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTouchTime = input.deltaTime < options.time;\n\n        this.reset();\n\n        if ((input.eventType & INPUT_START) && (this.count === 0)) {\n            return this.failTimeout();\n        }\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (validMovement && validTouchTime && validPointers) {\n            if (input.eventType != INPUT_END) {\n                return this.failTimeout();\n            }\n\n            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n            this.pTime = input.timeStamp;\n            this.pCenter = input.center;\n\n            if (!validMultiTap || !validInterval) {\n                this.count = 1;\n            } else {\n                this.count += 1;\n            }\n\n            this._input = input;\n\n            // if tap count matches we have recognized it,\n            // else it has began recognizing...\n            var tapCount = this.count % options.taps;\n            if (tapCount === 0) {\n                // no failing requirements, immediately trigger the tap event\n                // or wait as long as the multitap interval to trigger\n                if (!this.hasRequireFailures()) {\n                    return STATE_RECOGNIZED;\n                } else {\n                    this._timer = setTimeoutContext(function() {\n                        this.state = STATE_RECOGNIZED;\n                        this.tryEmit();\n                    }, options.interval, this);\n                    return STATE_BEGAN;\n                }\n            }\n        }\n        return STATE_FAILED;\n    },\n\n    failTimeout: function() {\n        this._timer = setTimeoutContext(function() {\n            this.state = STATE_FAILED;\n        }, this.options.interval, this);\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function() {\n        if (this.state == STATE_RECOGNIZED) {\n            this._input.tapCount = this.count;\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n    options = options || {};\n    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n    return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n    /**\n     * set if DOM events are being triggered.\n     * But this is slower and unused by simple implementations, so disabled by default.\n     * @type {Boolean}\n     * @default false\n     */\n    domEvents: false,\n\n    /**\n     * The value for the touchAction property/fallback.\n     * When set to `compute` it will magically set the correct value based on the added recognizers.\n     * @type {String}\n     * @default compute\n     */\n    touchAction: TOUCH_ACTION_COMPUTE,\n\n    /**\n     * @type {Boolean}\n     * @default true\n     */\n    enable: true,\n\n    /**\n     * EXPERIMENTAL FEATURE -- can be removed/changed\n     * Change the parent input target element.\n     * If Null, then it is being set the to main element.\n     * @type {Null|EventTarget}\n     * @default null\n     */\n    inputTarget: null,\n\n    /**\n     * force an input class\n     * @type {Null|Function}\n     * @default null\n     */\n    inputClass: null,\n\n    /**\n     * Default recognizer setup when calling `Hammer()`\n     * When creating a new Manager these will be skipped.\n     * @type {Array}\n     */\n    preset: [\n        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n        [RotateRecognizer, {enable: false}],\n        [PinchRecognizer, {enable: false}, ['rotate']],\n        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n        [TapRecognizer],\n        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n        [PressRecognizer]\n    ],\n\n    /**\n     * Some CSS properties can be used to improve the working of Hammer.\n     * Add them to this method and they will be set when creating a new Manager.\n     * @namespace\n     */\n    cssProps: {\n        /**\n         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userSelect: 'none',\n\n        /**\n         * Disable the Windows Phone grippers when pressing an element.\n         * @type {String}\n         * @default 'none'\n         */\n        touchSelect: 'none',\n\n        /**\n         * Disables the default callout shown when you touch and hold a touch target.\n         * On iOS, when you touch and hold a touch target such as a link, Safari displays\n         * a callout containing information about the link. This property allows you to disable that callout.\n         * @type {String}\n         * @default 'none'\n         */\n        touchCallout: 'none',\n\n        /**\n         * Specifies whether zooming is enabled. Used by IE10>\n         * @type {String}\n         * @default 'none'\n         */\n        contentZooming: 'none',\n\n        /**\n         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userDrag: 'none',\n\n        /**\n         * Overrides the highlight color shown when the user taps a link or a JavaScript\n         * clickable element in iOS. This property obeys the alpha value, if specified.\n         * @type {String}\n         * @default 'rgba(0,0,0,0)'\n         */\n        tapHighlightColor: 'rgba(0,0,0,0)'\n    }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n    this.options = assign({}, Hammer.defaults, options || {});\n\n    this.options.inputTarget = this.options.inputTarget || element;\n\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n\n    toggleCssProps(this, true);\n\n    each(this.options.recognizers, function(item) {\n        var recognizer = this.add(new (item[0])(item[1]));\n        item[2] && recognizer.recognizeWith(item[2]);\n        item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n}\n\nManager.prototype = {\n    /**\n     * set options\n     * @param {Object} options\n     * @returns {Manager}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // Options that need a little more setup\n        if (options.touchAction) {\n            this.touchAction.update();\n        }\n        if (options.inputTarget) {\n            // Clean up existing event listeners and reinitialize\n            this.input.destroy();\n            this.input.target = options.inputTarget;\n            this.input.init();\n        }\n        return this;\n    },\n\n    /**\n     * stop recognizing for this session.\n     * This session will be discarded, when a new [input]start event is fired.\n     * When forced, the recognizer cycle is stopped immediately.\n     * @param {Boolean} [force]\n     */\n    stop: function(force) {\n        this.session.stopped = force ? FORCED_STOP : STOP;\n    },\n\n    /**\n     * run the recognizers!\n     * called by the inputHandler function on every movement of the pointers (touches)\n     * it walks through all the recognizers and tries to detect the gesture that is being made\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        var session = this.session;\n        if (session.stopped) {\n            return;\n        }\n\n        // run the touch-action polyfill\n        this.touchAction.preventDefaults(inputData);\n\n        var recognizer;\n        var recognizers = this.recognizers;\n\n        // this holds the recognizer that is being recognized.\n        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n        // if no recognizer is detecting a thing, it is set to `null`\n        var curRecognizer = session.curRecognizer;\n\n        // reset when the last recognizer is recognized\n        // or when we're in a new session\n        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n            curRecognizer = session.curRecognizer = null;\n        }\n\n        var i = 0;\n        while (i < recognizers.length) {\n            recognizer = recognizers[i];\n\n            // find out if we are allowed try to recognize the input for this one.\n            // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n            //      that is being recognized.\n            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n            //      this can be setup with the `recognizeWith()` method on the recognizer.\n            if (session.stopped !== FORCED_STOP && ( // 1\n                    !curRecognizer || recognizer == curRecognizer || // 2\n                    recognizer.canRecognizeWith(curRecognizer))) { // 3\n                recognizer.recognize(inputData);\n            } else {\n                recognizer.reset();\n            }\n\n            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n            // current active recognizer. but only if we don't already have an active recognizer\n            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n                curRecognizer = session.curRecognizer = recognizer;\n            }\n            i++;\n        }\n    },\n\n    /**\n     * get a recognizer by its event name.\n     * @param {Recognizer|String} recognizer\n     * @returns {Recognizer|Null}\n     */\n    get: function(recognizer) {\n        if (recognizer instanceof Recognizer) {\n            return recognizer;\n        }\n\n        var recognizers = this.recognizers;\n        for (var i = 0; i < recognizers.length; i++) {\n            if (recognizers[i].options.event == recognizer) {\n                return recognizers[i];\n            }\n        }\n        return null;\n    },\n\n    /**\n     * add a recognizer to the manager\n     * existing recognizers with the same event name will be removed\n     * @param {Recognizer} recognizer\n     * @returns {Recognizer|Manager}\n     */\n    add: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'add', this)) {\n            return this;\n        }\n\n        // remove existing\n        var existing = this.get(recognizer.options.event);\n        if (existing) {\n            this.remove(existing);\n        }\n\n        this.recognizers.push(recognizer);\n        recognizer.manager = this;\n\n        this.touchAction.update();\n        return recognizer;\n    },\n\n    /**\n     * remove a recognizer by name or instance\n     * @param {Recognizer|String} recognizer\n     * @returns {Manager}\n     */\n    remove: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'remove', this)) {\n            return this;\n        }\n\n        recognizer = this.get(recognizer);\n\n        // let's make sure this recognizer exists\n        if (recognizer) {\n            var recognizers = this.recognizers;\n            var index = inArray(recognizers, recognizer);\n\n            if (index !== -1) {\n                recognizers.splice(index, 1);\n                this.touchAction.update();\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * bind event\n     * @param {String} events\n     * @param {Function} handler\n     * @returns {EventEmitter} this\n     */\n    on: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n        if (handler === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            handlers[event] = handlers[event] || [];\n            handlers[event].push(handler);\n        });\n        return this;\n    },\n\n    /**\n     * unbind event, leave emit blank to remove all handlers\n     * @param {String} events\n     * @param {Function} [handler]\n     * @returns {EventEmitter} this\n     */\n    off: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            if (!handler) {\n                delete handlers[event];\n            } else {\n                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n            }\n        });\n        return this;\n    },\n\n    /**\n     * emit event to the listeners\n     * @param {String} event\n     * @param {Object} data\n     */\n    emit: function(event, data) {\n        // we also want to trigger dom events\n        if (this.options.domEvents) {\n            triggerDomEvent(event, data);\n        }\n\n        // no handlers, so skip it all\n        var handlers = this.handlers[event] && this.handlers[event].slice();\n        if (!handlers || !handlers.length) {\n            return;\n        }\n\n        data.type = event;\n        data.preventDefault = function() {\n            data.srcEvent.preventDefault();\n        };\n\n        var i = 0;\n        while (i < handlers.length) {\n            handlers[i](data);\n            i++;\n        }\n    },\n\n    /**\n     * destroy the manager and unbinds all events\n     * it doesn't unbind dom events, that is the user own responsibility\n     */\n    destroy: function() {\n        this.element && toggleCssProps(this, false);\n\n        this.handlers = {};\n        this.session = {};\n        this.input.destroy();\n        this.element = null;\n    }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n    var element = manager.element;\n    if (!element.style) {\n        return;\n    }\n    var prop;\n    each(manager.options.cssProps, function(value, name) {\n        prop = prefixed(element.style, name);\n        if (add) {\n            manager.oldCssProps[prop] = element.style[prop];\n            element.style[prop] = value;\n        } else {\n            element.style[prop] = manager.oldCssProps[prop] || '';\n        }\n    });\n    if (!add) {\n        manager.oldCssProps = {};\n    }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n    var gestureEvent = document.createEvent('Event');\n    gestureEvent.initEvent(event, true, true);\n    gestureEvent.gesture = data;\n    data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n    INPUT_START: INPUT_START,\n    INPUT_MOVE: INPUT_MOVE,\n    INPUT_END: INPUT_END,\n    INPUT_CANCEL: INPUT_CANCEL,\n\n    STATE_POSSIBLE: STATE_POSSIBLE,\n    STATE_BEGAN: STATE_BEGAN,\n    STATE_CHANGED: STATE_CHANGED,\n    STATE_ENDED: STATE_ENDED,\n    STATE_RECOGNIZED: STATE_RECOGNIZED,\n    STATE_CANCELLED: STATE_CANCELLED,\n    STATE_FAILED: STATE_FAILED,\n\n    DIRECTION_NONE: DIRECTION_NONE,\n    DIRECTION_LEFT: DIRECTION_LEFT,\n    DIRECTION_RIGHT: DIRECTION_RIGHT,\n    DIRECTION_UP: DIRECTION_UP,\n    DIRECTION_DOWN: DIRECTION_DOWN,\n    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n    DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n    DIRECTION_ALL: DIRECTION_ALL,\n\n    Manager: Manager,\n    Input: Input,\n    TouchAction: TouchAction,\n\n    TouchInput: TouchInput,\n    MouseInput: MouseInput,\n    PointerEventInput: PointerEventInput,\n    TouchMouseInput: TouchMouseInput,\n    SingleTouchInput: SingleTouchInput,\n\n    Recognizer: Recognizer,\n    AttrRecognizer: AttrRecognizer,\n    Tap: TapRecognizer,\n    Pan: PanRecognizer,\n    Swipe: SwipeRecognizer,\n    Pinch: PinchRecognizer,\n    Rotate: RotateRecognizer,\n    Press: PressRecognizer,\n\n    on: addEventListeners,\n    off: removeEventListeners,\n    each: each,\n    merge: merge,\n    extend: extend,\n    assign: assign,\n    inherit: inherit,\n    bindFn: bindFn,\n    prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n//  style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n    define(function() {\n        return Hammer;\n    });\n} else if (typeof module != 'undefined' && module.exports) {\n    module.exports = Hammer;\n} else {\n    window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n", "/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n", "/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n", "import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n  return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n", "import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n", "import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, vScale, _parsed} = meta;\n    const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n      if (spanGaps) {\n        const distanceToDefinedLo = (_parsed\n          .slice(0, start + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        start -= Math.max(0, distanceToDefinedLo);\n      }\n      start = _limitValue(start, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n      let end = Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n      if (spanGaps) {\n        const distanceToDefinedHi = (_parsed\n          .slice(end - 1)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        end += Math.max(0, distanceToDefinedHi);\n      }\n      count = _limitValue(end, start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n", "import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n", "import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n", "const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n", "export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n", "\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n", "import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n", "import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n", "import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n", "import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  if (!ctx && !canvas) {\n    return;\n  }\n\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n", "import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n", "import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n", "import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart | PrivateChart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart | PrivateChart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = round1(chart.height * pixelRatio);\n  const deviceWidth = round1(chart.width * pixelRatio);\n\n  (chart as PrivateChart).height = round1(chart.height);\n  (chart as PrivateChart).width = round1(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    if (_isDomSupported()) {\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    }\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n", "import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n", "export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n", "import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n", "import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n  const clip = meta._clip;\n  if (clip.disabled) {\n    return false;\n  }\n  const area = getDatasetArea(meta, chart.chartArea);\n\n  return {\n    left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n    right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n    top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n    bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n  };\n}\n", "import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n", "import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n", "import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n", "import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  let found = false;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      found = true;\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n\n  if (!found && !options.all) {\n    return 0;\n  }\n\n  return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n  const {iScale, vScale} = meta;\n  const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n  const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      [iAxisKey]: key,\n      [vAxisKey]: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      const meta = this._cachedMeta;\n      this._data = convertObjectDataToArray(data, meta);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n      meta._stacked = isStacked(meta.vScale, meta);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n    const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n    const skipNull = (meta) => {\n      const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  _getAxisCount() {\n    return this._getAxis().length;\n  }\n\n  getFirstScaleIdForIndexAxis() {\n    const scales = this.chart.scales;\n    const indexScaleId = this.chart.options.indexAxis;\n    return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n  }\n\n  _getAxis() {\n    const axis = {};\n    const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n    for (const dataset of this.chart.data.datasets) {\n      axis[valueOrDefault(\n        this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n      )] = true;\n    }\n    return Object.keys(axis);\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    const axisCount = this._getAxisCount();\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n      const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n      const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            const {labels: {pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n            if (data.labels.length && data.datasets.length) {\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  fontColor: color,\n                  hidden: !chart.getDataVisibility(i),\n                  lineDash: style.borderDash,\n                  lineDashOffset: style.borderDashOffset,\n                  lineJoin: style.borderJoinStyle,\n                  lineWidth: style.borderWidth,\n                  strokeStyle: style.borderColor,\n                  textAlign: textAlign,\n                  pointStyle: pointStyle,\n                  borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n", "import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n", "/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: string): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options?: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<TimeUnit | 'datetime', string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase as {\n    new (options?: AnyObject): DateAdapter;\n    override<T extends AnyObject = AnyObject>(\n      members: Partial<Omit<DateAdapter<T>, 'options'>>\n    ): void;\n  }\n};\n", "import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      const result = lookupMethod(data, axis, value);\n      if (spanGaps) {\n        const {vScale} = controller._cachedMeta;\n        const {_parsed} = metaset;\n\n        const distanceToDefinedLo = (_parsed\n          .slice(0, result.lo + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.lo -= Math.max(0, distanceToDefinedLo);\n\n        const distanceToDefinedHi = (_parsed\n          .slice(result.hi)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.hi += Math.max(0, distanceToDefinedHi);\n      }\n      return result;\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n", "import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n", "\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n", "/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n", "/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  if (node) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction removeListener(chart, type, listener) {\n  if (chart && chart.canvas) {\n    chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = canvas && _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n", "import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n", "import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n", "import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n", "import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        case 'inner':\n          if (i === ilen - 1) {\n            left -= width;\n          } else if (i > 0) {\n            left -= width / 2;\n          }\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n", "import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n", "import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n", "import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = undefined;\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    if (this._init === undefined) { // Do not trigger events before install\n      return;\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n      this._init = undefined; // Do not trigger events after uninstall\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n", "import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n", "import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      // Unset pending resize request now to avoid possible recursion within _resize\n      this._resizeBeforeDraw = null;\n      this._resize(width, height);\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    // @ts-expect-error\n    const clip = getDatasetClipArea(this, meta);\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (clip) {\n      clipArea(ctx, clip);\n    }\n\n    meta.controller.draw();\n\n    if (clip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the event inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n", "import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n  if (innerRadius > 0) {\n    const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n  } else {\n    const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n    if (borderJoinStyle === 'round') {\n      ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n    } else if (borderJoinStyle === 'bevel') {\n      const r = 2 * clipWidth * clipWidth;\n      const endX = -r * Math.cos(endAngle + PI / 2) + x;\n      const endY = -r * Math.sin(endAngle + PI / 2) + y;\n      const startX = r * Math.cos(startAngle + PI / 2) + x;\n      const startY = r * Math.sin(startAngle + PI / 2) + y;\n      ctx.lineTo(endX, endY);\n      ctx.lineTo(startX, startY);\n    }\n  }\n  ctx.closePath();\n\n  ctx.moveTo(0, 0);\n  ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n  ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n    clipSelf(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n    selfJoin: false,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n    const betweenAngles = _circumference >= TAU || nonZeroBetween;\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n", "import {DoughnutController, PolarAreaController, defaults} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nfunction containsDefaultColorsDefenitions() {\n  return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    const containsColorDefenition = (\n      containsColorsDefinitions(datasets) ||\n      containsColorsDefinition(chartOptions) ||\n      (elements && containsColorsDefinitions(elements)) ||\n      containsDefaultColorsDefenitions());\n\n    if (!options.forceOverride && containsColorDefenition) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n", "import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n", "import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n", "import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of a segment -> need to add another point before this,\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of a segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n", "import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n", "import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n", "import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {chart, index, line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  const meta = chart.getDatasetMeta(index);\n  const clip = getDatasetClipArea(chart, meta);\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale, clip} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  let fillColor = below;\n  if (below !== above) {\n    if (property === 'x') {\n      clipVertical(ctx, target, area.top);\n      fill(ctx, {line, target, color: above, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipVertical(ctx, target, area.bottom);\n    } else if (property === 'y') {\n      clipHorizontal(ctx, target, area.left);\n      fill(ctx, {line, target, color: below, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipHorizontal(ctx, target, area.right);\n      fillColor = above;\n    }\n  }\n  fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(clipX, firstPoint.y);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(clipX, lastPoint.y);\n    }\n  }\n\n  ctx.lineTo(clipX, target.first().y);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale, clip} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n  const chartArea = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n\n  if (property === 'x' || property === 'y') {\n    let left, top, right, bottom;\n\n    if (property === 'x') {\n      left = start;\n      top = chartArea.top;\n      right = end;\n      bottom = chartArea.bottom;\n    } else {\n      left = chartArea.left;\n      top = start;\n      right = chartArea.right;\n      bottom = end;\n    }\n\n    ctx.beginPath();\n\n    if (clip) {\n      left = Math.max(left, clip.left);\n      right = Math.min(right, clip.right);\n      top = Math.max(top, clip.top);\n      bottom = Math.min(bottom, clip.bottom);\n    }\n\n    ctx.rect(left, top, right - left, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n", "/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n", "import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n", "import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let xSet = new Set();\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        xSet.add(pos.x);\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n    if (count === 0 || xSet.size === 0) {\n      return false;\n    }\n\n    const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n    return {\n      x: xAverage,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      // But make sure that active elements are still valid.\n      return lastActive.filter(i =>\n        this.chart.data.datasets[i.datasetIndex] &&\n        this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n      );\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n", "import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n", "import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n", "import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n", "import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n", "import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash || []);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0 || (index === 0 && this.min < 0)) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if ((index === 0 && this.min >= 0) && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n", "import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n", "import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n", "export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n  controllers,\n  elements,\n  plugins,\n  scales,\n};\n\nexport const registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n", "import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n", "/*!\n* chartjs-plugin-zoom v2.2.0\n* https://www.chartjs.org/chartjs-plugin-zoom/2.2.0/\n * (c) 2016-2024 chartjs-plugin-zoom Contributors\n * Released under the MIT License\n */\nimport Hammer from 'hammerjs';\nimport { each, valueOrDefault, almostEquals, callback, sign, getRelativePosition, _isPointInArea } from 'chart.js/helpers';\n\nconst getModifierKey = opts => opts && opts.enabled && opts.modifierKey;\nconst keyPressed = (key, event) => key && event[key + 'Key'];\nconst keyNotPressed = (key, event) => key && !event[key + 'Key'];\nfunction directionEnabled(mode, dir, chart) {\n  if (mode === undefined) {\n    return true;\n  } else if (typeof mode === 'string') {\n    return mode.indexOf(dir) !== -1;\n  } else if (typeof mode === 'function') {\n    return mode({chart}).indexOf(dir) !== -1;\n  }\n  return false;\n}\nfunction directionsEnabled(mode, chart) {\n  if (typeof mode === 'function') {\n    mode = mode({chart});\n  }\n  if (typeof mode === 'string') {\n    return {x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1};\n  }\n  return {x: false, y: false};\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function() {\n    clearTimeout(timeout);\n    timeout = setTimeout(fn, delay);\n    return delay;\n  };\n}\nfunction getScaleUnderPoint({x, y}, chart) {\n  const scales = chart.scales;\n  const scaleIds = Object.keys(scales);\n  for (let i = 0; i < scaleIds.length; i++) {\n    const scale = scales[scaleIds[i]];\n    if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n      return scale;\n    }\n  }\n  return null;\n}\nfunction getEnabledScalesByPoint(options, point, chart) {\n  const {mode = 'xy', scaleMode, overScaleMode} = options || {};\n  const scale = getScaleUnderPoint(point, chart);\n  const enabled = directionsEnabled(mode, chart);\n  const scaleEnabled = directionsEnabled(scaleMode, chart);\n  if (overScaleMode) {\n    const overScaleEnabled = directionsEnabled(overScaleMode, chart);\n    for (const axis of ['x', 'y']) {\n      if (overScaleEnabled[axis]) {\n        scaleEnabled[axis] = enabled[axis];\n        enabled[axis] = false;\n      }\n    }\n  }\n  if (scale && scaleEnabled[scale.axis]) {\n    return [scale];\n  }\n  const enabledScales = [];\n  each(chart.scales, function(scaleItem) {\n    if (enabled[scaleItem.axis]) {\n      enabledScales.push(scaleItem);\n    }\n  });\n  return enabledScales;\n}\n\nconst chartStates = new WeakMap();\nfunction getState(chart) {\n  let state = chartStates.get(chart);\n  if (!state) {\n    state = {\n      originalScaleLimits: {},\n      updatedScaleLimits: {},\n      handlers: {},\n      panDelta: {},\n      dragging: false,\n      panning: false\n    };\n    chartStates.set(chart, state);\n  }\n  return state;\n}\nfunction removeState(chart) {\n  chartStates.delete(chart);\n}\n\nfunction zoomDelta(val, min, range, newRange) {\n  const minPercent = Math.max(0, Math.min(1, (val - min) / range || 0));\n  const maxPercent = 1 - minPercent;\n  return {\n    min: newRange * minPercent,\n    max: newRange * maxPercent\n  };\n}\nfunction getValueAtPoint(scale, point) {\n  const pixel = scale.isHorizontal() ? point.x : point.y;\n  return scale.getValueForPixel(pixel);\n}\nfunction linearZoomDelta(scale, zoom, center) {\n  const range = scale.max - scale.min;\n  const newRange = range * (zoom - 1);\n  const centerValue = getValueAtPoint(scale, center);\n  return zoomDelta(centerValue, scale.min, range, newRange);\n}\nfunction logarithmicZoomRange(scale, zoom, center) {\n  const centerValue = getValueAtPoint(scale, center);\n  if (centerValue === undefined) {\n    return {min: scale.min, max: scale.max};\n  }\n  const logMin = Math.log10(scale.min);\n  const logMax = Math.log10(scale.max);\n  const logCenter = Math.log10(centerValue);\n  const logRange = logMax - logMin;\n  const newLogRange = logRange * (zoom - 1);\n  const delta = zoomDelta(logCenter, logMin, logRange, newLogRange);\n  return {\n    min: Math.pow(10, logMin + delta.min),\n    max: Math.pow(10, logMax - delta.max),\n  };\n}\nfunction getScaleLimits(scale, limits) {\n  return limits && (limits[scale.id] || limits[scale.axis]) || {};\n}\nfunction getLimit(state, scale, scaleLimits, prop, fallback) {\n  let limit = scaleLimits[prop];\n  if (limit === 'original') {\n    const original = state.originalScaleLimits[scale.id][prop];\n    limit = valueOrDefault(original.options, original.scale);\n  }\n  return valueOrDefault(limit, fallback);\n}\nfunction linearRange(scale, pixel0, pixel1) {\n  const v0 = scale.getValueForPixel(pixel0);\n  const v1 = scale.getValueForPixel(pixel1);\n  return {\n    min: Math.min(v0, v1),\n    max: Math.max(v0, v1)\n  };\n}\nfunction fixRange(range, {min, max, minLimit, maxLimit}, originalLimits) {\n  const offset = (range - max + min) / 2;\n  min -= offset;\n  max += offset;\n  const origMin = originalLimits.min.options ?? originalLimits.min.scale;\n  const origMax = originalLimits.max.options ?? originalLimits.max.scale;\n  const epsilon = range / 1e6;\n  if (almostEquals(min, origMin, epsilon)) {\n    min = origMin;\n  }\n  if (almostEquals(max, origMax, epsilon)) {\n    max = origMax;\n  }\n  if (min < minLimit) {\n    min = minLimit;\n    max = Math.min(minLimit + range, maxLimit);\n  } else if (max > maxLimit) {\n    max = maxLimit;\n    min = Math.max(maxLimit - range, minLimit);\n  }\n  return {min, max};\n}\nfunction updateRange(scale, {min, max}, limits, zoom = false) {\n  const state = getState(scale.chart);\n  const {options: scaleOpts} = scale;\n  const scaleLimits = getScaleLimits(scale, limits);\n  const {minRange = 0} = scaleLimits;\n  const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity);\n  const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity);\n  if (zoom === 'pan' && (min < minLimit || max > maxLimit)) {\n    return true;\n  }\n  const scaleRange = scale.max - scale.min;\n  const range = zoom ? Math.max(max - min, minRange) : scaleRange;\n  if (zoom && range === minRange && scaleRange <= minRange) {\n    return true;\n  }\n  const newRange = fixRange(range, {min, max, minLimit, maxLimit}, state.originalScaleLimits[scale.id]);\n  scaleOpts.min = newRange.min;\n  scaleOpts.max = newRange.max;\n  state.updatedScaleLimits[scale.id] = newRange;\n  return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max;\n}\nfunction zoomNumericalScale(scale, zoom, center, limits) {\n  const delta = linearZoomDelta(scale, zoom, center);\n  const newRange = {min: scale.min + delta.min, max: scale.max - delta.max};\n  return updateRange(scale, newRange, limits, true);\n}\nfunction zoomLogarithmicScale(scale, zoom, center, limits) {\n  const newRange = logarithmicZoomRange(scale, zoom, center);\n  return updateRange(scale, newRange, limits, true);\n}\nfunction zoomRectNumericalScale(scale, from, to, limits) {\n  updateRange(scale, linearRange(scale, from, to), limits, true);\n}\nconst integerChange = (v) => v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1);\nfunction existCategoryFromMaxZoom(scale) {\n  const labels = scale.getLabels();\n  const maxIndex = labels.length - 1;\n  if (scale.min > 0) {\n    scale.min -= 1;\n  }\n  if (scale.max < maxIndex) {\n    scale.max += 1;\n  }\n}\nfunction zoomCategoryScale(scale, zoom, center, limits) {\n  const delta = linearZoomDelta(scale, zoom, center);\n  if (scale.min === scale.max && zoom < 1) {\n    existCategoryFromMaxZoom(scale);\n  }\n  const newRange = {min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max)};\n  return updateRange(scale, newRange, limits, true);\n}\nfunction scaleLength(scale) {\n  return scale.isHorizontal() ? scale.width : scale.height;\n}\nfunction panCategoryScale(scale, delta, limits) {\n  const labels = scale.getLabels();\n  const lastLabelIndex = labels.length - 1;\n  let {min, max} = scale;\n  const range = Math.max(max - min, 1);\n  const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10));\n  const stepSize = Math.round(Math.abs(delta / stepDelta));\n  let applied;\n  if (delta < -stepDelta) {\n    max = Math.min(max + stepSize, lastLabelIndex);\n    min = range === 1 ? max : max - range;\n    applied = max === lastLabelIndex;\n  } else if (delta > stepDelta) {\n    min = Math.max(0, min - stepSize);\n    max = range === 1 ? min : min + range;\n    applied = min === 0;\n  }\n  return updateRange(scale, {min, max}, limits) || applied;\n}\nconst OFFSETS = {\n  second: 500,\n  minute: 30 * 1000,\n  hour: 30 * 60 * 1000,\n  day: 12 * 60 * 60 * 1000,\n  week: 3.5 * 24 * 60 * 60 * 1000,\n  month: 15 * 24 * 60 * 60 * 1000,\n  quarter: 60 * 24 * 60 * 60 * 1000,\n  year: 182 * 24 * 60 * 60 * 1000\n};\nfunction panNumericalScale(scale, delta, limits, pan = false) {\n  const {min: prevStart, max: prevEnd, options} = scale;\n  const round = options.time && options.time.round;\n  const offset = OFFSETS[round] || 0;\n  const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta);\n  const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta);\n  if (isNaN(newMin) || isNaN(newMax)) {\n    return true;\n  }\n  return updateRange(scale, {min: newMin, max: newMax}, limits, pan ? 'pan' : false);\n}\nfunction panNonLinearScale(scale, delta, limits) {\n  return panNumericalScale(scale, delta, limits, true);\n}\nconst zoomFunctions = {\n  category: zoomCategoryScale,\n  default: zoomNumericalScale,\n  logarithmic: zoomLogarithmicScale,\n};\nconst zoomRectFunctions = {\n  default: zoomRectNumericalScale,\n};\nconst panFunctions = {\n  category: panCategoryScale,\n  default: panNumericalScale,\n  logarithmic: panNonLinearScale,\n  timeseries: panNonLinearScale,\n};\n\nfunction shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits) {\n  const {id, options: {min, max}} = scale;\n  if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n    return true;\n  }\n  const previous = updatedScaleLimits[id];\n  return previous.min !== min || previous.max !== max;\n}\nfunction removeMissingScales(limits, scales) {\n  each(limits, (opt, key) => {\n    if (!scales[key]) {\n      delete limits[key];\n    }\n  });\n}\nfunction storeOriginalScaleLimits(chart, state) {\n  const {scales} = chart;\n  const {originalScaleLimits, updatedScaleLimits} = state;\n  each(scales, function(scale) {\n    if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n      originalScaleLimits[scale.id] = {\n        min: {scale: scale.min, options: scale.options.min},\n        max: {scale: scale.max, options: scale.options.max},\n      };\n    }\n  });\n  removeMissingScales(originalScaleLimits, scales);\n  removeMissingScales(updatedScaleLimits, scales);\n  return originalScaleLimits;\n}\nfunction doZoom(scale, amount, center, limits) {\n  const fn = zoomFunctions[scale.type] || zoomFunctions.default;\n  callback(fn, [scale, amount, center, limits]);\n}\nfunction doZoomRect(scale, from, to, limits) {\n  const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default;\n  callback(fn, [scale, from, to, limits]);\n}\nfunction getCenter(chart) {\n  const ca = chart.chartArea;\n  return {\n    x: (ca.left + ca.right) / 2,\n    y: (ca.top + ca.bottom) / 2,\n  };\n}\nfunction zoom(chart, amount, transition = 'none', trigger = 'api') {\n  const {x = 1, y = 1, focalPoint = getCenter(chart)} = typeof amount === 'number' ? {x: amount, y: amount} : amount;\n  const state = getState(chart);\n  const {options: {limits, zoom: zoomOptions}} = state;\n  storeOriginalScaleLimits(chart, state);\n  const xEnabled = x !== 1;\n  const yEnabled = y !== 1;\n  const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart);\n  each(enabledScales || chart.scales, function(scale) {\n    if (scale.isHorizontal() && xEnabled) {\n      doZoom(scale, x, focalPoint, limits);\n    } else if (!scale.isHorizontal() && yEnabled) {\n      doZoom(scale, y, focalPoint, limits);\n    }\n  });\n  chart.update(transition);\n  callback(zoomOptions.onZoom, [{chart, trigger}]);\n}\nfunction zoomRect(chart, p0, p1, transition = 'none', trigger = 'api') {\n  const state = getState(chart);\n  const {options: {limits, zoom: zoomOptions}} = state;\n  const {mode = 'xy'} = zoomOptions;\n  storeOriginalScaleLimits(chart, state);\n  const xEnabled = directionEnabled(mode, 'x', chart);\n  const yEnabled = directionEnabled(mode, 'y', chart);\n  each(chart.scales, function(scale) {\n    if (scale.isHorizontal() && xEnabled) {\n      doZoomRect(scale, p0.x, p1.x, limits);\n    } else if (!scale.isHorizontal() && yEnabled) {\n      doZoomRect(scale, p0.y, p1.y, limits);\n    }\n  });\n  chart.update(transition);\n  callback(zoomOptions.onZoom, [{chart, trigger}]);\n}\nfunction zoomScale(chart, scaleId, range, transition = 'none', trigger = 'api') {\n  const state = getState(chart);\n  storeOriginalScaleLimits(chart, state);\n  const scale = chart.scales[scaleId];\n  updateRange(scale, range, undefined, true);\n  chart.update(transition);\n  callback(state.options.zoom?.onZoom, [{chart, trigger}]);\n}\nfunction resetZoom(chart, transition = 'default') {\n  const state = getState(chart);\n  const originalScaleLimits = storeOriginalScaleLimits(chart, state);\n  each(chart.scales, function(scale) {\n    const scaleOptions = scale.options;\n    if (originalScaleLimits[scale.id]) {\n      scaleOptions.min = originalScaleLimits[scale.id].min.options;\n      scaleOptions.max = originalScaleLimits[scale.id].max.options;\n    } else {\n      delete scaleOptions.min;\n      delete scaleOptions.max;\n    }\n    delete state.updatedScaleLimits[scale.id];\n  });\n  chart.update(transition);\n  callback(state.options.zoom.onZoomComplete, [{chart}]);\n}\nfunction getOriginalRange(state, scaleId) {\n  const original = state.originalScaleLimits[scaleId];\n  if (!original) {\n    return;\n  }\n  const {min, max} = original;\n  return valueOrDefault(max.options, max.scale) - valueOrDefault(min.options, min.scale);\n}\nfunction getZoomLevel(chart) {\n  const state = getState(chart);\n  let min = 1;\n  let max = 1;\n  each(chart.scales, function(scale) {\n    const origRange = getOriginalRange(state, scale.id);\n    if (origRange) {\n      const level = Math.round(origRange / (scale.max - scale.min) * 100) / 100;\n      min = Math.min(min, level);\n      max = Math.max(max, level);\n    }\n  });\n  return min < 1 ? min : max;\n}\nfunction panScale(scale, delta, limits, state) {\n  const {panDelta} = state;\n  const storedDelta = panDelta[scale.id] || 0;\n  if (sign(storedDelta) === sign(delta)) {\n    delta += storedDelta;\n  }\n  const fn = panFunctions[scale.type] || panFunctions.default;\n  if (callback(fn, [scale, delta, limits])) {\n    panDelta[scale.id] = 0;\n  } else {\n    panDelta[scale.id] = delta;\n  }\n}\nfunction pan(chart, delta, enabledScales, transition = 'none') {\n  const {x = 0, y = 0} = typeof delta === 'number' ? {x: delta, y: delta} : delta;\n  const state = getState(chart);\n  const {options: {pan: panOptions, limits}} = state;\n  const {onPan} = panOptions || {};\n  storeOriginalScaleLimits(chart, state);\n  const xEnabled = x !== 0;\n  const yEnabled = y !== 0;\n  each(enabledScales || chart.scales, function(scale) {\n    if (scale.isHorizontal() && xEnabled) {\n      panScale(scale, x, limits, state);\n    } else if (!scale.isHorizontal() && yEnabled) {\n      panScale(scale, y, limits, state);\n    }\n  });\n  chart.update(transition);\n  callback(onPan, [{chart}]);\n}\nfunction getInitialScaleBounds(chart) {\n  const state = getState(chart);\n  storeOriginalScaleLimits(chart, state);\n  const scaleBounds = {};\n  for (const scaleId of Object.keys(chart.scales)) {\n    const {min, max} = state.originalScaleLimits[scaleId] || {min: {}, max: {}};\n    scaleBounds[scaleId] = {min: min.scale, max: max.scale};\n  }\n  return scaleBounds;\n}\nfunction getZoomedScaleBounds(chart) {\n  const state = getState(chart);\n  const scaleBounds = {};\n  for (const scaleId of Object.keys(chart.scales)) {\n    scaleBounds[scaleId] = state.updatedScaleLimits[scaleId];\n  }\n  return scaleBounds;\n}\nfunction isZoomedOrPanned(chart) {\n  const scaleBounds = getInitialScaleBounds(chart);\n  for (const scaleId of Object.keys(chart.scales)) {\n    const {min: originalMin, max: originalMax} = scaleBounds[scaleId];\n    if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n      return true;\n    }\n    if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isZoomingOrPanning(chart) {\n  const state = getState(chart);\n  return state.panning || state.dragging;\n}\n\nconst clamp = (x, from, to) => Math.min(to, Math.max(from, x));\nfunction removeHandler(chart, type) {\n  const {handlers} = getState(chart);\n  const handler = handlers[type];\n  if (handler && handler.target) {\n    handler.target.removeEventListener(type, handler);\n    delete handlers[type];\n  }\n}\nfunction addHandler(chart, target, type, handler) {\n  const {handlers, options} = getState(chart);\n  const oldHandler = handlers[type];\n  if (oldHandler && oldHandler.target === target) {\n    return;\n  }\n  removeHandler(chart, type);\n  handlers[type] = (event) => handler(chart, event, options);\n  handlers[type].target = target;\n  const passive = type === 'wheel' ? false : undefined;\n  target.addEventListener(type, handlers[type], {passive});\n}\nfunction mouseMove(chart, event) {\n  const state = getState(chart);\n  if (state.dragStart) {\n    state.dragging = true;\n    state.dragEnd = event;\n    chart.update('none');\n  }\n}\nfunction keyDown(chart, event) {\n  const state = getState(chart);\n  if (!state.dragStart || event.key !== 'Escape') {\n    return;\n  }\n  removeHandler(chart, 'keydown');\n  state.dragging = false;\n  state.dragStart = state.dragEnd = null;\n  chart.update('none');\n}\nfunction getPointPosition(event, chart) {\n  if (event.target !== chart.canvas) {\n    const canvasArea = chart.canvas.getBoundingClientRect();\n    return {\n      x: event.clientX - canvasArea.left,\n      y: event.clientY - canvasArea.top,\n    };\n  }\n  return getRelativePosition(event, chart);\n}\nfunction zoomStart(chart, event, zoomOptions) {\n  const {onZoomStart, onZoomRejected} = zoomOptions;\n  if (onZoomStart) {\n    const point = getPointPosition(event, chart);\n    if (callback(onZoomStart, [{chart, event, point}]) === false) {\n      callback(onZoomRejected, [{chart, event}]);\n      return false;\n    }\n  }\n}\nfunction mouseDown(chart, event) {\n  if (chart.legend) {\n    const point = getRelativePosition(event, chart);\n    if (_isPointInArea(point, chart.legend)) {\n      return;\n    }\n  }\n  const state = getState(chart);\n  const {pan: panOptions, zoom: zoomOptions = {}} = state.options;\n  if (\n    event.button !== 0 ||\n    keyPressed(getModifierKey(panOptions), event) ||\n    keyNotPressed(getModifierKey(zoomOptions.drag), event)\n  ) {\n    return callback(zoomOptions.onZoomRejected, [{chart, event}]);\n  }\n  if (zoomStart(chart, event, zoomOptions) === false) {\n    return;\n  }\n  state.dragStart = event;\n  addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove);\n  addHandler(chart, window.document, 'keydown', keyDown);\n}\nfunction applyAspectRatio({begin, end}, aspectRatio) {\n  let width = end.x - begin.x;\n  let height = end.y - begin.y;\n  const ratio = Math.abs(width / height);\n  if (ratio > aspectRatio) {\n    width = Math.sign(width) * Math.abs(height * aspectRatio);\n  } else if (ratio < aspectRatio) {\n    height = Math.sign(height) * Math.abs(width / aspectRatio);\n  }\n  end.x = begin.x + width;\n  end.y = begin.y + height;\n}\nfunction applyMinMaxProps(rect, chartArea, points, {min, max, prop}) {\n  rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max]);\n  rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max]);\n}\nfunction getRelativePoints(chart, pointEvents, maintainAspectRatio) {\n  const points = {\n    begin: getPointPosition(pointEvents.dragStart, chart),\n    end: getPointPosition(pointEvents.dragEnd, chart),\n  };\n  if (maintainAspectRatio) {\n    const aspectRatio = chart.chartArea.width / chart.chartArea.height;\n    applyAspectRatio(points, aspectRatio);\n  }\n  return points;\n}\nfunction computeDragRect(chart, mode, pointEvents, maintainAspectRatio) {\n  const xEnabled = directionEnabled(mode, 'x', chart);\n  const yEnabled = directionEnabled(mode, 'y', chart);\n  const {top, left, right, bottom, width: chartWidth, height: chartHeight} = chart.chartArea;\n  const rect = {top, left, right, bottom};\n  const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled);\n  if (xEnabled) {\n    applyMinMaxProps(rect, chart.chartArea, points, {min: 'left', max: 'right', prop: 'x'});\n  }\n  if (yEnabled) {\n    applyMinMaxProps(rect, chart.chartArea, points, {min: 'top', max: 'bottom', prop: 'y'});\n  }\n  const width = rect.right - rect.left;\n  const height = rect.bottom - rect.top;\n  return {\n    ...rect,\n    width,\n    height,\n    zoomX: xEnabled && width ? 1 + ((chartWidth - width) / chartWidth) : 1,\n    zoomY: yEnabled && height ? 1 + ((chartHeight - height) / chartHeight) : 1\n  };\n}\nfunction mouseUp(chart, event) {\n  const state = getState(chart);\n  if (!state.dragStart) {\n    return;\n  }\n  removeHandler(chart, 'mousemove');\n  const {mode, onZoomComplete, drag: {threshold = 0, maintainAspectRatio}} = state.options.zoom;\n  const rect = computeDragRect(chart, mode, {dragStart: state.dragStart, dragEnd: event}, maintainAspectRatio);\n  const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0;\n  const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0;\n  const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n  state.dragStart = state.dragEnd = null;\n  if (distance <= threshold) {\n    state.dragging = false;\n    chart.update('none');\n    return;\n  }\n  zoomRect(chart, {x: rect.left, y: rect.top}, {x: rect.right, y: rect.bottom}, 'zoom', 'drag');\n  state.dragging = false;\n  state.filterNextClick = true;\n  callback(onZoomComplete, [{chart}]);\n}\nfunction wheelPreconditions(chart, event, zoomOptions) {\n  if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n    callback(zoomOptions.onZoomRejected, [{chart, event}]);\n    return;\n  }\n  if (zoomStart(chart, event, zoomOptions) === false) {\n    return;\n  }\n  if (event.cancelable) {\n    event.preventDefault();\n  }\n  if (event.deltaY === undefined) {\n    return;\n  }\n  return true;\n}\nfunction wheel(chart, event) {\n  const {handlers: {onZoomComplete}, options: {zoom: zoomOptions}} = getState(chart);\n  if (!wheelPreconditions(chart, event, zoomOptions)) {\n    return;\n  }\n  const rect = event.target.getBoundingClientRect();\n  const speed = zoomOptions.wheel.speed;\n  const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed;\n  const amount = {\n    x: percentage,\n    y: percentage,\n    focalPoint: {\n      x: event.clientX - rect.left,\n      y: event.clientY - rect.top\n    }\n  };\n  zoom(chart, amount, 'zoom', 'wheel');\n  callback(onZoomComplete, [{chart}]);\n}\nfunction addDebouncedHandler(chart, name, handler, delay) {\n  if (handler) {\n    getState(chart).handlers[name] = debounce(() => callback(handler, [{chart}]), delay);\n  }\n}\nfunction addListeners(chart, options) {\n  const canvas = chart.canvas;\n  const {wheel: wheelOptions, drag: dragOptions, onZoomComplete} = options.zoom;\n  if (wheelOptions.enabled) {\n    addHandler(chart, canvas, 'wheel', wheel);\n    addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250);\n  } else {\n    removeHandler(chart, 'wheel');\n  }\n  if (dragOptions.enabled) {\n    addHandler(chart, canvas, 'mousedown', mouseDown);\n    addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp);\n  } else {\n    removeHandler(chart, 'mousedown');\n    removeHandler(chart, 'mousemove');\n    removeHandler(chart, 'mouseup');\n    removeHandler(chart, 'keydown');\n  }\n}\nfunction removeListeners(chart) {\n  removeHandler(chart, 'mousedown');\n  removeHandler(chart, 'mousemove');\n  removeHandler(chart, 'mouseup');\n  removeHandler(chart, 'wheel');\n  removeHandler(chart, 'click');\n  removeHandler(chart, 'keydown');\n}\n\nfunction createEnabler(chart, state) {\n  return function(recognizer, event) {\n    const {pan: panOptions, zoom: zoomOptions = {}} = state.options;\n    if (!panOptions || !panOptions.enabled) {\n      return false;\n    }\n    const srcEvent = event && event.srcEvent;\n    if (!srcEvent) {\n      return true;\n    }\n    if (!state.panning && event.pointerType === 'mouse' && (\n      keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n    ) {\n      callback(panOptions.onPanRejected, [{chart, event}]);\n      return false;\n    }\n    return true;\n  };\n}\nfunction pinchAxes(p0, p1) {\n  const pinchX = Math.abs(p0.clientX - p1.clientX);\n  const pinchY = Math.abs(p0.clientY - p1.clientY);\n  const p = pinchX / pinchY;\n  let x, y;\n  if (p > 0.3 && p < 1.7) {\n    x = y = true;\n  } else if (pinchX > pinchY) {\n    x = true;\n  } else {\n    y = true;\n  }\n  return {x, y};\n}\nfunction handlePinch(chart, state, e) {\n  if (state.scale) {\n    const {center, pointers} = e;\n    const zoomPercent = 1 / state.scale * e.scale;\n    const rect = e.target.getBoundingClientRect();\n    const pinch = pinchAxes(pointers[0], pointers[1]);\n    const mode = state.options.zoom.mode;\n    const amount = {\n      x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n      y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n      focalPoint: {\n        x: center.x - rect.left,\n        y: center.y - rect.top\n      }\n    };\n    zoom(chart, amount, 'zoom', 'pinch');\n    state.scale = e.scale;\n  }\n}\nfunction startPinch(chart, state, event) {\n  if (state.options.zoom.pinch.enabled) {\n    const point = getRelativePosition(event, chart);\n    if (callback(state.options.zoom.onZoomStart, [{chart, event, point}]) === false) {\n      state.scale = null;\n      callback(state.options.zoom.onZoomRejected, [{chart, event}]);\n    } else {\n      state.scale = 1;\n    }\n  }\n}\nfunction endPinch(chart, state, e) {\n  if (state.scale) {\n    handlePinch(chart, state, e);\n    state.scale = null;\n    callback(state.options.zoom.onZoomComplete, [{chart}]);\n  }\n}\nfunction handlePan(chart, state, e) {\n  const delta = state.delta;\n  if (delta) {\n    state.panning = true;\n    pan(chart, {x: e.deltaX - delta.x, y: e.deltaY - delta.y}, state.panScales);\n    state.delta = {x: e.deltaX, y: e.deltaY};\n  }\n}\nfunction startPan(chart, state, event) {\n  const {enabled, onPanStart, onPanRejected} = state.options.pan;\n  if (!enabled) {\n    return;\n  }\n  const rect = event.target.getBoundingClientRect();\n  const point = {\n    x: event.center.x - rect.left,\n    y: event.center.y - rect.top\n  };\n  if (callback(onPanStart, [{chart, event, point}]) === false) {\n    return callback(onPanRejected, [{chart, event}]);\n  }\n  state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart);\n  state.delta = {x: 0, y: 0};\n  handlePan(chart, state, event);\n}\nfunction endPan(chart, state) {\n  state.delta = null;\n  if (state.panning) {\n    state.panning = false;\n    state.filterNextClick = true;\n    callback(state.options.pan.onPanComplete, [{chart}]);\n  }\n}\nconst hammers = new WeakMap();\nfunction startHammer(chart, options) {\n  const state = getState(chart);\n  const canvas = chart.canvas;\n  const {pan: panOptions, zoom: zoomOptions} = options;\n  const mc = new Hammer.Manager(canvas);\n  if (zoomOptions && zoomOptions.pinch.enabled) {\n    mc.add(new Hammer.Pinch());\n    mc.on('pinchstart', (e) => startPinch(chart, state, e));\n    mc.on('pinch', (e) => handlePinch(chart, state, e));\n    mc.on('pinchend', (e) => endPinch(chart, state, e));\n  }\n  if (panOptions && panOptions.enabled) {\n    mc.add(new Hammer.Pan({\n      threshold: panOptions.threshold,\n      enable: createEnabler(chart, state)\n    }));\n    mc.on('panstart', (e) => startPan(chart, state, e));\n    mc.on('panmove', (e) => handlePan(chart, state, e));\n    mc.on('panend', () => endPan(chart, state));\n  }\n  hammers.set(chart, mc);\n}\nfunction stopHammer(chart) {\n  const mc = hammers.get(chart);\n  if (mc) {\n    mc.remove('pinchstart');\n    mc.remove('pinch');\n    mc.remove('pinchend');\n    mc.remove('panstart');\n    mc.remove('pan');\n    mc.remove('panend');\n    mc.destroy();\n    hammers.delete(chart);\n  }\n}\nfunction hammerOptionsChanged(oldOptions, newOptions) {\n  const {pan: oldPan, zoom: oldZoom} = oldOptions;\n  const {pan: newPan, zoom: newZoom} = newOptions;\n  if (oldZoom?.zoom?.pinch?.enabled !== newZoom?.zoom?.pinch?.enabled) {\n    return true;\n  }\n  if (oldPan?.enabled !== newPan?.enabled) {\n    return true;\n  }\n  if (oldPan?.threshold !== newPan?.threshold) {\n    return true;\n  }\n  return false;\n}\n\nvar version = \"2.2.0\";\n\nfunction draw(chart, caller, options) {\n  const dragOptions = options.zoom.drag;\n  const {dragStart, dragEnd} = getState(chart);\n  if (dragOptions.drawTime !== caller || !dragEnd) {\n    return;\n  }\n  const {left, top, width, height} = computeDragRect(chart, options.zoom.mode, {dragStart, dragEnd}, dragOptions.maintainAspectRatio);\n  const ctx = chart.ctx;\n  ctx.save();\n  ctx.beginPath();\n  ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)';\n  ctx.fillRect(left, top, width, height);\n  if (dragOptions.borderWidth > 0) {\n    ctx.lineWidth = dragOptions.borderWidth;\n    ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)';\n    ctx.strokeRect(left, top, width, height);\n  }\n  ctx.restore();\n}\nvar plugin = {\n  id: 'zoom',\n  version,\n  defaults: {\n    pan: {\n      enabled: false,\n      mode: 'xy',\n      threshold: 10,\n      modifierKey: null,\n    },\n    zoom: {\n      wheel: {\n        enabled: false,\n        speed: 0.1,\n        modifierKey: null\n      },\n      drag: {\n        enabled: false,\n        drawTime: 'beforeDatasetsDraw',\n        modifierKey: null\n      },\n      pinch: {\n        enabled: false\n      },\n      mode: 'xy',\n    }\n  },\n  start: function(chart, _args, options) {\n    const state = getState(chart);\n    state.options = options;\n    if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n      console.warn('The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.');\n    }\n    if (Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode')\n      || Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')) {\n      console.warn('The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).');\n    }\n    if (Hammer) {\n      startHammer(chart, options);\n    }\n    chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition);\n    chart.zoom = (args, transition) => zoom(chart, args, transition);\n    chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition);\n    chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition);\n    chart.resetZoom = (transition) => resetZoom(chart, transition);\n    chart.getZoomLevel = () => getZoomLevel(chart);\n    chart.getInitialScaleBounds = () => getInitialScaleBounds(chart);\n    chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart);\n    chart.isZoomedOrPanned = () => isZoomedOrPanned(chart);\n    chart.isZoomingOrPanning = () => isZoomingOrPanning(chart);\n  },\n  beforeEvent(chart, {event}) {\n    if (isZoomingOrPanning(chart)) {\n      return false;\n    }\n    if (event.type === 'click' || event.type === 'mouseup') {\n      const state = getState(chart);\n      if (state.filterNextClick) {\n        state.filterNextClick = false;\n        return false;\n      }\n    }\n  },\n  beforeUpdate: function(chart, args, options) {\n    const state = getState(chart);\n    const previousOptions = state.options;\n    state.options = options;\n    if (hammerOptionsChanged(previousOptions, options)) {\n      stopHammer(chart);\n      startHammer(chart, options);\n    }\n    addListeners(chart, options);\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    draw(chart, 'beforeDatasetsDraw', options);\n  },\n  afterDatasetsDraw(chart, _args, options) {\n    draw(chart, 'afterDatasetsDraw', options);\n  },\n  beforeDraw(chart, _args, options) {\n    draw(chart, 'beforeDraw', options);\n  },\n  afterDraw(chart, _args, options) {\n    draw(chart, 'afterDraw', options);\n  },\n  stop: function(chart) {\n    removeListeners(chart);\n    if (Hammer) {\n      stopHammer(chart);\n    }\n    removeState(chart);\n  },\n  panFunctions,\n  zoomFunctions,\n  zoomRectFunctions,\n};\n\nexport { plugin as default, pan, resetZoom, zoom, zoomRect, zoomScale };\n", "var htmx = (function() {\n  'use strict'\n\n  // Public API\n  const htmx = {\n    // Tsc madness here, assigning the functions directly results in an invalid TypeScript output, but reassigning is fine\n    /* Event processing */\n    /** @type {typeof onLoadHelper} */\n    onLoad: null,\n    /** @type {typeof processNode} */\n    process: null,\n    /** @type {typeof addEventListenerImpl} */\n    on: null,\n    /** @type {typeof removeEventListenerImpl} */\n    off: null,\n    /** @type {typeof triggerEvent} */\n    trigger: null,\n    /** @type {typeof ajaxHelper} */\n    ajax: null,\n    /* DOM querying helpers */\n    /** @type {typeof find} */\n    find: null,\n    /** @type {typeof findAll} */\n    findAll: null,\n    /** @type {typeof closest} */\n    closest: null,\n    /**\n     * Returns the input values that would resolve for a given element via the htmx value resolution mechanism\n     *\n     * @see https://htmx.org/api/#values\n     *\n     * @param {Element} elt the element to resolve values on\n     * @param {HttpVerb} type the request type (e.g. **get** or **post**) non-GET's will include the enclosing form of the element. Defaults to **post**\n     * @returns {Object}\n     */\n    values: function(elt, type) {\n      const inputValues = getInputValues(elt, type || 'post')\n      return inputValues.values\n    },\n    /* DOM manipulation helpers */\n    /** @type {typeof removeElement} */\n    remove: null,\n    /** @type {typeof addClassToElement} */\n    addClass: null,\n    /** @type {typeof removeClassFromElement} */\n    removeClass: null,\n    /** @type {typeof toggleClassOnElement} */\n    toggleClass: null,\n    /** @type {typeof takeClassForElement} */\n    takeClass: null,\n    /** @type {typeof swap} */\n    swap: null,\n    /* Extension entrypoints */\n    /** @type {typeof defineExtension} */\n    defineExtension: null,\n    /** @type {typeof removeExtension} */\n    removeExtension: null,\n    /* Debugging */\n    /** @type {typeof logAll} */\n    logAll: null,\n    /** @type {typeof logNone} */\n    logNone: null,\n    /* Debugging */\n    /**\n     * The logger htmx uses to log with\n     *\n     * @see https://htmx.org/api/#logger\n     */\n    logger: null,\n    /**\n     * A property holding the configuration htmx uses at runtime.\n     *\n     * Note that using a [meta tag](https://htmx.org/docs/#config) is the preferred mechanism for setting these properties.\n     *\n     * @see https://htmx.org/api/#config\n     */\n    config: {\n      /**\n       * Whether to use history.\n       * @type boolean\n       * @default true\n       */\n      historyEnabled: true,\n      /**\n       * The number of pages to keep in **sessionStorage** for history support.\n       * @type number\n       * @default 10\n       */\n      historyCacheSize: 10,\n      /**\n       * @type boolean\n       * @default false\n       */\n      refreshOnHistoryMiss: false,\n      /**\n       * The default swap style to use if **[hx-swap](https://htmx.org/attributes/hx-swap)** is omitted.\n       * @type HtmxSwapStyle\n       * @default 'innerHTML'\n       */\n      defaultSwapStyle: 'innerHTML',\n      /**\n       * The default delay between receiving a response from the server and doing the swap.\n       * @type number\n       * @default 0\n       */\n      defaultSwapDelay: 0,\n      /**\n       * The default delay between completing the content swap and settling attributes.\n       * @type number\n       * @default 20\n       */\n      defaultSettleDelay: 20,\n      /**\n       * If true, htmx will inject a small amount of CSS into the page to make indicators invisible unless the **htmx-indicator** class is present.\n       * @type boolean\n       * @default true\n       */\n      includeIndicatorStyles: true,\n      /**\n       * The class to place on indicators when a request is in flight.\n       * @type string\n       * @default 'htmx-indicator'\n       */\n      indicatorClass: 'htmx-indicator',\n      /**\n       * The class to place on triggering elements when a request is in flight.\n       * @type string\n       * @default 'htmx-request'\n       */\n      requestClass: 'htmx-request',\n      /**\n       * The class to temporarily place on elements that htmx has added to the DOM.\n       * @type string\n       * @default 'htmx-added'\n       */\n      addedClass: 'htmx-added',\n      /**\n       * The class to place on target elements when htmx is in the settling phase.\n       * @type string\n       * @default 'htmx-settling'\n       */\n      settlingClass: 'htmx-settling',\n      /**\n       * The class to place on target elements when htmx is in the swapping phase.\n       * @type string\n       * @default 'htmx-swapping'\n       */\n      swappingClass: 'htmx-swapping',\n      /**\n       * Allows the use of eval-like functionality in htmx, to enable **hx-vars**, trigger conditions & script tag evaluation. Can be set to **false** for CSP compatibility.\n       * @type boolean\n       * @default true\n       */\n      allowEval: true,\n      /**\n       * If set to false, disables the interpretation of script tags.\n       * @type boolean\n       * @default true\n       */\n      allowScriptTags: true,\n      /**\n       * If set, the nonce will be added to inline scripts.\n       * @type string\n       * @default ''\n       */\n      inlineScriptNonce: '',\n      /**\n       * If set, the nonce will be added to inline styles.\n       * @type string\n       * @default ''\n       */\n      inlineStyleNonce: '',\n      /**\n       * The attributes to settle during the settling phase.\n       * @type string[]\n       * @default ['class', 'style', 'width', 'height']\n       */\n      attributesToSettle: ['class', 'style', 'width', 'height'],\n      /**\n       * Allow cross-site Access-Control requests using credentials such as cookies, authorization headers or TLS client certificates.\n       * @type boolean\n       * @default false\n       */\n      withCredentials: false,\n      /**\n       * @type number\n       * @default 0\n       */\n      timeout: 0,\n      /**\n       * The default implementation of **getWebSocketReconnectDelay** for reconnecting after unexpected connection loss by the event code **Abnormal Closure**, **Service Restart** or **Try Again Later**.\n       * @type {'full-jitter' | ((retryCount:number) => number)}\n       * @default \"full-jitter\"\n       */\n      wsReconnectDelay: 'full-jitter',\n      /**\n       * The type of binary data being received over the WebSocket connection\n       * @type BinaryType\n       * @default 'blob'\n       */\n      wsBinaryType: 'blob',\n      /**\n       * @type string\n       * @default '[hx-disable], [data-hx-disable]'\n       */\n      disableSelector: '[hx-disable], [data-hx-disable]',\n      /**\n       * @type {'auto' | 'instant' | 'smooth'}\n       * @default 'instant'\n       */\n      scrollBehavior: 'instant',\n      /**\n       * If the focused element should be scrolled into view.\n       * @type boolean\n       * @default false\n       */\n      defaultFocusScroll: false,\n      /**\n       * If set to true htmx will include a cache-busting parameter in GET requests to avoid caching partial responses by the browser\n       * @type boolean\n       * @default false\n       */\n      getCacheBusterParam: false,\n      /**\n       * If set to true, htmx will use the View Transition API when swapping in new content.\n       * @type boolean\n       * @default false\n       */\n      globalViewTransitions: false,\n      /**\n       * htmx will format requests with these methods by encoding their parameters in the URL, not the request body\n       * @type {(HttpVerb)[]}\n       * @default ['get', 'delete']\n       */\n      methodsThatUseUrlParams: ['get', 'delete'],\n      /**\n       * If set to true, disables htmx-based requests to non-origin hosts.\n       * @type boolean\n       * @default false\n       */\n      selfRequestsOnly: true,\n      /**\n       * If set to true htmx will not update the title of the document when a title tag is found in new content\n       * @type boolean\n       * @default false\n       */\n      ignoreTitle: false,\n      /**\n       * Whether the target of a boosted element is scrolled into the viewport.\n       * @type boolean\n       * @default true\n       */\n      scrollIntoViewOnBoost: true,\n      /**\n       * The cache to store evaluated trigger specifications into.\n       * You may define a simple object to use a never-clearing cache, or implement your own system using a [proxy object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Proxy)\n       * @type {Object|null}\n       * @default null\n       */\n      triggerSpecsCache: null,\n      /** @type boolean */\n      disableInheritance: false,\n      /** @type HtmxResponseHandlingConfig[] */\n      responseHandling: [\n        { code: '204', swap: false },\n        { code: '[23]..', swap: true },\n        { code: '[45]..', swap: false, error: true }\n      ],\n      /**\n       * Whether to process OOB swaps on elements that are nested within the main response element.\n       * @type boolean\n       * @default true\n       */\n      allowNestedOobSwaps: true,\n      /**\n       * Whether to treat history cache miss full page reload requests as a \"HX-Request\" by returning this response header\n       * This should always be disabled when using HX-Request header to optionally return partial responses\n       * @type boolean\n       * @default true\n       */\n      historyRestoreAsHxRequest: true,\n      /**\n       * Whether to report input validation errors to the end user and update focus to the first input that fails validation.\n       * This should always be enabled as this matches default browser form submit behaviour\n       * @type boolean\n       * @default false\n       */\n      reportValidityOfForms: false\n    },\n    /** @type {typeof parseInterval} */\n    parseInterval: null,\n    /**\n     * proxy of window.location used for page reload functions\n     * @type location\n     */\n    location,\n    /** @type {typeof internalEval} */\n    _: null,\n    version: '2.0.10'\n  }\n  // Tsc madness part 2\n  htmx.onLoad = onLoadHelper\n  htmx.process = processNode\n  htmx.on = addEventListenerImpl\n  htmx.off = removeEventListenerImpl\n  htmx.trigger = triggerEvent\n  htmx.ajax = ajaxHelper\n  htmx.find = find\n  htmx.findAll = findAll\n  htmx.closest = closest\n  htmx.remove = removeElement\n  htmx.addClass = addClassToElement\n  htmx.removeClass = removeClassFromElement\n  htmx.toggleClass = toggleClassOnElement\n  htmx.takeClass = takeClassForElement\n  htmx.swap = swap\n  htmx.defineExtension = defineExtension\n  htmx.removeExtension = removeExtension\n  htmx.logAll = logAll\n  htmx.logNone = logNone\n  htmx.parseInterval = parseInterval\n  htmx._ = internalEval\n\n  const internalAPI = {\n    addTriggerHandler,\n    bodyContains,\n    canAccessLocalStorage,\n    findThisElement,\n    filterValues,\n    swap,\n    hasAttribute,\n    getAttributeValue,\n    getClosestAttributeValue,\n    getClosestMatch,\n    getExpressionVars,\n    getHeaders,\n    getInputValues,\n    getInternalData,\n    getSwapSpecification,\n    getTriggerSpecs,\n    getTarget,\n    makeFragment,\n    mergeObjects,\n    makeSettleInfo,\n    oobSwap,\n    querySelectorExt,\n    settleImmediately,\n    shouldCancel,\n    triggerEvent,\n    triggerErrorEvent,\n    withExtensions\n  }\n\n  const VERBS = ['get', 'post', 'put', 'delete', 'patch']\n  const VERB_SELECTOR = VERBS.map(function(verb) {\n    return '[hx-' + verb + '], [data-hx-' + verb + ']'\n  }).join(', ')\n\n  //= ===================================================================\n  // Utilities\n  //= ===================================================================\n\n  /**\n   * Parses an interval string consistent with the way htmx does. Useful for plugins that have timing-related attributes.\n   *\n   * Caution: Accepts an int followed by either **s** or **ms**. All other values use **parseFloat**\n   *\n   * @see https://htmx.org/api/#parseInterval\n   *\n   * @param {string} str timing string\n   * @returns {number|undefined}\n   */\n  function parseInterval(str) {\n    if (str == undefined) {\n      return undefined\n    }\n\n    let interval = NaN\n    if (str.slice(-2) == 'ms') {\n      interval = parseFloat(str.slice(0, -2))\n    } else if (str.slice(-1) == 's') {\n      interval = parseFloat(str.slice(0, -1)) * 1000\n    } else if (str.slice(-1) == 'm') {\n      interval = parseFloat(str.slice(0, -1)) * 1000 * 60\n    } else {\n      interval = parseFloat(str)\n    }\n    return isNaN(interval) ? undefined : interval\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {string} name\n   * @returns {(string | null)}\n   */\n  function getRawAttribute(elt, name) {\n    return elt instanceof Element && elt.getAttribute(name)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} qualifiedName\n   * @returns {boolean}\n   */\n  // resolve with both hx and data-hx prefixes\n  function hasAttribute(elt, qualifiedName) {\n    return !!elt.hasAttribute && (elt.hasAttribute(qualifiedName) ||\n      elt.hasAttribute('data-' + qualifiedName))\n  }\n\n  /**\n   *\n   * @param {Node} elt\n   * @param {string} qualifiedName\n   * @returns {(string | null)}\n   */\n  function getAttributeValue(elt, qualifiedName) {\n    return getRawAttribute(elt, qualifiedName) || getRawAttribute(elt, 'data-' + qualifiedName)\n  }\n\n  /**\n   * @param {Node} elt\n   * @returns {Node | null}\n   */\n  function parentElt(elt) {\n    const parent = elt.parentElement\n    if (!parent && elt.parentNode instanceof ShadowRoot) return elt.parentNode\n    return parent\n  }\n\n  /**\n   * @returns {Document}\n   */\n  function getDocument() {\n    return document\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {boolean} global\n   * @returns {Node|Document}\n   */\n  function getRootNode(elt, global) {\n    return elt.getRootNode ? elt.getRootNode({ composed: global }) : getDocument()\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {(e:Node) => boolean} condition\n   * @returns {Node | null}\n   */\n  function getClosestMatch(elt, condition) {\n    while (elt && !condition(elt)) {\n      elt = parentElt(elt)\n    }\n\n    return elt || null\n  }\n\n  /**\n   * @param {Element} initialElement\n   * @param {Element} ancestor\n   * @param {string} attributeName\n   * @returns {string|null}\n   */\n  function getAttributeValueWithDisinheritance(initialElement, ancestor, attributeName) {\n    const attributeValue = getAttributeValue(ancestor, attributeName)\n    const disinherit = getAttributeValue(ancestor, 'hx-disinherit')\n    var inherit = getAttributeValue(ancestor, 'hx-inherit')\n    if (initialElement !== ancestor) {\n      if (htmx.config.disableInheritance) {\n        if (inherit && (inherit === '*' || inherit.split(' ').indexOf(attributeName) >= 0)) {\n          return attributeValue\n        } else {\n          return null\n        }\n      }\n      if (disinherit && (disinherit === '*' || disinherit.split(' ').indexOf(attributeName) >= 0)) {\n        return 'unset'\n      }\n    }\n    return attributeValue\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} attributeName\n   * @returns {string | null}\n   */\n  function getClosestAttributeValue(elt, attributeName) {\n    let closestAttr = null\n    getClosestMatch(elt, function(e) {\n      return !!(closestAttr = getAttributeValueWithDisinheritance(elt, asElement(e), attributeName))\n    })\n    if (closestAttr !== 'unset') {\n      return closestAttr\n    }\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {string} selector\n   * @returns {boolean}\n   */\n  function matches(elt, selector) {\n    return elt instanceof Element && elt.matches(selector)\n  }\n\n  /**\n   * @param {string} str\n   * @returns {string}\n   */\n  function getStartTag(str) {\n    const tagMatcher = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i\n    const match = tagMatcher.exec(str)\n    if (match) {\n      return match[1].toLowerCase()\n    } else {\n      return ''\n    }\n  }\n\n  /**\n   * @param {string} resp\n   * @returns {Document}\n   */\n  function parseHTML(resp) {\n    if ('parseHTMLUnsafe' in Document) {\n      return Document.parseHTMLUnsafe(resp)\n    }\n    const parser = new DOMParser()\n    return parser.parseFromString(resp, 'text/html')\n  }\n\n  /**\n   * @param {DocumentFragment} fragment\n   * @param {Node} elt\n   */\n  function takeChildrenFor(fragment, elt) {\n    while (elt.childNodes.length > 0) {\n      fragment.append(elt.childNodes[0])\n    }\n  }\n\n  /**\n   * @param {HTMLScriptElement} script\n   * @returns {HTMLScriptElement}\n   */\n  function duplicateScript(script) {\n    const newScript = getDocument().createElement('script')\n    forEach(script.attributes, function(attr) {\n      newScript.setAttribute(attr.name, attr.value)\n    })\n    newScript.textContent = script.textContent\n    newScript.async = false\n    if (htmx.config.inlineScriptNonce) {\n      newScript.nonce = htmx.config.inlineScriptNonce\n    }\n    return newScript\n  }\n\n  /**\n   * @param {HTMLScriptElement} script\n   * @returns {boolean}\n   */\n  function isJavaScriptScriptNode(script) {\n    return script.matches('script') && (script.type === 'text/javascript' || script.type === 'module' || script.type === '')\n  }\n\n  /**\n   * we have to make new copies of script tags that we are going to insert because\n   * SOME browsers (not saying who, but it involves an element and an animal) don't\n   * execute scripts created in <template> tags when they are inserted into the DOM\n   * and all the others do lmao\n   * @param {DocumentFragment} fragment\n   */\n  function normalizeScriptTags(fragment) {\n    Array.from(fragment.querySelectorAll('script')).forEach(/** @param {HTMLScriptElement} script */ (script) => {\n      if (isJavaScriptScriptNode(script)) {\n        const newScript = duplicateScript(script)\n        const parent = script.parentNode\n        try {\n          parent.insertBefore(newScript, script)\n        } catch (e) {\n          logError(e)\n        } finally {\n          script.remove()\n        }\n      }\n    })\n  }\n\n  /**\n   * @typedef {DocumentFragment & {title?: string}} DocumentFragmentWithTitle\n   * @description  a document fragment representing the response HTML, including\n   * a `title` property for any title information found\n   */\n\n  /**\n   * @param {string} response HTML\n   * @returns {DocumentFragmentWithTitle}\n   */\n  function makeFragment(response) {\n    // strip head tag to determine shape of response we are dealing with\n    const responseWithNoHead = response.replace(/<head(\\s[^>]*)?>[\\s\\S]*?<\\/head>/i, '')\n    const startTag = getStartTag(responseWithNoHead)\n    /** @type DocumentFragmentWithTitle */\n    let fragment\n    if (startTag === 'html') {\n      // if it is a full document, parse it and return the body\n      fragment = /** @type DocumentFragmentWithTitle */ (new DocumentFragment())\n      const doc = parseHTML(response)\n      takeChildrenFor(fragment, doc.body)\n      fragment.title = doc.title\n    } else if (startTag === 'body') {\n      // parse body w/o wrapping in template\n      fragment = /** @type DocumentFragmentWithTitle */ (new DocumentFragment())\n      const doc = parseHTML(responseWithNoHead)\n      takeChildrenFor(fragment, doc.body)\n      fragment.title = doc.title\n    } else {\n      // otherwise we have non-body partial HTML content, so wrap it in a template to maximize parsing flexibility\n      const doc = parseHTML('<body><template class=\"internal-htmx-wrapper\">' + responseWithNoHead + '</template></body>')\n      fragment = /** @type DocumentFragmentWithTitle */ (doc.querySelector('template').content)\n      // extract title into fragment for later processing\n      fragment.title = doc.title\n\n      // for legacy reasons we support a title tag at the root level of non-body responses, so we need to handle it\n      var titleElement = fragment.querySelector('title')\n      if (titleElement && titleElement.parentNode === fragment) {\n        titleElement.remove()\n        fragment.title = titleElement.innerText\n      }\n    }\n    if (fragment) {\n      if (htmx.config.allowScriptTags) {\n        normalizeScriptTags(fragment)\n      } else {\n        // remove all script tags if scripts are disabled\n        fragment.querySelectorAll('script').forEach((script) => script.remove())\n      }\n    }\n    return fragment\n  }\n\n  /**\n   * @param {Function} func\n   */\n  function maybeCall(func) {\n    if (func) {\n      func()\n    }\n  }\n\n  /**\n   * @param {any} o\n   * @param {string} type\n   * @returns\n   */\n  function isType(o, type) {\n    return Object.prototype.toString.call(o) === '[object ' + type + ']'\n  }\n\n  /**\n   * @param {*} o\n   * @returns {o is Function}\n   */\n  function isFunction(o) {\n    return typeof o === 'function'\n  }\n\n  /**\n   * @param {*} o\n   * @returns {o is Object}\n   */\n  function isRawObject(o) {\n    return isType(o, 'Object')\n  }\n\n  /**\n   * @typedef {Object} OnHandler\n   * @property {(keyof HTMLElementEventMap)|string} event\n   * @property {EventListener} listener\n   */\n\n  /**\n   * @typedef {Object} ListenerInfo\n   * @property {string} trigger\n   * @property {EventListener} listener\n   * @property {EventTarget} on\n   */\n\n  /**\n   * @typedef {Object} HtmxNodeInternalData\n   * Element data\n   * @property {number} [initHash]\n   * @property {boolean} [boosted]\n   * @property {OnHandler[]} [onHandlers]\n   * @property {number} [timeout]\n   * @property {ListenerInfo[]} [listenerInfos]\n   * @property {boolean} [cancelled]\n   * @property {boolean} [triggeredOnce]\n   * @property {number} [delayed]\n   * @property {number|null} [throttle]\n   * @property {WeakMap<HtmxTriggerSpecification,WeakMap<EventTarget,string>>} [lastValue]\n   * @property {boolean} [loaded]\n   * @property {string} [path]\n   * @property {string} [verb]\n   * @property {boolean} [polling]\n   * @property {HTMLButtonElement|HTMLInputElement|null} [lastButtonClicked]\n   * @property {number} [requestCount]\n   * @property {XMLHttpRequest} [xhr]\n   * @property {(() => void)[]} [queuedRequests]\n   * @property {boolean} [abortable]\n   * @property {boolean} [firstInitCompleted]\n   *\n   * Event data\n   * @property {HtmxTriggerSpecification} [triggerSpec]\n   * @property {EventTarget[]} [handledFor]\n   */\n\n  /**\n   * getInternalData retrieves \"private\" data stored by htmx within an element\n   * @param {EventTarget|Event} elt\n   * @returns {HtmxNodeInternalData}\n   */\n  function getInternalData(elt) {\n    const dataProp = 'htmx-internal-data'\n    let data = elt[dataProp]\n    if (!data) {\n      data = elt[dataProp] = {}\n    }\n    return data\n  }\n\n  /**\n   * toArray converts an ArrayLike object into a real array.\n   * @template T\n   * @param {ArrayLike<T>} arr\n   * @returns {T[]}\n   */\n  function toArray(arr) {\n    const returnArr = []\n    if (arr) {\n      for (let i = 0; i < arr.length; i++) {\n        returnArr.push(arr[i])\n      }\n    }\n    return returnArr\n  }\n\n  /**\n   * @template T\n   * @param {T[]|NamedNodeMap|HTMLCollection|HTMLFormControlsCollection|ArrayLike<T>} arr\n   * @param {(T) => void} func\n   */\n  function forEach(arr, func) {\n    if (arr) {\n      for (let i = 0; i < arr.length; i++) {\n        func(arr[i])\n      }\n    }\n  }\n\n  /**\n   * @param {Element} el\n   * @returns {boolean}\n   */\n  function isScrolledIntoView(el) {\n    const rect = el.getBoundingClientRect()\n    const elemTop = rect.top\n    const elemBottom = rect.bottom\n    return elemTop < window.innerHeight && elemBottom >= 0\n  }\n\n  /**\n   * Checks whether the element is in the document (includes shadow roots).\n   * This function this is a slight misnomer; it will return true even for elements in the head.\n   *\n   * @param {Node} elt\n   * @returns {boolean}\n   */\n  function bodyContains(elt) {\n    return elt.getRootNode({ composed: true }) === document\n  }\n\n  /**\n   * @param {string} trigger\n   * @returns {string[]}\n   */\n  function splitOnWhitespace(trigger) {\n    return trigger.trim().split(/\\s+/)\n  }\n\n  /**\n   * mergeObjects takes all the keys from\n   * obj2 and duplicates them into obj1\n   * @template T1\n   * @template T2\n   * @param {T1} obj1\n   * @param {T2} obj2\n   * @returns {T1 & T2}\n   */\n  function mergeObjects(obj1, obj2) {\n    for (const key in obj2) {\n      if (obj2.hasOwnProperty(key)) {\n        // @ts-ignore tsc doesn't seem to properly handle types merging\n        obj1[key] = obj2[key]\n      }\n    }\n    // @ts-ignore tsc doesn't seem to properly handle types merging\n    return obj1\n  }\n\n  /**\n   * @param {string} jString\n   * @returns {any|null}\n   */\n  function parseJSON(jString) {\n    try {\n      return JSON.parse(jString)\n    } catch (error) {\n      logError(error)\n      return null\n    }\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  function canAccessLocalStorage() {\n    const test = 'htmx:sessionStorageTest'\n    try {\n      sessionStorage.setItem(test, test)\n      sessionStorage.removeItem(test)\n      return true\n    } catch (e) {\n      return false\n    }\n  }\n\n  /**\n   * @param {string} path\n   * @returns {string}\n   */\n  function normalizePath(path) {\n    try {\n      const url = new URL(path, window.location.href)\n      path = url.pathname + url.search\n    } catch (e) {\n      // fallback for malformed URLs\n    }\n    // remove trailing slash, unless index page\n    if (path != '/') {\n      path = path.replace(/\\/+$/, '')\n    }\n    return path\n  }\n\n  //= =========================================================================================\n  // public API\n  //= =========================================================================================\n\n  /**\n   * @param {string} str\n   * @returns {any}\n   */\n  function internalEval(str) {\n    return maybeEval(getDocument().body, function() {\n      return eval(str)\n    })\n  }\n\n  /**\n   * Adds a callback for the **htmx:load** event. This can be used to process new content, for example initializing the content with a javascript library\n   *\n   * @see https://htmx.org/api/#onLoad\n   *\n   * @param {(elt: Node) => void} callback the callback to call on newly loaded content\n   * @returns {EventListener}\n   */\n  function onLoadHelper(callback) {\n    const value = htmx.on('htmx:load', /** @param {CustomEvent} evt */ function(evt) {\n      callback(evt.detail.elt)\n    })\n    return value\n  }\n\n  /**\n   * Log all htmx events, useful for debugging.\n   *\n   * @see https://htmx.org/api/#logAll\n   */\n  function logAll() {\n    htmx.logger = function(elt, event, data) {\n      if (console) {\n        console.log(event, elt, data)\n      }\n    }\n  }\n\n  function logNone() {\n    htmx.logger = null\n  }\n\n  /**\n   * Finds an element matching the selector\n   *\n   * @see https://htmx.org/api/#find\n   *\n   * @param {ParentNode|string} eltOrSelector  the root element to find the matching element in, inclusive | the selector to match\n   * @param {string} [selector] the selector to match\n   * @returns {Element|null}\n   */\n  function find(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return eltOrSelector.querySelector(selector)\n    } else {\n      return find(getDocument(), eltOrSelector)\n    }\n  }\n\n  /**\n   * Finds all elements matching the selector\n   *\n   * @see https://htmx.org/api/#findAll\n   *\n   * @param {ParentNode|string} eltOrSelector the root element to find the matching elements in, inclusive | the selector to match\n   * @param {string} [selector] the selector to match\n   * @returns {NodeListOf<Element>}\n   */\n  function findAll(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return eltOrSelector.querySelectorAll(selector)\n    } else {\n      return findAll(getDocument(), eltOrSelector)\n    }\n  }\n\n  /**\n   * @returns Window\n   */\n  function getWindow() {\n    return window\n  }\n\n  /**\n   * Removes an element from the DOM\n   *\n   * @see https://htmx.org/api/#remove\n   *\n   * @param {Node} elt\n   * @param {number} [delay]\n   */\n  function removeElement(elt, delay) {\n    elt = resolveTarget(elt)\n    if (delay) {\n      getWindow().setTimeout(function() {\n        removeElement(elt)\n        elt = null\n      }, delay)\n    } else {\n      parentElt(elt).removeChild(elt)\n    }\n  }\n\n  /**\n   * @param {any} elt\n   * @return {Element|null}\n   */\n  function asElement(elt) {\n    return elt instanceof Element ? elt : null\n  }\n\n  /**\n   * @param {any} elt\n   * @return {HTMLElement|null}\n   */\n  function asHtmlElement(elt) {\n    return elt instanceof HTMLElement ? elt : null\n  }\n\n  /**\n   * @param {any} value\n   * @return {string|null}\n   */\n  function asString(value) {\n    return typeof value === 'string' ? value : null\n  }\n\n  /**\n   * @param {EventTarget} elt\n   * @return {ParentNode|null}\n   */\n  function asParentNode(elt) {\n    return elt instanceof Element || elt instanceof Document || elt instanceof DocumentFragment ? elt : null\n  }\n\n  /**\n   * This method adds a class to the given element.\n   *\n   * @see https://htmx.org/api/#addClass\n   *\n   * @param {Element|string} elt the element to add the class to\n   * @param {string} clazz the class to add\n   * @param {number} [delay] the delay (in milliseconds) before class is added\n   */\n  function addClassToElement(elt, clazz, delay) {\n    elt = asElement(resolveTarget(elt))\n    if (!elt) {\n      return\n    }\n    if (delay) {\n      getWindow().setTimeout(function() {\n        addClassToElement(elt, clazz)\n        elt = null\n      }, delay)\n    } else {\n      elt.classList && elt.classList.add(clazz)\n    }\n  }\n\n  /**\n   * Removes a class from the given element\n   *\n   * @see https://htmx.org/api/#removeClass\n   *\n   * @param {Node|string} node element to remove the class from\n   * @param {string} clazz the class to remove\n   * @param {number} [delay] the delay (in milliseconds before class is removed)\n   */\n  function removeClassFromElement(node, clazz, delay) {\n    let elt = asElement(resolveTarget(node))\n    if (!elt) {\n      return\n    }\n    if (delay) {\n      getWindow().setTimeout(function() {\n        removeClassFromElement(elt, clazz)\n        elt = null\n      }, delay)\n    } else {\n      if (elt.classList) {\n        elt.classList.remove(clazz)\n        // if there are no classes left, remove the class attribute\n        if (elt.classList.length === 0) {\n          elt.removeAttribute('class')\n        }\n      }\n    }\n  }\n\n  /**\n   * Toggles the given class on an element\n   *\n   * @see https://htmx.org/api/#toggleClass\n   *\n   * @param {Element|string} elt the element to toggle the class on\n   * @param {string} clazz the class to toggle\n   */\n  function toggleClassOnElement(elt, clazz) {\n    elt = resolveTarget(elt)\n    elt.classList.toggle(clazz)\n  }\n\n  /**\n   * Takes the given class from its siblings, so that among its siblings, only the given element will have the class.\n   *\n   * @see https://htmx.org/api/#takeClass\n   *\n   * @param {Node|string} elt the element that will take the class\n   * @param {string} clazz the class to take\n   */\n  function takeClassForElement(elt, clazz) {\n    elt = resolveTarget(elt)\n    forEach(elt.parentElement.children, function(child) {\n      removeClassFromElement(child, clazz)\n    })\n    addClassToElement(asElement(elt), clazz)\n  }\n\n  /**\n   * Finds the closest matching element in the given elements parentage, inclusive of the element\n   *\n   * @see https://htmx.org/api/#closest\n   *\n   * @param {Element|string} elt the element to find the selector from\n   * @param {string} selector the selector to find\n   * @returns {Element|null}\n   */\n  function closest(elt, selector) {\n    elt = asElement(resolveTarget(elt))\n    if (elt) {\n      return elt.closest(selector)\n    }\n    return null\n  }\n\n  /**\n   * @param {string} str\n   * @param {string} prefix\n   * @returns {boolean}\n   */\n  function startsWith(str, prefix) {\n    return str.substring(0, prefix.length) === prefix\n  }\n\n  /**\n   * @param {string} str\n   * @param {string} suffix\n   * @returns {boolean}\n   */\n  function endsWith(str, suffix) {\n    return str.substring(str.length - suffix.length) === suffix\n  }\n\n  /**\n   * @param {string} selector\n   * @returns {string}\n   */\n  function normalizeSelector(selector) {\n    const trimmedSelector = selector.trim()\n    if (startsWith(trimmedSelector, '<') && endsWith(trimmedSelector, '/>')) {\n      return trimmedSelector.substring(1, trimmedSelector.length - 2)\n    } else {\n      return trimmedSelector\n    }\n  }\n\n  /**\n   * @param {Node|Element|Document|string} elt\n   * @param {string} selector\n   * @param {boolean=} global\n   * @returns {(Node|Window)[]}\n   */\n  function querySelectorAllExt(elt, selector, global) {\n    if (selector.indexOf('global ') === 0) {\n      return querySelectorAllExt(elt, selector.slice(7), true)\n    }\n\n    elt = resolveTarget(elt)\n\n    const parts = []\n    {\n      let chevronsCount = 0\n      let offset = 0\n      for (let i = 0; i < selector.length; i++) {\n        const char = selector[i]\n        if (char === ',' && chevronsCount === 0) {\n          parts.push(selector.substring(offset, i))\n          offset = i + 1\n          continue\n        }\n        if (char === '<') {\n          chevronsCount++\n        } else if (char === '/' && i < selector.length - 1 && selector[i + 1] === '>') {\n          chevronsCount--\n        }\n      }\n      if (offset < selector.length) {\n        parts.push(selector.substring(offset))\n      }\n    }\n\n    const result = []\n    const unprocessedParts = []\n    while (parts.length > 0) {\n      const selector = normalizeSelector(parts.shift())\n      let item\n      if (selector.indexOf('closest ') === 0) {\n        item = closest(asElement(elt), normalizeSelector(selector.slice(8)))\n      } else if (selector.indexOf('find ') === 0) {\n        item = find(asParentNode(elt), normalizeSelector(selector.slice(5)))\n      } else if (selector === 'next' || selector === 'nextElementSibling') {\n        item = asElement(elt).nextElementSibling\n      } else if (selector.indexOf('next ') === 0) {\n        item = scanForwardQuery(elt, normalizeSelector(selector.slice(5)), !!global)\n      } else if (selector === 'previous' || selector === 'previousElementSibling') {\n        item = asElement(elt).previousElementSibling\n      } else if (selector.indexOf('previous ') === 0) {\n        item = scanBackwardsQuery(elt, normalizeSelector(selector.slice(9)), !!global)\n      } else if (selector === 'document') {\n        item = document\n      } else if (selector === 'window') {\n        item = window\n      } else if (selector === 'body') {\n        item = document.body\n      } else if (selector === 'root') {\n        item = getRootNode(elt, !!global)\n      } else if (selector === 'host') {\n        item = (/** @type ShadowRoot */(elt.getRootNode())).host\n      } else {\n        unprocessedParts.push(selector)\n      }\n\n      if (item) {\n        result.push(item)\n      }\n    }\n\n    if (unprocessedParts.length > 0) {\n      const standardSelector = unprocessedParts.join(',')\n      const rootNode = asParentNode(getRootNode(elt, !!global))\n      result.push(...toArray(rootNode.querySelectorAll(standardSelector)))\n    }\n\n    return result\n  }\n\n  /**\n   * @param {Node} start\n   * @param {string} match\n   * @param {boolean} global\n   * @returns {Element}\n   */\n  var scanForwardQuery = function(start, match, global) {\n    const results = asParentNode(getRootNode(start, global)).querySelectorAll(match)\n    for (let i = 0; i < results.length; i++) {\n      const elt = results[i]\n      if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_PRECEDING) {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {Node} start\n   * @param {string} match\n   * @param {boolean} global\n   * @returns {Element}\n   */\n  var scanBackwardsQuery = function(start, match, global) {\n    const results = asParentNode(getRootNode(start, global)).querySelectorAll(match)\n    for (let i = results.length - 1; i >= 0; i--) {\n      const elt = results[i]\n      if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_FOLLOWING) {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {Node|string} eltOrSelector\n   * @param {string=} selector\n   * @returns {Node|Window}\n   */\n  function querySelectorExt(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return querySelectorAllExt(eltOrSelector, selector)[0]\n    } else {\n      return querySelectorAllExt(getDocument().body, eltOrSelector)[0]\n    }\n  }\n\n  /**\n   * @template {EventTarget} T\n   * @param {T|string} eltOrSelector\n   * @param {T} [context]\n   * @returns {Element|T|null}\n   */\n  function resolveTarget(eltOrSelector, context) {\n    if (typeof eltOrSelector === 'string') {\n      return find(asParentNode(context) || document, eltOrSelector)\n    } else {\n      return eltOrSelector\n    }\n  }\n\n  /**\n   * @typedef {keyof HTMLElementEventMap|string} AnyEventName\n   */\n\n  /**\n   * @typedef {Object} EventArgs\n   * @property {EventTarget} target\n   * @property {AnyEventName} event\n   * @property {EventListener} listener\n   * @property {Object|boolean} options\n   */\n\n  /**\n   * @param {EventTarget|AnyEventName} arg1\n   * @param {AnyEventName|EventListener} arg2\n   * @param {EventListener|Object|boolean} [arg3]\n   * @param {Object|boolean} [arg4]\n   * @returns {EventArgs}\n   */\n  function processEventArgs(arg1, arg2, arg3, arg4) {\n    if (isFunction(arg2)) {\n      return {\n        target: getDocument().body,\n        event: asString(arg1),\n        listener: arg2,\n        options: arg3\n      }\n    } else {\n      return {\n        target: resolveTarget(arg1),\n        event: asString(arg2),\n        listener: arg3,\n        options: arg4\n      }\n    }\n  }\n\n  /**\n   * Adds an event listener to an element\n   *\n   * @see https://htmx.org/api/#on\n   *\n   * @param {EventTarget|string} arg1 the element to add the listener to | the event name to add the listener for\n   * @param {string|EventListener} arg2 the event name to add the listener for | the listener to add\n   * @param {EventListener|Object|boolean} [arg3] the listener to add | options to add\n   * @param {Object|boolean} [arg4] options to add\n   * @returns {EventListener}\n   */\n  function addEventListenerImpl(arg1, arg2, arg3, arg4) {\n    ready(function() {\n      const eventArgs = processEventArgs(arg1, arg2, arg3, arg4)\n      eventArgs.target.addEventListener(eventArgs.event, eventArgs.listener, eventArgs.options)\n    })\n    const b = isFunction(arg2)\n    return b ? arg2 : arg3\n  }\n\n  /**\n   * Removes an event listener from an element\n   *\n   * @see https://htmx.org/api/#off\n   *\n   * @param {EventTarget|string} arg1 the element to remove the listener from | the event name to remove the listener from\n   * @param {string|EventListener} arg2 the event name to remove the listener from | the listener to remove\n   * @param {EventListener} [arg3] the listener to remove\n   * @returns {EventListener}\n   */\n  function removeEventListenerImpl(arg1, arg2, arg3) {\n    ready(function() {\n      const eventArgs = processEventArgs(arg1, arg2, arg3)\n      eventArgs.target.removeEventListener(eventArgs.event, eventArgs.listener)\n    })\n    return isFunction(arg2) ? arg2 : arg3\n  }\n\n  //= ===================================================================\n  // Node processing\n  //= ===================================================================\n\n  const DUMMY_ELT = getDocument().createElement('output') // dummy element for bad selectors\n  /**\n   * @param {Element} elt\n   * @param {string} attrName\n   * @returns {(Node|Window)[]}\n   */\n  function findAttributeTargets(elt, attrName) {\n    const attrTarget = getClosestAttributeValue(elt, attrName)\n    if (attrTarget) {\n      if (attrTarget === 'this') {\n        return [findThisElement(elt, attrName)]\n      } else {\n        const result = querySelectorAllExt(elt, attrTarget)\n        // find `inherit` whole word in value, make sure it's surrounded by commas or is at the start/end of string\n        const shouldInherit = /(^|,)(\\s*)inherit(\\s*)($|,)/.test(attrTarget)\n        if (shouldInherit) {\n          const eltToInheritFrom = asElement(getClosestMatch(elt, function(parent) {\n            return parent !== elt && hasAttribute(asElement(parent), attrName)\n          }))\n          if (eltToInheritFrom) {\n            result.push(...findAttributeTargets(eltToInheritFrom, attrName))\n          }\n        }\n        if (result.length === 0) {\n          logError('The selector \"' + attrTarget + '\" on ' + attrName + ' returned no matches!')\n          return [DUMMY_ELT]\n        } else {\n          return result\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} attribute\n   * @returns {Element|null}\n   */\n  function findThisElement(elt, attribute) {\n    return asElement(getClosestMatch(elt, function(elt) {\n      return getAttributeValue(asElement(elt), attribute) != null\n    }))\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Node|Window|null}\n   */\n  function getTarget(elt) {\n    const targetStr = getClosestAttributeValue(elt, 'hx-target')\n    if (targetStr) {\n      if (targetStr === 'this') {\n        return findThisElement(elt, 'hx-target')\n      } else {\n        return querySelectorExt(elt, targetStr)\n      }\n    } else {\n      const data = getInternalData(elt)\n      if (data.boosted) {\n        return getDocument().body\n      } else {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {string} name\n   * @returns {boolean}\n   */\n  function shouldSettleAttribute(name) {\n    return htmx.config.attributesToSettle.includes(name)\n  }\n\n  /**\n   * @param {Element} mergeTo\n   * @param {Element} mergeFrom\n   */\n  function cloneAttributes(mergeTo, mergeFrom) {\n    forEach(Array.from(mergeTo.attributes), function(attr) {\n      if (!mergeFrom.hasAttribute(attr.name) && shouldSettleAttribute(attr.name)) {\n        mergeTo.removeAttribute(attr.name)\n      }\n    })\n    forEach(mergeFrom.attributes, function(attr) {\n      if (shouldSettleAttribute(attr.name)) {\n        mergeTo.setAttribute(attr.name, attr.value)\n      }\n    })\n  }\n\n  /**\n   * @param {HtmxSwapStyle} swapStyle\n   * @param {Element} target\n   * @returns {boolean}\n   */\n  function isInlineSwap(swapStyle, target) {\n    const extensions = getExtensions(target)\n    for (let i = 0; i < extensions.length; i++) {\n      const extension = extensions[i]\n      try {\n        if (extension.isInlineSwap(swapStyle)) {\n          return true\n        }\n      } catch (e) {\n        logError(e)\n      }\n    }\n    return swapStyle === 'outerHTML'\n  }\n\n  /**\n   * @param {string} oobValue\n   * @param {Element} oobElement\n   * @param {HtmxSettleInfo} settleInfo\n   * @param {Node|Document} [rootNode]\n   * @returns\n   */\n  function oobSwap(oobValue, oobElement, settleInfo, rootNode) {\n    rootNode = rootNode || getDocument()\n    let selector = '#' + CSS.escape(getRawAttribute(oobElement, 'id'))\n    /** @type HtmxSwapStyle */\n    let swapStyle = 'outerHTML'\n    if (oobValue === 'true') {\n      // do nothing\n    } else if (oobValue.indexOf(':') > 0) {\n      swapStyle = oobValue.substring(0, oobValue.indexOf(':'))\n      selector = oobValue.substring(oobValue.indexOf(':') + 1)\n    } else {\n      swapStyle = oobValue\n    }\n    oobElement.removeAttribute('hx-swap-oob')\n    oobElement.removeAttribute('data-hx-swap-oob')\n\n    const targets = querySelectorAllExt(rootNode, selector, false)\n    if (targets.length) {\n      forEach(\n        targets,\n        function(target) {\n          let fragment\n          const oobElementClone = oobElement.cloneNode(true)\n          fragment = getDocument().createDocumentFragment()\n          fragment.appendChild(oobElementClone)\n          if (!isInlineSwap(swapStyle, target)) {\n            fragment = asParentNode(oobElementClone) // if this is not an inline swap, we use the content of the node, not the node itself\n          }\n\n          const beforeSwapDetails = { shouldSwap: true, target, fragment }\n          if (!triggerEvent(target, 'htmx:oobBeforeSwap', beforeSwapDetails)) return\n\n          target = beforeSwapDetails.target // allow re-targeting\n          if (beforeSwapDetails.shouldSwap) {\n            handlePreservedElements(fragment)\n            swapWithStyle(swapStyle, target, target, fragment, settleInfo)\n            restorePreservedElements()\n          }\n          forEach(settleInfo.elts, function(elt) {\n            triggerEvent(elt, 'htmx:oobAfterSwap', beforeSwapDetails)\n          })\n        }\n      )\n      oobElement.parentNode.removeChild(oobElement)\n    } else {\n      oobElement.parentNode.removeChild(oobElement)\n      triggerErrorEvent(getDocument().body, 'htmx:oobErrorNoTarget', { content: oobElement, target: selector })\n    }\n    return oobValue\n  }\n\n  function restorePreservedElements() {\n    const pantry = find('#--htmx-preserve-pantry--')\n    if (pantry) {\n      for (const preservedElt of [...pantry.children]) {\n        const existingElement = find('#' + preservedElt.id)\n        // @ts-ignore - use proposed moveBefore feature\n        existingElement.parentNode.moveBefore(preservedElt, existingElement)\n        existingElement.remove()\n      }\n      pantry.remove()\n    }\n  }\n\n  /**\n   * @param {DocumentFragment|ParentNode} fragment\n   */\n  function handlePreservedElements(fragment) {\n    forEach(findAll(fragment, '[hx-preserve], [data-hx-preserve]'), function(preservedElt) {\n      const id = getAttributeValue(preservedElt, 'id')\n      const existingElement = getDocument().getElementById(id)\n      if (existingElement != null) {\n        if (preservedElt.moveBefore) { // if the moveBefore API exists, use it\n          // get or create a storage spot for stuff\n          let pantry = find('#--htmx-preserve-pantry--')\n          if (pantry == null) {\n            getDocument().body.insertAdjacentHTML('afterend', \"<div id='--htmx-preserve-pantry--'></div>\")\n            pantry = find('#--htmx-preserve-pantry--')\n          }\n          // @ts-ignore - use proposed moveBefore feature\n          pantry.moveBefore(existingElement, null)\n        } else {\n          preservedElt.parentNode.replaceChild(existingElement, preservedElt)\n        }\n      }\n    })\n  }\n\n  /**\n   * @param {Node} parentNode\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function handleAttributes(parentNode, fragment, settleInfo) {\n    forEach(fragment.querySelectorAll('[id]'), function(newNode) {\n      const id = getRawAttribute(newNode, 'id')\n      if (id && id.length > 0) {\n        const parentElt = asParentNode(parentNode)\n        const oldNode = parentElt && parentElt.querySelector(CSS.escape(newNode.tagName) + '#' + CSS.escape(id))\n        if (oldNode && oldNode !== parentElt) {\n          const newAttributes = newNode.cloneNode()\n          cloneAttributes(newNode, oldNode)\n          settleInfo.tasks.push(function() {\n            cloneAttributes(newNode, newAttributes)\n          })\n        }\n      }\n    })\n  }\n\n  /**\n   * @param {Node} child\n   * @returns {HtmxSettleTask}\n   */\n  function makeAjaxLoadTask(child) {\n    return function() {\n      removeClassFromElement(child, htmx.config.addedClass)\n      processNode(asElement(child))\n      processFocus(asParentNode(child))\n      triggerEvent(child, 'htmx:load')\n    }\n  }\n\n  /**\n   * @param {ParentNode} child\n   */\n  function processFocus(child) {\n    const autofocus = '[autofocus]'\n    const autoFocusedElt = asHtmlElement(matches(child, autofocus) ? child : child.querySelector(autofocus))\n    if (autoFocusedElt != null) {\n      autoFocusedElt.focus()\n    }\n  }\n\n  /**\n   * @param {Node} parentNode\n   * @param {Node} insertBefore\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function insertNodesBefore(parentNode, insertBefore, fragment, settleInfo) {\n    handleAttributes(parentNode, fragment, settleInfo)\n    while (fragment.childNodes.length > 0) {\n      const child = fragment.firstChild\n      addClassToElement(asElement(child), htmx.config.addedClass)\n      parentNode.insertBefore(child, insertBefore)\n      if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) {\n        settleInfo.tasks.push(makeAjaxLoadTask(child))\n      }\n    }\n  }\n\n  /**\n   * based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0,\n   * derived from Java's string hashcode implementation\n   * @param {string} string\n   * @param {number} hash\n   * @returns {number}\n   */\n  function stringHash(string, hash) {\n    let char = 0\n    while (char < string.length) {\n      hash = (hash << 5) - hash + string.charCodeAt(char++) | 0 // bitwise or ensures we have a 32-bit int\n    }\n    return hash\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {number}\n   */\n  function attributeHash(elt) {\n    let hash = 0\n    for (let i = 0; i < elt.attributes.length; i++) {\n      const attribute = elt.attributes[i]\n      if (attribute.value) { // only include attributes w/ actual values (empty is same as non-existent)\n        hash = stringHash(attribute.name, hash)\n        hash = stringHash(attribute.value, hash)\n      }\n    }\n    return hash\n  }\n\n  /**\n   * @param {EventTarget} elt\n   */\n  function deInitOnHandlers(elt) {\n    const internalData = getInternalData(elt)\n    if (internalData.onHandlers) {\n      for (let i = 0; i < internalData.onHandlers.length; i++) {\n        const handlerInfo = internalData.onHandlers[i]\n        removeEventListenerImpl(elt, handlerInfo.event, handlerInfo.listener)\n      }\n      delete internalData.onHandlers\n    }\n  }\n\n  /**\n   * @param {Node} element\n   */\n  function deInitNode(element) {\n    const internalData = getInternalData(element)\n    if (internalData.timeout) {\n      clearTimeout(internalData.timeout)\n    }\n    if (internalData.listenerInfos) {\n      forEach(internalData.listenerInfos, function(info) {\n        if (info.on) {\n          removeEventListenerImpl(info.on, info.trigger, info.listener)\n        }\n      })\n    }\n    deInitOnHandlers(element)\n    forEach(Object.keys(internalData), function(key) { if (key !== 'firstInitCompleted') delete internalData[key] })\n  }\n\n  /**\n   * @param {Node} element\n   */\n  function cleanUpElement(element) {\n    triggerEvent(element, 'htmx:beforeCleanupElement')\n    deInitNode(element)\n    // @ts-ignore\n    forEach(element.children, function(child) { cleanUpElement(child) })\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapOuterHTML(target, fragment, settleInfo) {\n    if (target.tagName === 'BODY') { // special case the body to innerHTML because DocumentFragments can't contain a body elt unfortunately\n      return swapInnerHTML(target, fragment, settleInfo)\n    }\n    /** @type {Node} */\n    let newElt\n    const eltBeforeNewContent = target.previousSibling\n    const parentNode = parentElt(target)\n    if (!parentNode) { // when parent node disappears, we can't do anything\n      return\n    }\n    insertNodesBefore(parentNode, target, fragment, settleInfo)\n    if (eltBeforeNewContent == null) {\n      newElt = parentNode.firstChild\n    } else {\n      newElt = eltBeforeNewContent.nextSibling\n    }\n    settleInfo.elts = settleInfo.elts.filter(function(e) { return e !== target })\n    // scan through all newly added content and add all elements to the settle info so we trigger\n    // events properly on them\n    while (newElt && newElt !== target) {\n      if (newElt instanceof Element) {\n        settleInfo.elts.push(newElt)\n      }\n      newElt = newElt.nextSibling\n    }\n    cleanUpElement(target)\n    target.remove()\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapAfterBegin(target, fragment, settleInfo) {\n    return insertNodesBefore(target, target.firstChild, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapBeforeBegin(target, fragment, settleInfo) {\n    return insertNodesBefore(parentElt(target), target, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapBeforeEnd(target, fragment, settleInfo) {\n    return insertNodesBefore(target, null, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapAfterEnd(target, fragment, settleInfo) {\n    return insertNodesBefore(parentElt(target), target.nextSibling, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   */\n  function swapDelete(target) {\n    cleanUpElement(target)\n    const parent = parentElt(target)\n    if (parent) {\n      return parent.removeChild(target)\n    }\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapInnerHTML(target, fragment, settleInfo) {\n    const firstChild = target.firstChild\n    insertNodesBefore(target, firstChild, fragment, settleInfo)\n    if (firstChild) {\n      while (firstChild.nextSibling) {\n        cleanUpElement(firstChild.nextSibling)\n        target.removeChild(firstChild.nextSibling)\n      }\n      cleanUpElement(firstChild)\n      target.removeChild(firstChild)\n    }\n  }\n\n  /**\n   * @param {HtmxSwapStyle} swapStyle\n   * @param {Element} elt\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapWithStyle(swapStyle, elt, target, fragment, settleInfo) {\n    switch (swapStyle) {\n      case 'none':\n        return\n      case 'outerHTML':\n        swapOuterHTML(target, fragment, settleInfo)\n        return\n      case 'afterbegin':\n        swapAfterBegin(target, fragment, settleInfo)\n        return\n      case 'beforebegin':\n        swapBeforeBegin(target, fragment, settleInfo)\n        return\n      case 'beforeend':\n        swapBeforeEnd(target, fragment, settleInfo)\n        return\n      case 'afterend':\n        swapAfterEnd(target, fragment, settleInfo)\n        return\n      case 'delete':\n        swapDelete(target)\n        return\n      default:\n        var extensions = getExtensions(elt)\n        for (let i = 0; i < extensions.length; i++) {\n          const ext = extensions[i]\n          try {\n            const newElements = ext.handleSwap(swapStyle, target, fragment, settleInfo)\n            if (newElements) {\n              if (Array.isArray(newElements)) {\n                // if handleSwap returns an array (like) of elements, we handle them\n                for (let j = 0; j < newElements.length; j++) {\n                  const child = newElements[j]\n                  if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) {\n                    settleInfo.tasks.push(makeAjaxLoadTask(child))\n                  }\n                }\n              }\n              return\n            }\n          } catch (e) {\n            logError(e)\n          }\n        }\n        if (swapStyle === 'innerHTML') {\n          swapInnerHTML(target, fragment, settleInfo)\n        } else {\n          swapWithStyle(htmx.config.defaultSwapStyle, elt, target, fragment, settleInfo)\n        }\n    }\n  }\n\n  /**\n   * @param {DocumentFragment} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   * @param {Node|Document} [rootNode]\n   */\n  function findAndSwapOobElements(fragment, settleInfo, rootNode) {\n    var oobElts = findAll(fragment, '[hx-swap-oob], [data-hx-swap-oob]')\n    forEach(oobElts, function(oobElement) {\n      if (htmx.config.allowNestedOobSwaps || oobElement.parentElement === null) {\n        const oobValue = getAttributeValue(oobElement, 'hx-swap-oob')\n        if (oobValue != null) {\n          oobSwap(oobValue, oobElement, settleInfo, rootNode)\n        }\n      } else {\n        oobElement.removeAttribute('hx-swap-oob')\n        oobElement.removeAttribute('data-hx-swap-oob')\n      }\n    })\n    return oobElts.length > 0\n  }\n\n  /**\n   * Implements complete swapping pipeline, including: delay, view transitions, focus and selection preservation,\n   * title updates, scroll, OOB swapping, normal swapping and settling\n   * @param {string|Element} target\n   * @param {string} content\n   * @param {HtmxSwapSpecification} swapSpec\n   * @param {SwapOptions} [swapOptions]\n   */\n  function swap(target, content, swapSpec, swapOptions) {\n    if (!swapOptions) {\n      swapOptions = {}\n    }\n    // optional transition API promise callbacks\n    let settleResolve = null\n    let settleReject = null\n\n    let doSwap = function() {\n      maybeCall(swapOptions.beforeSwapCallback)\n\n      target = resolveTarget(target)\n      const rootNode = swapOptions.contextElement ? getRootNode(swapOptions.contextElement, false) : getDocument()\n\n      // preserve focus and selection\n      const activeElt = document.activeElement\n      let selectionInfo = {}\n      selectionInfo = {\n        elt: activeElt,\n        // @ts-ignore\n        start: activeElt ? activeElt.selectionStart : null,\n        // @ts-ignore\n        end: activeElt ? activeElt.selectionEnd : null\n      }\n      const settleInfo = makeSettleInfo(target)\n\n      // For text content swaps, don't parse the response as HTML, just insert it\n      if (swapSpec.swapStyle === 'textContent') {\n        target.textContent = content\n      // Otherwise, make the fragment and process it\n      } else {\n        let fragment = makeFragment(content)\n\n        settleInfo.title = swapOptions.title || fragment.title\n        if (swapOptions.historyRequest) {\n          // @ts-ignore fragment can be a parentNode Element\n          fragment = fragment.querySelector('[hx-history-elt],[data-hx-history-elt]') || fragment\n        }\n\n        // select-oob swaps\n        if (swapOptions.selectOOB) {\n          const oobSelectValues = swapOptions.selectOOB.split(',')\n          for (let i = 0; i < oobSelectValues.length; i++) {\n            const oobSelectValue = oobSelectValues[i].split(':', 2)\n            let id = oobSelectValue[0].trim()\n            if (id.indexOf('#') === 0) {\n              id = id.substring(1)\n            }\n            const oobValue = oobSelectValue[1] || 'true'\n            const oobElement = fragment.querySelector('#' + id)\n            if (oobElement) {\n              oobSwap(oobValue, oobElement, settleInfo, rootNode)\n            }\n          }\n        }\n        // oob swaps\n        findAndSwapOobElements(fragment, settleInfo, rootNode)\n        forEach(findAll(fragment, 'template'), /** @param {HTMLTemplateElement} template */function(template) {\n          if (template.content && findAndSwapOobElements(template.content, settleInfo, rootNode)) {\n            // Avoid polluting the DOM with empty templates that were only used to encapsulate oob swap\n            template.remove()\n          }\n        })\n\n        // normal swap\n        if (swapOptions.select) {\n          const newFragment = getDocument().createDocumentFragment()\n          forEach(fragment.querySelectorAll(swapOptions.select), function(node) {\n            newFragment.appendChild(node)\n          })\n          fragment = newFragment\n        }\n        handlePreservedElements(fragment)\n        swapWithStyle(swapSpec.swapStyle, swapOptions.contextElement, target, fragment, settleInfo)\n        restorePreservedElements()\n      }\n\n      // apply saved focus and selection information to swapped content\n      if (selectionInfo.elt &&\n        !bodyContains(selectionInfo.elt) &&\n        getRawAttribute(selectionInfo.elt, 'id')) {\n        const newActiveElt = document.getElementById(getRawAttribute(selectionInfo.elt, 'id'))\n        const focusOptions = { preventScroll: swapSpec.focusScroll !== undefined ? !swapSpec.focusScroll : !htmx.config.defaultFocusScroll }\n        if (newActiveElt) {\n          // @ts-ignore\n          if (selectionInfo.start && newActiveElt.setSelectionRange) {\n            try {\n              // @ts-ignore\n              newActiveElt.setSelectionRange(selectionInfo.start, selectionInfo.end)\n            } catch (e) {\n              // the setSelectionRange method is present on fields that don't support it, so just let this fail\n            }\n          }\n          newActiveElt.focus(focusOptions)\n        }\n      }\n\n      removeClassFromElement(target, htmx.config.swappingClass)\n      forEach(settleInfo.elts, function(elt) {\n        if (elt.classList) {\n          addClassToElement(elt, htmx.config.settlingClass)\n        }\n        triggerEvent(elt, 'htmx:afterSwap', swapOptions.eventInfo)\n      })\n      maybeCall(swapOptions.afterSwapCallback)\n\n      // merge in new title after swap but before settle\n      if (!swapSpec.ignoreTitle) {\n        handleTitle(settleInfo.title)\n      }\n\n      // settle\n      const doSettle = function() {\n        forEach(settleInfo.tasks, function(task) {\n          task.call()\n        })\n        forEach(settleInfo.elts, function(elt) {\n          if (elt.classList) {\n            removeClassFromElement(elt, htmx.config.settlingClass)\n          }\n          triggerEvent(elt, 'htmx:afterSettle', swapOptions.eventInfo)\n        })\n\n        if (swapOptions.anchor) {\n          const anchorTarget = asElement(resolveTarget('#' + swapOptions.anchor))\n          if (anchorTarget) {\n            anchorTarget.scrollIntoView({ block: 'start', behavior: 'auto' })\n          }\n        }\n\n        updateScrollState(settleInfo.elts, swapSpec)\n        maybeCall(swapOptions.afterSettleCallback)\n        maybeCall(settleResolve)\n      }\n\n      if (swapSpec.settleDelay > 0) {\n        getWindow().setTimeout(doSettle, swapSpec.settleDelay)\n      } else {\n        doSettle()\n      }\n    }\n    let shouldTransition = htmx.config.globalViewTransitions\n    if (swapSpec.hasOwnProperty('transition')) {\n      shouldTransition = swapSpec.transition\n    }\n\n    const elt = swapOptions.contextElement || getDocument()\n\n    if (shouldTransition &&\n            triggerEvent(elt, 'htmx:beforeTransition', swapOptions.eventInfo) &&\n            typeof Promise !== 'undefined' &&\n            // @ts-ignore experimental feature atm\n            document.startViewTransition) {\n      const settlePromise = new Promise(function(_resolve, _reject) {\n        settleResolve = _resolve\n        settleReject = _reject\n      })\n      // wrap the original doSwap() in a call to startViewTransition()\n      const innerDoSwap = doSwap\n      doSwap = function() {\n        // @ts-ignore experimental feature atm\n        document.startViewTransition(function() {\n          innerDoSwap()\n          return settlePromise\n        })\n      }\n    }\n\n    try {\n      if (swapSpec?.swapDelay && swapSpec.swapDelay > 0) {\n        getWindow().setTimeout(doSwap, swapSpec.swapDelay)\n      } else {\n        doSwap()\n      }\n    } catch (e) {\n      triggerErrorEvent(elt, 'htmx:swapError', swapOptions.eventInfo)\n      maybeCall(settleReject)\n      throw e\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {string} header\n   * @param {EventTarget} elt\n   */\n  function handleTriggerHeader(xhr, header, elt) {\n    const triggerBody = xhr.getResponseHeader(header)\n    if (triggerBody.indexOf('{') === 0) {\n      const triggers = parseJSON(triggerBody)\n      for (const eventName in triggers) {\n        if (triggers.hasOwnProperty(eventName)) {\n          let detail = triggers[eventName]\n          if (isRawObject(detail)) {\n            // @ts-ignore\n            elt = detail.target !== undefined ? detail.target : elt\n          } else {\n            detail = { value: detail }\n          }\n          triggerEvent(elt, eventName, detail)\n        }\n      }\n    } else {\n      const eventNames = triggerBody.split(',')\n      for (let i = 0; i < eventNames.length; i++) {\n        triggerEvent(elt, eventNames[i].trim(), [])\n      }\n    }\n  }\n\n  const WHITESPACE = /\\s/\n  const WHITESPACE_OR_COMMA = /[\\s,]/\n  const SYMBOL_START = /[_$a-zA-Z]/\n  const SYMBOL_CONT = /[_$a-zA-Z0-9]/\n  const STRINGISH_START = ['\"', \"'\", '/']\n  const NOT_WHITESPACE = /[^\\s]/\n  const COMBINED_SELECTOR_START = /[{(]/\n  const COMBINED_SELECTOR_END = /[})]/\n\n  /**\n   * @param {string} str\n   * @returns {string[]}\n   */\n  function tokenizeString(str) {\n    /** @type string[] */\n    const tokens = []\n    let position = 0\n    while (position < str.length) {\n      if (SYMBOL_START.exec(str.charAt(position))) {\n        var startPosition = position\n        while (SYMBOL_CONT.exec(str.charAt(position + 1))) {\n          position++\n        }\n        tokens.push(str.substring(startPosition, position + 1))\n      } else if (STRINGISH_START.indexOf(str.charAt(position)) !== -1) {\n        const startChar = str.charAt(position)\n        var startPosition = position\n        position++\n        while (position < str.length && str.charAt(position) !== startChar) {\n          if (str.charAt(position) === '\\\\') {\n            position++\n          }\n          position++\n        }\n        tokens.push(str.substring(startPosition, position + 1))\n      } else {\n        const symbol = str.charAt(position)\n        tokens.push(symbol)\n      }\n      position++\n    }\n    return tokens\n  }\n\n  /**\n   * @param {string} token\n   * @param {string|null} last\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  function isPossibleRelativeReference(token, last, paramName) {\n    return SYMBOL_START.exec(token.charAt(0)) &&\n      token !== 'true' &&\n      token !== 'false' &&\n      token !== 'this' &&\n      token !== paramName &&\n      last !== '.'\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {string[]} tokens\n   * @param {string} paramName\n   * @returns {ConditionalFunction|null}\n   */\n  function maybeGenerateConditional(elt, tokens, paramName) {\n    if (tokens[0] === '[') {\n      tokens.shift()\n      let bracketCount = 1\n      let conditionalSource = ' return (function(' + paramName + '){ return ('\n      let last = null\n      while (tokens.length > 0) {\n        const token = tokens[0]\n        // @ts-ignore For some reason tsc doesn't understand the shift call, and thinks we're comparing the same value here, i.e. '[' vs ']'\n        if (token === ']') {\n          bracketCount--\n          if (bracketCount === 0) {\n            if (last === null) {\n              conditionalSource = conditionalSource + 'true'\n            }\n            tokens.shift()\n            conditionalSource += ')})'\n            try {\n              const conditionFunction = maybeEval(elt, function() {\n                return Function(conditionalSource)()\n              },\n              function() { return true })\n              conditionFunction.source = conditionalSource\n              return conditionFunction\n            } catch (e) {\n              triggerErrorEvent(getDocument().body, 'htmx:syntax:error', { error: e, source: conditionalSource })\n              return null\n            }\n          }\n        } else if (token === '[') {\n          bracketCount++\n        }\n        if (isPossibleRelativeReference(token, last, paramName)) {\n          conditionalSource += '((' + paramName + '.' + token + ') ? (' + paramName + '.' + token + ') : (window.' + token + '))'\n        } else {\n          conditionalSource = conditionalSource + token\n        }\n        last = tokens.shift()\n      }\n    }\n  }\n\n  /**\n   * @param {string[]} tokens\n   * @param {RegExp} match\n   * @returns {string}\n   */\n  function consumeUntil(tokens, match) {\n    let result = ''\n    while (tokens.length > 0 && !match.test(tokens[0])) {\n      result += tokens.shift()\n    }\n    return result\n  }\n\n  /**\n   * @param {string[]} tokens\n   * @returns {string}\n   */\n  function consumeCSSSelector(tokens) {\n    let result\n    if (tokens.length > 0 && COMBINED_SELECTOR_START.test(tokens[0])) {\n      tokens.shift()\n      result = consumeUntil(tokens, COMBINED_SELECTOR_END).trim()\n      tokens.shift()\n    } else {\n      result = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n    }\n    return result\n  }\n\n  const INPUT_SELECTOR = 'input, textarea, select'\n\n  /**\n   * @param {Element} elt\n   * @param {string} explicitTrigger\n   * @param {Object} cache for trigger specs\n   * @returns {HtmxTriggerSpecification[]}\n   */\n  function parseAndCacheTrigger(elt, explicitTrigger, cache) {\n    /** @type HtmxTriggerSpecification[] */\n    const triggerSpecs = []\n    const tokens = tokenizeString(explicitTrigger)\n    do {\n      consumeUntil(tokens, NOT_WHITESPACE)\n      const initialLength = tokens.length\n      const trigger = consumeUntil(tokens, /[,\\[\\s]/)\n      if (trigger !== '') {\n        if (trigger === 'every') {\n          /** @type HtmxTriggerSpecification */\n          const every = { trigger: 'every' }\n          consumeUntil(tokens, NOT_WHITESPACE)\n          every.pollInterval = parseInterval(consumeUntil(tokens, /[,\\[\\s]/))\n          consumeUntil(tokens, NOT_WHITESPACE)\n          var eventFilter = maybeGenerateConditional(elt, tokens, 'event')\n          if (eventFilter) {\n            every.eventFilter = eventFilter\n          }\n          triggerSpecs.push(every)\n        } else {\n          /** @type HtmxTriggerSpecification */\n          const triggerSpec = { trigger }\n          var eventFilter = maybeGenerateConditional(elt, tokens, 'event')\n          if (eventFilter) {\n            triggerSpec.eventFilter = eventFilter\n          }\n          consumeUntil(tokens, NOT_WHITESPACE)\n          while (tokens.length > 0 && tokens[0] !== ',') {\n            const token = tokens.shift()\n            if (token === 'changed') {\n              triggerSpec.changed = true\n            } else if (token === 'once') {\n              triggerSpec.once = true\n            } else if (token === 'consume') {\n              triggerSpec.consume = true\n            } else if (token === 'delay' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.delay = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA))\n            } else if (token === 'from' && tokens[0] === ':') {\n              tokens.shift()\n              if (COMBINED_SELECTOR_START.test(tokens[0])) {\n                var from_arg = consumeCSSSelector(tokens)\n              } else {\n                var from_arg = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n                if (from_arg === 'closest' || from_arg === 'find' || from_arg === 'next' || from_arg === 'previous') {\n                  tokens.shift()\n                  const selector = consumeCSSSelector(tokens)\n                  // `next` and `previous` allow a selector-less syntax\n                  if (selector.length > 0) {\n                    from_arg += ' ' + selector\n                  }\n                }\n              }\n              triggerSpec.from = from_arg\n            } else if (token === 'target' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.target = consumeCSSSelector(tokens)\n            } else if (token === 'throttle' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.throttle = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA))\n            } else if (token === 'queue' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.queue = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n            } else if (token === 'root' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec[token] = consumeCSSSelector(tokens)\n            } else if (token === 'threshold' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec[token] = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n            } else {\n              triggerErrorEvent(elt, 'htmx:syntax:error', { token: tokens.shift() })\n            }\n            consumeUntil(tokens, NOT_WHITESPACE)\n          }\n          triggerSpecs.push(triggerSpec)\n        }\n      }\n      if (tokens.length === initialLength) {\n        triggerErrorEvent(elt, 'htmx:syntax:error', { token: tokens.shift() })\n      }\n      consumeUntil(tokens, NOT_WHITESPACE)\n    } while (tokens[0] === ',' && tokens.shift())\n    if (cache) {\n      cache[explicitTrigger] = triggerSpecs\n    }\n    return triggerSpecs\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {HtmxTriggerSpecification[]}\n   */\n  function getTriggerSpecs(elt) {\n    const explicitTrigger = getAttributeValue(elt, 'hx-trigger')\n    let triggerSpecs = []\n    if (explicitTrigger) {\n      const cache = htmx.config.triggerSpecsCache\n      triggerSpecs = (cache && cache[explicitTrigger]) || parseAndCacheTrigger(elt, explicitTrigger, cache)\n    }\n\n    if (triggerSpecs.length > 0) {\n      return triggerSpecs\n    } else if (matches(elt, 'form')) {\n      return [{ trigger: 'submit' }]\n    } else if (matches(elt, 'input[type=\"button\"], input[type=\"submit\"]')) {\n      return [{ trigger: 'click' }]\n    } else if (matches(elt, INPUT_SELECTOR)) {\n      return [{ trigger: 'change' }]\n    } else {\n      return [{ trigger: 'click' }]\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function cancelPolling(elt) {\n    getInternalData(elt).cancelled = true\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxTriggerSpecification} spec\n   */\n  function processPolling(elt, handler, spec) {\n    const nodeData = getInternalData(elt)\n    nodeData.timeout = getWindow().setTimeout(function() {\n      if (bodyContains(elt) && nodeData.cancelled !== true) {\n        if (!maybeFilterEvent(spec, elt, makeEvent('hx:poll:trigger', {\n          triggerSpec: spec,\n          target: elt\n        }))) {\n          handler(elt)\n        }\n        processPolling(elt, handler, spec)\n      }\n    }, spec.pollInterval)\n  }\n\n  /**\n   * @param {HTMLAnchorElement} elt\n   * @returns {boolean}\n   */\n  function isLocalLink(elt) {\n    return location.hostname === elt.hostname &&\n      getRawAttribute(elt, 'href') &&\n      getRawAttribute(elt, 'href').indexOf('#') !== 0\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function eltIsDisabled(elt) {\n    return closest(elt, htmx.config.disableSelector)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification[]} triggerSpecs\n   */\n  function boostElement(elt, nodeData, triggerSpecs) {\n    if ((elt instanceof HTMLAnchorElement && isLocalLink(elt) && (elt.target === '' || elt.target === '_self')) || (elt.tagName === 'FORM' && String(getRawAttribute(elt, 'method')).toLowerCase() !== 'dialog')) {\n      nodeData.boosted = true\n      let verb, path\n      if (elt.tagName === 'A') {\n        verb = (/** @type HttpVerb */('get'))\n        path = getRawAttribute(elt, 'href')\n      } else {\n        const rawAttribute = getRawAttribute(elt, 'method')\n        verb = (/** @type HttpVerb */(rawAttribute ? rawAttribute.toLowerCase() : 'get'))\n        path = getRawAttribute(elt, 'action')\n        if (path == null || path === '') {\n          // if there is no action attribute on the form set path to current href before the\n          // following logic to properly clear parameters on a GET (not on a POST!)\n          path = location.href\n        }\n        if (verb === 'get' && path.includes('?')) {\n          path = path.replace(/\\?[^#]+/, '')\n        }\n      }\n      triggerSpecs.forEach(function(triggerSpec) {\n        addEventListener(elt, function(node, evt) {\n          const elt = asElement(node)\n          if (eltIsDisabled(elt)) {\n            cleanUpElement(elt)\n            return\n          }\n          issueAjaxRequest(verb, path, elt, evt)\n        }, nodeData, triggerSpec, true)\n      })\n    }\n  }\n\n  /**\n   * @param {Event} evt\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function shouldCancel(evt, elt) {\n    if (evt.type === 'submit' && elt.tagName === 'FORM') {\n      return true\n    } else if (evt.type === 'click') {\n      // find button wrapping the trigger element\n      const btn = /** @type {HTMLButtonElement|HTMLInputElement|null} */ (elt.closest('input[type=\"submit\"], button'))\n      // Do not cancel on buttons that 1) don't have a related form or 2) have a type attribute of 'reset'/'button'.\n      if (btn && btn.form && btn.type === 'submit') {\n        return true\n      }\n\n      // find link wrapping the trigger element\n      const link = elt.closest('a')\n      // Allow links with href=\"#fragment\" (anchors with content after #) to perform normal fragment navigation.\n      // Cancel default action for links with href=\"#\" (bare hash) to prevent scrolling to top and unwanted URL changes.\n      const samePageAnchor = /^#.+/\n      if (link && link.href && !samePageAnchor.test(link.getAttribute('href'))) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {Event|MouseEvent|KeyboardEvent|TouchEvent} evt\n   * @returns {boolean}\n   */\n  function ignoreBoostedAnchorCtrlClick(elt, evt) {\n    return getInternalData(elt).boosted && elt instanceof HTMLAnchorElement && evt.type === 'click' &&\n      // @ts-ignore this will resolve to undefined for events that don't define those properties, which is fine\n      (evt.ctrlKey || evt.metaKey)\n  }\n\n  /**\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {Node} elt\n   * @param {Event} evt\n   * @returns {boolean}\n   */\n  function maybeFilterEvent(triggerSpec, elt, evt) {\n    const eventFilter = triggerSpec.eventFilter\n    if (eventFilter) {\n      try {\n        return eventFilter.call(elt, evt) !== true\n      } catch (e) {\n        const source = eventFilter.source\n        triggerErrorEvent(getDocument().body, 'htmx:eventFilter:error', { error: e, source })\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {boolean} [explicitCancel]\n   */\n  function addEventListener(elt, handler, nodeData, triggerSpec, explicitCancel) {\n    const elementData = getInternalData(elt)\n    /** @type {(Node|Window)[]} */\n    let eltsToListenOn\n    if (triggerSpec.from) {\n      eltsToListenOn = querySelectorAllExt(elt, triggerSpec.from)\n    } else {\n      eltsToListenOn = [elt]\n    }\n    // store the initial values of the elements, so we can tell if they change\n    if (triggerSpec.changed) {\n      if (!('lastValue' in elementData)) {\n        elementData.lastValue = new WeakMap()\n      }\n      eltsToListenOn.forEach(function(eltToListenOn) {\n        if (!elementData.lastValue.has(triggerSpec)) {\n          elementData.lastValue.set(triggerSpec, new WeakMap())\n        }\n        // @ts-ignore value will be undefined for non-input elements, which is fine\n        elementData.lastValue.get(triggerSpec).set(eltToListenOn, eltToListenOn.value)\n      })\n    }\n    forEach(eltsToListenOn, function(eltToListenOn) {\n      /** @type EventListener */\n      const eventListener = function(evt) {\n        if (!bodyContains(elt)) {\n          eltToListenOn.removeEventListener(triggerSpec.trigger, eventListener)\n          return\n        }\n        if (ignoreBoostedAnchorCtrlClick(elt, evt)) {\n          return\n        }\n        if (explicitCancel || shouldCancel(evt, eltToListenOn)) {\n          evt.preventDefault()\n        }\n        if (maybeFilterEvent(triggerSpec, elt, evt)) {\n          return\n        }\n        const eventData = getInternalData(evt)\n        eventData.triggerSpec = triggerSpec\n        if (eventData.handledFor == null) {\n          eventData.handledFor = []\n        }\n        if (eventData.handledFor.indexOf(elt) < 0) {\n          eventData.handledFor.push(elt)\n          if (triggerSpec.consume) {\n            evt.stopPropagation()\n          }\n          if (triggerSpec.target && evt.target) {\n            if (!matches(asElement(evt.target), triggerSpec.target)) {\n              return\n            }\n          }\n          if (triggerSpec.once) {\n            if (elementData.triggeredOnce) {\n              return\n            } else {\n              elementData.triggeredOnce = true\n            }\n          }\n          if (triggerSpec.changed) {\n            const node = evt.target\n            // @ts-ignore value will be undefined for non-input elements, which is fine\n            const value = node.value\n            const lastValue = elementData.lastValue.get(triggerSpec)\n            if (lastValue.has(node) && lastValue.get(node) === value) {\n              return\n            }\n            lastValue.set(node, value)\n          }\n          if (elementData.delayed) {\n            clearTimeout(elementData.delayed)\n          }\n          if (elementData.throttle) {\n            return\n          }\n\n          if (triggerSpec.throttle > 0) {\n            if (!elementData.throttle) {\n              triggerEvent(elt, 'htmx:trigger')\n              handler(elt, evt)\n              elementData.throttle = getWindow().setTimeout(function() {\n                elementData.throttle = null\n              }, triggerSpec.throttle)\n            }\n          } else if (triggerSpec.delay > 0) {\n            elementData.delayed = getWindow().setTimeout(function() {\n              triggerEvent(elt, 'htmx:trigger')\n              handler(elt, evt)\n            }, triggerSpec.delay)\n          } else {\n            triggerEvent(elt, 'htmx:trigger')\n            handler(elt, evt)\n          }\n        }\n      }\n      if (nodeData.listenerInfos == null) {\n        nodeData.listenerInfos = []\n      }\n      nodeData.listenerInfos.push({\n        trigger: triggerSpec.trigger,\n        listener: eventListener,\n        on: eltToListenOn\n      })\n      eltToListenOn.addEventListener(triggerSpec.trigger, eventListener)\n    })\n  }\n\n  let windowIsScrolling = false // used by initScrollHandler\n  let scrollHandler = null\n  function initScrollHandler() {\n    if (!scrollHandler) {\n      scrollHandler = function() {\n        windowIsScrolling = true\n      }\n      window.addEventListener('scroll', scrollHandler)\n      window.addEventListener('resize', scrollHandler)\n      setInterval(function() {\n        if (windowIsScrolling) {\n          windowIsScrolling = false\n          forEach(getDocument().querySelectorAll(\"[hx-trigger*='revealed'],[data-hx-trigger*='revealed']\"), function(elt) {\n            maybeReveal(elt)\n          })\n        }\n      }, 200)\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function maybeReveal(elt) {\n    if (!hasAttribute(elt, 'data-hx-revealed') && isScrolledIntoView(elt)) {\n      elt.setAttribute('data-hx-revealed', 'true')\n      const nodeData = getInternalData(elt)\n      if (nodeData.initHash) {\n        triggerEvent(elt, 'revealed')\n      } else {\n        // if the node isn't initialized, wait for it before triggering the request\n        elt.addEventListener('htmx:afterProcessNode', function() { triggerEvent(elt, 'revealed') }, { once: true })\n      }\n    }\n  }\n\n  //= ===================================================================\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {number} delay\n   */\n  function loadImmediately(elt, handler, nodeData, delay) {\n    const load = function() {\n      if (!nodeData.loaded) {\n        nodeData.loaded = true\n        triggerEvent(elt, 'htmx:trigger')\n        handler(elt)\n      }\n    }\n    if (delay > 0) {\n      getWindow().setTimeout(load, delay)\n    } else {\n      load()\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification[]} triggerSpecs\n   * @returns {boolean}\n   */\n  function processVerbs(elt, nodeData, triggerSpecs) {\n    let explicitAction = false\n    forEach(VERBS, function(verb) {\n      if (hasAttribute(elt, 'hx-' + verb)) {\n        const path = getAttributeValue(elt, 'hx-' + verb)\n        explicitAction = true\n        nodeData.path = path\n        nodeData.verb = verb\n        triggerSpecs.forEach(function(triggerSpec) {\n          addTriggerHandler(elt, triggerSpec, nodeData, function(node, evt) {\n            const elt = asElement(node)\n            if (eltIsDisabled(elt)) {\n              cleanUpElement(elt)\n              return\n            }\n            issueAjaxRequest(verb, path, elt, evt)\n          })\n        })\n      }\n    })\n    return explicitAction\n  }\n\n  /**\n   * @callback TriggerHandler\n   * @param {Element} elt\n   * @param {Event} [evt]\n   */\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {TriggerHandler} handler\n   */\n  function addTriggerHandler(elt, triggerSpec, nodeData, handler) {\n    if (triggerSpec.trigger === 'revealed') {\n      initScrollHandler()\n      addEventListener(elt, handler, nodeData, triggerSpec)\n      maybeReveal(asElement(elt))\n    } else if (triggerSpec.trigger === 'intersect') {\n      const observerOptions = {}\n      if (triggerSpec.root) {\n        observerOptions.root = querySelectorExt(elt, triggerSpec.root)\n      }\n      if (triggerSpec.threshold) {\n        observerOptions.threshold = parseFloat(triggerSpec.threshold)\n      }\n      const observer = new IntersectionObserver(function(entries) {\n        for (let i = 0; i < entries.length; i++) {\n          const entry = entries[i]\n          if (entry.isIntersecting) {\n            triggerEvent(elt, 'intersect')\n            break\n          }\n        }\n      }, observerOptions)\n      observer.observe(asElement(elt))\n      addEventListener(asElement(elt), handler, nodeData, triggerSpec)\n    } else if (!nodeData.firstInitCompleted && triggerSpec.trigger === 'load') {\n      if (!maybeFilterEvent(triggerSpec, elt, makeEvent('load', { elt }))) {\n        loadImmediately(asElement(elt), handler, nodeData, triggerSpec.delay)\n      }\n    } else if (triggerSpec.pollInterval > 0) {\n      nodeData.polling = true\n      processPolling(asElement(elt), handler, triggerSpec)\n    } else {\n      addEventListener(elt, handler, nodeData, triggerSpec)\n    }\n  }\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function shouldProcessHxOn(node) {\n    const elt = asElement(node)\n    if (!elt) {\n      return false\n    }\n    const attributes = elt.attributes\n    for (let j = 0; j < attributes.length; j++) {\n      const attrName = attributes[j].name\n      if (startsWith(attrName, 'hx-on:') || startsWith(attrName, 'data-hx-on:') ||\n        startsWith(attrName, 'hx-on-') || startsWith(attrName, 'data-hx-on-')) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Node} elt\n   * @returns {Element[]}\n   */\n  const HX_ON_QUERY = new XPathEvaluator()\n    .createExpression('.//*[@*[ starts-with(name(), \"hx-on:\") or starts-with(name(), \"data-hx-on:\") or' +\n      ' starts-with(name(), \"hx-on-\") or starts-with(name(), \"data-hx-on-\") ]]')\n\n  function processHXOnRoot(elt, elements) {\n    if (shouldProcessHxOn(elt)) {\n      elements.push(asElement(elt))\n    }\n    const iter = HX_ON_QUERY.evaluate(elt)\n    let node = null\n    while (node = iter.iterateNext()) elements.push(asElement(node))\n  }\n\n  function findHxOnWildcardElements(elt) {\n    /** @type {Element[]} */\n    const elements = []\n    if (elt instanceof DocumentFragment) {\n      for (const child of elt.childNodes) {\n        processHXOnRoot(child, elements)\n      }\n    } else {\n      processHXOnRoot(elt, elements)\n    }\n    return elements\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {NodeListOf<Element>|[]}\n   */\n  function findElementsToProcess(elt) {\n    if (elt.querySelectorAll) {\n      const boostedSelector = ', [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]'\n\n      const extensionSelectors = []\n      for (const e in extensions) {\n        const extension = extensions[e]\n        if (extension.getSelectors) {\n          var selectors = extension.getSelectors()\n          if (selectors) {\n            extensionSelectors.push(selectors)\n          }\n        }\n      }\n\n      const results = elt.querySelectorAll(VERB_SELECTOR + boostedSelector + \", form, [type='submit'],\" +\n        ' [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]' + extensionSelectors.flat().map(s => ', ' + s).join(''))\n\n      return results\n    } else {\n      return []\n    }\n  }\n\n  /**\n   * Handle submit buttons/inputs that have the form attribute set\n   * see https://developer.mozilla.org/docs/Web/HTML/Element/button\n   * @param {Event} evt\n   */\n  function maybeSetLastButtonClicked(evt) {\n    const elt = getTargetButton(evt.target)\n    const internalData = getRelatedFormData(evt)\n    if (internalData) {\n      internalData.lastButtonClicked = elt\n    }\n  }\n\n  /**\n   * @param {Event} evt\n   */\n  function maybeUnsetLastButtonClicked(evt) {\n    const internalData = getRelatedFormData(evt)\n    if (internalData) {\n      internalData.lastButtonClicked = null\n    }\n  }\n\n  /**\n   * @param {EventTarget} target\n   * @returns {HTMLButtonElement|HTMLInputElement|null}\n   */\n  function getTargetButton(target) {\n    return /** @type {HTMLButtonElement|HTMLInputElement|null} */ (closest(asElement(target), \"button, input[type='submit']\"))\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {HTMLFormElement|null}\n   */\n  function getRelatedForm(elt) {\n    // @ts-ignore Get the related form if available, else find the closest parent form\n    return elt.form || closest(elt, 'form')\n  }\n\n  /**\n   * @param {Event} evt\n   * @returns {HtmxNodeInternalData|undefined}\n   */\n  function getRelatedFormData(evt) {\n    const elt = getTargetButton(evt.target)\n    if (!elt) {\n      return\n    }\n    const form = getRelatedForm(elt)\n    if (!form) {\n      return\n    }\n    return getInternalData(form)\n  }\n\n  /**\n   * @param {EventTarget} elt\n   */\n  function initButtonTracking(elt) {\n    // need to handle both click and focus in:\n    //   focusin - in case someone tabs in to a button and hits the space bar\n    //   click - on OSX buttons do not focus on click see https://bugs.webkit.org/show_bug.cgi?id=13724\n    elt.addEventListener('click', maybeSetLastButtonClicked)\n    elt.addEventListener('focusin', maybeSetLastButtonClicked)\n    elt.addEventListener('focusout', maybeUnsetLastButtonClicked)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} eventName\n   * @param {string} code\n   */\n  function addHxOnEventHandler(elt, eventName, code) {\n    const nodeData = getInternalData(elt)\n    if (!Array.isArray(nodeData.onHandlers)) {\n      nodeData.onHandlers = []\n    }\n    let func\n    /** @type EventListener */\n    const listener = function(e) {\n      maybeEval(elt, function() {\n        if (eltIsDisabled(elt)) {\n          return\n        }\n        if (!func) {\n          func = new Function('event', code)\n        }\n        func.call(elt, e)\n      })\n    }\n    elt.addEventListener(eventName, listener)\n    nodeData.onHandlers.push({ event: eventName, listener })\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function processHxOnWildcard(elt) {\n    // wipe any previous on handlers so that this function takes precedence\n    deInitOnHandlers(elt)\n\n    for (let i = 0; i < elt.attributes.length; i++) {\n      const name = elt.attributes[i].name\n      const value = elt.attributes[i].value\n      if (startsWith(name, 'hx-on') || startsWith(name, 'data-hx-on')) {\n        const afterOnPosition = name.indexOf('-on') + 3\n        const nextChar = name.slice(afterOnPosition, afterOnPosition + 1)\n        if (nextChar === '-' || nextChar === ':') {\n          let eventName = name.slice(afterOnPosition + 1)\n          // if the eventName starts with a colon or dash, prepend \"htmx\" for shorthand support\n          if (startsWith(eventName, ':')) {\n            eventName = 'htmx' + eventName\n          } else if (startsWith(eventName, '-')) {\n            eventName = 'htmx:' + eventName.slice(1)\n          } else if (startsWith(eventName, 'htmx-')) {\n            eventName = 'htmx:' + eventName.slice(5)\n          }\n\n          addHxOnEventHandler(elt, eventName, value)\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {Element|HTMLInputElement} elt\n   */\n  function initNode(elt) {\n    triggerEvent(elt, 'htmx:beforeProcessNode')\n\n    const nodeData = getInternalData(elt)\n    const triggerSpecs = getTriggerSpecs(elt)\n    const hasExplicitHttpAction = processVerbs(elt, nodeData, triggerSpecs)\n\n    if (!hasExplicitHttpAction) {\n      if (getClosestAttributeValue(elt, 'hx-boost') === 'true') {\n        boostElement(elt, nodeData, triggerSpecs)\n      } else if (hasAttribute(elt, 'hx-trigger')) {\n        triggerSpecs.forEach(function(triggerSpec) {\n          // For \"naked\" triggers, don't do anything at all\n          addTriggerHandler(elt, triggerSpec, nodeData, function() {\n          })\n        })\n      }\n    }\n\n    // Handle submit buttons/inputs that have the form attribute set\n    // see https://developer.mozilla.org/docs/Web/HTML/Element/button\n    if (elt.tagName === 'FORM' || (getRawAttribute(elt, 'type') === 'submit' && hasAttribute(elt, 'form'))) {\n      initButtonTracking(elt)\n    }\n\n    nodeData.firstInitCompleted = true\n    triggerEvent(elt, 'htmx:afterProcessNode')\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function maybeDeInitAndHash(elt) {\n    // Ensure only valid Elements and not shadow DOM roots are inited\n    if (!(elt instanceof Element)) {\n      return false\n    }\n\n    const nodeData = getInternalData(elt)\n    const hash = attributeHash(elt)\n    if (nodeData.initHash !== hash) {\n      deInitNode(elt)\n      nodeData.initHash = hash\n      return true\n    }\n    return false\n  }\n\n  /**\n   * Processes new content, enabling htmx behavior. This can be useful if you have content that is added to the DOM outside of the normal htmx request cycle but still want htmx attributes to work.\n   *\n   * @see https://htmx.org/api/#process\n   *\n   * @param {Element|string} elt element to process\n   */\n  function processNode(elt) {\n    elt = resolveTarget(elt)\n    if (eltIsDisabled(elt)) {\n      cleanUpElement(elt)\n      return\n    }\n\n    const elementsToInit = []\n    if (maybeDeInitAndHash(elt)) {\n      elementsToInit.push(elt)\n    }\n    forEach(findElementsToProcess(elt), function(child) {\n      if (eltIsDisabled(child)) {\n        cleanUpElement(child)\n        return\n      }\n      if (maybeDeInitAndHash(child)) {\n        elementsToInit.push(child)\n      }\n    })\n\n    forEach(findHxOnWildcardElements(elt), processHxOnWildcard)\n    forEach(elementsToInit, initNode)\n  }\n\n  //= ===================================================================\n  // Event/Log Support\n  //= ===================================================================\n\n  /**\n   * @param {string} str\n   * @returns {string}\n   */\n  function kebabEventName(str) {\n    return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {any} detail\n   * @returns {CustomEvent}\n   */\n  function makeEvent(eventName, detail) {\n    // TODO: `composed: true` here is a hack to make global event handlers work with events in shadow DOM\n    // This breaks expected encapsulation but needs to be here until decided otherwise by core devs\n    return new CustomEvent(eventName, { bubbles: true, cancelable: true, composed: true, detail })\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {string} eventName\n   * @param {any=} detail\n   */\n  function triggerErrorEvent(elt, eventName, detail) {\n    triggerEvent(elt, eventName, mergeObjects({ error: eventName }, detail))\n  }\n\n  /**\n   * @param {string} eventName\n   * @returns {boolean}\n   */\n  function ignoreEventForLogging(eventName) {\n    return eventName === 'htmx:afterProcessNode'\n  }\n\n  /**\n   * `withExtensions` locates all active extensions for a provided element, then\n   * executes the provided function using each of the active extensions. You can filter\n   * the element's extensions by giving it a list of extensions to ignore. It should\n   * be called internally at every extendable execution point in htmx.\n   *\n   * @param {Element} elt\n   * @param {(extension:HtmxExtension) => void} toDo\n   * @param {string[]=} extensionsToIgnore\n   * @returns void\n   */\n  function withExtensions(elt, toDo, extensionsToIgnore) {\n    forEach(getExtensions(elt, [], extensionsToIgnore), function(extension) {\n      try {\n        toDo(extension)\n      } catch (e) {\n        logError(e)\n      }\n    })\n  }\n\n  function logError(msg) {\n    console.error(msg)\n  }\n\n  /**\n   * Triggers a given event on an element\n   *\n   * @see https://htmx.org/api/#trigger\n   *\n   * @param {EventTarget|string} elt the element to trigger the event on\n   * @param {string} eventName the name of the event to trigger\n   * @param {any=} detail details for the event\n   * @returns {boolean}\n   */\n  function triggerEvent(elt, eventName, detail) {\n    elt = resolveTarget(elt)\n    if (detail == null) {\n      detail = {}\n    }\n    detail.elt = elt\n    const event = makeEvent(eventName, detail)\n    if (htmx.logger && !ignoreEventForLogging(eventName)) {\n      htmx.logger(elt, eventName, detail)\n    }\n    if (detail.error) {\n      logError(detail.error + (detail.target ? ', ' + detail.target : ''))\n      triggerEvent(elt, 'htmx:error', { errorInfo: detail })\n    }\n    let eventResult = elt.dispatchEvent(event)\n    const kebabName = kebabEventName(eventName)\n    if (eventResult && kebabName !== eventName) {\n      const kebabedEvent = makeEvent(kebabName, event.detail)\n      eventResult = eventResult && elt.dispatchEvent(kebabedEvent)\n    }\n    withExtensions(asElement(elt), function(extension) {\n      eventResult = eventResult && (extension.onEvent(eventName, event) !== false && !event.defaultPrevented)\n    })\n    return eventResult\n  }\n\n  //= ===================================================================\n  // History Support\n  //= ===================================================================\n  let currentPathForHistory\n\n  /**\n   * @param {string} path\n   */\n  function setCurrentPathForHistory(path) {\n    currentPathForHistory = path\n    if (canAccessLocalStorage()) {\n      sessionStorage.setItem('htmx-current-path-for-history', path)\n    }\n  }\n\n  setCurrentPathForHistory(location.pathname + location.search)\n\n  /**\n   * @returns {Element}\n   */\n  function getHistoryElement() {\n    const historyElt = getDocument().querySelector('[hx-history-elt],[data-hx-history-elt]')\n    return historyElt || getDocument().body\n  }\n\n  /**\n   * @param {string} url\n   * @param {Element} rootElt\n   */\n  function saveToHistoryCache(url, rootElt) {\n    if (!canAccessLocalStorage()) {\n      return\n    }\n\n    // get state to save\n    const innerHTML = cleanInnerHtmlForHistory(rootElt)\n    const title = getDocument().title\n    const scroll = window.scrollY\n\n    if (htmx.config.historyCacheSize <= 0) {\n      // make sure that an eventually already existing cache is purged\n      sessionStorage.removeItem('htmx-history-cache')\n      return\n    }\n\n    url = normalizePath(url)\n\n    const historyCache = parseJSON(sessionStorage.getItem('htmx-history-cache')) || []\n    for (let i = 0; i < historyCache.length; i++) {\n      if (historyCache[i].url === url) {\n        historyCache.splice(i, 1)\n        break\n      }\n    }\n\n    /** @type HtmxHistoryItem */\n    const newHistoryItem = { url, content: innerHTML, title, scroll }\n\n    triggerEvent(getDocument().body, 'htmx:historyItemCreated', { item: newHistoryItem, cache: historyCache })\n\n    historyCache.push(newHistoryItem)\n    while (historyCache.length > htmx.config.historyCacheSize) {\n      historyCache.shift()\n    }\n\n    // keep trying to save the cache until it succeeds or is empty\n    while (historyCache.length > 0) {\n      try {\n        sessionStorage.setItem('htmx-history-cache', JSON.stringify(historyCache))\n        break\n      } catch (e) {\n        triggerErrorEvent(getDocument().body, 'htmx:historyCacheError', { cause: e, cache: historyCache })\n        historyCache.shift() // shrink the cache and retry\n      }\n    }\n  }\n\n  /**\n   * @typedef {Object} HtmxHistoryItem\n   * @property {string} url\n   * @property {string} content\n   * @property {string} title\n   * @property {number} scroll\n   */\n\n  /**\n   * @param {string} url\n   * @returns {HtmxHistoryItem|null}\n   */\n  function getCachedHistory(url) {\n    if (!canAccessLocalStorage()) {\n      return null\n    }\n\n    url = normalizePath(url)\n\n    const historyCache = parseJSON(sessionStorage.getItem('htmx-history-cache')) || []\n    for (let i = 0; i < historyCache.length; i++) {\n      if (historyCache[i].url === url) {\n        return historyCache[i]\n      }\n    }\n    return null\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {string}\n   */\n  function cleanInnerHtmlForHistory(elt) {\n    const className = htmx.config.requestClass\n    const clone = /** @type Element */ (elt.cloneNode(true))\n    forEach(findAll(clone, '.' + className), function(child) {\n      removeClassFromElement(child, className)\n    })\n    // remove the disabled attribute for any element disabled due to an htmx request\n    forEach(findAll(clone, '[data-disabled-by-htmx]'), function(child) {\n      child.removeAttribute('disabled')\n    })\n    return clone.innerHTML\n  }\n\n  function saveCurrentPageToHistory() {\n    const elt = getHistoryElement()\n    let path = currentPathForHistory\n    if (canAccessLocalStorage()) {\n      path = sessionStorage.getItem('htmx-current-path-for-history')\n    }\n    path = path || location.pathname + location.search\n\n    // Allow history snapshot feature to be disabled where hx-history=\"false\"\n    // is present *anywhere* in the current document we're about to save,\n    // so we can prevent privileged data entering the cache.\n    // The page will still be reachable as a history entry, but htmx will fetch it\n    // live from the server onpopstate rather than look in the sessionStorage cache\n    const disableHistoryCache = getDocument().querySelector('[hx-history=\"false\" i],[data-hx-history=\"false\" i]')\n    if (!disableHistoryCache) {\n      triggerEvent(getDocument().body, 'htmx:beforeHistorySave', { path, historyElt: elt })\n      saveToHistoryCache(path, elt)\n    }\n\n    if (htmx.config.historyEnabled) history.replaceState({ htmx: true }, getDocument().title, location.href)\n  }\n\n  /**\n   * @param {string} path\n   */\n  function pushUrlIntoHistory(path) {\n  // remove the cache buster parameter, if any\n    if (htmx.config.getCacheBusterParam) {\n      path = path.replace(/org\\.htmx\\.cache-buster=[^&]*&?/, '')\n      if (endsWith(path, '&') || endsWith(path, '?')) {\n        path = path.slice(0, -1)\n      }\n    }\n    if (htmx.config.historyEnabled) {\n      history.pushState({ htmx: true }, '', path)\n    }\n    setCurrentPathForHistory(path)\n  }\n\n  /**\n   * @param {string} path\n   */\n  function replaceUrlInHistory(path) {\n    if (htmx.config.historyEnabled) history.replaceState({ htmx: true }, '', path)\n    setCurrentPathForHistory(path)\n  }\n\n  /**\n   * @param {HtmxSettleTask[]} tasks\n   */\n  function settleImmediately(tasks) {\n    forEach(tasks, function(task) {\n      task.call(undefined)\n    })\n  }\n\n  /**\n   * @param {string} path\n   */\n  function loadHistoryFromServer(path) {\n    const request = new XMLHttpRequest()\n    const swapSpec = { swapStyle: 'innerHTML', swapDelay: 0, settleDelay: 0 }\n    const details = { path, xhr: request, historyElt: getHistoryElement(), swapSpec }\n    request.open('GET', path, true)\n    if (htmx.config.historyRestoreAsHxRequest) {\n      request.setRequestHeader('HX-Request', 'true')\n    }\n    request.setRequestHeader('HX-History-Restore-Request', 'true')\n    request.setRequestHeader('HX-Current-URL', location.href)\n    request.onload = function() {\n      if (this.status >= 200 && this.status < 400) {\n        details.response = this.response\n        triggerEvent(getDocument().body, 'htmx:historyCacheMissLoad', details)\n        swap(details.historyElt, details.response, swapSpec, {\n          contextElement: details.historyElt,\n          historyRequest: true\n        })\n        setCurrentPathForHistory(details.path)\n        triggerEvent(getDocument().body, 'htmx:historyRestore', { path, cacheMiss: true, serverResponse: details.response })\n      } else {\n        triggerErrorEvent(getDocument().body, 'htmx:historyCacheMissLoadError', details)\n      }\n    }\n    if (triggerEvent(getDocument().body, 'htmx:historyCacheMiss', details)) {\n      request.send() // only send request if event not prevented\n    }\n  }\n\n  /**\n   * @param {string} [path]\n   */\n  function restoreHistory(path) {\n    saveCurrentPageToHistory()\n    path = path || location.pathname + location.search\n    const cached = getCachedHistory(path)\n    if (cached) {\n      const swapSpec = { swapStyle: 'innerHTML', swapDelay: 0, settleDelay: 0, scroll: cached.scroll }\n      const details = { path, item: cached, historyElt: getHistoryElement(), swapSpec }\n      if (triggerEvent(getDocument().body, 'htmx:historyCacheHit', details)) {\n        swap(details.historyElt, cached.content, swapSpec, {\n          contextElement: details.historyElt,\n          title: cached.title\n        })\n        setCurrentPathForHistory(details.path)\n        triggerEvent(getDocument().body, 'htmx:historyRestore', details)\n      }\n    } else {\n      if (htmx.config.refreshOnHistoryMiss) {\n        // @ts-ignore: optional parameter in reload() function throws error\n        // noinspection JSUnresolvedReference\n        htmx.location.reload(true)\n      } else {\n        loadHistoryFromServer(path)\n      }\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Element[]}\n   */\n  function addRequestIndicatorClasses(elt) {\n    let indicators = /** @type Element[] */ (findAttributeTargets(elt, 'hx-indicator'))\n    if (indicators == null) {\n      indicators = [elt]\n    }\n    forEach(indicators, function(ic) {\n      const internalData = getInternalData(ic)\n      internalData.requestCount = (internalData.requestCount || 0) + 1\n      addClassToElement(ic, htmx.config.requestClass)\n    })\n    return indicators\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Element[]}\n   */\n  function disableElements(elt) {\n    let disabledElts = /** @type Element[] */ (findAttributeTargets(elt, 'hx-disabled-elt'))\n    if (disabledElts == null) {\n      disabledElts = []\n    }\n    forEach(disabledElts, function(disabledElement) {\n      const internalData = getInternalData(disabledElement)\n      internalData.requestCount = (internalData.requestCount || 0) + 1\n      if (!disabledElement.hasAttribute('disabled')) {\n        disabledElement.setAttribute('disabled', '')\n        disabledElement.setAttribute('data-disabled-by-htmx', '')\n      }\n    })\n    return disabledElts\n  }\n\n  /**\n   * @param {Element[]} indicators\n   * @param {Element[]} disabled\n   */\n  function removeRequestIndicators(indicators, disabled) {\n    forEach(indicators.concat(disabled), function(ele) {\n      const internalData = getInternalData(ele)\n      internalData.requestCount = (internalData.requestCount || 1) - 1\n    })\n    forEach(indicators, function(ic) {\n      const internalData = getInternalData(ic)\n      if (internalData.requestCount === 0) {\n        removeClassFromElement(ic, htmx.config.requestClass)\n      }\n    })\n    forEach(disabled, function(disabledElement) {\n      const internalData = getInternalData(disabledElement)\n      if (internalData.requestCount === 0 && disabledElement.hasAttribute('data-disabled-by-htmx')) {\n        disabledElement.removeAttribute('disabled')\n        disabledElement.removeAttribute('data-disabled-by-htmx')\n      }\n    })\n  }\n\n  //= ===================================================================\n  // Input Value Processing\n  //= ===================================================================\n\n  /**\n   * @param {Element[]} processed\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function haveSeenNode(processed, elt) {\n    for (let i = 0; i < processed.length; i++) {\n      const node = processed[i]\n      if (node.isSameNode(elt)) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Element} element\n   * @return {boolean}\n   */\n  function shouldInclude(element) {\n    // Cast to trick tsc, undefined values will work fine here\n    const elt = /** @type {HTMLInputElement} */ (element)\n    if (elt.name === '' || elt.name == null || elt.disabled || closest(elt, 'fieldset[disabled]')) {\n      return false\n    }\n    // ignore \"submitter\" types (see jQuery src/serialize.js)\n    if (elt.type === 'button' || elt.type === 'submit' || elt.tagName === 'image' || elt.tagName === 'reset' || elt.tagName === 'file') {\n      return false\n    }\n    if (elt.type === 'checkbox' || elt.type === 'radio') {\n      return elt.checked\n    }\n    return true\n  }\n\n  /**\n   * @param {string} name\n   * @param {string|Array|FormDataEntryValue} value\n   * @param {FormData} formData */\n  function addValueToFormData(name, value, formData) {\n    if (name != null && value != null) {\n      if (Array.isArray(value)) {\n        value.forEach(function(v) { formData.append(name, v) })\n      } else {\n        formData.append(name, value)\n      }\n    }\n  }\n\n  /**\n   * @param {string} name\n   * @param {string|Array} value\n   * @param {FormData} formData */\n  function removeValueFromFormData(name, value, formData) {\n    if (name != null && value != null) {\n      let values = formData.getAll(name)\n      if (Array.isArray(value)) {\n        values = values.filter(v => value.indexOf(v) < 0)\n      } else {\n        values = values.filter(v => v !== value)\n      }\n      formData.delete(name)\n      forEach(values, v => formData.append(name, v))\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {string|Array}\n   */\n  function getValueFromInput(elt) {\n    if (elt instanceof HTMLSelectElement && elt.multiple) {\n      return toArray(elt.querySelectorAll('option:checked')).map(function(e) { return (/** @type HTMLOptionElement */(e)).value })\n    }\n    // include file inputs\n    if (elt instanceof HTMLInputElement && elt.files) {\n      return toArray(elt.files)\n    }\n    // @ts-ignore value will be undefined for non-input elements, which is fine\n    return elt.value\n  }\n\n  /**\n   * @param {Element[]} processed\n   * @param {FormData} formData\n   * @param {HtmxElementValidationError[]} errors\n   * @param {Element|HTMLInputElement|HTMLSelectElement|HTMLFormElement} elt\n   * @param {boolean} validate\n   */\n  function processInputValue(processed, formData, errors, elt, validate) {\n    if (elt == null || haveSeenNode(processed, elt)) {\n      return\n    } else {\n      processed.push(elt)\n    }\n    if (shouldInclude(elt)) {\n      const name = getRawAttribute(elt, 'name')\n      addValueToFormData(name, getValueFromInput(elt), formData)\n      if (validate) {\n        validateElement(elt, errors)\n      }\n    }\n    if (elt instanceof HTMLFormElement) {\n      forEach(elt.elements, function(input) {\n        if (processed.indexOf(input) >= 0) {\n          // The input has already been processed and added to the values, but the FormData that will be\n          //  constructed right after on the form, will include it once again. So remove that input's value\n          //  now to avoid duplicates\n          removeValueFromFormData(input.name, getValueFromInput(input), formData)\n        } else {\n          processed.push(input)\n        }\n        if (validate) {\n          validateElement(input, errors)\n        }\n      })\n      new FormData(elt).forEach(function(value, name) {\n        if (value instanceof File && value.name === '') {\n          return // ignore no-name files\n        }\n        addValueToFormData(name, value, formData)\n      })\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxElementValidationError[]} errors\n   */\n  function validateElement(elt, errors) {\n    const element = /** @type {HTMLElement & ElementInternals} */ (elt)\n    if (element.willValidate) {\n      triggerEvent(element, 'htmx:validation:validate')\n      if (!element.checkValidity()) {\n        if (\n          triggerEvent(element, 'htmx:validation:failed', {\n            message: element.validationMessage,\n            validity: element.validity\n          }) &&\n          !errors.length &&\n          htmx.config.reportValidityOfForms\n        ) {\n          element.reportValidity()\n        }\n        errors.push({ elt: element, message: element.validationMessage, validity: element.validity })\n      }\n    }\n  }\n\n  /**\n   * Override values in the one FormData with those from another.\n   * @param {FormData} receiver the formdata that will be mutated\n   * @param {FormData} donor the formdata that will provide the overriding values\n   * @returns {FormData} the {@linkcode receiver}\n   */\n  function overrideFormData(receiver, donor) {\n    for (const key of donor.keys()) {\n      receiver.delete(key)\n    }\n    donor.forEach(function(value, key) {\n      receiver.append(key, value)\n    })\n    return receiver\n  }\n\n  /**\n * @param {Element|HTMLFormElement} elt\n * @param {HttpVerb} verb\n * @returns {{errors: HtmxElementValidationError[], formData: FormData, values: Object}}\n */\n  function getInputValues(elt, verb) {\n    /** @type Element[] */\n    const processed = []\n    const formData = new FormData()\n    const priorityFormData = new FormData()\n    /** @type HtmxElementValidationError[] */\n    const errors = []\n    const internalData = getInternalData(elt)\n    if (internalData.lastButtonClicked && !bodyContains(internalData.lastButtonClicked)) {\n      internalData.lastButtonClicked = null\n    }\n\n    // only validate when form is directly submitted and novalidate or formnovalidate are not set\n    // or if the element has an explicit hx-validate=\"true\" on it\n    let validate = (elt instanceof HTMLFormElement && elt.noValidate !== true) || getAttributeValue(elt, 'hx-validate') === 'true'\n    if (internalData.lastButtonClicked) {\n      validate = validate && internalData.lastButtonClicked.formNoValidate !== true\n    }\n\n    // for a non-GET include the related form, which may or may not be a parent element of elt\n    if (verb !== 'get') {\n      processInputValue(processed, priorityFormData, errors, getRelatedForm(elt), validate)\n    }\n\n    // include the element itself\n    processInputValue(processed, formData, errors, elt, validate)\n\n    // if a button or submit was clicked last, include its value\n    if (internalData.lastButtonClicked || elt.tagName === 'BUTTON' ||\n    (elt.tagName === 'INPUT' && getRawAttribute(elt, 'type') === 'submit')) {\n      const button = internalData.lastButtonClicked || (/** @type HTMLInputElement|HTMLButtonElement */(elt))\n      const name = getRawAttribute(button, 'name')\n      addValueToFormData(name, button.value, priorityFormData)\n    }\n\n    // include any explicit includes\n    const includes = findAttributeTargets(elt, 'hx-include')\n    forEach(includes, function(node) {\n      processInputValue(processed, formData, errors, asElement(node), validate)\n      // if a non-form is included, include any input values within it\n      if (!matches(node, 'form')) {\n        forEach(asParentNode(node).querySelectorAll(INPUT_SELECTOR), function(descendant) {\n          processInputValue(processed, formData, errors, descendant, validate)\n        })\n      }\n    })\n\n    // values from a <form> take precedence, overriding the regular values\n    overrideFormData(formData, priorityFormData)\n\n    return { errors, formData, values: formDataProxy(formData) }\n  }\n\n  /**\n   * @param {string} returnStr\n   * @param {string} name\n   * @param {any} realValue\n   * @returns {string}\n   */\n  function appendParam(returnStr, name, realValue) {\n    if (returnStr !== '') {\n      returnStr += '&'\n    }\n    if (String(realValue) === '[object Object]') {\n      realValue = JSON.stringify(realValue)\n    }\n    const s = encodeURIComponent(realValue)\n    returnStr += encodeURIComponent(name) + '=' + s\n    return returnStr\n  }\n\n  /**\n   * @param {FormData|Object} values\n   * @returns string\n   */\n  function urlEncode(values) {\n    values = formDataFromObject(values)\n    let returnStr = ''\n    values.forEach(function(value, key) {\n      returnStr = appendParam(returnStr, key, value)\n    })\n    return returnStr\n  }\n\n  //= ===================================================================\n  // Ajax\n  //= ===================================================================\n\n  /**\n * @param {Element} elt\n * @param {Element} target\n * @param {string} prompt\n * @returns {HtmxHeaderSpecification}\n */\n  function getHeaders(elt, target, prompt) {\n    /** @type HtmxHeaderSpecification */\n    const headers = {\n      'HX-Request': 'true',\n      'HX-Trigger': getRawAttribute(elt, 'id'),\n      'HX-Trigger-Name': getRawAttribute(elt, 'name'),\n      'HX-Target': getAttributeValue(target, 'id'),\n      'HX-Current-URL': location.href\n    }\n    getValuesForElement(elt, 'hx-headers', false, headers)\n    if (prompt !== undefined) {\n      headers['HX-Prompt'] = prompt\n    }\n    if (getInternalData(elt).boosted) {\n      headers['HX-Boosted'] = 'true'\n    }\n    return headers\n  }\n\n  /**\n * filterValues takes an object containing form input values\n * and returns a new object that only contains keys that are\n * specified by the closest \"hx-params\" attribute\n * @param {FormData} inputValues\n * @param {Element} elt\n * @returns {FormData}\n */\n  function filterValues(inputValues, elt) {\n    const paramsValue = getClosestAttributeValue(elt, 'hx-params')\n    if (paramsValue) {\n      if (paramsValue === 'none') {\n        return new FormData()\n      } else if (paramsValue === '*') {\n        return inputValues\n      } else if (paramsValue.indexOf('not ') === 0) {\n        forEach(paramsValue.slice(4).split(','), function(name) {\n          name = name.trim()\n          inputValues.delete(name)\n        })\n        return inputValues\n      } else {\n        const newValues = new FormData()\n        forEach(paramsValue.split(','), function(name) {\n          name = name.trim()\n          if (inputValues.has(name)) {\n            inputValues.getAll(name).forEach(function(value) { newValues.append(name, value) })\n          }\n        })\n        return newValues\n      }\n    } else {\n      return inputValues\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {boolean}\n   */\n  function isAnchorLink(elt) {\n    return !!getRawAttribute(elt, 'href') && getRawAttribute(elt, 'href').indexOf('#') >= 0\n  }\n\n  /**\n * @param {Element} elt\n * @param {HtmxSwapStyle} [swapInfoOverride]\n * @returns {HtmxSwapSpecification}\n */\n  function getSwapSpecification(elt, swapInfoOverride) {\n    const swapInfo = swapInfoOverride || getClosestAttributeValue(elt, 'hx-swap')\n    /** @type HtmxSwapSpecification */\n    const swapSpec = {\n      swapStyle: getInternalData(elt).boosted ? 'innerHTML' : htmx.config.defaultSwapStyle,\n      swapDelay: htmx.config.defaultSwapDelay,\n      settleDelay: htmx.config.defaultSettleDelay\n    }\n    if (htmx.config.scrollIntoViewOnBoost && getInternalData(elt).boosted && !isAnchorLink(elt)) {\n      swapSpec.show = 'top'\n    }\n    if (swapInfo) {\n      const split = splitOnWhitespace(swapInfo)\n      if (split.length > 0) {\n        for (let i = 0; i < split.length; i++) {\n          const value = split[i]\n          if (value.indexOf('swap:') === 0) {\n            swapSpec.swapDelay = parseInterval(value.slice(5))\n          } else if (value.indexOf('settle:') === 0) {\n            swapSpec.settleDelay = parseInterval(value.slice(7))\n          } else if (value.indexOf('transition:') === 0) {\n            swapSpec.transition = value.slice(11) === 'true'\n          } else if (value.indexOf('ignoreTitle:') === 0) {\n            swapSpec.ignoreTitle = value.slice(12) === 'true'\n          } else if (value.indexOf('scroll:') === 0) {\n            const scrollSpec = value.slice(7)\n            var splitSpec = scrollSpec.split(':')\n            const scrollVal = splitSpec.pop()\n            var selectorVal = splitSpec.length > 0 ? splitSpec.join(':') : null\n            // @ts-ignore\n            swapSpec.scroll = scrollVal\n            swapSpec.scrollTarget = selectorVal\n          } else if (value.indexOf('show:') === 0) {\n            const showSpec = value.slice(5)\n            var splitSpec = showSpec.split(':')\n            const showVal = splitSpec.pop()\n            var selectorVal = splitSpec.length > 0 ? splitSpec.join(':') : null\n            swapSpec.show = showVal\n            swapSpec.showTarget = selectorVal\n          } else if (value.indexOf('focus-scroll:') === 0) {\n            const focusScrollVal = value.slice('focus-scroll:'.length)\n            swapSpec.focusScroll = focusScrollVal == 'true'\n          } else if (i == 0) {\n            swapSpec.swapStyle = value\n          } else {\n            logError('Unknown modifier in hx-swap: ' + value)\n          }\n        }\n      }\n    }\n    return swapSpec\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {boolean}\n   */\n  function usesFormData(elt) {\n    return getClosestAttributeValue(elt, 'hx-encoding') === 'multipart/form-data' ||\n    (matches(elt, 'form') && getRawAttribute(elt, 'enctype') === 'multipart/form-data')\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {Element} elt\n   * @param {FormData} filteredParameters\n   * @returns {*|string|null}\n   */\n  function encodeParamsForBody(xhr, elt, filteredParameters) {\n    let encodedParameters = null\n    withExtensions(elt, function(extension) {\n      if (encodedParameters == null) {\n        encodedParameters = extension.encodeParameters(xhr, filteredParameters, elt)\n      }\n    })\n    if (encodedParameters != null) {\n      return encodedParameters\n    } else {\n      if (usesFormData(elt)) {\n        // Force conversion to an actual FormData object in case filteredParameters is a formDataProxy\n        // See https://github.com/bigskysoftware/htmx/issues/2317\n        return overrideFormData(new FormData(), formDataFromObject(filteredParameters))\n      } else {\n        return urlEncode(filteredParameters)\n      }\n    }\n  }\n\n  /**\n *\n * @param {Element} target\n * @returns {HtmxSettleInfo}\n */\n  function makeSettleInfo(target) {\n    return { tasks: [], elts: [target] }\n  }\n\n  /**\n   * @param {Element[]} content\n   * @param {HtmxSwapSpecification} swapSpec\n   */\n  function updateScrollState(content, swapSpec) {\n    const first = content[0]\n    const last = content[content.length - 1]\n    if (swapSpec.scroll) {\n      var target = null\n      if (swapSpec.scrollTarget) {\n        target = asElement(querySelectorExt(first, swapSpec.scrollTarget))\n      }\n      if (swapSpec.scroll === 'top' && (first || target)) {\n        target = target || first\n        target.scrollTop = 0\n      }\n      if (swapSpec.scroll === 'bottom' && (last || target)) {\n        target = target || last\n        target.scrollTop = target.scrollHeight\n      }\n      if (typeof swapSpec.scroll === 'number') {\n        getWindow().setTimeout(function() {\n          window.scrollTo(0, /** @type number */ (swapSpec.scroll))\n        }, 0) // next 'tick', so browser has time to render layout\n      }\n    }\n    if (swapSpec.show) {\n      var target = null\n      if (swapSpec.showTarget) {\n        let targetStr = swapSpec.showTarget\n        if (swapSpec.showTarget === 'window') {\n          targetStr = 'body'\n        }\n        target = asElement(querySelectorExt(first, targetStr))\n      }\n      if (swapSpec.show === 'top' && (first || target)) {\n        target = target || first\n        // @ts-ignore For some reason tsc doesn't recognize \"instant\" as a valid option for now\n        target.scrollIntoView({ block: 'start', behavior: htmx.config.scrollBehavior })\n      }\n      if (swapSpec.show === 'bottom' && (last || target)) {\n        target = target || last\n        // @ts-ignore For some reason tsc doesn't recognize \"instant\" as a valid option for now\n        target.scrollIntoView({ block: 'end', behavior: htmx.config.scrollBehavior })\n      }\n    }\n  }\n\n  /**\n * @param {Element} elt\n * @param {string} attr\n * @param {boolean=} evalAsDefault\n * @param {Object=} values\n * @param {Event=} event\n * @returns {Object}\n */\n  function getValuesForElement(elt, attr, evalAsDefault, values, event) {\n    if (values == null) {\n      values = {}\n    }\n    if (elt == null) {\n      return values\n    }\n    const attributeValue = getAttributeValue(elt, attr)\n    if (attributeValue) {\n      let str = attributeValue.trim()\n      let evaluateValue = evalAsDefault\n      if (str === 'unset') {\n        return null\n      }\n      if (str.indexOf('javascript:') === 0) {\n        str = str.slice(11)\n        evaluateValue = true\n      } else if (str.indexOf('js:') === 0) {\n        str = str.slice(3)\n        evaluateValue = true\n      }\n      if (str.indexOf('{') !== 0) {\n        str = '{' + str + '}'\n      }\n      let varsValues\n      if (evaluateValue) {\n        varsValues = maybeEval(elt, function() {\n          if (event) {\n            return Function('event', 'return (' + str + ')').call(elt, event)\n          } else { // allow window.event to be accessible\n            return Function('return (' + str + ')').call(elt)\n          }\n        }, {})\n      } else {\n        varsValues = parseJSON(str)\n      }\n      for (const key in varsValues) {\n        if (varsValues.hasOwnProperty(key)) {\n          if (values[key] == null) {\n            values[key] = varsValues[key]\n          }\n        }\n      }\n    }\n    return getValuesForElement(asElement(parentElt(elt)), attr, evalAsDefault, values, event)\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {() => any} toEval\n   * @param {any=} defaultVal\n   * @returns {any}\n   */\n  function maybeEval(elt, toEval, defaultVal) {\n    if (htmx.config.allowEval) {\n      return toEval()\n    } else {\n      triggerErrorEvent(elt, 'htmx:evalDisallowedError')\n      return defaultVal\n    }\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @param {*?=} expressionVars\n * @returns\n */\n  function getHXVarsForElement(elt, event, expressionVars) {\n    return getValuesForElement(elt, 'hx-vars', true, expressionVars, event)\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @param {*?=} expressionVars\n * @returns\n */\n  function getHXValsForElement(elt, event, expressionVars) {\n    return getValuesForElement(elt, 'hx-vals', false, expressionVars, event)\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @returns {FormData}\n */\n  function getExpressionVars(elt, event) {\n    return mergeObjects(getHXVarsForElement(elt, event), getHXValsForElement(elt, event))\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {string} header\n   * @param {string|null} headerValue\n   */\n  function safelySetHeaderValue(xhr, header, headerValue) {\n    if (headerValue !== null) {\n      try {\n        xhr.setRequestHeader(header, headerValue)\n      } catch (e) {\n      // On an exception, try to set the header URI encoded instead\n        xhr.setRequestHeader(header, encodeURIComponent(headerValue))\n        xhr.setRequestHeader(header + '-URI-AutoEncoded', 'true')\n      }\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @return {string}\n   */\n  function getPathFromResponse(xhr) {\n    if (xhr.responseURL) {\n      try {\n        const url = new URL(xhr.responseURL)\n        return url.pathname + url.search\n      } catch (e) {\n        triggerErrorEvent(getDocument().body, 'htmx:badResponseUrl', { url: xhr.responseURL })\n      }\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {RegExp} regexp\n   * @return {boolean}\n   */\n  function hasHeader(xhr, regexp) {\n    return regexp.test(xhr.getAllResponseHeaders())\n  }\n\n  /**\n   * Issues an htmx-style AJAX request\n   *\n   * @see https://htmx.org/api/#ajax\n   *\n   * @param {HttpVerb} verb\n   * @param {string} path the URL path to make the AJAX\n   * @param {Element|string|HtmxAjaxHelperContext} context the element to target (defaults to the **body**) | a selector for the target | a context object that contains any of the following\n   * @return {Promise<void>} Promise that resolves immediately if no request is sent, or when the request is complete\n   */\n  function ajaxHelper(verb, path, context) {\n    verb = (/** @type HttpVerb */(verb.toLowerCase()))\n    if (context) {\n      if (context instanceof Element || typeof context === 'string') {\n        return issueAjaxRequest(verb, path, null, null, {\n          targetOverride: resolveTarget(context) || DUMMY_ELT,\n          returnPromise: true\n        })\n      } else {\n        let resolvedTarget = resolveTarget(context.target)\n        // If target is supplied but can't resolve OR source is supplied but both target and source can't be resolved\n        // then use DUMMY_ELT to abort the request with htmx:targetError to avoid it replacing body by mistake\n        if ((context.target && !resolvedTarget) || (context.source && !resolvedTarget && !resolveTarget(context.source))) {\n          resolvedTarget = DUMMY_ELT\n        }\n        return issueAjaxRequest(verb, path, resolveTarget(context.source), context.event,\n          {\n            handler: context.handler,\n            headers: context.headers,\n            values: context.values,\n            targetOverride: resolvedTarget,\n            swapOverride: context.swap,\n            select: context.select,\n            returnPromise: true,\n            push: context.push,\n            replace: context.replace,\n            selectOOB: context.selectOOB\n          })\n      }\n    } else {\n      return issueAjaxRequest(verb, path, null, null, {\n        returnPromise: true\n      })\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {Element[]}\n   */\n  function hierarchyForElt(elt) {\n    const arr = []\n    while (elt) {\n      arr.push(elt)\n      elt = elt.parentElement\n    }\n    return arr\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} path\n   * @param {HtmxRequestConfig} requestConfig\n   * @return {boolean}\n   */\n  function verifyPath(elt, path, requestConfig) {\n    const url = new URL(path, location.protocol !== 'about:' ? location.href : window.origin)\n    const origin = location.protocol !== 'about:' ? location.origin : window.origin\n    const sameHost = origin === url.origin\n\n    if (htmx.config.selfRequestsOnly) {\n      if (!sameHost) {\n        return false\n      }\n    }\n    return triggerEvent(elt, 'htmx:validateUrl', mergeObjects({ url, sameHost }, requestConfig))\n  }\n\n  /**\n   * @param {Object|FormData} obj\n   * @return {FormData}\n   */\n  function formDataFromObject(obj) {\n    if (obj instanceof FormData) return obj\n    const formData = new FormData()\n    for (const key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        if (obj[key] && typeof obj[key].forEach === 'function') {\n          obj[key].forEach(function(v) { formData.append(key, v) })\n        } else if (typeof obj[key] === 'object' && !(obj[key] instanceof Blob)) {\n          formData.append(key, JSON.stringify(obj[key]))\n        } else {\n          formData.append(key, obj[key])\n        }\n      }\n    }\n    return formData\n  }\n\n  /**\n   * @param {FormData} formData\n   * @param {string} name\n   * @param {Array} array\n   * @returns {Array}\n   */\n  function formDataArrayProxy(formData, name, array) {\n    // mutating the array should mutate the underlying form data\n    return new Proxy(array, {\n      get: function(target, key) {\n        if (typeof key === 'number') return target[key]\n        if (key === 'length') return target.length\n        if (key === 'push') {\n          return function(value) {\n            target.push(value)\n            formData.append(name, value)\n          }\n        }\n        if (typeof target[key] === 'function') {\n          return function() {\n            target[key].apply(target, arguments)\n            formData.delete(name)\n            target.forEach(function(v) { formData.append(name, v) })\n          }\n        }\n\n        if (target[key] && target[key].length === 1) {\n          return target[key][0]\n        } else {\n          return target[key]\n        }\n      },\n      set: function(target, index, value) {\n        target[index] = value\n        formData.delete(name)\n        target.forEach(function(v) { formData.append(name, v) })\n        return true\n      }\n    })\n  }\n\n  /**\n   * @param {FormData} formData\n   * @returns {Object}\n   */\n  function formDataProxy(formData) {\n    return new Proxy(formData, {\n      get: function(target, name) {\n        if (typeof name === 'symbol') {\n          // Forward symbol calls to the FormData itself directly\n          const result = Reflect.get(target, name)\n          // Wrap in function with apply to correctly bind the FormData context, as a direct call would result in an illegal invocation error\n          if (typeof result === 'function') {\n            return function() {\n              return result.apply(formData, arguments)\n            }\n          } else {\n            return result\n          }\n        }\n        if (name === 'toJSON') {\n          // Support JSON.stringify call on proxy\n          return () => Object.fromEntries(formData)\n        }\n        if (name in target) {\n          // Wrap in function with apply to correctly bind the FormData context, as a direct call would result in an illegal invocation error\n          if (typeof target[name] === 'function') {\n            return function() {\n              return formData[name].apply(formData, arguments)\n            }\n          }\n        }\n        const array = formData.getAll(name)\n        // Those 2 undefined & single value returns are for retro-compatibility as we weren't using FormData before\n        if (array.length === 0) {\n          return undefined\n        } else if (array.length === 1) {\n          return array[0]\n        } else {\n          return formDataArrayProxy(target, name, array)\n        }\n      },\n      set: function(target, name, value) {\n        if (typeof name !== 'string') {\n          return false\n        }\n        target.delete(name)\n        if (value && typeof value.forEach === 'function') {\n          value.forEach(function(v) { target.append(name, v) })\n        } else if (typeof value === 'object' && !(value instanceof Blob)) {\n          target.append(name, JSON.stringify(value))\n        } else {\n          target.append(name, value)\n        }\n        return true\n      },\n      deleteProperty: function(target, name) {\n        if (typeof name === 'string') {\n          target.delete(name)\n        }\n        return true\n      },\n      // Support Object.assign call from proxy\n      ownKeys: function(target) {\n        return Reflect.ownKeys(Object.fromEntries(target))\n      },\n      getOwnPropertyDescriptor: function(target, prop) {\n        return Reflect.getOwnPropertyDescriptor(Object.fromEntries(target), prop)\n      }\n    })\n  }\n\n  /**\n   * @param {HttpVerb} verb\n   * @param {string} path\n   * @param {Element} elt\n   * @param {Event} event\n   * @param {HtmxAjaxEtc} [etc]\n   * @param {boolean} [confirmed]\n   * @return {Promise<void>}\n   */\n  function issueAjaxRequest(verb, path, elt, event, etc, confirmed) {\n    let resolve = null\n    let reject = null\n    etc = etc != null ? etc : {}\n    if (etc.returnPromise && typeof Promise !== 'undefined') {\n      var promise = new Promise(function(_resolve, _reject) {\n        resolve = _resolve\n        reject = _reject\n      })\n    }\n    if (elt == null) {\n      elt = getDocument().body\n    }\n    const responseHandler = etc.handler || handleAjaxResponse\n    const select = etc.select || null\n\n    if (!bodyContains(elt)) {\n    // do not issue requests for elements removed from the DOM\n      maybeCall(resolve)\n      return promise\n    }\n    const target = etc.targetOverride || asElement(getTarget(elt))\n    if (target == null || target == DUMMY_ELT) {\n      triggerErrorEvent(elt, 'htmx:targetError', { target: getClosestAttributeValue(elt, 'hx-target') })\n      maybeCall(reject)\n      return promise\n    }\n\n    let eltData = getInternalData(elt)\n    const submitter = eltData.lastButtonClicked\n\n    if (submitter) {\n      const buttonPath = getRawAttribute(submitter, 'formaction')\n      if (buttonPath != null) {\n        path = buttonPath\n      }\n\n      const buttonVerb = getRawAttribute(submitter, 'formmethod')\n      if (buttonVerb != null) {\n        if (VERBS.includes(buttonVerb.toLowerCase())) {\n          verb = (/** @type HttpVerb */(buttonVerb))\n        } else {\n          maybeCall(resolve)\n          return promise\n        }\n      }\n    }\n\n    const confirmQuestion = getClosestAttributeValue(elt, 'hx-confirm')\n    // allow event-based confirmation w/ a callback\n    if (confirmed === undefined) {\n      const issueRequest = function(skipConfirmation) {\n        return issueAjaxRequest(verb, path, elt, event, etc, !!skipConfirmation)\n      }\n      const confirmDetails = { target, elt, path, verb, triggeringEvent: event, etc, issueRequest, question: confirmQuestion }\n      if (triggerEvent(elt, 'htmx:confirm', confirmDetails) === false) {\n        maybeCall(resolve)\n        return promise\n      }\n    }\n\n    let syncElt = elt\n    let syncStrategy = getClosestAttributeValue(elt, 'hx-sync')\n    let queueStrategy = null\n    let abortable = false\n    if (syncStrategy) {\n      const syncStrings = syncStrategy.split(':')\n      const selector = syncStrings[0].trim()\n      if (selector === 'this') {\n        syncElt = findThisElement(elt, 'hx-sync')\n      } else {\n        syncElt = asElement(querySelectorExt(elt, selector))\n      }\n      // default to the drop strategy\n      syncStrategy = (syncStrings[1] || 'drop').trim()\n      eltData = getInternalData(syncElt)\n      if (syncStrategy === 'drop' && eltData.xhr && eltData.abortable !== true) {\n        maybeCall(resolve)\n        return promise\n      } else if (syncStrategy === 'abort') {\n        if (eltData.xhr) {\n          maybeCall(resolve)\n          return promise\n        } else {\n          abortable = true\n        }\n      } else if (syncStrategy === 'replace') {\n        triggerEvent(syncElt, 'htmx:abort') // abort the current request and continue\n      } else if (syncStrategy.indexOf('queue') === 0) {\n        const queueStrArray = syncStrategy.split(' ')\n        queueStrategy = (queueStrArray[1] || 'last').trim()\n      }\n    }\n\n    if (eltData.xhr) {\n      if (eltData.abortable) {\n        triggerEvent(syncElt, 'htmx:abort') // abort the current request and continue\n      } else {\n        if (queueStrategy == null) {\n          if (event) {\n            const eventData = getInternalData(event)\n            if (eventData && eventData.triggerSpec && eventData.triggerSpec.queue) {\n              queueStrategy = eventData.triggerSpec.queue\n            }\n          }\n          if (queueStrategy == null) {\n            queueStrategy = 'last'\n          }\n        }\n        if (eltData.queuedRequests == null) {\n          eltData.queuedRequests = []\n        }\n        if (queueStrategy === 'first' && eltData.queuedRequests.length === 0) {\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        } else if (queueStrategy === 'all') {\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        } else if (queueStrategy === 'last') {\n          eltData.queuedRequests = [] // dump existing queue\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        }\n        maybeCall(resolve)\n        return promise\n      }\n    }\n\n    const xhr = new XMLHttpRequest()\n    eltData.xhr = xhr\n    eltData.abortable = abortable\n    const endRequestLock = function() {\n      eltData.xhr = null\n      eltData.abortable = false\n      if (eltData.queuedRequests != null &&\n      eltData.queuedRequests.length > 0) {\n        const queuedRequest = eltData.queuedRequests.shift()\n        queuedRequest()\n      }\n    }\n    const promptQuestion = getClosestAttributeValue(elt, 'hx-prompt')\n    if (promptQuestion) {\n      var promptResponse = prompt(promptQuestion)\n      // prompt returns null if cancelled and empty string if accepted with no entry\n      if (promptResponse === null ||\n      !triggerEvent(elt, 'htmx:prompt', { prompt: promptResponse, target })) {\n        maybeCall(resolve)\n        endRequestLock()\n        return promise\n      }\n    }\n\n    if (confirmQuestion && !confirmed) {\n      if (!confirm(confirmQuestion)) {\n        maybeCall(resolve)\n        endRequestLock()\n        return promise\n      }\n    }\n\n    let headers = getHeaders(elt, target, promptResponse)\n\n    if (verb !== 'get' && !usesFormData(elt)) {\n      headers['Content-Type'] = 'application/x-www-form-urlencoded'\n    }\n\n    if (etc.headers) {\n      headers = mergeObjects(headers, etc.headers)\n    }\n    const results = getInputValues(elt, verb)\n    let errors = results.errors\n    const rawFormData = results.formData\n    if (etc.values) {\n      overrideFormData(rawFormData, formDataFromObject(etc.values))\n    }\n    const expressionVars = formDataFromObject(getExpressionVars(elt, event))\n    const allFormData = overrideFormData(rawFormData, expressionVars)\n    let filteredFormData = filterValues(allFormData, elt)\n\n    if (htmx.config.getCacheBusterParam && verb === 'get') {\n      filteredFormData.set('org.htmx.cache-buster', getRawAttribute(target, 'id') || 'true')\n    }\n\n    // behavior of anchors w/ empty href is to use the current URL\n    if (path == null || path === '') {\n      path = location.href\n    }\n\n    /**\n     * @type {Object}\n     * @property {boolean} [credentials]\n     * @property {number} [timeout]\n     * @property {boolean} [noHeaders]\n     */\n    const requestAttrValues = getValuesForElement(elt, 'hx-request')\n\n    const eltIsBoosted = getInternalData(elt).boosted\n\n    let useUrlParams = htmx.config.methodsThatUseUrlParams.indexOf(verb) >= 0\n\n    /** @type HtmxRequestConfig */\n    const requestConfig = {\n      boosted: eltIsBoosted,\n      useUrlParams,\n      formData: filteredFormData,\n      parameters: formDataProxy(filteredFormData),\n      unfilteredFormData: allFormData,\n      unfilteredParameters: formDataProxy(allFormData),\n      headers,\n      elt,\n      target,\n      verb,\n      errors,\n      withCredentials: etc.credentials || requestAttrValues.credentials || htmx.config.withCredentials,\n      timeout: etc.timeout || requestAttrValues.timeout || htmx.config.timeout,\n      path,\n      triggeringEvent: event\n    }\n\n    if (!triggerEvent(elt, 'htmx:configRequest', requestConfig)) {\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n\n    // copy out in case the object was overwritten\n    path = requestConfig.path\n    verb = requestConfig.verb\n    headers = requestConfig.headers\n    filteredFormData = formDataFromObject(requestConfig.parameters)\n    errors = requestConfig.errors\n    useUrlParams = requestConfig.useUrlParams\n\n    if (errors && errors.length > 0) {\n      triggerEvent(elt, 'htmx:validation:halted', requestConfig)\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n\n    const splitPath = path.split('#')\n    const pathNoAnchor = splitPath[0]\n    const anchor = splitPath[1]\n\n    let finalPath = path\n    if (useUrlParams) {\n      finalPath = pathNoAnchor\n      const hasValues = !filteredFormData.keys().next().done\n      if (hasValues) {\n        if (finalPath.indexOf('?') < 0) {\n          finalPath += '?'\n        } else {\n          finalPath += '&'\n        }\n        finalPath += urlEncode(filteredFormData)\n        if (anchor) {\n          finalPath += '#' + anchor\n        }\n      }\n    }\n\n    if (!verifyPath(elt, finalPath, requestConfig)) {\n      triggerErrorEvent(elt, 'htmx:invalidPath', requestConfig)\n      maybeCall(reject)\n      endRequestLock()\n      return promise\n    }\n\n    xhr.open(verb.toUpperCase(), finalPath, true)\n    xhr.overrideMimeType('text/html')\n    xhr.withCredentials = requestConfig.withCredentials\n    xhr.timeout = requestConfig.timeout\n\n    // request headers\n    if (requestAttrValues.noHeaders) {\n    // ignore all headers\n    } else {\n      for (const header in headers) {\n        if (headers.hasOwnProperty(header)) {\n          const headerValue = headers[header]\n          safelySetHeaderValue(xhr, header, headerValue)\n        }\n      }\n    }\n\n    /** @type {HtmxResponseInfo} */\n    const responseInfo = {\n      xhr,\n      target,\n      requestConfig,\n      etc,\n      boosted: eltIsBoosted,\n      select,\n      pathInfo: {\n        requestPath: path,\n        finalRequestPath: finalPath,\n        responsePath: null,\n        anchor\n      }\n    }\n\n    xhr.onload = function() {\n      try {\n        const hierarchy = hierarchyForElt(elt)\n        responseInfo.pathInfo.responsePath = getPathFromResponse(xhr)\n        responseHandler(elt, responseInfo)\n        if (responseInfo.keepIndicators !== true) {\n          removeRequestIndicators(indicators, disableElts)\n        }\n        triggerEvent(elt, 'htmx:afterRequest', responseInfo)\n        triggerEvent(elt, 'htmx:afterOnLoad', responseInfo)\n        // if the body no longer contains the element, trigger the event on the closest parent\n        // remaining in the DOM\n        if (!bodyContains(elt)) {\n          let secondaryTriggerElt = null\n          while (hierarchy.length > 0 && secondaryTriggerElt == null) {\n            const parentEltInHierarchy = hierarchy.shift()\n            if (bodyContains(parentEltInHierarchy)) {\n              secondaryTriggerElt = parentEltInHierarchy\n            }\n          }\n          if (secondaryTriggerElt) {\n            triggerEvent(secondaryTriggerElt, 'htmx:afterRequest', responseInfo)\n            triggerEvent(secondaryTriggerElt, 'htmx:afterOnLoad', responseInfo)\n          }\n        }\n        maybeCall(resolve)\n      } catch (e) {\n        triggerErrorEvent(elt, 'htmx:onLoadError', mergeObjects({ error: e }, responseInfo))\n        throw e\n      } finally {\n        endRequestLock()\n      }\n    }\n    xhr.onerror = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:sendError', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    xhr.onabort = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:sendAbort', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    xhr.ontimeout = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:timeout', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    if (!triggerEvent(elt, 'htmx:beforeRequest', responseInfo)) {\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n    var indicators = addRequestIndicatorClasses(elt)\n    var disableElts = disableElements(elt)\n\n    forEach(['loadstart', 'loadend', 'progress', 'abort'], function(eventName) {\n      forEach([xhr, xhr.upload], function(target) {\n        target.addEventListener(eventName, function(event) {\n          triggerEvent(elt, 'htmx:xhr:' + eventName, {\n            lengthComputable: event.lengthComputable,\n            loaded: event.loaded,\n            total: event.total\n          })\n        })\n      })\n    })\n    triggerEvent(elt, 'htmx:beforeSend', responseInfo)\n    const params = useUrlParams ? null : encodeParamsForBody(xhr, elt, filteredFormData)\n    xhr.send(params)\n    return promise\n  }\n\n  /**\n   * @typedef {Object} HtmxHistoryUpdate\n   * @property {string|null} [type]\n   * @property {string|null} [path]\n   */\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxResponseInfo} responseInfo\n   * @return {HtmxHistoryUpdate}\n   */\n  function determineHistoryUpdates(elt, responseInfo) {\n    const xhr = responseInfo.xhr\n\n    //= ==========================================\n    // First consult response headers\n    //= ==========================================\n    let pathFromHeaders = null\n    let typeFromHeaders = null\n    if (hasHeader(xhr, /HX-Push:/i)) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Push')\n      typeFromHeaders = 'push'\n    } else if (hasHeader(xhr, /HX-Push-Url:/i)) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Push-Url')\n      typeFromHeaders = 'push'\n    } else if (hasHeader(xhr, /HX-Replace-Url:/i)) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Replace-Url')\n      typeFromHeaders = 'replace'\n    }\n\n    // if there was a response header, that has priority\n    if (pathFromHeaders) {\n      if (pathFromHeaders === 'false') {\n        return {}\n      } else {\n        return {\n          type: typeFromHeaders,\n          path: pathFromHeaders\n        }\n      }\n    }\n\n    //= ==========================================\n    // Next resolve via DOM values\n    //= ==========================================\n    const requestPath = responseInfo.pathInfo.finalRequestPath\n    const responsePath = responseInfo.pathInfo.responsePath\n\n    let pushUrl = responseInfo.etc.push || getClosestAttributeValue(elt, 'hx-push-url')\n    let replaceUrl = responseInfo.etc.replace || getClosestAttributeValue(elt, 'hx-replace-url')\n    if (pushUrl === 'false') pushUrl = null\n    if (replaceUrl === 'false') replaceUrl = null\n    const elementIsBoosted = getInternalData(elt).boosted\n\n    let saveType = null\n    let path = null\n\n    if (pushUrl) {\n      saveType = 'push'\n      path = pushUrl\n    } else if (replaceUrl) {\n      saveType = 'replace'\n      path = replaceUrl\n    } else if (elementIsBoosted) {\n      saveType = 'push'\n      path = responsePath || requestPath // if there is no response path, go with the original request path\n    }\n\n    if (path) {\n      // true indicates we want to follow wherever the server ended up sending us\n      if (path === 'true') {\n        path = responsePath || requestPath // if there is no response path, go with the original request path\n      }\n\n      // restore any anchor associated with the request\n      if (responseInfo.pathInfo.anchor && path.indexOf('#') === -1) {\n        path = path + '#' + responseInfo.pathInfo.anchor\n      }\n\n      return {\n        type: saveType,\n        path\n      }\n    } else {\n      return {}\n    }\n  }\n\n  /**\n   * @param {HtmxResponseHandlingConfig} responseHandlingConfig\n   * @param {number} status\n   * @return {boolean}\n   */\n  function codeMatches(responseHandlingConfig, status) {\n    var regExp = new RegExp(responseHandlingConfig.code)\n    return regExp.test(status.toString(10))\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @return {HtmxResponseHandlingConfig}\n   */\n  function resolveResponseHandling(xhr) {\n    for (var i = 0; i < htmx.config.responseHandling.length; i++) {\n      /** @type HtmxResponseHandlingConfig */\n      var responseHandlingElement = htmx.config.responseHandling[i]\n      if (codeMatches(responseHandlingElement, xhr.status)) {\n        return responseHandlingElement\n      }\n    }\n    // no matches, return no swap\n    return {\n      swap: false\n    }\n  }\n\n  /**\n   * @param {string} title\n   */\n  function handleTitle(title) {\n    if (title) {\n      const titleElt = find('title')\n      if (titleElt) {\n        titleElt.textContent = title\n      } else {\n        window.document.title = title\n      }\n    }\n  }\n\n  /**\n   * Resove the Retarget selector and throw if not found\n   * @param {Element} elt\n   * @param {String} target\n   * @returns {Element}\n   */\n  function resolveRetarget(elt, target) {\n    if (target === 'this') {\n      return elt\n    }\n    const resolvedTarget = asElement(querySelectorExt(elt, target))\n    if (resolvedTarget == null) {\n      triggerErrorEvent(elt, 'htmx:targetError', { target })\n      throw new Error(`Invalid re-target ${target}`)\n    }\n    return resolvedTarget\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxResponseInfo} responseInfo\n   */\n  function handleAjaxResponse(elt, responseInfo) {\n    const xhr = responseInfo.xhr\n    let target = responseInfo.target\n    const etc = responseInfo.etc\n    const responseInfoSelect = responseInfo.select\n\n    if (!triggerEvent(elt, 'htmx:beforeOnLoad', responseInfo)) return\n\n    if (hasHeader(xhr, /HX-Trigger:/i)) {\n      handleTriggerHeader(xhr, 'HX-Trigger', elt)\n    }\n\n    if (hasHeader(xhr, /HX-Location:/i)) {\n      let redirectPath = xhr.getResponseHeader('HX-Location')\n      /** @type {HtmxAjaxHelperContext&{path?:string}} */\n      var redirectSwapSpec = {}\n      if (redirectPath.indexOf('{') === 0) {\n        redirectSwapSpec = parseJSON(redirectPath)\n        // what's the best way to throw an error if the user didn't include this\n        redirectPath = redirectSwapSpec.path\n        delete redirectSwapSpec.path\n      }\n      redirectSwapSpec.push = redirectSwapSpec.push ?? 'true'\n      ajaxHelper('get', redirectPath, redirectSwapSpec)\n      return\n    }\n\n    const shouldRefresh = hasHeader(xhr, /HX-Refresh:/i) && xhr.getResponseHeader('HX-Refresh') === 'true'\n\n    if (hasHeader(xhr, /HX-Redirect:/i)) {\n      responseInfo.keepIndicators = true\n      htmx.location.href = xhr.getResponseHeader('HX-Redirect')\n      shouldRefresh && htmx.location.reload()\n      return\n    }\n\n    if (shouldRefresh) {\n      responseInfo.keepIndicators = true\n      htmx.location.reload()\n      return\n    }\n\n    const historyUpdate = determineHistoryUpdates(elt, responseInfo)\n\n    const responseHandling = resolveResponseHandling(xhr)\n    const shouldSwap = responseHandling.swap\n    let isError = !!responseHandling.error\n    let ignoreTitle = htmx.config.ignoreTitle || responseHandling.ignoreTitle\n    let selectOverride = responseHandling.select\n    if (responseHandling.target) {\n      responseInfo.target = resolveRetarget(elt, responseHandling.target)\n    }\n    var swapOverride = etc.swapOverride\n    if (swapOverride == null && responseHandling.swapOverride) {\n      swapOverride = responseHandling.swapOverride\n    }\n\n    // response headers override response handling config\n    if (hasHeader(xhr, /HX-Retarget:/i)) {\n      responseInfo.target = resolveRetarget(elt, xhr.getResponseHeader('HX-Retarget'))\n    }\n\n    if (hasHeader(xhr, /HX-Reswap:/i)) {\n      swapOverride = xhr.getResponseHeader('HX-Reswap')\n    }\n\n    var serverResponse = xhr.response\n    /** @type HtmxBeforeSwapDetails */\n    var beforeSwapDetails = mergeObjects({\n      shouldSwap,\n      serverResponse,\n      isError,\n      ignoreTitle,\n      selectOverride,\n      swapOverride\n    }, responseInfo)\n\n    if (responseHandling.event && !triggerEvent(target, responseHandling.event, beforeSwapDetails)) return\n\n    if (!triggerEvent(target, 'htmx:beforeSwap', beforeSwapDetails)) return\n\n    target = beforeSwapDetails.target // allow re-targeting\n    serverResponse = beforeSwapDetails.serverResponse // allow updating content\n    isError = beforeSwapDetails.isError // allow updating error\n    ignoreTitle = beforeSwapDetails.ignoreTitle // allow updating ignoring title\n    selectOverride = beforeSwapDetails.selectOverride // allow updating select override\n    swapOverride = beforeSwapDetails.swapOverride // allow updating swap override\n\n    responseInfo.target = target // Make updated target available to response events\n    responseInfo.failed = isError // Make failed property available to response events\n    responseInfo.successful = !isError // Make successful property available to response events\n\n    if (beforeSwapDetails.shouldSwap) {\n      if (xhr.status === 286) {\n        cancelPolling(elt)\n      }\n\n      withExtensions(elt, function(extension) {\n        serverResponse = extension.transformResponse(serverResponse, xhr, elt)\n      })\n\n      // Save current page if there will be a history update\n      if (historyUpdate.type) {\n        saveCurrentPageToHistory()\n      }\n\n      var swapSpec = getSwapSpecification(elt, swapOverride)\n\n      if (!swapSpec.hasOwnProperty('ignoreTitle')) {\n        swapSpec.ignoreTitle = ignoreTitle\n      }\n\n      addClassToElement(target, htmx.config.swappingClass)\n\n      if (responseInfoSelect) {\n        selectOverride = responseInfoSelect\n      }\n\n      if (hasHeader(xhr, /HX-Reselect:/i)) {\n        selectOverride = xhr.getResponseHeader('HX-Reselect')\n      }\n\n      const selectOOB = etc.selectOOB || getClosestAttributeValue(elt, 'hx-select-oob')\n      const select = getClosestAttributeValue(elt, 'hx-select')\n\n      swap(target, serverResponse, swapSpec, {\n        select: selectOverride === 'unset' ? null : selectOverride || select,\n        selectOOB,\n        eventInfo: responseInfo,\n        anchor: responseInfo.pathInfo.anchor,\n        contextElement: elt,\n        afterSwapCallback: function() {\n          if (hasHeader(xhr, /HX-Trigger-After-Swap:/i)) {\n            let finalElt = elt\n            if (!bodyContains(elt)) {\n              finalElt = getDocument().body\n            }\n            handleTriggerHeader(xhr, 'HX-Trigger-After-Swap', finalElt)\n          }\n        },\n        afterSettleCallback: function() {\n          if (hasHeader(xhr, /HX-Trigger-After-Settle:/i)) {\n            let finalElt = elt\n            if (!bodyContains(elt)) {\n              finalElt = getDocument().body\n            }\n            handleTriggerHeader(xhr, 'HX-Trigger-After-Settle', finalElt)\n          }\n        },\n        beforeSwapCallback: function() {\n          // if we need to save history, do so, before swapping so that relative resources have the correct base URL\n          if (historyUpdate.type) {\n            triggerEvent(getDocument().body, 'htmx:beforeHistoryUpdate', mergeObjects({ history: historyUpdate }, responseInfo))\n            if (historyUpdate.type === 'push') {\n              pushUrlIntoHistory(historyUpdate.path)\n              triggerEvent(getDocument().body, 'htmx:pushedIntoHistory', { path: historyUpdate.path })\n            } else {\n              replaceUrlInHistory(historyUpdate.path)\n              triggerEvent(getDocument().body, 'htmx:replacedInHistory', { path: historyUpdate.path })\n            }\n          }\n        }\n      })\n    }\n    if (isError) {\n      triggerErrorEvent(elt, 'htmx:responseError', mergeObjects({ error: 'Response Status Error Code ' + xhr.status + ' from ' + responseInfo.pathInfo.requestPath }, responseInfo))\n    }\n  }\n\n  //= ===================================================================\n  // Extensions API\n  //= ===================================================================\n\n  /** @type {Object<string, HtmxExtension>} */\n  const extensions = {}\n\n  /**\n   * extensionBase defines the default functions for all extensions.\n   * @returns {HtmxExtension}\n   */\n  function extensionBase() {\n    return {\n      init: function(api) { return null },\n      getSelectors: function() { return null },\n      onEvent: function(name, evt) { return true },\n      transformResponse: function(text, xhr, elt) { return text },\n      isInlineSwap: function(swapStyle) { return false },\n      handleSwap: function(swapStyle, target, fragment, settleInfo) { return false },\n      encodeParameters: function(xhr, parameters, elt) { return null }\n    }\n  }\n\n  /**\n   * defineExtension initializes the extension and adds it to the htmx registry\n   *\n   * @see https://htmx.org/api/#defineExtension\n   *\n   * @param {string} name the extension name\n   * @param {Partial<HtmxExtension>} extension the extension definition\n   */\n  function defineExtension(name, extension) {\n    if (extension.init) {\n      extension.init(internalAPI)\n    }\n    extensions[name] = mergeObjects(extensionBase(), extension)\n  }\n\n  /**\n   * removeExtension removes an extension from the htmx registry\n   *\n   * @see https://htmx.org/api/#removeExtension\n   *\n   * @param {string} name\n   */\n  function removeExtension(name) {\n    delete extensions[name]\n  }\n\n  /**\n   * getExtensions searches up the DOM tree to return all extensions that can be applied to a given element\n   *\n   * @param {Element} elt\n   * @param {HtmxExtension[]=} extensionsToReturn\n   * @param {string[]=} extensionsToIgnore\n   * @returns {HtmxExtension[]}\n   */\n  function getExtensions(elt, extensionsToReturn, extensionsToIgnore) {\n    if (extensionsToReturn == undefined) {\n      extensionsToReturn = []\n    }\n    if (elt == undefined) {\n      return extensionsToReturn\n    }\n    if (extensionsToIgnore == undefined) {\n      extensionsToIgnore = []\n    }\n    const extensionsForElement = getAttributeValue(elt, 'hx-ext')\n    if (extensionsForElement) {\n      forEach(extensionsForElement.split(','), function(extensionName) {\n        extensionName = extensionName.replace(/ /g, '')\n        if (extensionName.slice(0, 7) == 'ignore:') {\n          extensionsToIgnore.push(extensionName.slice(7))\n          return\n        }\n        if (extensionsToIgnore.indexOf(extensionName) < 0) {\n          const extension = extensions[extensionName]\n          if (extension && extensionsToReturn.indexOf(extension) < 0) {\n            extensionsToReturn.push(extension)\n          }\n        }\n      })\n    }\n    return getExtensions(asElement(parentElt(elt)), extensionsToReturn, extensionsToIgnore)\n  }\n\n  //= ===================================================================\n  // Initialization\n  //= ===================================================================\n  var isReady = false\n  getDocument().addEventListener('DOMContentLoaded', function() {\n    isReady = true\n  })\n\n  /**\n   * Execute a function now if DOMContentLoaded has fired, otherwise listen for it.\n   *\n   * This function uses isReady because there is no reliable way to ask the browser whether\n   * the DOMContentLoaded event has already been fired; there's a gap between DOMContentLoaded\n   * firing and readystate=complete.\n   */\n  function ready(fn) {\n    // Checking readyState here is a failsafe in case the htmx script tag entered the DOM by\n    // some means other than the initial page load.\n    if (isReady || getDocument().readyState === 'complete') {\n      fn()\n    } else {\n      getDocument().addEventListener('DOMContentLoaded', fn)\n    }\n  }\n\n  function insertIndicatorStyles() {\n    if (htmx.config.includeIndicatorStyles !== false) {\n      const nonceAttribute = htmx.config.inlineStyleNonce ? ` nonce=\"${htmx.config.inlineStyleNonce}\"` : ''\n      const indicator = htmx.config.indicatorClass\n      const request = htmx.config.requestClass\n      getDocument().head.insertAdjacentHTML('beforeend',\n        `<style${nonceAttribute}>` +\n        `.${indicator}{opacity:0;visibility: hidden} ` +\n        `.${request} .${indicator}, .${request}.${indicator}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}` +\n        '</style>'\n      )\n    }\n  }\n\n  function getMetaConfig() {\n    /** @type HTMLMetaElement */\n    const element = getDocument().querySelector('meta[name=\"htmx-config\"]')\n    if (element) {\n      return parseJSON(element.content)\n    } else {\n      return null\n    }\n  }\n\n  function mergeMetaConfig() {\n    const metaConfig = getMetaConfig()\n    if (metaConfig) {\n      htmx.config = mergeObjects(htmx.config, metaConfig)\n    }\n  }\n\n  // initialize the document\n  ready(function() {\n    mergeMetaConfig()\n    insertIndicatorStyles()\n    let body = getDocument().body\n    processNode(body)\n    const restoredElts = getDocument().querySelectorAll(\n      \"[hx-trigger='restored'],[data-hx-trigger='restored']\"\n    )\n    body.addEventListener('htmx:abort', function(evt) {\n      const target = (/** @type {CustomEvent} */(evt)).detail.elt || evt.target\n      const internalData = getInternalData(target)\n      if (internalData && internalData.xhr) {\n        internalData.xhr.abort()\n      }\n    })\n    /** @type {(ev: PopStateEvent) => any} */\n    const originalPopstate = window.onpopstate ? window.onpopstate.bind(window) : null\n    /** @type {(ev: PopStateEvent) => any} */\n    window.onpopstate = function(event) {\n      if (event.state && event.state.htmx) {\n        restoreHistory()\n        forEach(restoredElts, function(elt) {\n          triggerEvent(elt, 'htmx:restored', {\n            document: getDocument(),\n            triggerEvent\n          })\n        })\n      } else {\n        if (originalPopstate) {\n          originalPopstate(event)\n        }\n      }\n    }\n    getWindow().setTimeout(function() {\n      triggerEvent(body, 'htmx:load', {}) // give ready handlers a chance to load up before firing this event\n      body = null // kill reference for gc\n    }, 0)\n  })\n\n  return htmx\n})()\n\n/** @typedef {'get'|'head'|'post'|'put'|'delete'|'connect'|'options'|'trace'|'patch'} HttpVerb */\n\n/**\n * @typedef {Object} SwapOptions\n * @property {string} [select]\n * @property {string} [selectOOB]\n * @property {*} [eventInfo]\n * @property {string} [anchor]\n * @property {Element} [contextElement]\n * @property {swapCallback} [afterSwapCallback]\n * @property {swapCallback} [afterSettleCallback]\n * @property {swapCallback} [beforeSwapCallback]\n * @property {string} [title]\n * @property {boolean} [historyRequest]\n */\n\n/**\n * @callback swapCallback\n */\n\n/**\n * @typedef {'innerHTML' | 'outerHTML' | 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend' | 'delete' | 'none' | string} HtmxSwapStyle\n */\n\n/**\n * @typedef HtmxSwapSpecification\n * @property {HtmxSwapStyle} swapStyle\n * @property {number} swapDelay\n * @property {number} settleDelay\n * @property {boolean} [transition]\n * @property {boolean} [ignoreTitle]\n * @property {string} [head]\n * @property {'top' | 'bottom' | number } [scroll]\n * @property {string} [scrollTarget]\n * @property {string} [show]\n * @property {string} [showTarget]\n * @property {boolean} [focusScroll]\n */\n\n/**\n * @typedef {((this:Node, evt:Event) => boolean) & {source: string}} ConditionalFunction\n */\n\n/**\n * @typedef {Object} HtmxTriggerSpecification\n * @property {string} trigger\n * @property {number} [pollInterval]\n * @property {ConditionalFunction} [eventFilter]\n * @property {boolean} [changed]\n * @property {boolean} [once]\n * @property {boolean} [consume]\n * @property {number} [delay]\n * @property {string} [from]\n * @property {string} [target]\n * @property {number} [throttle]\n * @property {string} [queue]\n * @property {string} [root]\n * @property {string} [threshold]\n */\n\n/**\n * @typedef {{elt: Element, message: string, validity: ValidityState}} HtmxElementValidationError\n */\n\n/**\n * @typedef {Record<string, string>} HtmxHeaderSpecification\n * @property {'true'} HX-Request\n * @property {string|null} HX-Trigger\n * @property {string|null} HX-Trigger-Name\n * @property {string|null} HX-Target\n * @property {string} HX-Current-URL\n * @property {string} [HX-Prompt]\n * @property {'true'} [HX-Boosted]\n * @property {string} [Content-Type]\n * @property {'true'} [HX-History-Restore-Request]\n */\n\n/**\n * @typedef HtmxAjaxHelperContext\n * @property {Element|string} [source]\n * @property {Event} [event]\n * @property {HtmxAjaxHandler} [handler]\n * @property {Element|string} [target]\n * @property {HtmxSwapStyle} [swap]\n * @property {Object|FormData} [values]\n * @property {Record<string,string>} [headers]\n * @property {string} [select]\n * @property {string} [push]\n * @property {string} [replace]\n * @property {string} [selectOOB]\n */\n\n/**\n * @typedef {Object} HtmxRequestConfig\n * @property {boolean} boosted\n * @property {boolean} useUrlParams\n * @property {FormData} formData\n * @property {Object} parameters formData proxy\n * @property {FormData} unfilteredFormData\n * @property {Object} unfilteredParameters unfilteredFormData proxy\n * @property {HtmxHeaderSpecification} headers\n * @property {Element} elt\n * @property {Element} target\n * @property {HttpVerb} verb\n * @property {HtmxElementValidationError[]} errors\n * @property {boolean} withCredentials\n * @property {number} timeout\n * @property {string} path\n * @property {Event} triggeringEvent\n */\n\n/**\n * @typedef {Object} HtmxResponseInfo\n * @property {XMLHttpRequest} xhr\n * @property {Element} target\n * @property {HtmxRequestConfig} requestConfig\n * @property {HtmxAjaxEtc} etc\n * @property {boolean} boosted\n * @property {string} select\n * @property {{requestPath: string, finalRequestPath: string, responsePath: string|null, anchor: string}} pathInfo\n * @property {boolean} [failed]\n * @property {boolean} [successful]\n * @property {boolean} [keepIndicators]\n */\n\n/**\n * @typedef {Object} HtmxAjaxEtc\n * @property {boolean} [returnPromise]\n * @property {HtmxAjaxHandler} [handler]\n * @property {string} [select]\n * @property {Element} [targetOverride]\n * @property {HtmxSwapStyle} [swapOverride]\n * @property {Record<string,string>} [headers]\n * @property {Object|FormData} [values]\n * @property {boolean} [credentials]\n * @property {number} [timeout]\n * @property {string} [push]\n * @property {string} [replace]\n * @property {string} [selectOOB]\n */\n\n/**\n * @typedef {Object} HtmxResponseHandlingConfig\n * @property {string} [code]\n * @property {boolean} swap\n * @property {boolean} [error]\n * @property {boolean} [ignoreTitle]\n * @property {string} [select]\n * @property {string} [target]\n * @property {string} [swapOverride]\n * @property {string} [event]\n */\n\n/**\n * @typedef {HtmxResponseInfo & {shouldSwap: boolean, serverResponse: any, isError: boolean, ignoreTitle: boolean, selectOverride:string, swapOverride:string}} HtmxBeforeSwapDetails\n */\n\n/**\n * @callback HtmxAjaxHandler\n * @param {Element} elt\n * @param {HtmxResponseInfo} responseInfo\n */\n\n/**\n * @typedef {(() => void)} HtmxSettleTask\n */\n\n/**\n * @typedef {Object} HtmxSettleInfo\n * @property {HtmxSettleTask[]} tasks\n * @property {Element[]} elts\n * @property {string} [title]\n */\n\n/**\n * @see https://github.com/bigskysoftware/htmx-extensions/blob/main/README.md\n * @typedef {Object} HtmxExtension\n * @property {(api: any) => void} init\n * @property {(name: string, event: CustomEvent) => boolean} onEvent\n * @property {(text: string, xhr: XMLHttpRequest, elt: Element) => string} transformResponse\n * @property {(swapStyle: HtmxSwapStyle) => boolean} isInlineSwap\n * @property {(swapStyle: HtmxSwapStyle, target: Node, fragment: Node, settleInfo: HtmxSettleInfo) => boolean|Node[]} handleSwap\n * @property {(xhr: XMLHttpRequest, parameters: FormData, elt: Node) => *|string|null} encodeParameters\n * @property {() => string[]|null} getSelectors\n */\nexport default htmx\n", "import htmx from \"htmx.org\";\nwindow.htmx = htmx;\nconsole.log(\"window.htmx: \", window.htmx);\nconsole.log(\"htmx: \", htmx);\n", "// community-modules/core/src/localEventService.ts\nvar LocalEventService = class {\n  constructor() {\n    this.allSyncListeners = /* @__PURE__ */ new Map();\n    this.allAsyncListeners = /* @__PURE__ */ new Map();\n    this.globalSyncListeners = /* @__PURE__ */ new Set();\n    this.globalAsyncListeners = /* @__PURE__ */ new Set();\n    this.asyncFunctionsQueue = [];\n    this.scheduled = false;\n    // using an object performs better than a Set for the number of different events we have\n    this.firedEvents = {};\n  }\n  setFrameworkOverrides(frameworkOverrides) {\n    this.frameworkOverrides = frameworkOverrides;\n  }\n  getListeners(eventType, async, autoCreateListenerCollection) {\n    const listenerMap = async ? this.allAsyncListeners : this.allSyncListeners;\n    let listeners = listenerMap.get(eventType);\n    if (!listeners && autoCreateListenerCollection) {\n      listeners = /* @__PURE__ */ new Set();\n      listenerMap.set(eventType, listeners);\n    }\n    return listeners;\n  }\n  noRegisteredListenersExist() {\n    return this.allSyncListeners.size === 0 && this.allAsyncListeners.size === 0 && this.globalSyncListeners.size === 0 && this.globalAsyncListeners.size === 0;\n  }\n  addEventListener(eventType, listener, async = false) {\n    this.getListeners(eventType, async, true).add(listener);\n  }\n  removeEventListener(eventType, listener, async = false) {\n    const listeners = this.getListeners(eventType, async, false);\n    if (!listeners) {\n      return;\n    }\n    listeners.delete(listener);\n    if (listeners.size === 0) {\n      const listenerMap = async ? this.allAsyncListeners : this.allSyncListeners;\n      listenerMap.delete(eventType);\n    }\n  }\n  addGlobalListener(listener, async = false) {\n    (async ? this.globalAsyncListeners : this.globalSyncListeners).add(listener);\n  }\n  removeGlobalListener(listener, async = false) {\n    (async ? this.globalAsyncListeners : this.globalSyncListeners).delete(listener);\n  }\n  dispatchEvent(event) {\n    const agEvent = event;\n    this.dispatchToListeners(agEvent, true);\n    this.dispatchToListeners(agEvent, false);\n    this.firedEvents[agEvent.type] = true;\n  }\n  dispatchEventOnce(event) {\n    if (!this.firedEvents[event.type]) {\n      this.dispatchEvent(event);\n    }\n  }\n  dispatchToListeners(event, async) {\n    const eventType = event.type;\n    if (async && \"event\" in event) {\n      const browserEvent = event.event;\n      if (browserEvent instanceof Event) {\n        event.eventPath = browserEvent.composedPath();\n      }\n    }\n    const processEventListeners = (listeners2, originalListeners2) => listeners2.forEach((listener) => {\n      if (!originalListeners2.has(listener)) {\n        return;\n      }\n      const callback = this.frameworkOverrides ? () => this.frameworkOverrides.wrapIncoming(() => listener(event)) : () => listener(event);\n      if (async) {\n        this.dispatchAsync(callback);\n      } else {\n        callback();\n      }\n    });\n    const originalListeners = this.getListeners(eventType, async, false) ?? /* @__PURE__ */ new Set();\n    const listeners = new Set(originalListeners);\n    if (listeners.size > 0) {\n      processEventListeners(listeners, originalListeners);\n    }\n    const globalListeners = new Set(\n      async ? this.globalAsyncListeners : this.globalSyncListeners\n    );\n    globalListeners.forEach((listener) => {\n      const callback = this.frameworkOverrides ? () => this.frameworkOverrides.wrapIncoming(() => listener(eventType, event)) : () => listener(eventType, event);\n      if (async) {\n        this.dispatchAsync(callback);\n      } else {\n        callback();\n      }\n    });\n  }\n  // this gets called inside the grid's thread, for each event that it\n  // wants to set async. the grid then batches the events into one setTimeout()\n  // because setTimeout() is an expensive operation. ideally we would have\n  // each event in it's own setTimeout(), but we batch for performance.\n  dispatchAsync(func) {\n    this.asyncFunctionsQueue.push(func);\n    if (!this.scheduled) {\n      const flush = () => {\n        window.setTimeout(this.flushAsyncQueue.bind(this), 0);\n      };\n      this.frameworkOverrides ? this.frameworkOverrides.wrapIncoming(flush) : flush();\n      this.scheduled = true;\n    }\n  }\n  // this happens in the next VM turn only, and empties the queue of events\n  flushAsyncQueue() {\n    this.scheduled = false;\n    const queueCopy = this.asyncFunctionsQueue.slice();\n    this.asyncFunctionsQueue = [];\n    queueCopy.forEach((func) => func());\n  }\n};\n\n// community-modules/core/src/modules/moduleNames.ts\nvar ModuleNames = /* @__PURE__ */ ((ModuleNames2) => {\n  ModuleNames2[\"CommunityCoreModule\"] = \"@ag-grid-community/core\";\n  ModuleNames2[\"InfiniteRowModelModule\"] = \"@ag-grid-community/infinite-row-model\";\n  ModuleNames2[\"ClientSideRowModelModule\"] = \"@ag-grid-community/client-side-row-model\";\n  ModuleNames2[\"CsvExportModule\"] = \"@ag-grid-community/csv-export\";\n  ModuleNames2[\"EnterpriseCoreModule\"] = \"@ag-grid-enterprise/core\";\n  ModuleNames2[\"RowGroupingModule\"] = \"@ag-grid-enterprise/row-grouping\";\n  ModuleNames2[\"ColumnsToolPanelModule\"] = \"@ag-grid-enterprise/column-tool-panel\";\n  ModuleNames2[\"FiltersToolPanelModule\"] = \"@ag-grid-enterprise/filter-tool-panel\";\n  ModuleNames2[\"MenuModule\"] = \"@ag-grid-enterprise/menu\";\n  ModuleNames2[\"SetFilterModule\"] = \"@ag-grid-enterprise/set-filter\";\n  ModuleNames2[\"MultiFilterModule\"] = \"@ag-grid-enterprise/multi-filter\";\n  ModuleNames2[\"StatusBarModule\"] = \"@ag-grid-enterprise/status-bar\";\n  ModuleNames2[\"SideBarModule\"] = \"@ag-grid-enterprise/side-bar\";\n  ModuleNames2[\"RangeSelectionModule\"] = \"@ag-grid-enterprise/range-selection\";\n  ModuleNames2[\"MasterDetailModule\"] = \"@ag-grid-enterprise/master-detail\";\n  ModuleNames2[\"RichSelectModule\"] = \"@ag-grid-enterprise/rich-select\";\n  ModuleNames2[\"GridChartsModule\"] = \"@ag-grid-enterprise/charts\";\n  ModuleNames2[\"ViewportRowModelModule\"] = \"@ag-grid-enterprise/viewport-row-model\";\n  ModuleNames2[\"ServerSideRowModelModule\"] = \"@ag-grid-enterprise/server-side-row-model\";\n  ModuleNames2[\"ExcelExportModule\"] = \"@ag-grid-enterprise/excel-export\";\n  ModuleNames2[\"ClipboardModule\"] = \"@ag-grid-enterprise/clipboard\";\n  ModuleNames2[\"SparklinesModule\"] = \"@ag-grid-enterprise/sparklines\";\n  ModuleNames2[\"AdvancedFilterModule\"] = \"@ag-grid-enterprise/advanced-filter\";\n  ModuleNames2[\"AngularModule\"] = \"@ag-grid-community/angular\";\n  ModuleNames2[\"ReactModule\"] = \"@ag-grid-community/react\";\n  ModuleNames2[\"VueModule\"] = \"@ag-grid-community/vue\";\n  return ModuleNames2;\n})(ModuleNames || {});\n\n// community-modules/core/src/utils/function.ts\nvar doOnceFlags = {};\nfunction _doOnce(func, key) {\n  if (doOnceFlags[key]) {\n    return;\n  }\n  func();\n  doOnceFlags[key] = true;\n}\nfunction _log(message, ...args) {\n  console.log(\"AG Grid: \" + message, ...args);\n}\nfunction _warnOnce(msg, ...args) {\n  _doOnce(() => console.warn(\"AG Grid: \" + msg, ...args), msg + args?.join(\"\"));\n}\nfunction _errorOnce(msg, ...args) {\n  _doOnce(() => console.error(\"AG Grid: \" + msg, ...args), msg + args?.join(\"\"));\n}\nfunction _isFunction(val) {\n  return !!(val && val.constructor && val.call && val.apply);\n}\nfunction _executeInAWhile(funcs) {\n  _executeAfter(funcs, 400);\n}\nvar executeNextVMTurnFuncs = [];\nvar executeNextVMTurnPending = false;\nfunction _executeNextVMTurn(func) {\n  executeNextVMTurnFuncs.push(func);\n  if (executeNextVMTurnPending) {\n    return;\n  }\n  executeNextVMTurnPending = true;\n  window.setTimeout(() => {\n    const funcsCopy = executeNextVMTurnFuncs.slice();\n    executeNextVMTurnFuncs.length = 0;\n    executeNextVMTurnPending = false;\n    funcsCopy.forEach((func2) => func2());\n  }, 0);\n}\nfunction _executeAfter(funcs, milliseconds = 0) {\n  if (funcs.length > 0) {\n    window.setTimeout(() => funcs.forEach((func) => func()), milliseconds);\n  }\n}\nfunction _debounce(func, delay) {\n  let timeout;\n  return function(...args) {\n    const context = this;\n    window.clearTimeout(timeout);\n    timeout = window.setTimeout(function() {\n      func.apply(context, args);\n    }, delay);\n  };\n}\nfunction _throttle(func, wait) {\n  let previousCall = 0;\n  return function(...args) {\n    const context = this;\n    const currentCall = (/* @__PURE__ */ new Date()).getTime();\n    if (currentCall - previousCall < wait) {\n      return;\n    }\n    previousCall = currentCall;\n    func.apply(context, args);\n  };\n}\nfunction _waitUntil(condition, callback, timeout = 100, timeoutMessage) {\n  const timeStamp = (/* @__PURE__ */ new Date()).getTime();\n  let interval = null;\n  let executed = false;\n  const internalCallback = () => {\n    const reachedTimeout = (/* @__PURE__ */ new Date()).getTime() - timeStamp > timeout;\n    if (condition() || reachedTimeout) {\n      callback();\n      executed = true;\n      if (interval != null) {\n        window.clearInterval(interval);\n        interval = null;\n      }\n      if (reachedTimeout && timeoutMessage) {\n        _warnOnce(timeoutMessage);\n      }\n    }\n  };\n  internalCallback();\n  if (!executed) {\n    interval = window.setInterval(internalCallback, 10);\n  }\n}\nfunction _compose(...fns) {\n  return (arg) => fns.reduce((composed, f) => f(composed), arg);\n}\n\n// community-modules/core/src/utils/generic.ts\nfunction _makeNull(value) {\n  if (value == null || value === \"\") {\n    return null;\n  }\n  return value;\n}\nfunction _exists(value, allowEmptyString = false) {\n  return value != null && (value !== \"\" || allowEmptyString);\n}\nfunction _missing(value) {\n  return !_exists(value);\n}\nfunction _missingOrEmpty(value) {\n  return value == null || value.length === 0;\n}\nfunction _toStringOrNull(value) {\n  return value != null && typeof value.toString === \"function\" ? value.toString() : null;\n}\nfunction _attrToNumber(value) {\n  if (value === void 0) {\n    return;\n  }\n  if (value === null || value === \"\") {\n    return null;\n  }\n  if (typeof value === \"number\") {\n    return isNaN(value) ? void 0 : value;\n  }\n  const valueParsed = parseInt(value, 10);\n  return isNaN(valueParsed) ? void 0 : valueParsed;\n}\nfunction _attrToBoolean(value) {\n  if (value === void 0) {\n    return;\n  }\n  if (value === null || value === \"\") {\n    return false;\n  }\n  return toBoolean(value);\n}\nfunction toBoolean(value) {\n  if (typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    return value.toUpperCase() === \"TRUE\" || value == \"\";\n  }\n  return false;\n}\nfunction _jsonEquals(val1, val2) {\n  const val1Json = val1 ? JSON.stringify(val1) : null;\n  const val2Json = val2 ? JSON.stringify(val2) : null;\n  return val1Json === val2Json;\n}\nfunction _defaultComparator(valueA, valueB, accentedCompare = false) {\n  const valueAMissing = valueA == null;\n  const valueBMissing = valueB == null;\n  if (valueA && valueA.toNumber) {\n    valueA = valueA.toNumber();\n  }\n  if (valueB && valueB.toNumber) {\n    valueB = valueB.toNumber();\n  }\n  if (valueAMissing && valueBMissing) {\n    return 0;\n  }\n  if (valueAMissing) {\n    return -1;\n  }\n  if (valueBMissing) {\n    return 1;\n  }\n  function doQuickCompare(a, b) {\n    return a > b ? 1 : a < b ? -1 : 0;\n  }\n  if (typeof valueA !== \"string\") {\n    return doQuickCompare(valueA, valueB);\n  }\n  if (!accentedCompare) {\n    return doQuickCompare(valueA, valueB);\n  }\n  try {\n    return valueA.localeCompare(valueB);\n  } catch (e) {\n    return doQuickCompare(valueA, valueB);\n  }\n}\nfunction _values(object) {\n  if (object instanceof Set || object instanceof Map) {\n    const arr = [];\n    object.forEach((value) => arr.push(value));\n    return arr;\n  }\n  return Object.values(object);\n}\n\n// community-modules/core/src/gridOptionsUtils.ts\nfunction isRowModelType(gos, rowModelType) {\n  return gos.get(\"rowModelType\") === rowModelType;\n}\nfunction _isClientSideRowModel(gos) {\n  return isRowModelType(gos, \"clientSide\");\n}\nfunction _isServerSideRowModel(gos) {\n  return isRowModelType(gos, \"serverSide\");\n}\nfunction _isDomLayout(gos, domLayout) {\n  return gos.get(\"domLayout\") === domLayout;\n}\nfunction _isRowSelection(gos) {\n  return _getRowSelectionMode(gos) !== void 0;\n}\nfunction _useAsyncEvents(gos) {\n  return !gos.get(\"suppressAsyncEvents\");\n}\nfunction _isGetRowHeightFunction(gos) {\n  return typeof gos.get(\"getRowHeight\") === \"function\";\n}\nfunction _shouldMaintainColumnOrder(gos, isPivotColumns) {\n  if (isPivotColumns) {\n    return !gos.get(\"enableStrictPivotColumnOrder\");\n  }\n  return gos.get(\"maintainColumnOrder\");\n}\nfunction _getRowHeightForNode(gos, rowNode, allowEstimate = false, defaultRowHeight) {\n  if (defaultRowHeight == null) {\n    defaultRowHeight = gos.environment.getDefaultRowHeight();\n  }\n  if (_isGetRowHeightFunction(gos)) {\n    if (allowEstimate) {\n      return { height: defaultRowHeight, estimated: true };\n    }\n    const params = {\n      node: rowNode,\n      data: rowNode.data\n    };\n    const height = gos.getCallback(\"getRowHeight\")(params);\n    if (isNumeric(height)) {\n      if (height === 0) {\n        _warnOnce(\n          \"The return of `getRowHeight` cannot be zero. If the intention is to hide rows, use a filter instead.\"\n        );\n      }\n      return { height: Math.max(1, height), estimated: false };\n    }\n  }\n  if (rowNode.detail && gos.get(\"masterDetail\")) {\n    return getMasterDetailRowHeight(gos);\n  }\n  const gridOptionsRowHeight = gos.get(\"rowHeight\");\n  const rowHeight = gridOptionsRowHeight && isNumeric(gridOptionsRowHeight) ? gridOptionsRowHeight : defaultRowHeight;\n  return { height: rowHeight, estimated: false };\n}\nfunction getMasterDetailRowHeight(gos) {\n  if (gos.get(\"detailRowAutoHeight\")) {\n    return { height: 1, estimated: false };\n  }\n  const defaultRowHeight = gos.get(\"detailRowHeight\");\n  if (isNumeric(defaultRowHeight)) {\n    return { height: defaultRowHeight, estimated: false };\n  }\n  return { height: 300, estimated: false };\n}\nfunction _getRowHeightAsNumber(gos) {\n  const { environment } = gos;\n  const gridOptionsRowHeight = gos.get(\"rowHeight\");\n  if (!gridOptionsRowHeight || _missing(gridOptionsRowHeight)) {\n    return environment.getDefaultRowHeight();\n  }\n  const rowHeight = environment.refreshRowHeightVariable();\n  if (rowHeight !== -1) {\n    return rowHeight;\n  }\n  _warnOnce(\"row height must be a number if not using standard row model\");\n  return environment.getDefaultRowHeight();\n}\nfunction isNumeric(value) {\n  return !isNaN(value) && typeof value === \"number\" && isFinite(value);\n}\nfunction _getDomData(gos, element, key) {\n  const domData = element[gos.getDomDataKey()];\n  return domData ? domData[key] : void 0;\n}\nfunction _setDomData(gos, element, key, value) {\n  const domDataKey = gos.getDomDataKey();\n  let domData = element[domDataKey];\n  if (_missing(domData)) {\n    domData = {};\n    element[domDataKey] = domData;\n  }\n  domData[key] = value;\n}\nfunction _getDocument(gos) {\n  let result = null;\n  const gridOptionsGetDocument = gos.get(\"getDocument\");\n  if (gridOptionsGetDocument && _exists(gridOptionsGetDocument)) {\n    result = gridOptionsGetDocument();\n  } else if (gos.eGridDiv) {\n    result = gos.eGridDiv.ownerDocument;\n  }\n  if (result && _exists(result)) {\n    return result;\n  }\n  return document;\n}\nfunction _getWindow(gos) {\n  const eDocument = _getDocument(gos);\n  return eDocument.defaultView || window;\n}\nfunction _getRootNode(gos) {\n  return gos.eGridDiv.getRootNode();\n}\nfunction _getActiveDomElement(gos) {\n  return _getRootNode(gos).activeElement;\n}\nfunction _isNothingFocused(gos) {\n  const eDocument = _getDocument(gos);\n  const activeEl = _getActiveDomElement(gos);\n  return activeEl === null || activeEl === eDocument.body;\n}\nfunction _isAnimateRows(gos) {\n  if (gos.get(\"ensureDomOrder\")) {\n    return false;\n  }\n  return gos.get(\"animateRows\");\n}\nfunction _isGroupRowsSticky(gos) {\n  if (gos.get(\"paginateChildRows\") || gos.get(\"groupHideOpenParents\") || _isDomLayout(gos, \"print\")) {\n    return false;\n  }\n  return true;\n}\nfunction _isColumnsSortingCoupledToGroup(gos) {\n  const autoGroupColumnDef = gos.get(\"autoGroupColumnDef\");\n  return !autoGroupColumnDef?.comparator && !gos.get(\"treeData\");\n}\nfunction _getGroupAggFiltering(gos) {\n  const userValue = gos.get(\"groupAggFiltering\");\n  if (typeof userValue === \"function\") {\n    return gos.getCallback(\"groupAggFiltering\");\n  }\n  if (userValue === true) {\n    return () => true;\n  }\n  return void 0;\n}\nfunction _getGrandTotalRow(gos) {\n  const userValue = gos.get(\"grandTotalRow\");\n  if (userValue) {\n    return userValue;\n  }\n  const legacyValue = gos.get(\"groupIncludeTotalFooter\");\n  if (legacyValue) {\n    return \"bottom\";\n  }\n  return void 0;\n}\nfunction _getGroupTotalRowCallback(gos) {\n  const userValue = gos.get(\"groupTotalRow\");\n  if (typeof userValue === \"function\") {\n    return gos.getCallback(\"groupTotalRow\");\n  }\n  if (userValue) {\n    return () => userValue;\n  }\n  const legacyValue = gos.get(\"groupIncludeFooter\");\n  if (typeof legacyValue === \"function\") {\n    const legacyCallback = gos.getCallback(\"groupIncludeFooter\");\n    return (p) => {\n      return legacyCallback(p) ? \"bottom\" : void 0;\n    };\n  }\n  return () => legacyValue ? \"bottom\" : void 0;\n}\nfunction _isGroupMultiAutoColumn(gos) {\n  if (gos.exists(\"groupDisplayType\")) {\n    return gos.get(\"groupDisplayType\") === \"multipleColumns\";\n  }\n  return gos.get(\"groupHideOpenParents\");\n}\nfunction _isGroupUseEntireRow(gos, pivotMode) {\n  if (pivotMode) {\n    return false;\n  }\n  return gos.get(\"groupDisplayType\") === \"groupRows\";\n}\nfunction _getRowIdCallback(gos) {\n  const getRowId = gos.getCallback(\"getRowId\");\n  if (getRowId === void 0) {\n    return getRowId;\n  }\n  return (params) => {\n    let id = getRowId(params);\n    if (typeof id !== \"string\") {\n      _warnOnce(`The getRowId callback must return a string. The ID `, id, ` is being cast to a string.`);\n      id = String(id);\n    }\n    return id;\n  };\n}\nfunction _getCheckboxes(selection) {\n  return selection?.checkboxes ?? true;\n}\nfunction _getHeaderCheckbox(selection) {\n  return selection?.mode === \"multiRow\" && (selection.headerCheckbox ?? true);\n}\nfunction _getHideDisabledCheckboxes(selection) {\n  return selection?.hideDisabledCheckboxes ?? false;\n}\nfunction _isUsingNewRowSelectionAPI(gos) {\n  const rowSelection = gos.get(\"rowSelection\");\n  return typeof rowSelection !== \"string\";\n}\nfunction _isUsingNewCellSelectionAPI(gos) {\n  return gos.get(\"cellSelection\") !== void 0;\n}\nfunction _getSuppressMultiRanges(gos) {\n  const selection = gos.get(\"cellSelection\");\n  const useNewAPI = selection !== void 0;\n  if (!useNewAPI) {\n    return gos.get(\"suppressMultiRangeSelection\");\n  }\n  return typeof selection !== \"boolean\" ? selection?.suppressMultiRanges ?? false : false;\n}\nfunction _isCellSelectionEnabled(gos) {\n  const selection = gos.get(\"cellSelection\");\n  const useNewAPI = selection !== void 0;\n  return useNewAPI ? !!selection : gos.get(\"enableRangeSelection\");\n}\nfunction _isRangeHandleEnabled(gos) {\n  const selection = gos.get(\"cellSelection\");\n  const useNewAPI = selection !== void 0;\n  if (!useNewAPI) {\n    return gos.get(\"enableRangeHandle\");\n  }\n  return typeof selection !== \"boolean\" ? selection.handle?.mode === \"range\" : false;\n}\nfunction _isFillHandleEnabled(gos) {\n  const selection = gos.get(\"cellSelection\");\n  const useNewAPI = selection !== void 0;\n  if (!useNewAPI) {\n    return gos.get(\"enableFillHandle\");\n  }\n  return typeof selection !== \"boolean\" ? selection.handle?.mode === \"fill\" : false;\n}\nfunction _getFillHandle(gos) {\n  const selection = gos.get(\"cellSelection\");\n  const useNewAPI = selection !== void 0;\n  if (!useNewAPI) {\n    return {\n      mode: \"fill\",\n      setFillValue: gos.get(\"fillOperation\"),\n      direction: gos.get(\"fillHandleDirection\"),\n      suppressClearOnFillReduction: gos.get(\"suppressClearOnFillReduction\")\n    };\n  }\n  return typeof selection !== \"boolean\" && selection.handle?.mode === \"fill\" ? selection.handle : void 0;\n}\nfunction _getEnableClickSelection(gos) {\n  const selection = gos.get(\"rowSelection\") ?? \"single\";\n  if (typeof selection === \"string\") {\n    const suppressRowClickSelection = gos.get(\"suppressRowClickSelection\");\n    const suppressRowDeselection = gos.get(\"suppressRowDeselection\");\n    if (suppressRowClickSelection && suppressRowDeselection) {\n      return false;\n    } else if (suppressRowClickSelection) {\n      return \"enableDeselection\";\n    } else if (suppressRowDeselection) {\n      return \"enableSelection\";\n    } else {\n      return true;\n    }\n  }\n  return selection.mode === \"singleRow\" || selection.mode === \"multiRow\" ? selection.enableClickSelection ?? false : false;\n}\nfunction _getEnableSelection(gos) {\n  const enableClickSelection = _getEnableClickSelection(gos);\n  return enableClickSelection === true || enableClickSelection === \"enableSelection\";\n}\nfunction _getEnableDeselection(gos) {\n  const enableClickSelection = _getEnableClickSelection(gos);\n  return enableClickSelection === true || enableClickSelection === \"enableDeselection\";\n}\nfunction _getIsRowSelectable(gos) {\n  const selection = gos.get(\"rowSelection\");\n  if (typeof selection === \"string\") {\n    return gos.get(\"isRowSelectable\");\n  }\n  return selection?.isRowSelectable;\n}\nfunction _getRowSelectionMode(gos) {\n  const selection = gos.get(\"rowSelection\");\n  if (typeof selection === \"string\") {\n    switch (selection) {\n      case \"multiple\":\n        return \"multiRow\";\n      case \"single\":\n        return \"singleRow\";\n      default:\n        return;\n    }\n  }\n  return selection?.mode;\n}\nfunction _isMultiRowSelection(gos) {\n  const mode = _getRowSelectionMode(gos);\n  return mode === \"multiRow\";\n}\nfunction _getEnableSelectionWithoutKeys(gos) {\n  const selection = gos.get(\"rowSelection\");\n  if (typeof selection === \"string\") {\n    return gos.get(\"rowMultiSelectWithClick\");\n  }\n  return selection?.enableSelectionWithoutKeys ?? false;\n}\nfunction _getGroupSelection(gos) {\n  const selection = gos.get(\"rowSelection\");\n  if (typeof selection === \"string\") {\n    const groupSelectsChildren = gos.get(\"groupSelectsChildren\");\n    const groupSelectsFiltered = gos.get(\"groupSelectsFiltered\");\n    if (groupSelectsChildren && groupSelectsFiltered) {\n      return \"filteredDescendants\";\n    } else if (groupSelectsChildren) {\n      return \"descendants\";\n    } else {\n      return \"self\";\n    }\n  }\n  return selection?.mode === \"multiRow\" ? selection.groupSelects : void 0;\n}\nfunction _getGroupSelectsDescendants(gos) {\n  const groupSelection = _getGroupSelection(gos);\n  return groupSelection === \"descendants\" || groupSelection === \"filteredDescendants\";\n}\nfunction _isSetFilterByDefault(gos) {\n  return gos.isModuleRegistered(\"@ag-grid-enterprise/set-filter\" /* SetFilterModule */) && !gos.get(\"suppressSetFilterByDefault\");\n}\n\n// community-modules/core/src/utils/array.ts\nfunction _existsAndNotEmpty(value) {\n  return value != null && value.length > 0;\n}\nfunction _last(arr) {\n  if (!arr || !arr.length) {\n    return;\n  }\n  return arr[arr.length - 1];\n}\nfunction _areEqual(a, b, comparator) {\n  if (a == null && b == null) {\n    return true;\n  }\n  return a != null && b != null && a.length === b.length && a.every((value, index) => comparator ? comparator(value, b[index]) : b[index] === value);\n}\nfunction _shallowCompare(arr1, arr2) {\n  return _areEqual(arr1, arr2);\n}\nfunction _sortNumerically(array) {\n  return array.sort((a, b) => a - b);\n}\nfunction _removeRepeatsFromArray(array, object) {\n  if (!array) {\n    return;\n  }\n  for (let index = array.length - 2; index >= 0; index--) {\n    const thisOneMatches = array[index] === object;\n    const nextOneMatches = array[index + 1] === object;\n    if (thisOneMatches && nextOneMatches) {\n      array.splice(index + 1, 1);\n    }\n  }\n}\nfunction _removeFromUnorderedArray(array, object) {\n  const index = array.indexOf(object);\n  if (index >= 0) {\n    array[index] = array[array.length - 1];\n    array.pop();\n  }\n}\nfunction _removeFromArray(array, object) {\n  const index = array.indexOf(object);\n  if (index >= 0) {\n    array.splice(index, 1);\n  }\n}\nfunction _removeAllFromUnorderedArray(array, toRemove) {\n  for (let i = 0; i < toRemove.length; i++) {\n    _removeFromUnorderedArray(array, toRemove[i]);\n  }\n}\nfunction _removeAllFromArray(array, toRemove) {\n  for (let i = 0; i < toRemove.length; i++) {\n    _removeFromArray(array, toRemove[i]);\n  }\n}\nfunction _insertIntoArray(array, object, toIndex) {\n  array.splice(toIndex, 0, object);\n}\nfunction _insertArrayIntoArray(dest, src, toIndex) {\n  if (dest == null || src == null) {\n    return;\n  }\n  for (let i = src.length - 1; i >= 0; i--) {\n    const item = src[i];\n    _insertIntoArray(dest, item, toIndex);\n  }\n}\nfunction _moveInArray(array, objectsToMove, toIndex) {\n  _removeAllFromArray(array, objectsToMove);\n  objectsToMove.slice().reverse().forEach((obj) => _insertIntoArray(array, obj, toIndex));\n}\nfunction _includes(array, value) {\n  return array.indexOf(value) > -1;\n}\nfunction _flatten(arrayOfArrays) {\n  return arrayOfArrays?.flatMap((t) => t) ?? [];\n}\nfunction _pushAll(target, source) {\n  if (source == null || target == null) {\n    return;\n  }\n  source.forEach((value) => target.push(value));\n}\nfunction _forEachReverse(list, action) {\n  if (list == null) {\n    return;\n  }\n  for (let i = list.length - 1; i >= 0; i--) {\n    action(list[i], i);\n  }\n}\n\n// community-modules/core/src/utils/event.ts\nvar AG_GRID_STOP_PROPAGATION = \"__ag_Grid_Stop_Propagation\";\nvar PASSIVE_EVENTS = [\"touchstart\", \"touchend\", \"touchmove\", \"touchcancel\", \"scroll\"];\nvar supports = {};\nfunction _stopPropagationForAgGrid(event) {\n  event[AG_GRID_STOP_PROPAGATION] = true;\n}\nfunction _isStopPropagationForAgGrid(event) {\n  return event[AG_GRID_STOP_PROPAGATION] === true;\n}\nvar _isEventSupported = /* @__PURE__ */ (() => {\n  const tags = {\n    select: \"input\",\n    change: \"input\",\n    submit: \"form\",\n    reset: \"form\",\n    error: \"img\",\n    load: \"img\",\n    abort: \"img\"\n  };\n  const eventChecker = (eventName) => {\n    if (typeof supports[eventName] === \"boolean\") {\n      return supports[eventName];\n    }\n    const el = document.createElement(tags[eventName] || \"div\");\n    eventName = \"on\" + eventName;\n    return supports[eventName] = eventName in el;\n  };\n  return eventChecker;\n})();\nfunction _getCtrlForEventTarget(gos, eventTarget, type) {\n  let sourceElement = eventTarget;\n  while (sourceElement) {\n    const renderedComp = _getDomData(gos, sourceElement, type);\n    if (renderedComp) {\n      return renderedComp;\n    }\n    sourceElement = sourceElement.parentElement;\n  }\n  return null;\n}\nfunction _isElementInEventPath(element, event) {\n  if (!event || !element) {\n    return false;\n  }\n  return _getEventPath(event).indexOf(element) >= 0;\n}\nfunction _createEventPath(event) {\n  const res = [];\n  let pointer = event.target;\n  while (pointer) {\n    res.push(pointer);\n    pointer = pointer.parentElement;\n  }\n  return res;\n}\nfunction _getEventPath(event) {\n  const eventNoType = event;\n  if (eventNoType.path) {\n    return eventNoType.path;\n  }\n  if (eventNoType.composedPath) {\n    return eventNoType.composedPath();\n  }\n  return _createEventPath(eventNoType);\n}\nfunction _addSafePassiveEventListener(frameworkOverrides, eElement, event, listener) {\n  const isPassive = _includes(PASSIVE_EVENTS, event);\n  const options = isPassive ? { passive: true } : void 0;\n  if (frameworkOverrides && frameworkOverrides.addEventListener) {\n    frameworkOverrides.addEventListener(eElement, event, listener, options);\n  }\n}\n\n// community-modules/core/src/context/beanStub.ts\nvar BeanStub = class {\n  constructor() {\n    // not named context to allow children to use 'context' as a variable name\n    this.destroyFunctions = [];\n    this.destroyed = false;\n    // for vue 3 - prevents Vue from trying to make this (and obviously any sub classes) from being reactive\n    // prevents vue from creating proxies for created objects and prevents identity related issues\n    this.__v_skip = true;\n    this.propertyListenerId = 0;\n    // Enable multiple grid properties to be updated together by the user but only trigger shared logic once.\n    // Closely related to logic in ComponentUtil.ts\n    this.lastChangeSetIdLookup = {};\n    this.isAlive = () => !this.destroyed;\n  }\n  preWireBeans(beans) {\n    this.frameworkOverrides = beans.frameworkOverrides;\n    this.stubContext = beans.context;\n    this.eventService = beans.eventService;\n    this.gos = beans.gos;\n    this.localeService = beans.localeService;\n  }\n  // this was a test constructor niall built, when active, it prints after 5 seconds all beans/components that are\n  // not destroyed. to use, create a new grid, then api.destroy() before 5 seconds. then anything that gets printed\n  // points to a bean or component that was not properly disposed of.\n  // constructor() {\n  //     setTimeout(()=> {\n  //         if (this.isAlive()) {\n  //             let prototype: any = Object.getPrototypeOf(this);\n  //             const constructor: any = prototype.constructor;\n  //             const constructorString = constructor.toString();\n  //             const beanName = constructorString.substring(9, constructorString.indexOf(\"(\"));\n  //             console.log('is alive ' + beanName);\n  //         }\n  //     }, 5000);\n  // }\n  // CellComp and GridComp and override this because they get the FrameworkOverrides from the Beans bean\n  getFrameworkOverrides() {\n    return this.frameworkOverrides;\n  }\n  destroy() {\n    for (let i = 0; i < this.destroyFunctions.length; i++) {\n      this.destroyFunctions[i]();\n    }\n    this.destroyFunctions.length = 0;\n    this.destroyed = true;\n    this.dispatchLocalEvent({ type: \"destroyed\" });\n  }\n  // The typing of AgEventListener<any, any, any> is not ideal, but it's the best we can do at the moment to enable\n  // eventService to have the best typing at the expense of BeanStub local events\n  /** Add a local event listener against this BeanStub */\n  addEventListener(eventType, listener, async) {\n    if (!this.localEventService) {\n      this.localEventService = new LocalEventService();\n    }\n    this.localEventService.addEventListener(eventType, listener, async);\n  }\n  /** Remove a local event listener from this BeanStub */\n  removeEventListener(eventType, listener, async) {\n    if (this.localEventService) {\n      this.localEventService.removeEventListener(eventType, listener, async);\n    }\n  }\n  dispatchLocalEvent(event) {\n    if (this.localEventService) {\n      this.localEventService.dispatchEvent(event);\n    }\n  }\n  addManagedElementListeners(object, handlers) {\n    return this._setupListeners(object, handlers);\n  }\n  addManagedEventListeners(handlers) {\n    return this._setupListeners(this.eventService, handlers);\n  }\n  addManagedListeners(object, handlers) {\n    return this._setupListeners(object, handlers);\n  }\n  _setupListeners(object, handlers) {\n    const destroyFuncs = [];\n    for (const k in handlers) {\n      const handler = handlers[k];\n      if (handler) {\n        destroyFuncs.push(this._setupListener(object, k, handler));\n      }\n    }\n    return destroyFuncs;\n  }\n  _setupListener(object, event, listener) {\n    if (this.destroyed) {\n      return () => null;\n    }\n    if (object instanceof HTMLElement) {\n      _addSafePassiveEventListener(this.getFrameworkOverrides(), object, event, listener);\n    } else {\n      object.addEventListener(event, listener);\n    }\n    const destroyFunc = () => {\n      object.removeEventListener(event, listener);\n      return null;\n    };\n    this.destroyFunctions.push(destroyFunc);\n    return () => {\n      destroyFunc();\n      this.destroyFunctions = this.destroyFunctions.filter((fn) => fn !== destroyFunc);\n      return null;\n    };\n  }\n  /**\n   * Setup a managed property listener for the given GridOption property.\n   * However, stores the destroy function in the beanStub so that if this bean\n   * is a component the destroy function will be called when the component is destroyed\n   * as opposed to being cleaned up only when the GridOptionsService is destroyed.\n   */\n  setupGridOptionListener(event, listener) {\n    this.gos.addPropertyEventListener(event, listener);\n    const destroyFunc = () => {\n      this.gos.removePropertyEventListener(event, listener);\n      return null;\n    };\n    this.destroyFunctions.push(destroyFunc);\n    return () => {\n      destroyFunc();\n      this.destroyFunctions = this.destroyFunctions.filter((fn) => fn !== destroyFunc);\n      return null;\n    };\n  }\n  /**\n   * Setup a managed property listener for the given GridOption property.\n   * @param event GridOption property to listen to changes for.\n   * @param listener Listener to run when property value changes\n   */\n  addManagedPropertyListener(event, listener) {\n    if (this.destroyed) {\n      return () => null;\n    }\n    return this.setupGridOptionListener(event, listener);\n  }\n  /**\n   * Setup managed property listeners for the given set of GridOption properties.\n   * The listener will be run if any of the property changes but will only run once if\n   * multiple of the properties change within the same framework lifecycle event.\n   * Works on the basis that GridOptionsService updates all properties *before* any property change events are fired.\n   * @param events Array of GridOption properties to listen for changes too.\n   * @param listener Shared listener to run if any of the properties change\n   */\n  addManagedPropertyListeners(events, listener) {\n    if (this.destroyed) {\n      return;\n    }\n    const eventsKey = events.join(\"-\") + this.propertyListenerId++;\n    const wrappedListener = (event) => {\n      if (event.changeSet) {\n        if (event.changeSet && event.changeSet.id === this.lastChangeSetIdLookup[eventsKey]) {\n          return;\n        }\n        this.lastChangeSetIdLookup[eventsKey] = event.changeSet.id;\n      }\n      const propertiesChangeEvent = {\n        type: \"gridPropertyChanged\",\n        changeSet: event.changeSet,\n        source: event.source\n      };\n      listener(propertiesChangeEvent);\n    };\n    events.forEach((event) => this.setupGridOptionListener(event, wrappedListener));\n  }\n  addDestroyFunc(func) {\n    if (this.isAlive()) {\n      this.destroyFunctions.push(func);\n    } else {\n      func();\n    }\n  }\n  createManagedBean(bean, context) {\n    const res = this.createBean(bean, context);\n    this.addDestroyFunc(this.destroyBean.bind(this, bean, context));\n    return res;\n  }\n  createBean(bean, context, afterPreCreateCallback) {\n    return (context || this.stubContext).createBean(bean, afterPreCreateCallback);\n  }\n  /**\n   * Destroys a bean and returns undefined to support destruction and clean up in a single line.\n   * this.dateComp = this.context.destroyBean(this.dateComp);\n   */\n  destroyBean(bean, context) {\n    return (context || this.stubContext).destroyBean(bean);\n  }\n  /**\n   * Destroys an array of beans and returns an empty array to support destruction and clean up in a single line.\n   * this.dateComps = this.context.destroyBeans(this.dateComps);\n   */\n  destroyBeans(beans, context) {\n    return (context || this.stubContext).destroyBeans(beans);\n  }\n};\n\n// community-modules/core/src/entities/agProvidedColumnGroup.ts\nfunction isProvidedColumnGroup(col) {\n  return col instanceof AgProvidedColumnGroup;\n}\nvar AgProvidedColumnGroup = class extends BeanStub {\n  constructor(colGroupDef, groupId, padding, level) {\n    super();\n    this.isColumn = false;\n    this.expandable = false;\n    // used by React (and possibly other frameworks) as key for rendering. also used to\n    // identify old vs new columns for destroying cols when no longer used.\n    this.instanceId = getNextColInstanceId();\n    this.expandableListenerRemoveCallback = null;\n    this.colGroupDef = colGroupDef;\n    this.groupId = groupId;\n    this.expanded = !!colGroupDef && !!colGroupDef.openByDefault;\n    this.padding = padding;\n    this.level = level;\n  }\n  destroy() {\n    if (this.expandableListenerRemoveCallback) {\n      this.reset(null, void 0);\n    }\n    super.destroy();\n  }\n  reset(colGroupDef, level) {\n    this.colGroupDef = colGroupDef;\n    this.level = level;\n    this.originalParent = null;\n    if (this.expandableListenerRemoveCallback) {\n      this.expandableListenerRemoveCallback();\n    }\n    this.children = void 0;\n    this.expandable = void 0;\n  }\n  getInstanceId() {\n    return this.instanceId;\n  }\n  setOriginalParent(originalParent) {\n    this.originalParent = originalParent;\n  }\n  getOriginalParent() {\n    return this.originalParent;\n  }\n  getLevel() {\n    return this.level;\n  }\n  isVisible() {\n    if (this.children) {\n      return this.children.some((child) => child.isVisible());\n    }\n    return false;\n  }\n  isPadding() {\n    return this.padding;\n  }\n  setExpanded(expanded) {\n    this.expanded = expanded === void 0 ? false : expanded;\n    this.dispatchLocalEvent({ type: \"expandedChanged\" });\n  }\n  isExpandable() {\n    return this.expandable;\n  }\n  isExpanded() {\n    return this.expanded;\n  }\n  getGroupId() {\n    return this.groupId;\n  }\n  getId() {\n    return this.getGroupId();\n  }\n  setChildren(children) {\n    this.children = children;\n  }\n  getChildren() {\n    return this.children;\n  }\n  getColGroupDef() {\n    return this.colGroupDef;\n  }\n  getLeafColumns() {\n    const result = [];\n    this.addLeafColumns(result);\n    return result;\n  }\n  addLeafColumns(leafColumns) {\n    if (!this.children) {\n      return;\n    }\n    this.children.forEach((child) => {\n      if (isColumn(child)) {\n        leafColumns.push(child);\n      } else if (isProvidedColumnGroup(child)) {\n        child.addLeafColumns(leafColumns);\n      }\n    });\n  }\n  getColumnGroupShow() {\n    const colGroupDef = this.colGroupDef;\n    if (!colGroupDef) {\n      return;\n    }\n    return colGroupDef.columnGroupShow;\n  }\n  // need to check that this group has at least one col showing when both expanded and contracted.\n  // if not, then we don't allow expanding and contracting on this group\n  setupExpandable() {\n    this.setExpandable();\n    if (this.expandableListenerRemoveCallback) {\n      this.expandableListenerRemoveCallback();\n    }\n    const listener = this.onColumnVisibilityChanged.bind(this);\n    this.getLeafColumns().forEach((col) => col.addEventListener(\"visibleChanged\", listener));\n    this.expandableListenerRemoveCallback = () => {\n      this.getLeafColumns().forEach((col) => col.removeEventListener(\"visibleChanged\", listener));\n      this.expandableListenerRemoveCallback = null;\n    };\n  }\n  setExpandable() {\n    if (this.isPadding()) {\n      return;\n    }\n    let atLeastOneShowingWhenOpen = false;\n    let atLeastOneShowingWhenClosed = false;\n    let atLeastOneChangeable = false;\n    const children = this.findChildrenRemovingPadding();\n    for (let i = 0, j = children.length; i < j; i++) {\n      const abstractColumn = children[i];\n      if (!abstractColumn.isVisible()) {\n        continue;\n      }\n      const headerGroupShow = abstractColumn.getColumnGroupShow();\n      if (headerGroupShow === \"open\") {\n        atLeastOneShowingWhenOpen = true;\n        atLeastOneChangeable = true;\n      } else if (headerGroupShow === \"closed\") {\n        atLeastOneShowingWhenClosed = true;\n        atLeastOneChangeable = true;\n      } else {\n        atLeastOneShowingWhenOpen = true;\n        atLeastOneShowingWhenClosed = true;\n      }\n    }\n    const expandable = atLeastOneShowingWhenOpen && atLeastOneShowingWhenClosed && atLeastOneChangeable;\n    if (this.expandable !== expandable) {\n      this.expandable = expandable;\n      this.dispatchLocalEvent({ type: \"expandableChanged\" });\n    }\n  }\n  findChildrenRemovingPadding() {\n    const res = [];\n    const process = (items) => {\n      items.forEach((item) => {\n        const skipBecausePadding = isProvidedColumnGroup(item) && item.isPadding();\n        if (skipBecausePadding) {\n          process(item.children);\n        } else {\n          res.push(item);\n        }\n      });\n    };\n    process(this.children);\n    return res;\n  }\n  onColumnVisibilityChanged() {\n    this.setExpandable();\n  }\n};\n\n// community-modules/core/src/columns/controlsColService.ts\nvar CONTROLS_COLUMN_ID_PREFIX = \"ag-Grid-ControlsColumn\";\nvar ControlsColService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"controlsColService\";\n  }\n  isControlsColEnabled() {\n    const { gos } = this;\n    const so = gos.get(\"rowSelection\");\n    if (!so || typeof so !== \"object\") {\n      return false;\n    }\n    const checkboxes = _getCheckboxes(so);\n    const headerCheckbox = _getHeaderCheckbox(so);\n    return !!(checkboxes || headerCheckbox);\n  }\n  createControlsCols() {\n    if (!this.isControlsColEnabled()) {\n      return [];\n    }\n    const { gos } = this;\n    const selectionColumnDef = gos.get(\"selectionColumnDef\");\n    const enableRTL = gos.get(\"enableRtl\");\n    const colDef = {\n      // overridable properties\n      maxWidth: 50,\n      resizable: false,\n      suppressHeaderMenuButton: true,\n      sortable: false,\n      suppressMovable: true,\n      lockPosition: enableRTL ? \"right\" : \"left\",\n      comparator(valueA, valueB, nodeA, nodeB) {\n        const aSelected = nodeA.isSelected();\n        const bSelected = nodeB.isSelected();\n        return aSelected && bSelected ? 0 : aSelected ? 1 : -1;\n      },\n      editable: false,\n      suppressFillHandle: true,\n      // overrides\n      ...selectionColumnDef,\n      // non-overridable properties\n      colId: `${CONTROLS_COLUMN_ID_PREFIX}`\n    };\n    const col = new AgColumn(colDef, null, colDef.colId, false);\n    this.createBean(col);\n    return [col];\n  }\n};\n\n// community-modules/core/src/columns/columnUtils.ts\nvar GROUP_AUTO_COLUMN_ID = \"ag-Grid-AutoColumn\";\nfunction getColumnsFromTree(rootColumns) {\n  const result = [];\n  const recursiveFindColumns = (childColumns) => {\n    for (let i = 0; i < childColumns.length; i++) {\n      const child = childColumns[i];\n      if (isColumn(child)) {\n        result.push(child);\n      } else if (isProvidedColumnGroup(child)) {\n        recursiveFindColumns(child.getChildren());\n      }\n    }\n  };\n  recursiveFindColumns(rootColumns);\n  return result;\n}\nfunction getWidthOfColsInList(columnList) {\n  return columnList.reduce((width, col) => width + col.getActualWidth(), 0);\n}\nfunction destroyColumnTree(context, oldTree, newTree) {\n  const oldObjectsById = {};\n  if (!oldTree) {\n    return;\n  }\n  depthFirstOriginalTreeSearch(null, oldTree, (child) => {\n    oldObjectsById[child.getInstanceId()] = child;\n  });\n  if (newTree) {\n    depthFirstOriginalTreeSearch(null, newTree, (child) => {\n      oldObjectsById[child.getInstanceId()] = null;\n    });\n  }\n  const colsToDestroy = Object.values(oldObjectsById).filter((item) => item != null);\n  context.destroyBeans(colsToDestroy);\n}\nfunction isColumnGroupAutoCol(col) {\n  const colId = col.getId();\n  return colId.startsWith(GROUP_AUTO_COLUMN_ID);\n}\nfunction isColumnControlsCol(col) {\n  return col.getColId().startsWith(CONTROLS_COLUMN_ID_PREFIX);\n}\nfunction convertColumnTypes(type) {\n  let typeKeys = [];\n  if (type instanceof Array) {\n    const invalidArray = type.some((a) => typeof a !== \"string\");\n    if (invalidArray) {\n      _warnOnce(\"if colDef.type is supplied an array it should be of type 'string[]'\");\n    } else {\n      typeKeys = type;\n    }\n  } else if (typeof type === \"string\") {\n    typeKeys = type.split(\",\");\n  } else {\n    _warnOnce(\"colDef.type should be of type 'string' | 'string[]'\");\n  }\n  return typeKeys;\n}\n\n// community-modules/core/src/misc/frameworkEventListenerService.ts\nvar FrameworkEventListenerService = class {\n  constructor(frameworkOverrides) {\n    this.frameworkOverrides = frameworkOverrides;\n    // Map from user listener to wrapped listener so we can remove listener provided by user\n    this.wrappedListeners = /* @__PURE__ */ new Map();\n    this.wrappedGlobalListeners = /* @__PURE__ */ new Map();\n  }\n  wrap(eventType, userListener) {\n    const { frameworkOverrides, wrappedListeners } = this;\n    let listener = userListener;\n    if (frameworkOverrides.shouldWrapOutgoing) {\n      listener = (event) => {\n        frameworkOverrides.wrapOutgoing(() => userListener(event));\n      };\n      let eventListeners = wrappedListeners.get(eventType);\n      if (!eventListeners) {\n        eventListeners = /* @__PURE__ */ new Map();\n        wrappedListeners.set(eventType, eventListeners);\n      }\n      eventListeners.set(userListener, listener);\n    }\n    return listener;\n  }\n  wrapGlobal(userListener) {\n    const { frameworkOverrides, wrappedGlobalListeners } = this;\n    let listener = userListener;\n    if (frameworkOverrides.shouldWrapOutgoing) {\n      listener = (eventType, event) => {\n        frameworkOverrides.wrapOutgoing(() => userListener(eventType, event));\n      };\n      wrappedGlobalListeners.set(userListener, listener);\n    }\n    return listener;\n  }\n  unwrap(eventType, userListener) {\n    const { wrappedListeners } = this;\n    const eventListeners = wrappedListeners.get(eventType);\n    if (eventListeners) {\n      const wrapped = eventListeners.get(userListener);\n      if (wrapped) {\n        eventListeners.delete(userListener);\n        if (eventListeners.size === 0) {\n          wrappedListeners.delete(eventType);\n        }\n        return wrapped;\n      }\n    }\n    return userListener;\n  }\n  unwrapGlobal(userListener) {\n    const { wrappedGlobalListeners } = this;\n    const wrapped = wrappedGlobalListeners.get(userListener);\n    if (wrapped) {\n      wrappedGlobalListeners.delete(userListener);\n      return wrapped;\n    }\n    return userListener;\n  }\n};\n\n// community-modules/core/src/utils/object.ts\nvar SKIP_JS_BUILTINS = /* @__PURE__ */ new Set([\"__proto__\", \"constructor\", \"prototype\"]);\nfunction _iterateObject(object, callback) {\n  if (object == null) {\n    return;\n  }\n  if (Array.isArray(object)) {\n    for (let i = 0; i < object.length; i++) {\n      callback(i.toString(), object[i]);\n    }\n    return;\n  }\n  for (const [key, value] of Object.entries(object)) {\n    if (SKIP_JS_BUILTINS.has(key)) {\n      continue;\n    }\n    callback(key, value);\n  }\n}\nfunction _cloneObject(object) {\n  const copy = {};\n  const keys = Object.keys(object);\n  for (let i = 0; i < keys.length; i++) {\n    if (SKIP_JS_BUILTINS.has(keys[i])) {\n      continue;\n    }\n    const key = keys[i];\n    const value = object[key];\n    copy[key] = value;\n  }\n  return copy;\n}\nfunction _deepCloneDefinition(object, keysToSkip) {\n  if (!object) {\n    return;\n  }\n  const obj = object;\n  const res = {};\n  Object.keys(obj).forEach((key) => {\n    if (keysToSkip && keysToSkip.indexOf(key) >= 0 || SKIP_JS_BUILTINS.has(key)) {\n      return;\n    }\n    const value = obj[key];\n    const sourceIsSimpleObject = _isNonNullObject(value) && value.constructor === Object;\n    if (sourceIsSimpleObject) {\n      res[key] = _deepCloneDefinition(value);\n    } else {\n      res[key] = value;\n    }\n  });\n  return res;\n}\nfunction _getAllValuesInObject(obj) {\n  if (!obj) {\n    return [];\n  }\n  const anyObject = Object;\n  if (typeof anyObject.values === \"function\") {\n    return anyObject.values(obj);\n  }\n  const ret = [];\n  for (const key in obj) {\n    if (obj.hasOwnProperty(key) && obj.propertyIsEnumerable(key)) {\n      ret.push(obj[key]);\n    }\n  }\n  return ret;\n}\nfunction _mergeDeep(dest, source, copyUndefined = true, makeCopyOfSimpleObjects = false) {\n  if (!_exists(source)) {\n    return;\n  }\n  _iterateObject(source, (key, sourceValue) => {\n    if (SKIP_JS_BUILTINS.has(key)) {\n      return;\n    }\n    let destValue = dest[key];\n    if (destValue === sourceValue) {\n      return;\n    }\n    if (makeCopyOfSimpleObjects) {\n      const objectIsDueToBeCopied = destValue == null && sourceValue != null;\n      if (objectIsDueToBeCopied) {\n        const sourceIsSimpleObject = typeof sourceValue === \"object\" && sourceValue.constructor === Object;\n        const dontCopy = sourceIsSimpleObject;\n        if (dontCopy) {\n          destValue = {};\n          dest[key] = destValue;\n        }\n      }\n    }\n    if (_isNonNullObject(sourceValue) && _isNonNullObject(destValue) && !Array.isArray(destValue)) {\n      _mergeDeep(destValue, sourceValue, copyUndefined, makeCopyOfSimpleObjects);\n    } else if (copyUndefined || sourceValue !== void 0) {\n      dest[key] = sourceValue;\n    }\n  });\n}\nfunction _getValueUsingField(data, field, fieldContainsDots) {\n  if (!field || !data) {\n    return;\n  }\n  if (!fieldContainsDots) {\n    return data[field];\n  }\n  const fields = field.split(\".\");\n  let currentObject = data;\n  for (let i = 0; i < fields.length; i++) {\n    if (currentObject == null) {\n      return void 0;\n    }\n    currentObject = currentObject[fields[i]];\n  }\n  return currentObject;\n}\nfunction _isNonNullObject(value) {\n  return typeof value === \"object\" && value !== null;\n}\n\n// community-modules/core/src/entities/agColumn.ts\nvar COL_DEF_DEFAULTS = {\n  resizable: true,\n  sortable: true\n};\nvar instanceIdSequence = 0;\nfunction getNextColInstanceId() {\n  return instanceIdSequence++;\n}\nfunction isColumn(col) {\n  return col instanceof AgColumn;\n}\nvar AgColumn = class extends BeanStub {\n  constructor(colDef, userProvidedColDef, colId, primary) {\n    super();\n    this.isColumn = true;\n    // used by React (and possibly other frameworks) as key for rendering. also used to\n    // identify old vs new columns for destroying cols when no longer used.\n    this.instanceId = getNextColInstanceId();\n    // The measured height of this column's header when autoHeaderHeight is enabled\n    this.autoHeaderHeight = null;\n    this.moving = false;\n    this.menuVisible = false;\n    this.lastLeftPinned = false;\n    this.firstRightPinned = false;\n    this.filterActive = false;\n    this.columnEventService = new LocalEventService();\n    this.tooltipEnabled = false;\n    this.rowGroupActive = false;\n    this.pivotActive = false;\n    this.aggregationActive = false;\n    this.colDef = colDef;\n    this.userProvidedColDef = userProvidedColDef;\n    this.colId = colId;\n    this.primary = primary;\n    this.setState(colDef);\n  }\n  wireBeans(beans) {\n    this.columnHoverService = beans.columnHoverService;\n  }\n  getInstanceId() {\n    return this.instanceId;\n  }\n  setState(colDef) {\n    if (colDef.sort !== void 0) {\n      if (colDef.sort === \"asc\" || colDef.sort === \"desc\") {\n        this.sort = colDef.sort;\n      }\n    } else {\n      if (colDef.initialSort === \"asc\" || colDef.initialSort === \"desc\") {\n        this.sort = colDef.initialSort;\n      }\n    }\n    const sortIndex = colDef.sortIndex;\n    const initialSortIndex = colDef.initialSortIndex;\n    if (sortIndex !== void 0) {\n      if (sortIndex !== null) {\n        this.sortIndex = sortIndex;\n      }\n    } else {\n      if (initialSortIndex !== null) {\n        this.sortIndex = initialSortIndex;\n      }\n    }\n    const hide = colDef.hide;\n    const initialHide = colDef.initialHide;\n    if (hide !== void 0) {\n      this.visible = !hide;\n    } else {\n      this.visible = !initialHide;\n    }\n    if (colDef.pinned !== void 0) {\n      this.setPinned(colDef.pinned);\n    } else {\n      this.setPinned(colDef.initialPinned);\n    }\n    const flex = colDef.flex;\n    const initialFlex = colDef.initialFlex;\n    if (flex !== void 0) {\n      this.flex = flex;\n    } else if (initialFlex !== void 0) {\n      this.flex = initialFlex;\n    }\n  }\n  // gets called when user provides an alternative colDef, eg\n  setColDef(colDef, userProvidedColDef, source) {\n    this.colDef = colDef;\n    this.userProvidedColDef = userProvidedColDef;\n    this.initMinAndMaxWidths();\n    this.initDotNotation();\n    this.initTooltip();\n    this.columnEventService.dispatchEvent(this.createColumnEvent(\"colDefChanged\", source));\n  }\n  getUserProvidedColDef() {\n    return this.userProvidedColDef;\n  }\n  setParent(parent) {\n    this.parent = parent;\n  }\n  getParent() {\n    return this.parent;\n  }\n  setOriginalParent(originalParent) {\n    this.originalParent = originalParent;\n  }\n  getOriginalParent() {\n    return this.originalParent;\n  }\n  // this is done after constructor as it uses gridOptionsService\n  postConstruct() {\n    this.initMinAndMaxWidths();\n    this.resetActualWidth(\"gridInitializing\");\n    this.initDotNotation();\n    this.initTooltip();\n  }\n  initDotNotation() {\n    const suppressDotNotation = this.gos.get(\"suppressFieldDotNotation\");\n    this.fieldContainsDots = _exists(this.colDef.field) && this.colDef.field.indexOf(\".\") >= 0 && !suppressDotNotation;\n    this.tooltipFieldContainsDots = _exists(this.colDef.tooltipField) && this.colDef.tooltipField.indexOf(\".\") >= 0 && !suppressDotNotation;\n  }\n  initMinAndMaxWidths() {\n    const colDef = this.colDef;\n    this.minWidth = colDef.minWidth ?? this.gos.environment.getDefaultColumnMinWidth();\n    this.maxWidth = colDef.maxWidth ?? Number.MAX_SAFE_INTEGER;\n  }\n  initTooltip() {\n    this.tooltipEnabled = _exists(this.colDef.tooltipField) || _exists(this.colDef.tooltipValueGetter) || _exists(this.colDef.tooltipComponent);\n  }\n  resetActualWidth(source) {\n    const initialWidth = this.calculateColInitialWidth(this.colDef);\n    this.setActualWidth(initialWidth, source, true);\n  }\n  calculateColInitialWidth(colDef) {\n    let width;\n    const colDefWidth = _attrToNumber(colDef.width);\n    const colDefInitialWidth = _attrToNumber(colDef.initialWidth);\n    if (colDefWidth != null) {\n      width = colDefWidth;\n    } else if (colDefInitialWidth != null) {\n      width = colDefInitialWidth;\n    } else {\n      width = 200;\n    }\n    return Math.max(Math.min(width, this.maxWidth), this.minWidth);\n  }\n  isEmptyGroup() {\n    return false;\n  }\n  isRowGroupDisplayed(colId) {\n    if (_missing(this.colDef) || _missing(this.colDef.showRowGroup)) {\n      return false;\n    }\n    const showingAllGroups = this.colDef.showRowGroup === true;\n    const showingThisGroup = this.colDef.showRowGroup === colId;\n    return showingAllGroups || showingThisGroup;\n  }\n  isPrimary() {\n    return this.primary;\n  }\n  isFilterAllowed() {\n    const filterDefined = !!this.colDef.filter;\n    return filterDefined;\n  }\n  isFieldContainsDots() {\n    return this.fieldContainsDots;\n  }\n  isTooltipEnabled() {\n    return this.tooltipEnabled;\n  }\n  isTooltipFieldContainsDots() {\n    return this.tooltipFieldContainsDots;\n  }\n  getHighlighted() {\n    return this.highlighted;\n  }\n  addEventListener(eventType, userListener) {\n    if (this.frameworkOverrides.shouldWrapOutgoing && !this.frameworkEventListenerService) {\n      this.columnEventService.setFrameworkOverrides(this.frameworkOverrides);\n      this.frameworkEventListenerService = new FrameworkEventListenerService(this.frameworkOverrides);\n    }\n    const listener = this.frameworkEventListenerService?.wrap(eventType, userListener) ?? userListener;\n    this.columnEventService.addEventListener(eventType, listener);\n  }\n  removeEventListener(eventType, userListener) {\n    const listener = this.frameworkEventListenerService?.unwrap(eventType, userListener) ?? userListener;\n    this.columnEventService.removeEventListener(eventType, listener);\n  }\n  createColumnFunctionCallbackParams(rowNode) {\n    return this.gos.addGridCommonParams({\n      node: rowNode,\n      data: rowNode.data,\n      column: this,\n      colDef: this.colDef\n    });\n  }\n  isSuppressNavigable(rowNode) {\n    if (typeof this.colDef.suppressNavigable === \"boolean\") {\n      return this.colDef.suppressNavigable;\n    }\n    if (typeof this.colDef.suppressNavigable === \"function\") {\n      const params = this.createColumnFunctionCallbackParams(rowNode);\n      const userFunc = this.colDef.suppressNavigable;\n      return userFunc(params);\n    }\n    return false;\n  }\n  isCellEditable(rowNode) {\n    if (rowNode.group) {\n      if (this.gos.get(\"treeData\")) {\n        if (!rowNode.data && !this.gos.get(\"enableGroupEdit\")) {\n          return false;\n        }\n      } else {\n        if (!this.gos.get(\"enableGroupEdit\")) {\n          return false;\n        }\n      }\n    }\n    return this.isColumnFunc(rowNode, this.colDef.editable);\n  }\n  isSuppressFillHandle() {\n    return !!this.colDef.suppressFillHandle;\n  }\n  isAutoHeight() {\n    return !!this.colDef.autoHeight;\n  }\n  isAutoHeaderHeight() {\n    return !!this.colDef.autoHeaderHeight;\n  }\n  isRowDrag(rowNode) {\n    return this.isColumnFunc(rowNode, this.colDef.rowDrag);\n  }\n  isDndSource(rowNode) {\n    return this.isColumnFunc(rowNode, this.colDef.dndSource);\n  }\n  isCellCheckboxSelection(rowNode) {\n    const so = this.gos.get(\"rowSelection\");\n    if (so && typeof so !== \"string\") {\n      const checkbox = isColumnControlsCol(this) && _getCheckboxes(so);\n      return this.isColumnFunc(rowNode, checkbox);\n    } else {\n      return this.isColumnFunc(rowNode, this.colDef.checkboxSelection);\n    }\n  }\n  isSuppressPaste(rowNode) {\n    return this.isColumnFunc(rowNode, this.colDef ? this.colDef.suppressPaste : null);\n  }\n  isResizable() {\n    return !!this.getColDefValue(\"resizable\");\n  }\n  /** Get value from ColDef or default if it exists. */\n  getColDefValue(key) {\n    return this.colDef[key] ?? COL_DEF_DEFAULTS[key];\n  }\n  isColumnFunc(rowNode, value) {\n    if (typeof value === \"boolean\") {\n      return value;\n    }\n    if (typeof value === \"function\") {\n      const params = this.createColumnFunctionCallbackParams(rowNode);\n      const editableFunc = value;\n      return editableFunc(params);\n    }\n    return false;\n  }\n  setHighlighted(highlighted) {\n    if (this.highlighted === highlighted) {\n      return;\n    }\n    this.highlighted = highlighted;\n    this.columnEventService.dispatchEvent(this.createColumnEvent(\"headerHighlightChanged\", \"uiColumnMoved\"));\n  }\n  setMoving(moving, source) {\n    this.moving = moving;\n    this.columnEventService.dispatchEvent(this.createColumnEvent(\"movingChanged\", source));\n  }\n  createColumnEvent(type, source) {\n    return this.gos.addGridCommonParams({\n      type,\n      column: this,\n      columns: [this],\n      source\n    });\n  }\n  isMoving() {\n    return this.moving;\n  }\n  getSort() {\n    return this.sort;\n  }\n  setSort(sort, source) {\n    if (this.sort !== sort) {\n      this.sort = sort;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"sortChanged\", source));\n    }\n    this.dispatchStateUpdatedEvent(\"sort\");\n  }\n  isSortable() {\n    return !!this.getColDefValue(\"sortable\");\n  }\n  /** @deprecated v32 use col.getSort() === 'asc */\n  isSortAscending() {\n    return this.sort === \"asc\";\n  }\n  /** @deprecated v32 use col.getSort() === 'desc */\n  isSortDescending() {\n    return this.sort === \"desc\";\n  }\n  /** @deprecated v32 use col.getSort() === undefined */\n  isSortNone() {\n    return _missing(this.sort);\n  }\n  /** @deprecated v32 use col.getSort() !== undefined */\n  isSorting() {\n    return _exists(this.sort);\n  }\n  getSortIndex() {\n    return this.sortIndex;\n  }\n  setSortIndex(sortOrder) {\n    this.sortIndex = sortOrder;\n    this.dispatchStateUpdatedEvent(\"sortIndex\");\n  }\n  setMenuVisible(visible, source) {\n    if (this.menuVisible !== visible) {\n      this.menuVisible = visible;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"menuVisibleChanged\", source));\n    }\n  }\n  isMenuVisible() {\n    return this.menuVisible;\n  }\n  setAggFunc(aggFunc) {\n    this.aggFunc = aggFunc;\n    this.dispatchStateUpdatedEvent(\"aggFunc\");\n  }\n  getAggFunc() {\n    return this.aggFunc;\n  }\n  getLeft() {\n    return this.left;\n  }\n  getOldLeft() {\n    return this.oldLeft;\n  }\n  getRight() {\n    return this.left + this.actualWidth;\n  }\n  setLeft(left, source) {\n    this.oldLeft = this.left;\n    if (this.left !== left) {\n      this.left = left;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"leftChanged\", source));\n    }\n  }\n  isFilterActive() {\n    return this.filterActive;\n  }\n  // additionalEventAttributes is used by provided simple floating filter, so it can add 'floatingFilter=true' to the event\n  setFilterActive(active, source, additionalEventAttributes) {\n    if (this.filterActive !== active) {\n      this.filterActive = active;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"filterActiveChanged\", source));\n    }\n    const filterChangedEvent = this.createColumnEvent(\"filterChanged\", source);\n    if (additionalEventAttributes) {\n      _mergeDeep(filterChangedEvent, additionalEventAttributes);\n    }\n    this.columnEventService.dispatchEvent(filterChangedEvent);\n  }\n  isHovered() {\n    return this.columnHoverService.isHovered(this);\n  }\n  setPinned(pinned) {\n    if (pinned === true || pinned === \"left\") {\n      this.pinned = \"left\";\n    } else if (pinned === \"right\") {\n      this.pinned = \"right\";\n    } else {\n      this.pinned = null;\n    }\n    this.dispatchStateUpdatedEvent(\"pinned\");\n  }\n  setFirstRightPinned(firstRightPinned, source) {\n    if (this.firstRightPinned !== firstRightPinned) {\n      this.firstRightPinned = firstRightPinned;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"firstRightPinnedChanged\", source));\n    }\n  }\n  setLastLeftPinned(lastLeftPinned, source) {\n    if (this.lastLeftPinned !== lastLeftPinned) {\n      this.lastLeftPinned = lastLeftPinned;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"lastLeftPinnedChanged\", source));\n    }\n  }\n  isFirstRightPinned() {\n    return this.firstRightPinned;\n  }\n  isLastLeftPinned() {\n    return this.lastLeftPinned;\n  }\n  isPinned() {\n    return this.pinned === \"left\" || this.pinned === \"right\";\n  }\n  isPinnedLeft() {\n    return this.pinned === \"left\";\n  }\n  isPinnedRight() {\n    return this.pinned === \"right\";\n  }\n  getPinned() {\n    return this.pinned;\n  }\n  setVisible(visible, source) {\n    const newValue = visible === true;\n    if (this.visible !== newValue) {\n      this.visible = newValue;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"visibleChanged\", source));\n    }\n    this.dispatchStateUpdatedEvent(\"hide\");\n  }\n  isVisible() {\n    return this.visible;\n  }\n  isSpanHeaderHeight() {\n    const colDef = this.getColDef();\n    return !colDef.suppressSpanHeaderHeight;\n  }\n  getColumnGroupPaddingInfo() {\n    let parent = this.getParent();\n    if (!parent || !parent.isPadding()) {\n      return { numberOfParents: 0, isSpanningTotal: false };\n    }\n    const numberOfParents = parent.getPaddingLevel() + 1;\n    let isSpanningTotal = true;\n    while (parent) {\n      if (!parent.isPadding()) {\n        isSpanningTotal = false;\n        break;\n      }\n      parent = parent.getParent();\n    }\n    return { numberOfParents, isSpanningTotal };\n  }\n  getColDef() {\n    return this.colDef;\n  }\n  getDefinition() {\n    return this.colDef;\n  }\n  getColumnGroupShow() {\n    return this.colDef.columnGroupShow;\n  }\n  getColId() {\n    return this.colId;\n  }\n  getId() {\n    return this.colId;\n  }\n  getUniqueId() {\n    return this.colId;\n  }\n  getActualWidth() {\n    return this.actualWidth;\n  }\n  getAutoHeaderHeight() {\n    return this.autoHeaderHeight;\n  }\n  /** Returns true if the header height has changed */\n  setAutoHeaderHeight(height) {\n    const changed = height !== this.autoHeaderHeight;\n    this.autoHeaderHeight = height;\n    return changed;\n  }\n  createBaseColDefParams(rowNode) {\n    const params = this.gos.addGridCommonParams({\n      node: rowNode,\n      data: rowNode.data,\n      colDef: this.colDef,\n      column: this\n    });\n    return params;\n  }\n  getColSpan(rowNode) {\n    if (_missing(this.colDef.colSpan)) {\n      return 1;\n    }\n    const params = this.createBaseColDefParams(rowNode);\n    const colSpan = this.colDef.colSpan(params);\n    return Math.max(colSpan, 1);\n  }\n  getRowSpan(rowNode) {\n    if (_missing(this.colDef.rowSpan)) {\n      return 1;\n    }\n    const params = this.createBaseColDefParams(rowNode);\n    const rowSpan = this.colDef.rowSpan(params);\n    return Math.max(rowSpan, 1);\n  }\n  setActualWidth(actualWidth, source, silent = false) {\n    actualWidth = Math.max(actualWidth, this.minWidth);\n    actualWidth = Math.min(actualWidth, this.maxWidth);\n    if (this.actualWidth !== actualWidth) {\n      this.actualWidth = actualWidth;\n      if (this.flex && source !== \"flex\" && source !== \"gridInitializing\") {\n        this.flex = null;\n      }\n      if (!silent) {\n        this.fireColumnWidthChangedEvent(source);\n      }\n    }\n    this.dispatchStateUpdatedEvent(\"width\");\n  }\n  fireColumnWidthChangedEvent(source) {\n    this.columnEventService.dispatchEvent(this.createColumnEvent(\"widthChanged\", source));\n  }\n  isGreaterThanMax(width) {\n    return width > this.maxWidth;\n  }\n  getMinWidth() {\n    return this.minWidth;\n  }\n  getMaxWidth() {\n    return this.maxWidth;\n  }\n  getFlex() {\n    return this.flex || 0;\n  }\n  // this method should only be used by the columnModel to\n  // change flex when required by the applyColumnState method.\n  setFlex(flex) {\n    if (this.flex !== flex) {\n      this.flex = flex;\n    }\n    this.dispatchStateUpdatedEvent(\"flex\");\n  }\n  setMinimum(source) {\n    this.setActualWidth(this.minWidth, source);\n  }\n  setRowGroupActive(rowGroup, source) {\n    if (this.rowGroupActive !== rowGroup) {\n      this.rowGroupActive = rowGroup;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"columnRowGroupChanged\", source));\n    }\n    this.dispatchStateUpdatedEvent(\"rowGroup\");\n  }\n  isRowGroupActive() {\n    return this.rowGroupActive;\n  }\n  setPivotActive(pivot, source) {\n    if (this.pivotActive !== pivot) {\n      this.pivotActive = pivot;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"columnPivotChanged\", source));\n    }\n    this.dispatchStateUpdatedEvent(\"pivot\");\n  }\n  isPivotActive() {\n    return this.pivotActive;\n  }\n  isAnyFunctionActive() {\n    return this.isPivotActive() || this.isRowGroupActive() || this.isValueActive();\n  }\n  isAnyFunctionAllowed() {\n    return this.isAllowPivot() || this.isAllowRowGroup() || this.isAllowValue();\n  }\n  setValueActive(value, source) {\n    if (this.aggregationActive !== value) {\n      this.aggregationActive = value;\n      this.columnEventService.dispatchEvent(this.createColumnEvent(\"columnValueChanged\", source));\n    }\n  }\n  isValueActive() {\n    return this.aggregationActive;\n  }\n  isAllowPivot() {\n    return this.colDef.enablePivot === true;\n  }\n  isAllowValue() {\n    return this.colDef.enableValue === true;\n  }\n  isAllowRowGroup() {\n    return this.colDef.enableRowGroup === true;\n  }\n  dispatchStateUpdatedEvent(key) {\n    this.columnEventService.dispatchEvent({\n      type: \"columnStateUpdated\",\n      key\n    });\n  }\n};\n\n// community-modules/core/src/entities/defaultColumnTypes.ts\nvar DefaultColumnTypes = {\n  numericColumn: {\n    headerClass: \"ag-right-aligned-header\",\n    cellClass: \"ag-right-aligned-cell\"\n  },\n  rightAligned: {\n    headerClass: \"ag-right-aligned-header\",\n    cellClass: \"ag-right-aligned-cell\"\n  }\n};\n\n// community-modules/core/src/columns/columnKeyCreator.ts\nvar ColumnKeyCreator = class {\n  constructor() {\n    this.existingKeys = {};\n  }\n  addExistingKeys(keys) {\n    for (let i = 0; i < keys.length; i++) {\n      this.existingKeys[keys[i]] = true;\n    }\n  }\n  getUniqueKey(colId, colField) {\n    colId = _toStringOrNull(colId);\n    let count = 0;\n    while (true) {\n      let idToTry;\n      if (colId) {\n        idToTry = colId;\n        if (count !== 0) {\n          idToTry += \"_\" + count;\n        }\n      } else if (colField) {\n        idToTry = colField;\n        if (count !== 0) {\n          idToTry += \"_\" + count;\n        }\n      } else {\n        idToTry = count;\n      }\n      if (!this.existingKeys[idToTry]) {\n        this.existingKeys[idToTry] = true;\n        return String(idToTry);\n      }\n      count++;\n    }\n  }\n};\n\n// community-modules/core/src/columns/columnFactory.ts\nvar ColumnFactory = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnFactory\";\n  }\n  wireBeans(beans) {\n    this.dataTypeService = beans.dataTypeService;\n  }\n  createColumnTree(defs, primaryColumns, existingTree, source) {\n    const columnKeyCreator = new ColumnKeyCreator();\n    const { existingCols, existingGroups, existingColKeys } = this.extractExistingTreeData(existingTree);\n    columnKeyCreator.addExistingKeys(existingColKeys);\n    const unbalancedTree = this.recursivelyCreateColumns(\n      defs,\n      0,\n      primaryColumns,\n      existingCols,\n      columnKeyCreator,\n      existingGroups,\n      source\n    );\n    const treeDept = this.findMaxDept(unbalancedTree, 0);\n    const columnTree = this.balanceColumnTree(unbalancedTree, 0, treeDept, columnKeyCreator);\n    const deptFirstCallback = (child, parent) => {\n      if (isProvidedColumnGroup(child)) {\n        child.setupExpandable();\n      }\n      child.setOriginalParent(parent);\n    };\n    depthFirstOriginalTreeSearch(null, columnTree, deptFirstCallback);\n    return {\n      columnTree,\n      treeDept\n    };\n  }\n  extractExistingTreeData(existingTree) {\n    const existingCols = [];\n    const existingGroups = [];\n    const existingColKeys = [];\n    if (existingTree) {\n      depthFirstOriginalTreeSearch(null, existingTree, (item) => {\n        if (isProvidedColumnGroup(item)) {\n          const group = item;\n          existingGroups.push(group);\n        } else {\n          const col = item;\n          existingColKeys.push(col.getId());\n          existingCols.push(col);\n        }\n      });\n    }\n    return { existingCols, existingGroups, existingColKeys };\n  }\n  /**\n   * Inserts dummy group columns in the hierarchy above auto-generated columns\n   * in order to ensure auto-generated columns are leaf nodes (and therefore are\n   * displayed correctly)\n   */\n  balanceTreeForAutoCols(autoCols, liveTree) {\n    const tree = [];\n    const dept = this.findDepth(liveTree);\n    autoCols.forEach((col) => {\n      let nextChild = col;\n      for (let i = dept - 1; i >= 0; i--) {\n        const autoGroup = new AgProvidedColumnGroup(null, `FAKE_PATH_${col.getId()}}_${i}`, true, i);\n        this.createBean(autoGroup);\n        autoGroup.setChildren([nextChild]);\n        nextChild.setOriginalParent(autoGroup);\n        nextChild = autoGroup;\n      }\n      if (dept === 0) {\n        col.setOriginalParent(null);\n      }\n      tree.push(nextChild);\n    });\n    return [tree, dept];\n  }\n  findDepth(balancedColumnTree) {\n    let dept = 0;\n    let pointer = balancedColumnTree;\n    while (pointer && pointer[0] && isProvidedColumnGroup(pointer[0])) {\n      dept++;\n      pointer = pointer[0].getChildren();\n    }\n    return dept;\n  }\n  balanceColumnTree(unbalancedTree, currentDept, columnDept, columnKeyCreator) {\n    const result = [];\n    for (let i = 0; i < unbalancedTree.length; i++) {\n      const child = unbalancedTree[i];\n      if (isProvidedColumnGroup(child)) {\n        const originalGroup = child;\n        const newChildren = this.balanceColumnTree(\n          originalGroup.getChildren(),\n          currentDept + 1,\n          columnDept,\n          columnKeyCreator\n        );\n        originalGroup.setChildren(newChildren);\n        result.push(originalGroup);\n      } else {\n        let firstPaddedGroup;\n        let currentPaddedGroup;\n        for (let j = columnDept - 1; j >= currentDept; j--) {\n          const newColId = columnKeyCreator.getUniqueKey(null, null);\n          const colGroupDefMerged = this.createMergedColGroupDef(null);\n          const paddedGroup = new AgProvidedColumnGroup(colGroupDefMerged, newColId, true, currentDept);\n          this.createBean(paddedGroup);\n          if (currentPaddedGroup) {\n            currentPaddedGroup.setChildren([paddedGroup]);\n          }\n          currentPaddedGroup = paddedGroup;\n          if (!firstPaddedGroup) {\n            firstPaddedGroup = currentPaddedGroup;\n          }\n        }\n        if (firstPaddedGroup && currentPaddedGroup) {\n          result.push(firstPaddedGroup);\n          const hasGroups = unbalancedTree.some((leaf) => isProvidedColumnGroup(leaf));\n          if (hasGroups) {\n            currentPaddedGroup.setChildren([child]);\n            continue;\n          } else {\n            currentPaddedGroup.setChildren(unbalancedTree);\n            break;\n          }\n        }\n        result.push(child);\n      }\n    }\n    return result;\n  }\n  findMaxDept(treeChildren, dept) {\n    let maxDeptThisLevel = dept;\n    for (let i = 0; i < treeChildren.length; i++) {\n      const abstractColumn = treeChildren[i];\n      if (isProvidedColumnGroup(abstractColumn)) {\n        const originalGroup = abstractColumn;\n        const newDept = this.findMaxDept(originalGroup.getChildren(), dept + 1);\n        if (maxDeptThisLevel < newDept) {\n          maxDeptThisLevel = newDept;\n        }\n      }\n    }\n    return maxDeptThisLevel;\n  }\n  recursivelyCreateColumns(defs, level, primaryColumns, existingColsCopy, columnKeyCreator, existingGroups, source) {\n    if (!defs)\n      return [];\n    const result = new Array(defs.length);\n    for (let i = 0; i < result.length; i++) {\n      const def = defs[i];\n      if (this.isColumnGroup(def)) {\n        result[i] = this.createColumnGroup(\n          primaryColumns,\n          def,\n          level,\n          existingColsCopy,\n          columnKeyCreator,\n          existingGroups,\n          source\n        );\n      } else {\n        result[i] = this.createColumn(\n          primaryColumns,\n          def,\n          existingColsCopy,\n          columnKeyCreator,\n          source\n        );\n      }\n    }\n    return result;\n  }\n  createColumnGroup(primaryColumns, colGroupDef, level, existingColumns, columnKeyCreator, existingGroups, source) {\n    const colGroupDefMerged = this.createMergedColGroupDef(colGroupDef);\n    const groupId = columnKeyCreator.getUniqueKey(colGroupDefMerged.groupId || null, null);\n    const providedGroup = new AgProvidedColumnGroup(colGroupDefMerged, groupId, false, level);\n    this.createBean(providedGroup);\n    const existingGroupAndIndex = this.findExistingGroup(colGroupDef, existingGroups);\n    if (existingGroupAndIndex) {\n      existingGroups.splice(existingGroupAndIndex.idx, 1);\n    }\n    const existingGroup = existingGroupAndIndex?.group;\n    if (existingGroup) {\n      providedGroup.setExpanded(existingGroup.isExpanded());\n    }\n    const children = this.recursivelyCreateColumns(\n      colGroupDefMerged.children,\n      level + 1,\n      primaryColumns,\n      existingColumns,\n      columnKeyCreator,\n      existingGroups,\n      source\n    );\n    providedGroup.setChildren(children);\n    return providedGroup;\n  }\n  createMergedColGroupDef(colGroupDef) {\n    const colGroupDefMerged = {};\n    Object.assign(colGroupDefMerged, this.gos.get(\"defaultColGroupDef\"));\n    Object.assign(colGroupDefMerged, colGroupDef);\n    return colGroupDefMerged;\n  }\n  createColumn(primaryColumns, colDef, existingColsCopy, columnKeyCreator, source) {\n    const existingColAndIndex = this.findExistingColumn(colDef, existingColsCopy);\n    if (existingColAndIndex) {\n      existingColsCopy?.splice(existingColAndIndex.idx, 1);\n    }\n    let column = existingColAndIndex?.column;\n    if (!column) {\n      const colId = columnKeyCreator.getUniqueKey(colDef.colId, colDef.field);\n      const colDefMerged = this.addColumnDefaultAndTypes(colDef, colId);\n      column = new AgColumn(colDefMerged, colDef, colId, primaryColumns);\n      this.createBean(column);\n    } else {\n      const colDefMerged = this.addColumnDefaultAndTypes(colDef, column.getColId());\n      column.setColDef(colDefMerged, colDef, source);\n      this.applyColumnState(column, colDefMerged, source);\n    }\n    this.dataTypeService?.addColumnListeners(column);\n    return column;\n  }\n  applyColumnState(column, colDef, source) {\n    const flex = _attrToNumber(colDef.flex);\n    if (flex !== void 0) {\n      column.setFlex(flex);\n    }\n    const noFlexThisCol = column.getFlex() <= 0;\n    if (noFlexThisCol) {\n      const width = _attrToNumber(colDef.width);\n      if (width != null) {\n        column.setActualWidth(width, source);\n      } else {\n        const widthBeforeUpdate = column.getActualWidth();\n        column.setActualWidth(widthBeforeUpdate, source);\n      }\n    }\n    if (colDef.sort !== void 0) {\n      if (colDef.sort == \"asc\" || colDef.sort == \"desc\") {\n        column.setSort(colDef.sort, source);\n      } else {\n        column.setSort(void 0, source);\n      }\n    }\n    const sortIndex = _attrToNumber(colDef.sortIndex);\n    if (sortIndex !== void 0) {\n      column.setSortIndex(sortIndex);\n    }\n    const hide = _attrToBoolean(colDef.hide);\n    if (hide !== void 0) {\n      column.setVisible(!hide, source);\n    }\n    if (colDef.pinned !== void 0) {\n      column.setPinned(colDef.pinned);\n    }\n  }\n  findExistingColumn(newColDef, existingColsCopy) {\n    if (!existingColsCopy)\n      return void 0;\n    for (let i = 0; i < existingColsCopy.length; i++) {\n      const def = existingColsCopy[i].getUserProvidedColDef();\n      if (!def)\n        continue;\n      const newHasId = newColDef.colId != null;\n      if (newHasId) {\n        if (existingColsCopy[i].getId() === newColDef.colId) {\n          return { idx: i, column: existingColsCopy[i] };\n        }\n        continue;\n      }\n      const newHasField = newColDef.field != null;\n      if (newHasField) {\n        if (def.field === newColDef.field) {\n          return { idx: i, column: existingColsCopy[i] };\n        }\n        continue;\n      }\n      if (def === newColDef) {\n        return { idx: i, column: existingColsCopy[i] };\n      }\n    }\n    return void 0;\n  }\n  findExistingGroup(newGroupDef, existingGroups) {\n    const newHasId = newGroupDef.groupId != null;\n    if (!newHasId) {\n      return void 0;\n    }\n    for (let i = 0; i < existingGroups.length; i++) {\n      const existingGroup = existingGroups[i];\n      const existingDef = existingGroup.getColGroupDef();\n      if (!existingDef) {\n        continue;\n      }\n      if (existingGroup.getId() === newGroupDef.groupId) {\n        return { idx: i, group: existingGroup };\n      }\n    }\n    return void 0;\n  }\n  addColumnDefaultAndTypes(colDef, colId) {\n    const res = {};\n    const defaultColDef = this.gos.get(\"defaultColDef\");\n    _mergeDeep(res, defaultColDef, false, true);\n    const columnType = this.updateColDefAndGetColumnType(res, colDef, colId);\n    if (columnType) {\n      this.assignColumnTypes(columnType, res);\n    }\n    _mergeDeep(res, colDef, false, true);\n    const autoGroupColDef = this.gos.get(\"autoGroupColumnDef\");\n    const isSortingCoupled = _isColumnsSortingCoupledToGroup(this.gos);\n    if (colDef.rowGroup && autoGroupColDef && isSortingCoupled) {\n      _mergeDeep(\n        res,\n        { sort: autoGroupColDef.sort, initialSort: autoGroupColDef.initialSort },\n        false,\n        true\n      );\n    }\n    this.dataTypeService?.validateColDef(res);\n    return res;\n  }\n  updateColDefAndGetColumnType(colDef, userColDef, colId) {\n    const dataTypeDefinitionColumnType = this.dataTypeService?.updateColDefAndGetColumnType(\n      colDef,\n      userColDef,\n      colId\n    );\n    const columnTypes = userColDef.type ?? dataTypeDefinitionColumnType ?? colDef.type;\n    colDef.type = columnTypes;\n    return columnTypes ? convertColumnTypes(columnTypes) : void 0;\n  }\n  assignColumnTypes(typeKeys, colDefMerged) {\n    if (!typeKeys.length) {\n      return;\n    }\n    const allColumnTypes = Object.assign({}, DefaultColumnTypes);\n    const userTypes = this.gos.get(\"columnTypes\") || {};\n    _iterateObject(userTypes, (key, value) => {\n      if (key in allColumnTypes) {\n        _warnOnce(`the column type '${key}' is a default column type and cannot be overridden.`);\n      } else {\n        const colType = value;\n        if (colType.type) {\n          _warnOnce(\n            `Column type definitions 'columnTypes' with a 'type' attribute are not supported because a column type cannot refer to another column type. Only column definitions 'columnDefs' can use the 'type' attribute to refer to a column type.`\n          );\n        }\n        allColumnTypes[key] = value;\n      }\n    });\n    typeKeys.forEach((t) => {\n      const typeColDef = allColumnTypes[t.trim()];\n      if (typeColDef) {\n        _mergeDeep(colDefMerged, typeColDef, false, true);\n      } else {\n        _warnOnce(\"colDef.type '\" + t + \"' does not correspond to defined gridOptions.columnTypes\");\n      }\n    });\n  }\n  // if object has children, we assume it's a group\n  isColumnGroup(abstractColDef) {\n    return abstractColDef.children !== void 0;\n  }\n};\nfunction depthFirstOriginalTreeSearch(parent, tree, callback) {\n  if (!tree) {\n    return;\n  }\n  for (let i = 0; i < tree.length; i++) {\n    const child = tree[i];\n    if (isProvidedColumnGroup(child)) {\n      depthFirstOriginalTreeSearch(child, child.getChildren(), callback);\n    }\n    callback(child, parent);\n  }\n}\n\n// community-modules/core/src/columns/columnModel.ts\nvar ColumnModel = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnModel\";\n    // if pivotMode is on, however pivot results are NOT shown if no pivot columns are set\n    this.pivotMode = false;\n    this.autoHeightActiveAtLeastOnce = false;\n    this.ready = false;\n    this.changeEventsDispatching = false;\n    // when we're waiting for cell data types to be inferred, we need to defer column resizing\n    this.shouldQueueResizeOperations = false;\n    this.resizeOperationQueue = [];\n  }\n  wireBeans(beans) {\n    this.context = beans.context;\n    this.ctrlsService = beans.ctrlsService;\n    this.columnFactory = beans.columnFactory;\n    this.columnSizeService = beans.columnSizeService;\n    this.visibleColsService = beans.visibleColsService;\n    this.columnViewportService = beans.columnViewportService;\n    this.pivotResultColsService = beans.pivotResultColsService;\n    this.columnAnimationService = beans.columnAnimationService;\n    this.autoColService = beans.autoColService;\n    this.controlsColService = beans.controlsColService;\n    this.valueCache = beans.valueCache;\n    this.columnDefFactory = beans.columnDefFactory;\n    this.columnApplyStateService = beans.columnApplyStateService;\n    this.columnGroupStateService = beans.columnGroupStateService;\n    this.eventDispatcher = beans.columnEventDispatcher;\n    this.columnMoveService = beans.columnMoveService;\n    this.columnAutosizeService = beans.columnAutosizeService;\n    this.funcColsService = beans.funcColsService;\n    this.quickFilterService = beans.quickFilterService;\n    this.showRowGroupColsService = beans.showRowGroupColsService;\n    this.environment = beans.environment;\n  }\n  postConstruct() {\n    const pivotMode = this.gos.get(\"pivotMode\");\n    if (this.isPivotSettingAllowed(pivotMode)) {\n      this.pivotMode = pivotMode;\n    }\n    this.addManagedPropertyListeners(\n      [\"groupDisplayType\", \"treeData\", \"treeDataDisplayType\", \"groupHideOpenParents\"],\n      (event) => this.refreshAll(convertSourceType(event.source))\n    );\n    this.addManagedPropertyListener(\"rowSelection\", (event) => {\n      this.onSelectionOptionsChanged(event.currentValue, event.previousValue, convertSourceType(event.source));\n    });\n    this.addManagedPropertyListener(\n      \"autoGroupColumnDef\",\n      (event) => this.onAutoGroupColumnDefChanged(convertSourceType(event.source))\n    );\n    this.addManagedPropertyListeners(\n      [\"defaultColDef\", \"defaultColGroupDef\", \"columnTypes\", \"suppressFieldDotNotation\"],\n      (event) => this.recreateColumnDefs(convertSourceType(event.source))\n    );\n    this.addManagedPropertyListener(\n      \"pivotMode\",\n      (event) => this.setPivotMode(this.gos.get(\"pivotMode\"), convertSourceType(event.source))\n    );\n    this.addManagedEventListeners({ firstDataRendered: () => this.onFirstDataRendered() });\n  }\n  // called from SyncService, when grid has finished initialising\n  createColsFromColDefs(source) {\n    const dispatchEventsFunc = this.colDefs ? this.columnApplyStateService.compareColumnStatesAndDispatchEvents(source) : void 0;\n    this.valueCache.expire();\n    const oldCols = this.colDefCols?.list;\n    const oldTree = this.colDefCols?.tree;\n    const newTree = this.columnFactory.createColumnTree(this.colDefs, true, oldTree, source);\n    destroyColumnTree(this.context, this.colDefCols?.tree, newTree.columnTree);\n    const tree = newTree.columnTree;\n    const treeDepth = newTree.treeDept;\n    const list = getColumnsFromTree(tree);\n    const map = {};\n    list.forEach((col) => map[col.getId()] = col);\n    this.colDefCols = { tree, treeDepth, list, map };\n    this.funcColsService.extractCols(source, oldCols);\n    this.ready = true;\n    this.refreshCols(true);\n    this.visibleColsService.refresh(source);\n    this.columnViewportService.checkViewportColumns();\n    this.eventDispatcher.everythingChanged(source);\n    if (dispatchEventsFunc) {\n      this.changeEventsDispatching = true;\n      dispatchEventsFunc();\n      this.changeEventsDispatching = false;\n    }\n    this.eventDispatcher.newColumnsLoaded(source);\n    if (source === \"gridInitializing\") {\n      this.columnSizeService.applyAutosizeStrategy();\n    }\n  }\n  // called from: buildAutoGroupColumns (events 'groupDisplayType', 'treeData', 'treeDataDisplayType', 'groupHideOpenParents')\n  // createColsFromColDefs (recreateColumnDefs, setColumnsDefs),\n  // setPivotMode, applyColumnState,\n  // functionColsService.setPrimaryColList, functionColsService.updatePrimaryColList,\n  // pivotResultColsService.setPivotResultCols\n  refreshCols(newColDefs) {\n    if (!this.colDefCols) {\n      return;\n    }\n    const prevColTree = this.cols?.tree;\n    this.saveColOrder();\n    this.selectCols();\n    this.createAutoCols();\n    this.addAutoCols();\n    this.createControlsCols();\n    this.addControlsCols();\n    const shouldSortNewColDefs = _shouldMaintainColumnOrder(this.gos, this.showingPivotResult);\n    if (!newColDefs || shouldSortNewColDefs) {\n      this.restoreColOrder();\n    }\n    this.positionLockedCols();\n    this.showRowGroupColsService?.refresh();\n    this.quickFilterService?.refreshQuickFilterCols();\n    this.setColSpanActive();\n    this.setAutoHeightActive();\n    this.visibleColsService.clear();\n    this.columnViewportService.clear();\n    const dispatchChangedEvent = !_areEqual(prevColTree, this.cols.tree);\n    if (dispatchChangedEvent) {\n      this.eventDispatcher.gridColumns();\n    }\n  }\n  selectCols() {\n    const pivotResultCols = this.pivotResultColsService.getPivotResultCols();\n    this.showingPivotResult = pivotResultCols != null;\n    if (pivotResultCols) {\n      const { map, list, tree, treeDepth } = pivotResultCols;\n      this.cols = {\n        list: list.slice(),\n        map: { ...map },\n        tree: tree.slice(),\n        treeDepth\n      };\n      const hasSameColumns = pivotResultCols.list.some((col) => this.cols?.map[col.getColId()] !== void 0);\n      if (!hasSameColumns) {\n        this.lastPivotOrder = null;\n      }\n    } else {\n      const { map, list, tree, treeDepth } = this.colDefCols;\n      this.cols = {\n        list: list.slice(),\n        map: { ...map },\n        tree: tree.slice(),\n        treeDepth\n      };\n    }\n  }\n  getColsToShow() {\n    const showAutoGroupAndValuesOnly = this.isPivotMode() && !this.isShowingPivotResult();\n    const valueColumns = this.funcColsService.getValueColumns();\n    const showSelectionCol = this.controlsColService?.isControlsColEnabled();\n    const res = this.cols.list.filter((col) => {\n      const isAutoGroupCol = isColumnGroupAutoCol(col);\n      if (showAutoGroupAndValuesOnly) {\n        const isValueCol = valueColumns && _includes(valueColumns, col);\n        return isAutoGroupCol || isValueCol || showSelectionCol && isColumnControlsCol(col);\n      } else {\n        return isAutoGroupCol || col.isVisible();\n      }\n    });\n    return res;\n  }\n  addAutoCols() {\n    if (this.autoCols == null) {\n      return;\n    }\n    this.cols.list = this.autoCols.list.concat(this.cols.list);\n    this.cols.tree = this.autoCols.tree.concat(this.cols.tree);\n    updateColsMap(this.cols);\n  }\n  createAutoCols() {\n    const groupFullWidthRow = _isGroupUseEntireRow(this.gos, this.pivotMode);\n    const suppressAutoColumn = this.pivotMode ? this.gos.get(\"pivotSuppressAutoColumn\") : this.isSuppressAutoCol();\n    const rowGroupCols = this.funcColsService.getRowGroupColumns();\n    const groupingActive = rowGroupCols.length > 0 || this.gos.get(\"treeData\");\n    const noAutoCols = !groupingActive || suppressAutoColumn || groupFullWidthRow;\n    const destroyPrevious = () => {\n      if (this.autoCols) {\n        destroyColumnTree(this.context, this.autoCols.tree);\n        this.autoCols = null;\n      }\n    };\n    if (noAutoCols || !this.autoColService) {\n      destroyPrevious();\n      return;\n    }\n    const list = this.autoColService.createAutoCols(rowGroupCols) ?? [];\n    const autoColsSame = areColIdsEqual(list, this.autoCols?.list || null);\n    const newTreeDepth = this.cols.treeDepth;\n    const oldTreeDepth = this.autoCols ? this.autoCols.treeDepth : -1;\n    const treeDeptSame = oldTreeDepth == newTreeDepth;\n    if (autoColsSame && treeDeptSame) {\n      return;\n    }\n    destroyPrevious();\n    const [tree, treeDepth] = this.columnFactory.balanceTreeForAutoCols(list, this.cols.tree);\n    this.autoCols = {\n      list,\n      tree,\n      treeDepth,\n      map: {}\n    };\n    const putAutocolsFirstInList = (cols) => {\n      if (!cols) {\n        return null;\n      }\n      const colsFiltered = cols.filter((col) => !isColumnGroupAutoCol(col));\n      return [...list, ...colsFiltered];\n    };\n    this.lastOrder = putAutocolsFirstInList(this.lastOrder);\n    this.lastPivotOrder = putAutocolsFirstInList(this.lastPivotOrder);\n  }\n  createControlsCols() {\n    const destroyCollection = () => {\n      destroyColumnTree(this.context, this.controlsCols?.tree);\n      this.controlsCols = null;\n    };\n    if (!this.controlsColService) {\n      destroyCollection();\n    }\n    const newTreeDepth = this.cols.treeDepth;\n    const oldTreeDepth = this.controlsCols?.treeDepth ?? -1;\n    const treeDeptSame = oldTreeDepth == newTreeDepth;\n    const list = this.controlsColService?.createControlsCols() ?? [];\n    const areSame = areColIdsEqual(list, this.controlsCols?.list ?? []);\n    if (areSame && treeDeptSame) {\n      return;\n    }\n    destroyCollection();\n    const [tree, treeDepth] = this.columnFactory.balanceTreeForAutoCols(list, this.cols.tree);\n    this.controlsCols = {\n      list,\n      tree,\n      treeDepth,\n      map: {}\n    };\n    const putControlscolsFirstInList = (cols) => {\n      if (!cols) {\n        return null;\n      }\n      const colsFiltered = cols.filter((col) => !isColumnControlsCol(col));\n      return [...list, ...colsFiltered];\n    };\n    this.lastOrder = putControlscolsFirstInList(this.lastOrder);\n    this.lastPivotOrder = putControlscolsFirstInList(this.lastPivotOrder);\n  }\n  addControlsCols() {\n    if (this.controlsCols == null) {\n      return;\n    }\n    this.cols.list = this.controlsCols.list.concat(this.cols.list);\n    this.cols.tree = this.controlsCols.tree.concat(this.cols.tree);\n    updateColsMap(this.cols);\n  }\n  // on events 'groupDisplayType', 'treeData', 'treeDataDisplayType', 'groupHideOpenParents'\n  refreshAll(source) {\n    if (!this.isReady()) {\n      return;\n    }\n    this.refreshCols(false);\n    this.visibleColsService.refresh(source);\n  }\n  setColsVisible(keys, visible = false, source) {\n    this.columnApplyStateService.applyColumnState(\n      {\n        state: keys.map((key) => ({\n          colId: typeof key === \"string\" ? key : key.getColId(),\n          hide: !visible\n        }))\n      },\n      source\n    );\n  }\n  setColsPinned(keys, pinned, source) {\n    if (!this.cols) {\n      return;\n    }\n    if (_missingOrEmpty(keys)) {\n      return;\n    }\n    if (_isDomLayout(this.gos, \"print\")) {\n      _warnOnce(`Changing the column pinning status is not allowed with domLayout='print'`);\n      return;\n    }\n    this.columnAnimationService.start();\n    let actualPinned;\n    if (pinned === true || pinned === \"left\") {\n      actualPinned = \"left\";\n    } else if (pinned === \"right\") {\n      actualPinned = \"right\";\n    } else {\n      actualPinned = null;\n    }\n    const updatedCols = [];\n    keys.forEach((key) => {\n      if (!key) {\n        return;\n      }\n      const column = this.getCol(key);\n      if (!column) {\n        return;\n      }\n      if (column.getPinned() !== actualPinned) {\n        column.setPinned(actualPinned);\n        updatedCols.push(column);\n      }\n    });\n    if (updatedCols.length) {\n      this.visibleColsService.refresh(source);\n      this.eventDispatcher.columnPinned(updatedCols, source);\n    }\n    this.columnAnimationService.finish();\n  }\n  // called by headerRenderer - when a header is opened or closed\n  setColumnGroupOpened(key, newValue, source) {\n    let keyAsString;\n    if (isProvidedColumnGroup(key)) {\n      keyAsString = key.getId();\n    } else {\n      keyAsString = key || \"\";\n    }\n    this.columnGroupStateService.setColumnGroupState([{ groupId: keyAsString, open: newValue }], source);\n  }\n  getProvidedColGroup(key) {\n    let res = null;\n    depthFirstOriginalTreeSearch(null, this.cols?.tree, (node) => {\n      if (isProvidedColumnGroup(node)) {\n        if (node.getId() === key) {\n          res = node;\n        }\n      }\n    });\n    return res;\n  }\n  isColGroupLocked(column) {\n    const groupLockGroupColumns = this.gos.get(\"groupLockGroupColumns\");\n    if (!column.isRowGroupActive() || groupLockGroupColumns === 0) {\n      return false;\n    }\n    if (groupLockGroupColumns === -1) {\n      return true;\n    }\n    const rowGroupCols = this.funcColsService.getRowGroupColumns();\n    const colIndex = rowGroupCols.findIndex((groupCol) => groupCol.getColId() === column.getColId());\n    return groupLockGroupColumns > colIndex;\n  }\n  isSuppressAutoCol() {\n    const groupDisplayType = this.gos.get(\"groupDisplayType\");\n    const isCustomRowGroups = groupDisplayType === \"custom\";\n    if (isCustomRowGroups) {\n      return true;\n    }\n    const treeDataDisplayType = this.gos.get(\"treeDataDisplayType\");\n    return treeDataDisplayType === \"custom\";\n  }\n  setAutoHeightActive() {\n    this.autoHeightActive = this.cols.list.some((col) => col.isVisible() && col.isAutoHeight());\n    if (this.autoHeightActive) {\n      this.autoHeightActiveAtLeastOnce = true;\n      const supportedRowModel = _isClientSideRowModel(this.gos) || _isServerSideRowModel(this.gos);\n      if (!supportedRowModel) {\n        _warnOnce(\"autoHeight columns only work with Client Side Row Model and Server Side Row Model.\");\n      }\n    }\n  }\n  restoreColOrder() {\n    const lastOrder = this.showingPivotResult ? this.lastPivotOrder : this.lastOrder;\n    if (!lastOrder) {\n      return;\n    }\n    const lastOrderMapped = new Map(lastOrder.map((col, index) => [col, index]));\n    const noColsFound = !this.cols.list.some((col) => lastOrderMapped.has(col));\n    if (noColsFound) {\n      return;\n    }\n    const colsMap = new Map(this.cols.list.map((col) => [col, true]));\n    const lastOrderFiltered = lastOrder.filter((col) => colsMap.has(col));\n    const lastOrderFilteredMap = new Map(lastOrderFiltered.map((col) => [col, true]));\n    const missingFromLastOrder = this.cols.list.filter((col) => !lastOrderFilteredMap.has(col));\n    const res = lastOrderFiltered.slice();\n    missingFromLastOrder.forEach((newCol) => {\n      let parent = newCol.getOriginalParent();\n      if (!parent) {\n        res.push(newCol);\n        return;\n      }\n      const siblings = [];\n      while (!siblings.length && parent) {\n        const leafCols = parent.getLeafColumns();\n        leafCols.forEach((leafCol) => {\n          const presentInNewCols = res.indexOf(leafCol) >= 0;\n          const notYetInSiblings = siblings.indexOf(leafCol) < 0;\n          if (presentInNewCols && notYetInSiblings) {\n            siblings.push(leafCol);\n          }\n        });\n        parent = parent.getOriginalParent();\n      }\n      if (!siblings.length) {\n        res.push(newCol);\n        return;\n      }\n      const indexes = siblings.map((col) => res.indexOf(col));\n      const lastIndex = Math.max(...indexes);\n      _insertIntoArray(res, newCol, lastIndex + 1);\n    });\n    this.cols.list = res;\n  }\n  sortColsLikeKeys(colIds) {\n    if (this.cols == null) {\n      return;\n    }\n    let newOrder = [];\n    const processedColIds = {};\n    colIds.forEach((colId) => {\n      if (processedColIds[colId]) {\n        return;\n      }\n      const col = this.cols.map[colId];\n      if (col) {\n        newOrder.push(col);\n        processedColIds[colId] = true;\n      }\n    });\n    let autoGroupInsertIndex = 0;\n    this.cols.list.forEach((col) => {\n      const colId = col.getColId();\n      const alreadyProcessed = processedColIds[colId] != null;\n      if (alreadyProcessed) {\n        return;\n      }\n      const isAutoGroupCol = colId.startsWith(GROUP_AUTO_COLUMN_ID);\n      if (isAutoGroupCol) {\n        _insertIntoArray(newOrder, col, autoGroupInsertIndex++);\n      } else {\n        newOrder.push(col);\n      }\n    });\n    newOrder = this.columnMoveService.placeLockedColumns(newOrder);\n    if (!this.columnMoveService.doesMovePassMarryChildren(newOrder)) {\n      _warnOnce(\n        \"Applying column order broke a group where columns should be married together. Applying new order has been discarded.\"\n      );\n      return;\n    }\n    this.cols.list = newOrder;\n  }\n  // returns the provided cols sorted in same order as they appear in this.cols, eg if this.cols\n  // contains [a,b,c,d,e] and col passed is [e,a] then the passed cols are sorted into [a,e]\n  sortColsLikeCols(cols) {\n    if (!cols || cols.length <= 1) {\n      return;\n    }\n    const notAllColsPresent = cols.filter((c) => this.cols.list.indexOf(c) < 0).length > 0;\n    if (notAllColsPresent) {\n      return;\n    }\n    cols.sort((a, b) => {\n      const indexA = this.cols.list.indexOf(a);\n      const indexB = this.cols.list.indexOf(b);\n      return indexA - indexB;\n    });\n  }\n  resetColDefIntoCol(column, source) {\n    const userColDef = column.getUserProvidedColDef();\n    if (!userColDef) {\n      return false;\n    }\n    const newColDef = this.columnFactory.addColumnDefaultAndTypes(userColDef, column.getColId());\n    column.setColDef(newColDef, userColDef, source);\n    return true;\n  }\n  queueResizeOperations() {\n    this.shouldQueueResizeOperations = true;\n  }\n  isShouldQueueResizeOperations() {\n    return this.shouldQueueResizeOperations;\n  }\n  processResizeOperations() {\n    this.shouldQueueResizeOperations = false;\n    this.resizeOperationQueue.forEach((resizeOperation) => resizeOperation());\n    this.resizeOperationQueue = [];\n  }\n  pushResizeOperation(func) {\n    this.resizeOperationQueue.push(func);\n  }\n  moveInCols(movedColumns, toIndex, source) {\n    _moveInArray(this.cols?.list, movedColumns, toIndex);\n    this.visibleColsService.refresh(source);\n  }\n  positionLockedCols() {\n    this.cols.list = this.columnMoveService.placeLockedColumns(this.cols.list);\n  }\n  saveColOrder() {\n    if (this.showingPivotResult) {\n      this.lastPivotOrder = this.cols?.list;\n    } else {\n      this.lastOrder = this.cols?.list;\n    }\n  }\n  getColumnDefs() {\n    if (!this.colDefCols) {\n      return;\n    }\n    const cols = this.colDefCols.list.slice();\n    if (this.showingPivotResult) {\n      cols.sort((a, b) => this.lastOrder.indexOf(a) - this.lastOrder.indexOf(b));\n    } else if (this.lastOrder) {\n      cols.sort((a, b) => this.cols.list.indexOf(a) - this.cols.list.indexOf(b));\n    }\n    const rowGroupColumns = this.funcColsService.getRowGroupColumns();\n    const pivotColumns = this.funcColsService.getPivotColumns();\n    return this.columnDefFactory.buildColumnDefs(cols, rowGroupColumns, pivotColumns);\n  }\n  isShowingPivotResult() {\n    return this.showingPivotResult;\n  }\n  // called by clientSideRowModel.refreshModel\n  isChangeEventsDispatching() {\n    return this.changeEventsDispatching;\n  }\n  isColSpanActive() {\n    return this.colSpanActive;\n  }\n  // used by Column Tool Panel\n  isProvidedColGroupsPresent() {\n    return this.colDefCols?.treeDepth > 0;\n  }\n  setColSpanActive() {\n    this.colSpanActive = this.cols.list.some((col) => col.getColDef().colSpan != null);\n  }\n  isAutoRowHeightActive() {\n    return this.autoHeightActive;\n  }\n  wasAutoRowHeightEverActive() {\n    return this.autoHeightActiveAtLeastOnce;\n  }\n  // + gridPanel -> for resizing the body and setting top margin\n  getHeaderRowCount() {\n    return this.cols ? this.cols.treeDepth + 1 : -1;\n  }\n  isReady() {\n    return this.ready;\n  }\n  isPivotMode() {\n    return this.pivotMode;\n  }\n  setPivotMode(pivotMode, source) {\n    if (pivotMode === this.pivotMode || !this.isPivotSettingAllowed(this.pivotMode)) {\n      return;\n    }\n    this.pivotMode = pivotMode;\n    if (!this.ready) {\n      return;\n    }\n    this.refreshCols(false);\n    this.visibleColsService.refresh(source);\n    this.eventDispatcher.pivotModeChanged();\n  }\n  isPivotSettingAllowed(pivot) {\n    if (pivot && this.gos.get(\"treeData\")) {\n      _warnOnce(\"Pivot mode not available with treeData.\");\n      return false;\n    }\n    return true;\n  }\n  // + clientSideRowModel\n  isPivotActive() {\n    const pivotColumns = this.funcColsService.getPivotColumns();\n    return this.pivotMode && !_missingOrEmpty(pivotColumns);\n  }\n  // called when dataTypes change\n  recreateColumnDefs(source) {\n    if (!this.cols) {\n      return;\n    }\n    if (this.autoCols) {\n      this.autoColService.updateAutoCols(this.autoCols.list, source);\n    }\n    this.createColsFromColDefs(source);\n  }\n  setColumnDefs(columnDefs, source) {\n    this.colDefs = columnDefs;\n    this.createColsFromColDefs(source);\n  }\n  destroy() {\n    destroyColumnTree(this.context, this.colDefCols?.tree);\n    destroyColumnTree(this.context, this.autoCols?.tree);\n    destroyColumnTree(this.context, this.controlsCols?.tree);\n    super.destroy();\n  }\n  getColTree() {\n    return this.cols.tree;\n  }\n  // + columnSelectPanel\n  getColDefColTree() {\n    return this.colDefCols.tree;\n  }\n  // + clientSideRowController -> sorting, building quick filter text\n  // + headerRenderer -> sorting (clearing icon)\n  getColDefCols() {\n    return this.colDefCols?.list ? this.colDefCols.list : null;\n  }\n  // + moveColumnController\n  getCols() {\n    return this.cols?.list ?? [];\n  }\n  // returns colDefCols, pivotResultCols and autoCols\n  getAllCols() {\n    const pivotResultCols = this.pivotResultColsService.getPivotResultCols();\n    const pivotResultColsList = pivotResultCols?.list;\n    return [\n      this.colDefCols?.list ?? [],\n      this.autoCols?.list ?? [],\n      this.controlsCols?.list ?? [],\n      pivotResultColsList ?? []\n    ].flat();\n  }\n  getColsForKeys(keys) {\n    if (!keys) {\n      return [];\n    }\n    return keys.map((key) => this.getCol(key)).filter((col) => col != null);\n  }\n  getColDefCol(key) {\n    if (!this.colDefCols?.list) {\n      return null;\n    }\n    return this.getColFromCollection(key, this.colDefCols);\n  }\n  getCol(key) {\n    if (key == null) {\n      return null;\n    }\n    return this.getColFromCollection(key, this.cols);\n  }\n  getColFromCollection(key, cols) {\n    if (cols == null) {\n      return null;\n    }\n    const { map, list } = cols;\n    if (typeof key == \"string\" && map[key]) {\n      return map[key];\n    }\n    for (let i = 0; i < list.length; i++) {\n      if (columnsMatch(list[i], key)) {\n        return list[i];\n      }\n    }\n    return this.getAutoCol(key);\n  }\n  getAutoCol(key) {\n    return this.autoCols?.list.find((groupCol) => columnsMatch(groupCol, key)) ?? null;\n  }\n  getAutoCols() {\n    return this.autoCols?.list ?? null;\n  }\n  setColHeaderHeight(col, height) {\n    const changed = col.setAutoHeaderHeight(height);\n    if (changed) {\n      if (col.isColumn) {\n        this.eventDispatcher.headerHeight(col);\n      } else {\n        this.eventDispatcher.groupHeaderHeight(col);\n      }\n    }\n  }\n  getGroupRowsHeight() {\n    const heights = [];\n    const headerRowContainerCtrls = this.ctrlsService.getHeaderRowContainerCtrls();\n    for (const headerRowContainerCtrl of headerRowContainerCtrls) {\n      if (!headerRowContainerCtrl) {\n        continue;\n      }\n      const groupRowCount = headerRowContainerCtrl.getGroupRowCount() || 0;\n      for (let i = 0; i < groupRowCount; i++) {\n        const headerRowCtrl = headerRowContainerCtrl.getGroupRowCtrlAtIndex(i);\n        const currentHeightAtPos = heights[i];\n        if (headerRowCtrl) {\n          const newHeight = this.getColumnGroupHeaderRowHeight(headerRowCtrl);\n          if (currentHeightAtPos == null || newHeight > currentHeightAtPos) {\n            heights[i] = newHeight;\n          }\n        }\n      }\n    }\n    return heights;\n  }\n  getColumnGroupHeaderRowHeight(headerRowCtrl) {\n    const defaultHeight = this.isPivotMode() ? this.getPivotGroupHeaderHeight() : this.getGroupHeaderHeight();\n    let displayedHeights = 0;\n    const headerRowCellCtrls = headerRowCtrl.getHeaderCtrls();\n    for (const headerCellCtrl of headerRowCellCtrls) {\n      const column = headerCellCtrl.getColumn();\n      if (column.isAutoHeaderHeight()) {\n        const height = column.getAutoHeaderHeight();\n        if (height != null && height > displayedHeights) {\n          displayedHeights = height;\n        }\n      }\n    }\n    return Math.max(defaultHeight, displayedHeights);\n  }\n  getColumnHeaderRowHeight() {\n    const defaultHeight = this.isPivotMode() ? this.getPivotHeaderHeight() : this.getHeaderHeight();\n    const allDisplayedCols = this.visibleColsService.getAllCols();\n    const displayedHeights = allDisplayedCols.filter((col) => col.isAutoHeaderHeight()).map((col) => col.getAutoHeaderHeight() || 0);\n    return Math.max(defaultHeight, ...displayedHeights);\n  }\n  getHeaderHeight() {\n    return this.gos.get(\"headerHeight\") ?? this.environment.getDefaultHeaderHeight();\n  }\n  getFloatingFiltersHeight() {\n    return this.gos.get(\"floatingFiltersHeight\") ?? this.getHeaderHeight();\n  }\n  getGroupHeaderHeight() {\n    return this.gos.get(\"groupHeaderHeight\") ?? this.getHeaderHeight();\n  }\n  getPivotHeaderHeight() {\n    return this.gos.get(\"pivotHeaderHeight\") ?? this.getHeaderHeight();\n  }\n  getPivotGroupHeaderHeight() {\n    return this.gos.get(\"pivotGroupHeaderHeight\") ?? this.getGroupHeaderHeight();\n  }\n  onFirstDataRendered() {\n    const autoSizeStrategy = this.gos.get(\"autoSizeStrategy\");\n    if (autoSizeStrategy?.type !== \"fitCellContents\") {\n      return;\n    }\n    const { colIds: columns, skipHeader } = autoSizeStrategy;\n    setTimeout(() => {\n      if (columns) {\n        this.columnAutosizeService.autoSizeCols({\n          colKeys: columns,\n          skipHeader,\n          source: \"autosizeColumns\"\n        });\n      } else {\n        this.columnAutosizeService.autoSizeAllColumns(\"autosizeColumns\", skipHeader);\n      }\n    });\n  }\n  onAutoGroupColumnDefChanged(source) {\n    if (this.autoCols) {\n      this.autoColService.updateAutoCols(this.autoCols.list, source);\n    }\n  }\n  onSelectionOptionsChanged(current, prev, source) {\n    const prevCheckbox = prev && typeof prev !== \"string\" ? _getCheckboxes(prev) : void 0;\n    const currCheckbox = current && typeof current !== \"string\" ? _getCheckboxes(current) : void 0;\n    const checkboxHasChanged = prevCheckbox !== currCheckbox;\n    const prevHeaderCheckbox = prev && typeof prev !== \"string\" ? _getHeaderCheckbox(prev) : void 0;\n    const currHeaderCheckbox = current && typeof current !== \"string\" ? _getHeaderCheckbox(current) : void 0;\n    const headerCheckboxHasChanged = prevHeaderCheckbox !== currHeaderCheckbox;\n    if (checkboxHasChanged || headerCheckboxHasChanged) {\n      this.refreshAll(source);\n    }\n  }\n};\nfunction convertSourceType(source) {\n  return source === \"gridOptionsUpdated\" ? \"gridOptionsChanged\" : source;\n}\nfunction updateColsMap(cols) {\n  cols.map = {};\n  cols.list.forEach((col) => cols.map[col.getId()] = col);\n}\nfunction columnsMatch(column, key) {\n  const columnMatches = column === key;\n  const colDefMatches = column.getColDef() === key;\n  const idMatches = column.getColId() == key;\n  return columnMatches || colDefMatches || idMatches;\n}\nfunction areColIdsEqual(colsA, colsB) {\n  return _areEqual(colsA, colsB, (a, b) => a.getColId() === b.getColId());\n}\n\n// community-modules/core/src/columns/columnAutosizeService.ts\nvar ColumnAutosizeService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnAutosizeService\";\n    this.timesDelayed = 0;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.animationFrameService = beans.animationFrameService;\n    this.autoWidthCalculator = beans.autoWidthCalculator;\n    this.eventDispatcher = beans.columnEventDispatcher;\n    this.ctrlsService = beans.ctrlsService;\n    this.renderStatusService = beans.renderStatusService;\n  }\n  autoSizeCols(params) {\n    if (this.columnModel.isShouldQueueResizeOperations()) {\n      this.columnModel.pushResizeOperation(() => this.autoSizeCols(params));\n      return;\n    }\n    const { colKeys, skipHeader, skipHeaderGroups, stopAtGroup, source = \"api\" } = params;\n    this.animationFrameService.flushAllFrames();\n    if (this.timesDelayed < 5 && this.renderStatusService && !this.renderStatusService.areHeaderCellsRendered()) {\n      this.timesDelayed++;\n      setTimeout(() => this.autoSizeCols(params));\n      return;\n    }\n    this.timesDelayed = 0;\n    const columnsAutosized = [];\n    let changesThisTimeAround = -1;\n    const shouldSkipHeader = skipHeader != null ? skipHeader : this.gos.get(\"skipHeaderOnAutoSize\");\n    const shouldSkipHeaderGroups = skipHeaderGroups != null ? skipHeaderGroups : shouldSkipHeader;\n    while (changesThisTimeAround !== 0) {\n      changesThisTimeAround = 0;\n      const updatedColumns = [];\n      colKeys.forEach((key) => {\n        if (!key) {\n          return;\n        }\n        const column = this.columnModel.getCol(key);\n        if (!column) {\n          return;\n        }\n        if (columnsAutosized.indexOf(column) >= 0) {\n          return;\n        }\n        const preferredWidth = this.autoWidthCalculator.getPreferredWidthForColumn(column, shouldSkipHeader);\n        if (preferredWidth > 0) {\n          const newWidth = this.normaliseColumnWidth(column, preferredWidth);\n          column.setActualWidth(newWidth, source);\n          columnsAutosized.push(column);\n          changesThisTimeAround++;\n        }\n        updatedColumns.push(column);\n      });\n      if (!updatedColumns.length) {\n        continue;\n      }\n      this.visibleColsService.refresh(source);\n    }\n    if (!shouldSkipHeaderGroups) {\n      this.autoSizeColumnGroupsByColumns(colKeys, source, stopAtGroup);\n    }\n    this.eventDispatcher.columnResized(columnsAutosized, true, \"autosizeColumns\");\n  }\n  autoSizeColumn(key, source, skipHeader) {\n    if (key) {\n      this.autoSizeCols({ colKeys: [key], skipHeader, skipHeaderGroups: true, source });\n    }\n  }\n  autoSizeColumnGroupsByColumns(keys, source, stopAtGroup) {\n    const columnGroups = /* @__PURE__ */ new Set();\n    const columns = this.columnModel.getColsForKeys(keys);\n    columns.forEach((col) => {\n      let parent = col.getParent();\n      while (parent && parent != stopAtGroup) {\n        if (!parent.isPadding()) {\n          columnGroups.add(parent);\n        }\n        parent = parent.getParent();\n      }\n    });\n    let headerGroupCtrl;\n    const resizedColumns = [];\n    for (const columnGroup of columnGroups) {\n      for (const headerContainerCtrl of this.ctrlsService.getHeaderRowContainerCtrls()) {\n        headerGroupCtrl = headerContainerCtrl.getHeaderCtrlForColumn(columnGroup);\n        if (headerGroupCtrl) {\n          break;\n        }\n      }\n      if (headerGroupCtrl) {\n        headerGroupCtrl.resizeLeafColumnsToFit(source);\n      }\n    }\n    return resizedColumns;\n  }\n  autoSizeAllColumns(source, skipHeader) {\n    if (this.columnModel.isShouldQueueResizeOperations()) {\n      this.columnModel.pushResizeOperation(() => this.autoSizeAllColumns(source, skipHeader));\n      return;\n    }\n    const allDisplayedColumns = this.visibleColsService.getAllCols();\n    this.autoSizeCols({ colKeys: allDisplayedColumns, skipHeader, source });\n  }\n  // returns the width we can set to this col, taking into consideration min and max widths\n  normaliseColumnWidth(column, newWidth) {\n    const minWidth = column.getMinWidth();\n    if (newWidth < minWidth) {\n      newWidth = minWidth;\n    }\n    const maxWidth = column.getMaxWidth();\n    if (column.isGreaterThanMax(newWidth)) {\n      newWidth = maxWidth;\n    }\n    return newWidth;\n  }\n};\n\n// community-modules/core/src/columns/funcColsService.ts\nvar FuncColsService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"funcColsService\";\n    this.rowGroupCols = [];\n    this.valueCols = [];\n    this.pivotCols = [];\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.eventDispatcher = beans.columnEventDispatcher;\n    this.aggFuncService = beans.aggFuncService;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  getModifyColumnsNoEventsCallbacks() {\n    return {\n      addGroupCol: (column) => this.rowGroupCols.push(column),\n      removeGroupCol: (column) => _removeFromArray(this.rowGroupCols, column),\n      addPivotCol: (column) => this.pivotCols.push(column),\n      removePivotCol: (column) => _removeFromArray(this.pivotCols, column),\n      addValueCol: (column) => this.valueCols.push(column),\n      removeValueCol: (column) => _removeFromArray(this.valueCols, column)\n    };\n  }\n  getSourceColumnsForGroupColumn(groupCol) {\n    const sourceColumnId = groupCol.getColDef().showRowGroup;\n    if (!sourceColumnId) {\n      return null;\n    }\n    if (sourceColumnId === true) {\n      return this.rowGroupCols.slice(0);\n    }\n    const column = this.columnModel.getColDefCol(sourceColumnId);\n    return column ? [column] : null;\n  }\n  sortRowGroupColumns(compareFn) {\n    this.rowGroupCols.sort(compareFn);\n  }\n  sortPivotColumns(compareFn) {\n    this.pivotCols.sort(compareFn);\n  }\n  // + rowController\n  getValueColumns() {\n    return this.valueCols ? this.valueCols : [];\n  }\n  // + rowController\n  getPivotColumns() {\n    return this.pivotCols ? this.pivotCols : [];\n  }\n  // + toolPanel\n  getRowGroupColumns() {\n    return this.rowGroupCols ? this.rowGroupCols : [];\n  }\n  isRowGroupEmpty() {\n    return _missingOrEmpty(this.rowGroupCols);\n  }\n  setColumnAggFunc(key, aggFunc, source) {\n    if (!key) {\n      return;\n    }\n    const column = this.columnModel.getColDefCol(key);\n    if (!column) {\n      return;\n    }\n    column.setAggFunc(aggFunc);\n    this.eventDispatcher.columnChanged(\"columnValueChanged\", [column], source);\n  }\n  setRowGroupColumns(colKeys, source) {\n    this.setColList(\n      colKeys,\n      this.rowGroupCols,\n      \"columnRowGroupChanged\",\n      true,\n      true,\n      (added, column) => this.setRowGroupActive(added, column, source),\n      source\n    );\n  }\n  setRowGroupActive(active, column, source) {\n    if (active === column.isRowGroupActive()) {\n      return;\n    }\n    column.setRowGroupActive(active, source);\n    if (active && !this.gos.get(\"suppressRowGroupHidesColumns\")) {\n      this.columnModel.setColsVisible([column], false, source);\n    }\n    if (!active && !this.gos.get(\"suppressMakeColumnVisibleAfterUnGroup\")) {\n      this.columnModel.setColsVisible([column], true, source);\n    }\n  }\n  addRowGroupColumns(keys, source) {\n    this.updateColList(\n      keys,\n      this.rowGroupCols,\n      true,\n      true,\n      (column) => this.setRowGroupActive(true, column, source),\n      \"columnRowGroupChanged\",\n      source\n    );\n  }\n  removeRowGroupColumns(keys, source) {\n    this.updateColList(\n      keys,\n      this.rowGroupCols,\n      false,\n      true,\n      (column) => this.setRowGroupActive(false, column, source),\n      \"columnRowGroupChanged\",\n      source\n    );\n  }\n  addPivotColumns(keys, source) {\n    this.updateColList(\n      keys,\n      this.pivotCols,\n      true,\n      false,\n      (column) => column.setPivotActive(true, source),\n      \"columnPivotChanged\",\n      source\n    );\n  }\n  setPivotColumns(colKeys, source) {\n    this.setColList(\n      colKeys,\n      this.pivotCols,\n      \"columnPivotChanged\",\n      true,\n      false,\n      (added, column) => {\n        column.setPivotActive(added, source);\n      },\n      source\n    );\n  }\n  removePivotColumns(keys, source) {\n    this.updateColList(\n      keys,\n      this.pivotCols,\n      false,\n      false,\n      (column) => column.setPivotActive(false, source),\n      \"columnPivotChanged\",\n      source\n    );\n  }\n  setValueColumns(colKeys, source) {\n    this.setColList(\n      colKeys,\n      this.valueCols,\n      \"columnValueChanged\",\n      false,\n      false,\n      (added, column) => this.setValueActive(added, column, source),\n      source\n    );\n  }\n  setValueActive(active, column, source) {\n    if (active === column.isValueActive()) {\n      return;\n    }\n    column.setValueActive(active, source);\n    if (active && !column.getAggFunc() && this.aggFuncService) {\n      const initialAggFunc = this.aggFuncService.getDefaultAggFunc(column);\n      column.setAggFunc(initialAggFunc);\n    }\n  }\n  addValueColumns(keys, source) {\n    this.updateColList(\n      keys,\n      this.valueCols,\n      true,\n      false,\n      (column) => this.setValueActive(true, column, source),\n      \"columnValueChanged\",\n      source\n    );\n  }\n  removeValueColumns(keys, source) {\n    this.updateColList(\n      keys,\n      this.valueCols,\n      false,\n      false,\n      (column) => this.setValueActive(false, column, source),\n      \"columnValueChanged\",\n      source\n    );\n  }\n  moveRowGroupColumn(fromIndex, toIndex, source) {\n    if (this.isRowGroupEmpty()) {\n      return;\n    }\n    const column = this.rowGroupCols[fromIndex];\n    const impactedColumns = this.rowGroupCols.slice(fromIndex, toIndex);\n    this.rowGroupCols.splice(fromIndex, 1);\n    this.rowGroupCols.splice(toIndex, 0, column);\n    this.eventDispatcher.rowGroupChanged(impactedColumns, source);\n  }\n  setColList(colKeys, masterList, eventName, detectOrderChange, autoGroupsNeedBuilding, columnCallback, source) {\n    if (!this.columnModel.getCols()) {\n      return;\n    }\n    const changes = /* @__PURE__ */ new Map();\n    masterList.forEach((col, idx) => changes.set(col, idx));\n    masterList.length = 0;\n    if (_exists(colKeys)) {\n      colKeys.forEach((key) => {\n        const column = this.columnModel.getColDefCol(key);\n        if (column) {\n          masterList.push(column);\n        }\n      });\n    }\n    masterList.forEach((col, idx) => {\n      const oldIndex = changes.get(col);\n      if (oldIndex === void 0) {\n        changes.set(col, 0);\n        return;\n      }\n      if (detectOrderChange && oldIndex !== idx) {\n        return;\n      }\n      changes.delete(col);\n    });\n    const primaryCols = this.columnModel.getColDefCols();\n    (primaryCols || []).forEach((column) => {\n      const added = masterList.indexOf(column) >= 0;\n      columnCallback(added, column);\n    });\n    autoGroupsNeedBuilding && this.columnModel.refreshCols(false);\n    this.visibleColsService.refresh(source);\n    this.eventDispatcher.columnChanged(eventName, [...changes.keys()], source);\n  }\n  updateColList(keys, masterList, actionIsAdd, autoGroupsNeedBuilding, columnCallback, eventType, source) {\n    if (!keys || _missingOrEmpty(keys)) {\n      return;\n    }\n    let atLeastOne = false;\n    const updatedCols = /* @__PURE__ */ new Set();\n    keys.forEach((key) => {\n      if (!key) {\n        return;\n      }\n      const columnToAdd = this.columnModel.getColDefCol(key);\n      if (!columnToAdd) {\n        return;\n      }\n      updatedCols.add(columnToAdd);\n      if (actionIsAdd) {\n        if (masterList.indexOf(columnToAdd) >= 0) {\n          return;\n        }\n        masterList.push(columnToAdd);\n      } else {\n        const currentIndex = masterList.indexOf(columnToAdd);\n        if (currentIndex < 0) {\n          return;\n        }\n        for (let i = currentIndex + 1; i < masterList.length; i++) {\n          updatedCols.add(masterList[i]);\n        }\n        _removeFromArray(masterList, columnToAdd);\n      }\n      columnCallback(columnToAdd);\n      atLeastOne = true;\n    });\n    if (!atLeastOne) {\n      return;\n    }\n    if (autoGroupsNeedBuilding) {\n      this.columnModel.refreshCols(false);\n    }\n    this.visibleColsService.refresh(source);\n    this.eventDispatcher.genericColumnEvent(eventType, Array.from(updatedCols), source);\n  }\n  extractCols(source, oldProvidedCols) {\n    this.extractRowGroupCols(source, oldProvidedCols);\n    this.extractPivotCols(source, oldProvidedCols);\n    this.extractValueCols(source, oldProvidedCols);\n  }\n  extractValueCols(source, oldProvidedCols) {\n    this.valueCols = this.extractColsCommon(\n      oldProvidedCols,\n      this.valueCols,\n      (col, flag) => col.setValueActive(flag, source),\n      // aggFunc doesn't have index variant, cos order of value cols doesn't matter, so always return null\n      () => void 0,\n      () => void 0,\n      // aggFunc is a string, so return it's existence\n      (colDef) => {\n        const aggFunc = colDef.aggFunc;\n        if (aggFunc === null || aggFunc === \"\") {\n          return null;\n        }\n        if (aggFunc === void 0) {\n          return;\n        }\n        return !!aggFunc;\n      },\n      (colDef) => {\n        return colDef.initialAggFunc != null && colDef.initialAggFunc != \"\";\n      }\n    );\n    this.valueCols.forEach((col) => {\n      const colDef = col.getColDef();\n      if (colDef.aggFunc != null && colDef.aggFunc != \"\") {\n        col.setAggFunc(colDef.aggFunc);\n      } else {\n        if (!col.getAggFunc()) {\n          col.setAggFunc(colDef.initialAggFunc);\n        }\n      }\n    });\n  }\n  extractRowGroupCols(source, oldProvidedCols) {\n    this.rowGroupCols = this.extractColsCommon(\n      oldProvidedCols,\n      this.rowGroupCols,\n      (col, flag) => col.setRowGroupActive(flag, source),\n      (colDef) => colDef.rowGroupIndex,\n      (colDef) => colDef.initialRowGroupIndex,\n      (colDef) => colDef.rowGroup,\n      (colDef) => colDef.initialRowGroup\n    );\n  }\n  extractPivotCols(source, oldProvidedCols) {\n    this.pivotCols = this.extractColsCommon(\n      oldProvidedCols,\n      this.pivotCols,\n      (col, flag) => col.setPivotActive(flag, source),\n      (colDef) => colDef.pivotIndex,\n      (colDef) => colDef.initialPivotIndex,\n      (colDef) => colDef.pivot,\n      (colDef) => colDef.initialPivot\n    );\n  }\n  extractColsCommon(oldProvidedCols = [], previousCols = [], setFlagFunc, getIndexFunc, getInitialIndexFunc, getValueFunc, getInitialValueFunc) {\n    const colsWithIndex = [];\n    const colsWithValue = [];\n    const primaryCols = this.columnModel.getColDefCols() || [];\n    primaryCols.forEach((col) => {\n      const colIsNew = oldProvidedCols.indexOf(col) < 0;\n      const colDef = col.getColDef();\n      const value = _attrToBoolean(getValueFunc(colDef));\n      const initialValue = _attrToBoolean(getInitialValueFunc(colDef));\n      const index = _attrToNumber(getIndexFunc(colDef));\n      const initialIndex = _attrToNumber(getInitialIndexFunc(colDef));\n      let include;\n      const valuePresent = value !== void 0;\n      const indexPresent = index !== void 0;\n      const initialValuePresent = initialValue !== void 0;\n      const initialIndexPresent = initialIndex !== void 0;\n      if (valuePresent) {\n        include = value;\n      } else if (indexPresent) {\n        if (index === null) {\n          include = false;\n        } else {\n          include = index >= 0;\n        }\n      } else {\n        if (colIsNew) {\n          if (initialValuePresent) {\n            include = initialValue;\n          } else if (initialIndexPresent) {\n            include = initialIndex != null && initialIndex >= 0;\n          } else {\n            include = false;\n          }\n        } else {\n          include = previousCols.indexOf(col) >= 0;\n        }\n      }\n      if (include) {\n        const useIndex = colIsNew ? index != null || initialIndex != null : index != null;\n        useIndex ? colsWithIndex.push(col) : colsWithValue.push(col);\n      }\n    });\n    const getIndexForCol = (col) => {\n      const index = getIndexFunc(col.getColDef());\n      const defaultIndex = getInitialIndexFunc(col.getColDef());\n      return index != null ? index : defaultIndex;\n    };\n    colsWithIndex.sort((colA, colB) => {\n      const indexA = getIndexForCol(colA);\n      const indexB = getIndexForCol(colB);\n      if (indexA === indexB) {\n        return 0;\n      }\n      if (indexA < indexB) {\n        return -1;\n      }\n      return 1;\n    });\n    const res = [].concat(colsWithIndex);\n    previousCols.forEach((col) => {\n      if (colsWithValue.indexOf(col) >= 0) {\n        res.push(col);\n      }\n    });\n    colsWithValue.forEach((col) => {\n      if (res.indexOf(col) < 0) {\n        res.push(col);\n      }\n    });\n    previousCols.forEach((col) => {\n      if (res.indexOf(col) < 0) {\n        setFlagFunc(col, false);\n      }\n    });\n    res.forEach((col) => {\n      if (previousCols.indexOf(col) < 0) {\n        setFlagFunc(col, true);\n      }\n    });\n    return res;\n  }\n  generateColumnStateForRowGroupAndPivotIndexes(updatedRowGroupColumnState, updatedPivotColumnState) {\n    const existingColumnStateUpdates = {};\n    const orderColumns = (updatedColumnState, colList, enableProp, initialEnableProp, indexProp, initialIndexProp) => {\n      const primaryCols = this.columnModel.getColDefCols();\n      if (!colList.length || !primaryCols) {\n        return [];\n      }\n      const updatedColIdArray = Object.keys(updatedColumnState);\n      const updatedColIds = new Set(updatedColIdArray);\n      const newColIds = new Set(updatedColIdArray);\n      const allColIds = new Set(\n        colList.map((column) => {\n          const colId = column.getColId();\n          newColIds.delete(colId);\n          return colId;\n        }).concat(updatedColIdArray)\n      );\n      const colIdsInOriginalOrder = [];\n      const originalOrderMap = {};\n      let orderIndex = 0;\n      for (let i = 0; i < primaryCols.length; i++) {\n        const colId = primaryCols[i].getColId();\n        if (allColIds.has(colId)) {\n          colIdsInOriginalOrder.push(colId);\n          originalOrderMap[colId] = orderIndex++;\n        }\n      }\n      let index = 1e3;\n      let hasAddedNewCols = false;\n      let lastIndex = 0;\n      const processPrecedingNewCols = (colId) => {\n        const originalOrderIndex = originalOrderMap[colId];\n        for (let i = lastIndex; i < originalOrderIndex; i++) {\n          const newColId = colIdsInOriginalOrder[i];\n          if (newColIds.has(newColId)) {\n            updatedColumnState[newColId][indexProp] = index++;\n            newColIds.delete(newColId);\n          }\n        }\n        lastIndex = originalOrderIndex;\n      };\n      colList.forEach((column) => {\n        const colId = column.getColId();\n        if (updatedColIds.has(colId)) {\n          processPrecedingNewCols(colId);\n          updatedColumnState[colId][indexProp] = index++;\n        } else {\n          const colDef = column.getColDef();\n          const missingIndex = colDef[indexProp] === null || colDef[indexProp] === void 0 && colDef[initialIndexProp] == null;\n          if (missingIndex) {\n            if (!hasAddedNewCols) {\n              const propEnabled = colDef[enableProp] || colDef[enableProp] === void 0 && colDef[initialEnableProp];\n              if (propEnabled) {\n                processPrecedingNewCols(colId);\n              } else {\n                newColIds.forEach((newColId) => {\n                  updatedColumnState[newColId][indexProp] = index + originalOrderMap[newColId];\n                });\n                index += colIdsInOriginalOrder.length;\n                hasAddedNewCols = true;\n              }\n            }\n            if (!existingColumnStateUpdates[colId]) {\n              existingColumnStateUpdates[colId] = { colId };\n            }\n            existingColumnStateUpdates[colId][indexProp] = index++;\n          }\n        }\n      });\n    };\n    orderColumns(\n      updatedRowGroupColumnState,\n      this.rowGroupCols,\n      \"rowGroup\",\n      \"initialRowGroup\",\n      \"rowGroupIndex\",\n      \"initialRowGroupIndex\"\n    );\n    orderColumns(\n      updatedPivotColumnState,\n      this.pivotCols,\n      \"pivot\",\n      \"initialPivot\",\n      \"pivotIndex\",\n      \"initialPivotIndex\"\n    );\n    return Object.values(existingColumnStateUpdates);\n  }\n};\n\n// community-modules/core/src/columns/columnApplyStateService.ts\nvar ColumnApplyStateService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnApplyStateService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.eventDispatcher = beans.columnEventDispatcher;\n    this.sortController = beans.sortController;\n    this.columnGetStateService = beans.columnGetStateService;\n    this.funcColsService = beans.funcColsService;\n    this.visibleColsService = beans.visibleColsService;\n    this.columnAnimationService = beans.columnAnimationService;\n    this.pivotResultColsService = beans.pivotResultColsService;\n  }\n  applyColumnState(params, source) {\n    const providedCols = this.columnModel.getColDefCols() || [];\n    if (_missingOrEmpty(providedCols)) {\n      return false;\n    }\n    if (params && params.state && !params.state.forEach) {\n      _warnOnce(\n        \"applyColumnState() - the state attribute should be an array, however an array was not found. Please provide an array of items (one for each col you want to change) for state.\"\n      );\n      return false;\n    }\n    const callbacks = this.funcColsService.getModifyColumnsNoEventsCallbacks();\n    const applyStates = (states, existingColumns, getById) => {\n      const dispatchEventsFunc = this.compareColumnStatesAndDispatchEvents(source);\n      const columnsWithNoState = existingColumns.slice();\n      const rowGroupIndexes = {};\n      const pivotIndexes = {};\n      const autoColStates = [];\n      const unmatchedAndAutoStates2 = [];\n      let unmatchedCount2 = 0;\n      const previousRowGroupCols = this.funcColsService.getRowGroupColumns().slice();\n      const previousPivotCols = this.funcColsService.getPivotColumns().slice();\n      states.forEach((state) => {\n        const colId = state.colId || \"\";\n        const isAutoGroupColumn = colId.startsWith(GROUP_AUTO_COLUMN_ID);\n        if (isAutoGroupColumn) {\n          autoColStates.push(state);\n          unmatchedAndAutoStates2.push(state);\n          return;\n        }\n        const column = getById(colId);\n        if (!column) {\n          unmatchedAndAutoStates2.push(state);\n          unmatchedCount2 += 1;\n        } else {\n          this.syncColumnWithStateItem(\n            column,\n            state,\n            params.defaultState,\n            rowGroupIndexes,\n            pivotIndexes,\n            false,\n            source,\n            callbacks\n          );\n          _removeFromArray(columnsWithNoState, column);\n        }\n      });\n      const applyDefaultsFunc = (col) => this.syncColumnWithStateItem(\n        col,\n        null,\n        params.defaultState,\n        rowGroupIndexes,\n        pivotIndexes,\n        false,\n        source,\n        callbacks\n      );\n      columnsWithNoState.forEach(applyDefaultsFunc);\n      this.funcColsService.sortRowGroupColumns(\n        comparatorByIndex.bind(this, rowGroupIndexes, previousRowGroupCols)\n      );\n      this.funcColsService.sortPivotColumns(comparatorByIndex.bind(this, pivotIndexes, previousPivotCols));\n      this.columnModel.refreshCols(false);\n      const autoCols = this.columnModel.getAutoCols() || [];\n      const autoColsCopy = autoCols.slice();\n      autoColStates.forEach((stateItem) => {\n        const autoCol = this.columnModel.getAutoCol(stateItem.colId);\n        _removeFromArray(autoColsCopy, autoCol);\n        this.syncColumnWithStateItem(\n          autoCol,\n          stateItem,\n          params.defaultState,\n          null,\n          null,\n          true,\n          source,\n          callbacks\n        );\n      });\n      autoColsCopy.forEach(applyDefaultsFunc);\n      this.orderLiveColsLikeState(params);\n      this.visibleColsService.refresh(source);\n      this.eventDispatcher.everythingChanged(source);\n      dispatchEventsFunc();\n      return { unmatchedAndAutoStates: unmatchedAndAutoStates2, unmatchedCount: unmatchedCount2 };\n    };\n    this.columnAnimationService.start();\n    let { unmatchedAndAutoStates, unmatchedCount } = applyStates(\n      params.state || [],\n      providedCols,\n      (id) => this.columnModel.getColDefCol(id)\n    );\n    if (unmatchedAndAutoStates.length > 0 || _exists(params.defaultState)) {\n      const pivotResultCols = this.pivotResultColsService.getPivotResultCols();\n      const pivotResultColsList = pivotResultCols?.list;\n      unmatchedCount = applyStates(\n        unmatchedAndAutoStates,\n        pivotResultColsList || [],\n        (id) => this.pivotResultColsService.getPivotResultCol(id)\n      ).unmatchedCount;\n    }\n    this.columnAnimationService.finish();\n    return unmatchedCount === 0;\n  }\n  resetColumnState(source) {\n    const primaryCols = this.columnModel.getColDefCols();\n    if (_missingOrEmpty(primaryCols)) {\n      return;\n    }\n    const primaryColumnTree = this.columnModel.getColDefColTree();\n    const primaryColumns = getColumnsFromTree(primaryColumnTree);\n    const columnStates = [];\n    let letRowGroupIndex = 1e3;\n    let letPivotIndex = 1e3;\n    let colsToProcess = [];\n    const groupAutoCols = this.columnModel.getAutoCols();\n    if (groupAutoCols) {\n      colsToProcess = colsToProcess.concat(groupAutoCols);\n    }\n    if (primaryColumns) {\n      colsToProcess = colsToProcess.concat(primaryColumns);\n    }\n    colsToProcess.forEach((column) => {\n      const stateItem = this.getColumnStateFromColDef(column);\n      if (_missing(stateItem.rowGroupIndex) && stateItem.rowGroup) {\n        stateItem.rowGroupIndex = letRowGroupIndex++;\n      }\n      if (_missing(stateItem.pivotIndex) && stateItem.pivot) {\n        stateItem.pivotIndex = letPivotIndex++;\n      }\n      columnStates.push(stateItem);\n    });\n    this.applyColumnState({ state: columnStates, applyOrder: true }, source);\n  }\n  getColumnStateFromColDef(column) {\n    const getValueOrNull = (a, b) => a != null ? a : b != null ? b : null;\n    const colDef = column.getColDef();\n    const sort = getValueOrNull(colDef.sort, colDef.initialSort);\n    const sortIndex = getValueOrNull(colDef.sortIndex, colDef.initialSortIndex);\n    const hide = getValueOrNull(colDef.hide, colDef.initialHide);\n    const pinned = getValueOrNull(colDef.pinned, colDef.initialPinned);\n    const width = getValueOrNull(colDef.width, colDef.initialWidth);\n    const flex = getValueOrNull(colDef.flex, colDef.initialFlex);\n    let rowGroupIndex = getValueOrNull(\n      colDef.rowGroupIndex,\n      colDef.initialRowGroupIndex\n    );\n    let rowGroup = getValueOrNull(colDef.rowGroup, colDef.initialRowGroup);\n    if (rowGroupIndex == null && (rowGroup == null || rowGroup == false)) {\n      rowGroupIndex = null;\n      rowGroup = null;\n    }\n    let pivotIndex = getValueOrNull(colDef.pivotIndex, colDef.initialPivotIndex);\n    let pivot = getValueOrNull(colDef.pivot, colDef.initialPivot);\n    if (pivotIndex == null && (pivot == null || pivot == false)) {\n      pivotIndex = null;\n      pivot = null;\n    }\n    const aggFunc = getValueOrNull(colDef.aggFunc, colDef.initialAggFunc);\n    return {\n      colId: column.getColId(),\n      sort,\n      sortIndex,\n      hide,\n      pinned,\n      width,\n      flex,\n      rowGroup,\n      rowGroupIndex,\n      pivot,\n      pivotIndex,\n      aggFunc\n    };\n  }\n  syncColumnWithStateItem(column, stateItem, defaultState, rowGroupIndexes, pivotIndexes, autoCol, source, callbacks) {\n    if (!column) {\n      return;\n    }\n    const getValue2 = (key1, key2) => {\n      const obj = {\n        value1: void 0,\n        value2: void 0\n      };\n      let calculated = false;\n      if (stateItem) {\n        if (stateItem[key1] !== void 0) {\n          obj.value1 = stateItem[key1];\n          calculated = true;\n        }\n        if (_exists(key2) && stateItem[key2] !== void 0) {\n          obj.value2 = stateItem[key2];\n          calculated = true;\n        }\n      }\n      if (!calculated && defaultState) {\n        if (defaultState[key1] !== void 0) {\n          obj.value1 = defaultState[key1];\n        }\n        if (_exists(key2) && defaultState[key2] !== void 0) {\n          obj.value2 = defaultState[key2];\n        }\n      }\n      return obj;\n    };\n    const hide = getValue2(\"hide\").value1;\n    if (hide !== void 0) {\n      column.setVisible(!hide, source);\n    }\n    const pinned = getValue2(\"pinned\").value1;\n    if (pinned !== void 0) {\n      column.setPinned(pinned);\n    }\n    const minColWidth = column.getColDef().minWidth ?? this.gos.environment.getDefaultColumnMinWidth();\n    const flex = getValue2(\"flex\").value1;\n    if (flex !== void 0) {\n      column.setFlex(flex);\n    }\n    if (flex == null) {\n      const width = getValue2(\"width\").value1;\n      if (width != null) {\n        if (minColWidth != null && width >= minColWidth) {\n          column.setActualWidth(width, source);\n        }\n      }\n    }\n    const sort = getValue2(\"sort\").value1;\n    if (sort !== void 0) {\n      if (sort === \"desc\" || sort === \"asc\") {\n        column.setSort(sort, source);\n      } else {\n        column.setSort(void 0, source);\n      }\n    }\n    const sortIndex = getValue2(\"sortIndex\").value1;\n    if (sortIndex !== void 0) {\n      column.setSortIndex(sortIndex);\n    }\n    if (autoCol || !column.isPrimary()) {\n      return;\n    }\n    const aggFunc = getValue2(\"aggFunc\").value1;\n    if (aggFunc !== void 0) {\n      if (typeof aggFunc === \"string\") {\n        column.setAggFunc(aggFunc);\n        if (!column.isValueActive()) {\n          column.setValueActive(true, source);\n          callbacks.addValueCol(column);\n        }\n      } else {\n        if (_exists(aggFunc)) {\n          _warnOnce(\n            \"stateItem.aggFunc must be a string. if using your own aggregation functions, register the functions first before using them in get/set state. This is because it is intended for the column state to be stored and retrieved as simple JSON.\"\n          );\n        }\n        if (column.isValueActive()) {\n          column.setValueActive(false, source);\n          callbacks.removeValueCol(column);\n        }\n      }\n    }\n    const { value1: rowGroup, value2: rowGroupIndex } = getValue2(\"rowGroup\", \"rowGroupIndex\");\n    if (rowGroup !== void 0 || rowGroupIndex !== void 0) {\n      if (typeof rowGroupIndex === \"number\" || rowGroup) {\n        if (!column.isRowGroupActive()) {\n          column.setRowGroupActive(true, source);\n          callbacks.addGroupCol(column);\n        }\n        if (rowGroupIndexes && typeof rowGroupIndex === \"number\") {\n          rowGroupIndexes[column.getId()] = rowGroupIndex;\n        }\n      } else {\n        if (column.isRowGroupActive()) {\n          column.setRowGroupActive(false, source);\n          callbacks.removeGroupCol(column);\n        }\n      }\n    }\n    const { value1: pivot, value2: pivotIndex } = getValue2(\"pivot\", \"pivotIndex\");\n    if (pivot !== void 0 || pivotIndex !== void 0) {\n      if (typeof pivotIndex === \"number\" || pivot) {\n        if (!column.isPivotActive()) {\n          column.setPivotActive(true, source);\n          callbacks.addPivotCol(column);\n        }\n        if (pivotIndexes && typeof pivotIndex === \"number\") {\n          pivotIndexes[column.getId()] = pivotIndex;\n        }\n      } else {\n        if (column.isPivotActive()) {\n          column.setPivotActive(false, source);\n          callbacks.removePivotCol(column);\n        }\n      }\n    }\n  }\n  orderLiveColsLikeState(params) {\n    if (!params.applyOrder || !params.state) {\n      return;\n    }\n    const colIds = [];\n    params.state.forEach((item) => {\n      if (item.colId != null) {\n        colIds.push(item.colId);\n      }\n    });\n    this.columnModel.sortColsLikeKeys(colIds);\n  }\n  // calculates what events to fire between column state changes. gets used when:\n  // a) apply column state\n  // b) apply new column definitions (so changes from old cols)\n  compareColumnStatesAndDispatchEvents(source) {\n    const startState = {\n      rowGroupColumns: this.funcColsService.getRowGroupColumns().slice(),\n      pivotColumns: this.funcColsService.getPivotColumns().slice(),\n      valueColumns: this.funcColsService.getValueColumns().slice()\n    };\n    const columnStateBefore = this.columnGetStateService.getColumnState();\n    const columnStateBeforeMap = {};\n    columnStateBefore.forEach((col) => {\n      columnStateBeforeMap[col.colId] = col;\n    });\n    return () => {\n      const colsForState = this.columnModel.getAllCols();\n      const dispatchWhenListsDifferent = (eventType, colsBefore, colsAfter, idMapper) => {\n        const beforeList = colsBefore.map(idMapper);\n        const afterList = colsAfter.map(idMapper);\n        const unchanged = _areEqual(beforeList, afterList);\n        if (unchanged) {\n          return;\n        }\n        const changes = new Set(colsBefore);\n        colsAfter.forEach((id) => {\n          if (!changes.delete(id)) {\n            changes.add(id);\n          }\n        });\n        const changesArr = [...changes];\n        this.eventService.dispatchEvent({\n          type: eventType,\n          columns: changesArr,\n          column: changesArr.length === 1 ? changesArr[0] : null,\n          source\n        });\n      };\n      const getChangedColumns = (changedPredicate) => {\n        const changedColumns2 = [];\n        colsForState.forEach((column) => {\n          const colStateBefore = columnStateBeforeMap[column.getColId()];\n          if (colStateBefore && changedPredicate(colStateBefore, column)) {\n            changedColumns2.push(column);\n          }\n        });\n        return changedColumns2;\n      };\n      const columnIdMapper = (c) => c.getColId();\n      dispatchWhenListsDifferent(\n        \"columnRowGroupChanged\",\n        startState.rowGroupColumns,\n        this.funcColsService.getRowGroupColumns(),\n        columnIdMapper\n      );\n      dispatchWhenListsDifferent(\n        \"columnPivotChanged\",\n        startState.pivotColumns,\n        this.funcColsService.getPivotColumns(),\n        columnIdMapper\n      );\n      const valueChangePredicate = (cs, c) => {\n        const oldActive = cs.aggFunc != null;\n        const activeChanged = oldActive != c.isValueActive();\n        const aggFuncChanged = oldActive && cs.aggFunc != c.getAggFunc();\n        return activeChanged || aggFuncChanged;\n      };\n      const changedValues = getChangedColumns(valueChangePredicate);\n      if (changedValues.length > 0) {\n        this.eventDispatcher.columnChanged(\"columnValueChanged\", changedValues, source);\n      }\n      const resizeChangePredicate = (cs, c) => cs.width != c.getActualWidth();\n      this.eventDispatcher.columnResized(getChangedColumns(resizeChangePredicate), true, source);\n      const pinnedChangePredicate = (cs, c) => cs.pinned != c.getPinned();\n      this.eventDispatcher.columnPinned(getChangedColumns(pinnedChangePredicate), source);\n      const visibilityChangePredicate = (cs, c) => cs.hide == c.isVisible();\n      this.eventDispatcher.columnVisible(getChangedColumns(visibilityChangePredicate), source);\n      const sortChangePredicate = (cs, c) => cs.sort != c.getSort() || cs.sortIndex != c.getSortIndex();\n      const changedColumns = getChangedColumns(sortChangePredicate);\n      if (changedColumns.length > 0) {\n        this.sortController.dispatchSortChangedEvents(source, changedColumns);\n      }\n      this.normaliseColumnMovedEventForColumnState(columnStateBefore, source);\n    };\n  }\n  normaliseColumnMovedEventForColumnState(colStateBefore, source) {\n    const colStateAfter = this.columnGetStateService.getColumnState();\n    const colStateAfterMapped = {};\n    colStateAfter.forEach((s) => colStateAfterMapped[s.colId] = s);\n    const colsIntersectIds = {};\n    colStateBefore.forEach((s) => {\n      if (colStateAfterMapped[s.colId]) {\n        colsIntersectIds[s.colId] = true;\n      }\n    });\n    const beforeFiltered = colStateBefore.filter((c) => colsIntersectIds[c.colId]);\n    const afterFiltered = colStateAfter.filter((c) => colsIntersectIds[c.colId]);\n    const movedColumns = [];\n    afterFiltered.forEach((csAfter, index) => {\n      const csBefore = beforeFiltered && beforeFiltered[index];\n      if (csBefore && csBefore.colId !== csAfter.colId) {\n        const gridCol = this.columnModel.getCol(csBefore.colId);\n        if (gridCol) {\n          movedColumns.push(gridCol);\n        }\n      }\n    });\n    if (!movedColumns.length) {\n      return;\n    }\n    this.eventDispatcher.columnMoved({ movedColumns, source, finished: true });\n  }\n};\nvar comparatorByIndex = (indexes, oldList, colA, colB) => {\n  const indexA = indexes[colA.getId()];\n  const indexB = indexes[colB.getId()];\n  const aHasIndex = indexA != null;\n  const bHasIndex = indexB != null;\n  if (aHasIndex && bHasIndex) {\n    return indexA - indexB;\n  }\n  if (aHasIndex) {\n    return -1;\n  }\n  if (bHasIndex) {\n    return 1;\n  }\n  const oldIndexA = oldList.indexOf(colA);\n  const oldIndexB = oldList.indexOf(colB);\n  const aHasOldIndex = oldIndexA >= 0;\n  const bHasOldIndex = oldIndexB >= 0;\n  if (aHasOldIndex && bHasOldIndex) {\n    return oldIndexA - oldIndexB;\n  }\n  if (aHasOldIndex) {\n    return -1;\n  }\n  return 1;\n};\n\n// community-modules/core/src/columns/columnMoveService.ts\nvar ColumnMoveService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnMoveService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnAnimationService = beans.columnAnimationService;\n    this.eventDispatcher = beans.columnEventDispatcher;\n  }\n  moveColumnByIndex(fromIndex, toIndex, source) {\n    const gridColumns = this.columnModel.getCols();\n    if (!gridColumns) {\n      return;\n    }\n    const column = gridColumns[fromIndex];\n    this.moveColumns([column], toIndex, source);\n  }\n  moveColumns(columnsToMoveKeys, toIndex, source, finished = true) {\n    const gridColumns = this.columnModel.getCols();\n    if (!gridColumns) {\n      return;\n    }\n    if (toIndex > gridColumns.length - columnsToMoveKeys.length) {\n      _warnOnce(\"tried to insert columns in invalid location, toIndex = \", toIndex);\n      _warnOnce(\"remember that you should not count the moving columns when calculating the new index\");\n      return;\n    }\n    this.columnAnimationService.start();\n    const movedColumns = this.columnModel.getColsForKeys(columnsToMoveKeys);\n    if (this.doesMovePassRules(movedColumns, toIndex)) {\n      this.columnModel.moveInCols(movedColumns, toIndex, source);\n      this.eventDispatcher.columnMoved({ movedColumns, source, toIndex, finished });\n    }\n    this.columnAnimationService.finish();\n  }\n  doesMovePassRules(columnsToMove, toIndex) {\n    const proposedColumnOrder = this.getProposedColumnOrder(columnsToMove, toIndex);\n    return this.doesOrderPassRules(proposedColumnOrder);\n  }\n  doesOrderPassRules(gridOrder) {\n    if (!this.doesMovePassMarryChildren(gridOrder)) {\n      return false;\n    }\n    if (!this.doesMovePassLockedPositions(gridOrder)) {\n      return false;\n    }\n    return true;\n  }\n  getProposedColumnOrder(columnsToMove, toIndex) {\n    const gridColumns = this.columnModel.getCols();\n    const proposedColumnOrder = gridColumns.slice();\n    _moveInArray(proposedColumnOrder, columnsToMove, toIndex);\n    return proposedColumnOrder;\n  }\n  doesMovePassLockedPositions(proposedColumnOrder) {\n    const lockPositionToPlacement = (position) => {\n      if (!position) {\n        return 0 /* NONE */;\n      }\n      return position === \"left\" || position === true ? -1 /* LEFT */ : 1 /* RIGHT */;\n    };\n    const isRtl = this.gos.get(\"enableRtl\");\n    let lastPlacement = isRtl ? 1 /* RIGHT */ : -1 /* LEFT */;\n    let rulePassed = true;\n    proposedColumnOrder.forEach((col) => {\n      const placement = lockPositionToPlacement(col.getColDef().lockPosition);\n      if (isRtl) {\n        if (placement > lastPlacement) {\n          rulePassed = false;\n        }\n      } else {\n        if (placement < lastPlacement) {\n          rulePassed = false;\n        }\n      }\n      lastPlacement = placement;\n    });\n    return rulePassed;\n  }\n  doesMovePassMarryChildren(allColumnsCopy) {\n    let rulePassed = true;\n    const gridBalancedTree = this.columnModel.getColTree();\n    depthFirstOriginalTreeSearch(null, gridBalancedTree, (child) => {\n      if (!isProvidedColumnGroup(child)) {\n        return;\n      }\n      const columnGroup = child;\n      const colGroupDef = columnGroup.getColGroupDef();\n      const marryChildren = colGroupDef && colGroupDef.marryChildren;\n      if (!marryChildren) {\n        return;\n      }\n      const newIndexes = [];\n      columnGroup.getLeafColumns().forEach((col) => {\n        const newColIndex = allColumnsCopy.indexOf(col);\n        newIndexes.push(newColIndex);\n      });\n      const maxIndex = Math.max.apply(Math, newIndexes);\n      const minIndex = Math.min.apply(Math, newIndexes);\n      const spread = maxIndex - minIndex;\n      const maxSpread = columnGroup.getLeafColumns().length - 1;\n      if (spread > maxSpread) {\n        rulePassed = false;\n      }\n    });\n    return rulePassed;\n  }\n  placeLockedColumns(cols) {\n    const left = [];\n    const normal = [];\n    const right = [];\n    cols.forEach((col) => {\n      const position = col.getColDef().lockPosition;\n      if (position === \"right\") {\n        right.push(col);\n      } else if (position === \"left\" || position === true) {\n        left.push(col);\n      } else {\n        normal.push(col);\n      }\n    });\n    const isRtl = this.gos.get(\"enableRtl\");\n    if (isRtl) {\n      return [...right, ...normal, ...left];\n    }\n    return [...left, ...normal, ...right];\n  }\n};\n\n// community-modules/core/src/utils/string.ts\nvar reUnescapedHtml = /[&<>\"']/g;\nvar HTML_ESCAPES = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\",\n  \"'\": \"&#39;\"\n};\nfunction _utf8_encode(s) {\n  const stringFromCharCode = String.fromCharCode;\n  function ucs2decode(string) {\n    const output = [];\n    if (!string) {\n      return [];\n    }\n    const len = string.length;\n    let counter = 0;\n    let value;\n    let extra;\n    while (counter < len) {\n      value = string.charCodeAt(counter++);\n      if (value >= 55296 && value <= 56319 && counter < len) {\n        extra = string.charCodeAt(counter++);\n        if ((extra & 64512) == 56320) {\n          output.push(((value & 1023) << 10) + (extra & 1023) + 65536);\n        } else {\n          output.push(value);\n          counter--;\n        }\n      } else {\n        output.push(value);\n      }\n    }\n    return output;\n  }\n  function checkScalarValue(point) {\n    if (point >= 55296 && point <= 57343) {\n      throw Error(\"Lone surrogate U+\" + point.toString(16).toUpperCase() + \" is not a scalar value\");\n    }\n  }\n  function createByte(point, shift) {\n    return stringFromCharCode(point >> shift & 63 | 128);\n  }\n  function encodeCodePoint(point) {\n    if ((point & 4294967168) == 0) {\n      return stringFromCharCode(point);\n    }\n    let symbol = \"\";\n    if ((point & 4294965248) == 0) {\n      symbol = stringFromCharCode(point >> 6 & 31 | 192);\n    } else if ((point & 4294901760) == 0) {\n      checkScalarValue(point);\n      symbol = stringFromCharCode(point >> 12 & 15 | 224);\n      symbol += createByte(point, 6);\n    } else if ((point & 4292870144) == 0) {\n      symbol = stringFromCharCode(point >> 18 & 7 | 240);\n      symbol += createByte(point, 12);\n      symbol += createByte(point, 6);\n    }\n    symbol += stringFromCharCode(point & 63 | 128);\n    return symbol;\n  }\n  const codePoints = ucs2decode(s);\n  const length = codePoints.length;\n  let index = -1;\n  let codePoint;\n  let byteString = \"\";\n  while (++index < length) {\n    codePoint = codePoints[index];\n    byteString += encodeCodePoint(codePoint);\n  }\n  return byteString;\n}\nfunction _capitalise(str) {\n  return str[0].toUpperCase() + str.substring(1).toLowerCase();\n}\nfunction _escapeString(toEscape, skipEscapingHtmlChars) {\n  if (toEscape == null) {\n    return null;\n  }\n  const stringResult = toEscape.toString().toString();\n  if (skipEscapingHtmlChars) {\n    return stringResult;\n  }\n  return stringResult.replace(reUnescapedHtml, (chr) => HTML_ESCAPES[chr]);\n}\nfunction _camelCaseToHumanText(camelCase) {\n  if (!camelCase || camelCase == null) {\n    return null;\n  }\n  const rex = /([a-z])([A-Z])/g;\n  const rexCaps = /([A-Z]+)([A-Z])([a-z])/g;\n  const words = camelCase.replace(rex, \"$1 $2\").replace(rexCaps, \"$1 $2$3\").replace(/\\./g, \" \").split(\" \");\n  return words.map((word) => word.substring(0, 1).toUpperCase() + (word.length > 1 ? word.substring(1, word.length) : \"\")).join(\" \");\n}\nfunction _camelCaseToHyphenated(camelCase) {\n  return camelCase.replace(/[A-Z]/g, (s) => `-${s.toLocaleLowerCase()}`);\n}\n\n// community-modules/core/src/columns/columnNameService.ts\nvar ColumnNameService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnNameService\";\n  }\n  wireBeans(beans) {\n    this.expressionService = beans.expressionService;\n    this.funcColsService = beans.funcColsService;\n    this.columnModel = beans.columnModel;\n  }\n  getDisplayNameForColumn(column, location, includeAggFunc = false) {\n    if (!column) {\n      return null;\n    }\n    const headerName = this.getHeaderName(column.getColDef(), column, null, null, location);\n    if (includeAggFunc) {\n      return this.wrapHeaderNameWithAggFunc(column, headerName);\n    }\n    return headerName;\n  }\n  getDisplayNameForProvidedColumnGroup(columnGroup, providedColumnGroup, location) {\n    const colGroupDef = providedColumnGroup ? providedColumnGroup.getColGroupDef() : null;\n    if (colGroupDef) {\n      return this.getHeaderName(colGroupDef, null, columnGroup, providedColumnGroup, location);\n    }\n    return null;\n  }\n  getDisplayNameForColumnGroup(columnGroup, location) {\n    return this.getDisplayNameForProvidedColumnGroup(columnGroup, columnGroup.getProvidedColumnGroup(), location);\n  }\n  // location is where the column is going to appear, ie who is calling us\n  getHeaderName(colDef, column, columnGroup, providedColumnGroup, location) {\n    const headerValueGetter = colDef.headerValueGetter;\n    if (headerValueGetter) {\n      const params = this.gos.addGridCommonParams({\n        colDef,\n        column,\n        columnGroup,\n        providedColumnGroup,\n        location\n      });\n      if (typeof headerValueGetter === \"function\") {\n        return headerValueGetter(params);\n      } else if (typeof headerValueGetter === \"string\") {\n        return this.expressionService.evaluate(headerValueGetter, params);\n      }\n      _warnOnce(\"headerValueGetter must be a function or a string\");\n      return \"\";\n    } else if (colDef.headerName != null) {\n      return colDef.headerName;\n    } else if (colDef.field) {\n      return _camelCaseToHumanText(colDef.field);\n    }\n    return \"\";\n  }\n  wrapHeaderNameWithAggFunc(column, headerName) {\n    if (this.gos.get(\"suppressAggFuncInHeader\")) {\n      return headerName;\n    }\n    const pivotValueColumn = column.getColDef().pivotValueColumn;\n    const pivotActiveOnThisColumn = _exists(pivotValueColumn);\n    let aggFunc = null;\n    let aggFuncFound;\n    if (pivotActiveOnThisColumn) {\n      const valueColumns = this.funcColsService.getValueColumns();\n      const isCollapsedHeaderEnabled = this.gos.get(\"removePivotHeaderRowWhenSingleValueColumn\") && valueColumns.length === 1;\n      const isTotalColumn = column.getColDef().pivotTotalColumnIds !== void 0;\n      if (isCollapsedHeaderEnabled && !isTotalColumn) {\n        return headerName;\n      }\n      aggFunc = pivotValueColumn ? pivotValueColumn.getAggFunc() : null;\n      aggFuncFound = true;\n    } else {\n      const measureActive = column.isValueActive();\n      const aggregationPresent = this.columnModel.isPivotMode() || !this.funcColsService.isRowGroupEmpty();\n      if (measureActive && aggregationPresent) {\n        aggFunc = column.getAggFunc();\n        aggFuncFound = true;\n      } else {\n        aggFuncFound = false;\n      }\n    }\n    if (aggFuncFound) {\n      const aggFuncString = typeof aggFunc === \"string\" ? aggFunc : \"func\";\n      const localeTextFunc = this.localeService.getLocaleTextFunc();\n      const aggFuncStringTranslated = localeTextFunc(aggFuncString, aggFuncString);\n      return `${aggFuncStringTranslated}(${headerName})`;\n    }\n    return headerName;\n  }\n};\n\n// community-modules/core/src/columns/pivotResultColsService.ts\nvar PivotResultColsService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"pivotResultColsService\";\n  }\n  wireBeans(beans) {\n    this.context = beans.context;\n    this.columnModel = beans.columnModel;\n    this.columnFactory = beans.columnFactory;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  destroy() {\n    destroyColumnTree(this.context, this.pivotResultCols?.tree);\n    super.destroy();\n  }\n  isPivotResultColsPresent() {\n    return this.pivotResultCols != null;\n  }\n  lookupPivotResultCol(pivotKeys, valueColKey) {\n    if (this.pivotResultCols == null) {\n      return null;\n    }\n    const valueColumnToFind = this.columnModel.getColDefCol(valueColKey);\n    let foundColumn = null;\n    this.pivotResultCols.list.forEach((column) => {\n      const thisPivotKeys = column.getColDef().pivotKeys;\n      const pivotValueColumn = column.getColDef().pivotValueColumn;\n      const pivotKeyMatches = _areEqual(thisPivotKeys, pivotKeys);\n      const pivotValueMatches = pivotValueColumn === valueColumnToFind;\n      if (pivotKeyMatches && pivotValueMatches) {\n        foundColumn = column;\n      }\n    });\n    return foundColumn;\n  }\n  getPivotResultCols() {\n    return this.pivotResultCols;\n  }\n  getPivotResultCol(key) {\n    if (!this.pivotResultCols) {\n      return null;\n    }\n    return this.columnModel.getColFromCollection(key, this.pivotResultCols);\n  }\n  setPivotResultCols(colDefs, source) {\n    if (!this.columnModel.isReady()) {\n      return;\n    }\n    if (colDefs == null && this.pivotResultCols == null) {\n      return;\n    }\n    if (colDefs) {\n      this.processPivotResultColDef(colDefs);\n      const balancedTreeResult = this.columnFactory.createColumnTree(\n        colDefs,\n        false,\n        this.pivotResultCols?.tree || this.previousPivotResultCols || void 0,\n        source\n      );\n      destroyColumnTree(this.context, this.pivotResultCols?.tree, balancedTreeResult.columnTree);\n      const tree = balancedTreeResult.columnTree;\n      const treeDepth = balancedTreeResult.treeDept;\n      const list = getColumnsFromTree(tree);\n      const map = {};\n      this.pivotResultCols = { tree, treeDepth, list, map };\n      this.pivotResultCols.list.forEach((col) => this.pivotResultCols.map[col.getId()] = col);\n      const hasPreviousCols = !!this.previousPivotResultCols;\n      this.previousPivotResultCols = null;\n      this.columnModel.refreshCols(!hasPreviousCols);\n    } else {\n      this.previousPivotResultCols = this.pivotResultCols ? this.pivotResultCols.tree : null;\n      this.pivotResultCols = null;\n      this.columnModel.refreshCols(false);\n    }\n    this.visibleColsService.refresh(source);\n  }\n  processPivotResultColDef(colDefs) {\n    const columnCallback = this.gos.get(\"processPivotResultColDef\");\n    const groupCallback = this.gos.get(\"processPivotResultColGroupDef\");\n    if (!columnCallback && !groupCallback) {\n      return void 0;\n    }\n    const searchForColDefs = (colDefs2) => {\n      colDefs2.forEach((abstractColDef) => {\n        const isGroup = _exists(abstractColDef.children);\n        if (isGroup) {\n          const colGroupDef = abstractColDef;\n          if (groupCallback) {\n            groupCallback(colGroupDef);\n          }\n          searchForColDefs(colGroupDef.children);\n        } else {\n          const colDef = abstractColDef;\n          if (columnCallback) {\n            columnCallback(colDef);\n          }\n        }\n      });\n    };\n    if (colDefs) {\n      searchForColDefs(colDefs);\n    }\n  }\n};\n\n// community-modules/core/src/columns/columnSizeService.ts\nvar ColumnSizeService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnSizeService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnViewportService = beans.columnViewportService;\n    this.eventDispatcher = beans.columnEventDispatcher;\n    this.visibleColsService = beans.visibleColsService;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  setColumnWidths(columnWidths, shiftKey, finished, source) {\n    const sets = [];\n    columnWidths.forEach((columnWidth) => {\n      const col = this.columnModel.getColDefCol(columnWidth.key) || this.columnModel.getCol(columnWidth.key);\n      if (!col) {\n        return;\n      }\n      sets.push({\n        width: columnWidth.newWidth,\n        ratios: [1],\n        columns: [col]\n      });\n      const defaultIsShift = this.gos.get(\"colResizeDefault\") === \"shift\";\n      if (defaultIsShift) {\n        shiftKey = !shiftKey;\n      }\n      if (shiftKey) {\n        const otherCol = this.visibleColsService.getColAfter(col);\n        if (!otherCol) {\n          return;\n        }\n        const widthDiff = col.getActualWidth() - columnWidth.newWidth;\n        const otherColWidth = otherCol.getActualWidth() + widthDiff;\n        sets.push({\n          width: otherColWidth,\n          ratios: [1],\n          columns: [otherCol]\n        });\n      }\n    });\n    if (sets.length === 0) {\n      return;\n    }\n    this.resizeColumnSets({\n      resizeSets: sets,\n      finished,\n      source\n    });\n  }\n  // method takes sets of columns and resizes them. either all sets will be resized, or nothing\n  // be resized. this is used for example when user tries to resize a group and holds shift key,\n  // then both the current group (grows), and the adjacent group (shrinks), will get resized,\n  // so that's two sets for this method.\n  resizeColumnSets(params) {\n    const { resizeSets, finished, source } = params;\n    const passMinMaxCheck = !resizeSets || resizeSets.every((columnResizeSet) => this.checkMinAndMaxWidthsForSet(columnResizeSet));\n    if (!passMinMaxCheck) {\n      if (finished) {\n        const columns = resizeSets && resizeSets.length > 0 ? resizeSets[0].columns : null;\n        this.eventDispatcher.columnResized(columns, finished, source);\n      }\n      return;\n    }\n    const changedCols = [];\n    const allResizedCols = [];\n    resizeSets.forEach((set) => {\n      const { width, columns, ratios } = set;\n      const newWidths = {};\n      const finishedCols = {};\n      columns.forEach((col) => allResizedCols.push(col));\n      let finishedColsGrew = true;\n      let loopCount = 0;\n      while (finishedColsGrew) {\n        loopCount++;\n        if (loopCount > 1e3) {\n          _errorOnce(\"infinite loop in resizeColumnSets\");\n          break;\n        }\n        finishedColsGrew = false;\n        const subsetCols = [];\n        let subsetRatioTotal = 0;\n        let pixelsToDistribute = width;\n        columns.forEach((col, index) => {\n          const thisColFinished = finishedCols[col.getId()];\n          if (thisColFinished) {\n            pixelsToDistribute -= newWidths[col.getId()];\n          } else {\n            subsetCols.push(col);\n            const ratioThisCol = ratios[index];\n            subsetRatioTotal += ratioThisCol;\n          }\n        });\n        const ratioScale = 1 / subsetRatioTotal;\n        subsetCols.forEach((col, index) => {\n          const lastCol = index === subsetCols.length - 1;\n          let colNewWidth;\n          if (lastCol) {\n            colNewWidth = pixelsToDistribute;\n          } else {\n            colNewWidth = Math.round(ratios[index] * width * ratioScale);\n            pixelsToDistribute -= colNewWidth;\n          }\n          const minWidth = col.getMinWidth();\n          const maxWidth = col.getMaxWidth();\n          if (colNewWidth < minWidth) {\n            colNewWidth = minWidth;\n            finishedCols[col.getId()] = true;\n            finishedColsGrew = true;\n          } else if (maxWidth > 0 && colNewWidth > maxWidth) {\n            colNewWidth = maxWidth;\n            finishedCols[col.getId()] = true;\n            finishedColsGrew = true;\n          }\n          newWidths[col.getId()] = colNewWidth;\n        });\n      }\n      columns.forEach((col) => {\n        const newWidth = newWidths[col.getId()];\n        const actualWidth = col.getActualWidth();\n        if (actualWidth !== newWidth) {\n          col.setActualWidth(newWidth, source);\n          changedCols.push(col);\n        }\n      });\n    });\n    const atLeastOneColChanged = changedCols.length > 0;\n    let flexedCols = [];\n    if (atLeastOneColChanged) {\n      flexedCols = this.refreshFlexedColumns({ resizingCols: allResizedCols, skipSetLeft: true });\n      this.visibleColsService.setLeftValues(source);\n      this.visibleColsService.updateBodyWidths();\n      this.columnViewportService.checkViewportColumns();\n    }\n    const colsForEvent = allResizedCols.concat(flexedCols);\n    if (atLeastOneColChanged || finished) {\n      this.eventDispatcher.columnResized(colsForEvent, finished, source, flexedCols);\n    }\n  }\n  checkMinAndMaxWidthsForSet(columnResizeSet) {\n    const { columns, width } = columnResizeSet;\n    let minWidthAccumulated = 0;\n    let maxWidthAccumulated = 0;\n    let maxWidthActive = true;\n    columns.forEach((col) => {\n      const minWidth = col.getMinWidth();\n      minWidthAccumulated += minWidth || 0;\n      const maxWidth = col.getMaxWidth();\n      if (maxWidth > 0) {\n        maxWidthAccumulated += maxWidth;\n      } else {\n        maxWidthActive = false;\n      }\n    });\n    const minWidthPasses = width >= minWidthAccumulated;\n    const maxWidthPasses = !maxWidthActive || width <= maxWidthAccumulated;\n    return minWidthPasses && maxWidthPasses;\n  }\n  refreshFlexedColumns(params = {}) {\n    const source = params.source ? params.source : \"flex\";\n    if (params.viewportWidth != null) {\n      this.flexViewportWidth = params.viewportWidth;\n    }\n    if (!this.flexViewportWidth) {\n      return [];\n    }\n    const displayedCenterCols = this.visibleColsService.getCenterCols();\n    let flexAfterDisplayIndex = -1;\n    if (params.resizingCols) {\n      const allResizingCols = new Set(params.resizingCols);\n      for (let i = displayedCenterCols.length - 1; i >= 0; i--) {\n        if (allResizingCols.has(displayedCenterCols[i])) {\n          flexAfterDisplayIndex = i;\n          break;\n        }\n      }\n    }\n    let knownColumnsWidth = 0;\n    let flexingColumns = [];\n    let minimumFlexedWidth = 0;\n    let totalFlex = 0;\n    for (let i = 0; i < displayedCenterCols.length; i++) {\n      const isFlex = displayedCenterCols[i].getFlex() && i > flexAfterDisplayIndex;\n      if (isFlex) {\n        flexingColumns.push(displayedCenterCols[i]);\n        totalFlex += displayedCenterCols[i].getFlex();\n        minimumFlexedWidth += displayedCenterCols[i].getMinWidth();\n      } else {\n        knownColumnsWidth += displayedCenterCols[i].getActualWidth();\n      }\n    }\n    if (!flexingColumns.length) {\n      return [];\n    }\n    let changedColumns = [];\n    if (knownColumnsWidth + minimumFlexedWidth > this.flexViewportWidth) {\n      flexingColumns.forEach((col) => col.setActualWidth(col.getMinWidth(), source));\n      changedColumns = flexingColumns;\n      flexingColumns = [];\n    }\n    const flexingColumnSizes = [];\n    let spaceForFlexingColumns;\n    outer:\n      while (true) {\n        spaceForFlexingColumns = this.flexViewportWidth - knownColumnsWidth;\n        const spacePerFlex = spaceForFlexingColumns / totalFlex;\n        for (let i = 0; i < flexingColumns.length; i++) {\n          const col = flexingColumns[i];\n          const widthByFlexRule = spacePerFlex * col.getFlex();\n          let constrainedWidth = 0;\n          const minWidth = col.getMinWidth();\n          const maxWidth = col.getMaxWidth();\n          if (widthByFlexRule < minWidth) {\n            constrainedWidth = minWidth;\n          } else if (widthByFlexRule > maxWidth) {\n            constrainedWidth = maxWidth;\n          }\n          if (constrainedWidth) {\n            col.setActualWidth(constrainedWidth, source);\n            _removeFromUnorderedArray(flexingColumns, col);\n            totalFlex -= col.getFlex();\n            changedColumns.push(col);\n            knownColumnsWidth += col.getActualWidth();\n            continue outer;\n          }\n          flexingColumnSizes[i] = Math.floor(widthByFlexRule);\n        }\n        break;\n      }\n    let remainingSpace = spaceForFlexingColumns;\n    flexingColumns.forEach((col, i) => {\n      const size = i < flexingColumns.length - 1 ? Math.min(flexingColumnSizes[i], remainingSpace) : (\n        // ensure flex columns fill available width by growing the last column to fit available space if there is more available\n        Math.max(flexingColumnSizes[i], remainingSpace)\n      );\n      col.setActualWidth(size, source);\n      changedColumns.push(col);\n      remainingSpace -= flexingColumnSizes[i];\n    });\n    if (!params.skipSetLeft) {\n      this.visibleColsService.setLeftValues(source);\n    }\n    if (params.updateBodyWidths) {\n      this.visibleColsService.updateBodyWidths();\n    }\n    if (params.fireResizedEvent) {\n      this.eventDispatcher.columnResized(changedColumns, true, source, flexingColumns);\n    }\n    return flexingColumns;\n  }\n  // called from api\n  sizeColumnsToFit(gridWidth, source = \"sizeColumnsToFit\", silent, params) {\n    if (this.columnModel.isShouldQueueResizeOperations()) {\n      this.columnModel.pushResizeOperation(() => this.sizeColumnsToFit(gridWidth, source, silent, params));\n      return;\n    }\n    const limitsMap = {};\n    if (params) {\n      params?.columnLimits?.forEach(({ key, ...dimensions }) => {\n        limitsMap[typeof key === \"string\" ? key : key.getColId()] = dimensions;\n      });\n    }\n    const allDisplayedColumns = this.visibleColsService.getAllCols();\n    const doColumnsAlreadyFit = gridWidth === getWidthOfColsInList(allDisplayedColumns);\n    if (gridWidth <= 0 || !allDisplayedColumns.length || doColumnsAlreadyFit) {\n      return;\n    }\n    const colsToSpread = [];\n    const colsToNotSpread = [];\n    allDisplayedColumns.forEach((column) => {\n      if (column.getColDef().suppressSizeToFit === true) {\n        colsToNotSpread.push(column);\n      } else {\n        colsToSpread.push(column);\n      }\n    });\n    const colsToDispatchEventFor = colsToSpread.slice(0);\n    let finishedResizing = false;\n    const moveToNotSpread = (column) => {\n      _removeFromArray(colsToSpread, column);\n      colsToNotSpread.push(column);\n    };\n    colsToSpread.forEach((column) => {\n      column.resetActualWidth(source);\n      const widthOverride = limitsMap?.[column.getId()];\n      const minOverride = widthOverride?.minWidth ?? params?.defaultMinWidth;\n      const maxOverride = widthOverride?.maxWidth ?? params?.defaultMaxWidth;\n      const colWidth = column.getActualWidth();\n      if (typeof minOverride === \"number\" && colWidth < minOverride) {\n        column.setActualWidth(minOverride, source, true);\n      } else if (typeof maxOverride === \"number\" && colWidth > maxOverride) {\n        column.setActualWidth(maxOverride, source, true);\n      }\n    });\n    while (!finishedResizing) {\n      finishedResizing = true;\n      const availablePixels = gridWidth - getWidthOfColsInList(colsToNotSpread);\n      if (availablePixels <= 0) {\n        colsToSpread.forEach((column) => {\n          const widthOverride = limitsMap?.[column.getId()]?.minWidth ?? params?.defaultMinWidth;\n          if (typeof widthOverride === \"number\") {\n            column.setActualWidth(widthOverride, source, true);\n            return;\n          }\n          column.setMinimum(source);\n        });\n      } else {\n        const scale = availablePixels / getWidthOfColsInList(colsToSpread);\n        let pixelsForLastCol = availablePixels;\n        for (let i = colsToSpread.length - 1; i >= 0; i--) {\n          const column = colsToSpread[i];\n          const widthOverride = limitsMap?.[column.getId()];\n          const minOverride = widthOverride?.minWidth ?? params?.defaultMinWidth;\n          const maxOverride = widthOverride?.maxWidth ?? params?.defaultMaxWidth;\n          const colMinWidth = column.getMinWidth();\n          const colMaxWidth = column.getMaxWidth();\n          const minWidth = typeof minOverride === \"number\" && minOverride > colMinWidth ? minOverride : colMinWidth;\n          const maxWidth = typeof maxOverride === \"number\" && maxOverride < colMaxWidth ? maxOverride : colMaxWidth;\n          let newWidth = Math.round(column.getActualWidth() * scale);\n          if (newWidth < minWidth) {\n            newWidth = minWidth;\n            moveToNotSpread(column);\n            finishedResizing = false;\n          } else if (newWidth > maxWidth) {\n            newWidth = maxWidth;\n            moveToNotSpread(column);\n            finishedResizing = false;\n          } else if (i === 0) {\n            newWidth = pixelsForLastCol;\n          }\n          column.setActualWidth(newWidth, source, true);\n          pixelsForLastCol -= newWidth;\n        }\n      }\n    }\n    colsToDispatchEventFor.forEach((col) => {\n      col.fireColumnWidthChangedEvent(source);\n    });\n    this.visibleColsService.setLeftValues(source);\n    this.visibleColsService.updateBodyWidths();\n    if (silent) {\n      return;\n    }\n    this.eventDispatcher.columnResized(colsToDispatchEventFor, true, source);\n  }\n  applyAutosizeStrategy() {\n    const autoSizeStrategy = this.gos.get(\"autoSizeStrategy\");\n    if (!autoSizeStrategy) {\n      return;\n    }\n    const { type } = autoSizeStrategy;\n    setTimeout(() => {\n      if (type === \"fitGridWidth\") {\n        const { columnLimits: propColumnLimits, defaultMinWidth, defaultMaxWidth } = autoSizeStrategy;\n        const columnLimits = propColumnLimits?.map(({ colId: key, minWidth, maxWidth }) => ({\n          key,\n          minWidth,\n          maxWidth\n        }));\n        this.ctrlsService.getGridBodyCtrl().sizeColumnsToFit({\n          defaultMinWidth,\n          defaultMaxWidth,\n          columnLimits\n        });\n      } else if (type === \"fitProvidedWidth\") {\n        this.sizeColumnsToFit(autoSizeStrategy.width, \"sizeColumnsToFit\");\n      }\n    });\n  }\n};\n\n// community-modules/core/src/entities/agColumnGroup.ts\nfunction createUniqueColumnGroupId(groupId, instanceId) {\n  return groupId + \"_\" + instanceId;\n}\nfunction isColumnGroup(col) {\n  return col instanceof AgColumnGroup;\n}\nvar AgColumnGroup = class extends BeanStub {\n  constructor(providedColumnGroup, groupId, partId, pinned) {\n    super();\n    this.isColumn = false;\n    // depends on the open/closed state of the group, only displaying columns are stored here\n    this.displayedChildren = [];\n    // The measured height of this column's header when autoHeaderHeight is enabled\n    this.autoHeaderHeight = null;\n    this.parent = null;\n    this.groupId = groupId;\n    this.partId = partId;\n    this.providedColumnGroup = providedColumnGroup;\n    this.pinned = pinned;\n  }\n  // as the user is adding and removing columns, the groups are recalculated.\n  // this reset clears out all children, ready for children to be added again\n  reset() {\n    this.parent = null;\n    this.children = null;\n    this.displayedChildren = null;\n  }\n  getParent() {\n    return this.parent;\n  }\n  setParent(parent) {\n    this.parent = parent;\n  }\n  getUniqueId() {\n    return createUniqueColumnGroupId(this.groupId, this.partId);\n  }\n  isEmptyGroup() {\n    return this.displayedChildren.length === 0;\n  }\n  isMoving() {\n    const allLeafColumns = this.getProvidedColumnGroup().getLeafColumns();\n    if (!allLeafColumns || allLeafColumns.length === 0) {\n      return false;\n    }\n    return allLeafColumns.every((col) => col.isMoving());\n  }\n  checkLeft() {\n    this.displayedChildren.forEach((child) => {\n      if (isColumnGroup(child)) {\n        child.checkLeft();\n      }\n    });\n    if (this.displayedChildren.length > 0) {\n      if (this.gos.get(\"enableRtl\")) {\n        const lastChild = _last(this.displayedChildren);\n        const lastChildLeft = lastChild.getLeft();\n        this.setLeft(lastChildLeft);\n      } else {\n        const firstChildLeft = this.displayedChildren[0].getLeft();\n        this.setLeft(firstChildLeft);\n      }\n    } else {\n      this.setLeft(null);\n    }\n  }\n  getLeft() {\n    return this.left;\n  }\n  getOldLeft() {\n    return this.oldLeft;\n  }\n  setLeft(left) {\n    this.oldLeft = this.left;\n    if (this.left !== left) {\n      this.left = left;\n      this.dispatchLocalEvent({ type: \"leftChanged\" });\n    }\n  }\n  getPinned() {\n    return this.pinned;\n  }\n  getGroupId() {\n    return this.groupId;\n  }\n  getPartId() {\n    return this.partId;\n  }\n  getActualWidth() {\n    let groupActualWidth = 0;\n    if (this.displayedChildren) {\n      this.displayedChildren.forEach((child) => {\n        groupActualWidth += child.getActualWidth();\n      });\n    }\n    return groupActualWidth;\n  }\n  isResizable() {\n    if (!this.displayedChildren) {\n      return false;\n    }\n    let result = false;\n    this.displayedChildren.forEach((child) => {\n      if (child.isResizable()) {\n        result = true;\n      }\n    });\n    return result;\n  }\n  getMinWidth() {\n    let result = 0;\n    this.displayedChildren.forEach((groupChild) => {\n      result += groupChild.getMinWidth();\n    });\n    return result;\n  }\n  addChild(child) {\n    if (!this.children) {\n      this.children = [];\n    }\n    this.children.push(child);\n  }\n  getDisplayedChildren() {\n    return this.displayedChildren;\n  }\n  getLeafColumns() {\n    const result = [];\n    this.addLeafColumns(result);\n    return result;\n  }\n  getDisplayedLeafColumns() {\n    const result = [];\n    this.addDisplayedLeafColumns(result);\n    return result;\n  }\n  getDefinition() {\n    return this.providedColumnGroup.getColGroupDef();\n  }\n  getColGroupDef() {\n    return this.providedColumnGroup.getColGroupDef();\n  }\n  isPadding() {\n    return this.providedColumnGroup.isPadding();\n  }\n  isExpandable() {\n    return this.providedColumnGroup.isExpandable();\n  }\n  isExpanded() {\n    return this.providedColumnGroup.isExpanded();\n  }\n  setExpanded(expanded) {\n    this.providedColumnGroup.setExpanded(expanded);\n  }\n  isAutoHeaderHeight() {\n    return !!this.getColGroupDef()?.autoHeaderHeight;\n  }\n  getAutoHeaderHeight() {\n    return this.autoHeaderHeight;\n  }\n  /** Returns true if the header height has changed */\n  setAutoHeaderHeight(height) {\n    const changed = height !== this.autoHeaderHeight;\n    this.autoHeaderHeight = height;\n    return changed;\n  }\n  addDisplayedLeafColumns(leafColumns) {\n    this.displayedChildren.forEach((child) => {\n      if (isColumn(child)) {\n        leafColumns.push(child);\n      } else if (isColumnGroup(child)) {\n        child.addDisplayedLeafColumns(leafColumns);\n      }\n    });\n  }\n  addLeafColumns(leafColumns) {\n    this.children.forEach((child) => {\n      if (isColumn(child)) {\n        leafColumns.push(child);\n      } else if (isColumnGroup(child)) {\n        child.addLeafColumns(leafColumns);\n      }\n    });\n  }\n  getChildren() {\n    return this.children;\n  }\n  getColumnGroupShow() {\n    return this.providedColumnGroup.getColumnGroupShow();\n  }\n  getProvidedColumnGroup() {\n    return this.providedColumnGroup;\n  }\n  getPaddingLevel() {\n    const parent = this.getParent();\n    if (!this.isPadding() || !parent || !parent.isPadding()) {\n      return 0;\n    }\n    return 1 + parent.getPaddingLevel();\n  }\n  calculateDisplayedColumns() {\n    this.displayedChildren = [];\n    let parentWithExpansion = this;\n    while (parentWithExpansion != null && parentWithExpansion.isPadding()) {\n      parentWithExpansion = parentWithExpansion.getParent();\n    }\n    const isExpandable = parentWithExpansion ? parentWithExpansion.getProvidedColumnGroup().isExpandable() : false;\n    if (!isExpandable) {\n      this.displayedChildren = this.children;\n      this.dispatchLocalEvent({ type: \"displayedChildrenChanged\" });\n      return;\n    }\n    this.children.forEach((child) => {\n      const emptyGroup = isColumnGroup(child) && (!child.displayedChildren || !child.displayedChildren.length);\n      if (emptyGroup) {\n        return;\n      }\n      const headerGroupShow = child.getColumnGroupShow();\n      switch (headerGroupShow) {\n        case \"open\":\n          if (parentWithExpansion.getProvidedColumnGroup().isExpanded()) {\n            this.displayedChildren.push(child);\n          }\n          break;\n        case \"closed\":\n          if (!parentWithExpansion.getProvidedColumnGroup().isExpanded()) {\n            this.displayedChildren.push(child);\n          }\n          break;\n        default:\n          this.displayedChildren.push(child);\n          break;\n      }\n    });\n    this.dispatchLocalEvent({ type: \"displayedChildrenChanged\" });\n  }\n};\n\n// community-modules/core/src/columns/groupInstanceIdCreator.ts\nvar GroupInstanceIdCreator = class {\n  constructor() {\n    // this map contains keys to numbers, so we remember what the last call was\n    this.existingIds = {};\n  }\n  getInstanceIdForKey(key) {\n    const lastResult = this.existingIds[key];\n    let result;\n    if (typeof lastResult !== \"number\") {\n      result = 0;\n    } else {\n      result = lastResult + 1;\n    }\n    this.existingIds[key] = result;\n    return result;\n  }\n};\n\n// community-modules/core/src/columns/visibleColsService.ts\nvar VisibleColsService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"visibleColsService\";\n    // for fast lookup, to see if a column or group is still visible\n    this.colsAndGroupsMap = {};\n    // leave level columns of the displayed trees\n    this.columnsLeft = [];\n    this.columnsRight = [];\n    this.columnsCenter = [];\n    // all three lists above combined\n    this.columns = [];\n    this.bodyWidth = 0;\n    this.leftWidth = 0;\n    this.rightWidth = 0;\n    this.bodyWidthDirty = true;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnSizeService = beans.columnSizeService;\n    this.columnViewportService = beans.columnViewportService;\n    this.eventDispatcher = beans.columnEventDispatcher;\n  }\n  refresh(source, skipTreeBuild = false) {\n    if (!skipTreeBuild) {\n      this.buildTrees();\n    }\n    this.updateOpenClosedVisibilityInColumnGroups();\n    this.columnsLeft = pickDisplayedCols(this.treeLeft);\n    this.columnsCenter = pickDisplayedCols(this.treeCenter);\n    this.columnsRight = pickDisplayedCols(this.treeRight);\n    this.joinColsAriaOrder();\n    this.joinCols();\n    this.setLeftValues(source);\n    this.autoHeightCols = this.columns.filter((col) => col.isAutoHeight());\n    this.columnSizeService.refreshFlexedColumns();\n    this.updateBodyWidths();\n    this.columnViewportService.checkViewportColumns(false);\n    this.setFirstRightAndLastLeftPinned(source);\n    this.eventDispatcher.visibleCols(source);\n  }\n  // after setColumnWidth or updateGroupsAndPresentedCols\n  updateBodyWidths() {\n    const newBodyWidth = getWidthOfColsInList(this.columnsCenter);\n    const newLeftWidth = getWidthOfColsInList(this.columnsLeft);\n    const newRightWidth = getWidthOfColsInList(this.columnsRight);\n    this.bodyWidthDirty = this.bodyWidth !== newBodyWidth;\n    const atLeastOneChanged = this.bodyWidth !== newBodyWidth || this.leftWidth !== newLeftWidth || this.rightWidth !== newRightWidth;\n    if (atLeastOneChanged) {\n      this.bodyWidth = newBodyWidth;\n      this.leftWidth = newLeftWidth;\n      this.rightWidth = newRightWidth;\n      this.eventService.dispatchEvent({\n        type: \"columnContainerWidthChanged\"\n      });\n      this.eventService.dispatchEvent({\n        type: \"displayedColumnsWidthChanged\"\n      });\n    }\n  }\n  // sets the left pixel position of each column\n  setLeftValues(source) {\n    this.setLeftValuesOfCols(source);\n    this.setLeftValuesOfGroups();\n  }\n  setFirstRightAndLastLeftPinned(source) {\n    let lastLeft;\n    let firstRight;\n    if (this.gos.get(\"enableRtl\")) {\n      lastLeft = this.columnsLeft ? this.columnsLeft[0] : null;\n      firstRight = this.columnsRight ? _last(this.columnsRight) : null;\n    } else {\n      lastLeft = this.columnsLeft ? _last(this.columnsLeft) : null;\n      firstRight = this.columnsRight ? this.columnsRight[0] : null;\n    }\n    this.columnModel.getCols().forEach((col) => {\n      col.setLastLeftPinned(col === lastLeft, source);\n      col.setFirstRightPinned(col === firstRight, source);\n    });\n  }\n  buildTrees() {\n    const cols = this.columnModel.getColsToShow();\n    const leftCols = cols.filter((col) => col.getPinned() == \"left\");\n    const rightCols = cols.filter((col) => col.getPinned() == \"right\");\n    const centerCols = cols.filter((col) => col.getPinned() != \"left\" && col.getPinned() != \"right\");\n    const idCreator = new GroupInstanceIdCreator();\n    this.treeLeft = this.createGroups({\n      columns: leftCols,\n      idCreator,\n      pinned: \"left\",\n      oldDisplayedGroups: this.treeLeft\n    });\n    this.treeRight = this.createGroups({\n      columns: rightCols,\n      idCreator,\n      pinned: \"right\",\n      oldDisplayedGroups: this.treeRight\n    });\n    this.treeCenter = this.createGroups({\n      columns: centerCols,\n      idCreator,\n      pinned: null,\n      oldDisplayedGroups: this.treeCenter\n    });\n    this.updateColsAndGroupsMap();\n  }\n  clear() {\n    this.columnsLeft = [];\n    this.columnsRight = [];\n    this.columnsCenter = [];\n    this.columns = [];\n    this.ariaOrderColumns = [];\n  }\n  joinColsAriaOrder() {\n    const allColumns = this.columnModel.getCols();\n    const pinnedLeft = [];\n    const center = [];\n    const pinnedRight = [];\n    for (const col of allColumns) {\n      const pinned = col.getPinned();\n      if (!pinned) {\n        center.push(col);\n      } else if (pinned === true || pinned === \"left\") {\n        pinnedLeft.push(col);\n      } else {\n        pinnedRight.push(col);\n      }\n    }\n    this.ariaOrderColumns = pinnedLeft.concat(center).concat(pinnedRight);\n  }\n  getAriaColIndex(colOrGroup) {\n    let col;\n    if (isColumnGroup(colOrGroup)) {\n      col = colOrGroup.getLeafColumns()[0];\n    } else {\n      col = colOrGroup;\n    }\n    return this.ariaOrderColumns.indexOf(col) + 1;\n  }\n  getAllAutoHeightCols() {\n    return this.autoHeightCols;\n  }\n  setLeftValuesOfGroups() {\n    [this.treeLeft, this.treeRight, this.treeCenter].forEach((columns) => {\n      columns.forEach((column) => {\n        if (isColumnGroup(column)) {\n          const columnGroup = column;\n          columnGroup.checkLeft();\n        }\n      });\n    });\n  }\n  setLeftValuesOfCols(source) {\n    const primaryCols = this.columnModel.getColDefCols();\n    if (!primaryCols) {\n      return;\n    }\n    const allColumns = this.columnModel.getCols().slice(0);\n    const doingRtl = this.gos.get(\"enableRtl\");\n    [this.columnsLeft, this.columnsRight, this.columnsCenter].forEach((columns) => {\n      if (doingRtl) {\n        let left = getWidthOfColsInList(columns);\n        columns.forEach((column) => {\n          left -= column.getActualWidth();\n          column.setLeft(left, source);\n        });\n      } else {\n        let left = 0;\n        columns.forEach((column) => {\n          column.setLeft(left, source);\n          left += column.getActualWidth();\n        });\n      }\n      _removeAllFromUnorderedArray(allColumns, columns);\n    });\n    allColumns.forEach((column) => {\n      column.setLeft(null, source);\n    });\n  }\n  joinCols() {\n    if (this.gos.get(\"enableRtl\")) {\n      this.columns = this.columnsRight.concat(this.columnsCenter).concat(this.columnsLeft);\n    } else {\n      this.columns = this.columnsLeft.concat(this.columnsCenter).concat(this.columnsRight);\n    }\n  }\n  getColsCenter() {\n    return this.columnsCenter;\n  }\n  getAllTrees() {\n    if (this.treeLeft && this.treeRight && this.treeCenter) {\n      return this.treeLeft.concat(this.treeCenter).concat(this.treeRight);\n    }\n    return null;\n  }\n  // + headerRenderer -> setting pinned body width\n  getTreeLeft() {\n    return this.treeLeft;\n  }\n  // + headerRenderer -> setting pinned body width\n  getTreeRight() {\n    return this.treeRight;\n  }\n  // + headerRenderer -> setting pinned body width\n  getTreeCenter() {\n    return this.treeCenter;\n  }\n  // + csvCreator\n  getAllCols() {\n    return this.columns;\n  }\n  // gridPanel -> ensureColumnVisible\n  isColDisplayed(column) {\n    return this.getAllCols().indexOf(column) >= 0;\n  }\n  getLeftColsForRow(rowNode) {\n    const colSpanActive = this.columnModel.isColSpanActive();\n    if (!colSpanActive) {\n      return this.columnsLeft;\n    }\n    return this.getColsForRow(rowNode, this.columnsLeft);\n  }\n  getRightColsForRow(rowNode) {\n    const colSpanActive = this.columnModel.isColSpanActive();\n    if (!colSpanActive) {\n      return this.columnsRight;\n    }\n    return this.getColsForRow(rowNode, this.columnsRight);\n  }\n  getColsForRow(rowNode, displayedColumns, filterCallback, emptySpaceBeforeColumn) {\n    const result = [];\n    let lastConsideredCol = null;\n    for (let i = 0; i < displayedColumns.length; i++) {\n      const col = displayedColumns[i];\n      const maxAllowedColSpan = displayedColumns.length - i;\n      const colSpan = Math.min(col.getColSpan(rowNode), maxAllowedColSpan);\n      const columnsToCheckFilter = [col];\n      if (colSpan > 1) {\n        const colsToRemove = colSpan - 1;\n        for (let j = 1; j <= colsToRemove; j++) {\n          columnsToCheckFilter.push(displayedColumns[i + j]);\n        }\n        i += colsToRemove;\n      }\n      let filterPasses;\n      if (filterCallback) {\n        filterPasses = false;\n        columnsToCheckFilter.forEach((colForFilter) => {\n          if (filterCallback(colForFilter)) {\n            filterPasses = true;\n          }\n        });\n      } else {\n        filterPasses = true;\n      }\n      if (filterPasses) {\n        if (result.length === 0 && lastConsideredCol) {\n          const gapBeforeColumn = emptySpaceBeforeColumn ? emptySpaceBeforeColumn(col) : false;\n          if (gapBeforeColumn) {\n            result.push(lastConsideredCol);\n          }\n        }\n        result.push(col);\n      }\n      lastConsideredCol = col;\n    }\n    return result;\n  }\n  // used by:\n  // + angularGrid -> for setting body width\n  // + rowController -> setting main row widths (when inserting and resizing)\n  // need to cache this\n  getBodyContainerWidth() {\n    return this.bodyWidth;\n  }\n  getContainerWidth(pinned) {\n    switch (pinned) {\n      case \"left\":\n        return this.leftWidth;\n      case \"right\":\n        return this.rightWidth;\n      default:\n        return this.bodyWidth;\n    }\n  }\n  // + rowController -> while inserting rows\n  getCenterCols() {\n    return this.columnsCenter;\n  }\n  // + rowController -> while inserting rows\n  getLeftCols() {\n    return this.columnsLeft;\n  }\n  getRightCols() {\n    return this.columnsRight;\n  }\n  getColBefore(col) {\n    const allDisplayedColumns = this.getAllCols();\n    const oldIndex = allDisplayedColumns.indexOf(col);\n    if (oldIndex > 0) {\n      return allDisplayedColumns[oldIndex - 1];\n    }\n    return null;\n  }\n  getGroupAtDirection(columnGroup, direction) {\n    const requiredLevel = columnGroup.getProvidedColumnGroup().getLevel() + columnGroup.getPaddingLevel();\n    const colGroupLeafColumns = columnGroup.getDisplayedLeafColumns();\n    const col = direction === \"After\" ? _last(colGroupLeafColumns) : colGroupLeafColumns[0];\n    const getDisplayColMethod = `getCol${direction}`;\n    while (true) {\n      const column = this[getDisplayColMethod](col);\n      if (!column) {\n        return null;\n      }\n      const groupPointer = this.getColGroupAtLevel(column, requiredLevel);\n      if (groupPointer !== columnGroup) {\n        return groupPointer;\n      }\n    }\n  }\n  getColGroupAtLevel(column, level) {\n    let groupPointer = column.getParent();\n    let originalGroupLevel;\n    let groupPointerLevel;\n    while (true) {\n      const groupPointerProvidedColumnGroup = groupPointer.getProvidedColumnGroup();\n      originalGroupLevel = groupPointerProvidedColumnGroup.getLevel();\n      groupPointerLevel = groupPointer.getPaddingLevel();\n      if (originalGroupLevel + groupPointerLevel <= level) {\n        break;\n      }\n      groupPointer = groupPointer.getParent();\n    }\n    return groupPointer;\n  }\n  isPinningLeft() {\n    return this.columnsLeft.length > 0;\n  }\n  isPinningRight() {\n    return this.columnsRight.length > 0;\n  }\n  updateColsAndGroupsMap() {\n    this.colsAndGroupsMap = {};\n    const func = (child) => {\n      this.colsAndGroupsMap[child.getUniqueId()] = child;\n    };\n    depthFirstAllColumnTreeSearch(this.treeCenter, false, func);\n    depthFirstAllColumnTreeSearch(this.treeLeft, false, func);\n    depthFirstAllColumnTreeSearch(this.treeRight, false, func);\n  }\n  isVisible(item) {\n    const fromMap = this.colsAndGroupsMap[item.getUniqueId()];\n    return fromMap === item;\n  }\n  updateOpenClosedVisibilityInColumnGroups() {\n    const allColumnGroups = this.getAllTrees();\n    depthFirstAllColumnTreeSearch(allColumnGroups, false, (child) => {\n      if (isColumnGroup(child)) {\n        child.calculateDisplayedColumns();\n      }\n    });\n  }\n  getFirstColumn() {\n    const isRtl = this.gos.get(\"enableRtl\");\n    const queryOrder = [\n      \"getLeftCols\",\n      \"getCenterCols\",\n      \"getRightCols\"\n    ];\n    if (isRtl) {\n      queryOrder.reverse();\n    }\n    for (let i = 0; i < queryOrder.length; i++) {\n      const container = this[queryOrder[i]]();\n      if (container.length) {\n        return isRtl ? _last(container) : container[0];\n      }\n    }\n    return null;\n  }\n  // returns the group with matching colId and instanceId. If instanceId is missing,\n  // matches only on the colId.\n  getColumnGroup(colId, partId) {\n    if (!colId) {\n      return null;\n    }\n    if (isColumnGroup(colId)) {\n      return colId;\n    }\n    const allColumnGroups = this.getAllTrees();\n    const checkPartId = typeof partId === \"number\";\n    let result = null;\n    depthFirstAllColumnTreeSearch(allColumnGroups, false, (child) => {\n      if (isColumnGroup(child)) {\n        const columnGroup = child;\n        let matched;\n        if (checkPartId) {\n          matched = colId === columnGroup.getGroupId() && partId === columnGroup.getPartId();\n        } else {\n          matched = colId === columnGroup.getGroupId();\n        }\n        if (matched) {\n          result = columnGroup;\n        }\n      }\n    });\n    return result;\n  }\n  // used by:\n  // + rowRenderer -> for navigation\n  getColAfter(col) {\n    const allDisplayedColumns = this.getAllCols();\n    const oldIndex = allDisplayedColumns.indexOf(col);\n    if (oldIndex < allDisplayedColumns.length - 1) {\n      return allDisplayedColumns[oldIndex + 1];\n    }\n    return null;\n  }\n  isBodyWidthDirty() {\n    return this.bodyWidthDirty;\n  }\n  setBodyWidthDirty() {\n    this.bodyWidthDirty = true;\n  }\n  // used by:\n  // + angularGrid -> setting pinned body width\n  // note: this should be cached\n  getColsLeftWidth() {\n    return getWidthOfColsInList(this.columnsLeft);\n  }\n  // note: this should be cached\n  getDisplayedColumnsRightWidth() {\n    return getWidthOfColsInList(this.columnsRight);\n  }\n  isColAtEdge(col, edge) {\n    const allColumns = this.getAllCols();\n    if (!allColumns.length) {\n      return false;\n    }\n    const isFirst = edge === \"first\";\n    let columnToCompare;\n    if (isColumnGroup(col)) {\n      const leafColumns = col.getDisplayedLeafColumns();\n      if (!leafColumns.length) {\n        return false;\n      }\n      columnToCompare = isFirst ? leafColumns[0] : _last(leafColumns);\n    } else {\n      columnToCompare = col;\n    }\n    return (isFirst ? allColumns[0] : _last(allColumns)) === columnToCompare;\n  }\n  createGroups(params) {\n    const { columns, idCreator, pinned, oldDisplayedGroups, isStandaloneStructure } = params;\n    const oldColumnsMapped = this.mapOldGroupsById(oldDisplayedGroups);\n    const topLevelResultCols = [];\n    let groupsOrColsAtCurrentLevel = columns;\n    while (groupsOrColsAtCurrentLevel.length) {\n      const currentlyIterating = groupsOrColsAtCurrentLevel;\n      groupsOrColsAtCurrentLevel = [];\n      let lastGroupedColIdx = 0;\n      const createGroupToIndex = (to) => {\n        const from = lastGroupedColIdx;\n        lastGroupedColIdx = to;\n        const previousNode = currentlyIterating[from];\n        const previousNodeProvided = isColumnGroup(previousNode) ? previousNode.getProvidedColumnGroup() : previousNode;\n        const previousNodeParent = previousNodeProvided.getOriginalParent();\n        if (previousNodeParent == null) {\n          for (let i = from; i < to; i++) {\n            topLevelResultCols.push(currentlyIterating[i]);\n          }\n          return;\n        }\n        const newGroup = this.createColGroup(\n          previousNodeParent,\n          idCreator,\n          oldColumnsMapped,\n          pinned,\n          isStandaloneStructure\n        );\n        for (let i = from; i < to; i++) {\n          newGroup.addChild(currentlyIterating[i]);\n        }\n        groupsOrColsAtCurrentLevel.push(newGroup);\n      };\n      for (let i = 1; i < currentlyIterating.length; i++) {\n        const thisNode = currentlyIterating[i];\n        const thisNodeProvided = isColumnGroup(thisNode) ? thisNode.getProvidedColumnGroup() : thisNode;\n        const thisNodeParent = thisNodeProvided.getOriginalParent();\n        const previousNode = currentlyIterating[lastGroupedColIdx];\n        const previousNodeProvided = isColumnGroup(previousNode) ? previousNode.getProvidedColumnGroup() : previousNode;\n        const previousNodeParent = previousNodeProvided.getOriginalParent();\n        if (thisNodeParent !== previousNodeParent) {\n          createGroupToIndex(i);\n        }\n      }\n      if (lastGroupedColIdx < currentlyIterating.length) {\n        createGroupToIndex(currentlyIterating.length);\n      }\n    }\n    if (!isStandaloneStructure) {\n      this.setupParentsIntoCols(topLevelResultCols, null);\n    }\n    return topLevelResultCols;\n  }\n  createColGroup(providedGroup, groupInstanceIdCreator, oldColumnsMapped, pinned, isStandaloneStructure) {\n    const groupId = providedGroup.getGroupId();\n    const instanceId = groupInstanceIdCreator.getInstanceIdForKey(groupId);\n    const uniqueId = createUniqueColumnGroupId(groupId, instanceId);\n    let columnGroup = oldColumnsMapped[uniqueId];\n    if (columnGroup && columnGroup.getProvidedColumnGroup() !== providedGroup) {\n      columnGroup = null;\n    }\n    if (_exists(columnGroup)) {\n      columnGroup.reset();\n    } else {\n      columnGroup = new AgColumnGroup(providedGroup, groupId, instanceId, pinned);\n      if (!isStandaloneStructure) {\n        this.createBean(columnGroup);\n      }\n    }\n    return columnGroup;\n  }\n  // returns back a 2d map of ColumnGroup as follows: groupId -> instanceId -> ColumnGroup\n  mapOldGroupsById(displayedGroups) {\n    const result = {};\n    const recursive = (columnsOrGroups) => {\n      columnsOrGroups.forEach((columnOrGroup) => {\n        if (isColumnGroup(columnOrGroup)) {\n          const columnGroup = columnOrGroup;\n          result[columnOrGroup.getUniqueId()] = columnGroup;\n          recursive(columnGroup.getChildren());\n        }\n      });\n    };\n    if (displayedGroups) {\n      recursive(displayedGroups);\n    }\n    return result;\n  }\n  setupParentsIntoCols(columnsOrGroups, parent) {\n    columnsOrGroups.forEach((columnsOrGroup) => {\n      columnsOrGroup.setParent(parent);\n      if (isColumnGroup(columnsOrGroup)) {\n        const columnGroup = columnsOrGroup;\n        this.setupParentsIntoCols(columnGroup.getChildren(), columnGroup);\n      }\n    });\n  }\n};\nfunction depthFirstAllColumnTreeSearch(tree, useDisplayedChildren, callback) {\n  if (!tree) {\n    return;\n  }\n  for (let i = 0; i < tree.length; i++) {\n    const child = tree[i];\n    if (isColumnGroup(child)) {\n      const childTree = useDisplayedChildren ? child.getDisplayedChildren() : child.getChildren();\n      depthFirstAllColumnTreeSearch(childTree, useDisplayedChildren, callback);\n    }\n    callback(child);\n  }\n}\nfunction pickDisplayedCols(tree) {\n  const res = [];\n  depthFirstAllColumnTreeSearch(tree, true, (child) => {\n    if (isColumn(child)) {\n      res.push(child);\n    }\n  });\n  return res;\n}\n\n// community-modules/core/src/eventTypes.ts\nvar PUBLIC_EVENTS = [\n  \"columnEverythingChanged\",\n  \"newColumnsLoaded\",\n  \"columnPivotModeChanged\",\n  \"pivotMaxColumnsExceeded\",\n  \"columnRowGroupChanged\",\n  \"expandOrCollapseAll\",\n  \"columnPivotChanged\",\n  \"gridColumnsChanged\",\n  \"columnValueChanged\",\n  \"columnMoved\",\n  \"columnVisible\",\n  \"columnPinned\",\n  \"columnGroupOpened\",\n  \"columnResized\",\n  \"displayedColumnsChanged\",\n  \"virtualColumnsChanged\",\n  \"columnHeaderMouseOver\",\n  \"columnHeaderMouseLeave\",\n  \"columnHeaderClicked\",\n  \"columnHeaderContextMenu\",\n  \"asyncTransactionsFlushed\",\n  \"rowGroupOpened\",\n  \"rowDataUpdated\",\n  \"pinnedRowDataChanged\",\n  \"rangeSelectionChanged\",\n  \"cellSelectionChanged\",\n  \"chartCreated\",\n  \"chartRangeSelectionChanged\",\n  \"chartOptionsChanged\",\n  \"chartDestroyed\",\n  \"toolPanelVisibleChanged\",\n  \"toolPanelSizeChanged\",\n  \"modelUpdated\",\n  \"cutStart\",\n  \"cutEnd\",\n  \"pasteStart\",\n  \"pasteEnd\",\n  \"fillStart\",\n  \"fillEnd\",\n  \"cellSelectionDeleteStart\",\n  \"cellSelectionDeleteEnd\",\n  \"rangeDeleteStart\",\n  \"rangeDeleteEnd\",\n  \"undoStarted\",\n  \"undoEnded\",\n  \"redoStarted\",\n  \"redoEnded\",\n  \"cellClicked\",\n  \"cellDoubleClicked\",\n  \"cellMouseDown\",\n  \"cellContextMenu\",\n  \"cellValueChanged\",\n  \"cellEditRequest\",\n  \"rowValueChanged\",\n  \"headerFocused\",\n  \"cellFocused\",\n  \"rowSelected\",\n  \"selectionChanged\",\n  \"tooltipShow\",\n  \"tooltipHide\",\n  \"cellKeyDown\",\n  \"cellMouseOver\",\n  \"cellMouseOut\",\n  \"filterChanged\",\n  \"filterModified\",\n  \"filterOpened\",\n  \"advancedFilterBuilderVisibleChanged\",\n  \"sortChanged\",\n  \"virtualRowRemoved\",\n  \"rowClicked\",\n  \"rowDoubleClicked\",\n  \"gridReady\",\n  \"gridPreDestroyed\",\n  \"gridSizeChanged\",\n  \"viewportChanged\",\n  \"firstDataRendered\",\n  \"dragStarted\",\n  \"dragStopped\",\n  \"dragCancelled\",\n  \"rowEditingStarted\",\n  \"rowEditingStopped\",\n  \"cellEditingStarted\",\n  \"cellEditingStopped\",\n  \"bodyScroll\",\n  \"bodyScrollEnd\",\n  \"paginationChanged\",\n  \"componentStateChanged\",\n  \"storeRefreshed\",\n  \"stateUpdated\",\n  \"columnMenuVisibleChanged\",\n  \"contextMenuVisibleChanged\",\n  \"rowDragEnter\",\n  \"rowDragMove\",\n  \"rowDragLeave\",\n  \"rowDragEnd\",\n  \"rowDragCancel\"\n];\nvar INTERNAL_EVENTS = [\n  \"scrollbarWidthChanged\",\n  \"keyShortcutChangedCellStart\",\n  \"keyShortcutChangedCellEnd\",\n  \"pinnedHeightChanged\",\n  \"cellFocusCleared\",\n  \"fullWidthRowFocused\",\n  \"checkboxChanged\",\n  \"heightScaleChanged\",\n  \"suppressMovableColumns\",\n  \"suppressMenuHide\",\n  \"suppressFieldDotNotation\",\n  \"columnPanelItemDragStart\",\n  \"columnPanelItemDragEnd\",\n  \"bodyHeightChanged\",\n  \"columnContainerWidthChanged\",\n  \"displayedColumnsWidthChanged\",\n  \"scrollVisibilityChanged\",\n  \"scrollGapChanged\",\n  \"columnHoverChanged\",\n  \"flashCells\",\n  \"paginationPixelOffsetChanged\",\n  \"displayedRowsChanged\",\n  \"leftPinnedWidthChanged\",\n  \"rightPinnedWidthChanged\",\n  \"rowContainerHeightChanged\",\n  \"headerHeightChanged\",\n  \"columnGroupHeaderHeightChanged\",\n  \"columnHeaderHeightChanged\",\n  \"gridStylesChanged\",\n  \"storeUpdated\",\n  \"filterDestroyed\",\n  \"rowDataUpdateStarted\",\n  \"rowCountReady\",\n  \"advancedFilterEnabledChanged\",\n  \"dataTypesInferred\",\n  \"fieldValueChanged\",\n  \"fieldPickerValueSelected\",\n  \"richSelectListRowSelected\",\n  \"sideBarUpdated\",\n  \"alignedGridScroll\",\n  \"alignedGridColumn\",\n  \"gridOptionsChanged\",\n  \"chartTitleEdit\",\n  \"recalculateRowBounds\",\n  \"stickyTopOffsetChanged\",\n  \"overlayExclusiveChanged\"\n];\nvar ALL_EVENTS = [...PUBLIC_EVENTS, ...INTERNAL_EVENTS];\n\n// community-modules/core/src/propertyKeys.ts\nvar INITIAL_GRID_OPTION_KEYS = {\n  enableBrowserTooltips: true,\n  tooltipTrigger: true,\n  tooltipMouseTrack: true,\n  tooltipShowMode: true,\n  tooltipInteraction: true,\n  defaultColGroupDef: true,\n  suppressAutoSize: true,\n  skipHeaderOnAutoSize: true,\n  autoSizeStrategy: true,\n  components: true,\n  stopEditingWhenCellsLoseFocus: true,\n  undoRedoCellEditing: true,\n  undoRedoCellEditingLimit: true,\n  excelStyles: true,\n  cacheQuickFilter: true,\n  advancedFilterModel: true,\n  customChartThemes: true,\n  chartThemeOverrides: true,\n  chartToolPanelsDef: true,\n  loadingCellRendererSelector: true,\n  localeText: true,\n  keepDetailRows: true,\n  keepDetailRowsCount: true,\n  detailRowHeight: true,\n  detailRowAutoHeight: true,\n  tabIndex: true,\n  valueCache: true,\n  valueCacheNeverExpires: true,\n  enableCellExpressions: true,\n  suppressTouch: true,\n  suppressAsyncEvents: true,\n  suppressBrowserResizeObserver: true,\n  suppressPropertyNamesCheck: true,\n  debug: true,\n  dragAndDropImageComponent: true,\n  loadingOverlayComponent: true,\n  suppressLoadingOverlay: true,\n  noRowsOverlayComponent: true,\n  paginationPageSizeSelector: true,\n  paginateChildRows: true,\n  pivotPanelShow: true,\n  pivotSuppressAutoColumn: true,\n  suppressExpandablePivotGroups: true,\n  aggFuncs: true,\n  suppressAggFuncInHeader: true,\n  allowShowChangeAfterFilter: true,\n  ensureDomOrder: true,\n  enableRtl: true,\n  suppressColumnVirtualisation: true,\n  suppressMaxRenderedRowRestriction: true,\n  suppressRowVirtualisation: true,\n  rowDragText: true,\n  suppressGroupMaintainValueType: true,\n  groupLockGroupColumns: true,\n  rowGroupPanelSuppressSort: true,\n  suppressGroupRowsSticky: true,\n  rowModelType: true,\n  cacheOverflowSize: true,\n  infiniteInitialRowCount: true,\n  serverSideInitialRowCount: true,\n  suppressServerSideInfiniteScroll: true,\n  maxBlocksInCache: true,\n  maxConcurrentDatasourceRequests: true,\n  blockLoadDebounceMillis: true,\n  serverSideOnlyRefreshFilteredGroups: true,\n  serverSidePivotResultFieldSeparator: true,\n  viewportRowModelPageSize: true,\n  viewportRowModelBufferSize: true,\n  debounceVerticalScrollbar: true,\n  suppressAnimationFrame: true,\n  suppressPreventDefaultOnMouseWheel: true,\n  scrollbarWidth: true,\n  icons: true,\n  suppressRowTransform: true,\n  gridId: true,\n  enableGroupEdit: true,\n  initialState: true,\n  processUnpinnedColumns: true,\n  createChartContainer: true,\n  getLocaleText: true,\n  getRowId: true,\n  reactiveCustomComponents: true,\n  columnMenu: true,\n  suppressSetFilterByDefault: true\n};\nvar _PropertyKeys = class _PropertyKeys {\n};\n_PropertyKeys.STRING_PROPERTIES = [\n  \"overlayLoadingTemplate\",\n  \"overlayNoRowsTemplate\",\n  \"gridId\",\n  \"quickFilterText\",\n  \"rowModelType\",\n  \"editType\",\n  \"domLayout\",\n  \"clipboardDelimiter\",\n  \"rowGroupPanelShow\",\n  \"multiSortKey\",\n  \"pivotColumnGroupTotals\",\n  \"pivotRowTotals\",\n  \"pivotPanelShow\",\n  \"fillHandleDirection\",\n  \"groupDisplayType\",\n  \"treeDataDisplayType\",\n  \"colResizeDefault\",\n  \"tooltipTrigger\",\n  \"serverSidePivotResultFieldSeparator\",\n  \"columnMenu\",\n  \"tooltipShowMode\",\n  \"grandTotalRow\"\n];\n_PropertyKeys.OBJECT_PROPERTIES = [\n  \"components\",\n  \"rowStyle\",\n  \"context\",\n  \"autoGroupColumnDef\",\n  \"localeText\",\n  \"icons\",\n  \"datasource\",\n  \"dragAndDropImageComponentParams\",\n  \"serverSideDatasource\",\n  \"viewportDatasource\",\n  \"groupRowRendererParams\",\n  \"aggFuncs\",\n  \"fullWidthCellRendererParams\",\n  \"defaultColGroupDef\",\n  \"defaultColDef\",\n  \"defaultCsvExportParams\",\n  \"defaultExcelExportParams\",\n  \"columnTypes\",\n  \"rowClassRules\",\n  \"detailCellRendererParams\",\n  \"loadingCellRendererParams\",\n  \"loadingOverlayComponentParams\",\n  \"noRowsOverlayComponentParams\",\n  \"popupParent\",\n  \"statusBar\",\n  \"sideBar\",\n  \"theme\",\n  \"chartThemeOverrides\",\n  \"customChartThemes\",\n  \"chartToolPanelsDef\",\n  \"dataTypeDefinitions\",\n  \"advancedFilterModel\",\n  \"advancedFilterParent\",\n  \"advancedFilterBuilderParams\",\n  \"initialState\",\n  \"autoSizeStrategy\",\n  \"cellSelection\",\n  \"selectionColumnDef\"\n];\n_PropertyKeys.ARRAY_PROPERTIES = [\n  \"sortingOrder\",\n  \"alignedGrids\",\n  \"rowData\",\n  \"columnDefs\",\n  \"excelStyles\",\n  \"pinnedTopRowData\",\n  \"pinnedBottomRowData\",\n  \"chartThemes\",\n  \"rowClass\",\n  \"paginationPageSizeSelector\"\n];\n// These properties are coerced at runtime, do not do union types\n_PropertyKeys.NUMBER_PROPERTIES = [\n  \"rowHeight\",\n  \"detailRowHeight\",\n  \"rowBuffer\",\n  \"headerHeight\",\n  \"groupHeaderHeight\",\n  \"groupLockGroupColumns\",\n  \"floatingFiltersHeight\",\n  \"pivotHeaderHeight\",\n  \"pivotGroupHeaderHeight\",\n  \"groupDefaultExpanded\",\n  \"pivotDefaultExpanded\",\n  \"viewportRowModelPageSize\",\n  \"viewportRowModelBufferSize\",\n  \"autoSizePadding\",\n  \"maxBlocksInCache\",\n  \"maxConcurrentDatasourceRequests\",\n  \"tooltipShowDelay\",\n  \"tooltipHideDelay\",\n  \"cacheOverflowSize\",\n  \"paginationPageSize\",\n  \"cacheBlockSize\",\n  \"infiniteInitialRowCount\",\n  \"serverSideInitialRowCount\",\n  \"scrollbarWidth\",\n  \"asyncTransactionWaitMillis\",\n  \"blockLoadDebounceMillis\",\n  \"keepDetailRowsCount\",\n  \"undoRedoCellEditingLimit\",\n  \"cellFlashDelay\",\n  \"cellFadeDelay\",\n  \"cellFlashDuration\",\n  \"cellFadeDuration\",\n  \"tabIndex\",\n  \"pivotMaxGeneratedColumns\"\n];\n// These properties are coerced at runtime, do not do union types\n_PropertyKeys.BOOLEAN_PROPERTIES = [\n  \"suppressMakeColumnVisibleAfterUnGroup\",\n  \"suppressRowClickSelection\",\n  \"suppressCellFocus\",\n  \"suppressHeaderFocus\",\n  \"suppressHorizontalScroll\",\n  \"groupSelectsChildren\",\n  \"alwaysShowHorizontalScroll\",\n  \"alwaysShowVerticalScroll\",\n  \"debug\",\n  \"enableBrowserTooltips\",\n  \"enableCellExpressions\",\n  \"groupIncludeTotalFooter\",\n  \"groupSuppressBlankHeader\",\n  \"suppressMenuHide\",\n  \"suppressRowDeselection\",\n  \"unSortIcon\",\n  \"suppressMultiSort\",\n  \"alwaysMultiSort\",\n  \"singleClickEdit\",\n  \"suppressLoadingOverlay\",\n  \"suppressNoRowsOverlay\",\n  \"suppressAutoSize\",\n  \"skipHeaderOnAutoSize\",\n  \"suppressColumnMoveAnimation\",\n  \"suppressMoveWhenColumnDragging\",\n  \"suppressMovableColumns\",\n  \"suppressFieldDotNotation\",\n  \"enableRangeSelection\",\n  \"enableRangeHandle\",\n  \"enableFillHandle\",\n  \"suppressClearOnFillReduction\",\n  \"deltaSort\",\n  \"suppressTouch\",\n  \"suppressAsyncEvents\",\n  \"allowContextMenuWithControlKey\",\n  \"suppressContextMenu\",\n  \"enableCellChangeFlash\",\n  \"suppressDragLeaveHidesColumns\",\n  \"suppressRowGroupHidesColumns\",\n  \"suppressMiddleClickScrolls\",\n  \"suppressPreventDefaultOnMouseWheel\",\n  \"suppressCopyRowsToClipboard\",\n  \"copyHeadersToClipboard\",\n  \"copyGroupHeadersToClipboard\",\n  \"pivotMode\",\n  \"suppressAggFuncInHeader\",\n  \"suppressColumnVirtualisation\",\n  \"alwaysAggregateAtRootLevel\",\n  \"suppressFocusAfterRefresh\",\n  \"functionsReadOnly\",\n  \"animateRows\",\n  \"groupSelectsFiltered\",\n  \"groupRemoveSingleChildren\",\n  \"groupRemoveLowestSingleChildren\",\n  \"enableRtl\",\n  \"suppressClickEdit\",\n  \"rowDragEntireRow\",\n  \"rowDragManaged\",\n  \"suppressRowDrag\",\n  \"suppressMoveWhenRowDragging\",\n  \"rowDragMultiRow\",\n  \"enableGroupEdit\",\n  \"embedFullWidthRows\",\n  \"suppressPaginationPanel\",\n  \"groupHideOpenParents\",\n  \"groupAllowUnbalanced\",\n  \"pagination\",\n  \"paginationAutoPageSize\",\n  \"suppressScrollOnNewData\",\n  \"suppressScrollWhenPopupsAreOpen\",\n  \"purgeClosedRowNodes\",\n  \"cacheQuickFilter\",\n  \"includeHiddenColumnsInQuickFilter\",\n  \"ensureDomOrder\",\n  \"accentedSort\",\n  \"suppressChangeDetection\",\n  \"valueCache\",\n  \"valueCacheNeverExpires\",\n  \"aggregateOnlyChangedColumns\",\n  \"suppressAnimationFrame\",\n  \"suppressExcelExport\",\n  \"suppressCsvExport\",\n  \"includeHiddenColumnsInAdvancedFilter\",\n  \"suppressMultiRangeSelection\",\n  \"enterNavigatesVerticallyAfterEdit\",\n  \"enterNavigatesVertically\",\n  \"suppressPropertyNamesCheck\",\n  \"rowMultiSelectWithClick\",\n  \"suppressRowHoverHighlight\",\n  \"suppressRowTransform\",\n  \"suppressClipboardPaste\",\n  \"suppressLastEmptyLineOnPaste\",\n  \"enableCharts\",\n  \"suppressMaintainUnsortedOrder\",\n  \"enableCellTextSelection\",\n  \"suppressBrowserResizeObserver\",\n  \"suppressMaxRenderedRowRestriction\",\n  \"excludeChildrenWhenTreeDataFiltering\",\n  \"tooltipMouseTrack\",\n  \"tooltipInteraction\",\n  \"keepDetailRows\",\n  \"paginateChildRows\",\n  \"preventDefaultOnContextMenu\",\n  \"undoRedoCellEditing\",\n  \"allowDragFromColumnsToolPanel\",\n  \"pivotSuppressAutoColumn\",\n  \"suppressExpandablePivotGroups\",\n  \"debounceVerticalScrollbar\",\n  \"detailRowAutoHeight\",\n  \"serverSideSortAllLevels\",\n  \"serverSideEnableClientSideSort\",\n  \"serverSideOnlyRefreshFilteredGroups\",\n  \"serverSideSortOnServer\",\n  \"serverSideFilterOnServer\",\n  \"suppressAggFilteredOnly\",\n  \"showOpenedGroup\",\n  \"suppressClipboardApi\",\n  \"suppressModelUpdateAfterUpdateTransaction\",\n  \"stopEditingWhenCellsLoseFocus\",\n  \"groupMaintainOrder\",\n  \"columnHoverHighlight\",\n  \"readOnlyEdit\",\n  \"suppressRowVirtualisation\",\n  \"enableCellEditingOnBackspace\",\n  \"resetRowDataOnUpdate\",\n  \"removePivotHeaderRowWhenSingleValueColumn\",\n  \"suppressCopySingleCellRanges\",\n  \"suppressGroupRowsSticky\",\n  \"suppressCutToClipboard\",\n  \"suppressServerSideInfiniteScroll\",\n  \"rowGroupPanelSuppressSort\",\n  \"allowShowChangeAfterFilter\",\n  \"enableAdvancedFilter\",\n  \"masterDetail\",\n  \"treeData\",\n  \"suppressGroupMaintainValueType\",\n  \"reactiveCustomComponents\",\n  \"applyQuickFilterBeforePivotOrAgg\",\n  \"suppressServerSideFullWidthLoadingRow\",\n  \"suppressAdvancedFilterEval\",\n  \"loading\",\n  \"maintainColumnOrder\",\n  \"enableStrictPivotColumnOrder\",\n  \"suppressSetFilterByDefault\"\n];\n// If property does not fit above, i.e union that should not be coerced.\n_PropertyKeys.OTHER_PROPERTIES = [\n  \"suppressStickyTotalRow\",\n  // needs avoid coercion to boolean so that we can warn if it's unset\n  \"loadThemeGoogleFonts\",\n  \"rowSelection\"\n];\n_PropertyKeys.FUNCTION_PROPERTIES = [\n  \"doesExternalFilterPass\",\n  \"processPivotResultColDef\",\n  \"processPivotResultColGroupDef\",\n  \"getBusinessKeyForNode\",\n  \"isRowSelectable\",\n  \"rowDragText\",\n  \"groupRowRenderer\",\n  \"dragAndDropImageComponent\",\n  \"fullWidthCellRenderer\",\n  \"loadingCellRenderer\",\n  \"loadingOverlayComponent\",\n  \"noRowsOverlayComponent\",\n  \"detailCellRenderer\",\n  \"quickFilterParser\",\n  \"quickFilterMatcher\",\n  \"getLocaleText\",\n  \"isExternalFilterPresent\",\n  \"getRowHeight\",\n  \"getRowClass\",\n  \"getRowStyle\",\n  \"getContextMenuItems\",\n  \"getMainMenuItems\",\n  \"processRowPostCreate\",\n  \"processCellForClipboard\",\n  \"getGroupRowAgg\",\n  \"isFullWidthRow\",\n  \"sendToClipboard\",\n  \"focusGridInnerElement\",\n  \"navigateToNextHeader\",\n  \"tabToNextHeader\",\n  \"navigateToNextCell\",\n  \"tabToNextCell\",\n  \"processCellFromClipboard\",\n  \"getDocument\",\n  \"postProcessPopup\",\n  \"getChildCount\",\n  \"getDataPath\",\n  \"isRowMaster\",\n  \"postSortRows\",\n  \"processHeaderForClipboard\",\n  \"processUnpinnedColumns\",\n  \"processGroupHeaderForClipboard\",\n  \"paginationNumberFormatter\",\n  \"processDataFromClipboard\",\n  \"getServerSideGroupKey\",\n  \"isServerSideGroup\",\n  \"createChartContainer\",\n  \"getChartToolbarItems\",\n  \"fillOperation\",\n  \"isApplyServerSideTransaction\",\n  \"getServerSideGroupLevelParams\",\n  \"isServerSideGroupOpenByDefault\",\n  \"isGroupOpenByDefault\",\n  \"initialGroupOrderComparator\",\n  \"groupIncludeFooter\",\n  \"loadingCellRendererSelector\",\n  \"getRowId\",\n  \"groupAggFiltering\",\n  \"chartMenuItems\",\n  \"groupTotalRow\"\n];\n_PropertyKeys.ALL_PROPERTIES = [\n  ..._PropertyKeys.ARRAY_PROPERTIES,\n  ..._PropertyKeys.OBJECT_PROPERTIES,\n  ..._PropertyKeys.STRING_PROPERTIES,\n  ..._PropertyKeys.NUMBER_PROPERTIES,\n  ..._PropertyKeys.FUNCTION_PROPERTIES,\n  ..._PropertyKeys.BOOLEAN_PROPERTIES,\n  ..._PropertyKeys.OTHER_PROPERTIES\n];\nvar PropertyKeys = _PropertyKeys;\n\n// community-modules/core/src/components/componentUtil.ts\nvar _ComponentUtil = class _ComponentUtil {\n  static getCallbackForEvent(eventName) {\n    if (!eventName || eventName.length < 2) {\n      return eventName;\n    }\n    return \"on\" + eventName[0].toUpperCase() + eventName.substring(1);\n  }\n};\n_ComponentUtil.VUE_OMITTED_PROPERTY = \"AG-VUE-OMITTED-PROPERTY\";\n_ComponentUtil.PUBLIC_EVENTS = PUBLIC_EVENTS;\n// onXXX methods, based on the above events\n_ComponentUtil.EVENT_CALLBACKS = ALL_EVENTS.map((event) => _ComponentUtil.getCallbackForEvent(event));\n_ComponentUtil.BOOLEAN_PROPERTIES = PropertyKeys.BOOLEAN_PROPERTIES;\n_ComponentUtil.ALL_PROPERTIES = PropertyKeys.ALL_PROPERTIES;\n_ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS = [..._ComponentUtil.ALL_PROPERTIES, ..._ComponentUtil.EVENT_CALLBACKS];\n_ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS_SET = new Set(_ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS);\nvar ComponentUtil = _ComponentUtil;\nfunction _combineAttributesAndGridOptions(gridOptions, component) {\n  if (typeof gridOptions !== \"object\") {\n    gridOptions = {};\n  }\n  const mergedOptions = { ...gridOptions };\n  const keys = ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS;\n  keys.forEach((key) => {\n    const value = component[key];\n    if (typeof value !== \"undefined\" && value !== ComponentUtil.VUE_OMITTED_PROPERTY) {\n      mergedOptions[key] = value;\n    }\n  });\n  return mergedOptions;\n}\nfunction _processOnChange(changes, api) {\n  if (!changes) {\n    return;\n  }\n  const gridChanges = {};\n  let hasChanges = false;\n  Object.keys(changes).filter((key) => ComponentUtil.ALL_PROPERTIES_AND_CALLBACKS_SET.has(key)).forEach((key) => {\n    gridChanges[key] = changes[key];\n    hasChanges = true;\n  });\n  if (!hasChanges) {\n    return;\n  }\n  const internalUpdateEvent = {\n    type: \"gridOptionsChanged\",\n    options: gridChanges\n  };\n  api.dispatchEvent(internalUpdateEvent);\n  const event = {\n    type: \"componentStateChanged\"\n  };\n  _iterateObject(gridChanges, (key, value) => {\n    event[key] = value;\n  });\n  api.dispatchEvent(event);\n}\n\n// community-modules/core/src/components/emptyBean.ts\nvar EmptyBean = class extends BeanStub {\n};\nfunction setupCompBean(ctrl, ctx, compBean) {\n  if (compBean) {\n    ctrl.addDestroyFunc(() => ctx.destroyBean(compBean));\n  }\n  return compBean ?? ctrl;\n}\n\n// community-modules/core/src/rendering/cssClassManager.ts\nvar CssClassManager = class {\n  constructor(getGui) {\n    // to minimise DOM hits, we only apply CSS classes if they have changed. as adding a CSS class that is already\n    // there, or removing one that wasn't present, all takes CPU.\n    this.cssClassStates = {};\n    this.getGui = getGui;\n  }\n  addCssClass(className) {\n    const list = (className || \"\").split(\" \");\n    if (list.length > 1) {\n      list.forEach((cls) => this.addCssClass(cls));\n      return;\n    }\n    const updateNeeded = this.cssClassStates[className] !== true;\n    if (updateNeeded && className.length) {\n      const eGui = this.getGui();\n      if (eGui) {\n        eGui.classList.add(className);\n      }\n      this.cssClassStates[className] = true;\n    }\n  }\n  removeCssClass(className) {\n    const list = (className || \"\").split(\" \");\n    if (list.length > 1) {\n      list.forEach((cls) => this.removeCssClass(cls));\n      return;\n    }\n    const updateNeeded = this.cssClassStates[className] !== false;\n    if (updateNeeded && className.length) {\n      const eGui = this.getGui();\n      if (eGui) {\n        eGui.classList.remove(className);\n      }\n      this.cssClassStates[className] = false;\n    }\n  }\n  containsCssClass(className) {\n    const eGui = this.getGui();\n    if (!eGui) {\n      return false;\n    }\n    return eGui.classList.contains(className);\n  }\n  addOrRemoveCssClass(className, addOrRemove) {\n    if (!className) {\n      return;\n    }\n    if (className.indexOf(\" \") >= 0) {\n      const list = (className || \"\").split(\" \");\n      if (list.length > 1) {\n        list.forEach((cls) => this.addOrRemoveCssClass(cls, addOrRemove));\n        return;\n      }\n    }\n    const updateNeeded = this.cssClassStates[className] !== addOrRemove;\n    if (updateNeeded && className.length) {\n      const eGui = this.getGui();\n      if (eGui) {\n        eGui.classList.toggle(className, addOrRemove);\n      }\n      this.cssClassStates[className] = addOrRemove;\n    }\n  }\n};\n\n// community-modules/core/src/utils/aria.ts\nfunction _toggleAriaAttribute(element, attribute, value) {\n  if (value == null || typeof value === \"string\" && value == \"\") {\n    _removeAriaAttribute(element, attribute);\n  } else {\n    _setAriaAttribute(element, attribute, value);\n  }\n}\nfunction _setAriaAttribute(element, attribute, value) {\n  element.setAttribute(_ariaAttributeName(attribute), value.toString());\n}\nfunction _removeAriaAttribute(element, attribute) {\n  element.removeAttribute(_ariaAttributeName(attribute));\n}\nfunction _ariaAttributeName(attribute) {\n  return `aria-${attribute}`;\n}\nfunction _setAriaRole(element, role) {\n  if (role) {\n    element.setAttribute(\"role\", role);\n  } else {\n    element.removeAttribute(\"role\");\n  }\n}\nfunction _getAriaSortState(sortDirection) {\n  let sort;\n  if (sortDirection === \"asc\") {\n    sort = \"ascending\";\n  } else if (sortDirection === \"desc\") {\n    sort = \"descending\";\n  } else if (sortDirection === \"mixed\") {\n    sort = \"other\";\n  } else {\n    sort = \"none\";\n  }\n  return sort;\n}\nfunction _getAriaPosInSet(element) {\n  return parseInt(element.getAttribute(\"aria-posinset\"), 10);\n}\nfunction _getAriaLabel(element) {\n  return element.getAttribute(\"aria-label\");\n}\nfunction _setAriaLabel(element, label) {\n  _toggleAriaAttribute(element, \"label\", label);\n}\nfunction _setAriaLabelledBy(element, labelledBy) {\n  _toggleAriaAttribute(element, \"labelledby\", labelledBy);\n}\nfunction _setAriaDescribedBy(element, describedby) {\n  _toggleAriaAttribute(element, \"describedby\", describedby);\n}\nfunction _setAriaLive(element, live) {\n  _toggleAriaAttribute(element, \"live\", live);\n}\nfunction _setAriaAtomic(element, atomic) {\n  _toggleAriaAttribute(element, \"atomic\", atomic);\n}\nfunction _setAriaRelevant(element, relevant) {\n  _toggleAriaAttribute(element, \"relevant\", relevant);\n}\nfunction _setAriaLevel(element, level) {\n  _toggleAriaAttribute(element, \"level\", level);\n}\nfunction _setAriaDisabled(element, disabled) {\n  _toggleAriaAttribute(element, \"disabled\", disabled);\n}\nfunction _setAriaHidden(element, hidden) {\n  _toggleAriaAttribute(element, \"hidden\", hidden);\n}\nfunction _setAriaActiveDescendant(element, descendantId) {\n  _toggleAriaAttribute(element, \"activedescendant\", descendantId);\n}\nfunction _setAriaExpanded(element, expanded) {\n  _setAriaAttribute(element, \"expanded\", expanded);\n}\nfunction _removeAriaExpanded(element) {\n  _removeAriaAttribute(element, \"expanded\");\n}\nfunction _setAriaSetSize(element, setsize) {\n  _setAriaAttribute(element, \"setsize\", setsize);\n}\nfunction _setAriaPosInSet(element, position) {\n  _setAriaAttribute(element, \"posinset\", position);\n}\nfunction _setAriaMultiSelectable(element, multiSelectable) {\n  _setAriaAttribute(element, \"multiselectable\", multiSelectable);\n}\nfunction _setAriaRowCount(element, rowCount) {\n  _setAriaAttribute(element, \"rowcount\", rowCount);\n}\nfunction _setAriaRowIndex(element, rowIndex) {\n  _setAriaAttribute(element, \"rowindex\", rowIndex);\n}\nfunction _setAriaColCount(element, colCount) {\n  _setAriaAttribute(element, \"colcount\", colCount);\n}\nfunction _setAriaColIndex(element, colIndex) {\n  _setAriaAttribute(element, \"colindex\", colIndex);\n}\nfunction _setAriaColSpan(element, colSpan) {\n  _setAriaAttribute(element, \"colspan\", colSpan);\n}\nfunction _setAriaSort(element, sort) {\n  _setAriaAttribute(element, \"sort\", sort);\n}\nfunction _removeAriaSort(element) {\n  _removeAriaAttribute(element, \"sort\");\n}\nfunction _setAriaSelected(element, selected) {\n  _toggleAriaAttribute(element, \"selected\", selected);\n}\nfunction _setAriaChecked(element, checked) {\n  _setAriaAttribute(element, \"checked\", checked === void 0 ? \"mixed\" : checked);\n}\nfunction _setAriaControls(controllerElement, controlledElement) {\n  _toggleAriaAttribute(controllerElement, \"controls\", controlledElement.id);\n  _setAriaLabelledBy(controlledElement, controllerElement.id);\n}\nfunction _getAriaCheckboxStateName(translate, state) {\n  return state === void 0 ? translate(\"ariaIndeterminate\", \"indeterminate\") : state === true ? translate(\"ariaChecked\", \"checked\") : translate(\"ariaUnchecked\", \"unchecked\");\n}\n\n// community-modules/core/src/utils/dom.ts\nfunction _radioCssClass(element, elementClass, otherElementClass) {\n  const parent = element.parentElement;\n  let sibling = parent && parent.firstChild;\n  while (sibling) {\n    if (elementClass) {\n      sibling.classList.toggle(elementClass, sibling === element);\n    }\n    if (otherElementClass) {\n      sibling.classList.toggle(otherElementClass, sibling !== element);\n    }\n    sibling = sibling.nextSibling;\n  }\n}\nvar FOCUSABLE_SELECTOR = \"[tabindex], input, select, button, textarea, [href]\";\nvar FOCUSABLE_EXCLUDE = \"[disabled], .ag-disabled:not(.ag-button), .ag-disabled *\";\nfunction _isFocusableFormField(element) {\n  const matches = Element.prototype.matches || Element.prototype.msMatchesSelector;\n  const inputSelector = \"input, select, button, textarea\";\n  const isFocusable = matches.call(element, inputSelector);\n  const isNotFocusable = matches.call(element, FOCUSABLE_EXCLUDE);\n  const isElementVisible = _isVisible(element);\n  const focusable = isFocusable && !isNotFocusable && isElementVisible;\n  return focusable;\n}\nfunction _setDisplayed(element, displayed, options = {}) {\n  const { skipAriaHidden } = options;\n  element.classList.toggle(\"ag-hidden\", !displayed);\n  if (!skipAriaHidden) {\n    _setAriaHidden(element, !displayed);\n  }\n}\nfunction _setVisible(element, visible, options = {}) {\n  const { skipAriaHidden } = options;\n  element.classList.toggle(\"ag-invisible\", !visible);\n  if (!skipAriaHidden) {\n    _setAriaHidden(element, !visible);\n  }\n}\nfunction _setDisabled(element, disabled) {\n  const attributeName = \"disabled\";\n  const addOrRemoveDisabledAttribute = disabled ? (e) => e.setAttribute(attributeName, \"\") : (e) => e.removeAttribute(attributeName);\n  addOrRemoveDisabledAttribute(element);\n  _nodeListForEach(element.querySelectorAll(\"input\"), (input) => addOrRemoveDisabledAttribute(input));\n}\nfunction _isElementChildOfClass(element, cls, maxNest) {\n  let counter = 0;\n  while (element) {\n    if (element.classList.contains(cls)) {\n      return true;\n    }\n    element = element.parentElement;\n    if (typeof maxNest == \"number\") {\n      if (++counter > maxNest) {\n        break;\n      }\n    } else if (element === maxNest) {\n      break;\n    }\n  }\n  return false;\n}\nfunction _getElementSize(el) {\n  const {\n    height,\n    width,\n    borderTopWidth,\n    borderRightWidth,\n    borderBottomWidth,\n    borderLeftWidth,\n    paddingTop,\n    paddingRight,\n    paddingBottom,\n    paddingLeft,\n    marginTop,\n    marginRight,\n    marginBottom,\n    marginLeft,\n    boxSizing\n  } = window.getComputedStyle(el);\n  return {\n    height: parseFloat(height || \"0\"),\n    width: parseFloat(width || \"0\"),\n    borderTopWidth: parseFloat(borderTopWidth || \"0\"),\n    borderRightWidth: parseFloat(borderRightWidth || \"0\"),\n    borderBottomWidth: parseFloat(borderBottomWidth || \"0\"),\n    borderLeftWidth: parseFloat(borderLeftWidth || \"0\"),\n    paddingTop: parseFloat(paddingTop || \"0\"),\n    paddingRight: parseFloat(paddingRight || \"0\"),\n    paddingBottom: parseFloat(paddingBottom || \"0\"),\n    paddingLeft: parseFloat(paddingLeft || \"0\"),\n    marginTop: parseFloat(marginTop || \"0\"),\n    marginRight: parseFloat(marginRight || \"0\"),\n    marginBottom: parseFloat(marginBottom || \"0\"),\n    marginLeft: parseFloat(marginLeft || \"0\"),\n    boxSizing\n  };\n}\nfunction _getInnerHeight(el) {\n  const size = _getElementSize(el);\n  if (size.boxSizing === \"border-box\") {\n    return size.height - size.paddingTop - size.paddingBottom;\n  }\n  return size.height;\n}\nfunction _getInnerWidth(el) {\n  const size = _getElementSize(el);\n  if (size.boxSizing === \"border-box\") {\n    return size.width - size.paddingLeft - size.paddingRight;\n  }\n  return size.width;\n}\nfunction _getAbsoluteHeight(el) {\n  const { height, marginBottom, marginTop } = _getElementSize(el);\n  return Math.floor(height + marginBottom + marginTop);\n}\nfunction _getAbsoluteWidth(el) {\n  const { width, marginLeft, marginRight } = _getElementSize(el);\n  return Math.floor(width + marginLeft + marginRight);\n}\nfunction _getElementRectWithOffset(el) {\n  const offsetElementRect = el.getBoundingClientRect();\n  const { borderTopWidth, borderLeftWidth, borderRightWidth, borderBottomWidth } = _getElementSize(el);\n  return {\n    top: offsetElementRect.top + (borderTopWidth || 0),\n    left: offsetElementRect.left + (borderLeftWidth || 0),\n    right: offsetElementRect.right + (borderRightWidth || 0),\n    bottom: offsetElementRect.bottom + (borderBottomWidth || 0)\n  };\n}\nfunction _getScrollLeft(element, rtl) {\n  let scrollLeft = element.scrollLeft;\n  if (rtl) {\n    scrollLeft = Math.abs(scrollLeft);\n  }\n  return scrollLeft;\n}\nfunction _setScrollLeft(element, value, rtl) {\n  if (rtl) {\n    value *= -1;\n  }\n  element.scrollLeft = value;\n}\nfunction _clearElement(el) {\n  while (el && el.firstChild) {\n    el.removeChild(el.firstChild);\n  }\n}\nfunction _removeFromParent(node) {\n  if (node && node.parentNode) {\n    node.parentNode.removeChild(node);\n  }\n}\nfunction _isInDOM(element) {\n  return !!element.offsetParent;\n}\nfunction _isVisible(element) {\n  const el = element;\n  if (el.checkVisibility) {\n    return el.checkVisibility({ checkVisibilityCSS: true });\n  }\n  const isHidden = !_isInDOM(element) || window.getComputedStyle(element).visibility !== \"visible\";\n  return !isHidden;\n}\nfunction _loadTemplate(template) {\n  const tempDiv = document.createElement(\"div\");\n  tempDiv.innerHTML = (template || \"\").trim();\n  return tempDiv.firstChild;\n}\nfunction _ensureDomOrder(eContainer, eChild, eChildBefore) {\n  if (eChildBefore && eChildBefore.nextSibling === eChild) {\n    return;\n  }\n  if (!eContainer.firstChild) {\n    eContainer.appendChild(eChild);\n  } else if (eChildBefore) {\n    if (eChildBefore.nextSibling) {\n      eContainer.insertBefore(eChild, eChildBefore.nextSibling);\n    } else {\n      eContainer.appendChild(eChild);\n    }\n  } else if (eContainer.firstChild && eContainer.firstChild !== eChild) {\n    eContainer.insertAdjacentElement(\"afterbegin\", eChild);\n  }\n}\nfunction _setDomChildOrder(eContainer, orderedChildren) {\n  for (let i = 0; i < orderedChildren.length; i++) {\n    const correctCellAtIndex = orderedChildren[i];\n    const actualCellAtIndex = eContainer.children[i];\n    if (actualCellAtIndex !== correctCellAtIndex) {\n      eContainer.insertBefore(correctCellAtIndex, actualCellAtIndex);\n    }\n  }\n}\nfunction _addStylesToElement(eElement, styles) {\n  if (!styles) {\n    return;\n  }\n  for (const [key, value] of Object.entries(styles)) {\n    if (!key || !key.length || value == null) {\n      continue;\n    }\n    const parsedKey = _camelCaseToHyphenated(key);\n    const valueAsString = value.toString();\n    const parsedValue = valueAsString.replace(/\\s*!important/g, \"\");\n    const priority = parsedValue.length != valueAsString.length ? \"important\" : void 0;\n    eElement.style.setProperty(parsedKey, parsedValue, priority);\n  }\n}\nfunction _isHorizontalScrollShowing(element) {\n  return element.clientWidth < element.scrollWidth;\n}\nfunction _isVerticalScrollShowing(element) {\n  return element.clientHeight < element.scrollHeight;\n}\nfunction _setElementWidth(element, width) {\n  if (width === \"flex\") {\n    element.style.removeProperty(\"width\");\n    element.style.removeProperty(\"minWidth\");\n    element.style.removeProperty(\"maxWidth\");\n    element.style.flex = \"1 1 auto\";\n  } else {\n    _setFixedWidth(element, width);\n  }\n}\nfunction _setFixedWidth(element, width) {\n  width = _formatSize(width);\n  element.style.width = width.toString();\n  element.style.maxWidth = width.toString();\n  element.style.minWidth = width.toString();\n}\nfunction _setFixedHeight(element, height) {\n  height = _formatSize(height);\n  element.style.height = height.toString();\n  element.style.maxHeight = height.toString();\n  element.style.minHeight = height.toString();\n}\nfunction _formatSize(size) {\n  if (typeof size === \"number\") {\n    return `${size}px`;\n  }\n  return size;\n}\nfunction _isNodeOrElement(o) {\n  return o instanceof Node || o instanceof HTMLElement;\n}\nfunction _copyNodeList(nodeList) {\n  if (nodeList == null) {\n    return [];\n  }\n  const result = [];\n  _nodeListForEach(nodeList, (node) => result.push(node));\n  return result;\n}\nfunction _iterateNamedNodeMap(map, callback) {\n  if (!map) {\n    return;\n  }\n  for (let i = 0; i < map.length; i++) {\n    const attr = map[i];\n    callback(attr.name, attr.value);\n  }\n}\nfunction _addOrRemoveAttribute(element, name, value) {\n  if (value == null || value === \"\") {\n    element.removeAttribute(name);\n  } else {\n    element.setAttribute(name, value.toString());\n  }\n}\nfunction _nodeListForEach(nodeList, action) {\n  if (nodeList == null) {\n    return;\n  }\n  for (let i = 0; i < nodeList.length; i++) {\n    action(nodeList[i]);\n  }\n}\nfunction _bindCellRendererToHtmlElement(cellRendererPromise, eTarget) {\n  cellRendererPromise.then((cellRenderer) => {\n    const gui = cellRenderer.getGui();\n    if (gui != null) {\n      if (typeof gui === \"object\") {\n        eTarget.appendChild(gui);\n      } else {\n        eTarget.innerHTML = gui;\n      }\n    }\n  });\n}\n\n// community-modules/core/src/utils/numberSequence.ts\nvar NumberSequence = class {\n  constructor(initValue = 0, step = 1) {\n    this.nextValue = initValue;\n    this.step = step;\n  }\n  next() {\n    const valToReturn = this.nextValue;\n    this.nextValue += this.step;\n    return valToReturn;\n  }\n  peek() {\n    return this.nextValue;\n  }\n  skip(count) {\n    this.nextValue += count;\n  }\n};\n\n// community-modules/core/src/utils/browser.ts\nvar isSafari;\nvar safariVersion;\nvar isChrome;\nvar isFirefox;\nvar isMacOs;\nvar isIOS;\nvar invisibleScrollbar;\nvar browserScrollbarWidth;\nvar maxDivHeight;\nfunction _isBrowserSafari() {\n  if (isSafari === void 0) {\n    isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  }\n  return isSafari;\n}\nfunction _getSafariVersion() {\n  if (safariVersion === void 0) {\n    if (_isBrowserSafari()) {\n      const versionMatch = navigator.userAgent.match(/version\\/(\\d+)/i);\n      if (versionMatch) {\n        safariVersion = versionMatch[1] != null ? parseFloat(versionMatch[1]) : 0;\n      }\n    } else {\n      safariVersion = 0;\n    }\n  }\n  return safariVersion;\n}\nfunction _isBrowserChrome() {\n  if (isChrome === void 0) {\n    const win = window;\n    isChrome = !!win.chrome && (!!win.chrome.webstore || !!win.chrome.runtime) || /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n  }\n  return isChrome;\n}\nfunction _isBrowserFirefox() {\n  if (isFirefox === void 0) {\n    isFirefox = /(firefox)/i.test(navigator.userAgent);\n  }\n  return isFirefox;\n}\nfunction _isMacOsUserAgent() {\n  if (isMacOs === void 0) {\n    isMacOs = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n  }\n  return isMacOs;\n}\nfunction _isIOSUserAgent() {\n  if (isIOS === void 0) {\n    isIOS = /iPad|iPhone|iPod/.test(navigator.platform) || navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1;\n  }\n  return isIOS;\n}\nfunction _browserSupportsPreventScroll() {\n  return !_isBrowserSafari() || _getSafariVersion() >= 15;\n}\nfunction _getTabIndex(el) {\n  if (!el) {\n    return null;\n  }\n  const numberTabIndex = el.tabIndex;\n  const tabIndex = el.getAttribute(\"tabIndex\");\n  if (numberTabIndex === -1 && (tabIndex === null || tabIndex === \"\" && !_isBrowserFirefox())) {\n    return null;\n  }\n  return numberTabIndex.toString();\n}\nfunction _getMaxDivHeight() {\n  if (maxDivHeight !== void 0) {\n    return maxDivHeight;\n  }\n  if (!document.body) {\n    return -1;\n  }\n  let res = 1e6;\n  const testUpTo = _isBrowserFirefox() ? 6e6 : 1e9;\n  const div = document.createElement(\"div\");\n  document.body.appendChild(div);\n  while (true) {\n    const test = res * 2;\n    div.style.height = test + \"px\";\n    if (test > testUpTo || div.clientHeight !== test) {\n      break;\n    } else {\n      res = test;\n    }\n  }\n  document.body.removeChild(div);\n  maxDivHeight = res;\n  return res;\n}\nfunction _getBodyWidth() {\n  return document.body?.clientWidth ?? (window.innerHeight || document.documentElement?.clientWidth || -1);\n}\nfunction _getBodyHeight() {\n  return document.body?.clientHeight ?? (window.innerHeight || document.documentElement?.clientHeight || -1);\n}\nfunction _getScrollbarWidth() {\n  if (browserScrollbarWidth == null) {\n    initScrollbarWidthAndVisibility();\n  }\n  return browserScrollbarWidth;\n}\nfunction initScrollbarWidthAndVisibility() {\n  const body = document.body;\n  const div = document.createElement(\"div\");\n  div.style.width = div.style.height = \"100px\";\n  div.style.opacity = \"0\";\n  div.style.overflow = \"scroll\";\n  div.style.msOverflowStyle = \"scrollbar\";\n  div.style.position = \"absolute\";\n  body.appendChild(div);\n  let width = div.offsetWidth - div.clientWidth;\n  if (width === 0 && div.clientWidth === 0) {\n    width = null;\n  }\n  if (div.parentNode) {\n    div.parentNode.removeChild(div);\n  }\n  if (width != null) {\n    browserScrollbarWidth = width;\n    invisibleScrollbar = width === 0;\n  }\n}\nfunction _isInvisibleScrollbar() {\n  if (invisibleScrollbar == null) {\n    initScrollbarWidthAndVisibility();\n  }\n  return invisibleScrollbar;\n}\n\n// community-modules/core/src/widgets/tooltipStateManager.ts\nvar SHOW_QUICK_TOOLTIP_DIFF = 1e3;\nvar FADE_OUT_TOOLTIP_TIMEOUT = 1e3;\nvar INTERACTIVE_HIDE_DELAY = 100;\nvar _TooltipStateManager = class _TooltipStateManager extends BeanStub {\n  constructor(parentComp, tooltipShowDelayOverride, tooltipHideDelayOverride, shouldDisplayTooltip) {\n    super();\n    this.parentComp = parentComp;\n    this.tooltipShowDelayOverride = tooltipShowDelayOverride;\n    this.tooltipHideDelayOverride = tooltipHideDelayOverride;\n    this.shouldDisplayTooltip = shouldDisplayTooltip;\n    this.interactionEnabled = false;\n    this.isInteractingWithTooltip = false;\n    this.state = 0 /* NOTHING */;\n    // when showing the tooltip, we need to make sure it's the most recent instance we request, as due to\n    // async we could request two tooltips before the first instance returns, in which case we should\n    // disregard the second instance.\n    this.tooltipInstanceCount = 0;\n    this.tooltipMouseTrack = false;\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n    this.userComponentFactory = beans.userComponentFactory;\n  }\n  postConstruct() {\n    if (this.gos.get(\"tooltipInteraction\")) {\n      this.interactionEnabled = true;\n    }\n    this.tooltipTrigger = this.getTooltipTrigger();\n    this.tooltipMouseTrack = this.gos.get(\"tooltipMouseTrack\");\n    const el = this.parentComp.getGui();\n    if (this.tooltipTrigger === 0 /* HOVER */) {\n      this.addManagedListeners(el, {\n        mouseenter: this.onMouseEnter.bind(this),\n        mouseleave: this.onMouseLeave.bind(this)\n      });\n    }\n    if (this.tooltipTrigger === 1 /* FOCUS */) {\n      this.addManagedListeners(el, {\n        focusin: this.onFocusIn.bind(this),\n        focusout: this.onFocusOut.bind(this)\n      });\n    }\n    this.addManagedListeners(el, { mousemove: this.onMouseMove.bind(this) });\n    if (!this.interactionEnabled) {\n      this.addManagedListeners(el, {\n        mousedown: this.onMouseDown.bind(this),\n        keydown: this.onKeyDown.bind(this)\n      });\n    }\n  }\n  getGridOptionsTooltipDelay(delayOption) {\n    const delay = this.gos.get(delayOption);\n    if (delay < 0) {\n      _warnOnce(`${delayOption} should not be lower than 0`);\n    }\n    return Math.max(200, delay);\n  }\n  getTooltipDelay(type) {\n    if (type === \"show\") {\n      return this.tooltipShowDelayOverride ?? this.getGridOptionsTooltipDelay(\"tooltipShowDelay\");\n    }\n    return this.tooltipHideDelayOverride ?? this.getGridOptionsTooltipDelay(\"tooltipHideDelay\");\n  }\n  destroy() {\n    this.setToDoNothing();\n    super.destroy();\n  }\n  getTooltipTrigger() {\n    const trigger = this.gos.get(\"tooltipTrigger\");\n    if (!trigger || trigger === \"hover\") {\n      return 0 /* HOVER */;\n    }\n    return 1 /* FOCUS */;\n  }\n  onMouseEnter(e) {\n    if (this.interactionEnabled && this.interactiveTooltipTimeoutId) {\n      this.unlockService();\n      this.startHideTimeout();\n    }\n    if (_isIOSUserAgent()) {\n      return;\n    }\n    if (_TooltipStateManager.isLocked) {\n      this.showTooltipTimeoutId = window.setTimeout(() => {\n        this.prepareToShowTooltip(e);\n      }, INTERACTIVE_HIDE_DELAY);\n    } else {\n      this.prepareToShowTooltip(e);\n    }\n  }\n  onMouseMove(e) {\n    if (this.lastMouseEvent) {\n      this.lastMouseEvent = e;\n    }\n    if (this.tooltipMouseTrack && this.state === 2 /* SHOWING */ && this.tooltipComp) {\n      this.positionTooltip();\n    }\n  }\n  onMouseDown() {\n    this.setToDoNothing();\n  }\n  onMouseLeave() {\n    if (this.interactionEnabled) {\n      this.lockService();\n    } else {\n      this.setToDoNothing();\n    }\n  }\n  onFocusIn() {\n    this.prepareToShowTooltip();\n  }\n  onFocusOut(e) {\n    const relatedTarget = e.relatedTarget;\n    const parentCompGui = this.parentComp.getGui();\n    const tooltipGui = this.tooltipComp?.getGui();\n    if (this.isInteractingWithTooltip || parentCompGui.contains(relatedTarget) || this.interactionEnabled && tooltipGui?.contains(relatedTarget)) {\n      return;\n    }\n    this.setToDoNothing();\n  }\n  onKeyDown() {\n    if (this.isInteractingWithTooltip) {\n      this.isInteractingWithTooltip = false;\n    }\n    this.setToDoNothing();\n  }\n  prepareToShowTooltip(mouseEvent) {\n    if (this.state != 0 /* NOTHING */ || _TooltipStateManager.isLocked) {\n      return;\n    }\n    let delay = 0;\n    if (mouseEvent) {\n      delay = this.isLastTooltipHiddenRecently() ? 200 : this.getTooltipDelay(\"show\");\n    }\n    this.lastMouseEvent = mouseEvent || null;\n    this.showTooltipTimeoutId = window.setTimeout(this.showTooltip.bind(this), delay);\n    this.state = 1 /* WAITING_TO_SHOW */;\n  }\n  isLastTooltipHiddenRecently() {\n    const now = (/* @__PURE__ */ new Date()).getTime();\n    const then = _TooltipStateManager.lastTooltipHideTime;\n    return now - then < SHOW_QUICK_TOOLTIP_DIFF;\n  }\n  setToDoNothing(fromHideTooltip) {\n    if (!fromHideTooltip && this.state === 2 /* SHOWING */) {\n      this.hideTooltip();\n    }\n    if (this.onBodyScrollEventCallback) {\n      this.onBodyScrollEventCallback();\n      this.onBodyScrollEventCallback = void 0;\n    }\n    if (this.onColumnMovedEventCallback) {\n      this.onColumnMovedEventCallback();\n      this.onColumnMovedEventCallback = void 0;\n    }\n    if (this.onDocumentKeyDownCallback) {\n      this.onDocumentKeyDownCallback();\n      this.onDocumentKeyDownCallback = void 0;\n    }\n    this.clearTimeouts();\n    this.state = 0 /* NOTHING */;\n    this.lastMouseEvent = null;\n  }\n  showTooltip() {\n    const params = {\n      ...this.parentComp.getTooltipParams()\n    };\n    if (!_exists(params.value) || this.shouldDisplayTooltip && !this.shouldDisplayTooltip()) {\n      this.setToDoNothing();\n      return;\n    }\n    this.state = 2 /* SHOWING */;\n    this.tooltipInstanceCount++;\n    const callback = this.newTooltipComponentCallback.bind(this, this.tooltipInstanceCount);\n    const userDetails = this.userComponentFactory.getTooltipCompDetails(params);\n    userDetails.newAgStackInstance().then(callback);\n  }\n  hideTooltip(forceHide) {\n    if (!forceHide && this.isInteractingWithTooltip) {\n      return;\n    }\n    if (this.tooltipComp) {\n      this.destroyTooltipComp();\n      _TooltipStateManager.lastTooltipHideTime = (/* @__PURE__ */ new Date()).getTime();\n    }\n    this.eventService.dispatchEvent({\n      type: \"tooltipHide\",\n      parentGui: this.parentComp.getGui()\n    });\n    if (forceHide) {\n      this.isInteractingWithTooltip = false;\n    }\n    this.setToDoNothing(true);\n  }\n  newTooltipComponentCallback(tooltipInstanceCopy, tooltipComp) {\n    const compNoLongerNeeded = this.state !== 2 /* SHOWING */ || this.tooltipInstanceCount !== tooltipInstanceCopy;\n    if (compNoLongerNeeded) {\n      this.destroyBean(tooltipComp);\n      return;\n    }\n    const eGui = tooltipComp.getGui();\n    this.tooltipComp = tooltipComp;\n    if (!eGui.classList.contains(\"ag-tooltip\")) {\n      eGui.classList.add(\"ag-tooltip-custom\");\n    }\n    if (this.tooltipTrigger === 0 /* HOVER */) {\n      eGui.classList.add(\"ag-tooltip-animate\");\n    }\n    if (this.interactionEnabled) {\n      eGui.classList.add(\"ag-tooltip-interactive\");\n    }\n    const translate = this.localeService.getLocaleTextFunc();\n    const addPopupRes = this.popupService.addPopup({\n      eChild: eGui,\n      ariaLabel: translate(\"ariaLabelTooltip\", \"Tooltip\")\n    });\n    if (addPopupRes) {\n      this.tooltipPopupDestroyFunc = addPopupRes.hideFunc;\n    }\n    this.positionTooltip();\n    if (this.tooltipTrigger === 1 /* FOCUS */) {\n      const listener = () => this.setToDoNothing();\n      [this.onBodyScrollEventCallback, this.onColumnMovedEventCallback] = this.addManagedEventListeners({\n        bodyScroll: listener,\n        columnMoved: listener\n      });\n    }\n    if (this.interactionEnabled) {\n      [this.tooltipMouseEnterListener, this.tooltipMouseLeaveListener] = this.addManagedElementListeners(eGui, {\n        mouseenter: this.onTooltipMouseEnter.bind(this),\n        mouseleave: this.onTooltipMouseLeave.bind(this)\n      });\n      [this.onDocumentKeyDownCallback] = this.addManagedElementListeners(_getDocument(this.gos), {\n        keydown: (e) => {\n          if (!eGui.contains(e?.target)) {\n            this.onKeyDown();\n          }\n        }\n      });\n      if (this.tooltipTrigger === 1 /* FOCUS */) {\n        [this.tooltipFocusInListener, this.tooltipFocusOutListener] = this.addManagedElementListeners(eGui, {\n          focusin: this.onTooltipFocusIn.bind(this),\n          focusout: this.onTooltipFocusOut.bind(this)\n        });\n      }\n    }\n    this.eventService.dispatchEvent({\n      type: \"tooltipShow\",\n      tooltipGui: eGui,\n      parentGui: this.parentComp.getGui()\n    });\n    this.startHideTimeout();\n  }\n  onTooltipMouseEnter() {\n    this.isInteractingWithTooltip = true;\n    this.unlockService();\n  }\n  onTooltipMouseLeave() {\n    if (this.isTooltipFocused()) {\n      return;\n    }\n    this.isInteractingWithTooltip = false;\n    this.lockService();\n  }\n  onTooltipFocusIn() {\n    this.isInteractingWithTooltip = true;\n  }\n  isTooltipFocused() {\n    const tooltipGui = this.tooltipComp?.getGui();\n    const activeEl = _getActiveDomElement(this.gos);\n    return !!tooltipGui && tooltipGui.contains(activeEl);\n  }\n  onTooltipFocusOut(e) {\n    const parentGui = this.parentComp.getGui();\n    if (this.isTooltipFocused()) {\n      return;\n    }\n    this.isInteractingWithTooltip = false;\n    if (parentGui.contains(e.relatedTarget)) {\n      this.startHideTimeout();\n    } else {\n      this.hideTooltip();\n    }\n  }\n  positionTooltip() {\n    const params = {\n      type: \"tooltip\",\n      ePopup: this.tooltipComp.getGui(),\n      nudgeY: 18,\n      skipObserver: this.tooltipMouseTrack\n    };\n    if (this.lastMouseEvent) {\n      this.popupService.positionPopupUnderMouseEvent({\n        ...params,\n        mouseEvent: this.lastMouseEvent\n      });\n    } else {\n      this.popupService.positionPopupByComponent({\n        ...params,\n        eventSource: this.parentComp.getGui(),\n        position: \"under\",\n        keepWithinBounds: true,\n        nudgeY: 5\n      });\n    }\n  }\n  destroyTooltipComp() {\n    this.tooltipComp.getGui().classList.add(\"ag-tooltip-hiding\");\n    const tooltipPopupDestroyFunc = this.tooltipPopupDestroyFunc;\n    const tooltipComp = this.tooltipComp;\n    const delay = this.tooltipTrigger === 0 /* HOVER */ ? FADE_OUT_TOOLTIP_TIMEOUT : 0;\n    window.setTimeout(() => {\n      tooltipPopupDestroyFunc();\n      this.destroyBean(tooltipComp);\n    }, delay);\n    this.clearTooltipListeners();\n    this.tooltipPopupDestroyFunc = void 0;\n    this.tooltipComp = void 0;\n  }\n  clearTooltipListeners() {\n    [\n      this.tooltipMouseEnterListener,\n      this.tooltipMouseLeaveListener,\n      this.tooltipFocusInListener,\n      this.tooltipFocusOutListener\n    ].forEach((listener) => {\n      if (listener) {\n        listener();\n      }\n    });\n    this.tooltipMouseEnterListener = this.tooltipMouseLeaveListener = this.tooltipFocusInListener = this.tooltipFocusOutListener = null;\n  }\n  lockService() {\n    _TooltipStateManager.isLocked = true;\n    this.interactiveTooltipTimeoutId = window.setTimeout(() => {\n      this.unlockService();\n      this.setToDoNothing();\n    }, INTERACTIVE_HIDE_DELAY);\n  }\n  unlockService() {\n    _TooltipStateManager.isLocked = false;\n    this.clearInteractiveTimeout();\n  }\n  startHideTimeout() {\n    this.clearHideTimeout();\n    this.hideTooltipTimeoutId = window.setTimeout(this.hideTooltip.bind(this), this.getTooltipDelay(\"hide\"));\n  }\n  clearShowTimeout() {\n    if (!this.showTooltipTimeoutId) {\n      return;\n    }\n    window.clearTimeout(this.showTooltipTimeoutId);\n    this.showTooltipTimeoutId = void 0;\n  }\n  clearHideTimeout() {\n    if (!this.hideTooltipTimeoutId) {\n      return;\n    }\n    window.clearTimeout(this.hideTooltipTimeoutId);\n    this.hideTooltipTimeoutId = void 0;\n  }\n  clearInteractiveTimeout() {\n    if (!this.interactiveTooltipTimeoutId) {\n      return;\n    }\n    window.clearTimeout(this.interactiveTooltipTimeoutId);\n    this.interactiveTooltipTimeoutId = void 0;\n  }\n  clearTimeouts() {\n    this.clearShowTimeout();\n    this.clearHideTimeout();\n    this.clearInteractiveTimeout();\n  }\n};\n_TooltipStateManager.isLocked = false;\nvar TooltipStateManager = _TooltipStateManager;\n\n// community-modules/core/src/widgets/tooltipFeature.ts\nvar TooltipFeature = class extends BeanStub {\n  constructor(ctrl, beans) {\n    super();\n    this.ctrl = ctrl;\n    if (beans) {\n      this.beans = beans;\n    }\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n  }\n  postConstruct() {\n    this.refreshToolTip();\n  }\n  setBrowserTooltip(tooltip) {\n    const name = \"title\";\n    const eGui = this.ctrl.getGui();\n    if (!eGui) {\n      return;\n    }\n    if (tooltip != null && tooltip != \"\") {\n      eGui.setAttribute(name, tooltip);\n    } else {\n      eGui.removeAttribute(name);\n    }\n  }\n  updateTooltipText() {\n    this.tooltip = this.ctrl.getTooltipValue();\n  }\n  createTooltipFeatureIfNeeded() {\n    if (this.tooltipManager != null) {\n      return;\n    }\n    const parent = {\n      getTooltipParams: () => this.getTooltipParams(),\n      getGui: () => this.ctrl.getGui()\n    };\n    this.tooltipManager = this.createBean(\n      new TooltipStateManager(\n        parent,\n        this.ctrl.getTooltipShowDelayOverride?.(),\n        this.ctrl.getTooltipHideDelayOverride?.(),\n        this.ctrl.shouldDisplayTooltip\n      ),\n      this.beans.context\n    );\n  }\n  refreshToolTip() {\n    this.browserTooltips = this.beans.gos.get(\"enableBrowserTooltips\");\n    this.updateTooltipText();\n    if (this.browserTooltips) {\n      this.setBrowserTooltip(this.tooltip);\n      if (this.tooltipManager) {\n        this.tooltipManager = this.destroyBean(this.tooltipManager, this.beans.context);\n      }\n    } else {\n      this.setBrowserTooltip(null);\n      this.createTooltipFeatureIfNeeded();\n    }\n  }\n  getTooltipParams() {\n    const ctrl = this.ctrl;\n    const column = ctrl.getColumn?.();\n    const colDef = ctrl.getColDef?.();\n    const rowNode = ctrl.getRowNode?.();\n    return {\n      location: ctrl.getLocation(),\n      //'cell',\n      colDef,\n      column,\n      rowIndex: ctrl.getRowIndex?.(),\n      node: rowNode,\n      data: rowNode?.data,\n      value: this.getTooltipText(),\n      valueFormatted: ctrl.getValueFormatted?.(),\n      hideTooltipCallback: () => this.tooltipManager?.hideTooltip(true)\n    };\n  }\n  getTooltipText() {\n    return this.tooltip;\n  }\n  // overriding to make public, as we don't dispose this bean via context\n  destroy() {\n    if (this.tooltipManager) {\n      this.tooltipManager = this.destroyBean(this.tooltipManager, this.beans.context);\n    }\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/widgets/component.ts\nvar compIdSequence = new NumberSequence();\nvar RefPlaceholder = null;\nvar Component = class _Component extends BeanStub {\n  constructor(template, componentSelectors) {\n    super();\n    this.suppressDataRefValidation = false;\n    // if false, then CSS class \"ag-hidden\" is applied, which sets \"display: none\"\n    this.displayed = true;\n    // if false, then CSS class \"ag-invisible\" is applied, which sets \"visibility: hidden\"\n    this.visible = true;\n    // unique id for this row component. this is used for getting a reference to the HTML dom.\n    // we cannot use the RowNode id as this is not unique (due to animation, old rows can be lying\n    // around as we create a new rowComp instance for the same row node).\n    this.compId = compIdSequence.next();\n    this.cssClassManager = new CssClassManager(() => this.eGui);\n    this.componentSelectors = new Map((componentSelectors ?? []).map((comp) => [comp.selector, comp]));\n    if (template) {\n      this.setTemplate(template);\n    }\n  }\n  preWireBeans(beans) {\n    super.preWireBeans(beans);\n  }\n  preConstruct() {\n    this.usingBrowserTooltips = this.gos.get(\"enableBrowserTooltips\");\n    this.wireTemplate(this.getGui());\n  }\n  wireTemplate(element, paramsMap) {\n    if (element && this.gos) {\n      this.applyElementsToComponent(element);\n      this.createChildComponentsFromTags(element, paramsMap);\n    }\n  }\n  getCompId() {\n    return this.compId;\n  }\n  getTooltipParams() {\n    return {\n      value: this.tooltipText,\n      location: \"UNKNOWN\"\n    };\n  }\n  setTooltip(params) {\n    const { newTooltipText, showDelayOverride, hideDelayOverride, location, shouldDisplayTooltip } = params || {};\n    if (this.tooltipFeature) {\n      this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n    }\n    if (this.tooltipText !== newTooltipText) {\n      this.tooltipText = newTooltipText;\n    }\n    const getTooltipValue = () => this.tooltipText;\n    if (newTooltipText != null) {\n      this.tooltipFeature = this.createBean(\n        new TooltipFeature({\n          getTooltipValue,\n          getGui: () => this.getGui(),\n          getLocation: () => location ?? \"UNKNOWN\",\n          getColDef: params?.getColDef,\n          getColumn: params?.getColumn,\n          getTooltipShowDelayOverride: showDelayOverride != null ? () => showDelayOverride : void 0,\n          getTooltipHideDelayOverride: hideDelayOverride != null ? () => hideDelayOverride : void 0,\n          shouldDisplayTooltip\n        })\n      );\n    }\n  }\n  getDataRefAttribute(element) {\n    if (element.getAttribute) {\n      return element.getAttribute(\"data-ref\");\n    }\n    return null;\n  }\n  applyElementsToComponent(element, elementRef, paramsMap, newComponent = null) {\n    if (elementRef === void 0) {\n      elementRef = this.getDataRefAttribute(element);\n    }\n    if (elementRef) {\n      const current = this[elementRef];\n      if (current === RefPlaceholder) {\n        this[elementRef] = newComponent ?? element;\n      } else {\n        const usedAsParamRef = paramsMap && paramsMap[elementRef];\n        if (!this.suppressDataRefValidation && !usedAsParamRef) {\n          _warnOnce(`Issue with data-ref: ${elementRef} on ${this.constructor.name} with ${current}`);\n        }\n      }\n    }\n  }\n  // for registered components only, eg creates AgCheckbox instance from ag-checkbox HTML tag\n  createChildComponentsFromTags(parentNode, paramsMap) {\n    const childNodeList = _copyNodeList(parentNode.childNodes);\n    childNodeList.forEach((childNode) => {\n      if (!(childNode instanceof HTMLElement)) {\n        return;\n      }\n      const childComp = this.createComponentFromElement(\n        childNode,\n        (childComp2) => {\n          const childGui = childComp2.getGui();\n          if (childGui) {\n            this.copyAttributesFromNode(childNode, childComp2.getGui());\n          }\n        },\n        paramsMap\n      );\n      if (childComp) {\n        if (childComp.addItems && childNode.children.length) {\n          this.createChildComponentsFromTags(childNode, paramsMap);\n          const items = Array.prototype.slice.call(childNode.children);\n          childComp.addItems(items);\n        }\n        this.swapComponentForNode(childComp, parentNode, childNode);\n      } else if (childNode.childNodes) {\n        this.createChildComponentsFromTags(childNode, paramsMap);\n      }\n    });\n  }\n  createComponentFromElement(element, afterPreCreateCallback, paramsMap) {\n    const key = element.nodeName;\n    const elementRef = this.getDataRefAttribute(element);\n    const isAgGridComponent = key.indexOf(\"AG-\") === 0;\n    const componentSelector = isAgGridComponent ? this.componentSelectors.get(key) : null;\n    let newComponent = null;\n    if (componentSelector) {\n      _Component.elementGettingCreated = element;\n      const componentParams = paramsMap && elementRef ? paramsMap[elementRef] : void 0;\n      newComponent = new componentSelector.component(componentParams);\n      newComponent.setParentComponent(this);\n      this.createBean(newComponent, null, afterPreCreateCallback);\n    } else if (isAgGridComponent) {\n      _warnOnce(`Missing selector: ${key}`);\n    }\n    this.applyElementsToComponent(element, elementRef, paramsMap, newComponent);\n    return newComponent;\n  }\n  copyAttributesFromNode(source, dest) {\n    _iterateNamedNodeMap(source.attributes, (name, value) => dest.setAttribute(name, value));\n  }\n  swapComponentForNode(newComponent, parentNode, childNode) {\n    const eComponent = newComponent.getGui();\n    parentNode.replaceChild(eComponent, childNode);\n    parentNode.insertBefore(document.createComment(childNode.nodeName), eComponent);\n    this.addDestroyFunc(this.destroyBean.bind(this, newComponent));\n  }\n  activateTabIndex(elements) {\n    const tabIndex = this.gos.get(\"tabIndex\");\n    if (!elements) {\n      elements = [];\n    }\n    if (!elements.length) {\n      elements.push(this.getGui());\n    }\n    elements.forEach((el) => el.setAttribute(\"tabindex\", tabIndex.toString()));\n  }\n  setTemplate(template, componentSelectors, paramsMap) {\n    const eGui = _loadTemplate(template);\n    this.setTemplateFromElement(eGui, componentSelectors, paramsMap);\n  }\n  setTemplateFromElement(element, components, paramsMap, suppressDataRefValidation = false) {\n    this.eGui = element;\n    this.suppressDataRefValidation = suppressDataRefValidation;\n    if (components) {\n      for (let i = 0; i < components.length; i++) {\n        const component = components[i];\n        this.componentSelectors.set(component.selector, component);\n      }\n    }\n    this.wireTemplate(element, paramsMap);\n  }\n  getGui() {\n    return this.eGui;\n  }\n  getFocusableElement() {\n    return this.eGui;\n  }\n  getAriaElement() {\n    return this.getFocusableElement();\n  }\n  setParentComponent(component) {\n    this.parentComponent = component;\n  }\n  getParentComponent() {\n    return this.parentComponent;\n  }\n  // this method is for older code, that wants to provide the gui element,\n  // it is not intended for this to be in ag-Stack\n  setGui(eGui) {\n    this.eGui = eGui;\n  }\n  queryForHtmlElement(cssSelector) {\n    return this.eGui.querySelector(cssSelector);\n  }\n  getContainerAndElement(newChild, container) {\n    let parent = container;\n    if (newChild == null) {\n      return null;\n    }\n    if (!parent) {\n      parent = this.eGui;\n    }\n    if (_isNodeOrElement(newChild)) {\n      return {\n        element: newChild,\n        parent\n      };\n    }\n    return {\n      element: newChild.getGui(),\n      parent\n    };\n  }\n  prependChild(newChild, container) {\n    const { element, parent } = this.getContainerAndElement(newChild, container) || {};\n    if (!element || !parent) {\n      return;\n    }\n    parent.insertAdjacentElement(\"afterbegin\", element);\n  }\n  appendChild(newChild, container) {\n    const { element, parent } = this.getContainerAndElement(newChild, container) || {};\n    if (!element || !parent) {\n      return;\n    }\n    parent.appendChild(element);\n  }\n  isDisplayed() {\n    return this.displayed;\n  }\n  setVisible(visible, options = {}) {\n    if (visible !== this.visible) {\n      this.visible = visible;\n      const { skipAriaHidden } = options;\n      _setVisible(this.eGui, visible, { skipAriaHidden });\n    }\n  }\n  setDisplayed(displayed, options = {}) {\n    if (displayed !== this.displayed) {\n      this.displayed = displayed;\n      const { skipAriaHidden } = options;\n      _setDisplayed(this.eGui, displayed, { skipAriaHidden });\n      const event = {\n        type: \"displayChanged\",\n        visible: this.displayed\n      };\n      this.dispatchLocalEvent(event);\n    }\n  }\n  destroy() {\n    if (this.parentComponent) {\n      this.parentComponent = void 0;\n    }\n    if (this.tooltipFeature) {\n      this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n    }\n    super.destroy();\n  }\n  addGuiEventListener(event, listener, options) {\n    this.eGui.addEventListener(event, listener, options);\n    this.addDestroyFunc(() => this.eGui.removeEventListener(event, listener));\n  }\n  addCssClass(className) {\n    this.cssClassManager.addCssClass(className);\n  }\n  removeCssClass(className) {\n    this.cssClassManager.removeCssClass(className);\n  }\n  containsCssClass(className) {\n    return this.cssClassManager.containsCssClass(className);\n  }\n  addOrRemoveCssClass(className, addOrRemove) {\n    this.cssClassManager.addOrRemoveCssClass(className, addOrRemove);\n  }\n};\n\n// community-modules/core/src/utils/icon.ts\nvar iconNameClassMap = {\n  // header column group shown when expanded (click to contract)\n  columnGroupOpened: \"expanded\",\n  // header column group shown when contracted (click to expand)\n  columnGroupClosed: \"contracted\",\n  // tool panel column group contracted (click to expand)\n  columnSelectClosed: \"tree-closed\",\n  // tool panel column group expanded (click to contract)\n  columnSelectOpen: \"tree-open\",\n  // column tool panel header expand/collapse all button, shown when some children are expanded and\n  //     others are collapsed\n  columnSelectIndeterminate: \"tree-indeterminate\",\n  // shown on drag and drop image component icon while dragging column to the side of the grid to pin\n  columnMovePin: \"pin\",\n  // shown on drag and drop image component icon while dragging over part of the page that is not a drop zone\n  columnMoveHide: \"eye-slash\",\n  // shown on drag and drop image component icon while dragging columns to reorder\n  columnMoveMove: \"arrows\",\n  // animating icon shown when dragging a column to the right of the grid causes horizontal scrolling\n  columnMoveLeft: \"left\",\n  // animating icon shown when dragging a column to the left of the grid causes horizontal scrolling\n  columnMoveRight: \"right\",\n  // shown on drag and drop image component icon while dragging over Row Groups drop zone\n  columnMoveGroup: \"group\",\n  // shown on drag and drop image component icon while dragging over Values drop zone\n  columnMoveValue: \"aggregation\",\n  // shown on drag and drop image component icon while dragging over pivot drop zone\n  columnMovePivot: \"pivot\",\n  // shown on drag and drop image component icon while dragging over drop zone that doesn't support it, e.g.\n  //     string column over aggregation drop zone\n  dropNotAllowed: \"not-allowed\",\n  // shown on row group when contracted (click to expand)\n  groupContracted: \"tree-closed\",\n  // shown on row group when expanded (click to contract)\n  groupExpanded: \"tree-open\",\n  // set filter tree list group contracted (click to expand)\n  setFilterGroupClosed: \"tree-closed\",\n  // set filter tree list group expanded (click to contract)\n  setFilterGroupOpen: \"tree-open\",\n  // set filter tree list expand/collapse all button, shown when some children are expanded and\n  //     others are collapsed\n  setFilterGroupIndeterminate: \"tree-indeterminate\",\n  // context menu chart item\n  chart: \"chart\",\n  // chart window title bar\n  close: \"cross\",\n  // X (remove) on column 'pill' after adding it to a drop zone list\n  cancel: \"cancel\",\n  // indicates the currently active pin state in the \"Pin column\" sub-menu of the column menu\n  check: \"tick\",\n  // \"go to first\" button in pagination controls\n  first: \"first\",\n  // \"go to previous\" button in pagination controls\n  previous: \"previous\",\n  // \"go to next\" button in pagination controls\n  next: \"next\",\n  // \"go to last\" button in pagination controls\n  last: \"last\",\n  // shown on top right of chart when chart is linked to range data (click to unlink)\n  linked: \"linked\",\n  // shown on top right of chart when chart is not linked to range data (click to link)\n  unlinked: \"unlinked\",\n  // \"Choose colour\" button on chart settings tab\n  colorPicker: \"color-picker\",\n  // rotating spinner shown by the loading cell renderer\n  groupLoading: \"loading\",\n  // button to launch enterprise column menu\n  menu: \"menu\",\n  menuAlt: \"menu-alt\",\n  // filter tool panel tab\n  filter: \"filter\",\n  // column tool panel tab\n  columns: \"columns\",\n  // button in chart regular size window title bar (click to maximise)\n  maximize: \"maximize\",\n  // button in chart maximised window title bar (click to make regular size)\n  minimize: \"minimize\",\n  // \"Pin column\" item in column header menu\n  menuPin: \"pin\",\n  // \"Value aggregation\" column menu item (shown on numeric columns when grouping is active)\"\n  menuValue: \"aggregation\",\n  // \"Group by {column-name}\" item in column header menu\n  menuAddRowGroup: \"group\",\n  // \"Un-Group by {column-name}\" item in column header menu\n  menuRemoveRowGroup: \"group\",\n  // context menu copy item\n  clipboardCopy: \"copy\",\n  // context menu cut item\n  clipboardCut: \"cut\",\n  // context menu paste item\n  clipboardPaste: \"paste\",\n  // identifies the pivot drop zone\n  pivotPanel: \"pivot\",\n  // \"Row groups\" drop zone in column tool panel\n  rowGroupPanel: \"group\",\n  // columns tool panel Values drop zone\n  valuePanel: \"aggregation\",\n  // drag handle used to pick up draggable columns\n  columnDrag: \"grip\",\n  // drag handle used to pick up draggable rows\n  rowDrag: \"grip\",\n  // context menu export item\n  save: \"save\",\n  // csv export\n  csvExport: \"csv\",\n  // excel export,\n  excelExport: \"excel\",\n  // icon on dropdown editors\n  smallDown: \"small-down\",\n  // version of small-right used in RTL mode\n  smallLeft: \"small-left\",\n  // separater between column 'pills' when you add multiple columns to the header drop zone\n  smallRight: \"small-right\",\n  smallUp: \"small-up\",\n  // show on column header when column is sorted ascending\n  sortAscending: \"asc\",\n  // show on column header when column is sorted descending\n  sortDescending: \"desc\",\n  // show on column header when column has no sort, only when enabled with gridOptions.unSortIcon=true\n  sortUnSort: \"none\",\n  // Builder button in Advanced Filter\n  advancedFilterBuilder: \"group\",\n  // drag handle used to pick up Advanced Filter Builder rows\n  advancedFilterBuilderDrag: \"grip\",\n  // Advanced Filter Builder row validation error\n  advancedFilterBuilderInvalid: \"not-allowed\",\n  // shown on Advanced Filter Builder rows to move them up\n  advancedFilterBuilderMoveUp: \"up\",\n  // shown on Advanced Filter Builder rows to move them down\n  advancedFilterBuilderMoveDown: \"down\",\n  // shown on Advanced Filter Builder rows to add new rows\n  advancedFilterBuilderAdd: \"plus\",\n  // shown on Advanced Filter Builder rows to remove row\n  advancedFilterBuilderRemove: \"minus\",\n  // Edit Chart menu item shown in Integrated Charts menu\n  chartsMenuEdit: \"chart\",\n  // Advanced Settings menu item shown in Integrated Charts menu\n  chartsMenuAdvancedSettings: \"settings\",\n  // shown in Integrated Charts menu add fields\n  chartsMenuAdd: \"plus\",\n  // checked checkbox\n  checkboxChecked: \"checkbox-checked\",\n  // indeterminate checkbox\n  checkboxIndeterminate: \"checkbox-indeterminate\",\n  // unchecked checkbox\n  checkboxUnchecked: \"checkbox-unchecked\",\n  // radio button on\n  radioButtonOn: \"radio-button-on\",\n  // radio button off\n  radioButtonOff: \"radio-button-off\"\n};\nvar ICONS = (() => {\n  const icons = new Set(Object.values(iconNameClassMap));\n  icons.add(\"eye\");\n  return icons;\n})();\nfunction _createIcon(iconName, gos, column) {\n  const iconContents = _createIconNoSpan(iconName, gos, column);\n  if (iconContents) {\n    const { className } = iconContents;\n    if (typeof className === \"string\" && className.indexOf(\"ag-icon\") > -1 || typeof className === \"object\" && className[\"ag-icon\"]) {\n      return iconContents;\n    }\n  }\n  const eResult = document.createElement(\"span\");\n  eResult.appendChild(iconContents);\n  return eResult;\n}\nfunction _createIconNoSpan(iconName, gos, column, forceCreate) {\n  let userProvidedIcon = null;\n  const icons = column && column.getColDef().icons;\n  if (icons) {\n    userProvidedIcon = icons[iconName];\n  }\n  if (gos && !userProvidedIcon) {\n    const optionsIcons = gos.get(\"icons\");\n    if (optionsIcons) {\n      userProvidedIcon = optionsIcons[iconName];\n    }\n  }\n  if (userProvidedIcon) {\n    let rendererResult;\n    if (typeof userProvidedIcon === \"function\") {\n      rendererResult = userProvidedIcon();\n    } else if (typeof userProvidedIcon === \"string\") {\n      rendererResult = userProvidedIcon;\n    } else {\n      throw new Error(\"icon from grid options needs to be a string or a function\");\n    }\n    if (typeof rendererResult === \"string\") {\n      return _loadTemplate(rendererResult);\n    }\n    if (_isNodeOrElement(rendererResult)) {\n      return rendererResult;\n    }\n    _warnOnce(\"iconRenderer should return back a string or a dom object\");\n  } else {\n    const span = document.createElement(\"span\");\n    let cssClass = iconNameClassMap[iconName] ?? (ICONS.has(iconName) ? iconName : void 0);\n    if (!cssClass) {\n      if (!forceCreate) {\n        _warnOnce(`Did not find icon ${iconName}`);\n        cssClass = \"\";\n      } else {\n        cssClass = iconName;\n      }\n    }\n    span.setAttribute(\"class\", `ag-icon ag-icon-${cssClass}`);\n    span.setAttribute(\"unselectable\", \"on\");\n    _setAriaRole(span, \"presentation\");\n    return span;\n  }\n}\n\n// community-modules/core/src/dragAndDrop/dragAndDropImageComponent.ts\nvar DragAndDropImageComponent = class extends Component {\n  constructor() {\n    super(...arguments);\n    this.dragSource = null;\n    this.eIcon = RefPlaceholder;\n    this.eLabel = RefPlaceholder;\n  }\n  postConstruct() {\n    const create = (iconName) => _createIcon(iconName, this.gos, null);\n    this.dropIconMap = {\n      pinned: create(\"columnMovePin\"),\n      hide: create(\"columnMoveHide\"),\n      move: create(\"columnMoveMove\"),\n      left: create(\"columnMoveLeft\"),\n      right: create(\"columnMoveRight\"),\n      group: create(\"columnMoveGroup\"),\n      aggregate: create(\"columnMoveValue\"),\n      pivot: create(\"columnMovePivot\"),\n      notAllowed: create(\"dropNotAllowed\")\n    };\n  }\n  init(params) {\n    this.dragSource = params.dragSource;\n    this.setTemplate(\n      /* html */\n      `<div class=\"ag-dnd-ghost ag-unselectable\">\n                <span data-ref=\"eIcon\" class=\"ag-dnd-ghost-icon ag-shake-left-to-right\"></span>\n                <div data-ref=\"eLabel\" class=\"ag-dnd-ghost-label\"></div>\n            </div>`\n    );\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    this.dragSource = null;\n    super.destroy();\n  }\n  setIcon(iconName, shake = false) {\n    _clearElement(this.eIcon);\n    let eIcon = null;\n    if (!iconName) {\n      iconName = this.dragSource?.getDefaultIconName ? this.dragSource?.getDefaultIconName() : \"notAllowed\";\n    }\n    eIcon = this.dropIconMap[iconName];\n    this.eIcon.classList.toggle(\"ag-shake-left-to-right\", shake);\n    if (eIcon === this.dropIconMap[\"hide\"] && this.gos.get(\"suppressDragLeaveHidesColumns\")) {\n      return;\n    }\n    if (eIcon) {\n      this.eIcon.appendChild(eIcon);\n    }\n  }\n  setLabel(label) {\n    this.eLabel.textContent = _escapeString(label);\n  }\n};\n\n// community-modules/core/src/utils/mouse.ts\nfunction _areEventsNear(e1, e2, pixelCount) {\n  if (pixelCount === 0) {\n    return false;\n  }\n  const diffX = Math.abs(e1.clientX - e2.clientX);\n  const diffY = Math.abs(e1.clientY - e2.clientY);\n  return Math.max(diffX, diffY) <= pixelCount;\n}\n\n// community-modules/core/src/widgets/touchListener.ts\nvar TouchListener = class {\n  constructor(eElement, preventMouseClick = false) {\n    this.DOUBLE_TAP_MILLIS = 500;\n    this.destroyFuncs = [];\n    this.touching = false;\n    this.localEventService = new LocalEventService();\n    this.eElement = eElement;\n    this.preventMouseClick = preventMouseClick;\n    const startListener = this.onTouchStart.bind(this);\n    const moveListener = this.onTouchMove.bind(this);\n    const endListener = this.onTouchEnd.bind(this);\n    this.eElement.addEventListener(\"touchstart\", startListener, { passive: true });\n    this.eElement.addEventListener(\"touchmove\", moveListener, { passive: true });\n    this.eElement.addEventListener(\"touchend\", endListener, { passive: false });\n    this.destroyFuncs.push(() => {\n      this.eElement.removeEventListener(\"touchstart\", startListener, { passive: true });\n      this.eElement.removeEventListener(\"touchmove\", moveListener, { passive: true });\n      this.eElement.removeEventListener(\"touchend\", endListener, { passive: false });\n    });\n  }\n  getActiveTouch(touchList) {\n    for (let i = 0; i < touchList.length; i++) {\n      const matches = touchList[i].identifier === this.touchStart.identifier;\n      if (matches) {\n        return touchList[i];\n      }\n    }\n    return null;\n  }\n  addEventListener(eventType, listener) {\n    this.localEventService.addEventListener(eventType, listener);\n  }\n  removeEventListener(eventType, listener) {\n    this.localEventService.removeEventListener(eventType, listener);\n  }\n  onTouchStart(touchEvent) {\n    if (this.touching) {\n      return;\n    }\n    this.touchStart = touchEvent.touches[0];\n    this.touching = true;\n    this.moved = false;\n    const touchStartCopy = this.touchStart;\n    window.setTimeout(() => {\n      const touchesMatch = this.touchStart === touchStartCopy;\n      if (this.touching && touchesMatch && !this.moved) {\n        this.moved = true;\n        const event = {\n          type: \"longTap\",\n          touchStart: this.touchStart,\n          touchEvent\n        };\n        this.localEventService.dispatchEvent(event);\n      }\n    }, 500);\n  }\n  onTouchMove(touchEvent) {\n    if (!this.touching) {\n      return;\n    }\n    const touch = this.getActiveTouch(touchEvent.touches);\n    if (!touch) {\n      return;\n    }\n    const eventIsFarAway = !_areEventsNear(touch, this.touchStart, 4);\n    if (eventIsFarAway) {\n      this.moved = true;\n    }\n  }\n  onTouchEnd(touchEvent) {\n    if (!this.touching) {\n      return;\n    }\n    if (!this.moved) {\n      const event = {\n        type: \"tap\",\n        touchStart: this.touchStart\n      };\n      this.localEventService.dispatchEvent(event);\n      this.checkForDoubleTap();\n    }\n    if (this.preventMouseClick && touchEvent.cancelable) {\n      touchEvent.preventDefault();\n    }\n    this.touching = false;\n  }\n  checkForDoubleTap() {\n    const now = (/* @__PURE__ */ new Date()).getTime();\n    if (this.lastTapTime && this.lastTapTime > 0) {\n      const interval = now - this.lastTapTime;\n      if (interval > this.DOUBLE_TAP_MILLIS) {\n        const event = {\n          type: \"doubleTap\",\n          touchStart: this.touchStart\n        };\n        this.localEventService.dispatchEvent(event);\n        this.lastTapTime = null;\n      } else {\n        this.lastTapTime = now;\n      }\n    } else {\n      this.lastTapTime = now;\n    }\n  }\n  destroy() {\n    this.destroyFuncs.forEach((func) => func());\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/column/sortIndicatorComp.ts\nfunction makeSpan(dataRefSuffix, classSuffix) {\n  return (\n    /* html */\n    `<span data-ref=\"eSort${dataRefSuffix}\" class=\"ag-sort-indicator-icon ag-sort-${classSuffix} ag-hidden\" aria-hidden=\"true\"></span>`\n  );\n}\nvar SortIndicatorTemplate = (\n  /* html */\n  `<span class=\"ag-sort-indicator-container\">\n        ${makeSpan(\"Order\", \"order\")}\n        ${makeSpan(\"Asc\", \"ascending-icon\")}\n        ${makeSpan(\"Desc\", \"descending-icon\")}\n        ${makeSpan(\"Mixed\", \"mixed-icon\")}\n        ${makeSpan(\"None\", \"none-icon\")}\n    </span>`\n);\nvar SortIndicatorComp = class extends Component {\n  constructor(skipTemplate) {\n    super();\n    this.eSortOrder = RefPlaceholder;\n    this.eSortAsc = RefPlaceholder;\n    this.eSortDesc = RefPlaceholder;\n    this.eSortMixed = RefPlaceholder;\n    this.eSortNone = RefPlaceholder;\n    if (!skipTemplate) {\n      this.setTemplate(SortIndicatorTemplate);\n    }\n  }\n  wireBeans(beans) {\n    this.sortController = beans.sortController;\n  }\n  attachCustomElements(eSortOrder, eSortAsc, eSortDesc, eSortMixed, eSortNone) {\n    this.eSortOrder = eSortOrder;\n    this.eSortAsc = eSortAsc;\n    this.eSortDesc = eSortDesc;\n    this.eSortMixed = eSortMixed;\n    this.eSortNone = eSortNone;\n  }\n  setupSort(column, suppressOrder = false) {\n    this.column = column;\n    this.suppressOrder = suppressOrder;\n    this.setupMultiSortIndicator();\n    if (!this.column.isSortable() && !this.column.getColDef().showRowGroup) {\n      return;\n    }\n    this.addInIcon(\"sortAscending\", this.eSortAsc, column);\n    this.addInIcon(\"sortDescending\", this.eSortDesc, column);\n    this.addInIcon(\"sortUnSort\", this.eSortNone, column);\n    const updateIcons = this.updateIcons.bind(this);\n    const sortUpdated = this.onSortChanged.bind(this);\n    this.addManagedPropertyListener(\"unSortIcon\", updateIcons);\n    this.addManagedEventListeners({\n      newColumnsLoaded: updateIcons,\n      // Watch global events, as row group columns can effect their display column.\n      sortChanged: sortUpdated,\n      // when grouping changes so can sort indexes and icons\n      columnRowGroupChanged: sortUpdated\n    });\n    this.onSortChanged();\n  }\n  addInIcon(iconName, eParent, column) {\n    if (eParent == null) {\n      return;\n    }\n    const eIcon = _createIconNoSpan(iconName, this.gos, column);\n    if (eIcon) {\n      eParent.appendChild(eIcon);\n    }\n  }\n  onSortChanged() {\n    this.updateIcons();\n    if (!this.suppressOrder) {\n      this.updateSortOrder();\n    }\n  }\n  updateIcons() {\n    const sortDirection = this.sortController.getDisplaySortForColumn(this.column);\n    if (this.eSortAsc) {\n      const isAscending = sortDirection === \"asc\";\n      _setDisplayed(this.eSortAsc, isAscending, { skipAriaHidden: true });\n    }\n    if (this.eSortDesc) {\n      const isDescending = sortDirection === \"desc\";\n      _setDisplayed(this.eSortDesc, isDescending, { skipAriaHidden: true });\n    }\n    if (this.eSortNone) {\n      const alwaysHideNoSort = !this.column.getColDef().unSortIcon && !this.gos.get(\"unSortIcon\");\n      const isNone = sortDirection === null || sortDirection === void 0;\n      _setDisplayed(this.eSortNone, !alwaysHideNoSort && isNone, { skipAriaHidden: true });\n    }\n  }\n  setupMultiSortIndicator() {\n    this.addInIcon(\"sortUnSort\", this.eSortMixed, this.column);\n    const isColumnShowingRowGroup = this.column.getColDef().showRowGroup;\n    const areGroupsCoupled = _isColumnsSortingCoupledToGroup(this.gos);\n    if (areGroupsCoupled && isColumnShowingRowGroup) {\n      this.addManagedEventListeners({\n        // Watch global events, as row group columns can effect their display column.\n        sortChanged: this.updateMultiSortIndicator.bind(this),\n        // when grouping changes so can sort indexes and icons\n        columnRowGroupChanged: this.updateMultiSortIndicator.bind(this)\n      });\n      this.updateMultiSortIndicator();\n    }\n  }\n  updateMultiSortIndicator() {\n    if (this.eSortMixed) {\n      const isMixedSort = this.sortController.getDisplaySortForColumn(this.column) === \"mixed\";\n      _setDisplayed(this.eSortMixed, isMixedSort, { skipAriaHidden: true });\n    }\n  }\n  // we listen here for global sort events, NOT column sort events, as we want to do this\n  // when sorting has been set on all column (if we listened just for our col (where we\n  // set the asc / desc icons) then it's possible other cols are yet to get their sorting state.\n  updateSortOrder() {\n    if (!this.eSortOrder) {\n      return;\n    }\n    const allColumnsWithSorting = this.sortController.getColumnsWithSortingOrdered();\n    const indexThisCol = this.sortController.getDisplaySortIndexForColumn(this.column) ?? -1;\n    const moreThanOneColSorting = allColumnsWithSorting.some(\n      (col) => this.sortController.getDisplaySortIndexForColumn(col) ?? -1 >= 1\n    );\n    const showIndex = indexThisCol >= 0 && moreThanOneColSorting;\n    _setDisplayed(this.eSortOrder, showIndex, { skipAriaHidden: true });\n    if (indexThisCol >= 0) {\n      this.eSortOrder.textContent = (indexThisCol + 1).toString();\n    } else {\n      _clearElement(this.eSortOrder);\n    }\n  }\n};\nvar SortIndicatorSelector = {\n  selector: \"AG-SORT-INDICATOR\",\n  component: SortIndicatorComp\n};\n\n// community-modules/core/src/headerRendering/cells/column/headerComp.ts\nvar HeaderCompTemplate = (\n  /* html */\n  `<div class=\"ag-cell-label-container\" role=\"presentation\">\n        <span data-ref=\"eMenu\" class=\"ag-header-icon ag-header-cell-menu-button\" aria-hidden=\"true\"></span>\n        <span data-ref=\"eFilterButton\" class=\"ag-header-icon ag-header-cell-filter-button\" aria-hidden=\"true\"></span>\n        <div data-ref=\"eLabel\" class=\"ag-header-cell-label\" role=\"presentation\">\n            <span data-ref=\"eText\" class=\"ag-header-cell-text\"></span>\n            <span data-ref=\"eFilter\" class=\"ag-header-icon ag-header-label-icon ag-filter-icon\" aria-hidden=\"true\"></span>\n            <ag-sort-indicator data-ref=\"eSortIndicator\"></ag-sort-indicator>\n        </div>\n    </div>`\n);\nvar HeaderComp = class extends Component {\n  constructor() {\n    super(...arguments);\n    this.eFilter = RefPlaceholder;\n    this.eFilterButton = RefPlaceholder;\n    this.eSortIndicator = RefPlaceholder;\n    this.eMenu = RefPlaceholder;\n    this.eLabel = RefPlaceholder;\n    this.eText = RefPlaceholder;\n    /**\n     * Selectors for custom headers templates\n     */\n    this.eSortOrder = RefPlaceholder;\n    this.eSortAsc = RefPlaceholder;\n    this.eSortDesc = RefPlaceholder;\n    this.eSortMixed = RefPlaceholder;\n    this.eSortNone = RefPlaceholder;\n    this.lastMovingChanged = 0;\n  }\n  wireBeans(beans) {\n    this.sortController = beans.sortController;\n    this.menuService = beans.menuService;\n    this.funcColsService = beans.funcColsService;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n  refresh(params) {\n    const oldParams = this.params;\n    this.params = params;\n    if (this.workOutTemplate() != this.currentTemplate || this.workOutShowMenu() != this.currentShowMenu || this.workOutSort() != this.currentSort || this.shouldSuppressMenuHide() != this.currentSuppressMenuHide || oldParams.enableFilterButton != params.enableFilterButton || oldParams.enableFilterIcon != params.enableFilterIcon) {\n      return false;\n    }\n    this.setDisplayName(params);\n    return true;\n  }\n  workOutTemplate() {\n    let template = this.params.template ?? HeaderCompTemplate;\n    template = template && template.trim ? template.trim() : template;\n    return template;\n  }\n  init(params) {\n    this.params = params;\n    this.currentTemplate = this.workOutTemplate();\n    this.setTemplate(this.currentTemplate, [SortIndicatorSelector]);\n    this.setupTap();\n    this.setMenu();\n    this.setupSort();\n    this.setupFilterIcon();\n    this.setupFilterButton();\n    this.setDisplayName(params);\n  }\n  setDisplayName(params) {\n    if (this.currentDisplayName != params.displayName) {\n      this.currentDisplayName = params.displayName;\n      const displayNameSanitised = _escapeString(this.currentDisplayName, true);\n      if (this.eText) {\n        this.eText.textContent = displayNameSanitised;\n      }\n    }\n  }\n  addInIcon(iconName, eParent, column) {\n    if (eParent == null) {\n      return;\n    }\n    const eIcon = _createIconNoSpan(iconName, this.gos, column);\n    if (eIcon) {\n      eParent.appendChild(eIcon);\n    }\n  }\n  setupTap() {\n    const { gos } = this;\n    if (gos.get(\"suppressTouch\")) {\n      return;\n    }\n    const touchListener = new TouchListener(this.getGui(), true);\n    const suppressMenuHide = this.shouldSuppressMenuHide();\n    const tapMenuButton = suppressMenuHide && _exists(this.eMenu);\n    const menuTouchListener = tapMenuButton ? new TouchListener(this.eMenu, true) : touchListener;\n    if (this.params.enableMenu) {\n      const eventType = tapMenuButton ? \"tap\" : \"longTap\";\n      const showMenuFn = (event) => this.params.showColumnMenuAfterMouseClick(event.touchStart);\n      this.addManagedListeners(menuTouchListener, { [eventType]: showMenuFn });\n    }\n    if (this.params.enableSorting) {\n      const tapListener = (event) => {\n        const target = event.touchStart.target;\n        if (suppressMenuHide && (this.eMenu?.contains(target) || this.eFilterButton?.contains(target))) {\n          return;\n        }\n        this.sortController.progressSort(this.params.column, false, \"uiColumnSorted\");\n      };\n      this.addManagedListeners(touchListener, { tap: tapListener });\n    }\n    if (this.params.enableFilterButton) {\n      const filterButtonTouchListener = new TouchListener(this.eFilterButton, true);\n      this.addManagedListeners(filterButtonTouchListener, {\n        tap: () => this.params.showFilter(this.eFilterButton)\n      });\n      this.addDestroyFunc(() => filterButtonTouchListener.destroy());\n    }\n    this.addDestroyFunc(() => touchListener.destroy());\n    if (tapMenuButton) {\n      this.addDestroyFunc(() => menuTouchListener.destroy());\n    }\n  }\n  workOutShowMenu() {\n    return this.params.enableMenu && this.menuService.isHeaderMenuButtonEnabled();\n  }\n  shouldSuppressMenuHide() {\n    return this.menuService.isHeaderMenuButtonAlwaysShowEnabled();\n  }\n  setMenu() {\n    if (!this.eMenu) {\n      return;\n    }\n    this.currentShowMenu = this.workOutShowMenu();\n    if (!this.currentShowMenu) {\n      _removeFromParent(this.eMenu);\n      this.eMenu = void 0;\n      return;\n    }\n    const isLegacyMenu = this.menuService.isLegacyMenuEnabled();\n    this.addInIcon(isLegacyMenu ? \"menu\" : \"menuAlt\", this.eMenu, this.params.column);\n    this.eMenu.classList.toggle(\"ag-header-menu-icon\", !isLegacyMenu);\n    this.currentSuppressMenuHide = this.shouldSuppressMenuHide();\n    this.addManagedElementListeners(this.eMenu, { click: () => this.params.showColumnMenu(this.eMenu) });\n    this.eMenu.classList.toggle(\"ag-header-menu-always-show\", this.currentSuppressMenuHide);\n  }\n  onMenuKeyboardShortcut(isFilterShortcut) {\n    const column = this.params.column;\n    const isLegacyMenuEnabled = this.menuService.isLegacyMenuEnabled();\n    if (isFilterShortcut && !isLegacyMenuEnabled) {\n      if (this.menuService.isFilterMenuInHeaderEnabled(column)) {\n        this.params.showFilter(this.eFilterButton ?? this.eMenu ?? this.getGui());\n        return true;\n      }\n    } else if (this.params.enableMenu) {\n      this.params.showColumnMenu(this.eMenu ?? this.eFilterButton ?? this.getGui());\n      return true;\n    }\n    return false;\n  }\n  workOutSort() {\n    return this.params.enableSorting;\n  }\n  setupSort() {\n    this.currentSort = this.params.enableSorting;\n    if (!this.eSortIndicator) {\n      this.eSortIndicator = this.createBean(new SortIndicatorComp(true));\n      this.eSortIndicator.attachCustomElements(\n        this.eSortOrder,\n        this.eSortAsc,\n        this.eSortDesc,\n        this.eSortMixed,\n        this.eSortNone\n      );\n    }\n    this.eSortIndicator.setupSort(this.params.column);\n    if (!this.currentSort) {\n      return;\n    }\n    this.addManagedListeners(this.params.column, {\n      movingChanged: () => {\n        this.lastMovingChanged = (/* @__PURE__ */ new Date()).getTime();\n      }\n    });\n    if (this.eLabel) {\n      this.addManagedElementListeners(this.eLabel, {\n        click: (event) => {\n          const moving = this.params.column.isMoving();\n          const nowTime = (/* @__PURE__ */ new Date()).getTime();\n          const movedRecently = nowTime - this.lastMovingChanged < 50;\n          const columnMoving = moving || movedRecently;\n          if (!columnMoving) {\n            const sortUsingCtrl = this.gos.get(\"multiSortKey\") === \"ctrl\";\n            const multiSort = sortUsingCtrl ? event.ctrlKey || event.metaKey : event.shiftKey;\n            this.params.progressSort(multiSort);\n          }\n        }\n      });\n    }\n    const onSortingChanged = () => {\n      const sort = this.params.column.getSort();\n      this.addOrRemoveCssClass(\"ag-header-cell-sorted-asc\", sort === \"asc\");\n      this.addOrRemoveCssClass(\"ag-header-cell-sorted-desc\", sort === \"desc\");\n      this.addOrRemoveCssClass(\"ag-header-cell-sorted-none\", !sort);\n      if (this.params.column.getColDef().showRowGroup) {\n        const sourceColumns = this.funcColsService.getSourceColumnsForGroupColumn(\n          this.params.column\n        );\n        const sortDirectionsMatch = sourceColumns?.every(\n          (sourceCol) => this.params.column.getSort() == sourceCol.getSort()\n        );\n        const isMultiSorting = !sortDirectionsMatch;\n        this.addOrRemoveCssClass(\"ag-header-cell-sorted-mixed\", isMultiSorting);\n      }\n    };\n    this.addManagedEventListeners({\n      sortChanged: onSortingChanged,\n      columnRowGroupChanged: onSortingChanged\n    });\n  }\n  setupFilterIcon() {\n    if (!this.eFilter) {\n      return;\n    }\n    this.configureFilter(this.params.enableFilterIcon, this.eFilter, this.onFilterChangedIcon.bind(this));\n  }\n  setupFilterButton() {\n    if (!this.eFilterButton) {\n      return;\n    }\n    const configured = this.configureFilter(\n      this.params.enableFilterButton,\n      this.eFilterButton,\n      this.onFilterChangedButton.bind(this)\n    );\n    if (configured) {\n      this.addManagedElementListeners(this.eFilterButton, {\n        click: () => this.params.showFilter(this.eFilterButton)\n      });\n    } else {\n      this.eFilterButton = void 0;\n    }\n  }\n  configureFilter(enabled, element, filterChangedCallback) {\n    if (!enabled) {\n      _removeFromParent(element);\n      return false;\n    }\n    const column = this.params.column;\n    this.addInIcon(\"filter\", element, column);\n    this.addManagedListeners(column, { filterChanged: filterChangedCallback });\n    filterChangedCallback();\n    return true;\n  }\n  onFilterChangedIcon() {\n    const filterPresent = this.params.column.isFilterActive();\n    _setDisplayed(this.eFilter, filterPresent, { skipAriaHidden: true });\n  }\n  onFilterChangedButton() {\n    const filterPresent = this.params.column.isFilterActive();\n    this.eFilterButton.classList.toggle(\"ag-filter-active\", filterPresent);\n  }\n  getAnchorElementForMenu(isFilter) {\n    if (isFilter) {\n      return this.eFilterButton ?? this.eMenu ?? this.getGui();\n    }\n    return this.eMenu ?? this.eFilterButton ?? this.getGui();\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/columnGroup/headerGroupComp.ts\nvar HeaderGroupComp = class extends Component {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-header-group-cell-label\" role=\"presentation\">\n            <span data-ref=\"agLabel\" class=\"ag-header-group-text\" role=\"presentation\"></span>\n            <span data-ref=\"agOpened\" class=\"ag-header-icon ag-header-expand-icon ag-header-expand-icon-expanded\"></span>\n            <span data-ref=\"agClosed\" class=\"ag-header-icon ag-header-expand-icon ag-header-expand-icon-collapsed\"></span>\n        </div>`\n    );\n    this.agOpened = RefPlaceholder;\n    this.agClosed = RefPlaceholder;\n    this.agLabel = RefPlaceholder;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n  init(params) {\n    this.params = params;\n    this.checkWarnings();\n    this.setupLabel();\n    this.addGroupExpandIcon();\n    this.setupExpandIcons();\n  }\n  checkWarnings() {\n    const paramsAny = this.params;\n    if (paramsAny.template) {\n      _warnOnce(\n        `A template was provided for Header Group Comp - templates are only supported for Header Comps (not groups)`\n      );\n    }\n  }\n  setupExpandIcons() {\n    this.addInIcon(\"columnGroupOpened\", this.agOpened);\n    this.addInIcon(\"columnGroupClosed\", this.agClosed);\n    const expandAction = (event) => {\n      if (_isStopPropagationForAgGrid(event)) {\n        return;\n      }\n      const newExpandedValue = !this.params.columnGroup.isExpanded();\n      this.columnModel.setColumnGroupOpened(\n        this.params.columnGroup.getProvidedColumnGroup(),\n        newExpandedValue,\n        \"uiColumnExpanded\"\n      );\n    };\n    this.addTouchAndClickListeners(this.agClosed, expandAction);\n    this.addTouchAndClickListeners(this.agOpened, expandAction);\n    const stopPropagationAction = (event) => {\n      _stopPropagationForAgGrid(event);\n    };\n    this.addManagedElementListeners(this.agClosed, { dblclick: stopPropagationAction });\n    this.addManagedElementListeners(this.agOpened, { dblclick: stopPropagationAction });\n    this.addManagedElementListeners(this.getGui(), { dblclick: expandAction });\n    this.updateIconVisibility();\n    const providedColumnGroup = this.params.columnGroup.getProvidedColumnGroup();\n    const updateIcon = this.updateIconVisibility.bind(this);\n    this.addManagedListeners(providedColumnGroup, {\n      expandedChanged: updateIcon,\n      expandableChanged: updateIcon\n    });\n  }\n  addTouchAndClickListeners(eElement, action) {\n    const touchListener = new TouchListener(eElement, true);\n    this.addManagedListeners(touchListener, { tap: action });\n    this.addDestroyFunc(() => touchListener.destroy());\n    this.addManagedElementListeners(eElement, { click: action });\n  }\n  updateIconVisibility() {\n    const columnGroup = this.params.columnGroup;\n    if (columnGroup.isExpandable()) {\n      const expanded = this.params.columnGroup.isExpanded();\n      _setDisplayed(this.agOpened, expanded);\n      _setDisplayed(this.agClosed, !expanded);\n    } else {\n      _setDisplayed(this.agOpened, false);\n      _setDisplayed(this.agClosed, false);\n    }\n  }\n  addInIcon(iconName, element) {\n    const eIcon = _createIconNoSpan(iconName, this.gos, null);\n    if (eIcon) {\n      element.appendChild(eIcon);\n    }\n  }\n  addGroupExpandIcon() {\n    if (!this.params.columnGroup.isExpandable()) {\n      _setDisplayed(this.agOpened, false);\n      _setDisplayed(this.agClosed, false);\n      return;\n    }\n  }\n  setupLabel() {\n    const { displayName, columnGroup } = this.params;\n    if (_exists(displayName)) {\n      const displayNameSanitised = _escapeString(displayName, true);\n      this.agLabel.textContent = displayNameSanitised;\n    }\n    this.addOrRemoveCssClass(\"ag-sticky-label\", !columnGroup.getColGroupDef()?.suppressStickyLabel);\n  }\n};\n\n// community-modules/core/src/rendering/cellRenderers/animateShowChangeCellRenderer.ts\nvar ARROW_UP = \"\\u2191\";\nvar ARROW_DOWN = \"\\u2193\";\nvar AnimateShowChangeCellRenderer = class extends Component {\n  constructor() {\n    super();\n    this.refreshCount = 0;\n    const template = document.createElement(\"span\");\n    const delta = document.createElement(\"span\");\n    delta.setAttribute(\"class\", \"ag-value-change-delta\");\n    const value = document.createElement(\"span\");\n    value.setAttribute(\"class\", \"ag-value-change-value\");\n    template.appendChild(delta);\n    template.appendChild(value);\n    this.setTemplateFromElement(template);\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n  }\n  init(params) {\n    this.eValue = this.queryForHtmlElement(\".ag-value-change-value\");\n    this.eDelta = this.queryForHtmlElement(\".ag-value-change-delta\");\n    this.refresh(params, true);\n  }\n  showDelta(params, delta) {\n    const absDelta = Math.abs(delta);\n    const valueFormatted = params.formatValue(absDelta);\n    const valueToUse = _exists(valueFormatted) ? valueFormatted : absDelta;\n    const deltaUp = delta >= 0;\n    if (deltaUp) {\n      this.eDelta.textContent = ARROW_UP + valueToUse;\n    } else {\n      this.eDelta.textContent = ARROW_DOWN + valueToUse;\n    }\n    this.eDelta.classList.toggle(\"ag-value-change-delta-up\", deltaUp);\n    this.eDelta.classList.toggle(\"ag-value-change-delta-down\", !deltaUp);\n  }\n  setTimerToRemoveDelta() {\n    this.refreshCount++;\n    const refreshCountCopy = this.refreshCount;\n    this.getFrameworkOverrides().wrapIncoming(() => {\n      window.setTimeout(() => {\n        if (refreshCountCopy === this.refreshCount) {\n          this.hideDeltaValue();\n        }\n      }, 2e3);\n    });\n  }\n  hideDeltaValue() {\n    this.eValue.classList.remove(\"ag-value-change-value-highlight\");\n    _clearElement(this.eDelta);\n  }\n  refresh(params, isInitialRender = false) {\n    const value = params.value;\n    if (value === this.lastValue) {\n      return false;\n    }\n    if (_exists(params.valueFormatted)) {\n      this.eValue.textContent = params.valueFormatted;\n    } else if (_exists(params.value)) {\n      this.eValue.textContent = value;\n    } else {\n      _clearElement(this.eValue);\n    }\n    if (this.filterManager?.isSuppressFlashingCellsBecauseFiltering()) {\n      return false;\n    }\n    if (typeof value === \"number\" && typeof this.lastValue === \"number\") {\n      const delta = value - this.lastValue;\n      this.showDelta(params, delta);\n    }\n    if (this.lastValue) {\n      this.eValue.classList.add(\"ag-value-change-value-highlight\");\n    }\n    if (!isInitialRender) {\n      this.setTimerToRemoveDelta();\n    }\n    this.lastValue = value;\n    return true;\n  }\n};\n\n// community-modules/core/src/rendering/cellRenderers/animateSlideCellRenderer.ts\nvar AnimateSlideCellRenderer = class extends Component {\n  constructor() {\n    super();\n    this.refreshCount = 0;\n    const template = document.createElement(\"span\");\n    const slide = document.createElement(\"span\");\n    slide.setAttribute(\"class\", \"ag-value-slide-current\");\n    template.appendChild(slide);\n    this.setTemplateFromElement(template);\n    this.eCurrent = this.queryForHtmlElement(\".ag-value-slide-current\");\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n  }\n  init(params) {\n    this.refresh(params, true);\n  }\n  addSlideAnimation() {\n    this.refreshCount++;\n    const refreshCountCopy = this.refreshCount;\n    if (this.ePrevious) {\n      this.getGui().removeChild(this.ePrevious);\n    }\n    const prevElement = document.createElement(\"span\");\n    prevElement.setAttribute(\"class\", \"ag-value-slide-previous ag-value-slide-out\");\n    this.ePrevious = prevElement;\n    this.ePrevious.textContent = this.eCurrent.textContent;\n    this.getGui().insertBefore(this.ePrevious, this.eCurrent);\n    this.getFrameworkOverrides().wrapIncoming(() => {\n      window.setTimeout(() => {\n        if (refreshCountCopy !== this.refreshCount) {\n          return;\n        }\n        this.ePrevious.classList.add(\"ag-value-slide-out-end\");\n      }, 50);\n      window.setTimeout(() => {\n        if (refreshCountCopy !== this.refreshCount) {\n          return;\n        }\n        this.getGui().removeChild(this.ePrevious);\n        this.ePrevious = null;\n      }, 3e3);\n    });\n  }\n  refresh(params, isInitialRender = false) {\n    let value = params.value;\n    if (_missing(value)) {\n      value = \"\";\n    }\n    if (value === this.lastValue) {\n      return false;\n    }\n    if (this.filterManager?.isSuppressFlashingCellsBecauseFiltering()) {\n      return false;\n    }\n    if (!isInitialRender) {\n      this.addSlideAnimation();\n    }\n    this.lastValue = value;\n    if (_exists(params.valueFormatted)) {\n      this.eCurrent.textContent = params.valueFormatted;\n    } else if (_exists(params.value)) {\n      this.eCurrent.textContent = value;\n    } else {\n      _clearElement(this.eCurrent);\n    }\n    return true;\n  }\n};\n\n// community-modules/core/src/constants/keyCode.ts\nvar KeyCode = class {\n};\nKeyCode.BACKSPACE = \"Backspace\";\nKeyCode.TAB = \"Tab\";\nKeyCode.ENTER = \"Enter\";\nKeyCode.ESCAPE = \"Escape\";\nKeyCode.SPACE = \" \";\nKeyCode.LEFT = \"ArrowLeft\";\nKeyCode.UP = \"ArrowUp\";\nKeyCode.RIGHT = \"ArrowRight\";\nKeyCode.DOWN = \"ArrowDown\";\nKeyCode.DELETE = \"Delete\";\nKeyCode.F2 = \"F2\";\nKeyCode.PAGE_UP = \"PageUp\";\nKeyCode.PAGE_DOWN = \"PageDown\";\nKeyCode.PAGE_HOME = \"Home\";\nKeyCode.PAGE_END = \"End\";\n// these should be used with `event.code` instead of `event.key`\n// as `event.key` changes when non-latin keyboards are used\nKeyCode.A = \"KeyA\";\nKeyCode.C = \"KeyC\";\nKeyCode.D = \"KeyD\";\nKeyCode.V = \"KeyV\";\nKeyCode.X = \"KeyX\";\nKeyCode.Y = \"KeyY\";\nKeyCode.Z = \"KeyZ\";\n\n// community-modules/core/src/widgets/agAbstractLabel.ts\nvar AgAbstractLabel = class extends Component {\n  constructor(config, template, components) {\n    super(template, components);\n    this.labelSeparator = \"\";\n    this.labelAlignment = \"left\";\n    this.disabled = false;\n    this.label = \"\";\n    this.config = config || {};\n  }\n  postConstruct() {\n    this.addCssClass(\"ag-labeled\");\n    this.eLabel.classList.add(\"ag-label\");\n    const { labelSeparator, label, labelWidth, labelAlignment, disabled } = this.config;\n    if (disabled != null) {\n      this.setDisabled(disabled);\n    }\n    if (labelSeparator != null) {\n      this.setLabelSeparator(labelSeparator);\n    }\n    if (label != null) {\n      this.setLabel(label);\n    }\n    if (labelWidth != null) {\n      this.setLabelWidth(labelWidth);\n    }\n    this.setLabelAlignment(labelAlignment || this.labelAlignment);\n    this.refreshLabel();\n  }\n  refreshLabel() {\n    _clearElement(this.eLabel);\n    if (typeof this.label === \"string\") {\n      this.eLabel.innerText = this.label + this.labelSeparator;\n    } else if (this.label) {\n      this.eLabel.appendChild(this.label);\n    }\n    if (this.label === \"\") {\n      _setDisplayed(this.eLabel, false);\n      _setAriaRole(this.eLabel, \"presentation\");\n    } else {\n      _setDisplayed(this.eLabel, true);\n      _setAriaRole(this.eLabel, null);\n    }\n  }\n  setLabelSeparator(labelSeparator) {\n    if (this.labelSeparator === labelSeparator) {\n      return this;\n    }\n    this.labelSeparator = labelSeparator;\n    if (this.label != null) {\n      this.refreshLabel();\n    }\n    return this;\n  }\n  getLabelId() {\n    this.eLabel.id = this.eLabel.id || `ag-${this.getCompId()}-label`;\n    return this.eLabel.id;\n  }\n  getLabel() {\n    return this.label;\n  }\n  setLabel(label) {\n    if (this.label === label) {\n      return this;\n    }\n    this.label = label;\n    this.refreshLabel();\n    return this;\n  }\n  setLabelAlignment(alignment) {\n    const eGui = this.getGui();\n    const eGuiClassList = eGui.classList;\n    eGuiClassList.toggle(\"ag-label-align-left\", alignment === \"left\");\n    eGuiClassList.toggle(\"ag-label-align-right\", alignment === \"right\");\n    eGuiClassList.toggle(\"ag-label-align-top\", alignment === \"top\");\n    return this;\n  }\n  setLabelEllipsis(hasEllipsis) {\n    this.eLabel.classList.toggle(\"ag-label-ellipsis\", hasEllipsis);\n    return this;\n  }\n  setLabelWidth(width) {\n    if (this.label == null) {\n      return this;\n    }\n    _setElementWidth(this.eLabel, width);\n    return this;\n  }\n  setDisabled(disabled) {\n    disabled = !!disabled;\n    const element = this.getGui();\n    _setDisabled(element, disabled);\n    element.classList.toggle(\"ag-disabled\", disabled);\n    this.disabled = disabled;\n    return this;\n  }\n  isDisabled() {\n    return !!this.disabled;\n  }\n};\n\n// community-modules/core/src/widgets/agAbstractField.ts\nvar AgAbstractField = class extends AgAbstractLabel {\n  constructor(config, template, components, className) {\n    super(config, template, components);\n    this.className = className;\n  }\n  postConstruct() {\n    super.postConstruct();\n    const { width, value, onValueChange } = this.config;\n    if (width != null) {\n      this.setWidth(width);\n    }\n    if (value != null) {\n      this.setValue(value);\n    }\n    if (onValueChange != null) {\n      this.onValueChange(onValueChange);\n    }\n    if (this.className) {\n      this.addCssClass(this.className);\n    }\n    this.refreshAriaLabelledBy();\n  }\n  setLabel(label) {\n    super.setLabel(label);\n    this.refreshAriaLabelledBy();\n    return this;\n  }\n  refreshAriaLabelledBy() {\n    const ariaEl = this.getAriaElement();\n    const labelId = this.getLabelId();\n    const label = this.getLabel();\n    if (label == null || label == \"\" || _getAriaLabel(ariaEl) !== null) {\n      _setAriaLabelledBy(ariaEl, \"\");\n    } else {\n      _setAriaLabelledBy(ariaEl, labelId ?? \"\");\n    }\n  }\n  setAriaLabel(label) {\n    _setAriaLabel(this.getAriaElement(), label);\n    this.refreshAriaLabelledBy();\n    return this;\n  }\n  onValueChange(callbackFn) {\n    this.addManagedListeners(this, { fieldValueChanged: () => callbackFn(this.getValue()) });\n    return this;\n  }\n  getWidth() {\n    return this.getGui().clientWidth;\n  }\n  setWidth(width) {\n    _setFixedWidth(this.getGui(), width);\n    return this;\n  }\n  getPreviousValue() {\n    return this.previousValue;\n  }\n  getValue() {\n    return this.value;\n  }\n  setValue(value, silent) {\n    if (this.value === value) {\n      return this;\n    }\n    this.previousValue = this.value;\n    this.value = value;\n    if (!silent) {\n      this.dispatchLocalEvent({ type: \"fieldValueChanged\" });\n    }\n    return this;\n  }\n};\n\n// community-modules/core/src/widgets/agAbstractInputField.ts\nvar AgAbstractInputField = class extends AgAbstractField {\n  constructor(config, className, inputType = \"text\", displayFieldTag = \"input\") {\n    super(\n      config,\n      config?.template ?? /* html */\n      `\n            <div role=\"presentation\">\n                <div data-ref=\"eLabel\" class=\"ag-input-field-label\"></div>\n                <div data-ref=\"eWrapper\" class=\"ag-wrapper ag-input-wrapper\" role=\"presentation\">\n                    <${displayFieldTag} data-ref=\"eInput\" class=\"ag-input-field-input\"></${displayFieldTag}>\n                </div>\n            </div>`,\n      [],\n      className\n    );\n    this.inputType = inputType;\n    this.displayFieldTag = displayFieldTag;\n    this.eLabel = RefPlaceholder;\n    this.eWrapper = RefPlaceholder;\n    this.eInput = RefPlaceholder;\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.setInputType();\n    this.eLabel.classList.add(`${this.className}-label`);\n    this.eWrapper.classList.add(`${this.className}-input-wrapper`);\n    this.eInput.classList.add(`${this.className}-input`);\n    this.addCssClass(\"ag-input-field\");\n    this.eInput.id = this.eInput.id || `ag-${this.getCompId()}-input`;\n    const { inputName, inputWidth } = this.config;\n    if (inputName != null) {\n      this.setInputName(inputName);\n    }\n    if (inputWidth != null) {\n      this.setInputWidth(inputWidth);\n    }\n    this.addInputListeners();\n    this.activateTabIndex([this.eInput]);\n  }\n  addInputListeners() {\n    this.addManagedElementListeners(this.eInput, { input: (e) => this.setValue(e.target.value) });\n  }\n  setInputType() {\n    if (this.displayFieldTag === \"input\") {\n      this.eInput.setAttribute(\"type\", this.inputType);\n    }\n  }\n  getInputElement() {\n    return this.eInput;\n  }\n  setInputWidth(width) {\n    _setElementWidth(this.eWrapper, width);\n    return this;\n  }\n  setInputName(name) {\n    this.getInputElement().setAttribute(\"name\", name);\n    return this;\n  }\n  getFocusableElement() {\n    return this.eInput;\n  }\n  setMaxLength(length) {\n    const eInput = this.eInput;\n    eInput.maxLength = length;\n    return this;\n  }\n  setInputPlaceholder(placeholder) {\n    _addOrRemoveAttribute(this.eInput, \"placeholder\", placeholder);\n    return this;\n  }\n  setInputAriaLabel(label) {\n    _setAriaLabel(this.eInput, label);\n    this.refreshAriaLabelledBy();\n    return this;\n  }\n  setDisabled(disabled) {\n    _setDisabled(this.eInput, disabled);\n    return super.setDisabled(disabled);\n  }\n  setAutoComplete(value) {\n    if (value === true) {\n      _addOrRemoveAttribute(this.eInput, \"autocomplete\", null);\n    } else {\n      const autoCompleteValue = typeof value === \"string\" ? value : \"off\";\n      _addOrRemoveAttribute(this.eInput, \"autocomplete\", autoCompleteValue);\n    }\n    return this;\n  }\n};\n\n// community-modules/core/src/widgets/agCheckbox.ts\nvar AgCheckbox = class extends AgAbstractInputField {\n  constructor(config, className = \"ag-checkbox\", inputType = \"checkbox\") {\n    super(config, className, inputType);\n    this.labelAlignment = \"right\";\n    this.selected = false;\n    this.readOnly = false;\n    this.passive = false;\n  }\n  postConstruct() {\n    super.postConstruct();\n    const { readOnly, passive } = this.config;\n    if (typeof readOnly === \"boolean\")\n      this.setReadOnly(readOnly);\n    if (typeof passive === \"boolean\")\n      this.setPassive(passive);\n  }\n  addInputListeners() {\n    this.addManagedElementListeners(this.eInput, { click: this.onCheckboxClick.bind(this) });\n    this.addManagedElementListeners(this.eLabel, { click: this.toggle.bind(this) });\n  }\n  getNextValue() {\n    return this.selected === void 0 ? true : !this.selected;\n  }\n  setPassive(passive) {\n    this.passive = passive;\n  }\n  isReadOnly() {\n    return this.readOnly;\n  }\n  setReadOnly(readOnly) {\n    this.eWrapper.classList.toggle(\"ag-disabled\", readOnly);\n    this.eInput.disabled = readOnly;\n    this.readOnly = readOnly;\n  }\n  setDisabled(disabled) {\n    this.eWrapper.classList.toggle(\"ag-disabled\", disabled);\n    return super.setDisabled(disabled);\n  }\n  toggle() {\n    if (this.eInput.disabled) {\n      return;\n    }\n    const previousValue = this.isSelected();\n    const nextValue = this.getNextValue();\n    if (this.passive) {\n      this.dispatchChange(nextValue, previousValue);\n    } else {\n      this.setValue(nextValue);\n    }\n  }\n  getValue() {\n    return this.isSelected();\n  }\n  setValue(value, silent) {\n    this.refreshSelectedClass(value);\n    this.setSelected(value, silent);\n    return this;\n  }\n  setName(name) {\n    const input = this.getInputElement();\n    input.name = name;\n    return this;\n  }\n  isSelected() {\n    return this.selected;\n  }\n  setSelected(selected, silent) {\n    if (this.isSelected() === selected) {\n      return;\n    }\n    this.previousValue = this.isSelected();\n    selected = this.selected = typeof selected === \"boolean\" ? selected : void 0;\n    this.eInput.checked = selected;\n    this.eInput.indeterminate = selected === void 0;\n    if (!silent) {\n      this.dispatchChange(this.selected, this.previousValue);\n    }\n  }\n  dispatchChange(selected, previousValue, event) {\n    this.dispatchLocalEvent({ type: \"fieldValueChanged\", selected, previousValue, event });\n    const input = this.getInputElement();\n    this.eventService.dispatchEvent({\n      type: \"checkboxChanged\",\n      id: input.id,\n      name: input.name,\n      selected,\n      previousValue\n    });\n  }\n  onCheckboxClick(e) {\n    if (this.passive || this.eInput.disabled) {\n      return;\n    }\n    const previousValue = this.isSelected();\n    const selected = this.selected = e.target.checked;\n    this.refreshSelectedClass(selected);\n    this.dispatchChange(selected, previousValue, e);\n  }\n  refreshSelectedClass(value) {\n    this.eWrapper.classList.toggle(\"ag-checked\", value === true);\n    this.eWrapper.classList.toggle(\"ag-indeterminate\", value == null);\n  }\n};\nvar AgCheckboxSelector = {\n  selector: \"AG-CHECKBOX\",\n  component: AgCheckbox\n};\n\n// community-modules/core/src/rendering/cellRenderers/checkboxCellRenderer.ts\nvar CheckboxCellRenderer = class extends Component {\n  constructor() {\n    super(\n      /* html*/\n      `\n            <div class=\"ag-cell-wrapper ag-checkbox-cell\" role=\"presentation\">\n                <ag-checkbox role=\"presentation\" data-ref=\"eCheckbox\"></ag-checkbox>\n            </div>`,\n      [AgCheckboxSelector]\n    );\n    this.eCheckbox = RefPlaceholder;\n  }\n  init(params) {\n    this.refresh(params);\n    const inputEl = this.eCheckbox.getInputElement();\n    inputEl.setAttribute(\"tabindex\", \"-1\");\n    _setAriaLive(inputEl, \"polite\");\n    this.addManagedListeners(inputEl, {\n      click: (event) => {\n        _stopPropagationForAgGrid(event);\n        if (this.eCheckbox.isDisabled()) {\n          return;\n        }\n        const isSelected = this.eCheckbox.getValue();\n        this.onCheckboxChanged(isSelected);\n      },\n      dblclick: (event) => {\n        _stopPropagationForAgGrid(event);\n      }\n    });\n    this.addManagedElementListeners(this.params.eGridCell, {\n      keydown: (event) => {\n        if (event.key === KeyCode.SPACE && !this.eCheckbox.isDisabled()) {\n          if (this.params.eGridCell === _getActiveDomElement(this.gos)) {\n            this.eCheckbox.toggle();\n          }\n          const isSelected = this.eCheckbox.getValue();\n          this.onCheckboxChanged(isSelected);\n          event.preventDefault();\n        }\n      }\n    });\n  }\n  refresh(params) {\n    this.params = params;\n    this.updateCheckbox(params);\n    return true;\n  }\n  updateCheckbox(params) {\n    let isSelected;\n    let displayed = true;\n    if (params.node.group && params.column) {\n      if (typeof params.value === \"boolean\") {\n        isSelected = params.value;\n      } else {\n        const colId = params.column.getColId();\n        if (colId.startsWith(GROUP_AUTO_COLUMN_ID)) {\n          isSelected = params.value == null || params.value === \"\" ? void 0 : params.value === \"true\";\n        } else if (params.node.aggData && params.node.aggData[colId] !== void 0) {\n          isSelected = params.value ?? void 0;\n        } else {\n          displayed = false;\n        }\n      }\n    } else {\n      isSelected = params.value ?? void 0;\n    }\n    if (!displayed) {\n      this.eCheckbox.setDisplayed(false);\n      return;\n    }\n    this.eCheckbox.setValue(isSelected);\n    const disabled = params.disabled != null ? params.disabled : !params.column?.isCellEditable(params.node);\n    this.eCheckbox.setDisabled(disabled);\n    const translate = this.localeService.getLocaleTextFunc();\n    const stateName = _getAriaCheckboxStateName(translate, isSelected);\n    const ariaLabel = disabled ? stateName : `${translate(\"ariaToggleCellValue\", \"Press SPACE to toggle cell value\")} (${stateName})`;\n    this.eCheckbox.setInputAriaLabel(ariaLabel);\n  }\n  onCheckboxChanged(isSelected) {\n    const { column, node, value } = this.params;\n    this.eventService.dispatchEvent({\n      type: \"cellEditingStarted\",\n      column,\n      colDef: column?.getColDef(),\n      data: node.data,\n      node,\n      rowIndex: node.rowIndex,\n      rowPinned: node.rowPinned,\n      value\n    });\n    const valueChanged = this.params.node.setDataValue(this.params.column, isSelected, \"edit\");\n    this.eventService.dispatchEvent({\n      type: \"cellEditingStopped\",\n      column,\n      colDef: column?.getColDef(),\n      data: node.data,\n      node,\n      rowIndex: node.rowIndex,\n      rowPinned: node.rowPinned,\n      value,\n      oldValue: value,\n      newValue: isSelected,\n      valueChanged\n    });\n    if (!valueChanged) {\n      this.updateCheckbox(this.params);\n    }\n  }\n};\n\n// community-modules/core/src/rendering/cellRenderers/loadingCellRenderer.ts\nvar LoadingCellRenderer = class extends Component {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-loading\">\n            <span class=\"ag-loading-icon\" data-ref=\"eLoadingIcon\"></span>\n            <span class=\"ag-loading-text\" data-ref=\"eLoadingText\"></span>\n        </div>`\n    );\n    this.eLoadingIcon = RefPlaceholder;\n    this.eLoadingText = RefPlaceholder;\n  }\n  init(params) {\n    params.node.failedLoad ? this.setupFailed() : this.setupLoading();\n  }\n  setupFailed() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    this.eLoadingText.innerText = localeTextFunc(\"loadingError\", \"ERR\");\n  }\n  setupLoading() {\n    const eLoadingIcon = _createIconNoSpan(\"groupLoading\", this.gos, null);\n    if (eLoadingIcon) {\n      this.eLoadingIcon.appendChild(eLoadingIcon);\n    }\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    this.eLoadingText.innerText = localeTextFunc(\"loadingOoo\", \"Loading\");\n  }\n  refresh(params) {\n    return false;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/rendering/cellRenderers/skeletonCellRenderer.ts\nvar SkeletonCellRenderer = class extends Component {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-skeleton-container\"></div>`\n    );\n  }\n  init(params) {\n    const id = `ag-cell-skeleton-renderer-${this.getCompId()}`;\n    this.getGui().setAttribute(\"id\", id);\n    this.addDestroyFunc(() => _setAriaLabelledBy(params.eParentOfValue));\n    _setAriaLabelledBy(params.eParentOfValue, id);\n    params.node.failedLoad ? this.setupFailed() : this.setupLoading(params);\n  }\n  setupFailed() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    this.getGui().innerText = localeTextFunc(\"loadingError\", \"ERR\");\n    const ariaFailed = localeTextFunc(\"ariaSkeletonCellLoadingFailed\", \"Row failed to load\");\n    _setAriaLabel(this.getGui(), ariaFailed);\n  }\n  setupLoading(params) {\n    const eDocument = _getDocument(this.gos);\n    const skeletonEffect = eDocument.createElement(\"div\");\n    skeletonEffect.classList.add(\"ag-skeleton-effect\");\n    const rowIndex = params.node.rowIndex;\n    if (rowIndex != null) {\n      const width = 75 + 25 * (rowIndex % 2 === 0 ? Math.sin(rowIndex) : Math.cos(rowIndex));\n      skeletonEffect.style.width = `${width}%`;\n    }\n    this.getGui().appendChild(skeletonEffect);\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const ariaLoading = localeTextFunc(\"ariaSkeletonCellLoading\", \"Row data is loading\");\n    _setAriaLabel(this.getGui(), ariaLoading);\n  }\n  refresh(params) {\n    return false;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/rendering/overlays/overlayComponent.ts\nvar OverlayComponent = class extends Component {\n  constructor() {\n    super();\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/rendering/overlays/loadingOverlayComponent.ts\nvar LoadingOverlayComponent = class extends OverlayComponent {\n  init() {\n    const customTemplate = _makeNull(this.gos.get(\"overlayLoadingTemplate\")?.trim());\n    this.setTemplate(\n      customTemplate ?? /* html */\n      `<span aria-live=\"polite\" aria-atomic=\"true\" class=\"ag-overlay-loading-center\"></span>`\n    );\n    if (!customTemplate) {\n      const localeTextFunc = this.localeService.getLocaleTextFunc();\n      setTimeout(() => {\n        this.getGui().textContent = localeTextFunc(\"loadingOoo\", \"Loading...\");\n      });\n    }\n  }\n};\n\n// community-modules/core/src/rendering/overlays/noRowsOverlayComponent.ts\nvar NoRowsOverlayComponent = class extends OverlayComponent {\n  init() {\n    const customTemplate = _makeNull(this.gos.get(\"overlayNoRowsTemplate\")?.trim());\n    this.setTemplate(customTemplate ?? /* html */\n    `<span class=\"ag-overlay-no-rows-center\"></span>`);\n    if (!customTemplate) {\n      const localeTextFunc = this.localeService.getLocaleTextFunc();\n      setTimeout(() => {\n        this.getGui().textContent = localeTextFunc(\"noRowsToShow\", \"No Rows To Show\");\n      });\n    }\n  }\n};\n\n// community-modules/core/src/widgets/popupComponent.ts\nvar PopupComponent = class extends Component {\n  isPopup() {\n    return true;\n  }\n  setParentComponent(container) {\n    container.addCssClass(\"ag-has-popup\");\n    super.setParentComponent(container);\n  }\n  destroy() {\n    const parentComp = this.parentComponent;\n    const hasParent = parentComp && parentComp.isAlive();\n    if (hasParent) {\n      parentComp.getGui().classList.remove(\"ag-has-popup\");\n    }\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/rendering/tooltipComponent.ts\nvar TooltipComponent = class extends PopupComponent {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-tooltip\"></div>`\n    );\n  }\n  // will need to type params\n  init(params) {\n    const { value } = params;\n    this.getGui().textContent = _escapeString(value, true);\n  }\n};\n\n// community-modules/core/src/utils/fuzzyMatch.ts\nfunction _fuzzySuggestions(params) {\n  const { inputValue, allSuggestions, hideIrrelevant, filterByPercentageOfBestMatch, addSequentialWeight } = params;\n  let thisSuggestions = allSuggestions.map((text, idx) => ({\n    value: text,\n    relevance: levenshteinDistance(inputValue.toLowerCase(), text.toLocaleLowerCase(), addSequentialWeight),\n    idx\n  }));\n  thisSuggestions.sort((a, b) => b.relevance - a.relevance);\n  if (hideIrrelevant) {\n    thisSuggestions = thisSuggestions.filter((suggestion) => suggestion.relevance !== 0);\n  }\n  if (thisSuggestions.length > 0 && filterByPercentageOfBestMatch && filterByPercentageOfBestMatch > 0) {\n    const bestMatch = thisSuggestions[0].relevance;\n    const limit = bestMatch * filterByPercentageOfBestMatch;\n    thisSuggestions = thisSuggestions.filter((suggestion) => limit - suggestion.relevance < 0);\n  }\n  const values = [];\n  const indices = [];\n  for (const suggestion of thisSuggestions) {\n    values.push(suggestion.value);\n    indices.push(suggestion.idx);\n  }\n  return { values, indices };\n}\nfunction getAllSubstrings(str) {\n  const result = [];\n  const size = str.length;\n  for (let len = 1; len <= size; len++) {\n    for (let i = 0; i <= size - len; i++) {\n      const j = i + len - 1;\n      result.push(str.slice(i, j + 1));\n    }\n  }\n  return result;\n}\nfunction levenshteinDistance(str1, str2, addSequentialWeight = false) {\n  const a = str1.replace(/\\s/g, \"\");\n  const b = str2.replace(/\\s/g, \"\");\n  const len1 = a.length;\n  const len2 = b.length;\n  const m = new Array(len1 + 1).fill(null).map(() => new Array(len2 + 1).fill(0));\n  for (let i = 0; i <= len1; i += 1) {\n    m[i][0] = i;\n  }\n  for (let j = 0; j <= len2; j += 1) {\n    m[0][j] = j;\n  }\n  for (let i = 1; i <= len1; i++) {\n    for (let j = 1; j <= len2; j++) {\n      if (a[i - 1] === b[j - 1]) {\n        m[i][j] = m[i - 1][j - 1];\n      } else {\n        m[i][j] = 1 + Math.min(m[i][j - 1], Math.min(m[i - 1][j], m[i - 1][j - 1]));\n      }\n    }\n  }\n  const distance = m[len1][len2];\n  const maxDistance = Math.max(len1, len2);\n  let weight = maxDistance - distance;\n  if (addSequentialWeight) {\n    const substrings = getAllSubstrings(a);\n    for (let i = 0; i < substrings.length; i++) {\n      const currentSubstring = substrings[i];\n      if (b.indexOf(currentSubstring) !== -1) {\n        weight += 1;\n        weight *= currentSubstring.length;\n      }\n    }\n  }\n  return weight;\n}\n\n// community-modules/core/src/components/framework/userComponentRegistry.ts\nvar UserComponentRegistry = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"userComponentRegistry\";\n    this.agGridDefaults = {\n      // drag and drop\n      agDragAndDropImage: DragAndDropImageComponent,\n      //header\n      agColumnHeader: HeaderComp,\n      agColumnGroupHeader: HeaderGroupComp,\n      agSortIndicator: SortIndicatorComp,\n      // renderers\n      agAnimateShowChangeCellRenderer: AnimateShowChangeCellRenderer,\n      agAnimateSlideCellRenderer: AnimateSlideCellRenderer,\n      agLoadingCellRenderer: LoadingCellRenderer,\n      agSkeletonCellRenderer: SkeletonCellRenderer,\n      agCheckboxCellRenderer: CheckboxCellRenderer,\n      //overlays\n      agLoadingOverlay: LoadingOverlayComponent,\n      agNoRowsOverlay: NoRowsOverlayComponent,\n      // tooltips\n      agTooltipComponent: TooltipComponent\n    };\n    this.agGridDefaultParams = {};\n    /** Used to provide useful error messages if a user is trying to use an enterprise component without loading the module. */\n    this.enterpriseAgDefaultCompsModule = {\n      agSetColumnFilter: \"@ag-grid-enterprise/set-filter\" /* SetFilterModule */,\n      agSetColumnFloatingFilter: \"@ag-grid-enterprise/set-filter\" /* SetFilterModule */,\n      agMultiColumnFilter: \"@ag-grid-enterprise/multi-filter\" /* MultiFilterModule */,\n      agMultiColumnFloatingFilter: \"@ag-grid-enterprise/multi-filter\" /* MultiFilterModule */,\n      agGroupColumnFilter: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n      agGroupColumnFloatingFilter: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n      agGroupCellRenderer: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n      // Actually in enterprise core as used by MasterDetail too but best guess is they are grouping\n      agGroupRowRenderer: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n      // Actually in enterprise core as used by MasterDetail but best guess is they are grouping\n      agRichSelect: \"@ag-grid-enterprise/rich-select\" /* RichSelectModule */,\n      agRichSelectCellEditor: \"@ag-grid-enterprise/rich-select\" /* RichSelectModule */,\n      agDetailCellRenderer: \"@ag-grid-enterprise/master-detail\" /* MasterDetailModule */,\n      agSparklineCellRenderer: \"@ag-grid-enterprise/sparklines\" /* SparklinesModule */\n    };\n    this.jsComps = {};\n  }\n  postConstruct() {\n    const comps = this.gos.get(\"components\");\n    if (comps != null) {\n      _iterateObject(comps, (key, component) => this.registerJsComponent(key, component));\n    }\n  }\n  registerDefaultComponent(name, component, params) {\n    this.agGridDefaults[name] = component;\n    if (params) {\n      this.agGridDefaultParams[name] = params;\n    }\n  }\n  registerJsComponent(name, component) {\n    this.jsComps[name] = component;\n  }\n  retrieve(propertyName, name) {\n    const createResult = (component, componentFromFramework, params) => ({\n      componentFromFramework,\n      component,\n      params\n    });\n    const registeredViaFrameworkComp = this.getFrameworkOverrides().frameworkComponent(\n      name,\n      this.gos.get(\"components\")\n    );\n    if (registeredViaFrameworkComp != null) {\n      return createResult(registeredViaFrameworkComp, true);\n    }\n    const jsComponent = this.jsComps[name];\n    if (jsComponent) {\n      const isFwkComp = this.getFrameworkOverrides().isFrameworkComponent(jsComponent);\n      return createResult(jsComponent, isFwkComp);\n    }\n    const defaultComponent = this.agGridDefaults[name];\n    if (defaultComponent) {\n      return createResult(defaultComponent, false, this.agGridDefaultParams[name]);\n    }\n    const moduleForComponent = this.enterpriseAgDefaultCompsModule[name];\n    if (moduleForComponent) {\n      this.gos.assertModuleRegistered(moduleForComponent, `AG Grid '${propertyName}' component: ${name}`);\n    } else {\n      _doOnce(() => {\n        this.warnAboutMissingComponent(propertyName, name);\n      }, \"MissingComp\" + name);\n    }\n    return null;\n  }\n  warnAboutMissingComponent(propertyName, componentName) {\n    const validComponents = [\n      // Don't include the old names / internals in potential suggestions\n      ...Object.keys(this.agGridDefaults).filter(\n        (k) => ![\"agCellEditor\", \"agGroupRowRenderer\", \"agSortIndicator\"].includes(k)\n      ),\n      ...Object.keys(this.jsComps)\n    ];\n    const suggestions = _fuzzySuggestions({\n      inputValue: componentName,\n      allSuggestions: validComponents,\n      hideIrrelevant: true,\n      filterByPercentageOfBestMatch: 0.8\n    }).values;\n    _warnOnce(\n      `Could not find '${componentName}' component. It was configured as \"${propertyName}: '${componentName}'\" but it wasn't found in the list of registered components.`\n    );\n    if (suggestions.length > 0) {\n      _warnOnce(`         Did you mean: [${suggestions.slice(0, 3)}]?`);\n    }\n    _warnOnce(\n      `If using a custom component check it has been registered as described in: ${this.getFrameworkOverrides().getDocLink(\"components/\")}`\n    );\n  }\n};\n\n// community-modules/core/src/utils/promise.ts\nvar AgPromise = class _AgPromise {\n  constructor(callback) {\n    this.status = 0 /* IN_PROGRESS */;\n    this.resolution = null;\n    this.waiters = [];\n    callback(\n      (value) => this.onDone(value),\n      (params) => this.onReject(params)\n    );\n  }\n  static all(promises) {\n    return promises.length ? new _AgPromise((resolve) => {\n      let remainingToResolve = promises.length;\n      const combinedValues = new Array(remainingToResolve);\n      promises.forEach((promise, index) => {\n        promise.then((value) => {\n          combinedValues[index] = value;\n          remainingToResolve--;\n          if (remainingToResolve === 0) {\n            resolve(combinedValues);\n          }\n        });\n      });\n    }) : _AgPromise.resolve();\n  }\n  static resolve(value = null) {\n    return new _AgPromise((resolve) => resolve(value));\n  }\n  then(func) {\n    return new _AgPromise((resolve) => {\n      if (this.status === 1 /* RESOLVED */) {\n        resolve(func(this.resolution));\n      } else {\n        this.waiters.push((value) => resolve(func(value)));\n      }\n    });\n  }\n  onDone(value) {\n    this.status = 1 /* RESOLVED */;\n    this.resolution = value;\n    this.waiters.forEach((waiter) => waiter(value));\n  }\n  onReject(params) {\n  }\n};\n\n// community-modules/core/src/components/framework/componentTypes.ts\nvar DateComponent = {\n  propertyName: \"dateComponent\",\n  cellRenderer: false\n};\nvar DragAndDropImageComponent2 = {\n  propertyName: \"dragAndDropImageComponent\",\n  cellRenderer: false\n};\nvar HeaderComponent = {\n  propertyName: \"headerComponent\",\n  cellRenderer: false\n};\nvar HeaderGroupComponent = {\n  propertyName: \"headerGroupComponent\",\n  cellRenderer: false\n};\nvar CellRendererComponent = {\n  propertyName: \"cellRenderer\",\n  cellRenderer: true\n};\nvar EditorRendererComponent = {\n  propertyName: \"cellRenderer\",\n  cellRenderer: false\n};\nvar LoadingCellRendererComponent = {\n  propertyName: \"loadingCellRenderer\",\n  cellRenderer: true\n};\nvar CellEditorComponent = {\n  propertyName: \"cellEditor\",\n  cellRenderer: false\n};\nvar InnerRendererComponent = {\n  propertyName: \"innerRenderer\",\n  cellRenderer: true\n};\nvar LoadingOverlayComponent2 = {\n  propertyName: \"loadingOverlayComponent\",\n  cellRenderer: false\n};\nvar NoRowsOverlayComponent2 = {\n  propertyName: \"noRowsOverlayComponent\",\n  cellRenderer: false\n};\nvar TooltipComponent2 = {\n  propertyName: \"tooltipComponent\",\n  cellRenderer: false\n};\nvar FilterComponent = {\n  propertyName: \"filter\",\n  cellRenderer: false\n};\nvar FloatingFilterComponent = {\n  propertyName: \"floatingFilterComponent\",\n  cellRenderer: false\n};\nvar ToolPanelComponent = {\n  propertyName: \"toolPanel\",\n  cellRenderer: false\n};\nvar StatusPanelComponent = {\n  propertyName: \"statusPanel\",\n  cellRenderer: false\n};\nvar FullWidth = {\n  propertyName: \"fullWidthCellRenderer\",\n  cellRenderer: true\n};\nvar FullWidthLoading = {\n  propertyName: \"loadingCellRenderer\",\n  cellRenderer: true\n};\nvar FullWidthGroup = {\n  propertyName: \"groupRowRenderer\",\n  cellRenderer: true\n};\nvar FullWidthDetail = {\n  propertyName: \"detailCellRenderer\",\n  cellRenderer: true\n};\nvar MenuItemComponent = {\n  propertyName: \"menuItem\",\n  cellRenderer: false\n};\n\n// community-modules/core/src/components/framework/userComponentFactory.ts\nvar UserComponentFactory = class _UserComponentFactory extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"userComponentFactory\";\n  }\n  wireBeans(beans) {\n    this.agComponentUtils = beans.agComponentUtils;\n    this.componentMetadataProvider = beans.componentMetadataProvider;\n    this.userComponentRegistry = beans.userComponentRegistry;\n    this.frameworkComponentWrapper = beans.frameworkComponentWrapper;\n    this.gridOptions = beans.gridOptions;\n  }\n  getDragAndDropImageCompDetails(params) {\n    return this.getCompDetails(this.gridOptions, DragAndDropImageComponent2, \"agDragAndDropImage\", params, true);\n  }\n  getHeaderCompDetails(colDef, params) {\n    return this.getCompDetails(colDef, HeaderComponent, \"agColumnHeader\", params);\n  }\n  getHeaderGroupCompDetails(params) {\n    const colGroupDef = params.columnGroup.getColGroupDef();\n    return this.getCompDetails(colGroupDef, HeaderGroupComponent, \"agColumnGroupHeader\", params);\n  }\n  // this one is unusual, as it can be LoadingCellRenderer, DetailCellRenderer, FullWidthCellRenderer or GroupRowRenderer.\n  // so we have to pass the type in.\n  getFullWidthCellRendererDetails(params) {\n    return this.getCompDetails(this.gridOptions, FullWidth, null, params, true);\n  }\n  getFullWidthLoadingCellRendererDetails(params) {\n    return this.getCompDetails(this.gridOptions, FullWidthLoading, \"agLoadingCellRenderer\", params, true);\n  }\n  getFullWidthGroupCellRendererDetails(params) {\n    return this.getCompDetails(this.gridOptions, FullWidthGroup, \"agGroupRowRenderer\", params, true);\n  }\n  getFullWidthDetailCellRendererDetails(params) {\n    return this.getCompDetails(this.gridOptions, FullWidthDetail, \"agDetailCellRenderer\", params, true);\n  }\n  // CELL RENDERER\n  getInnerRendererDetails(def, params) {\n    return this.getCompDetails(def, InnerRendererComponent, null, params);\n  }\n  getFullWidthGroupRowInnerCellRenderer(def, params) {\n    return this.getCompDetails(def, InnerRendererComponent, null, params);\n  }\n  getCellRendererDetails(def, params) {\n    return this.getCompDetails(def, CellRendererComponent, null, params);\n  }\n  getEditorRendererDetails(def, params) {\n    return this.getCompDetails(def, EditorRendererComponent, null, params);\n  }\n  getLoadingCellRendererDetails(def, params) {\n    return this.getCompDetails(def, LoadingCellRendererComponent, \"agSkeletonCellRenderer\", params, true);\n  }\n  // CELL EDITOR\n  getCellEditorDetails(def, params) {\n    return this.getCompDetails(def, CellEditorComponent, \"agCellEditor\", params, true);\n  }\n  // FILTER\n  getFilterDetails(def, params, defaultFilter) {\n    return this.getCompDetails(def, FilterComponent, defaultFilter, params, true);\n  }\n  getDateCompDetails(params) {\n    return this.getCompDetails(this.gridOptions, DateComponent, \"agDateInput\", params, true);\n  }\n  getLoadingOverlayCompDetails(params) {\n    return this.getCompDetails(this.gridOptions, LoadingOverlayComponent2, \"agLoadingOverlay\", params, true);\n  }\n  getNoRowsOverlayCompDetails(params) {\n    return this.getCompDetails(this.gridOptions, NoRowsOverlayComponent2, \"agNoRowsOverlay\", params, true);\n  }\n  getTooltipCompDetails(params) {\n    return this.getCompDetails(params.colDef, TooltipComponent2, \"agTooltipComponent\", params, true);\n  }\n  getSetFilterCellRendererDetails(def, params) {\n    return this.getCompDetails(def, CellRendererComponent, null, params);\n  }\n  getFloatingFilterCompDetails(def, params, defaultFloatingFilter) {\n    return this.getCompDetails(def, FloatingFilterComponent, defaultFloatingFilter, params);\n  }\n  getToolPanelCompDetails(toolPanelDef, params) {\n    return this.getCompDetails(toolPanelDef, ToolPanelComponent, null, params, true);\n  }\n  getStatusPanelCompDetails(def, params) {\n    return this.getCompDetails(def, StatusPanelComponent, null, params, true);\n  }\n  getMenuItemCompDetails(def, params) {\n    return this.getCompDetails(def, MenuItemComponent, \"agMenuItem\", params, true);\n  }\n  getCompDetails(defObject, type, defaultName, params, mandatory = false) {\n    const { propertyName, cellRenderer } = type;\n    let { compName, jsComp, fwComp, paramsFromSelector, popupFromSelector, popupPositionFromSelector } = _UserComponentFactory.getCompKeys(this.frameworkOverrides, defObject, type, params);\n    let defaultCompParams;\n    const lookupFromRegistry = (key) => {\n      const item = this.userComponentRegistry.retrieve(propertyName, key);\n      if (item) {\n        jsComp = !item.componentFromFramework ? item.component : void 0;\n        fwComp = item.componentFromFramework ? item.component : void 0;\n        defaultCompParams = item.params;\n      }\n    };\n    if (compName != null) {\n      lookupFromRegistry(compName);\n    }\n    if (jsComp == null && fwComp == null && defaultName != null) {\n      lookupFromRegistry(defaultName);\n    }\n    if (jsComp && cellRenderer && !this.agComponentUtils.doesImplementIComponent(jsComp)) {\n      jsComp = this.agComponentUtils.adaptFunction(propertyName, jsComp);\n    }\n    if (!jsComp && !fwComp) {\n      if (mandatory) {\n        _errorOnce(`Could not find component ${compName}, did you forget to configure this component?`);\n      }\n      return;\n    }\n    const paramsMerged = this.mergeParamsWithApplicationProvidedParams(\n      defObject,\n      type,\n      params,\n      paramsFromSelector,\n      defaultCompParams\n    );\n    const componentFromFramework = jsComp == null;\n    const componentClass = jsComp ? jsComp : fwComp;\n    return {\n      componentFromFramework,\n      componentClass,\n      params: paramsMerged,\n      type,\n      popupFromSelector,\n      popupPositionFromSelector,\n      newAgStackInstance: () => this.newAgStackInstance(componentClass, componentFromFramework, paramsMerged, type)\n    };\n  }\n  static getCompKeys(frameworkOverrides, defObject, type, params) {\n    const { propertyName } = type;\n    let compName;\n    let jsComp;\n    let fwComp;\n    let paramsFromSelector;\n    let popupFromSelector;\n    let popupPositionFromSelector;\n    if (defObject) {\n      const defObjectAny = defObject;\n      const selectorFunc = defObjectAny[propertyName + \"Selector\"];\n      const selectorRes = selectorFunc ? selectorFunc(params) : null;\n      const assignComp = (providedJsComp) => {\n        if (typeof providedJsComp === \"string\") {\n          compName = providedJsComp;\n        } else if (providedJsComp != null && providedJsComp !== true) {\n          const isFwkComp = frameworkOverrides.isFrameworkComponent(providedJsComp);\n          if (isFwkComp) {\n            fwComp = providedJsComp;\n          } else {\n            jsComp = providedJsComp;\n          }\n        }\n      };\n      if (selectorRes) {\n        assignComp(selectorRes.component);\n        paramsFromSelector = selectorRes.params;\n        popupFromSelector = selectorRes.popup;\n        popupPositionFromSelector = selectorRes.popupPosition;\n      } else {\n        assignComp(defObjectAny[propertyName]);\n      }\n    }\n    return { compName, jsComp, fwComp, paramsFromSelector, popupFromSelector, popupPositionFromSelector };\n  }\n  newAgStackInstance(ComponentClass, componentFromFramework, params, type) {\n    const propertyName = type.propertyName;\n    const jsComponent = !componentFromFramework;\n    let instance;\n    if (jsComponent) {\n      instance = new ComponentClass();\n    } else {\n      const thisComponentConfig = this.componentMetadataProvider.retrieve(propertyName);\n      instance = this.frameworkComponentWrapper.wrap(\n        ComponentClass,\n        thisComponentConfig.mandatoryMethodList,\n        thisComponentConfig.optionalMethodList,\n        type\n      );\n    }\n    const deferredInit = this.initComponent(instance, params);\n    if (deferredInit == null) {\n      return AgPromise.resolve(instance);\n    }\n    return deferredInit.then(() => instance);\n  }\n  // used by Floating Filter\n  mergeParamsWithApplicationProvidedParams(defObject, type, paramsFromGrid, paramsFromSelector = null, defaultCompParams) {\n    const params = this.gos.getGridCommonParams();\n    _mergeDeep(params, paramsFromGrid);\n    if (defaultCompParams) {\n      _mergeDeep(params, defaultCompParams);\n    }\n    const defObjectAny = defObject;\n    const userParams = defObjectAny && defObjectAny[type.propertyName + \"Params\"];\n    if (typeof userParams === \"function\") {\n      const userParamsFromFunc = userParams(paramsFromGrid);\n      _mergeDeep(params, userParamsFromFunc);\n    } else if (typeof userParams === \"object\") {\n      _mergeDeep(params, userParams);\n    }\n    _mergeDeep(params, paramsFromSelector);\n    return params;\n  }\n  initComponent(component, params) {\n    this.createBean(component);\n    if (component.init == null) {\n      return;\n    }\n    return component.init(params);\n  }\n};\n\n// community-modules/core/src/components/framework/unwrapUserComp.ts\nfunction _unwrapUserComp(comp) {\n  const compAsAny = comp;\n  const isProxy = compAsAny != null && compAsAny.getFrameworkComponentInstance != null;\n  return isProxy ? compAsAny.getFrameworkComponentInstance() : comp;\n}\n\n// community-modules/core/src/modules/moduleRegistry.ts\nvar _ModuleRegistry = class _ModuleRegistry {\n  /**\n   * Globally register the given module for all grids.\n   * @param module - module to register\n   */\n  static register(module) {\n    _ModuleRegistry.__register(module, true, void 0);\n  }\n  /**\n   * Globally register the given modules for all grids.\n   * @param modules - modules to register\n   */\n  static registerModules(modules) {\n    _ModuleRegistry.__registerModules(modules, true, void 0);\n  }\n  /** AG GRID INTERNAL - Module registration helper. */\n  static __register(module, moduleBased, gridId) {\n    _ModuleRegistry.runVersionChecks(module);\n    if (gridId !== void 0) {\n      _ModuleRegistry.areGridScopedModules = true;\n      if (_ModuleRegistry.gridModulesMap[gridId] === void 0) {\n        _ModuleRegistry.gridModulesMap[gridId] = {};\n      }\n      _ModuleRegistry.gridModulesMap[gridId][module.moduleName] = module;\n    } else {\n      _ModuleRegistry.globalModulesMap[module.moduleName] = module;\n    }\n    _ModuleRegistry.setModuleBased(moduleBased);\n  }\n  /** AG GRID INTERNAL - Unregister grid scoped module. */\n  static __unRegisterGridModules(gridId) {\n    delete _ModuleRegistry.gridModulesMap[gridId];\n  }\n  /** AG GRID INTERNAL - Module registration helper. */\n  static __registerModules(modules, moduleBased, gridId) {\n    _ModuleRegistry.setModuleBased(moduleBased);\n    if (!modules) {\n      return;\n    }\n    modules.forEach((module) => _ModuleRegistry.__register(module, moduleBased, gridId));\n  }\n  static isValidModuleVersion(module) {\n    const [moduleMajor, moduleMinor] = module.version.split(\".\") || [];\n    const [currentModuleMajor, currentModuleMinor] = _ModuleRegistry.currentModuleVersion.split(\".\") || [];\n    return moduleMajor === currentModuleMajor && moduleMinor === currentModuleMinor;\n  }\n  static runVersionChecks(module) {\n    if (!_ModuleRegistry.currentModuleVersion) {\n      _ModuleRegistry.currentModuleVersion = module.version;\n    }\n    const errorMsg = (details) => `You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. ${details} Please update all modules to the same version.`;\n    if (!module.version) {\n      _errorOnce(errorMsg(`'${module.moduleName}' is incompatible.`));\n    } else if (!_ModuleRegistry.isValidModuleVersion(module)) {\n      _errorOnce(\n        errorMsg(\n          `'${module.moduleName}' is version ${module.version} but the other modules are version ${_ModuleRegistry.currentModuleVersion}.`\n        )\n      );\n    }\n    if (module.validate) {\n      const result = module.validate();\n      if (!result.isValid) {\n        const errorResult = result;\n        _errorOnce(`${errorResult.message}`);\n      }\n    }\n  }\n  static setModuleBased(moduleBased) {\n    if (_ModuleRegistry.moduleBased === void 0) {\n      _ModuleRegistry.moduleBased = moduleBased;\n    } else {\n      if (_ModuleRegistry.moduleBased !== moduleBased) {\n        _errorOnce(\n          `AG Grid: You are mixing modules (i.e. @ag-grid-community/core) and packages (ag-grid-community) - you can only use one or the other of these mechanisms.`\n        );\n        _errorOnce(\"Please see https://www.ag-grid.com/javascript-grid/modules/ for more information.\");\n      }\n    }\n  }\n  /**\n   * AG GRID INTERNAL - Set if files are being served from a single UMD bundle to provide accurate enterprise upgrade steps.\n   */\n  static __setIsBundled() {\n    _ModuleRegistry.isBundled = true;\n  }\n  /** AG GRID INTERNAL - Assert a given module has been register, globally or individually with this grid. */\n  static __assertRegistered(moduleName, reason, gridId) {\n    if (this.__isRegistered(moduleName, gridId)) {\n      return true;\n    }\n    let warningMessage;\n    if (_ModuleRegistry.isBundled) {\n      {\n        warningMessage = `AG Grid: unable to use ${reason} as 'ag-grid-enterprise' has not been loaded. Check you are using the Enterprise bundle:\n        \n        <script src=\"https://cdn.jsdelivr.net/npm/ag-grid-enterprise@AG_GRID_VERSION/dist/ag-grid-enterprise.min.js\"><\\/script>\n        \nFor more info see: https://ag-grid.com/javascript-data-grid/getting-started/#getting-started-with-ag-grid-enterprise`;\n      }\n    } else if (_ModuleRegistry.moduleBased || _ModuleRegistry.moduleBased === void 0) {\n      const modName = Object.entries(ModuleNames).find(([k, v]) => v === moduleName)?.[0];\n      warningMessage = `AG Grid: unable to use ${reason} as the ${modName} is not registered${_ModuleRegistry.areGridScopedModules ? ` for gridId: ${gridId}` : \"\"}. Check if you have registered the module:\n           \n    import { ModuleRegistry } from '@ag-grid-community/core';\n    import { ${modName} } from '${moduleName}';\n    \n    ModuleRegistry.registerModules([ ${modName} ]);\n\nFor more info see: https://www.ag-grid.com/javascript-grid/modules/`;\n    } else {\n      warningMessage = `AG Grid: unable to use ${reason} as package 'ag-grid-enterprise' has not been imported. Check that you have imported the package:\n            \n    import 'ag-grid-enterprise';`;\n    }\n    _errorOnce(warningMessage);\n    return false;\n  }\n  /** AG GRID INTERNAL - Is the given module registered, globally or individually with this grid. */\n  static __isRegistered(moduleName, gridId) {\n    return !!_ModuleRegistry.globalModulesMap[moduleName] || !!_ModuleRegistry.gridModulesMap[gridId]?.[moduleName];\n  }\n  /** AG GRID INTERNAL - Get all registered modules globally / individually for this grid. */\n  static __getRegisteredModules(gridId) {\n    return [..._values(_ModuleRegistry.globalModulesMap), ..._values(_ModuleRegistry.gridModulesMap[gridId] || {})];\n  }\n  /** AG GRID INTERNAL - Get the list of modules registered individually for this grid. */\n  static __getGridRegisteredModules(gridId) {\n    return _values(_ModuleRegistry.gridModulesMap[gridId] ?? {}) || [];\n  }\n  /** INTERNAL */\n  static __isPackageBased() {\n    return !_ModuleRegistry.moduleBased;\n  }\n};\n// having in a map a) removes duplicates and b) allows fast lookup\n_ModuleRegistry.globalModulesMap = {};\n_ModuleRegistry.gridModulesMap = {};\n_ModuleRegistry.areGridScopedModules = false;\nvar ModuleRegistry = _ModuleRegistry;\n\n// community-modules/core/src/context/genericContext.ts\nvar GenericContext = class {\n  constructor(params) {\n    this.beans = {};\n    this.createdBeans = [];\n    this.destroyed = false;\n    if (!params || !params.beanClasses) {\n      return;\n    }\n    this.beanDestroyComparator = params.beanDestroyComparator;\n    this.init(params);\n  }\n  init(params) {\n    Object.entries(params.providedBeanInstances).forEach(([beanName, beanInstance]) => {\n      this.beans[beanName] = beanInstance;\n    });\n    params.beanClasses.forEach((BeanClass) => {\n      const instance = new BeanClass();\n      if (instance.beanName) {\n        this.beans[instance.beanName] = instance;\n      } else {\n        console.error(`Bean ${BeanClass.name} is missing beanName`);\n      }\n      this.createdBeans.push(instance);\n    });\n    params.derivedBeans?.forEach((beanFunc) => {\n      const { beanName, bean } = beanFunc(this);\n      this.beans[beanName] = bean;\n      this.createdBeans.push(bean);\n    });\n    if (params.beanInitComparator) {\n      this.createdBeans.sort(params.beanInitComparator);\n    }\n    this.initBeans(this.createdBeans);\n  }\n  getBeanInstances() {\n    return Object.values(this.beans);\n  }\n  createBean(bean, afterPreCreateCallback) {\n    if (!bean) {\n      throw Error(`Can't wire to bean since it is null`);\n    }\n    this.initBeans([bean], afterPreCreateCallback);\n    return bean;\n  }\n  initBeans(beanInstances, afterPreCreateCallback) {\n    beanInstances.forEach((instance) => {\n      instance.preWireBeans?.(this.beans);\n      instance.wireBeans?.(this.beans);\n    });\n    beanInstances.forEach((instance) => instance.preConstruct?.());\n    if (afterPreCreateCallback) {\n      beanInstances.forEach(afterPreCreateCallback);\n    }\n    beanInstances.forEach((instance) => instance.postConstruct?.());\n  }\n  getBeans() {\n    return this.beans;\n  }\n  getBean(name) {\n    return this.beans[name];\n  }\n  destroy() {\n    if (this.destroyed) {\n      return;\n    }\n    this.destroyed = true;\n    const beanInstances = this.getBeanInstances();\n    if (this.beanDestroyComparator) {\n      beanInstances.sort(this.beanDestroyComparator);\n    }\n    this.destroyBeans(beanInstances);\n    this.beans = {};\n    this.createdBeans = [];\n  }\n  /**\n   * Destroys a bean and returns undefined to support destruction and clean up in a single line.\n   * this.dateComp = this.context.destroyBean(this.dateComp);\n   */\n  destroyBean(bean) {\n    bean?.destroy?.();\n  }\n  /**\n   * Destroys an array of beans and returns an empty array to support destruction and clean up in a single line.\n   * this.dateComps = this.context.destroyBeans(this.dateComps);\n   */\n  destroyBeans(beans) {\n    if (beans) {\n      for (let i = 0; i < beans.length; i++) {\n        this.destroyBean(beans[i]);\n      }\n    }\n    return [];\n  }\n  isDestroyed() {\n    return this.destroyed;\n  }\n};\n\n// community-modules/core/src/context/context.ts\nvar Context = class extends GenericContext {\n  init(params) {\n    this.gridId = params.gridId;\n    this.beans.context = this;\n    super.init(params);\n  }\n  destroy() {\n    super.destroy();\n    ModuleRegistry.__unRegisterGridModules(this.gridId);\n  }\n  getGridId() {\n    return this.gridId;\n  }\n};\n\n// community-modules/core/src/interfaces/iExcelCreator.ts\nvar ExcelFactoryMode = /* @__PURE__ */ ((ExcelFactoryMode2) => {\n  ExcelFactoryMode2[ExcelFactoryMode2[\"SINGLE_SHEET\"] = 0] = \"SINGLE_SHEET\";\n  ExcelFactoryMode2[ExcelFactoryMode2[\"MULTI_SHEET\"] = 1] = \"MULTI_SHEET\";\n  return ExcelFactoryMode2;\n})(ExcelFactoryMode || {});\n\n// community-modules/core/src/constants/direction.ts\nvar VerticalDirection = /* @__PURE__ */ ((VerticalDirection2) => {\n  VerticalDirection2[VerticalDirection2[\"Up\"] = 0] = \"Up\";\n  VerticalDirection2[VerticalDirection2[\"Down\"] = 1] = \"Down\";\n  return VerticalDirection2;\n})(VerticalDirection || {});\nvar HorizontalDirection = /* @__PURE__ */ ((HorizontalDirection2) => {\n  HorizontalDirection2[HorizontalDirection2[\"Left\"] = 0] = \"Left\";\n  HorizontalDirection2[HorizontalDirection2[\"Right\"] = 1] = \"Right\";\n  return HorizontalDirection2;\n})(HorizontalDirection || {});\n\n// community-modules/core/src/dragAndDrop/dragAndDropService.ts\nvar DragSourceType = /* @__PURE__ */ ((DragSourceType2) => {\n  DragSourceType2[DragSourceType2[\"ToolPanel\"] = 0] = \"ToolPanel\";\n  DragSourceType2[DragSourceType2[\"HeaderCell\"] = 1] = \"HeaderCell\";\n  DragSourceType2[DragSourceType2[\"RowDrag\"] = 2] = \"RowDrag\";\n  DragSourceType2[DragSourceType2[\"ChartPanel\"] = 3] = \"ChartPanel\";\n  DragSourceType2[DragSourceType2[\"AdvancedFilterBuilder\"] = 4] = \"AdvancedFilterBuilder\";\n  return DragSourceType2;\n})(DragSourceType || {});\nvar DragAndDropService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"dragAndDropService\";\n    this.dragSourceAndParamsList = [];\n    this.dropTargets = [];\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.dragService = beans.dragService;\n    this.mouseEventService = beans.mouseEventService;\n    this.environment = beans.environment;\n    this.userComponentFactory = beans.userComponentFactory;\n  }\n  addDragSource(dragSource, allowTouch = false) {\n    const params = {\n      eElement: dragSource.eElement,\n      dragStartPixels: dragSource.dragStartPixels,\n      onDragStart: this.onDragStart.bind(this, dragSource),\n      onDragStop: this.onDragStop.bind(this),\n      onDragging: this.onDragging.bind(this),\n      onDragCancel: this.onDragCancel.bind(this),\n      includeTouch: allowTouch\n    };\n    this.dragSourceAndParamsList.push({ params, dragSource });\n    this.dragService.addDragSource(params);\n  }\n  getDragAndDropImageComponent() {\n    const { dragAndDropImageComp } = this;\n    if (!dragAndDropImageComp || !dragAndDropImageComp.comp) {\n      return null;\n    }\n    return dragAndDropImageComp.comp;\n  }\n  removeDragSource(dragSource) {\n    const sourceAndParams = this.dragSourceAndParamsList.find((item) => item.dragSource === dragSource);\n    if (sourceAndParams) {\n      this.dragService.removeDragSource(sourceAndParams.params);\n      _removeFromArray(this.dragSourceAndParamsList, sourceAndParams);\n    }\n  }\n  destroy() {\n    this.dragSourceAndParamsList.forEach(\n      (sourceAndParams) => this.dragService.removeDragSource(sourceAndParams.params)\n    );\n    this.dragSourceAndParamsList.length = 0;\n    this.dropTargets.length = 0;\n    this.clearDragAndDropProperties();\n    super.destroy();\n  }\n  nudge() {\n    if (this.dragging) {\n      this.onDragging(this.eventLastTime, true);\n    }\n  }\n  onDragStart(dragSource, mouseEvent) {\n    this.dragging = true;\n    this.dragSource = dragSource;\n    this.eventLastTime = mouseEvent;\n    this.dragItem = this.dragSource.getDragItem();\n    this.dragSource.onDragStarted?.();\n    this.createDragAndDropImageComponent();\n  }\n  onDragStop(mouseEvent) {\n    this.dragSource?.onDragStopped?.();\n    if (this.lastDropTarget?.onDragStop) {\n      const draggingEvent = this.createDropTargetEvent(this.lastDropTarget, mouseEvent, null, null, false);\n      this.lastDropTarget.onDragStop(draggingEvent);\n    }\n    this.clearDragAndDropProperties();\n  }\n  onDragCancel() {\n    this.dragSource?.onDragCancelled?.();\n    if (this.lastDropTarget?.onDragCancel) {\n      this.lastDropTarget.onDragCancel(\n        this.createDropTargetEvent(this.lastDropTarget, this.eventLastTime, null, null, false)\n      );\n    }\n    this.clearDragAndDropProperties();\n  }\n  clearDragAndDropProperties() {\n    this.eventLastTime = null;\n    this.dragging = false;\n    this.lastDropTarget = void 0;\n    this.dragItem = null;\n    this.dragSource = null;\n    this.removeDragAndDropImageComponent();\n  }\n  onDragging(mouseEvent, fromNudge = false) {\n    const hDirection = this.getHorizontalDirection(mouseEvent);\n    const vDirection = this.getVerticalDirection(mouseEvent);\n    this.eventLastTime = mouseEvent;\n    this.positionDragAndDropImageComp(mouseEvent);\n    const validDropTargets = this.dropTargets.filter((target) => this.isMouseOnDropTarget(mouseEvent, target));\n    const dropTarget = this.findCurrentDropTarget(mouseEvent, validDropTargets);\n    if (dropTarget !== this.lastDropTarget) {\n      this.leaveLastTargetIfExists(mouseEvent, hDirection, vDirection, fromNudge);\n      if (this.lastDropTarget !== null && dropTarget === null) {\n        this.dragSource?.onGridExit?.(this.dragItem);\n      }\n      if (this.lastDropTarget === null && dropTarget !== null) {\n        this.dragSource?.onGridEnter?.(this.dragItem);\n      }\n      this.enterDragTargetIfExists(dropTarget, mouseEvent, hDirection, vDirection, fromNudge);\n      if (dropTarget && this.dragAndDropImageComp) {\n        const { comp, promise } = this.dragAndDropImageComp;\n        if (comp) {\n          comp.setIcon(dropTarget.getIconName ? dropTarget.getIconName() : null);\n        } else {\n          promise.then((resolvedComponent) => {\n            if (resolvedComponent) {\n              resolvedComponent.setIcon(dropTarget.getIconName ? dropTarget.getIconName() : null);\n            }\n          });\n        }\n      }\n      this.lastDropTarget = dropTarget;\n    } else if (dropTarget && dropTarget.onDragging) {\n      const draggingEvent = this.createDropTargetEvent(dropTarget, mouseEvent, hDirection, vDirection, fromNudge);\n      dropTarget.onDragging(draggingEvent);\n    }\n  }\n  getAllContainersFromDropTarget(dropTarget) {\n    const secondaryContainers = dropTarget.getSecondaryContainers ? dropTarget.getSecondaryContainers() : null;\n    const containers = [[dropTarget.getContainer()]];\n    return secondaryContainers ? containers.concat(secondaryContainers) : containers;\n  }\n  allContainersIntersect(mouseEvent, containers) {\n    for (const container of containers) {\n      const { width, height, left, right, top, bottom } = container.getBoundingClientRect();\n      if (width === 0 || height === 0) {\n        return false;\n      }\n      const horizontalFit = mouseEvent.clientX >= left && mouseEvent.clientX < right;\n      const verticalFit = mouseEvent.clientY >= top && mouseEvent.clientY < bottom;\n      if (!horizontalFit || !verticalFit) {\n        return false;\n      }\n    }\n    return true;\n  }\n  // checks if the mouse is on the drop target. it checks eContainer and eSecondaryContainers\n  isMouseOnDropTarget(mouseEvent, dropTarget) {\n    const allContainersFromDropTarget = this.getAllContainersFromDropTarget(dropTarget);\n    let mouseOverTarget = false;\n    for (const currentContainers of allContainersFromDropTarget) {\n      if (this.allContainersIntersect(mouseEvent, currentContainers)) {\n        mouseOverTarget = true;\n        break;\n      }\n    }\n    const { eElement, type } = this.dragSource;\n    if (dropTarget.targetContainsSource && !dropTarget.getContainer().contains(eElement)) {\n      return false;\n    }\n    return mouseOverTarget && dropTarget.isInterestedIn(type, eElement);\n  }\n  findCurrentDropTarget(mouseEvent, validDropTargets) {\n    const len = validDropTargets.length;\n    if (len === 0) {\n      return null;\n    }\n    if (len === 1) {\n      return validDropTargets[0];\n    }\n    const rootNode = _getRootNode(this.gos);\n    const elementStack = rootNode.elementsFromPoint(mouseEvent.clientX, mouseEvent.clientY);\n    for (const el of elementStack) {\n      for (const dropTarget of validDropTargets) {\n        const containers = _flatten(this.getAllContainersFromDropTarget(dropTarget));\n        if (containers.indexOf(el) !== -1) {\n          return dropTarget;\n        }\n      }\n    }\n    return null;\n  }\n  enterDragTargetIfExists(dropTarget, mouseEvent, hDirection, vDirection, fromNudge) {\n    if (!dropTarget) {\n      return;\n    }\n    if (dropTarget.onDragEnter) {\n      const dragEnterEvent = this.createDropTargetEvent(\n        dropTarget,\n        mouseEvent,\n        hDirection,\n        vDirection,\n        fromNudge\n      );\n      dropTarget.onDragEnter(dragEnterEvent);\n    }\n  }\n  leaveLastTargetIfExists(mouseEvent, hDirection, vDirection, fromNudge) {\n    if (!this.lastDropTarget) {\n      return;\n    }\n    if (this.lastDropTarget.onDragLeave) {\n      const dragLeaveEvent = this.createDropTargetEvent(\n        this.lastDropTarget,\n        mouseEvent,\n        hDirection,\n        vDirection,\n        fromNudge\n      );\n      this.lastDropTarget.onDragLeave(dragLeaveEvent);\n    }\n    const dragAndDropImageComponent = this.getDragAndDropImageComponent();\n    if (dragAndDropImageComponent) {\n      dragAndDropImageComponent.setIcon(null);\n    }\n  }\n  addDropTarget(dropTarget) {\n    this.dropTargets.push(dropTarget);\n  }\n  removeDropTarget(dropTarget) {\n    this.dropTargets = this.dropTargets.filter((target) => target.getContainer() !== dropTarget.getContainer());\n  }\n  hasExternalDropZones() {\n    return this.dropTargets.some((zones) => zones.external);\n  }\n  findExternalZone(params) {\n    const externalTargets = this.dropTargets.filter((target) => target.external);\n    return externalTargets.find((zone) => zone.getContainer() === params.getContainer()) || null;\n  }\n  isDropZoneWithinThisGrid(draggingEvent) {\n    const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n    const gridGui = gridBodyCon.getGui();\n    const { dropZoneTarget } = draggingEvent;\n    return gridGui.contains(dropZoneTarget);\n  }\n  getHorizontalDirection(event) {\n    const clientX = this.eventLastTime && this.eventLastTime.clientX;\n    const eClientX = event.clientX;\n    if (clientX === eClientX) {\n      return null;\n    }\n    return clientX > eClientX ? 0 /* Left */ : 1 /* Right */;\n  }\n  getVerticalDirection(event) {\n    const clientY = this.eventLastTime && this.eventLastTime.clientY;\n    const eClientY = event.clientY;\n    if (clientY === eClientY) {\n      return null;\n    }\n    return clientY > eClientY ? 0 /* Up */ : 1 /* Down */;\n  }\n  createDropTargetEvent(dropTarget, event, hDirection, vDirection, fromNudge) {\n    const dropZoneTarget = dropTarget.getContainer();\n    const rect = dropZoneTarget.getBoundingClientRect();\n    const { dragItem, dragSource } = this;\n    const x = event.clientX - rect.left;\n    const y = event.clientY - rect.top;\n    return this.gos.addGridCommonParams({\n      event,\n      x,\n      y,\n      vDirection,\n      hDirection,\n      dragSource,\n      fromNudge,\n      dragItem,\n      dropZoneTarget\n    });\n  }\n  positionDragAndDropImageComp(event) {\n    const dragAndDropImageComponent = this.getDragAndDropImageComponent();\n    if (!dragAndDropImageComponent) {\n      return;\n    }\n    const eGui = dragAndDropImageComponent.getGui();\n    const eRect = eGui.getBoundingClientRect();\n    const height = eRect.height;\n    const browserWidth = _getBodyWidth() - 2;\n    const browserHeight = _getBodyHeight() - 2;\n    const offsetParent = eGui.offsetParent;\n    if (!offsetParent) {\n      return;\n    }\n    const offsetParentSize = _getElementRectWithOffset(eGui.offsetParent);\n    const { clientY, clientX } = event;\n    let top = clientY - offsetParentSize.top - height / 2;\n    let left = clientX - offsetParentSize.left - 10;\n    const eDocument = _getDocument(this.gos);\n    const win = eDocument.defaultView || window;\n    const windowScrollY = win.pageYOffset || eDocument.documentElement.scrollTop;\n    const windowScrollX = win.pageXOffset || eDocument.documentElement.scrollLeft;\n    if (browserWidth > 0 && left + eGui.clientWidth > browserWidth + windowScrollX) {\n      left = browserWidth + windowScrollX - eGui.clientWidth;\n    }\n    if (left < 0) {\n      left = 0;\n    }\n    if (browserHeight > 0 && top + eGui.clientHeight > browserHeight + windowScrollY) {\n      top = browserHeight + windowScrollY - eGui.clientHeight;\n    }\n    if (top < 0) {\n      top = 0;\n    }\n    eGui.style.left = `${left}px`;\n    eGui.style.top = `${top}px`;\n  }\n  removeDragAndDropImageComponent() {\n    if (this.dragAndDropImageComp) {\n      const { comp } = this.dragAndDropImageComp;\n      if (comp) {\n        const eGui = comp.getGui();\n        if (this.dragAndDropImageParent) {\n          this.dragAndDropImageParent.removeChild(eGui);\n        }\n        this.destroyBean(comp);\n      }\n    }\n    this.dragAndDropImageComp = null;\n  }\n  createDragAndDropImageComponent() {\n    const { dragSource } = this;\n    if (!dragSource) {\n      return;\n    }\n    const userCompDetails = this.userComponentFactory.getDragAndDropImageCompDetails({\n      dragSource\n    });\n    const promise = userCompDetails.newAgStackInstance();\n    this.dragAndDropImageComp = {\n      promise\n    };\n    promise.then((comp) => {\n      if (!comp || !this.isAlive()) {\n        return;\n      }\n      this.processDragAndDropImageComponent(comp);\n      this.dragAndDropImageComp.comp = comp;\n    });\n  }\n  processDragAndDropImageComponent(dragAndDropImageComponent) {\n    const { dragSource, mouseEventService, environment } = this;\n    if (!dragSource) {\n      return;\n    }\n    const eGui = dragAndDropImageComponent.getGui();\n    eGui.style.setProperty(\"position\", \"absolute\");\n    eGui.style.setProperty(\"z-index\", \"9999\");\n    mouseEventService.stampTopLevelGridCompWithGridInstance(eGui);\n    environment.applyThemeClasses(eGui);\n    dragAndDropImageComponent.setIcon(null);\n    let { dragItemName } = dragSource;\n    if (_isFunction(dragItemName)) {\n      dragItemName = dragItemName();\n    }\n    dragAndDropImageComponent.setLabel(dragItemName || \"\");\n    eGui.style.top = \"20px\";\n    eGui.style.left = \"20px\";\n    const eDocument = _getDocument(this.gos);\n    let rootNode = null;\n    let targetEl = null;\n    try {\n      rootNode = eDocument.fullscreenElement;\n    } catch (e) {\n    } finally {\n      if (!rootNode) {\n        rootNode = _getRootNode(this.gos);\n      }\n      const body = rootNode.querySelector(\"body\");\n      if (body) {\n        targetEl = body;\n      } else if (rootNode instanceof ShadowRoot) {\n        targetEl = rootNode;\n      } else if (rootNode instanceof Document) {\n        targetEl = rootNode?.documentElement;\n      } else {\n        targetEl = rootNode;\n      }\n    }\n    this.dragAndDropImageParent = targetEl;\n    if (!targetEl) {\n      _warnOnce(\"Could not find document body, it is needed for drag and drop.\");\n    } else {\n      targetEl.appendChild(eGui);\n    }\n  }\n};\n\n// community-modules/core/src/autoScrollService.ts\nvar AutoScrollService = class {\n  constructor(params) {\n    this.tickingInterval = null;\n    this.onScrollCallback = null;\n    this.scrollContainer = params.scrollContainer;\n    this.scrollHorizontally = params.scrollAxis.indexOf(\"x\") !== -1;\n    this.scrollVertically = params.scrollAxis.indexOf(\"y\") !== -1;\n    this.scrollByTick = params.scrollByTick != null ? params.scrollByTick : 20;\n    if (params.onScrollCallback) {\n      this.onScrollCallback = params.onScrollCallback;\n    }\n    if (this.scrollVertically) {\n      this.getVerticalPosition = params.getVerticalPosition;\n      this.setVerticalPosition = params.setVerticalPosition;\n    }\n    if (this.scrollHorizontally) {\n      this.getHorizontalPosition = params.getHorizontalPosition;\n      this.setHorizontalPosition = params.setHorizontalPosition;\n    }\n    this.shouldSkipVerticalScroll = params.shouldSkipVerticalScroll || (() => false);\n    this.shouldSkipHorizontalScroll = params.shouldSkipHorizontalScroll || (() => false);\n  }\n  check(mouseEvent, forceSkipVerticalScroll = false) {\n    const skipVerticalScroll = forceSkipVerticalScroll || this.shouldSkipVerticalScroll();\n    if (skipVerticalScroll && this.shouldSkipHorizontalScroll()) {\n      return;\n    }\n    const rect = this.scrollContainer.getBoundingClientRect();\n    const scrollTick = this.scrollByTick;\n    this.tickLeft = mouseEvent.clientX < rect.left + scrollTick;\n    this.tickRight = mouseEvent.clientX > rect.right - scrollTick;\n    this.tickUp = mouseEvent.clientY < rect.top + scrollTick && !skipVerticalScroll;\n    this.tickDown = mouseEvent.clientY > rect.bottom - scrollTick && !skipVerticalScroll;\n    if (this.tickLeft || this.tickRight || this.tickUp || this.tickDown) {\n      this.ensureTickingStarted();\n    } else {\n      this.ensureCleared();\n    }\n  }\n  ensureTickingStarted() {\n    if (this.tickingInterval === null) {\n      this.tickingInterval = window.setInterval(this.doTick.bind(this), 100);\n      this.tickCount = 0;\n    }\n  }\n  doTick() {\n    this.tickCount++;\n    const tickAmount = this.tickCount > 20 ? 200 : this.tickCount > 10 ? 80 : 40;\n    if (this.scrollVertically) {\n      const vScrollPosition = this.getVerticalPosition();\n      if (this.tickUp) {\n        this.setVerticalPosition(vScrollPosition - tickAmount);\n      }\n      if (this.tickDown) {\n        this.setVerticalPosition(vScrollPosition + tickAmount);\n      }\n    }\n    if (this.scrollHorizontally) {\n      const hScrollPosition = this.getHorizontalPosition();\n      if (this.tickLeft) {\n        this.setHorizontalPosition(hScrollPosition - tickAmount);\n      }\n      if (this.tickRight) {\n        this.setHorizontalPosition(hScrollPosition + tickAmount);\n      }\n    }\n    if (this.onScrollCallback) {\n      this.onScrollCallback();\n    }\n  }\n  ensureCleared() {\n    if (this.tickingInterval) {\n      window.clearInterval(this.tickingInterval);\n      this.tickingInterval = null;\n    }\n  }\n};\n\n// community-modules/core/src/interfaces/iRowNode.ts\nvar RowHighlightPosition = /* @__PURE__ */ ((RowHighlightPosition2) => {\n  RowHighlightPosition2[RowHighlightPosition2[\"Above\"] = 0] = \"Above\";\n  RowHighlightPosition2[RowHighlightPosition2[\"Below\"] = 1] = \"Below\";\n  return RowHighlightPosition2;\n})(RowHighlightPosition || {});\n\n// community-modules/core/src/gridBodyComp/rowDragFeature.ts\nvar RowDragFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.dragAndDropService = beans.dragAndDropService;\n    this.rowModel = beans.rowModel;\n    this.pageBoundsService = beans.pageBoundsService;\n    this.focusService = beans.focusService;\n    this.sortController = beans.sortController;\n    this.filterManager = beans.filterManager;\n    this.selectionService = beans.selectionService;\n    this.mouseEventService = beans.mouseEventService;\n    this.ctrlsService = beans.ctrlsService;\n    this.funcColsService = beans.funcColsService;\n    this.rangeService = beans.rangeService;\n  }\n  constructor(eContainer) {\n    super();\n    this.eContainer = eContainer;\n  }\n  postConstruct() {\n    if (_isClientSideRowModel(this.gos)) {\n      this.clientSideRowModel = this.rowModel;\n    }\n    this.ctrlsService.whenReady(this, (p) => {\n      const gridBodyCon = p.gridBodyCtrl;\n      this.autoScrollService = new AutoScrollService({\n        scrollContainer: gridBodyCon.getBodyViewportElement(),\n        scrollAxis: \"y\",\n        getVerticalPosition: () => gridBodyCon.getScrollFeature().getVScrollPosition().top,\n        setVerticalPosition: (position) => gridBodyCon.getScrollFeature().setVerticalScrollPosition(position),\n        onScrollCallback: () => {\n          this.onDragging(this.lastDraggingEvent);\n        }\n      });\n    });\n  }\n  getContainer() {\n    return this.eContainer;\n  }\n  isInterestedIn(type) {\n    return type === 2 /* RowDrag */;\n  }\n  getIconName() {\n    const managedDrag = this.gos.get(\"rowDragManaged\");\n    if (managedDrag && this.shouldPreventRowMove()) {\n      return \"notAllowed\";\n    }\n    return \"move\";\n  }\n  shouldPreventRowMove() {\n    const rowGroupCols = this.funcColsService.getRowGroupColumns();\n    if (rowGroupCols.length) {\n      return true;\n    }\n    const isFilterPresent = this.filterManager?.isAnyFilterPresent();\n    if (isFilterPresent) {\n      return true;\n    }\n    const isSortActive = this.sortController.isSortActive();\n    if (isSortActive) {\n      return true;\n    }\n    return false;\n  }\n  getRowNodes(draggingEvent) {\n    if (!this.isFromThisGrid(draggingEvent)) {\n      return draggingEvent.dragItem.rowNodes || [];\n    }\n    const currentNode = draggingEvent.dragItem.rowNode;\n    const isRowDragMultiRow = this.gos.get(\"rowDragMultiRow\");\n    if (isRowDragMultiRow) {\n      const selectedNodes = [...this.selectionService.getSelectedNodes()].sort((a, b) => {\n        if (a.rowIndex == null || b.rowIndex == null) {\n          return 0;\n        }\n        return this.getRowIndexNumber(a) - this.getRowIndexNumber(b);\n      });\n      if (selectedNodes.indexOf(currentNode) !== -1) {\n        return selectedNodes;\n      }\n    }\n    return [currentNode];\n  }\n  onDragEnter(draggingEvent) {\n    draggingEvent.dragItem.rowNodes = this.getRowNodes(draggingEvent);\n    this.dispatchGridEvent(\"rowDragEnter\", draggingEvent);\n    this.getRowNodes(draggingEvent).forEach((rowNode) => {\n      rowNode.setDragging(true);\n    });\n    this.onEnterOrDragging(draggingEvent);\n  }\n  onDragging(draggingEvent) {\n    this.onEnterOrDragging(draggingEvent);\n  }\n  isFromThisGrid(draggingEvent) {\n    const { dragSourceDomDataKey } = draggingEvent.dragSource;\n    return dragSourceDomDataKey === this.gos.getDomDataKey();\n  }\n  onEnterOrDragging(draggingEvent) {\n    this.dispatchGridEvent(\"rowDragMove\", draggingEvent);\n    this.lastDraggingEvent = draggingEvent;\n    const pixel = this.mouseEventService.getNormalisedPosition(draggingEvent).y;\n    const managedDrag = this.gos.get(\"rowDragManaged\");\n    if (managedDrag) {\n      this.doManagedDrag(draggingEvent, pixel);\n    }\n    this.autoScrollService.check(draggingEvent.event);\n  }\n  doManagedDrag(draggingEvent, pixel) {\n    const isFromThisGrid = this.isFromThisGrid(draggingEvent);\n    const managedDrag = this.gos.get(\"rowDragManaged\");\n    const rowNodes = draggingEvent.dragItem.rowNodes;\n    if (managedDrag && this.shouldPreventRowMove()) {\n      return;\n    }\n    if (this.gos.get(\"suppressMoveWhenRowDragging\") || !isFromThisGrid) {\n      if (this.dragAndDropService.isDropZoneWithinThisGrid(draggingEvent)) {\n        this.clientSideRowModel.highlightRowAtPixel(rowNodes[0], pixel);\n      }\n    } else {\n      this.moveRows(rowNodes, pixel);\n    }\n  }\n  getRowIndexNumber(rowNode) {\n    const rowIndexStr = rowNode.getRowIndexString();\n    return parseInt(_last(rowIndexStr.split(\"-\")), 10);\n  }\n  moveRowAndClearHighlight(draggingEvent) {\n    const lastHighlightedRowNode = this.clientSideRowModel.getLastHighlightedRowNode();\n    const isBelow = lastHighlightedRowNode && lastHighlightedRowNode.highlighted === 1 /* Below */;\n    const pixel = this.mouseEventService.getNormalisedPosition(draggingEvent).y;\n    const rowNodes = draggingEvent.dragItem.rowNodes;\n    let increment = isBelow ? 1 : 0;\n    if (this.isFromThisGrid(draggingEvent)) {\n      rowNodes.forEach((rowNode) => {\n        if (rowNode.rowTop < pixel) {\n          increment -= 1;\n        }\n      });\n      this.moveRows(rowNodes, pixel, increment);\n    } else {\n      const getRowIdFunc = _getRowIdCallback(this.gos);\n      let addIndex = this.clientSideRowModel.getRowIndexAtPixel(pixel) + 1;\n      if (this.clientSideRowModel.getHighlightPosition(pixel) === 0 /* Above */) {\n        addIndex--;\n      }\n      this.clientSideRowModel.updateRowData({\n        add: rowNodes.filter(\n          (node) => !this.clientSideRowModel.getRowNode(\n            getRowIdFunc?.({ data: node.data, level: 0, rowPinned: node.rowPinned }) ?? node.data.id\n          )\n        ).map((node) => node.data),\n        addIndex\n      });\n    }\n    this.clearRowHighlight();\n  }\n  clearRowHighlight() {\n    this.clientSideRowModel.highlightRowAtPixel(null);\n  }\n  moveRows(rowNodes, pixel, increment = 0) {\n    const rowWasMoved = this.clientSideRowModel.ensureRowsAtPixel(rowNodes, pixel, increment);\n    if (rowWasMoved) {\n      this.focusService.clearFocusedCell();\n      this.rangeService?.removeAllCellRanges();\n    }\n  }\n  addRowDropZone(params) {\n    if (!params.getContainer()) {\n      _warnOnce(\"addRowDropZone - A container target needs to be provided\");\n      return;\n    }\n    if (this.dragAndDropService.findExternalZone(params)) {\n      _warnOnce(\n        \"addRowDropZone - target already exists in the list of DropZones. Use `removeRowDropZone` before adding it again.\"\n      );\n      return;\n    }\n    let processedParams = {\n      getContainer: params.getContainer\n    };\n    if (params.fromGrid) {\n      processedParams = params;\n    } else {\n      if (params.onDragEnter) {\n        processedParams.onDragEnter = (e) => {\n          params.onDragEnter(this.draggingToRowDragEvent(\"rowDragEnter\", e));\n        };\n      }\n      if (params.onDragLeave) {\n        processedParams.onDragLeave = (e) => {\n          params.onDragLeave(this.draggingToRowDragEvent(\"rowDragLeave\", e));\n        };\n      }\n      if (params.onDragging) {\n        processedParams.onDragging = (e) => {\n          params.onDragging(this.draggingToRowDragEvent(\"rowDragMove\", e));\n        };\n      }\n      if (params.onDragStop) {\n        processedParams.onDragStop = (e) => {\n          params.onDragStop(this.draggingToRowDragEvent(\"rowDragEnd\", e));\n        };\n      }\n      if (params.onDragCancel) {\n        processedParams.onDragCancel = (e) => {\n          params.onDragCancel(this.draggingToRowDragEvent(\"rowDragCancel\", e));\n        };\n      }\n    }\n    const dropTarget = {\n      isInterestedIn: (type) => type === 2 /* RowDrag */,\n      getIconName: () => \"move\",\n      external: true,\n      ...processedParams\n    };\n    this.dragAndDropService.addDropTarget(dropTarget);\n    this.addDestroyFunc(() => this.dragAndDropService.removeDropTarget(dropTarget));\n  }\n  getRowDropZone(events) {\n    const getContainer = this.getContainer.bind(this);\n    const onDragEnter = this.onDragEnter.bind(this);\n    const onDragLeave = this.onDragLeave.bind(this);\n    const onDragging = this.onDragging.bind(this);\n    const onDragStop = this.onDragStop.bind(this);\n    const onDragCancel = this.onDragCancel.bind(this);\n    let params;\n    if (!events) {\n      params = {\n        getContainer,\n        onDragEnter,\n        onDragLeave,\n        onDragging,\n        onDragStop,\n        onDragCancel,\n        /* @private */\n        fromGrid: true\n      };\n    } else {\n      params = {\n        getContainer,\n        onDragEnter: events.onDragEnter ? (e) => {\n          onDragEnter(e);\n          events.onDragEnter(this.draggingToRowDragEvent(\"rowDragEnter\", e));\n        } : onDragEnter,\n        onDragLeave: events.onDragLeave ? (e) => {\n          onDragLeave(e);\n          events.onDragLeave(this.draggingToRowDragEvent(\"rowDragLeave\", e));\n        } : onDragLeave,\n        onDragging: events.onDragging ? (e) => {\n          onDragging(e);\n          events.onDragging(this.draggingToRowDragEvent(\"rowDragMove\", e));\n        } : onDragging,\n        onDragStop: events.onDragStop ? (e) => {\n          onDragStop(e);\n          events.onDragStop(this.draggingToRowDragEvent(\"rowDragEnd\", e));\n        } : onDragStop,\n        onDragCancel: events.onDragCancel ? (e) => {\n          onDragCancel(e);\n          events.onDragCancel(this.draggingToRowDragEvent(\"rowDragCancel\", e));\n        } : onDragCancel,\n        fromGrid: true\n      };\n    }\n    return params;\n  }\n  draggingToRowDragEvent(type, draggingEvent) {\n    const yNormalised = this.mouseEventService.getNormalisedPosition(draggingEvent).y;\n    const mouseIsPastLastRow = yNormalised > this.pageBoundsService.getCurrentPageHeight();\n    let overIndex = -1;\n    let overNode;\n    if (!mouseIsPastLastRow) {\n      overIndex = this.rowModel.getRowIndexAtPixel(yNormalised);\n      overNode = this.rowModel.getRow(overIndex);\n    }\n    let vDirectionString;\n    switch (draggingEvent.vDirection) {\n      case 1 /* Down */:\n        vDirectionString = \"down\";\n        break;\n      case 0 /* Up */:\n        vDirectionString = \"up\";\n        break;\n      default:\n        vDirectionString = null;\n        break;\n    }\n    const event = this.gos.addGridCommonParams({\n      type,\n      event: draggingEvent.event,\n      node: draggingEvent.dragItem.rowNode,\n      nodes: draggingEvent.dragItem.rowNodes,\n      overIndex,\n      overNode,\n      y: yNormalised,\n      vDirection: vDirectionString\n    });\n    return event;\n  }\n  dispatchGridEvent(type, draggingEvent) {\n    const event = this.draggingToRowDragEvent(type, draggingEvent);\n    this.eventService.dispatchEvent(event);\n  }\n  onDragLeave(draggingEvent) {\n    this.dispatchGridEvent(\"rowDragLeave\", draggingEvent);\n    this.stopDragging(draggingEvent);\n    if (this.gos.get(\"rowDragManaged\")) {\n      this.clearRowHighlight();\n    }\n  }\n  onDragStop(draggingEvent) {\n    this.dispatchGridEvent(\"rowDragEnd\", draggingEvent);\n    this.stopDragging(draggingEvent);\n    if (this.gos.get(\"rowDragManaged\") && (this.gos.get(\"suppressMoveWhenRowDragging\") || !this.isFromThisGrid(draggingEvent)) && this.dragAndDropService.isDropZoneWithinThisGrid(draggingEvent)) {\n      this.moveRowAndClearHighlight(draggingEvent);\n    }\n  }\n  onDragCancel(draggingEvent) {\n    this.dispatchGridEvent(\"rowDragCancel\", draggingEvent);\n    this.stopDragging(draggingEvent);\n    if (this.gos.get(\"rowDragManaged\") && (this.gos.get(\"suppressMoveWhenRowDragging\") || !this.isFromThisGrid(draggingEvent)) && this.dragAndDropService.isDropZoneWithinThisGrid(draggingEvent)) {\n      this.clearRowHighlight();\n    }\n  }\n  stopDragging(draggingEvent) {\n    this.autoScrollService.ensureCleared();\n    this.getRowNodes(draggingEvent).forEach((rowNode) => {\n      rowNode.setDragging(false);\n    });\n  }\n};\n\n// community-modules/core/src/dragAndDrop/dragService.ts\nvar DragService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"dragService\";\n    this.dragEndFunctions = [];\n    this.dragSources = [];\n  }\n  wireBeans(beans) {\n    this.mouseEventService = beans.mouseEventService;\n  }\n  destroy() {\n    this.dragSources.forEach(this.removeListener.bind(this));\n    this.dragSources.length = 0;\n    super.destroy();\n  }\n  removeListener(dragSourceAndListener) {\n    const element = dragSourceAndListener.dragSource.eElement;\n    const mouseDownListener = dragSourceAndListener.mouseDownListener;\n    element.removeEventListener(\"mousedown\", mouseDownListener);\n    if (dragSourceAndListener.touchEnabled) {\n      const touchStartListener = dragSourceAndListener.touchStartListener;\n      element.removeEventListener(\"touchstart\", touchStartListener, { passive: true });\n    }\n  }\n  removeDragSource(params) {\n    const dragSourceAndListener = this.dragSources.find((item) => item.dragSource === params);\n    if (!dragSourceAndListener) {\n      return;\n    }\n    this.removeListener(dragSourceAndListener);\n    _removeFromArray(this.dragSources, dragSourceAndListener);\n  }\n  isDragging() {\n    return this.dragging;\n  }\n  addDragSource(params) {\n    const mouseListener = this.onMouseDown.bind(this, params);\n    const { eElement, includeTouch, stopPropagationForTouch } = params;\n    eElement.addEventListener(\"mousedown\", mouseListener);\n    let touchListener = null;\n    const suppressTouch = this.gos.get(\"suppressTouch\");\n    if (includeTouch && !suppressTouch) {\n      touchListener = (touchEvent) => {\n        if (_isFocusableFormField(touchEvent.target)) {\n          return;\n        }\n        if (stopPropagationForTouch) {\n          touchEvent.stopPropagation();\n        }\n        this.onTouchStart(params, touchEvent);\n      };\n      eElement.addEventListener(\"touchstart\", touchListener, { passive: false });\n    }\n    this.dragSources.push({\n      dragSource: params,\n      mouseDownListener: mouseListener,\n      touchStartListener: touchListener,\n      touchEnabled: !!includeTouch\n    });\n  }\n  getStartTarget() {\n    return this.startTarget;\n  }\n  // gets called whenever mouse down on any drag source\n  onTouchStart(params, touchEvent) {\n    this.currentDragParams = params;\n    this.dragging = false;\n    const touch = touchEvent.touches[0];\n    this.touchLastTime = touch;\n    this.touchStart = touch;\n    const touchMoveEvent = (e) => this.onTouchMove(e, params.eElement);\n    const touchEndEvent = (e) => this.onTouchUp(e, params.eElement);\n    const documentTouchMove = (e) => {\n      if (e.cancelable) {\n        e.preventDefault();\n      }\n    };\n    const target = touchEvent.target;\n    const events = [\n      // Prevents the page document from moving while we are dragging items around.\n      // preventDefault needs to be called in the touchmove listener and never inside the\n      // touchstart, because using touchstart causes the click event to be cancelled on touch devices.\n      {\n        target: _getRootNode(this.gos),\n        type: \"touchmove\",\n        listener: documentTouchMove,\n        options: { passive: false }\n      },\n      { target, type: \"touchmove\", listener: touchMoveEvent, options: { passive: true } },\n      { target, type: \"touchend\", listener: touchEndEvent, options: { passive: true } },\n      { target, type: \"touchcancel\", listener: touchEndEvent, options: { passive: true } }\n    ];\n    this.addTemporaryEvents(events);\n    if (params.dragStartPixels === 0) {\n      this.onCommonMove(touch, this.touchStart, params.eElement);\n    }\n  }\n  // gets called whenever mouse down on any drag source\n  onMouseDown(params, mouseEvent) {\n    const e = mouseEvent;\n    if (params.skipMouseEvent && params.skipMouseEvent(mouseEvent)) {\n      return;\n    }\n    if (e._alreadyProcessedByDragService) {\n      return;\n    }\n    e._alreadyProcessedByDragService = true;\n    if (mouseEvent.button !== 0) {\n      return;\n    }\n    if (this.shouldPreventMouseEvent(mouseEvent)) {\n      mouseEvent.preventDefault();\n    }\n    this.currentDragParams = params;\n    this.dragging = false;\n    this.mouseStartEvent = mouseEvent;\n    this.startTarget = mouseEvent.target;\n    const mouseMoveEvent = (event) => this.onMouseMove(event, params.eElement);\n    const mouseUpEvent = (event) => this.onMouseUp(event, params.eElement);\n    const contextEvent = (event) => event.preventDefault();\n    const keydownEvent = (event) => {\n      if (event.key === KeyCode.ESCAPE) {\n        this.cancelDrag(params.eElement);\n      }\n    };\n    const target = _getRootNode(this.gos);\n    const events = [\n      { target, type: \"mousemove\", listener: mouseMoveEvent },\n      { target, type: \"mouseup\", listener: mouseUpEvent },\n      { target, type: \"contextmenu\", listener: contextEvent },\n      { target, type: \"keydown\", listener: keydownEvent }\n    ];\n    this.addTemporaryEvents(events);\n    if (params.dragStartPixels === 0) {\n      this.onMouseMove(mouseEvent, params.eElement);\n    }\n  }\n  addTemporaryEvents(events) {\n    events.forEach((currentEvent) => {\n      const { target, type, listener, options } = currentEvent;\n      target.addEventListener(type, listener, options);\n    });\n    this.dragEndFunctions.push(() => {\n      events.forEach((currentEvent) => {\n        const { target, type, listener, options } = currentEvent;\n        target.removeEventListener(type, listener, options);\n      });\n    });\n  }\n  // returns true if the event is close to the original event by X pixels either vertically or horizontally.\n  // we only start dragging after X pixels so this allows us to know if we should start dragging yet.\n  isEventNearStartEvent(currentEvent, startEvent) {\n    const { dragStartPixels } = this.currentDragParams;\n    const requiredPixelDiff = _exists(dragStartPixels) ? dragStartPixels : 4;\n    return _areEventsNear(currentEvent, startEvent, requiredPixelDiff);\n  }\n  getFirstActiveTouch(touchList) {\n    for (let i = 0; i < touchList.length; i++) {\n      if (touchList[i].identifier === this.touchStart.identifier) {\n        return touchList[i];\n      }\n    }\n    return null;\n  }\n  onCommonMove(currentEvent, startEvent, el) {\n    if (!this.dragging) {\n      if (this.isEventNearStartEvent(currentEvent, startEvent)) {\n        return;\n      }\n      this.dragging = true;\n      this.eventService.dispatchEvent({\n        type: \"dragStarted\",\n        target: el\n      });\n      this.currentDragParams.onDragStart(startEvent);\n      if (!this.currentDragParams) {\n        this.dragging = false;\n        return;\n      }\n      this.currentDragParams.onDragging(startEvent);\n    }\n    this.currentDragParams?.onDragging(currentEvent);\n  }\n  onTouchMove(touchEvent, el) {\n    const touch = this.getFirstActiveTouch(touchEvent.touches);\n    if (!touch) {\n      return;\n    }\n    this.onCommonMove(touch, this.touchStart, el);\n  }\n  // only gets called after a mouse down - as this is only added after mouseDown\n  // and is removed when mouseUp happens\n  onMouseMove(mouseEvent, el) {\n    if (_isBrowserSafari()) {\n      const eDocument = _getDocument(this.gos);\n      eDocument.getSelection()?.removeAllRanges();\n    }\n    if (this.shouldPreventMouseEvent(mouseEvent)) {\n      mouseEvent.preventDefault();\n    }\n    this.onCommonMove(mouseEvent, this.mouseStartEvent, el);\n  }\n  shouldPreventMouseEvent(mouseEvent) {\n    const isEnableCellTextSelect = this.gos.get(\"enableCellTextSelection\");\n    const isMouseMove = mouseEvent.type === \"mousemove\";\n    return (\n      // when `isEnableCellTextSelect` is `true`, we need to preventDefault on mouseMove\n      // to avoid the grid text being selected while dragging components.\n      isEnableCellTextSelect && isMouseMove && mouseEvent.cancelable && this.mouseEventService.isEventFromThisGrid(mouseEvent) && !this.isOverFormFieldElement(mouseEvent)\n    );\n  }\n  isOverFormFieldElement(mouseEvent) {\n    const el = mouseEvent.target;\n    const tagName = el?.tagName.toLocaleLowerCase();\n    return !!tagName?.match(\"^a$|textarea|input|select|button\");\n  }\n  onTouchUp(touchEvent, el) {\n    let touch = this.getFirstActiveTouch(touchEvent.changedTouches);\n    if (!touch) {\n      touch = this.touchLastTime;\n    }\n    this.onUpCommon(touch, el);\n  }\n  onMouseUp(mouseEvent, el) {\n    this.onUpCommon(mouseEvent, el);\n  }\n  onUpCommon(eventOrTouch, el) {\n    if (this.dragging) {\n      this.dragging = false;\n      this.currentDragParams.onDragStop(eventOrTouch);\n      this.eventService.dispatchEvent({\n        type: \"dragStopped\",\n        target: el\n      });\n    }\n    this.resetDragProperties();\n  }\n  cancelDrag(el) {\n    this.eventService.dispatchEvent({\n      type: \"dragCancelled\",\n      target: el\n    });\n    this.currentDragParams?.onDragCancel?.();\n    this.resetDragProperties();\n  }\n  resetDragProperties() {\n    this.mouseStartEvent = null;\n    this.startTarget = null;\n    this.touchStart = null;\n    this.touchLastTime = null;\n    this.currentDragParams = null;\n    this.dragEndFunctions.forEach((func) => func());\n    this.dragEndFunctions.length = 0;\n  }\n};\n\n// community-modules/core/src/rendering/row/rowDragComp.ts\nvar RowDragComp = class extends Component {\n  constructor(cellValueFn, rowNode, column, customGui, dragStartPixels, suppressVisibilityChange) {\n    super();\n    this.cellValueFn = cellValueFn;\n    this.rowNode = rowNode;\n    this.column = column;\n    this.customGui = customGui;\n    this.dragStartPixels = dragStartPixels;\n    this.suppressVisibilityChange = suppressVisibilityChange;\n    this.dragSource = null;\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n  }\n  isCustomGui() {\n    return this.customGui != null;\n  }\n  postConstruct() {\n    if (!this.customGui) {\n      this.setTemplate(\n        /* html */\n        `<div class=\"ag-drag-handle ag-row-drag\" aria-hidden=\"true\"></div>`\n      );\n      this.getGui().appendChild(_createIconNoSpan(\"rowDrag\", this.gos, null));\n      this.addDragSource();\n    } else {\n      this.setDragElement(this.customGui, this.dragStartPixels);\n    }\n    this.checkCompatibility();\n    if (!this.suppressVisibilityChange) {\n      const strategy = this.gos.get(\"rowDragManaged\") ? new ManagedVisibilityStrategy(this, this.beans, this.rowNode, this.column) : new NonManagedVisibilityStrategy(this, this.beans, this.rowNode, this.column);\n      this.createManagedBean(strategy, this.beans.context);\n    }\n  }\n  setDragElement(dragElement, dragStartPixels) {\n    this.setTemplateFromElement(dragElement, void 0, void 0, true);\n    this.addDragSource(dragStartPixels);\n  }\n  getSelectedNodes() {\n    const isRowDragMultiRow = this.gos.get(\"rowDragMultiRow\");\n    if (!isRowDragMultiRow) {\n      return [this.rowNode];\n    }\n    const selection = this.beans.selectionService.getSelectedNodes();\n    return selection.indexOf(this.rowNode) !== -1 ? selection : [this.rowNode];\n  }\n  // returns true if all compatibility items work out\n  checkCompatibility() {\n    const managed = this.gos.get(\"rowDragManaged\");\n    const treeData = this.gos.get(\"treeData\");\n    if (treeData && managed) {\n      _warnOnce(\"If using row drag with tree data, you cannot have rowDragManaged=true\");\n    }\n  }\n  getDragItem() {\n    return {\n      rowNode: this.rowNode,\n      rowNodes: this.getSelectedNodes(),\n      columns: this.column ? [this.column] : void 0,\n      defaultTextValue: this.cellValueFn()\n    };\n  }\n  getRowDragText(column) {\n    if (column) {\n      const colDef = column.getColDef();\n      if (colDef.rowDragText) {\n        return colDef.rowDragText;\n      }\n    }\n    return this.gos.get(\"rowDragText\");\n  }\n  addDragSource(dragStartPixels = 4) {\n    if (this.dragSource) {\n      this.removeDragSource();\n    }\n    const eGui = this.getGui();\n    if (this.gos.get(\"enableCellTextSelection\")) {\n      this.removeMouseDownListener();\n      this.mouseDownListener = this.addManagedElementListeners(eGui, {\n        mousedown: (e) => {\n          e?.preventDefault();\n        }\n      })[0];\n    }\n    const translate = this.localeService.getLocaleTextFunc();\n    this.dragSource = {\n      type: 2 /* RowDrag */,\n      eElement: eGui,\n      dragItemName: () => {\n        const dragItem = this.getDragItem();\n        const dragItemCount = dragItem.rowNodes?.length || 1;\n        const rowDragText = this.getRowDragText(this.column);\n        if (rowDragText) {\n          return rowDragText(dragItem, dragItemCount);\n        }\n        return dragItemCount === 1 ? this.cellValueFn() : `${dragItemCount} ${translate(\"rowDragRows\", \"rows\")}`;\n      },\n      getDragItem: () => this.getDragItem(),\n      dragStartPixels,\n      dragSourceDomDataKey: this.gos.getDomDataKey()\n    };\n    this.beans.dragAndDropService.addDragSource(this.dragSource, true);\n  }\n  destroy() {\n    this.removeDragSource();\n    this.removeMouseDownListener();\n    super.destroy();\n  }\n  removeDragSource() {\n    if (!this.dragSource) {\n      return;\n    }\n    this.beans.dragAndDropService.removeDragSource(this.dragSource);\n    this.dragSource = null;\n  }\n  removeMouseDownListener() {\n    if (!this.mouseDownListener) {\n      return;\n    }\n    this.mouseDownListener();\n    this.mouseDownListener = void 0;\n  }\n};\nvar VisibilityStrategy = class extends BeanStub {\n  constructor(parent, rowNode, column) {\n    super();\n    this.parent = parent;\n    this.rowNode = rowNode;\n    this.column = column;\n  }\n  setDisplayedOrVisible(neverDisplayed) {\n    const displayedOptions = { skipAriaHidden: true };\n    if (neverDisplayed) {\n      this.parent.setDisplayed(false, displayedOptions);\n    } else {\n      let shown = true;\n      let isShownSometimes = false;\n      if (this.column) {\n        shown = this.column.isRowDrag(this.rowNode) || this.parent.isCustomGui();\n        isShownSometimes = _isFunction(this.column.getColDef().rowDrag);\n      }\n      if (isShownSometimes) {\n        this.parent.setDisplayed(true, displayedOptions);\n        this.parent.setVisible(shown, displayedOptions);\n      } else {\n        this.parent.setDisplayed(shown, displayedOptions);\n        this.parent.setVisible(true, displayedOptions);\n      }\n    }\n  }\n};\nvar NonManagedVisibilityStrategy = class extends VisibilityStrategy {\n  constructor(parent, beans, rowNode, column) {\n    super(parent, rowNode, column);\n    this.beans = beans;\n  }\n  postConstruct() {\n    this.addManagedPropertyListener(\"suppressRowDrag\", this.onSuppressRowDrag.bind(this));\n    const listener = this.workOutVisibility.bind(this);\n    this.addManagedListeners(this.rowNode, {\n      dataChanged: listener,\n      cellChanged: listener\n    });\n    this.addManagedListeners(this.beans.eventService, { newColumnsLoaded: listener });\n    this.workOutVisibility();\n  }\n  onSuppressRowDrag() {\n    this.workOutVisibility();\n  }\n  workOutVisibility() {\n    const neverDisplayed = this.gos.get(\"suppressRowDrag\");\n    this.setDisplayedOrVisible(neverDisplayed);\n  }\n};\nvar ManagedVisibilityStrategy = class extends VisibilityStrategy {\n  constructor(parent, beans, rowNode, column) {\n    super(parent, rowNode, column);\n    this.beans = beans;\n  }\n  postConstruct() {\n    const listener = this.workOutVisibility.bind(this);\n    this.addManagedListeners(this.beans.eventService, {\n      sortChanged: listener,\n      filterChanged: listener,\n      columnRowGroupChanged: listener,\n      newColumnsLoaded: listener\n    });\n    this.addManagedListeners(this.rowNode, {\n      dataChanged: listener,\n      cellChanged: listener\n    });\n    this.addManagedPropertyListener(\"suppressRowDrag\", this.onSuppressRowDrag.bind(this));\n    this.workOutVisibility();\n  }\n  onSuppressRowDrag() {\n    this.workOutVisibility();\n  }\n  workOutVisibility() {\n    const gridBodyCon = this.beans.ctrlsService.getGridBodyCtrl();\n    const rowDragFeature = gridBodyCon.getRowDragFeature();\n    const shouldPreventRowMove = rowDragFeature && rowDragFeature.shouldPreventRowMove();\n    const suppressRowDrag = this.gos.get(\"suppressRowDrag\");\n    const hasExternalDropZones = this.beans.dragAndDropService.hasExternalDropZones();\n    const neverDisplayed = shouldPreventRowMove && !hasExternalDropZones || suppressRowDrag;\n    this.setDisplayedOrVisible(neverDisplayed);\n  }\n};\n\n// community-modules/core/src/entities/rowNode.ts\nvar IGNORED_SIBLING_PROPERTIES = /* @__PURE__ */ new Set([\"localEventService\", \"__objectId\", \"sticky\", \"__autoHeights\", \"checkAutoHeightsDebounced\"]);\nvar _RowNode = class _RowNode {\n  constructor(beans) {\n    /** The current row index. If the row is filtered out or in a collapsed group, this value will be `null`. */\n    this.rowIndex = null;\n    /** The key for the group eg Ireland, UK, USA */\n    this.key = null;\n    /**\n     * The index of the row in the source rowData array including any updates via transactions.\n     * It does not change when sorting, filtering, grouping, pivoting or any other UI related operations.\n     * If this is a filler node (a visual row created by AG Grid in tree data or grouping) the value will be `-1`.\n     *\n     * Generally readonly. It is modified only by:\n     * - ClientSideNodeManager, cast to ClientSideNodeManagerRowNode\n     * - ClientSideRowModel, cast to ClientSideRowModelRowNode\n     */\n    this.sourceRowIndex = -1;\n    /**\n     * Children mapped by the pivot columns.\n     *\n     * TODO: this field is currently used only by the GroupStrategy and Pivot.\n     * TreeStrategy does not use it, and pivot cannot be enabled with tree data.\n     * Creating a new object for every row when not pivoting and not grouping\n     * consumes memory unnecessarily. Setting it to null however currently breaks\n     * transactional updates in groups so this requires a deeper investigation on GroupStrategy.\n     */\n    this.childrenMapped = {};\n    /** The TreeNode associated to this row. Used only with tree data. */\n    this.treeNode = null;\n    /** The flags associated to this node. Used only with tree data. */\n    this.treeNodeFlags = 0;\n    /**\n     * This will be `true` if it has a rowIndex assigned, otherwise `false`.\n     */\n    this.displayed = false;\n    /** The row top position in pixels. */\n    this.rowTop = null;\n    /** The top pixel for this row last time, makes sense if data set was ordered or filtered,\n     * it is used so new rows can animate in from their old position. */\n    this.oldRowTop = null;\n    /** `true` by default - can be overridden via gridOptions.isRowSelectable(rowNode) */\n    this.selectable = true;\n    /** Used by sorting service - to give deterministic sort to groups. Previously we\n     * just id for this, however id is a string and had slower sorting compared to numbers. */\n    this.__objectId = _RowNode.OBJECT_ID_SEQUENCE++;\n    /** When one or more Columns are using autoHeight, this keeps track of height of each autoHeight Cell,\n     * indexed by the Column ID. */\n    this.__autoHeights = {};\n    /** `true` when nodes with the same id are being removed and added as part of the same batch transaction */\n    this.alreadyRendered = false;\n    this.highlighted = null;\n    this.hovered = false;\n    this.selected = false;\n    this.beans = beans;\n  }\n  /**\n   * Replaces the data on the `rowNode`. When this method is called, the grid will refresh the entire rendered row if it is displayed.\n   */\n  setData(data) {\n    this.setDataCommon(data, false);\n  }\n  // similar to setRowData, however it is expected that the data is the same data item. this\n  // is intended to be used with Redux type stores, where the whole data can be changed. we are\n  // guaranteed that the data is the same entity (so grid doesn't need to worry about the id of the\n  // underlying data changing, hence doesn't need to worry about selection). the grid, upon receiving\n  // dataChanged event, will refresh the cells rather than rip them all out (so user can show transitions).\n  /**\n   * Updates the data on the `rowNode`. When this method is called, the grid will refresh the entire rendered row if it is displayed.\n   */\n  updateData(data) {\n    this.setDataCommon(data, true);\n  }\n  setDataCommon(data, update) {\n    const oldData = this.data;\n    this.data = data;\n    this.beans.valueCache.onDataChanged();\n    this.updateDataOnDetailNode();\n    this.checkRowSelectable();\n    this.resetQuickFilterAggregateText();\n    const event = this.createDataChangedEvent(data, oldData, update);\n    this.localEventService?.dispatchEvent(event);\n  }\n  // when we are doing master / detail, the detail node is lazy created, but then kept around.\n  // so if we show / hide the detail, the same detail rowNode is used. so we need to keep the data\n  // in sync, otherwise expand/collapse of the detail would still show the old values.\n  updateDataOnDetailNode() {\n    if (this.detailNode) {\n      this.detailNode.data = this.data;\n    }\n  }\n  createDataChangedEvent(newData, oldData, update) {\n    return {\n      type: \"dataChanged\",\n      node: this,\n      oldData,\n      newData,\n      update\n    };\n  }\n  getRowIndexString() {\n    if (this.rowIndex == null) {\n      _errorOnce(\n        \"Could not find rowIndex, this means tasks are being executed on a rowNode that has been removed from the grid.\"\n      );\n      return null;\n    }\n    if (this.rowPinned === \"top\") {\n      return _RowNode.ID_PREFIX_TOP_PINNED + this.rowIndex;\n    }\n    if (this.rowPinned === \"bottom\") {\n      return _RowNode.ID_PREFIX_BOTTOM_PINNED + this.rowIndex;\n    }\n    return this.rowIndex.toString();\n  }\n  createDaemonNode() {\n    const oldNode = new _RowNode(this.beans);\n    oldNode.id = this.id;\n    oldNode.data = this.data;\n    oldNode.__daemon = true;\n    oldNode.selected = this.selected;\n    oldNode.level = this.level;\n    return oldNode;\n  }\n  setDataAndId(data, id) {\n    const oldNode = _exists(this.id) ? this.createDaemonNode() : null;\n    const oldData = this.data;\n    this.data = data;\n    this.updateDataOnDetailNode();\n    this.setId(id);\n    this.checkRowSelectable();\n    this.beans.selectionService.syncInRowNode(this, oldNode);\n    const event = this.createDataChangedEvent(data, oldData, false);\n    this.localEventService?.dispatchEvent(event);\n  }\n  checkRowSelectable() {\n    const isRowSelectableFunc = _getIsRowSelectable(this.beans.gos);\n    this.setRowSelectable(isRowSelectableFunc ? isRowSelectableFunc(this) : true);\n  }\n  setRowSelectable(newVal, suppressSelectionUpdate) {\n    if (this.selectable !== newVal) {\n      this.selectable = newVal;\n      this.dispatchRowEvent(\"selectableChanged\");\n      if (suppressSelectionUpdate) {\n        return;\n      }\n      const isGroupSelectsChildren = _getGroupSelectsDescendants(this.beans.gos);\n      if (isGroupSelectsChildren) {\n        const selected = this.calculateSelectedFromChildren();\n        this.setSelectedParams({\n          newValue: selected ?? false,\n          source: \"selectableChanged\"\n        });\n        return;\n      }\n      if (this.isSelected() && !this.selectable) {\n        this.setSelectedParams({\n          newValue: false,\n          source: \"selectableChanged\"\n        });\n      }\n    }\n  }\n  setId(id) {\n    const getRowIdFunc = _getRowIdCallback(this.beans.gos);\n    if (getRowIdFunc) {\n      if (this.data) {\n        const parentKeys = this.parent?.getRoute() ?? [];\n        this.id = getRowIdFunc({\n          data: this.data,\n          parentKeys: parentKeys.length > 0 ? parentKeys : void 0,\n          level: this.level,\n          rowPinned: this.rowPinned\n        });\n        if (this.id.startsWith(_RowNode.ID_PREFIX_ROW_GROUP)) {\n          _errorOnce(\n            `Row IDs cannot start with ${_RowNode.ID_PREFIX_ROW_GROUP}, this is a reserved prefix for AG Grid's row grouping feature.`\n          );\n        }\n      } else {\n        this.id = void 0;\n      }\n    } else {\n      this.id = id;\n    }\n  }\n  setRowTop(rowTop) {\n    this.oldRowTop = this.rowTop;\n    if (this.rowTop === rowTop) {\n      return;\n    }\n    this.rowTop = rowTop;\n    this.dispatchRowEvent(\"topChanged\");\n    this.setDisplayed(rowTop !== null);\n  }\n  clearRowTopAndRowIndex() {\n    this.oldRowTop = null;\n    this.setRowTop(null);\n    this.setRowIndex(null);\n  }\n  setHovered(hovered) {\n    this.hovered = hovered;\n  }\n  isHovered() {\n    return this.hovered;\n  }\n  setMaster(master) {\n    if (this.master === master) {\n      return;\n    }\n    if (this.master && !master) {\n      this.expanded = false;\n    }\n    this.master = master;\n    this.dispatchRowEvent(\"masterChanged\");\n  }\n  setGroup(group) {\n    if (this.group === group) {\n      return;\n    }\n    if (this.group && !group) {\n      this.expanded = false;\n    }\n    this.group = group;\n    this.updateHasChildren();\n    this.checkRowSelectable();\n    this.dispatchRowEvent(\"groupChanged\");\n  }\n  /**\n   * Sets the row height.\n   * Call if you want to change the height initially assigned to the row.\n   * After calling, you must call `api.onRowHeightChanged()` so the grid knows it needs to work out the placement of the rows. */\n  setRowHeight(rowHeight, estimated = false) {\n    this.rowHeight = rowHeight;\n    this.rowHeightEstimated = estimated;\n    this.dispatchRowEvent(\"heightChanged\");\n  }\n  setRowAutoHeight(cellHeight, column) {\n    if (!this.__autoHeights) {\n      this.__autoHeights = {};\n    }\n    this.__autoHeights[column.getId()] = cellHeight;\n    if (cellHeight != null) {\n      if (this.checkAutoHeightsDebounced == null) {\n        this.checkAutoHeightsDebounced = _debounce(this.checkAutoHeights.bind(this), 1);\n      }\n      this.checkAutoHeightsDebounced();\n    }\n  }\n  checkAutoHeights() {\n    let notAllPresent = false;\n    let nonePresent = true;\n    let newRowHeight = 0;\n    const autoHeights = this.__autoHeights;\n    if (autoHeights == null) {\n      return;\n    }\n    const displayedAutoHeightCols = this.beans.visibleColsService.getAllAutoHeightCols();\n    displayedAutoHeightCols.forEach((col) => {\n      let cellHeight = autoHeights[col.getId()];\n      if (cellHeight == null) {\n        if (this.beans.columnModel.isColSpanActive()) {\n          let activeColsForRow = [];\n          switch (col.getPinned()) {\n            case \"left\":\n              activeColsForRow = this.beans.visibleColsService.getLeftColsForRow(this);\n              break;\n            case \"right\":\n              activeColsForRow = this.beans.visibleColsService.getRightColsForRow(this);\n              break;\n            case null:\n              activeColsForRow = this.beans.columnViewportService.getColsWithinViewport(this);\n              break;\n          }\n          if (activeColsForRow.includes(col)) {\n            notAllPresent = true;\n            return;\n          }\n          cellHeight = -1;\n        } else {\n          notAllPresent = true;\n          return;\n        }\n      } else {\n        nonePresent = false;\n      }\n      if (cellHeight > newRowHeight) {\n        newRowHeight = cellHeight;\n      }\n    });\n    if (notAllPresent) {\n      return;\n    }\n    if (nonePresent || newRowHeight < 10) {\n      newRowHeight = _getRowHeightForNode(this.beans.gos, this).height;\n    }\n    if (newRowHeight == this.rowHeight) {\n      return;\n    }\n    this.setRowHeight(newRowHeight);\n    const rowModel = this.beans.rowModel;\n    rowModel.onRowHeightChangedDebounced?.();\n  }\n  /**\n   * Set the expanded state of this rowNode. Pass `true` to expand and `false` to collapse.\n   */\n  setExpanded(expanded, e, forceSync) {\n    if (this.expanded === expanded) {\n      return;\n    }\n    this.expanded = expanded;\n    this.dispatchRowEvent(\"expandedChanged\");\n    const event = { ...this.createGlobalRowEvent(\"rowGroupOpened\"), expanded, event: e || null };\n    this.beans.rowNodeEventThrottle.dispatchExpanded(event, forceSync);\n    this.beans.rowRenderer.refreshCells({ rowNodes: [this] });\n  }\n  createGlobalRowEvent(type) {\n    return this.beans.gos.addGridCommonParams({\n      type,\n      node: this,\n      data: this.data,\n      rowIndex: this.rowIndex,\n      rowPinned: this.rowPinned\n    });\n  }\n  /**\n   * Replaces the value on the `rowNode` for the specified column. When complete,\n   * the grid will refresh the rendered cell on the required row only.\n   * **Note**: This method only fires `onCellEditRequest` when the Grid is in **Read Only** mode.\n   *\n   * @param colKey The column where the value should be updated\n   * @param newValue The new value\n   * @param eventSource The source of the event\n   * @returns `true` if the value was changed, otherwise `false`.\n   */\n  setDataValue(colKey, newValue, eventSource) {\n    const getColumnFromKey = () => {\n      if (typeof colKey !== \"string\") {\n        return colKey;\n      }\n      return this.beans.columnModel.getCol(colKey) ?? this.beans.columnModel.getColDefCol(colKey);\n    };\n    const column = getColumnFromKey();\n    const oldValue = this.beans.valueService.getValueForDisplay(column, this);\n    if (this.beans.gos.get(\"readOnlyEdit\")) {\n      this.beans.eventService.dispatchEvent({\n        type: \"cellEditRequest\",\n        event: null,\n        rowIndex: this.rowIndex,\n        rowPinned: this.rowPinned,\n        column,\n        colDef: column.getColDef(),\n        data: this.data,\n        node: this,\n        oldValue,\n        newValue,\n        value: newValue,\n        source: eventSource\n      });\n      return false;\n    }\n    const valueChanged = this.beans.valueService.setValue(this, column, newValue, eventSource);\n    this.dispatchCellChangedEvent(column, newValue, oldValue);\n    this.checkRowSelectable();\n    return valueChanged;\n  }\n  setGroupValue(colKey, newValue) {\n    const column = this.beans.columnModel.getCol(colKey);\n    if (_missing(this.groupData)) {\n      this.groupData = {};\n    }\n    const columnId = column.getColId();\n    const oldValue = this.groupData[columnId];\n    if (oldValue === newValue) {\n      return;\n    }\n    this.groupData[columnId] = newValue;\n    this.dispatchCellChangedEvent(column, newValue, oldValue);\n  }\n  // sets the data for an aggregation\n  setAggData(newAggData) {\n    const oldAggData = this.aggData;\n    this.aggData = newAggData;\n    if (this.localEventService) {\n      const eventFunc = (colId) => {\n        const value = this.aggData ? this.aggData[colId] : void 0;\n        const oldValue = oldAggData ? oldAggData[colId] : void 0;\n        if (value === oldValue) {\n          return;\n        }\n        const column = this.beans.columnModel.getCol(colId);\n        if (!column) {\n          return;\n        }\n        this.dispatchCellChangedEvent(column, value, oldValue);\n      };\n      for (const key in oldAggData) {\n        eventFunc(key);\n      }\n      for (const key in newAggData) {\n        if (!oldAggData || !(key in oldAggData)) {\n          eventFunc(key);\n        }\n      }\n    }\n  }\n  updateHasChildren() {\n    let newValue = this.group && !this.footer || this.childrenAfterGroup && this.childrenAfterGroup.length > 0;\n    const isSsrm = _isServerSideRowModel(this.beans.gos);\n    if (isSsrm) {\n      const isTreeData = this.beans.gos.get(\"treeData\");\n      const isGroupFunc = this.beans.gos.get(\"isServerSideGroup\");\n      newValue = !this.stub && !this.footer && (isTreeData ? !!isGroupFunc && isGroupFunc(this.data) : !!this.group);\n    }\n    if (newValue !== this.__hasChildren) {\n      this.__hasChildren = !!newValue;\n      this.dispatchRowEvent(\"hasChildrenChanged\");\n    }\n  }\n  hasChildren() {\n    if (this.__hasChildren == null) {\n      this.updateHasChildren();\n    }\n    return this.__hasChildren;\n  }\n  dispatchCellChangedEvent(column, newValue, oldValue) {\n    const cellChangedEvent = {\n      type: \"cellChanged\",\n      node: this,\n      column,\n      newValue,\n      oldValue\n    };\n    this.localEventService?.dispatchEvent(cellChangedEvent);\n  }\n  /**\n   * The first time `quickFilter` runs, the grid creates a one-off string representation of the row.\n   * This string is then used for the quick filter instead of hitting each column separately.\n   * When you edit, using grid editing, this string gets cleared down.\n   * However if you edit without using grid editing, you will need to clear this string down for the row to be updated with the new values.\n   * Otherwise new values will not work with the `quickFilter`. */\n  resetQuickFilterAggregateText() {\n    this.quickFilterAggregateText = null;\n  }\n  /** Returns:\n   * - `true` if the node can be expanded, i.e it is a group or master row.\n   * - `false` if the node cannot be expanded\n   */\n  isExpandable() {\n    if (this.footer) {\n      return false;\n    }\n    if (this.beans.columnModel.isPivotMode()) {\n      return this.hasChildren() && !this.leafGroup;\n    }\n    return this.hasChildren() || !!this.master;\n  }\n  /** Returns:\n   * - `true` if node is selected,\n   * - `false` if the node isn't selected\n   * - `undefined` if it's partially selected (group where not all children are selected). */\n  isSelected() {\n    if (this.footer) {\n      return this.sibling.isSelected();\n    }\n    return this.selected;\n  }\n  /** Perform a depth-first search of this node and its children. */\n  depthFirstSearch(callback) {\n    if (this.childrenAfterGroup) {\n      this.childrenAfterGroup.forEach((child) => child.depthFirstSearch(callback));\n    }\n    callback(this);\n  }\n  // + selectionController.calculatedSelectedForAllGroupNodes()\n  calculateSelectedFromChildren() {\n    let atLeastOneSelected = false;\n    let atLeastOneDeSelected = false;\n    if (!this.childrenAfterGroup?.length) {\n      return this.selectable ? this.selected : null;\n    }\n    for (let i = 0; i < this.childrenAfterGroup.length; i++) {\n      const child = this.childrenAfterGroup[i];\n      let childState = child.isSelected();\n      if (!child.selectable) {\n        const selectable = child.calculateSelectedFromChildren();\n        if (selectable === null) {\n          continue;\n        }\n        childState = selectable;\n      }\n      switch (childState) {\n        case true:\n          atLeastOneSelected = true;\n          break;\n        case false:\n          atLeastOneDeSelected = true;\n          break;\n        default:\n          return void 0;\n      }\n    }\n    if (atLeastOneSelected && atLeastOneDeSelected) {\n      return void 0;\n    }\n    if (atLeastOneSelected) {\n      return true;\n    }\n    if (atLeastOneDeSelected) {\n      return false;\n    }\n    if (!this.selectable) {\n      return null;\n    }\n    return this.selected;\n  }\n  setSelectedInitialValue(selected) {\n    this.selected = selected;\n  }\n  dispatchRowEvent(type) {\n    this.localEventService?.dispatchEvent({\n      type,\n      node: this\n    });\n  }\n  selectThisNode(newValue, e, source = \"api\") {\n    const selectionNotAllowed = !this.selectable && newValue;\n    const selectionNotChanged = this.selected === newValue;\n    if (selectionNotAllowed || selectionNotChanged) {\n      return false;\n    }\n    this.selected = newValue;\n    this.dispatchRowEvent(\"rowSelected\");\n    const sibling = this.sibling;\n    if (sibling && sibling.footer && sibling.localEventService) {\n      sibling.dispatchRowEvent(\"rowSelected\");\n    }\n    this.beans.eventService.dispatchEvent({\n      ...this.createGlobalRowEvent(\"rowSelected\"),\n      event: e || null,\n      source\n    });\n    return true;\n  }\n  /**\n   * Select (or deselect) the node.\n   * @param newValue -`true` for selection, `false` for deselection.\n   * @param clearSelection - If selecting, then passing `true` will select the node exclusively (i.e. NOT do multi select). If doing deselection, `clearSelection` has no impact.\n   * @param source - Source property that will appear in the `selectionChanged` event.\n   */\n  setSelected(newValue, clearSelection = false, source = \"api\") {\n    if (typeof source === \"boolean\") {\n      _warnOnce(\n        \"since version v30, rowNode.setSelected() property `suppressFinishActions` has been removed, please use `gridApi.setNodesSelected()` for bulk actions, and the event `source` property for ignoring events instead.\"\n      );\n      return;\n    }\n    this.setSelectedParams({\n      newValue,\n      clearSelection,\n      rangeSelect: false,\n      source\n    });\n  }\n  // this is for internal use only. To make calling code more readable, this is the same method as setSelected except it takes names parameters\n  setSelectedParams(params) {\n    if (this.rowPinned) {\n      _warnOnce(\"cannot select pinned rows\");\n      return 0;\n    }\n    if (this.id === void 0) {\n      _warnOnce(\"cannot select node until id for node is known\");\n      return 0;\n    }\n    return this.beans.selectionService.setNodesSelected({ ...params, nodes: [this.footer ? this.sibling : this] });\n  }\n  /**\n   * Returns:\n   * - `true` if node is either pinned to the `top` or `bottom`\n   * - `false` if the node isn't pinned\n   */\n  isRowPinned() {\n    return !!this.rowPinned;\n  }\n  /** Add an event listener. */\n  addEventListener(eventType, userListener) {\n    if (!this.localEventService) {\n      this.localEventService = new LocalEventService();\n    }\n    if (this.beans.frameworkOverrides.shouldWrapOutgoing && !this.frameworkEventListenerService) {\n      this.localEventService.setFrameworkOverrides(this.beans.frameworkOverrides);\n      this.frameworkEventListenerService = new FrameworkEventListenerService(this.beans.frameworkOverrides);\n    }\n    const listener = this.frameworkEventListenerService?.wrap(eventType, userListener) ?? userListener;\n    this.localEventService.addEventListener(eventType, listener);\n  }\n  /** Remove event listener. */\n  removeEventListener(eventType, userListener) {\n    if (!this.localEventService) {\n      return;\n    }\n    const listener = this.frameworkEventListenerService?.unwrap(eventType, userListener) ?? userListener;\n    this.localEventService.removeEventListener(eventType, listener);\n    if (this.localEventService.noRegisteredListenersExist()) {\n      this.localEventService = null;\n    }\n  }\n  onMouseEnter() {\n    this.dispatchRowEvent(\"mouseEnter\");\n  }\n  onMouseLeave() {\n    this.dispatchRowEvent(\"mouseLeave\");\n  }\n  /**\n   * @deprecated v32.2.0 Check `node.detail` then user provided callback `isFullWidthRow` instead.\n   *\n   * Returns:\n   * - `true` if the node is a full width cell\n   * - `false` if the node is not a full width cell\n   */\n  isFullWidthCell() {\n    _warnOnce(\n      \"since version v32.2.0, rowNode.isFullWidthCell() has been deprecated. Instead check `rowNode.detail` followed by the user provided `isFullWidthRow` grid option.\"\n    );\n    if (this.detail) {\n      return true;\n    }\n    const isFullWidthCellFunc = this.beans.gos.getCallback(\"isFullWidthRow\");\n    return isFullWidthCellFunc ? isFullWidthCellFunc({ rowNode: this }) : false;\n  }\n  /**\n   * Returns the route of keys to the row node. Returns undefined if the node has no key.\n   */\n  getRoute() {\n    if (this.level === -1) {\n      return [];\n    }\n    if (this.key == null) {\n      return void 0;\n    }\n    const res = [];\n    let pointer = this;\n    while (pointer && pointer.key != null) {\n      res.push(pointer.key);\n      pointer = pointer.parent;\n    }\n    return res.reverse();\n  }\n  createFooter() {\n    if (this.sibling) {\n      return;\n    }\n    const footerNode = new _RowNode(this.beans);\n    Object.keys(this).forEach((key) => {\n      if (IGNORED_SIBLING_PROPERTIES.has(key)) {\n        return;\n      }\n      footerNode[key] = this[key];\n    });\n    footerNode.footer = true;\n    footerNode.setRowTop(null);\n    footerNode.setRowIndex(null);\n    footerNode.oldRowTop = null;\n    footerNode.id = \"rowGroupFooter_\" + this.id;\n    footerNode.sibling = this;\n    this.sibling = footerNode;\n  }\n  destroyFooter() {\n    if (!this.sibling) {\n      return;\n    }\n    this.sibling.setRowTop(null);\n    this.sibling.setRowIndex(null);\n    this.sibling = void 0;\n  }\n  setFirstChild(firstChild) {\n    if (this.firstChild !== firstChild) {\n      this.firstChild = firstChild;\n      this.dispatchRowEvent(\"firstChildChanged\");\n    }\n  }\n  setLastChild(lastChild) {\n    if (this.lastChild !== lastChild) {\n      this.lastChild = lastChild;\n      this.dispatchRowEvent(\"lastChildChanged\");\n    }\n  }\n  setChildIndex(childIndex) {\n    if (this.childIndex !== childIndex) {\n      this.childIndex = childIndex;\n      this.dispatchRowEvent(\"childIndexChanged\");\n    }\n  }\n  setDisplayed(displayed) {\n    if (this.displayed !== displayed) {\n      this.displayed = displayed;\n      this.dispatchRowEvent(\"displayedChanged\");\n    }\n  }\n  setDragging(dragging) {\n    if (this.dragging !== dragging) {\n      this.dragging = dragging;\n      this.dispatchRowEvent(\"draggingChanged\");\n    }\n  }\n  setHighlighted(highlighted) {\n    if (this.highlighted !== highlighted) {\n      this.highlighted = highlighted;\n      this.dispatchRowEvent(\"rowHighlightChanged\");\n    }\n  }\n  setAllChildrenCount(allChildrenCount) {\n    if (this.allChildrenCount !== allChildrenCount) {\n      this.allChildrenCount = allChildrenCount;\n      this.dispatchRowEvent(\"allChildrenCountChanged\");\n    }\n  }\n  setRowIndex(rowIndex) {\n    if (this.rowIndex !== rowIndex) {\n      this.rowIndex = rowIndex;\n      this.dispatchRowEvent(\"rowIndexChanged\");\n    }\n  }\n  setUiLevel(uiLevel) {\n    if (this.uiLevel !== uiLevel) {\n      this.uiLevel = uiLevel;\n      this.dispatchRowEvent(\"uiLevelChanged\");\n    }\n  }\n};\n_RowNode.ID_PREFIX_ROW_GROUP = \"row-group-\";\n_RowNode.ID_PREFIX_TOP_PINNED = \"t-\";\n_RowNode.ID_PREFIX_BOTTOM_PINNED = \"b-\";\n_RowNode.OBJECT_ID_SEQUENCE = 0;\nvar RowNode = _RowNode;\n\n// community-modules/core/src/filter/filterManager.ts\nvar FilterManager = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"filterManager\";\n    // when we're waiting for cell data types to be inferred, we need to defer filter model updates\n    this.advancedFilterModelUpdateQueue = [];\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.dataTypeService = beans.dataTypeService;\n    this.quickFilterService = beans.quickFilterService;\n    this.advancedFilterService = beans.advancedFilterService;\n    this.columnFilterService = beans.columnFilterService;\n  }\n  postConstruct() {\n    const refreshFiltersForAggregations = this.refreshFiltersForAggregations.bind(this);\n    const updateAdvancedFilterColumns = this.updateAdvancedFilterColumns.bind(this);\n    this.addManagedEventListeners({\n      columnValueChanged: refreshFiltersForAggregations,\n      columnPivotChanged: refreshFiltersForAggregations,\n      columnPivotModeChanged: refreshFiltersForAggregations,\n      newColumnsLoaded: updateAdvancedFilterColumns,\n      columnVisible: updateAdvancedFilterColumns,\n      advancedFilterEnabledChanged: ({ enabled }) => this.onAdvancedFilterEnabledChanged(enabled),\n      dataTypesInferred: this.processFilterModelUpdateQueue.bind(this)\n    });\n    this.externalFilterPresent = this.isExternalFilterPresentCallback();\n    this.addManagedPropertyListeners([\"isExternalFilterPresent\", \"doesExternalFilterPass\"], () => {\n      this.onFilterChanged({ source: \"api\" });\n    });\n    this.updateAggFiltering();\n    this.addManagedPropertyListener(\"groupAggFiltering\", () => {\n      this.updateAggFiltering();\n      this.onFilterChanged();\n    });\n    this.addManagedPropertyListener(\n      \"advancedFilterModel\",\n      (event) => this.setAdvancedFilterModel(event.currentValue)\n    );\n    if (this.quickFilterService) {\n      this.addManagedListeners(this.quickFilterService, {\n        quickFilterChanged: () => this.onFilterChanged({ source: \"quickFilter\" })\n      });\n    }\n  }\n  isExternalFilterPresentCallback() {\n    const isFilterPresent = this.gos.getCallback(\"isExternalFilterPresent\");\n    if (typeof isFilterPresent === \"function\") {\n      return isFilterPresent({});\n    }\n    return false;\n  }\n  doesExternalFilterPass(node) {\n    const doesFilterPass = this.gos.get(\"doesExternalFilterPass\");\n    if (typeof doesFilterPass === \"function\") {\n      return doesFilterPass(node);\n    }\n    return false;\n  }\n  setFilterModel(model, source = \"api\") {\n    if (this.isAdvancedFilterEnabled()) {\n      this.warnAdvancedFilters();\n      return;\n    }\n    this.columnFilterService?.setFilterModel(model, source);\n  }\n  getFilterModel() {\n    return this.columnFilterService?.getFilterModel() ?? {};\n  }\n  isColumnFilterPresent() {\n    return !!this.columnFilterService?.isColumnFilterPresent();\n  }\n  isAggregateFilterPresent() {\n    return !!this.columnFilterService?.isAggregateFilterPresent();\n  }\n  isExternalFilterPresent() {\n    return this.externalFilterPresent;\n  }\n  isChildFilterPresent() {\n    return this.isColumnFilterPresent() || this.isQuickFilterPresent() || this.isExternalFilterPresent() || this.isAdvancedFilterPresent();\n  }\n  isAdvancedFilterPresent() {\n    return this.isAdvancedFilterEnabled() && this.advancedFilterService.isFilterPresent();\n  }\n  onAdvancedFilterEnabledChanged(enabled) {\n    if (enabled) {\n      if (this.columnFilterService?.disableColumnFilters()) {\n        this.onFilterChanged({ source: \"advancedFilter\" });\n      }\n    } else {\n      if (this.advancedFilterService?.isFilterPresent()) {\n        this.advancedFilterService.setModel(null);\n        this.onFilterChanged({ source: \"advancedFilter\" });\n      }\n    }\n  }\n  isAdvancedFilterEnabled() {\n    return !!this.advancedFilterService?.isEnabled();\n  }\n  isAdvancedFilterHeaderActive() {\n    return this.isAdvancedFilterEnabled() && this.advancedFilterService.isHeaderActive();\n  }\n  isAnyFilterPresent() {\n    return this.isQuickFilterPresent() || this.isColumnFilterPresent() || this.isAggregateFilterPresent() || this.isExternalFilterPresent() || this.isAdvancedFilterPresent();\n  }\n  resetQuickFilterCache() {\n    this.quickFilterService?.resetQuickFilterCache();\n  }\n  refreshFiltersForAggregations() {\n    const isAggFiltering = _getGroupAggFiltering(this.gos);\n    if (isAggFiltering) {\n      this.onFilterChanged();\n    }\n  }\n  onFilterChanged(params = {}) {\n    const { source, additionalEventAttributes, columns = [] } = params;\n    this.externalFilterPresent = this.isExternalFilterPresentCallback();\n    (this.columnFilterService ? this.columnFilterService.updateBeforeFilterChanged(params) : AgPromise.resolve()).then(() => {\n      const filterChangedEvent = {\n        source,\n        type: \"filterChanged\",\n        columns\n      };\n      if (additionalEventAttributes) {\n        _mergeDeep(filterChangedEvent, additionalEventAttributes);\n      }\n      this.eventService.dispatchEvent(filterChangedEvent);\n      this.columnFilterService?.updateAfterFilterChanged();\n    });\n  }\n  isSuppressFlashingCellsBecauseFiltering() {\n    return !!this.columnFilterService?.isSuppressFlashingCellsBecauseFiltering();\n  }\n  isQuickFilterPresent() {\n    return !!this.quickFilterService?.isQuickFilterPresent();\n  }\n  updateAggFiltering() {\n    this.aggFiltering = !!_getGroupAggFiltering(this.gos);\n  }\n  isAggregateQuickFilterPresent() {\n    return this.isQuickFilterPresent() && this.shouldApplyQuickFilterAfterAgg();\n  }\n  isNonAggregateQuickFilterPresent() {\n    return this.isQuickFilterPresent() && !this.shouldApplyQuickFilterAfterAgg();\n  }\n  shouldApplyQuickFilterAfterAgg() {\n    return (this.aggFiltering || this.columnModel.isPivotMode()) && !this.gos.get(\"applyQuickFilterBeforePivotOrAgg\");\n  }\n  doesRowPassOtherFilters(filterToSkip, node) {\n    return this.doesRowPassFilter({ rowNode: node, filterInstanceToSkip: filterToSkip });\n  }\n  doesRowPassAggregateFilters(params) {\n    if (this.isAggregateQuickFilterPresent() && !this.quickFilterService.doesRowPassQuickFilter(params.rowNode)) {\n      return false;\n    }\n    if (this.isAggregateFilterPresent() && !this.columnFilterService.doAggregateFiltersPass(params.rowNode, params.filterInstanceToSkip)) {\n      return false;\n    }\n    return true;\n  }\n  doesRowPassFilter(params) {\n    if (this.isNonAggregateQuickFilterPresent() && !this.quickFilterService.doesRowPassQuickFilter(params.rowNode)) {\n      return false;\n    }\n    if (this.isExternalFilterPresent() && !this.doesExternalFilterPass(params.rowNode)) {\n      return false;\n    }\n    if (this.isColumnFilterPresent() && !this.columnFilterService.doColumnFiltersPass(params.rowNode, params.filterInstanceToSkip)) {\n      return false;\n    }\n    if (this.isAdvancedFilterPresent() && !this.advancedFilterService.doesFilterPass(params.rowNode)) {\n      return false;\n    }\n    return true;\n  }\n  isFilterActive(column) {\n    return !!this.columnFilterService?.isFilterActive(column);\n  }\n  getOrCreateFilterWrapper(column) {\n    return this.columnFilterService?.getOrCreateFilterWrapper(column) ?? null;\n  }\n  getDefaultFloatingFilter(column) {\n    return this.columnFilterService.getDefaultFloatingFilter(column);\n  }\n  createFilterParams(column, colDef) {\n    return this.columnFilterService.createFilterParams(column, colDef);\n  }\n  // for group filters, can change dynamically whether they are allowed or not\n  isFilterAllowed(column) {\n    if (this.isAdvancedFilterEnabled()) {\n      return false;\n    }\n    return !!this.columnFilterService?.isFilterAllowed(column);\n  }\n  getFloatingFilterCompDetails(column, showParentFilter) {\n    return this.columnFilterService?.getFloatingFilterCompDetails(column, showParentFilter);\n  }\n  getCurrentFloatingFilterParentModel(column) {\n    return this.columnFilterService?.getCurrentFloatingFilterParentModel(column);\n  }\n  // destroys the filter, so it no longer takes part\n  destroyFilter(column, source = \"api\") {\n    this.columnFilterService?.destroyFilter(column, source);\n  }\n  areFilterCompsDifferent(oldCompDetails, newCompDetails) {\n    return !!this.columnFilterService?.areFilterCompsDifferent(oldCompDetails, newCompDetails);\n  }\n  getAdvancedFilterModel() {\n    return this.isAdvancedFilterEnabled() ? this.advancedFilterService.getModel() : null;\n  }\n  setAdvancedFilterModel(expression) {\n    if (!this.isAdvancedFilterEnabled()) {\n      return;\n    }\n    if (this.dataTypeService?.isPendingInference()) {\n      this.advancedFilterModelUpdateQueue.push(expression);\n      return;\n    }\n    this.advancedFilterService.setModel(expression ?? null);\n    this.onFilterChanged({ source: \"advancedFilter\" });\n  }\n  toggleAdvancedFilterBuilder(show, source) {\n    if (!this.isAdvancedFilterEnabled()) {\n      return;\n    }\n    this.advancedFilterService.getCtrl().toggleFilterBuilder({ source, force: show });\n  }\n  updateAdvancedFilterColumns() {\n    if (!this.isAdvancedFilterEnabled()) {\n      return;\n    }\n    if (this.advancedFilterService.updateValidity()) {\n      this.onFilterChanged({ source: \"advancedFilter\" });\n    }\n  }\n  hasFloatingFilters() {\n    if (this.isAdvancedFilterEnabled()) {\n      return false;\n    }\n    return !!this.columnFilterService?.hasFloatingFilters();\n  }\n  getFilterInstance(key, callback) {\n    if (this.isAdvancedFilterEnabled()) {\n      this.warnAdvancedFilters();\n      return void 0;\n    }\n    return this.columnFilterService?.getFilterInstance(key, callback);\n  }\n  getColumnFilterInstance(key) {\n    if (this.isAdvancedFilterEnabled()) {\n      this.warnAdvancedFilters();\n      return Promise.resolve(void 0);\n    }\n    return this.columnFilterService?.getColumnFilterInstance(key) ?? Promise.resolve(void 0);\n  }\n  warnAdvancedFilters() {\n    _warnOnce(\"Column Filter API methods have been disabled as Advanced Filters are enabled.\");\n  }\n  setupAdvancedFilterHeaderComp(eCompToInsertBefore) {\n    this.advancedFilterService?.getCtrl().setupHeaderComp(eCompToInsertBefore);\n  }\n  getHeaderRowCount() {\n    return this.isAdvancedFilterHeaderActive() ? 1 : 0;\n  }\n  getHeaderHeight() {\n    return this.isAdvancedFilterHeaderActive() ? this.advancedFilterService.getCtrl().getHeaderHeight() : 0;\n  }\n  processFilterModelUpdateQueue() {\n    this.advancedFilterModelUpdateQueue.forEach((model) => this.setAdvancedFilterModel(model));\n    this.advancedFilterModelUpdateQueue = [];\n  }\n  getColumnFilterModel(key) {\n    return this.columnFilterService?.getColumnFilterModel(key);\n  }\n  setColumnFilterModel(key, model) {\n    if (this.isAdvancedFilterEnabled()) {\n      this.warnAdvancedFilters();\n      return Promise.resolve();\n    }\n    return this.columnFilterService?.setColumnFilterModel(key, model) ?? Promise.resolve();\n  }\n  setColDefPropertiesForDataType(colDef, dataTypeDefinition, formatValue) {\n    this.columnFilterService?.setColDefPropertiesForDataType(colDef, dataTypeDefinition, formatValue);\n  }\n};\n\n// community-modules/core/src/filter/filterWrapperComp.ts\nvar FilterWrapperComp = class extends Component {\n  constructor(column, source) {\n    super(\n      /* html */\n      `<div class=\"ag-filter\"></div>`\n    );\n    this.column = column;\n    this.source = source;\n    this.filterWrapper = null;\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.columnModel = beans.columnModel;\n  }\n  postConstruct() {\n    this.createFilter(true);\n    this.addManagedEventListeners({ filterDestroyed: this.onFilterDestroyed.bind(this) });\n  }\n  hasFilter() {\n    return !!this.filterWrapper;\n  }\n  getFilter() {\n    return this.filterWrapper?.filterPromise ?? null;\n  }\n  afterInit() {\n    return this.filterWrapper?.filterPromise?.then(() => {\n    }) ?? AgPromise.resolve();\n  }\n  afterGuiAttached(params) {\n    this.filterWrapper?.filterPromise?.then((filter) => {\n      filter?.afterGuiAttached?.(params);\n    });\n  }\n  afterGuiDetached() {\n    this.filterWrapper?.filterPromise?.then((filter) => {\n      filter?.afterGuiDetached?.();\n    });\n  }\n  createFilter(init) {\n    const { column, source } = this;\n    this.filterWrapper = this.filterManager?.getOrCreateFilterWrapper(column) ?? null;\n    if (!this.filterWrapper?.filterPromise) {\n      return;\n    }\n    this.filterWrapper.filterPromise.then((filter) => {\n      const guiFromFilter = filter.getGui();\n      if (!_exists(guiFromFilter)) {\n        _warnOnce(`getGui method from filter returned ${guiFromFilter}; it should be a DOM element.`);\n      }\n      this.appendChild(guiFromFilter);\n      if (init) {\n        this.eventService.dispatchEvent({\n          type: \"filterOpened\",\n          column,\n          source,\n          eGui: this.getGui()\n        });\n      }\n    });\n  }\n  onFilterDestroyed(event) {\n    if ((event.source === \"api\" || event.source === \"paramsUpdated\") && event.column.getId() === this.column.getId() && this.columnModel.getColDefCol(this.column)) {\n      _clearElement(this.getGui());\n      this.createFilter();\n    }\n  }\n  destroy() {\n    this.filterWrapper = null;\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/rendering/features/positionableFeature.ts\nvar RESIZE_CONTAINER_STYLE = \"ag-resizer-wrapper\";\nvar makeDiv = (dataRefPrefix, classSuffix) => `<div data-ref=\"${dataRefPrefix}Resizer\" class=\"ag-resizer ag-resizer-${classSuffix}\"></div>`;\nvar RESIZE_TEMPLATE = (\n  /* html */\n  `<div class=\"${RESIZE_CONTAINER_STYLE}\">\n        ${makeDiv(\"eTopLeft\", \"topLeft\")}\n        ${makeDiv(\"eTop\", \"top\")}\n        ${makeDiv(\"eTopRight\", \"topRight\")}\n        ${makeDiv(\"eRight\", \"right\")}\n        ${makeDiv(\"eBottomRight\", \"bottomRight\")}\n        ${makeDiv(\"eBottom\", \"bottom\")}\n        ${makeDiv(\"eBottomLeft\", \"bottomLeft\")}\n        ${makeDiv(\"eLeft\", \"left\")}\n    </div>`\n);\nvar PositionableFeature = class extends BeanStub {\n  constructor(element, config) {\n    super();\n    this.element = element;\n    this.dragStartPosition = {\n      x: 0,\n      y: 0\n    };\n    this.position = {\n      x: 0,\n      y: 0\n    };\n    this.lastSize = {\n      width: -1,\n      height: -1\n    };\n    this.positioned = false;\n    this.resizersAdded = false;\n    this.resizeListeners = [];\n    this.boundaryEl = null;\n    this.isResizing = false;\n    this.isMoving = false;\n    this.resizable = {};\n    this.movable = false;\n    this.currentResizer = null;\n    this.config = Object.assign({}, { popup: false }, config);\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n    this.resizeObserverService = beans.resizeObserverService;\n    this.dragService = beans.dragService;\n  }\n  center() {\n    const { clientHeight, clientWidth } = this.offsetParent;\n    const x = clientWidth / 2 - this.getWidth() / 2;\n    const y = clientHeight / 2 - this.getHeight() / 2;\n    this.offsetElement(x, y);\n  }\n  initialisePosition() {\n    if (this.positioned) {\n      return;\n    }\n    const { centered, forcePopupParentAsOffsetParent, minWidth, width, minHeight, height, x, y } = this.config;\n    if (!this.offsetParent) {\n      this.setOffsetParent();\n    }\n    let computedMinHeight = 0;\n    let computedMinWidth = 0;\n    const isElementVisible = _isVisible(this.element);\n    if (isElementVisible) {\n      const boundaryEl = this.findBoundaryElement();\n      const offsetParentComputedStyles = window.getComputedStyle(boundaryEl);\n      if (offsetParentComputedStyles.minWidth != null) {\n        const paddingWidth = boundaryEl.offsetWidth - this.element.offsetWidth;\n        computedMinWidth = parseInt(offsetParentComputedStyles.minWidth, 10) - paddingWidth;\n      }\n      if (offsetParentComputedStyles.minHeight != null) {\n        const paddingHeight = boundaryEl.offsetHeight - this.element.offsetHeight;\n        computedMinHeight = parseInt(offsetParentComputedStyles.minHeight, 10) - paddingHeight;\n      }\n    }\n    this.minHeight = minHeight || computedMinHeight;\n    this.minWidth = minWidth || computedMinWidth;\n    if (width) {\n      this.setWidth(width);\n    }\n    if (height) {\n      this.setHeight(height);\n    }\n    if (!width || !height) {\n      this.refreshSize();\n    }\n    if (centered) {\n      this.center();\n    } else if (x || y) {\n      this.offsetElement(x, y);\n    } else if (isElementVisible && forcePopupParentAsOffsetParent) {\n      let boundaryEl = this.boundaryEl;\n      let initialisedDuringPositioning = true;\n      if (!boundaryEl) {\n        boundaryEl = this.findBoundaryElement();\n        initialisedDuringPositioning = false;\n      }\n      if (boundaryEl) {\n        const top = parseFloat(boundaryEl.style.top);\n        const left = parseFloat(boundaryEl.style.left);\n        if (initialisedDuringPositioning) {\n          this.offsetElement(isNaN(left) ? 0 : left, isNaN(top) ? 0 : top);\n        } else {\n          this.setPosition(left, top);\n        }\n      }\n    }\n    this.positioned = !!this.offsetParent;\n  }\n  isPositioned() {\n    return this.positioned;\n  }\n  getPosition() {\n    return this.position;\n  }\n  setMovable(movable, moveElement) {\n    if (!this.config.popup || movable === this.movable) {\n      return;\n    }\n    this.movable = movable;\n    const params = this.moveElementDragListener || {\n      eElement: moveElement,\n      onDragStart: this.onMoveStart.bind(this),\n      onDragging: this.onMove.bind(this),\n      onDragStop: this.onMoveEnd.bind(this)\n    };\n    if (movable) {\n      this.dragService.addDragSource(params);\n      this.moveElementDragListener = params;\n    } else {\n      this.dragService.removeDragSource(params);\n      this.moveElementDragListener = void 0;\n    }\n  }\n  setResizable(resizable) {\n    this.clearResizeListeners();\n    if (resizable) {\n      this.addResizers();\n    } else {\n      this.removeResizers();\n    }\n    if (typeof resizable === \"boolean\") {\n      if (resizable === false) {\n        return;\n      }\n      resizable = {\n        topLeft: resizable,\n        top: resizable,\n        topRight: resizable,\n        right: resizable,\n        bottomRight: resizable,\n        bottom: resizable,\n        bottomLeft: resizable,\n        left: resizable\n      };\n    }\n    Object.keys(resizable).forEach((side) => {\n      const resizableStructure = resizable;\n      const isSideResizable = !!resizableStructure[side];\n      const resizerEl = this.getResizerElement(side);\n      const params = {\n        dragStartPixels: 0,\n        eElement: resizerEl,\n        onDragStart: (e) => this.onResizeStart(e, side),\n        onDragging: this.onResize.bind(this),\n        onDragStop: (e) => this.onResizeEnd(e, side)\n      };\n      if (isSideResizable || !this.isAlive() && !isSideResizable) {\n        if (isSideResizable) {\n          this.dragService.addDragSource(params);\n          this.resizeListeners.push(params);\n          resizerEl.style.pointerEvents = \"all\";\n        } else {\n          resizerEl.style.pointerEvents = \"none\";\n        }\n        this.resizable[side] = isSideResizable;\n      }\n    });\n  }\n  removeSizeFromEl() {\n    this.element.style.removeProperty(\"height\");\n    this.element.style.removeProperty(\"width\");\n    this.element.style.removeProperty(\"flex\");\n  }\n  restoreLastSize() {\n    this.element.style.flex = \"0 0 auto\";\n    const { height, width } = this.lastSize;\n    if (width !== -1) {\n      this.element.style.width = `${width}px`;\n    }\n    if (height !== -1) {\n      this.element.style.height = `${height}px`;\n    }\n  }\n  getHeight() {\n    return this.element.offsetHeight;\n  }\n  setHeight(height) {\n    const { popup } = this.config;\n    const eGui = this.element;\n    let isPercent = false;\n    if (typeof height === \"string\" && height.indexOf(\"%\") !== -1) {\n      _setFixedHeight(eGui, height);\n      height = _getAbsoluteHeight(eGui);\n      isPercent = true;\n    } else {\n      height = Math.max(this.minHeight, height);\n      if (this.positioned) {\n        const availableHeight = this.getAvailableHeight();\n        if (availableHeight && height > availableHeight) {\n          height = availableHeight;\n        }\n      }\n    }\n    if (this.getHeight() === height) {\n      return;\n    }\n    if (!isPercent) {\n      if (popup) {\n        _setFixedHeight(eGui, height);\n      } else {\n        eGui.style.height = `${height}px`;\n        eGui.style.flex = \"0 0 auto\";\n        this.lastSize.height = typeof height === \"number\" ? height : parseFloat(height);\n      }\n    } else {\n      eGui.style.maxHeight = \"unset\";\n      eGui.style.minHeight = \"unset\";\n    }\n  }\n  getAvailableHeight() {\n    const { popup, forcePopupParentAsOffsetParent } = this.config;\n    if (!this.positioned) {\n      this.initialisePosition();\n    }\n    const { clientHeight } = this.offsetParent;\n    if (!clientHeight) {\n      return null;\n    }\n    const elRect = this.element.getBoundingClientRect();\n    const offsetParentRect = this.offsetParent.getBoundingClientRect();\n    const yPosition = popup ? this.position.y : elRect.top;\n    const parentTop = popup ? 0 : offsetParentRect.top;\n    let additionalHeight = 0;\n    if (forcePopupParentAsOffsetParent) {\n      const parentEl = this.element.parentElement;\n      if (parentEl) {\n        const { bottom } = parentEl.getBoundingClientRect();\n        additionalHeight = bottom - elRect.bottom;\n      }\n    }\n    const availableHeight = clientHeight + parentTop - yPosition - additionalHeight;\n    return availableHeight;\n  }\n  getWidth() {\n    return this.element.offsetWidth;\n  }\n  setWidth(width) {\n    const eGui = this.element;\n    const { popup } = this.config;\n    let isPercent = false;\n    if (typeof width === \"string\" && width.indexOf(\"%\") !== -1) {\n      _setFixedWidth(eGui, width);\n      width = _getAbsoluteWidth(eGui);\n      isPercent = true;\n    } else if (this.positioned) {\n      width = Math.max(this.minWidth, width);\n      const { clientWidth } = this.offsetParent;\n      const xPosition = popup ? this.position.x : this.element.getBoundingClientRect().left;\n      if (clientWidth && width + xPosition > clientWidth) {\n        width = clientWidth - xPosition;\n      }\n    }\n    if (this.getWidth() === width) {\n      return;\n    }\n    if (!isPercent) {\n      if (this.config.popup) {\n        _setFixedWidth(eGui, width);\n      } else {\n        eGui.style.width = `${width}px`;\n        eGui.style.flex = \" unset\";\n        this.lastSize.width = typeof width === \"number\" ? width : parseFloat(width);\n      }\n    } else {\n      eGui.style.maxWidth = \"unset\";\n      eGui.style.minWidth = \"unset\";\n    }\n  }\n  offsetElement(x = 0, y = 0) {\n    const { forcePopupParentAsOffsetParent } = this.config;\n    const ePopup = forcePopupParentAsOffsetParent ? this.boundaryEl : this.element;\n    if (!ePopup) {\n      return;\n    }\n    this.popupService.positionPopup({\n      ePopup,\n      keepWithinBounds: true,\n      skipObserver: this.movable || this.isResizable(),\n      updatePosition: () => ({ x, y })\n    });\n    this.setPosition(parseFloat(ePopup.style.left), parseFloat(ePopup.style.top));\n  }\n  constrainSizeToAvailableHeight(constrain) {\n    if (!this.config.forcePopupParentAsOffsetParent) {\n      return;\n    }\n    const applyMaxHeightToElement = () => {\n      const availableHeight = this.getAvailableHeight();\n      this.element.style.setProperty(\"max-height\", `${availableHeight}px`);\n    };\n    if (constrain) {\n      this.resizeObserverSubscriber = this.resizeObserverService.observeResize(\n        this.popupService.getPopupParent(),\n        applyMaxHeightToElement\n      );\n    } else {\n      this.element.style.removeProperty(\"max-height\");\n      if (this.resizeObserverSubscriber) {\n        this.resizeObserverSubscriber();\n        this.resizeObserverSubscriber = void 0;\n      }\n    }\n  }\n  setPosition(x, y) {\n    this.position.x = x;\n    this.position.y = y;\n  }\n  updateDragStartPosition(x, y) {\n    this.dragStartPosition = { x, y };\n  }\n  calculateMouseMovement(params) {\n    const { e, isLeft, isTop, anywhereWithin, topBuffer } = params;\n    const xDiff = e.clientX - this.dragStartPosition.x;\n    const yDiff = e.clientY - this.dragStartPosition.y;\n    const movementX = this.shouldSkipX(e, !!isLeft, !!anywhereWithin, xDiff) ? 0 : xDiff;\n    const movementY = this.shouldSkipY(e, !!isTop, topBuffer, yDiff) ? 0 : yDiff;\n    return { movementX, movementY };\n  }\n  shouldSkipX(e, isLeft, anywhereWithin, diff) {\n    const elRect = this.element.getBoundingClientRect();\n    const parentRect = this.offsetParent.getBoundingClientRect();\n    const boundaryElRect = this.boundaryEl.getBoundingClientRect();\n    const xPosition = this.config.popup ? this.position.x : elRect.left;\n    let skipX = xPosition <= 0 && parentRect.left >= e.clientX || parentRect.right <= e.clientX && parentRect.right <= boundaryElRect.right;\n    if (skipX) {\n      return true;\n    }\n    if (isLeft) {\n      skipX = // skip if we are moving to the left and the cursor\n      // is positioned to the right of the left side anchor\n      diff < 0 && e.clientX > xPosition + parentRect.left || // skip if we are moving to the right and the cursor\n      // is positioned to the left of the dialog\n      diff > 0 && e.clientX < xPosition + parentRect.left;\n    } else {\n      if (anywhereWithin) {\n        skipX = diff < 0 && e.clientX > boundaryElRect.right || diff > 0 && e.clientX < xPosition + parentRect.left;\n      } else {\n        skipX = // if the movement is bound to the right side of the dialog\n        // we skip if we are moving to the left and the cursor\n        // is to the right of the dialog\n        diff < 0 && e.clientX > boundaryElRect.right || // or skip if we are moving to the right and the cursor\n        // is to the left of the right side anchor\n        diff > 0 && e.clientX < boundaryElRect.right;\n      }\n    }\n    return skipX;\n  }\n  shouldSkipY(e, isTop, topBuffer = 0, diff) {\n    const elRect = this.element.getBoundingClientRect();\n    const parentRect = this.offsetParent.getBoundingClientRect();\n    const boundaryElRect = this.boundaryEl.getBoundingClientRect();\n    const yPosition = this.config.popup ? this.position.y : elRect.top;\n    let skipY = yPosition <= 0 && parentRect.top >= e.clientY || parentRect.bottom <= e.clientY && parentRect.bottom <= boundaryElRect.bottom;\n    if (skipY) {\n      return true;\n    }\n    if (isTop) {\n      skipY = // skip if we are moving to towards top and the cursor is\n      // below the top anchor + topBuffer\n      // note: topBuffer is used when moving the dialog using the title bar\n      diff < 0 && e.clientY > yPosition + parentRect.top + topBuffer || // skip if we are moving to the bottom and the cursor is\n      // above the top anchor\n      diff > 0 && e.clientY < yPosition + parentRect.top;\n    } else {\n      skipY = // skip if we are moving towards the top and the cursor\n      // is below the bottom anchor\n      diff < 0 && e.clientY > boundaryElRect.bottom || // skip if we are moving towards the bottom and the cursor\n      // is above the bottom anchor\n      diff > 0 && e.clientY < boundaryElRect.bottom;\n    }\n    return skipY;\n  }\n  createResizeMap() {\n    const eGui = this.element;\n    this.resizerMap = {\n      topLeft: { element: eGui.querySelector(\"[data-ref=eTopLeftResizer]\") },\n      top: { element: eGui.querySelector(\"[data-ref=eTopResizer]\") },\n      topRight: { element: eGui.querySelector(\"[data-ref=eTopRightResizer]\") },\n      right: { element: eGui.querySelector(\"[data-ref=eRightResizer]\") },\n      bottomRight: { element: eGui.querySelector(\"[data-ref=eBottomRightResizer]\") },\n      bottom: { element: eGui.querySelector(\"[data-ref=eBottomResizer]\") },\n      bottomLeft: { element: eGui.querySelector(\"[data-ref=eBottomLeftResizer]\") },\n      left: { element: eGui.querySelector(\"[data-ref=eLeftResizer]\") }\n    };\n  }\n  addResizers() {\n    if (this.resizersAdded) {\n      return;\n    }\n    const eGui = this.element;\n    if (!eGui) {\n      return;\n    }\n    const parser = new DOMParser();\n    const resizers = parser.parseFromString(RESIZE_TEMPLATE, \"text/html\").body;\n    eGui.appendChild(resizers.firstChild);\n    this.createResizeMap();\n    this.resizersAdded = true;\n  }\n  removeResizers() {\n    this.resizerMap = void 0;\n    const resizerEl = this.element.querySelector(`.${RESIZE_CONTAINER_STYLE}`);\n    if (resizerEl) {\n      this.element.removeChild(resizerEl);\n    }\n    this.resizersAdded = false;\n  }\n  getResizerElement(side) {\n    return this.resizerMap[side].element;\n  }\n  onResizeStart(e, side) {\n    this.boundaryEl = this.findBoundaryElement();\n    if (!this.positioned) {\n      this.initialisePosition();\n    }\n    this.currentResizer = {\n      isTop: !!side.match(/top/i),\n      isRight: !!side.match(/right/i),\n      isBottom: !!side.match(/bottom/i),\n      isLeft: !!side.match(/left/i)\n    };\n    this.element.classList.add(\"ag-resizing\");\n    this.resizerMap[side].element.classList.add(\"ag-active\");\n    const { popup, forcePopupParentAsOffsetParent } = this.config;\n    if (!popup && !forcePopupParentAsOffsetParent) {\n      this.applySizeToSiblings(this.currentResizer.isBottom || this.currentResizer.isTop);\n    }\n    this.isResizing = true;\n    this.updateDragStartPosition(e.clientX, e.clientY);\n  }\n  getSiblings() {\n    const element = this.element;\n    const parent = element.parentElement;\n    if (!parent) {\n      return null;\n    }\n    return Array.prototype.slice.call(parent.children).filter((el) => !el.classList.contains(\"ag-hidden\"));\n  }\n  getMinSizeOfSiblings() {\n    const siblings = this.getSiblings() || [];\n    let height = 0;\n    let width = 0;\n    for (let i = 0; i < siblings.length; i++) {\n      const currentEl = siblings[i];\n      const isFlex = !!currentEl.style.flex && currentEl.style.flex !== \"0 0 auto\";\n      if (currentEl === this.element) {\n        continue;\n      }\n      let nextHeight = this.minHeight || 0;\n      let nextWidth = this.minWidth || 0;\n      if (isFlex) {\n        const computedStyle = window.getComputedStyle(currentEl);\n        if (computedStyle.minHeight) {\n          nextHeight = parseInt(computedStyle.minHeight, 10);\n        }\n        if (computedStyle.minWidth) {\n          nextWidth = parseInt(computedStyle.minWidth, 10);\n        }\n      } else {\n        nextHeight = currentEl.offsetHeight;\n        nextWidth = currentEl.offsetWidth;\n      }\n      height += nextHeight;\n      width += nextWidth;\n    }\n    return { height, width };\n  }\n  applySizeToSiblings(vertical) {\n    let containerToFlex = null;\n    const siblings = this.getSiblings();\n    if (!siblings) {\n      return;\n    }\n    for (let i = 0; i < siblings.length; i++) {\n      const el = siblings[i];\n      if (el === containerToFlex) {\n        continue;\n      }\n      if (vertical) {\n        el.style.height = `${el.offsetHeight}px`;\n      } else {\n        el.style.width = `${el.offsetWidth}px`;\n      }\n      el.style.flex = \"0 0 auto\";\n      if (el === this.element) {\n        containerToFlex = siblings[i + 1];\n      }\n    }\n    if (containerToFlex) {\n      containerToFlex.style.removeProperty(\"height\");\n      containerToFlex.style.removeProperty(\"min-height\");\n      containerToFlex.style.removeProperty(\"max-height\");\n      containerToFlex.style.flex = \"1 1 auto\";\n    }\n  }\n  isResizable() {\n    return Object.values(this.resizable).some((value) => value);\n  }\n  onResize(e) {\n    if (!this.isResizing || !this.currentResizer) {\n      return;\n    }\n    const { popup, forcePopupParentAsOffsetParent } = this.config;\n    const { isTop, isRight, isBottom, isLeft } = this.currentResizer;\n    const isHorizontal = isRight || isLeft;\n    const isVertical = isBottom || isTop;\n    const { movementX, movementY } = this.calculateMouseMovement({ e, isLeft, isTop });\n    const xPosition = this.position.x;\n    const yPosition = this.position.y;\n    let offsetLeft = 0;\n    let offsetTop = 0;\n    if (isHorizontal && movementX) {\n      const direction = isLeft ? -1 : 1;\n      const oldWidth = this.getWidth();\n      const newWidth = oldWidth + movementX * direction;\n      let skipWidth = false;\n      if (isLeft) {\n        offsetLeft = oldWidth - newWidth;\n        if (xPosition + offsetLeft <= 0 || newWidth <= this.minWidth) {\n          skipWidth = true;\n          offsetLeft = 0;\n        }\n      }\n      if (!skipWidth) {\n        this.setWidth(newWidth);\n      }\n    }\n    if (isVertical && movementY) {\n      const direction = isTop ? -1 : 1;\n      const oldHeight = this.getHeight();\n      const newHeight = oldHeight + movementY * direction;\n      let skipHeight = false;\n      if (isTop) {\n        offsetTop = oldHeight - newHeight;\n        if (yPosition + offsetTop <= 0 || newHeight <= this.minHeight) {\n          skipHeight = true;\n          offsetTop = 0;\n        }\n      } else {\n        if (!this.config.popup && !this.config.forcePopupParentAsOffsetParent && oldHeight < newHeight && this.getMinSizeOfSiblings().height + newHeight > this.element.parentElement.offsetHeight) {\n          skipHeight = true;\n        }\n      }\n      if (!skipHeight) {\n        this.setHeight(newHeight);\n      }\n    }\n    this.updateDragStartPosition(e.clientX, e.clientY);\n    if ((popup || forcePopupParentAsOffsetParent) && offsetLeft || offsetTop) {\n      this.offsetElement(xPosition + offsetLeft, yPosition + offsetTop);\n    }\n  }\n  onResizeEnd(e, side) {\n    this.isResizing = false;\n    this.currentResizer = null;\n    this.boundaryEl = null;\n    this.element.classList.remove(\"ag-resizing\");\n    this.resizerMap[side].element.classList.remove(\"ag-active\");\n    this.dispatchLocalEvent({ type: \"resize\" });\n  }\n  refreshSize() {\n    const eGui = this.element;\n    if (this.config.popup) {\n      if (!this.config.width) {\n        this.setWidth(eGui.offsetWidth);\n      }\n      if (!this.config.height) {\n        this.setHeight(eGui.offsetHeight);\n      }\n    }\n  }\n  onMoveStart(e) {\n    this.boundaryEl = this.findBoundaryElement();\n    if (!this.positioned) {\n      this.initialisePosition();\n    }\n    this.isMoving = true;\n    this.element.classList.add(\"ag-moving\");\n    this.updateDragStartPosition(e.clientX, e.clientY);\n  }\n  onMove(e) {\n    if (!this.isMoving) {\n      return;\n    }\n    const { x, y } = this.position;\n    let topBuffer;\n    if (this.config.calculateTopBuffer) {\n      topBuffer = this.config.calculateTopBuffer();\n    }\n    const { movementX, movementY } = this.calculateMouseMovement({\n      e,\n      isTop: true,\n      anywhereWithin: true,\n      topBuffer\n    });\n    this.offsetElement(x + movementX, y + movementY);\n    this.updateDragStartPosition(e.clientX, e.clientY);\n  }\n  onMoveEnd() {\n    this.isMoving = false;\n    this.boundaryEl = null;\n    this.element.classList.remove(\"ag-moving\");\n  }\n  setOffsetParent() {\n    if (this.config.forcePopupParentAsOffsetParent) {\n      this.offsetParent = this.popupService.getPopupParent();\n    } else {\n      this.offsetParent = this.element.offsetParent;\n    }\n  }\n  findBoundaryElement() {\n    let el = this.element;\n    while (el) {\n      if (window.getComputedStyle(el).position !== \"static\") {\n        return el;\n      }\n      el = el.parentElement;\n    }\n    return this.element;\n  }\n  clearResizeListeners() {\n    while (this.resizeListeners.length) {\n      const params = this.resizeListeners.pop();\n      this.dragService.removeDragSource(params);\n    }\n  }\n  destroy() {\n    super.destroy();\n    if (this.moveElementDragListener) {\n      this.dragService.removeDragSource(this.moveElementDragListener);\n    }\n    this.constrainSizeToAvailableHeight(false);\n    this.clearResizeListeners();\n    this.removeResizers();\n  }\n};\n\n// community-modules/core/src/widgets/managedFocusFeature.ts\nvar _ManagedFocusFeature = class _ManagedFocusFeature extends BeanStub {\n  constructor(eFocusableElement, callbacks = {}) {\n    super();\n    this.eFocusableElement = eFocusableElement;\n    this.callbacks = callbacks;\n    this.callbacks = {\n      shouldStopEventPropagation: () => false,\n      onTabKeyDown: (e) => {\n        if (e.defaultPrevented) {\n          return;\n        }\n        const nextRoot = this.focusService.findNextFocusableElement(this.eFocusableElement, false, e.shiftKey);\n        if (!nextRoot) {\n          return;\n        }\n        nextRoot.focus();\n        e.preventDefault();\n      },\n      ...callbacks\n    };\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    this.eFocusableElement.classList.add(_ManagedFocusFeature.FOCUS_MANAGED_CLASS);\n    this.addKeyDownListeners(this.eFocusableElement);\n    if (this.callbacks.onFocusIn) {\n      this.addManagedElementListeners(this.eFocusableElement, { focusin: this.callbacks.onFocusIn });\n    }\n    if (this.callbacks.onFocusOut) {\n      this.addManagedElementListeners(this.eFocusableElement, { focusout: this.callbacks.onFocusOut });\n    }\n  }\n  addKeyDownListeners(eGui) {\n    this.addManagedElementListeners(eGui, {\n      keydown: (e) => {\n        if (e.defaultPrevented || _isStopPropagationForAgGrid(e)) {\n          return;\n        }\n        if (this.callbacks.shouldStopEventPropagation(e)) {\n          _stopPropagationForAgGrid(e);\n          return;\n        }\n        if (e.key === KeyCode.TAB) {\n          this.callbacks.onTabKeyDown(e);\n        } else if (this.callbacks.handleKeyDown) {\n          this.callbacks.handleKeyDown(e);\n        }\n      }\n    });\n  }\n};\n_ManagedFocusFeature.FOCUS_MANAGED_CLASS = \"ag-focus-managed\";\nvar ManagedFocusFeature = _ManagedFocusFeature;\n\n// community-modules/core/src/filter/filterLocaleText.ts\nvar FILTER_LOCALE_TEXT = {\n  applyFilter: \"Apply\",\n  clearFilter: \"Clear\",\n  resetFilter: \"Reset\",\n  cancelFilter: \"Cancel\",\n  textFilter: \"Text Filter\",\n  numberFilter: \"Number Filter\",\n  dateFilter: \"Date Filter\",\n  setFilter: \"Set Filter\",\n  filterOoo: \"Filter...\",\n  empty: \"Choose one\",\n  equals: \"Equals\",\n  notEqual: \"Does not equal\",\n  lessThan: \"Less than\",\n  greaterThan: \"Greater than\",\n  inRange: \"Between\",\n  inRangeStart: \"From\",\n  inRangeEnd: \"To\",\n  lessThanOrEqual: \"Less than or equal to\",\n  greaterThanOrEqual: \"Greater than or equal to\",\n  contains: \"Contains\",\n  notContains: \"Does not contain\",\n  startsWith: \"Begins with\",\n  endsWith: \"Ends with\",\n  blank: \"Blank\",\n  notBlank: \"Not blank\",\n  before: \"Before\",\n  after: \"After\",\n  andCondition: \"AND\",\n  orCondition: \"OR\",\n  dateFormatOoo: \"yyyy-mm-dd\"\n};\n\n// community-modules/core/src/filter/floating/provided/providedFilterUtils.ts\nfunction getDebounceMs(params, debounceDefault) {\n  if (isUseApplyButton(params)) {\n    if (params.debounceMs != null) {\n      _warnOnce(\"debounceMs is ignored when apply button is present\");\n    }\n    return 0;\n  }\n  return params.debounceMs != null ? params.debounceMs : debounceDefault;\n}\nfunction isUseApplyButton(params) {\n  return !!params.buttons && params.buttons.indexOf(\"apply\") >= 0;\n}\n\n// community-modules/core/src/filter/provided/providedFilter.ts\nvar ProvidedFilter = class extends Component {\n  constructor(filterNameKey) {\n    super();\n    this.filterNameKey = filterNameKey;\n    this.applyActive = false;\n    this.hidePopup = null;\n    this.debouncePending = false;\n    // after the user hits 'apply' the model gets copied to here. this is then the model that we use for\n    // all filtering. so if user changes UI but doesn't hit apply, then the UI will be out of sync with this model.\n    // this is what we want, as the UI should only become the 'active' filter once it's applied. when apply is\n    // inactive, this model will be in sync (following the debounce ms). if the UI is not a valid filter\n    // (eg the value is missing so nothing to filter on, or for set filter all checkboxes are checked so filter\n    // not active) then this appliedModel will be null/undefined.\n    this.appliedModel = null;\n    this.eFilterBody = RefPlaceholder;\n    this.buttonListeners = [];\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.resetTemplate();\n    this.createManagedBean(\n      new ManagedFocusFeature(this.getFocusableElement(), {\n        handleKeyDown: this.handleKeyDown.bind(this)\n      })\n    );\n    this.positionableFeature = new PositionableFeature(this.getPositionableElement(), {\n      forcePopupParentAsOffsetParent: true\n    });\n    this.createBean(this.positionableFeature);\n  }\n  // override\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  handleKeyDown(e) {\n  }\n  getFilterTitle() {\n    return this.translate(this.filterNameKey);\n  }\n  isFilterActive() {\n    return !!this.appliedModel;\n  }\n  resetTemplate(paramsMap) {\n    let eGui = this.getGui();\n    if (eGui) {\n      eGui.removeEventListener(\"submit\", this.onFormSubmit);\n    }\n    const templateString = (\n      /* html */\n      `\n            <form class=\"ag-filter-wrapper\">\n                <div class=\"ag-filter-body-wrapper ag-${this.getCssIdentifier()}-body-wrapper\" data-ref=\"eFilterBody\">\n                    ${this.createBodyTemplate()}\n                </div>\n            </form>`\n    );\n    this.setTemplate(templateString, this.getAgComponents(), paramsMap);\n    eGui = this.getGui();\n    if (eGui) {\n      eGui.addEventListener(\"submit\", this.onFormSubmit);\n    }\n  }\n  isReadOnly() {\n    return !!this.providedFilterParams.readOnly;\n  }\n  init(params) {\n    this.setParams(params);\n    this.resetUiToDefaults(true).then(() => {\n      this.updateUiVisibility();\n      this.setupOnBtApplyDebounce();\n    });\n  }\n  setParams(params) {\n    this.providedFilterParams = params;\n    this.applyActive = isUseApplyButton(params);\n    this.resetButtonsPanel(params);\n  }\n  updateParams(params) {\n    this.providedFilterParams = params;\n    this.applyActive = isUseApplyButton(params);\n    this.resetUiToActiveModel(this.getModel(), () => {\n      this.updateUiVisibility();\n      this.setupOnBtApplyDebounce();\n    });\n  }\n  resetButtonsPanel(newParams, oldParams) {\n    const { buttons: oldButtons, readOnly: oldReadOnly } = oldParams ?? {};\n    const { buttons, readOnly } = newParams;\n    if (oldReadOnly === readOnly && _jsonEquals(oldButtons, buttons)) {\n      return;\n    }\n    const hasButtons = buttons && buttons.length > 0 && !this.isReadOnly();\n    if (!this.eButtonsPanel) {\n      if (hasButtons) {\n        this.eButtonsPanel = document.createElement(\"div\");\n        this.eButtonsPanel.classList.add(\"ag-filter-apply-panel\");\n      }\n    } else {\n      _clearElement(this.eButtonsPanel);\n      this.buttonListeners.forEach((destroyFunc) => destroyFunc());\n      this.buttonListeners = [];\n    }\n    if (!hasButtons) {\n      if (this.eButtonsPanel) {\n        _removeFromParent(this.eButtonsPanel);\n      }\n      return;\n    }\n    const fragment = document.createDocumentFragment();\n    const addButton = (type) => {\n      let text;\n      let clickListener;\n      switch (type) {\n        case \"apply\":\n          text = this.translate(\"applyFilter\");\n          clickListener = (e) => this.onBtApply(false, false, e);\n          break;\n        case \"clear\":\n          text = this.translate(\"clearFilter\");\n          clickListener = () => this.onBtClear();\n          break;\n        case \"reset\":\n          text = this.translate(\"resetFilter\");\n          clickListener = () => this.onBtReset();\n          break;\n        case \"cancel\":\n          text = this.translate(\"cancelFilter\");\n          clickListener = (e) => {\n            this.onBtCancel(e);\n          };\n          break;\n        default:\n          _warnOnce(\"Unknown button type specified\");\n          return;\n      }\n      const buttonType = type === \"apply\" ? \"submit\" : \"button\";\n      const button = _loadTemplate(\n        /* html */\n        `<button\n                    type=\"${buttonType}\"\n                    data-ref=\"${type}FilterButton\"\n                    class=\"ag-button ag-standard-button ag-filter-apply-panel-button\"\n                >${text}\n                </button>`\n      );\n      this.buttonListeners.push(...this.addManagedElementListeners(button, { click: clickListener }));\n      fragment.append(button);\n    };\n    buttons.forEach((type) => addButton(type));\n    this.eButtonsPanel.append(fragment);\n    this.getGui().appendChild(this.eButtonsPanel);\n  }\n  // subclasses can override this to provide alternative debounce defaults\n  getDefaultDebounceMs() {\n    return 0;\n  }\n  setupOnBtApplyDebounce() {\n    const debounceMs = getDebounceMs(this.providedFilterParams, this.getDefaultDebounceMs());\n    const debounceFunc = _debounce(this.checkApplyDebounce.bind(this), debounceMs);\n    this.onBtApplyDebounce = () => {\n      this.debouncePending = true;\n      debounceFunc();\n    };\n  }\n  checkApplyDebounce() {\n    if (this.debouncePending) {\n      this.debouncePending = false;\n      this.onBtApply();\n    }\n  }\n  getModel() {\n    return this.appliedModel ? this.appliedModel : null;\n  }\n  setModel(model) {\n    const promise = model != null ? this.setModelIntoUi(model) : this.resetUiToDefaults();\n    return promise.then(() => {\n      this.updateUiVisibility();\n      this.applyModel(\"api\");\n    });\n  }\n  onBtCancel(e) {\n    this.resetUiToActiveModel(this.getModel(), () => {\n      this.handleCancelEnd(e);\n    });\n  }\n  handleCancelEnd(e) {\n    if (this.providedFilterParams.closeOnApply) {\n      this.close(e);\n    }\n  }\n  resetUiToActiveModel(currentModel, afterUiUpdatedFunc) {\n    const afterAppliedFunc = () => {\n      this.onUiChanged(false, \"prevent\");\n      afterUiUpdatedFunc?.();\n    };\n    if (currentModel != null) {\n      this.setModelIntoUi(currentModel).then(afterAppliedFunc);\n    } else {\n      this.resetUiToDefaults().then(afterAppliedFunc);\n    }\n  }\n  onBtClear() {\n    this.resetUiToDefaults().then(() => this.onUiChanged());\n  }\n  onBtReset() {\n    this.onBtClear();\n    this.onBtApply();\n  }\n  /**\n   * Applies changes made in the UI to the filter, and returns true if the model has changed.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  applyModel(source = \"api\") {\n    const newModel = this.getModelFromUi();\n    if (!this.isModelValid(newModel)) {\n      return false;\n    }\n    const previousModel = this.appliedModel;\n    this.appliedModel = newModel;\n    return !this.areModelsEqual(previousModel, newModel);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  isModelValid(model) {\n    return true;\n  }\n  onFormSubmit(e) {\n    e.preventDefault();\n  }\n  onBtApply(afterFloatingFilter = false, afterDataChange = false, e) {\n    if (e) {\n      e.preventDefault();\n    }\n    if (this.applyModel(afterDataChange ? \"rowDataUpdated\" : \"ui\")) {\n      const source = \"columnFilter\";\n      this.providedFilterParams.filterChangedCallback({ afterFloatingFilter, afterDataChange, source });\n    }\n    const { closeOnApply } = this.providedFilterParams;\n    if (closeOnApply && this.applyActive && !afterFloatingFilter && !afterDataChange) {\n      this.close(e);\n    }\n  }\n  onNewRowsLoaded() {\n  }\n  close(e) {\n    if (!this.hidePopup) {\n      return;\n    }\n    const keyboardEvent = e;\n    const key = keyboardEvent && keyboardEvent.key;\n    let params;\n    if (key === \"Enter\" || key === \"Space\") {\n      params = { keyboardEvent };\n    }\n    this.hidePopup(params);\n    this.hidePopup = null;\n  }\n  /**\n   * By default, if the change came from a floating filter it will be applied immediately, otherwise if there is no\n   * apply button it will be applied after a debounce, otherwise it will not be applied at all. This behaviour can\n   * be adjusted by using the apply parameter.\n   */\n  onUiChanged(fromFloatingFilter = false, apply) {\n    this.updateUiVisibility();\n    this.providedFilterParams.filterModifiedCallback();\n    if (this.applyActive && !this.isReadOnly()) {\n      const isValid = this.isModelValid(this.getModelFromUi());\n      const applyFilterButton = this.queryForHtmlElement(`[data-ref=\"applyFilterButton\"]`);\n      if (applyFilterButton) {\n        _setDisabled(applyFilterButton, !isValid);\n      }\n    }\n    if (fromFloatingFilter && !apply || apply === \"immediately\") {\n      this.onBtApply(fromFloatingFilter);\n    } else if (!this.applyActive && !apply || apply === \"debounce\") {\n      this.onBtApplyDebounce();\n    }\n  }\n  afterGuiAttached(params) {\n    if (params) {\n      this.hidePopup = params.hidePopup;\n    }\n    this.refreshFilterResizer(params?.container);\n  }\n  refreshFilterResizer(containerType) {\n    if (!this.positionableFeature || containerType === \"toolPanel\") {\n      return;\n    }\n    const isResizable = containerType === \"floatingFilter\" || containerType === \"columnFilter\";\n    const { positionableFeature, gos } = this;\n    if (isResizable) {\n      positionableFeature.restoreLastSize();\n      positionableFeature.setResizable(\n        gos.get(\"enableRtl\") ? { bottom: true, bottomLeft: true, left: true } : { bottom: true, bottomRight: true, right: true }\n      );\n    } else {\n      this.positionableFeature.removeSizeFromEl();\n      this.positionableFeature.setResizable(false);\n    }\n    this.positionableFeature.constrainSizeToAvailableHeight(true);\n  }\n  afterGuiDetached() {\n    this.checkApplyDebounce();\n    if (this.positionableFeature) {\n      this.positionableFeature.constrainSizeToAvailableHeight(false);\n    }\n  }\n  refresh(newParams) {\n    const oldParams = this.providedFilterParams;\n    this.providedFilterParams = newParams;\n    this.resetButtonsPanel(newParams, oldParams);\n    return true;\n  }\n  destroy() {\n    const eGui = this.getGui();\n    if (eGui) {\n      eGui.removeEventListener(\"submit\", this.onFormSubmit);\n    }\n    this.hidePopup = null;\n    if (this.positionableFeature) {\n      this.positionableFeature = this.destroyBean(this.positionableFeature);\n    }\n    this.appliedModel = null;\n    super.destroy();\n  }\n  translate(key) {\n    const translate = this.localeService.getLocaleTextFunc();\n    return translate(key, FILTER_LOCALE_TEXT[key]);\n  }\n  getCellValue(rowNode) {\n    return this.providedFilterParams.getValue(rowNode);\n  }\n  // override to control positionable feature\n  getPositionableElement() {\n    return this.eFilterBody;\n  }\n};\n\n// community-modules/core/src/widgets/agRadioButton.ts\nvar AgRadioButton = class extends AgCheckbox {\n  constructor(config) {\n    super(config, \"ag-radio-button\", \"radio\");\n  }\n  isSelected() {\n    return this.eInput.checked;\n  }\n  toggle() {\n    if (this.eInput.disabled) {\n      return;\n    }\n    if (!this.isSelected()) {\n      this.setValue(true);\n    }\n  }\n  addInputListeners() {\n    super.addInputListeners();\n    this.addManagedEventListeners({ checkboxChanged: this.onChange.bind(this) });\n  }\n  /**\n   * This ensures that if another radio button in the same named group is selected, we deselect this radio button.\n   * By default the browser does this for you, but we are managing classes ourselves in order to ensure input\n   * elements are styled correctly in IE11, and the DOM 'changed' event is only fired when a button is selected,\n   * not deselected, so we need to use our own event.\n   */\n  onChange(event) {\n    if (event.selected && event.name && this.eInput.name && this.eInput.name === event.name && event.id && this.eInput.id !== event.id) {\n      this.setValue(false, true);\n    }\n  }\n};\n\n// community-modules/core/src/widgets/agList.ts\nvar AgList = class extends Component {\n  constructor(cssIdentifier = \"default\", unFocusable = false) {\n    super(\n      /* html */\n      `<div class=\"ag-list ag-${cssIdentifier}-list\" role=\"listbox\"></div>`\n    );\n    this.cssIdentifier = cssIdentifier;\n    this.unFocusable = unFocusable;\n    this.activeClass = \"ag-active-item\";\n    this.options = [];\n    this.itemEls = [];\n  }\n  postConstruct() {\n    const eGui = this.getGui();\n    this.addManagedElementListeners(eGui, { mouseleave: () => this.clearHighlighted() });\n    if (this.unFocusable) {\n      return;\n    }\n    this.addManagedElementListeners(eGui, { keydown: this.handleKeyDown.bind(this) });\n  }\n  handleKeyDown(e) {\n    const key = e.key;\n    switch (key) {\n      case KeyCode.ENTER:\n        if (!this.highlightedEl) {\n          this.setValue(this.getValue());\n        } else {\n          const pos = this.itemEls.indexOf(this.highlightedEl);\n          this.setValueByIndex(pos);\n        }\n        break;\n      case KeyCode.DOWN:\n      case KeyCode.UP:\n        e.preventDefault();\n        this.navigate(key);\n        break;\n      case KeyCode.PAGE_DOWN:\n      case KeyCode.PAGE_UP:\n      case KeyCode.PAGE_HOME:\n      case KeyCode.PAGE_END:\n        e.preventDefault();\n        this.navigateToPage(key);\n        break;\n    }\n  }\n  navigate(key) {\n    const isDown = key === KeyCode.DOWN;\n    let itemToHighlight;\n    if (!this.highlightedEl) {\n      itemToHighlight = this.itemEls[isDown ? 0 : this.itemEls.length - 1];\n    } else {\n      const currentIdx = this.itemEls.indexOf(this.highlightedEl);\n      let nextPos = currentIdx + (isDown ? 1 : -1);\n      nextPos = Math.min(Math.max(nextPos, 0), this.itemEls.length - 1);\n      itemToHighlight = this.itemEls[nextPos];\n    }\n    this.highlightItem(itemToHighlight);\n  }\n  navigateToPage(key) {\n    if (!this.highlightedEl || this.itemEls.length === 0) {\n      return;\n    }\n    const currentIdx = this.itemEls.indexOf(this.highlightedEl);\n    const rowCount = this.options.length - 1;\n    const itemHeight = this.itemEls[0].clientHeight;\n    const pageSize = Math.floor(this.getGui().clientHeight / itemHeight);\n    let newIndex = -1;\n    if (key === KeyCode.PAGE_HOME) {\n      newIndex = 0;\n    } else if (key === KeyCode.PAGE_END) {\n      newIndex = rowCount;\n    } else if (key === KeyCode.PAGE_DOWN) {\n      newIndex = Math.min(currentIdx + pageSize, rowCount);\n    } else if (key === KeyCode.PAGE_UP) {\n      newIndex = Math.max(currentIdx - pageSize, 0);\n    }\n    if (newIndex === -1) {\n      return;\n    }\n    this.highlightItem(this.itemEls[newIndex]);\n  }\n  addOptions(listOptions) {\n    listOptions.forEach((listOption) => this.addOption(listOption));\n    return this;\n  }\n  addOption(listOption) {\n    const { value, text } = listOption;\n    const valueToRender = text || value;\n    this.options.push({ value, text: valueToRender });\n    this.renderOption(value, valueToRender);\n    this.updateIndices();\n    return this;\n  }\n  clearOptions() {\n    this.options = [];\n    this.reset(true);\n    this.itemEls.forEach((itemEl) => {\n      _removeFromParent(itemEl);\n    });\n    this.itemEls = [];\n  }\n  updateIndices() {\n    const options = this.getGui().querySelectorAll(\".ag-list-item\");\n    options.forEach((option, idx) => {\n      _setAriaPosInSet(option, idx + 1);\n      _setAriaSetSize(option, options.length);\n    });\n  }\n  renderOption(value, text) {\n    const eDocument = _getDocument(this.gos);\n    const itemEl = eDocument.createElement(\"div\");\n    _setAriaRole(itemEl, \"option\");\n    itemEl.classList.add(\"ag-list-item\", `ag-${this.cssIdentifier}-list-item`);\n    const span = eDocument.createElement(\"span\");\n    itemEl.appendChild(span);\n    span.textContent = text;\n    if (!this.unFocusable) {\n      itemEl.tabIndex = -1;\n    }\n    this.itemEls.push(itemEl);\n    this.addManagedListeners(itemEl, {\n      mouseover: () => this.highlightItem(itemEl),\n      mousedown: (e) => {\n        e.preventDefault();\n        e.stopPropagation();\n        this.setValue(value);\n      }\n    });\n    this.createManagedBean(\n      new TooltipFeature({\n        getTooltipValue: () => text,\n        getGui: () => itemEl,\n        getLocation: () => \"UNKNOWN\",\n        // only show tooltips for items where the text cannot be fully displayed\n        shouldDisplayTooltip: () => span.scrollWidth > span.clientWidth\n      })\n    );\n    this.getGui().appendChild(itemEl);\n  }\n  setValue(value, silent) {\n    if (this.value === value) {\n      this.fireItemSelected();\n      return this;\n    }\n    if (value == null) {\n      this.reset(silent);\n      return this;\n    }\n    const idx = this.options.findIndex((option) => option.value === value);\n    if (idx !== -1) {\n      const option = this.options[idx];\n      this.value = option.value;\n      this.displayValue = option.text;\n      this.highlightItem(this.itemEls[idx]);\n      if (!silent) {\n        this.fireChangeEvent();\n      }\n    }\n    return this;\n  }\n  setValueByIndex(idx) {\n    return this.setValue(this.options[idx].value);\n  }\n  getValue() {\n    return this.value;\n  }\n  getDisplayValue() {\n    return this.displayValue;\n  }\n  refreshHighlighted() {\n    this.clearHighlighted();\n    const idx = this.options.findIndex((option) => option.value === this.value);\n    if (idx !== -1) {\n      this.highlightItem(this.itemEls[idx]);\n    }\n  }\n  reset(silent) {\n    this.value = null;\n    this.displayValue = null;\n    this.clearHighlighted();\n    if (!silent) {\n      this.fireChangeEvent();\n    }\n  }\n  highlightItem(el) {\n    if (!_isVisible(el)) {\n      return;\n    }\n    this.clearHighlighted();\n    this.highlightedEl = el;\n    this.highlightedEl.classList.add(this.activeClass);\n    _setAriaSelected(this.highlightedEl, true);\n    const eGui = this.getGui();\n    const { scrollTop, clientHeight } = eGui;\n    const { offsetTop, offsetHeight } = el;\n    if (offsetTop + offsetHeight > scrollTop + clientHeight || offsetTop < scrollTop) {\n      this.highlightedEl.scrollIntoView({ block: \"nearest\" });\n    }\n    if (!this.unFocusable) {\n      this.highlightedEl.focus();\n    }\n  }\n  clearHighlighted() {\n    if (!this.highlightedEl || !_isVisible(this.highlightedEl)) {\n      return;\n    }\n    this.highlightedEl.classList.remove(this.activeClass);\n    _setAriaSelected(this.highlightedEl, false);\n    this.highlightedEl = null;\n  }\n  fireChangeEvent() {\n    this.dispatchLocalEvent({ type: \"fieldValueChanged\" });\n    this.fireItemSelected();\n  }\n  fireItemSelected() {\n    this.dispatchLocalEvent({ type: \"selectedItem\" });\n  }\n};\n\n// community-modules/core/src/widgets/agPickerField.ts\nvar AgPickerField = class extends AgAbstractField {\n  constructor(config) {\n    super(\n      config,\n      config?.template || /* html */\n      `\n            <div class=\"ag-picker-field\" role=\"presentation\">\n                <div data-ref=\"eLabel\"></div>\n                <div data-ref=\"eWrapper\" class=\"ag-wrapper ag-picker-field-wrapper ag-picker-collapsed\">\n                    <div data-ref=\"eDisplayField\" class=\"ag-picker-field-display\"></div>\n                    <div data-ref=\"eIcon\" class=\"ag-picker-field-icon\" aria-hidden=\"true\"></div>\n                </div>\n            </div>`,\n      config?.agComponents || [],\n      config?.className\n    );\n    this.isPickerDisplayed = false;\n    this.skipClick = false;\n    this.pickerGap = 4;\n    this.hideCurrentPicker = null;\n    this.eLabel = RefPlaceholder;\n    this.eWrapper = RefPlaceholder;\n    this.eDisplayField = RefPlaceholder;\n    this.eIcon = RefPlaceholder;\n    this.ariaRole = config?.ariaRole;\n    this.onPickerFocusIn = this.onPickerFocusIn.bind(this);\n    this.onPickerFocusOut = this.onPickerFocusOut.bind(this);\n    if (!config) {\n      return;\n    }\n    const { pickerGap, maxPickerHeight, variableWidth, minPickerWidth, maxPickerWidth } = config;\n    if (pickerGap != null) {\n      this.pickerGap = pickerGap;\n    }\n    this.variableWidth = !!variableWidth;\n    if (maxPickerHeight != null) {\n      this.setPickerMaxHeight(maxPickerHeight);\n    }\n    if (minPickerWidth != null) {\n      this.setPickerMinWidth(minPickerWidth);\n    }\n    if (maxPickerWidth != null) {\n      this.setPickerMaxWidth(maxPickerWidth);\n    }\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.setupAria();\n    const displayId = `ag-${this.getCompId()}-display`;\n    this.eDisplayField.setAttribute(\"id\", displayId);\n    const ariaEl = this.getAriaElement();\n    this.addManagedElementListeners(ariaEl, { keydown: this.onKeyDown.bind(this) });\n    this.addManagedElementListeners(this.eLabel, { mousedown: this.onLabelOrWrapperMouseDown.bind(this) });\n    this.addManagedElementListeners(this.eWrapper, { mousedown: this.onLabelOrWrapperMouseDown.bind(this) });\n    const { pickerIcon, inputWidth } = this.config;\n    if (pickerIcon) {\n      const icon = _createIconNoSpan(pickerIcon, this.gos);\n      if (icon) {\n        this.eIcon.appendChild(icon);\n      }\n    }\n    if (inputWidth != null) {\n      this.setInputWidth(inputWidth);\n    }\n  }\n  setupAria() {\n    const ariaEl = this.getAriaElement();\n    ariaEl.setAttribute(\"tabindex\", this.gos.get(\"tabIndex\").toString());\n    _setAriaExpanded(ariaEl, false);\n    if (this.ariaRole) {\n      _setAriaRole(ariaEl, this.ariaRole);\n    }\n  }\n  onLabelOrWrapperMouseDown(e) {\n    if (e) {\n      const focusableEl = this.getFocusableElement();\n      if (focusableEl !== this.eWrapper && e?.target === focusableEl) {\n        return;\n      }\n      e.preventDefault();\n      this.getFocusableElement().focus();\n    }\n    if (this.skipClick) {\n      this.skipClick = false;\n      return;\n    }\n    if (this.isDisabled()) {\n      return;\n    }\n    if (this.isPickerDisplayed) {\n      this.hidePicker();\n    } else {\n      this.showPicker();\n    }\n  }\n  onKeyDown(e) {\n    switch (e.key) {\n      case KeyCode.UP:\n      case KeyCode.DOWN:\n      case KeyCode.ENTER:\n      case KeyCode.SPACE:\n        e.preventDefault();\n        this.onLabelOrWrapperMouseDown();\n        break;\n      case KeyCode.ESCAPE:\n        if (this.isPickerDisplayed) {\n          e.preventDefault();\n          e.stopPropagation();\n          if (this.hideCurrentPicker) {\n            this.hideCurrentPicker();\n          }\n        }\n        break;\n    }\n  }\n  showPicker() {\n    this.isPickerDisplayed = true;\n    if (!this.pickerComponent) {\n      this.pickerComponent = this.createPickerComponent();\n    }\n    const pickerGui = this.pickerComponent.getGui();\n    pickerGui.addEventListener(\"focusin\", this.onPickerFocusIn);\n    pickerGui.addEventListener(\"focusout\", this.onPickerFocusOut);\n    this.hideCurrentPicker = this.renderAndPositionPicker();\n    this.toggleExpandedStyles(true);\n  }\n  renderAndPositionPicker() {\n    const ePicker = this.pickerComponent.getGui();\n    if (!this.gos.get(\"suppressScrollWhenPopupsAreOpen\")) {\n      [this.destroyMouseWheelFunc] = this.addManagedEventListeners({\n        bodyScroll: () => {\n          this.hidePicker();\n        }\n      });\n    }\n    const translate = this.localeService.getLocaleTextFunc();\n    const { pickerAriaLabelKey, pickerAriaLabelValue, modalPicker = true } = this.config;\n    const popupParams = {\n      modal: modalPicker,\n      eChild: ePicker,\n      closeOnEsc: true,\n      closedCallback: () => {\n        const shouldRestoreFocus = _isNothingFocused(this.gos);\n        this.beforeHidePicker();\n        if (shouldRestoreFocus && this.isAlive()) {\n          this.getFocusableElement().focus();\n        }\n      },\n      ariaLabel: translate(pickerAriaLabelKey, pickerAriaLabelValue),\n      anchorToElement: this.eWrapper\n    };\n    ePicker.style.position = \"absolute\";\n    const addPopupRes = this.popupService.addPopup(popupParams);\n    const { maxPickerHeight, minPickerWidth, maxPickerWidth, variableWidth } = this;\n    if (variableWidth) {\n      if (minPickerWidth) {\n        ePicker.style.minWidth = minPickerWidth;\n      }\n      ePicker.style.width = _formatSize(_getAbsoluteWidth(this.eWrapper));\n      if (maxPickerWidth) {\n        ePicker.style.maxWidth = maxPickerWidth;\n      }\n    } else {\n      _setElementWidth(ePicker, maxPickerWidth ?? _getAbsoluteWidth(this.eWrapper));\n    }\n    const maxHeight = maxPickerHeight ?? `${_getInnerHeight(this.popupService.getPopupParent())}px`;\n    ePicker.style.setProperty(\"max-height\", maxHeight);\n    this.alignPickerToComponent();\n    return addPopupRes.hideFunc;\n  }\n  alignPickerToComponent() {\n    if (!this.pickerComponent) {\n      return;\n    }\n    const { pickerType } = this.config;\n    const { pickerGap } = this;\n    const alignSide = this.gos.get(\"enableRtl\") ? \"right\" : \"left\";\n    this.popupService.positionPopupByComponent({\n      type: pickerType,\n      eventSource: this.eWrapper,\n      ePopup: this.pickerComponent.getGui(),\n      position: \"under\",\n      alignSide,\n      keepWithinBounds: true,\n      nudgeY: pickerGap\n    });\n  }\n  beforeHidePicker() {\n    if (this.destroyMouseWheelFunc) {\n      this.destroyMouseWheelFunc();\n      this.destroyMouseWheelFunc = void 0;\n    }\n    this.toggleExpandedStyles(false);\n    const pickerGui = this.pickerComponent.getGui();\n    pickerGui.removeEventListener(\"focusin\", this.onPickerFocusIn);\n    pickerGui.removeEventListener(\"focusout\", this.onPickerFocusOut);\n    this.isPickerDisplayed = false;\n    this.pickerComponent = void 0;\n    this.hideCurrentPicker = null;\n  }\n  toggleExpandedStyles(expanded) {\n    if (!this.isAlive()) {\n      return;\n    }\n    const ariaEl = this.getAriaElement();\n    _setAriaExpanded(ariaEl, expanded);\n    this.eWrapper.classList.toggle(\"ag-picker-expanded\", expanded);\n    this.eWrapper.classList.toggle(\"ag-picker-collapsed\", !expanded);\n  }\n  onPickerFocusIn() {\n    this.togglePickerHasFocus(true);\n  }\n  onPickerFocusOut(e) {\n    if (!this.pickerComponent?.getGui().contains(e.relatedTarget)) {\n      this.togglePickerHasFocus(false);\n    }\n  }\n  togglePickerHasFocus(focused) {\n    if (!this.pickerComponent) {\n      return;\n    }\n    this.eWrapper.classList.toggle(\"ag-picker-has-focus\", focused);\n  }\n  hidePicker() {\n    if (this.hideCurrentPicker) {\n      this.hideCurrentPicker();\n    }\n  }\n  setInputWidth(width) {\n    _setElementWidth(this.eWrapper, width);\n    return this;\n  }\n  getFocusableElement() {\n    return this.eWrapper;\n  }\n  setPickerGap(gap) {\n    this.pickerGap = gap;\n    return this;\n  }\n  setPickerMinWidth(width) {\n    if (typeof width === \"number\") {\n      width = `${width}px`;\n    }\n    this.minPickerWidth = width == null ? void 0 : width;\n    return this;\n  }\n  setPickerMaxWidth(width) {\n    if (typeof width === \"number\") {\n      width = `${width}px`;\n    }\n    this.maxPickerWidth = width == null ? void 0 : width;\n    return this;\n  }\n  setPickerMaxHeight(height) {\n    if (typeof height === \"number\") {\n      height = `${height}px`;\n    }\n    this.maxPickerHeight = height == null ? void 0 : height;\n    return this;\n  }\n  destroy() {\n    this.hidePicker();\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/widgets/agSelect.ts\nvar AgSelect = class extends AgPickerField {\n  constructor(config) {\n    super({\n      pickerAriaLabelKey: \"ariaLabelSelectField\",\n      pickerAriaLabelValue: \"Select Field\",\n      pickerType: \"ag-list\",\n      className: \"ag-select\",\n      pickerIcon: \"smallDown\",\n      ariaRole: \"combobox\",\n      ...config\n    });\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.createListComponent();\n    this.eWrapper.tabIndex = this.gos.get(\"tabIndex\");\n    const { options, value, placeholder } = this.config;\n    if (options != null) {\n      this.addOptions(options);\n    }\n    if (value != null) {\n      this.setValue(value, true);\n    }\n    if (placeholder && value == null) {\n      this.eDisplayField.textContent = placeholder;\n    }\n    this.addManagedElementListeners(this.eWrapper, { focusout: this.onWrapperFocusOut.bind(this) });\n  }\n  onWrapperFocusOut(e) {\n    if (!this.eWrapper.contains(e.relatedTarget)) {\n      this.hidePicker();\n    }\n  }\n  createListComponent() {\n    this.listComponent = this.createBean(new AgList(\"select\", true));\n    this.listComponent.setParentComponent(this);\n    const eListAriaEl = this.listComponent.getAriaElement();\n    const listId = `ag-select-list-${this.listComponent.getCompId()}`;\n    eListAriaEl.setAttribute(\"id\", listId);\n    _setAriaControls(this.getAriaElement(), eListAriaEl);\n    this.listComponent.addManagedListeners(this.listComponent, {\n      selectedItem: () => {\n        this.hidePicker();\n        this.dispatchLocalEvent({ type: \"selectedItem\" });\n      }\n    });\n    this.listComponent.addManagedListeners(this.listComponent, {\n      fieldValueChanged: () => {\n        if (!this.listComponent) {\n          return;\n        }\n        this.setValue(this.listComponent.getValue(), false, true);\n        this.hidePicker();\n      }\n    });\n  }\n  createPickerComponent() {\n    return this.listComponent;\n  }\n  onKeyDown(e) {\n    const { key } = e;\n    if (key === KeyCode.TAB) {\n      this.hidePicker();\n    }\n    switch (key) {\n      case KeyCode.ENTER:\n      case KeyCode.UP:\n      case KeyCode.DOWN:\n      case KeyCode.PAGE_UP:\n      case KeyCode.PAGE_DOWN:\n      case KeyCode.PAGE_HOME:\n      case KeyCode.PAGE_END:\n        e.preventDefault();\n        if (this.isPickerDisplayed) {\n          this.listComponent?.handleKeyDown(e);\n        } else {\n          super.onKeyDown(e);\n        }\n        break;\n      case KeyCode.ESCAPE:\n        super.onKeyDown(e);\n        break;\n      case KeyCode.SPACE:\n        if (this.isPickerDisplayed) {\n          e.preventDefault();\n        } else {\n          super.onKeyDown(e);\n        }\n        break;\n    }\n  }\n  showPicker() {\n    if (!this.listComponent) {\n      return;\n    }\n    super.showPicker();\n    this.listComponent.refreshHighlighted();\n  }\n  addOptions(options) {\n    options.forEach((option) => this.addOption(option));\n    return this;\n  }\n  addOption(option) {\n    this.listComponent.addOption(option);\n    return this;\n  }\n  clearOptions() {\n    this.listComponent?.clearOptions();\n    return this;\n  }\n  setValue(value, silent, fromPicker) {\n    if (this.value === value || !this.listComponent) {\n      return this;\n    }\n    if (!fromPicker) {\n      this.listComponent.setValue(value, true);\n    }\n    const newValue = this.listComponent.getValue();\n    if (newValue === this.getValue()) {\n      return this;\n    }\n    let displayValue = this.listComponent.getDisplayValue();\n    if (displayValue == null && this.config.placeholder) {\n      displayValue = this.config.placeholder;\n    }\n    this.eDisplayField.textContent = displayValue;\n    this.setTooltip({\n      newTooltipText: displayValue ?? null,\n      shouldDisplayTooltip: () => this.eDisplayField.scrollWidth > this.eDisplayField.clientWidth\n    });\n    return super.setValue(value, silent);\n  }\n  destroy() {\n    if (this.listComponent) {\n      this.listComponent = this.destroyBean(this.listComponent);\n    }\n    super.destroy();\n  }\n};\nvar AgSelectSelector = {\n  selector: \"AG-SELECT\",\n  component: AgSelect\n};\n\n// community-modules/core/src/filter/provided/optionsFactory.ts\nvar OptionsFactory = class {\n  constructor() {\n    this.customFilterOptions = {};\n  }\n  init(params, defaultOptions) {\n    this.filterOptions = params.filterOptions || defaultOptions;\n    this.mapCustomOptions();\n    this.selectDefaultItem(params);\n  }\n  getFilterOptions() {\n    return this.filterOptions;\n  }\n  mapCustomOptions() {\n    if (!this.filterOptions) {\n      return;\n    }\n    this.filterOptions.forEach((filterOption) => {\n      if (typeof filterOption === \"string\") {\n        return;\n      }\n      const requiredProperties = [[\"displayKey\"], [\"displayName\"], [\"predicate\", \"test\"]];\n      const propertyCheck = (keys) => {\n        if (!keys.some((key) => filterOption[key] != null)) {\n          _warnOnce(`ignoring FilterOptionDef as it doesn't contain one of '${keys}'`);\n          return false;\n        }\n        return true;\n      };\n      if (!requiredProperties.every(propertyCheck)) {\n        this.filterOptions = this.filterOptions.filter((v) => v === filterOption) || [];\n        return;\n      }\n      this.customFilterOptions[filterOption.displayKey] = filterOption;\n    });\n  }\n  selectDefaultItem(params) {\n    if (params.defaultOption) {\n      this.defaultOption = params.defaultOption;\n    } else if (this.filterOptions.length >= 1) {\n      const firstFilterOption = this.filterOptions[0];\n      if (typeof firstFilterOption === \"string\") {\n        this.defaultOption = firstFilterOption;\n      } else if (firstFilterOption.displayKey) {\n        this.defaultOption = firstFilterOption.displayKey;\n      } else {\n        _warnOnce(`invalid FilterOptionDef supplied as it doesn't contain a 'displayKey'`);\n      }\n    } else {\n      _warnOnce(\"no filter options for filter\");\n    }\n  }\n  getDefaultOption() {\n    return this.defaultOption;\n  }\n  getCustomOption(name) {\n    return this.customFilterOptions[name];\n  }\n};\n\n// community-modules/core/src/filter/provided/simpleFilter.ts\nvar SimpleFilter = class extends ProvidedFilter {\n  constructor() {\n    super(...arguments);\n    this.eTypes = [];\n    this.eJoinOperatorPanels = [];\n    this.eJoinOperatorsAnd = [];\n    this.eJoinOperatorsOr = [];\n    this.eConditionBodies = [];\n    this.listener = () => this.onUiChanged();\n    this.lastUiCompletePosition = null;\n    this.joinOperatorId = 0;\n  }\n  getNumberOfInputs(type) {\n    const customOpts = this.optionsFactory.getCustomOption(type);\n    if (customOpts) {\n      const { numberOfInputs } = customOpts;\n      return numberOfInputs != null ? numberOfInputs : 1;\n    }\n    const zeroInputTypes = [\"empty\", \"notBlank\", \"blank\"];\n    if (type && zeroInputTypes.indexOf(type) >= 0) {\n      return 0;\n    } else if (type === \"inRange\") {\n      return 2;\n    }\n    return 1;\n  }\n  // floating filter calls this when user applies filter from floating filter\n  onFloatingFilterChanged(type, value) {\n    this.setTypeFromFloatingFilter(type);\n    this.setValueFromFloatingFilter(value);\n    this.onUiChanged(true);\n  }\n  setTypeFromFloatingFilter(type) {\n    this.eTypes.forEach((eType, position) => {\n      if (position === 0) {\n        eType.setValue(type, true);\n      } else {\n        eType.setValue(this.optionsFactory.getDefaultOption(), true);\n      }\n    });\n  }\n  getModelFromUi() {\n    const conditions = this.getUiCompleteConditions();\n    if (conditions.length === 0) {\n      return null;\n    }\n    if (this.maxNumConditions > 1 && conditions.length > 1) {\n      return {\n        filterType: this.getFilterType(),\n        operator: this.getJoinOperator(),\n        conditions\n      };\n    }\n    return conditions[0];\n  }\n  getConditionTypes() {\n    return this.eTypes.map((eType) => eType.getValue());\n  }\n  getConditionType(position) {\n    return this.eTypes[position].getValue();\n  }\n  getJoinOperator() {\n    if (this.eJoinOperatorsOr.length === 0) {\n      return this.defaultJoinOperator;\n    }\n    return this.eJoinOperatorsOr[0].getValue() === true ? \"OR\" : \"AND\";\n  }\n  areModelsEqual(a, b) {\n    if (!a && !b) {\n      return true;\n    }\n    if (!a && b || a && !b) {\n      return false;\n    }\n    const aIsSimple = !a.operator;\n    const bIsSimple = !b.operator;\n    const oneSimpleOneCombined = !aIsSimple && bIsSimple || aIsSimple && !bIsSimple;\n    if (oneSimpleOneCombined) {\n      return false;\n    }\n    let res;\n    if (aIsSimple) {\n      const aSimple = a;\n      const bSimple = b;\n      res = this.areSimpleModelsEqual(aSimple, bSimple);\n    } else {\n      const aCombined = a;\n      const bCombined = b;\n      res = aCombined.operator === bCombined.operator && _areEqual(\n        aCombined.conditions,\n        bCombined.conditions,\n        (aModel, bModel) => this.areSimpleModelsEqual(aModel, bModel)\n      );\n    }\n    return res;\n  }\n  shouldRefresh(newParams) {\n    const model = this.getModel();\n    const conditions = model ? model.conditions ?? [model] : null;\n    const newOptionsList = newParams.filterOptions?.map((option) => typeof option === \"string\" ? option : option.displayKey) ?? this.getDefaultFilterOptions();\n    const allConditionsExistInNewOptionsList = !conditions || conditions.every((condition) => newOptionsList.find((option) => option === condition.type) !== void 0);\n    if (!allConditionsExistInNewOptionsList) {\n      return false;\n    }\n    if (typeof newParams.maxNumConditions === \"number\" && conditions && conditions.length > newParams.maxNumConditions) {\n      return false;\n    }\n    return true;\n  }\n  refresh(newParams) {\n    if (!this.shouldRefresh(newParams)) {\n      return false;\n    }\n    const parentRefreshed = super.refresh(newParams);\n    if (!parentRefreshed) {\n      return false;\n    }\n    this.setParams(newParams);\n    this.removeConditionsAndOperators(0);\n    this.createOption();\n    this.setModel(this.getModel());\n    return true;\n  }\n  setModelIntoUi(model) {\n    const isCombined = model.operator;\n    if (isCombined) {\n      const combinedModel = model;\n      let conditions = combinedModel.conditions;\n      if (conditions == null) {\n        conditions = [];\n        _warnOnce(`Filter model is missing 'conditions'`);\n      }\n      const numConditions = this.validateAndUpdateConditions(conditions);\n      const numPrevConditions = this.getNumConditions();\n      if (numConditions < numPrevConditions) {\n        this.removeConditionsAndOperators(numConditions);\n      } else if (numConditions > numPrevConditions) {\n        for (let i = numPrevConditions; i < numConditions; i++) {\n          this.createJoinOperatorPanel();\n          this.createOption();\n        }\n      }\n      const orChecked = combinedModel.operator === \"OR\";\n      this.eJoinOperatorsAnd.forEach((eJoinOperatorAnd) => eJoinOperatorAnd.setValue(!orChecked, true));\n      this.eJoinOperatorsOr.forEach((eJoinOperatorOr) => eJoinOperatorOr.setValue(orChecked, true));\n      conditions.forEach((condition, position) => {\n        this.eTypes[position].setValue(condition.type, true);\n        this.setConditionIntoUi(condition, position);\n      });\n    } else {\n      const simpleModel = model;\n      if (this.getNumConditions() > 1) {\n        this.removeConditionsAndOperators(1);\n      }\n      this.eTypes[0].setValue(simpleModel.type, true);\n      this.setConditionIntoUi(simpleModel, 0);\n    }\n    this.lastUiCompletePosition = this.getNumConditions() - 1;\n    this.createMissingConditionsAndOperators();\n    this.onUiChanged();\n    return AgPromise.resolve();\n  }\n  validateAndUpdateConditions(conditions) {\n    let numConditions = conditions.length;\n    if (numConditions > this.maxNumConditions) {\n      conditions.splice(this.maxNumConditions);\n      _warnOnce(\n        'Filter Model contains more conditions than \"filterParams.maxNumConditions\". Additional conditions have been ignored.'\n      );\n      numConditions = this.maxNumConditions;\n    }\n    return numConditions;\n  }\n  doesFilterPass(params) {\n    const model = this.getModel();\n    if (model == null) {\n      return true;\n    }\n    const { operator } = model;\n    const models = [];\n    if (operator) {\n      const combinedModel = model;\n      models.push(...combinedModel.conditions ?? []);\n    } else {\n      models.push(model);\n    }\n    const combineFunction = operator && operator === \"OR\" ? \"some\" : \"every\";\n    return models[combineFunction]((m) => this.individualConditionPasses(params, m));\n  }\n  setParams(params) {\n    super.setParams(params);\n    this.setNumConditions(params);\n    this.defaultJoinOperator = this.getDefaultJoinOperator(params.defaultJoinOperator);\n    this.filterPlaceholder = params.filterPlaceholder;\n    this.optionsFactory = new OptionsFactory();\n    this.optionsFactory.init(params, this.getDefaultFilterOptions());\n    this.createFilterListOptions();\n    this.createOption();\n    this.createMissingConditionsAndOperators();\n    if (this.isReadOnly()) {\n      this.eFilterBody.setAttribute(\"tabindex\", \"-1\");\n    }\n  }\n  setNumConditions(params) {\n    this.maxNumConditions = params.maxNumConditions ?? 2;\n    if (this.maxNumConditions < 1) {\n      _warnOnce('\"filterParams.maxNumConditions\" must be greater than or equal to zero.');\n      this.maxNumConditions = 1;\n    }\n    this.numAlwaysVisibleConditions = params.numAlwaysVisibleConditions ?? 1;\n    if (this.numAlwaysVisibleConditions < 1) {\n      _warnOnce('\"filterParams.numAlwaysVisibleConditions\" must be greater than or equal to zero.');\n      this.numAlwaysVisibleConditions = 1;\n    }\n    if (this.numAlwaysVisibleConditions > this.maxNumConditions) {\n      _warnOnce(\n        '\"filterParams.numAlwaysVisibleConditions\" cannot be greater than \"filterParams.maxNumConditions\".'\n      );\n      this.numAlwaysVisibleConditions = this.maxNumConditions;\n    }\n  }\n  createOption() {\n    const eType = this.createManagedBean(new AgSelect());\n    this.eTypes.push(eType);\n    eType.addCssClass(\"ag-filter-select\");\n    this.eFilterBody.appendChild(eType.getGui());\n    const eConditionBody = this.createValueElement();\n    this.eConditionBodies.push(eConditionBody);\n    this.eFilterBody.appendChild(eConditionBody);\n    this.putOptionsIntoDropdown(eType);\n    this.resetType(eType);\n    const position = this.getNumConditions() - 1;\n    this.forEachPositionInput(position, (element) => this.resetInput(element));\n    this.addChangedListeners(eType, position);\n  }\n  createJoinOperatorPanel() {\n    const eJoinOperatorPanel = document.createElement(\"div\");\n    this.eJoinOperatorPanels.push(eJoinOperatorPanel);\n    eJoinOperatorPanel.classList.add(\"ag-filter-condition\");\n    const eJoinOperatorAnd = this.createJoinOperator(this.eJoinOperatorsAnd, eJoinOperatorPanel, \"and\");\n    const eJoinOperatorOr = this.createJoinOperator(this.eJoinOperatorsOr, eJoinOperatorPanel, \"or\");\n    this.eFilterBody.appendChild(eJoinOperatorPanel);\n    const index = this.eJoinOperatorPanels.length - 1;\n    const uniqueGroupId = this.joinOperatorId++;\n    this.resetJoinOperatorAnd(eJoinOperatorAnd, index, uniqueGroupId);\n    this.resetJoinOperatorOr(eJoinOperatorOr, index, uniqueGroupId);\n    if (!this.isReadOnly()) {\n      eJoinOperatorAnd.onValueChange(this.listener);\n      eJoinOperatorOr.onValueChange(this.listener);\n    }\n  }\n  createJoinOperator(eJoinOperators, eJoinOperatorPanel, andOr) {\n    const eJoinOperator = this.createManagedBean(new AgRadioButton());\n    eJoinOperators.push(eJoinOperator);\n    eJoinOperator.addCssClass(\"ag-filter-condition-operator\");\n    eJoinOperator.addCssClass(`ag-filter-condition-operator-${andOr}`);\n    eJoinOperatorPanel.appendChild(eJoinOperator.getGui());\n    return eJoinOperator;\n  }\n  getDefaultJoinOperator(defaultJoinOperator) {\n    return defaultJoinOperator === \"AND\" || defaultJoinOperator === \"OR\" ? defaultJoinOperator : \"AND\";\n  }\n  createFilterListOptions() {\n    const filterOptions = this.optionsFactory.getFilterOptions();\n    this.filterListOptions = filterOptions.map(\n      (option) => typeof option === \"string\" ? this.createBoilerplateListOption(option) : this.createCustomListOption(option)\n    );\n  }\n  putOptionsIntoDropdown(eType) {\n    this.filterListOptions.forEach((listOption) => {\n      eType.addOption(listOption);\n    });\n    eType.setDisabled(this.filterListOptions.length <= 1);\n  }\n  createBoilerplateListOption(option) {\n    return { value: option, text: this.translate(option) };\n  }\n  createCustomListOption(option) {\n    const { displayKey } = option;\n    const customOption = this.optionsFactory.getCustomOption(option.displayKey);\n    return {\n      value: displayKey,\n      text: customOption ? this.localeService.getLocaleTextFunc()(customOption.displayKey, customOption.displayName) : this.translate(displayKey)\n    };\n  }\n  createBodyTemplate() {\n    return \"\";\n  }\n  getAgComponents() {\n    return [];\n  }\n  getCssIdentifier() {\n    return \"simple-filter\";\n  }\n  updateUiVisibility() {\n    const joinOperator = this.getJoinOperator();\n    this.updateNumConditions();\n    this.updateConditionStatusesAndValues(this.lastUiCompletePosition, joinOperator);\n  }\n  updateNumConditions() {\n    let lastUiCompletePosition = -1;\n    let areAllConditionsUiComplete = true;\n    for (let position = 0; position < this.getNumConditions(); position++) {\n      if (this.isConditionUiComplete(position)) {\n        lastUiCompletePosition = position;\n      } else {\n        areAllConditionsUiComplete = false;\n      }\n    }\n    if (this.shouldAddNewConditionAtEnd(areAllConditionsUiComplete)) {\n      this.createJoinOperatorPanel();\n      this.createOption();\n    } else {\n      const activePosition = this.lastUiCompletePosition ?? this.getNumConditions() - 2;\n      if (lastUiCompletePosition < activePosition) {\n        this.removeConditionsAndOperators(activePosition + 1);\n        const removeStartPosition = lastUiCompletePosition + 1;\n        const numConditionsToRemove = activePosition - removeStartPosition;\n        if (numConditionsToRemove > 0) {\n          this.removeConditionsAndOperators(removeStartPosition, numConditionsToRemove);\n        }\n        this.createMissingConditionsAndOperators();\n      }\n    }\n    this.lastUiCompletePosition = lastUiCompletePosition;\n  }\n  updateConditionStatusesAndValues(lastUiCompletePosition, joinOperator) {\n    this.eTypes.forEach((eType, position) => {\n      const disabled = this.isConditionDisabled(position, lastUiCompletePosition);\n      eType.setDisabled(disabled || this.filterListOptions.length <= 1);\n      if (position === 1) {\n        _setDisabled(this.eJoinOperatorPanels[0], disabled);\n        this.eJoinOperatorsAnd[0].setDisabled(disabled);\n        this.eJoinOperatorsOr[0].setDisabled(disabled);\n      }\n    });\n    this.eConditionBodies.forEach((element, index) => {\n      _setDisplayed(element, this.isConditionBodyVisible(index));\n    });\n    const orChecked = (joinOperator ?? this.getJoinOperator()) === \"OR\";\n    this.eJoinOperatorsAnd.forEach((eJoinOperatorAnd) => {\n      eJoinOperatorAnd.setValue(!orChecked, true);\n    });\n    this.eJoinOperatorsOr.forEach((eJoinOperatorOr) => {\n      eJoinOperatorOr.setValue(orChecked, true);\n    });\n    this.forEachInput((element, index, position, numberOfInputs) => {\n      this.setElementDisplayed(element, index < numberOfInputs);\n      this.setElementDisabled(element, this.isConditionDisabled(position, lastUiCompletePosition));\n    });\n    this.resetPlaceholder();\n  }\n  shouldAddNewConditionAtEnd(areAllConditionsUiComplete) {\n    return areAllConditionsUiComplete && this.getNumConditions() < this.maxNumConditions && !this.isReadOnly();\n  }\n  removeConditionsAndOperators(startPosition, deleteCount) {\n    if (startPosition >= this.getNumConditions()) {\n      return;\n    }\n    this.removeComponents(this.eTypes, startPosition, deleteCount);\n    this.removeElements(this.eConditionBodies, startPosition, deleteCount);\n    this.removeValueElements(startPosition, deleteCount);\n    const joinOperatorIndex = Math.max(startPosition - 1, 0);\n    this.removeElements(this.eJoinOperatorPanels, joinOperatorIndex, deleteCount);\n    this.removeComponents(this.eJoinOperatorsAnd, joinOperatorIndex, deleteCount);\n    this.removeComponents(this.eJoinOperatorsOr, joinOperatorIndex, deleteCount);\n  }\n  removeElements(elements, startPosition, deleteCount) {\n    const removedElements = this.removeItems(elements, startPosition, deleteCount);\n    removedElements.forEach((element) => _removeFromParent(element));\n  }\n  removeComponents(components, startPosition, deleteCount) {\n    const removedComponents = this.removeItems(components, startPosition, deleteCount);\n    removedComponents.forEach((comp) => {\n      _removeFromParent(comp.getGui());\n      this.destroyBean(comp);\n    });\n  }\n  removeItems(items, startPosition, deleteCount) {\n    return deleteCount == null ? items.splice(startPosition) : items.splice(startPosition, deleteCount);\n  }\n  afterGuiAttached(params) {\n    super.afterGuiAttached(params);\n    this.resetPlaceholder();\n    if (!params?.suppressFocus) {\n      if (this.isReadOnly()) {\n        this.eFilterBody.focus();\n      } else {\n        const firstInput = this.getInputs(0)[0];\n        if (!firstInput) {\n          return;\n        }\n        if (firstInput instanceof AgAbstractInputField) {\n          firstInput.getInputElement().focus();\n        }\n      }\n    }\n  }\n  afterGuiDetached() {\n    super.afterGuiDetached();\n    const appliedModel = this.getModel();\n    this.resetUiToActiveModel(appliedModel);\n    let lastUiCompletePosition = -1;\n    let updatedLastUiCompletePosition = -1;\n    let conditionsRemoved = false;\n    const joinOperator = this.getJoinOperator();\n    for (let position = this.getNumConditions() - 1; position >= 0; position--) {\n      if (this.isConditionUiComplete(position)) {\n        if (lastUiCompletePosition === -1) {\n          lastUiCompletePosition = position;\n          updatedLastUiCompletePosition = position;\n        }\n      } else {\n        const shouldRemovePositionAtEnd = position >= this.numAlwaysVisibleConditions && !this.isConditionUiComplete(position - 1);\n        const positionBeforeLastUiCompletePosition = position < lastUiCompletePosition;\n        if (shouldRemovePositionAtEnd || positionBeforeLastUiCompletePosition) {\n          this.removeConditionsAndOperators(position, 1);\n          conditionsRemoved = true;\n          if (positionBeforeLastUiCompletePosition) {\n            updatedLastUiCompletePosition--;\n          }\n        }\n      }\n    }\n    let shouldUpdateConditionStatusesAndValues = false;\n    if (this.getNumConditions() < this.numAlwaysVisibleConditions) {\n      this.createMissingConditionsAndOperators();\n      shouldUpdateConditionStatusesAndValues = true;\n    }\n    if (this.shouldAddNewConditionAtEnd(updatedLastUiCompletePosition === this.getNumConditions() - 1)) {\n      this.createJoinOperatorPanel();\n      this.createOption();\n      shouldUpdateConditionStatusesAndValues = true;\n    }\n    if (shouldUpdateConditionStatusesAndValues) {\n      this.updateConditionStatusesAndValues(updatedLastUiCompletePosition, joinOperator);\n    }\n    if (conditionsRemoved) {\n      this.updateJoinOperatorsDisabled();\n    }\n    this.lastUiCompletePosition = updatedLastUiCompletePosition;\n  }\n  getPlaceholderText(defaultPlaceholder, position) {\n    let placeholder = this.translate(defaultPlaceholder);\n    if (_isFunction(this.filterPlaceholder)) {\n      const filterPlaceholderFn = this.filterPlaceholder;\n      const filterOptionKey = this.eTypes[position].getValue();\n      const filterOption = this.translate(filterOptionKey);\n      placeholder = filterPlaceholderFn({\n        filterOptionKey,\n        filterOption,\n        placeholder\n      });\n    } else if (typeof this.filterPlaceholder === \"string\") {\n      placeholder = this.filterPlaceholder;\n    }\n    return placeholder;\n  }\n  // allow sub-classes to reset HTML placeholders after UI update.\n  resetPlaceholder() {\n    const globalTranslate = this.localeService.getLocaleTextFunc();\n    this.forEachInput((element, index, position, numberOfInputs) => {\n      if (!(element instanceof AgAbstractInputField)) {\n        return;\n      }\n      const placeholder = index === 0 && numberOfInputs > 1 ? \"inRangeStart\" : index === 0 ? \"filterOoo\" : \"inRangeEnd\";\n      const ariaLabel = index === 0 && numberOfInputs > 1 ? globalTranslate(\"ariaFilterFromValue\", \"Filter from value\") : index === 0 ? globalTranslate(\"ariaFilterValue\", \"Filter Value\") : globalTranslate(\"ariaFilterToValue\", \"Filter to Value\");\n      element.setInputPlaceholder(this.getPlaceholderText(placeholder, position));\n      element.setInputAriaLabel(ariaLabel);\n    });\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  setElementValue(element, value, fromFloatingFilter) {\n    if (element instanceof AgAbstractInputField) {\n      element.setValue(value != null ? String(value) : null, true);\n    }\n  }\n  setElementDisplayed(element, displayed) {\n    if (element instanceof Component) {\n      _setDisplayed(element.getGui(), displayed);\n    }\n  }\n  setElementDisabled(element, disabled) {\n    if (element instanceof Component) {\n      _setDisabled(element.getGui(), disabled);\n    }\n  }\n  attachElementOnChange(element, listener) {\n    if (element instanceof AgAbstractInputField) {\n      element.onValueChange(listener);\n    }\n  }\n  forEachInput(cb) {\n    this.getConditionTypes().forEach((type, position) => {\n      this.forEachPositionTypeInput(position, type, cb);\n    });\n  }\n  forEachPositionInput(position, cb) {\n    const type = this.getConditionType(position);\n    this.forEachPositionTypeInput(position, type, cb);\n  }\n  forEachPositionTypeInput(position, type, cb) {\n    const numberOfInputs = this.getNumberOfInputs(type);\n    const inputs = this.getInputs(position);\n    for (let index = 0; index < inputs.length; index++) {\n      const input = inputs[index];\n      if (input != null) {\n        cb(input, index, position, numberOfInputs);\n      }\n    }\n  }\n  isConditionDisabled(position, lastUiCompletePosition) {\n    if (this.isReadOnly()) {\n      return true;\n    }\n    if (position === 0) {\n      return false;\n    }\n    return position > lastUiCompletePosition + 1;\n  }\n  isConditionBodyVisible(position) {\n    const type = this.getConditionType(position);\n    const numberOfInputs = this.getNumberOfInputs(type);\n    return numberOfInputs > 0;\n  }\n  // returns true if the UI represents a working filter, eg all parts are filled out.\n  // eg if text filter and textfield blank then returns false.\n  isConditionUiComplete(position) {\n    if (position >= this.getNumConditions()) {\n      return false;\n    }\n    const type = this.getConditionType(position);\n    if (type === \"empty\") {\n      return false;\n    }\n    if (this.getValues(position).some((v) => v == null)) {\n      return false;\n    }\n    return true;\n  }\n  getNumConditions() {\n    return this.eTypes.length;\n  }\n  getUiCompleteConditions() {\n    const conditions = [];\n    for (let position = 0; position < this.getNumConditions(); position++) {\n      if (this.isConditionUiComplete(position)) {\n        conditions.push(this.createCondition(position));\n      }\n    }\n    return conditions;\n  }\n  createMissingConditionsAndOperators() {\n    if (this.isReadOnly()) {\n      return;\n    }\n    for (let i = this.getNumConditions(); i < this.numAlwaysVisibleConditions; i++) {\n      this.createJoinOperatorPanel();\n      this.createOption();\n    }\n  }\n  resetUiToDefaults(silent) {\n    this.removeConditionsAndOperators(this.isReadOnly() ? 1 : this.numAlwaysVisibleConditions);\n    this.eTypes.forEach((eType) => this.resetType(eType));\n    this.eJoinOperatorsAnd.forEach(\n      (eJoinOperatorAnd, index) => this.resetJoinOperatorAnd(eJoinOperatorAnd, index, this.joinOperatorId + index)\n    );\n    this.eJoinOperatorsOr.forEach(\n      (eJoinOperatorOr, index) => this.resetJoinOperatorOr(eJoinOperatorOr, index, this.joinOperatorId + index)\n    );\n    this.joinOperatorId++;\n    this.forEachInput((element) => this.resetInput(element));\n    this.resetPlaceholder();\n    this.createMissingConditionsAndOperators();\n    this.lastUiCompletePosition = null;\n    if (!silent) {\n      this.onUiChanged();\n    }\n    return AgPromise.resolve();\n  }\n  resetType(eType) {\n    const translate = this.localeService.getLocaleTextFunc();\n    const filteringLabel = translate(\"ariaFilteringOperator\", \"Filtering operator\");\n    eType.setValue(this.optionsFactory.getDefaultOption(), true).setAriaLabel(filteringLabel).setDisabled(this.isReadOnly() || this.filterListOptions.length <= 1);\n  }\n  resetJoinOperatorAnd(eJoinOperatorAnd, index, uniqueGroupId) {\n    this.resetJoinOperator(\n      eJoinOperatorAnd,\n      index,\n      this.isDefaultOperator(\"AND\"),\n      this.translate(\"andCondition\"),\n      uniqueGroupId\n    );\n  }\n  resetJoinOperatorOr(eJoinOperatorOr, index, uniqueGroupId) {\n    this.resetJoinOperator(\n      eJoinOperatorOr,\n      index,\n      this.isDefaultOperator(\"OR\"),\n      this.translate(\"orCondition\"),\n      uniqueGroupId\n    );\n  }\n  resetJoinOperator(eJoinOperator, index, value, label, uniqueGroupId) {\n    this.updateJoinOperatorDisabled(\n      eJoinOperator.setValue(value, true).setName(`ag-simple-filter-and-or-${this.getCompId()}-${uniqueGroupId}`).setLabel(label),\n      index\n    );\n  }\n  updateJoinOperatorsDisabled() {\n    this.eJoinOperatorsAnd.forEach((eJoinOperator, index) => this.updateJoinOperatorDisabled(eJoinOperator, index));\n    this.eJoinOperatorsOr.forEach((eJoinOperator, index) => this.updateJoinOperatorDisabled(eJoinOperator, index));\n  }\n  updateJoinOperatorDisabled(eJoinOperator, index) {\n    eJoinOperator.setDisabled(this.isReadOnly() || index > 0);\n  }\n  resetInput(element) {\n    this.setElementValue(element, null);\n    this.setElementDisabled(element, this.isReadOnly());\n  }\n  // puts model values into the UI\n  setConditionIntoUi(model, position) {\n    const values = this.mapValuesFromModel(model);\n    this.forEachInput((element, index, elPosition) => {\n      if (elPosition !== position) {\n        return;\n      }\n      this.setElementValue(element, values[index] != null ? values[index] : null);\n    });\n  }\n  // after floating filter changes, this sets the 'value' section. this is implemented by the base class\n  // (as that's where value is controlled), the 'type' part from the floating filter is dealt with in this class.\n  setValueFromFloatingFilter(value) {\n    this.forEachInput((element, index, position) => {\n      this.setElementValue(element, index === 0 && position === 0 ? value : null, true);\n    });\n  }\n  isDefaultOperator(operator) {\n    return operator === this.defaultJoinOperator;\n  }\n  addChangedListeners(eType, position) {\n    if (this.isReadOnly()) {\n      return;\n    }\n    eType.onValueChange(this.listener);\n    this.forEachPositionInput(position, (element) => {\n      this.attachElementOnChange(element, this.listener);\n    });\n  }\n  /** returns true if the row passes the said condition */\n  individualConditionPasses(params, filterModel) {\n    const cellValue = this.getCellValue(params.node);\n    const values = this.mapValuesFromModel(filterModel);\n    const customFilterOption = this.optionsFactory.getCustomOption(filterModel.type);\n    const customFilterResult = this.evaluateCustomFilter(customFilterOption, values, cellValue);\n    if (customFilterResult != null) {\n      return customFilterResult;\n    }\n    if (cellValue == null) {\n      return this.evaluateNullValue(filterModel.type);\n    }\n    return this.evaluateNonNullValue(values, cellValue, filterModel, params);\n  }\n  evaluateCustomFilter(customFilterOption, values, cellValue) {\n    if (customFilterOption == null) {\n      return;\n    }\n    const { predicate } = customFilterOption;\n    if (predicate != null && !values.some((v) => v == null)) {\n      return predicate(values, cellValue);\n    }\n    return;\n  }\n  isBlank(cellValue) {\n    return cellValue == null || typeof cellValue === \"string\" && cellValue.trim().length === 0;\n  }\n  hasInvalidInputs() {\n    return false;\n  }\n};\n\n// community-modules/core/src/filter/provided/scalarFilter.ts\nvar ScalarFilter = class extends SimpleFilter {\n  setParams(params) {\n    super.setParams(params);\n    this.scalarFilterParams = params;\n  }\n  evaluateNullValue(filterType) {\n    switch (filterType) {\n      case \"equals\":\n        if (this.scalarFilterParams.includeBlanksInEquals) {\n          return true;\n        }\n        break;\n      case \"notEqual\":\n        if (this.scalarFilterParams.includeBlanksInNotEqual) {\n          return true;\n        }\n        break;\n      case \"greaterThan\":\n      case \"greaterThanOrEqual\":\n        if (this.scalarFilterParams.includeBlanksInGreaterThan) {\n          return true;\n        }\n        break;\n      case \"lessThan\":\n      case \"lessThanOrEqual\":\n        if (this.scalarFilterParams.includeBlanksInLessThan) {\n          return true;\n        }\n        break;\n      case \"inRange\":\n        if (this.scalarFilterParams.includeBlanksInRange) {\n          return true;\n        }\n        break;\n      case \"blank\":\n        return true;\n      case \"notBlank\":\n        return false;\n    }\n    return false;\n  }\n  evaluateNonNullValue(values, cellValue, filterModel) {\n    const comparator = this.comparator();\n    const compareResult = values[0] != null ? comparator(values[0], cellValue) : 0;\n    switch (filterModel.type) {\n      case \"equals\":\n        return compareResult === 0;\n      case \"notEqual\":\n        return compareResult !== 0;\n      case \"greaterThan\":\n        return compareResult > 0;\n      case \"greaterThanOrEqual\":\n        return compareResult >= 0;\n      case \"lessThan\":\n        return compareResult < 0;\n      case \"lessThanOrEqual\":\n        return compareResult <= 0;\n      case \"inRange\": {\n        const compareToResult = comparator(values[1], cellValue);\n        return this.scalarFilterParams.inRangeInclusive ? compareResult >= 0 && compareToResult <= 0 : compareResult > 0 && compareToResult < 0;\n      }\n      case \"blank\":\n        return this.isBlank(cellValue);\n      case \"notBlank\":\n        return !this.isBlank(cellValue);\n      default:\n        _warnOnce(\n          'Unexpected type of filter \"' + filterModel.type + '\", it looks like the filter was configured with incorrect Filter Options'\n        );\n        return true;\n    }\n  }\n};\n\n// community-modules/core/src/utils/keyboard.ts\nvar A_KEYCODE = 65;\nvar C_KEYCODE = 67;\nvar V_KEYCODE = 86;\nvar D_KEYCODE = 68;\nvar Z_KEYCODE = 90;\nvar Y_KEYCODE = 89;\nfunction _isEventFromPrintableCharacter(event) {\n  if (event.altKey || event.ctrlKey || event.metaKey) {\n    return false;\n  }\n  const printableCharacter = event.key?.length === 1;\n  return printableCharacter;\n}\nfunction _isUserSuppressingKeyboardEvent(gos, keyboardEvent, rowNode, column, editing) {\n  const colDefFunc = column ? column.getColDef().suppressKeyboardEvent : void 0;\n  if (!colDefFunc) {\n    return false;\n  }\n  const params = gos.addGridCommonParams({\n    event: keyboardEvent,\n    editing,\n    column,\n    node: rowNode,\n    data: rowNode.data,\n    colDef: column.getColDef()\n  });\n  if (colDefFunc) {\n    const colDefFuncResult = colDefFunc(params);\n    if (colDefFuncResult) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction _isUserSuppressingHeaderKeyboardEvent(gos, keyboardEvent, headerRowIndex, column) {\n  const colDef = column.getDefinition();\n  const colDefFunc = colDef && colDef.suppressHeaderKeyboardEvent;\n  if (!_exists(colDefFunc)) {\n    return false;\n  }\n  const params = gos.addGridCommonParams({\n    colDef,\n    column,\n    headerRowIndex,\n    event: keyboardEvent\n  });\n  return !!colDefFunc(params);\n}\nfunction _normaliseQwertyAzerty(keyboardEvent) {\n  const { keyCode } = keyboardEvent;\n  let code;\n  switch (keyCode) {\n    case A_KEYCODE:\n      code = KeyCode.A;\n      break;\n    case C_KEYCODE:\n      code = KeyCode.C;\n      break;\n    case V_KEYCODE:\n      code = KeyCode.V;\n      break;\n    case D_KEYCODE:\n      code = KeyCode.D;\n      break;\n    case Z_KEYCODE:\n      code = KeyCode.Z;\n      break;\n    case Y_KEYCODE:\n      code = KeyCode.Y;\n      break;\n    default:\n      code = keyboardEvent.code;\n  }\n  return code;\n}\nfunction _isDeleteKey(key, alwaysReturnFalseOnBackspace = false) {\n  if (key === KeyCode.DELETE) {\n    return true;\n  }\n  if (!alwaysReturnFalseOnBackspace && key === KeyCode.BACKSPACE) {\n    return _isMacOsUserAgent();\n  }\n  return false;\n}\n\n// community-modules/core/src/widgets/agInputTextField.ts\nvar AgInputTextField = class extends AgAbstractInputField {\n  constructor(config, className = \"ag-text-field\", inputType = \"text\") {\n    super(config, className, inputType);\n  }\n  postConstruct() {\n    super.postConstruct();\n    if (this.config.allowedCharPattern) {\n      this.preventDisallowedCharacters();\n    }\n  }\n  setValue(value, silent) {\n    if (this.eInput.value !== value) {\n      this.eInput.value = _exists(value) ? value : \"\";\n    }\n    return super.setValue(value, silent);\n  }\n  /** Used to set an initial value into the input without necessarily setting `this.value` or triggering events (e.g. to set an invalid value) */\n  setStartValue(value) {\n    this.setValue(value, true);\n  }\n  preventDisallowedCharacters() {\n    const pattern = new RegExp(`[${this.config.allowedCharPattern}]`);\n    const preventCharacters = (event) => {\n      if (!_isEventFromPrintableCharacter(event)) {\n        return;\n      }\n      if (event.key && !pattern.test(event.key)) {\n        event.preventDefault();\n      }\n    };\n    this.addManagedListeners(this.eInput, {\n      keydown: preventCharacters,\n      paste: (e) => {\n        const text = e.clipboardData?.getData(\"text\");\n        if (text && text.split(\"\").some((c) => !pattern.test(c))) {\n          e.preventDefault();\n        }\n      }\n    });\n  }\n};\nvar AgInputTextFieldSelector = {\n  selector: \"AG-INPUT-TEXT-FIELD\",\n  component: AgInputTextField\n};\n\n// community-modules/core/src/widgets/agInputNumberField.ts\nvar AgInputNumberField = class extends AgInputTextField {\n  constructor(config) {\n    super(config, \"ag-number-field\", \"number\");\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.addManagedListeners(this.eInput, {\n      blur: () => {\n        const floatedValue = parseFloat(this.eInput.value);\n        const value = isNaN(floatedValue) ? \"\" : this.normalizeValue(floatedValue.toString());\n        if (this.value !== value) {\n          this.setValue(value);\n        }\n      },\n      wheel: this.onWheel.bind(this)\n    });\n    this.eInput.step = \"any\";\n    const { precision, min, max, step } = this.config;\n    if (typeof precision === \"number\")\n      this.setPrecision(precision);\n    if (typeof min === \"number\")\n      this.setMin(min);\n    if (typeof max === \"number\")\n      this.setMax(max);\n    if (typeof step === \"number\")\n      this.setStep(step);\n  }\n  onWheel(e) {\n    if (_getActiveDomElement(this.gos) === this.eInput) {\n      e.preventDefault();\n    }\n  }\n  normalizeValue(value) {\n    if (value === \"\") {\n      return \"\";\n    }\n    if (this.precision != null) {\n      value = this.adjustPrecision(value);\n    }\n    const val = parseFloat(value);\n    if (this.min != null && val < this.min) {\n      value = this.min.toString();\n    } else if (this.max != null && val > this.max) {\n      value = this.max.toString();\n    }\n    return value;\n  }\n  adjustPrecision(value, isScientificNotation) {\n    if (this.precision == null) {\n      return value;\n    }\n    if (isScientificNotation) {\n      const floatString = parseFloat(value).toFixed(this.precision);\n      return parseFloat(floatString).toString();\n    }\n    const parts = String(value).split(\".\");\n    if (parts.length > 1) {\n      if (parts[1].length <= this.precision) {\n        return value;\n      } else if (this.precision > 0) {\n        return `${parts[0]}.${parts[1].slice(0, this.precision)}`;\n      }\n    }\n    return parts[0];\n  }\n  setMin(min) {\n    if (this.min === min) {\n      return this;\n    }\n    this.min = min;\n    _addOrRemoveAttribute(this.eInput, \"min\", min);\n    return this;\n  }\n  setMax(max) {\n    if (this.max === max) {\n      return this;\n    }\n    this.max = max;\n    _addOrRemoveAttribute(this.eInput, \"max\", max);\n    return this;\n  }\n  setPrecision(precision) {\n    this.precision = precision;\n    return this;\n  }\n  setStep(step) {\n    if (this.step === step) {\n      return this;\n    }\n    this.step = step;\n    _addOrRemoveAttribute(this.eInput, \"step\", step);\n    return this;\n  }\n  setValue(value, silent) {\n    return this.setValueOrInputValue(\n      (v) => super.setValue(v, silent),\n      () => this,\n      value\n    );\n  }\n  setStartValue(value) {\n    return this.setValueOrInputValue(\n      (v) => super.setValue(v, true),\n      (v) => {\n        this.eInput.value = v;\n      },\n      value\n    );\n  }\n  setValueOrInputValue(setValueFunc, setInputValueOnlyFunc, value) {\n    if (_exists(value)) {\n      let setInputValueOnly = this.isScientificNotation(value);\n      if (setInputValueOnly && this.eInput.validity.valid) {\n        return setValueFunc(value);\n      }\n      if (!setInputValueOnly) {\n        value = this.adjustPrecision(value);\n        const normalizedValue = this.normalizeValue(value);\n        setInputValueOnly = value != normalizedValue;\n      }\n      if (setInputValueOnly) {\n        return setInputValueOnlyFunc(value);\n      }\n    }\n    return setValueFunc(value);\n  }\n  getValue() {\n    if (!this.eInput.validity.valid) {\n      return void 0;\n    }\n    const inputValue = this.eInput.value;\n    if (this.isScientificNotation(inputValue)) {\n      return this.adjustPrecision(inputValue, true);\n    }\n    return super.getValue();\n  }\n  isScientificNotation(value) {\n    return typeof value === \"string\" && value.includes(\"e\");\n  }\n};\nvar AgInputNumberFieldSelector = {\n  selector: \"AG-INPUT-NUMBER-FIELD\",\n  component: AgInputNumberField\n};\n\n// community-modules/core/src/filter/provided/number/numberFilterConstants.ts\nvar DEFAULT_NUMBER_FILTER_OPTIONS = [\n  \"equals\",\n  \"notEqual\",\n  \"greaterThan\",\n  \"greaterThanOrEqual\",\n  \"lessThan\",\n  \"lessThanOrEqual\",\n  \"inRange\",\n  \"blank\",\n  \"notBlank\"\n];\n\n// community-modules/core/src/filter/provided/simpleFilterModelFormatter.ts\nvar SimpleFilterModelFormatter = class {\n  constructor(localeService, optionsFactory, valueFormatter) {\n    this.localeService = localeService;\n    this.optionsFactory = optionsFactory;\n    this.valueFormatter = valueFormatter;\n  }\n  // used by:\n  // 1) NumberFloatingFilter & TextFloatingFilter: Always, for both when editable and read only.\n  // 2) DateFloatingFilter: Only when read only (as we show text rather than a date picker when read only)\n  getModelAsString(model) {\n    if (!model) {\n      return null;\n    }\n    const isCombined = model.operator != null;\n    const translate = this.localeService.getLocaleTextFunc();\n    if (isCombined) {\n      const combinedModel = model;\n      const conditions = combinedModel.conditions ?? [];\n      const customOptions = conditions.map((condition) => this.getModelAsString(condition));\n      const joinOperatorTranslateKey = combinedModel.operator === \"AND\" ? \"andCondition\" : \"orCondition\";\n      return customOptions.join(\n        ` ${translate(joinOperatorTranslateKey, FILTER_LOCALE_TEXT[joinOperatorTranslateKey])} `\n      );\n    } else if (model.type === \"blank\" || model.type === \"notBlank\") {\n      return translate(model.type, model.type);\n    } else {\n      const condition = model;\n      const customOption = this.optionsFactory.getCustomOption(condition.type);\n      const { displayKey, displayName, numberOfInputs } = customOption || {};\n      if (displayKey && displayName && numberOfInputs === 0) {\n        translate(displayKey, displayName);\n        return displayName;\n      }\n      return this.conditionToString(condition, customOption);\n    }\n  }\n  updateParams(params) {\n    this.optionsFactory = params.optionsFactory;\n  }\n  formatValue(value) {\n    return this.valueFormatter ? this.valueFormatter(value ?? null) ?? \"\" : String(value);\n  }\n};\n\n// community-modules/core/src/filter/provided/number/numberFilterModelFormatter.ts\nvar NumberFilterModelFormatter = class extends SimpleFilterModelFormatter {\n  conditionToString(condition, options) {\n    const { numberOfInputs } = options || {};\n    const isRange = condition.type == \"inRange\" || numberOfInputs === 2;\n    if (isRange) {\n      return `${this.formatValue(condition.filter)}-${this.formatValue(condition.filterTo)}`;\n    }\n    if (condition.filter != null) {\n      return this.formatValue(condition.filter);\n    }\n    return `${condition.type}`;\n  }\n};\n\n// community-modules/core/src/filter/provided/number/numberFilterUtils.ts\nfunction getAllowedCharPattern(filterParams) {\n  const { allowedCharPattern } = filterParams ?? {};\n  return allowedCharPattern ?? null;\n}\n\n// community-modules/core/src/filter/provided/number/numberFilter.ts\nvar NumberFilter = class extends ScalarFilter {\n  constructor() {\n    super(\"numberFilter\");\n    this.eValuesFrom = [];\n    this.eValuesTo = [];\n  }\n  refresh(params) {\n    if (this.numberFilterParams.allowedCharPattern !== params.allowedCharPattern) {\n      return false;\n    }\n    return super.refresh(params);\n  }\n  mapValuesFromModel(filterModel) {\n    const { filter, filterTo, type } = filterModel || {};\n    return [this.processValue(filter), this.processValue(filterTo)].slice(0, this.getNumberOfInputs(type));\n  }\n  getDefaultDebounceMs() {\n    return 500;\n  }\n  comparator() {\n    return (left, right) => {\n      if (left === right) {\n        return 0;\n      }\n      return left < right ? 1 : -1;\n    };\n  }\n  setParams(params) {\n    this.numberFilterParams = params;\n    super.setParams(params);\n    this.filterModelFormatter = new NumberFilterModelFormatter(\n      this.localeService,\n      this.optionsFactory,\n      this.numberFilterParams.numberFormatter\n    );\n  }\n  getDefaultFilterOptions() {\n    return DEFAULT_NUMBER_FILTER_OPTIONS;\n  }\n  setElementValue(element, value, fromFloatingFilter) {\n    const valueToSet = !fromFloatingFilter && this.numberFilterParams.numberFormatter ? this.numberFilterParams.numberFormatter(value ?? null) : value;\n    super.setElementValue(element, valueToSet);\n  }\n  createValueElement() {\n    const allowedCharPattern = getAllowedCharPattern(this.numberFilterParams);\n    const eCondition = document.createElement(\"div\");\n    eCondition.classList.add(\"ag-filter-body\");\n    _setAriaRole(eCondition, \"presentation\");\n    this.createFromToElement(eCondition, this.eValuesFrom, \"from\", allowedCharPattern);\n    this.createFromToElement(eCondition, this.eValuesTo, \"to\", allowedCharPattern);\n    return eCondition;\n  }\n  createFromToElement(eCondition, eValues, fromTo, allowedCharPattern) {\n    const eValue = this.createManagedBean(\n      allowedCharPattern ? new AgInputTextField({ allowedCharPattern }) : new AgInputNumberField()\n    );\n    eValue.addCssClass(`ag-filter-${fromTo}`);\n    eValue.addCssClass(\"ag-filter-filter\");\n    eValues.push(eValue);\n    eCondition.appendChild(eValue.getGui());\n  }\n  removeValueElements(startPosition, deleteCount) {\n    this.removeComponents(this.eValuesFrom, startPosition, deleteCount);\n    this.removeComponents(this.eValuesTo, startPosition, deleteCount);\n  }\n  getValues(position) {\n    const result = [];\n    this.forEachPositionInput(position, (element, index, _elPosition, numberOfInputs) => {\n      if (index < numberOfInputs) {\n        result.push(this.processValue(this.stringToFloat(element.getValue())));\n      }\n    });\n    return result;\n  }\n  areSimpleModelsEqual(aSimple, bSimple) {\n    return aSimple.filter === bSimple.filter && aSimple.filterTo === bSimple.filterTo && aSimple.type === bSimple.type;\n  }\n  getFilterType() {\n    return \"number\";\n  }\n  processValue(value) {\n    if (value == null) {\n      return null;\n    }\n    return isNaN(value) ? null : value;\n  }\n  stringToFloat(value) {\n    if (typeof value === \"number\") {\n      return value;\n    }\n    let filterText = _makeNull(value);\n    if (filterText != null && filterText.trim() === \"\") {\n      filterText = null;\n    }\n    if (this.numberFilterParams.numberParser) {\n      return this.numberFilterParams.numberParser(filterText);\n    }\n    return filterText == null || filterText.trim() === \"-\" ? null : parseFloat(filterText);\n  }\n  createCondition(position) {\n    const type = this.getConditionType(position);\n    const model = {\n      filterType: this.getFilterType(),\n      type\n    };\n    const values = this.getValues(position);\n    if (values.length > 0) {\n      model.filter = values[0];\n    }\n    if (values.length > 1) {\n      model.filterTo = values[1];\n    }\n    return model;\n  }\n  getInputs(position) {\n    if (position >= this.eValuesFrom.length) {\n      return [null, null];\n    }\n    return [this.eValuesFrom[position], this.eValuesTo[position]];\n  }\n  getModelAsString(model) {\n    return this.filterModelFormatter.getModelAsString(model) ?? \"\";\n  }\n  hasInvalidInputs() {\n    let invalidInputs = false;\n    this.forEachInput((element) => {\n      if (!element.getInputElement().validity.valid) {\n        invalidInputs = true;\n        return;\n      }\n    });\n    return invalidInputs;\n  }\n};\n\n// community-modules/core/src/filter/provided/text/textFilterConstants.ts\nvar DEFAULT_TEXT_FILTER_OPTIONS = [\n  \"contains\",\n  \"notContains\",\n  \"equals\",\n  \"notEqual\",\n  \"startsWith\",\n  \"endsWith\",\n  \"blank\",\n  \"notBlank\"\n];\n\n// community-modules/core/src/filter/provided/text/textFilterModelFormatter.ts\nvar TextFilterModelFormatter = class extends SimpleFilterModelFormatter {\n  conditionToString(condition, options) {\n    const { numberOfInputs } = options || {};\n    const isRange = condition.type == \"inRange\" || numberOfInputs === 2;\n    if (isRange) {\n      return `${condition.filter}-${condition.filterTo}`;\n    }\n    if (condition.filter != null) {\n      return `${condition.filter}`;\n    }\n    return `${condition.type}`;\n  }\n};\n\n// community-modules/core/src/filter/provided/text/textFilterUtils.ts\nfunction trimInputForFilter(value) {\n  const trimmedInput = value && value.trim();\n  return trimmedInput === \"\" ? value : trimmedInput;\n}\n\n// community-modules/core/src/filter/provided/text/textFilter.ts\nvar TextFilter = class extends SimpleFilter {\n  constructor() {\n    super(\"textFilter\");\n    this.defaultFormatter = (from) => from;\n    this.defaultLowercaseFormatter = (from) => from == null ? null : from.toString().toLowerCase();\n    this.defaultMatcher = ({ filterOption, value, filterText }) => {\n      if (filterText == null) {\n        return false;\n      }\n      switch (filterOption) {\n        case \"contains\":\n          return value.indexOf(filterText) >= 0;\n        case \"notContains\":\n          return value.indexOf(filterText) < 0;\n        case \"equals\":\n          return value === filterText;\n        case \"notEqual\":\n          return value != filterText;\n        case \"startsWith\":\n          return value.indexOf(filterText) === 0;\n        case \"endsWith\": {\n          const index = value.lastIndexOf(filterText);\n          return index >= 0 && index === value.length - filterText.length;\n        }\n        default:\n          return false;\n      }\n    };\n    this.eValuesFrom = [];\n    this.eValuesTo = [];\n  }\n  getDefaultDebounceMs() {\n    return 500;\n  }\n  setParams(params) {\n    this.textFilterParams = params;\n    super.setParams(params);\n    this.matcher = this.getTextMatcher();\n    this.formatter = this.textFilterParams.textFormatter || (this.textFilterParams.caseSensitive ? this.defaultFormatter : this.defaultLowercaseFormatter);\n    this.filterModelFormatter = new TextFilterModelFormatter(this.localeService, this.optionsFactory);\n  }\n  getTextMatcher() {\n    const legacyComparator = this.textFilterParams.textCustomComparator;\n    if (legacyComparator) {\n      _warnOnce(\"textCustomComparator is deprecated, use textMatcher instead.\");\n      return ({ filterOption, value, filterText }) => legacyComparator(filterOption, value, filterText);\n    }\n    return this.textFilterParams.textMatcher || this.defaultMatcher;\n  }\n  createCondition(position) {\n    const type = this.getConditionType(position);\n    const model = {\n      filterType: this.getFilterType(),\n      type\n    };\n    const values = this.getValuesWithSideEffects(position, true);\n    if (values.length > 0) {\n      model.filter = values[0];\n    }\n    if (values.length > 1) {\n      model.filterTo = values[1];\n    }\n    return model;\n  }\n  getFilterType() {\n    return \"text\";\n  }\n  areSimpleModelsEqual(aSimple, bSimple) {\n    return aSimple.filter === bSimple.filter && aSimple.filterTo === bSimple.filterTo && aSimple.type === bSimple.type;\n  }\n  getInputs(position) {\n    if (position >= this.eValuesFrom.length) {\n      return [null, null];\n    }\n    return [this.eValuesFrom[position], this.eValuesTo[position]];\n  }\n  getValues(position) {\n    return this.getValuesWithSideEffects(position, false);\n  }\n  getValuesWithSideEffects(position, applySideEffects) {\n    const result = [];\n    this.forEachPositionInput(position, (element, index, _elPosition, numberOfInputs) => {\n      if (index < numberOfInputs) {\n        let value = _makeNull(element.getValue());\n        if (applySideEffects && this.textFilterParams.trimInput) {\n          value = trimInputForFilter(value) ?? null;\n          element.setValue(value, true);\n        }\n        result.push(value);\n      }\n    });\n    return result;\n  }\n  getDefaultFilterOptions() {\n    return DEFAULT_TEXT_FILTER_OPTIONS;\n  }\n  createValueElement() {\n    const eCondition = document.createElement(\"div\");\n    eCondition.classList.add(\"ag-filter-body\");\n    _setAriaRole(eCondition, \"presentation\");\n    this.createFromToElement(eCondition, this.eValuesFrom, \"from\");\n    this.createFromToElement(eCondition, this.eValuesTo, \"to\");\n    return eCondition;\n  }\n  createFromToElement(eCondition, eValues, fromTo) {\n    const eValue = this.createManagedBean(new AgInputTextField());\n    eValue.addCssClass(`ag-filter-${fromTo}`);\n    eValue.addCssClass(\"ag-filter-filter\");\n    eValues.push(eValue);\n    eCondition.appendChild(eValue.getGui());\n  }\n  removeValueElements(startPosition, deleteCount) {\n    this.removeComponents(this.eValuesFrom, startPosition, deleteCount);\n    this.removeComponents(this.eValuesTo, startPosition, deleteCount);\n  }\n  mapValuesFromModel(filterModel) {\n    const { filter, filterTo, type } = filterModel || {};\n    return [filter || null, filterTo || null].slice(0, this.getNumberOfInputs(type));\n  }\n  evaluateNullValue(filterType) {\n    const filterTypesAllowNulls = [\"notEqual\", \"notContains\", \"blank\"];\n    return filterType ? filterTypesAllowNulls.indexOf(filterType) >= 0 : false;\n  }\n  evaluateNonNullValue(values, cellValue, filterModel, params) {\n    const formattedValues = values.map((v) => this.formatter(v)) || [];\n    const cellValueFormatted = this.formatter(cellValue);\n    const { api, colDef, column, context, textFormatter } = this.textFilterParams;\n    if (filterModel.type === \"blank\") {\n      return this.isBlank(cellValue);\n    } else if (filterModel.type === \"notBlank\") {\n      return !this.isBlank(cellValue);\n    }\n    const matcherParams = {\n      api,\n      colDef,\n      column,\n      context,\n      node: params.node,\n      data: params.data,\n      filterOption: filterModel.type,\n      value: cellValueFormatted,\n      textFormatter\n    };\n    return formattedValues.some((v) => this.matcher({ ...matcherParams, filterText: v }));\n  }\n  getModelAsString(model) {\n    return this.filterModelFormatter.getModelAsString(model) ?? \"\";\n  }\n};\n\n// community-modules/core/src/utils/number.ts\nfunction toNumber(value) {\n  if (typeof value === \"number\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    const parsed = parseInt(value);\n    if (isNaN(parsed)) {\n      return void 0;\n    }\n    return parsed;\n  }\n  return void 0;\n}\nfunction toConstrainedNum(min, max = Number.MAX_VALUE) {\n  return (value) => {\n    const num = toNumber(value);\n    if (num == null || num < min || num > max) {\n      return void 0;\n    }\n    return num;\n  };\n}\nfunction _padStartWidthZeros(value, totalStringSize) {\n  return value.toString().padStart(totalStringSize, \"0\");\n}\nfunction _createArrayOfNumbers(first, last) {\n  const result = [];\n  for (let i = first; i <= last; i++) {\n    result.push(i);\n  }\n  return result;\n}\nfunction _formatNumberTwoDecimalPlacesAndCommas(value, thousandSeparator, decimalSeparator) {\n  if (typeof value !== \"number\") {\n    return \"\";\n  }\n  return _formatNumberCommas(Math.round(value * 100) / 100, thousandSeparator, decimalSeparator);\n}\nfunction _formatNumberCommas(value, thousandSeparator, decimalSeparator) {\n  if (typeof value !== \"number\") {\n    return \"\";\n  }\n  return value.toString().replace(\".\", decimalSeparator).replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, `$1${thousandSeparator}`);\n}\n\n// community-modules/core/src/utils/date.ts\nfunction _serialiseDate(date, includeTime = true, separator = \"-\") {\n  if (!date) {\n    return null;\n  }\n  let serialised = [date.getFullYear(), date.getMonth() + 1, date.getDate()].map((part) => _padStartWidthZeros(part, 2)).join(separator);\n  if (includeTime) {\n    serialised += \" \" + [date.getHours(), date.getMinutes(), date.getSeconds()].map((part) => _padStartWidthZeros(part, 2)).join(\":\");\n  }\n  return serialised;\n}\nvar calculateOrdinal = (value) => {\n  if (value > 3 && value < 21) {\n    return \"th\";\n  }\n  const remainder = value % 10;\n  switch (remainder) {\n    case 1:\n      return \"st\";\n    case 2:\n      return \"nd\";\n    case 3:\n      return \"rd\";\n  }\n  return \"th\";\n};\nfunction _dateToFormattedString(date, format = \"YYYY-MM-DD\") {\n  const fullYear = _padStartWidthZeros(date.getFullYear(), 4);\n  const months = [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\"\n  ];\n  const days = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n  const replace = {\n    YYYY: () => fullYear.slice(fullYear.length - 4, fullYear.length),\n    YY: () => fullYear.slice(fullYear.length - 2, fullYear.length),\n    Y: () => `${date.getFullYear()}`,\n    MMMM: () => months[date.getMonth()],\n    MMM: () => months[date.getMonth()].slice(0, 3),\n    MM: () => _padStartWidthZeros(date.getMonth() + 1, 2),\n    Mo: () => `${date.getMonth() + 1}${calculateOrdinal(date.getMonth() + 1)}`,\n    M: () => `${date.getMonth() + 1}`,\n    Do: () => `${date.getDate()}${calculateOrdinal(date.getDate())}`,\n    DD: () => _padStartWidthZeros(date.getDate(), 2),\n    D: () => `${date.getDate()}`,\n    dddd: () => days[date.getDay()],\n    ddd: () => days[date.getDay()].slice(0, 3),\n    dd: () => days[date.getDay()].slice(0, 2),\n    do: () => `${date.getDay()}${calculateOrdinal(date.getDay())}`,\n    d: () => `${date.getDay()}`\n  };\n  const regexp = new RegExp(Object.keys(replace).join(\"|\"), \"g\");\n  return format.replace(regexp, (match) => {\n    if (match in replace) {\n      return replace[match]();\n    }\n    return match;\n  });\n}\nfunction _parseDateTimeFromString(value) {\n  if (!value) {\n    return null;\n  }\n  const [dateStr, timeStr] = value.split(\" \");\n  if (!dateStr) {\n    return null;\n  }\n  const fields = dateStr.split(\"-\").map((f) => parseInt(f, 10));\n  if (fields.filter((f) => !isNaN(f)).length !== 3) {\n    return null;\n  }\n  const [year, month, day] = fields;\n  const date = new Date(year, month - 1, day);\n  if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n    return null;\n  }\n  if (!timeStr || timeStr === \"00:00:00\") {\n    return date;\n  }\n  const [hours, minutes, seconds] = timeStr.split(\":\").map((part) => parseInt(part, 10));\n  if (hours >= 0 && hours < 24) {\n    date.setHours(hours);\n  }\n  if (minutes >= 0 && minutes < 60) {\n    date.setMinutes(minutes);\n  }\n  if (seconds >= 0 && seconds < 60) {\n    date.setSeconds(seconds);\n  }\n  return date;\n}\n\n// community-modules/core/src/filter/provided/date/dateCompWrapper.ts\nvar DateCompWrapper = class {\n  constructor(context, userComponentFactory, dateComponentParams, eParent, onReady) {\n    this.alive = true;\n    this.context = context;\n    this.eParent = eParent;\n    const compDetails = userComponentFactory.getDateCompDetails(dateComponentParams);\n    const promise = compDetails.newAgStackInstance();\n    promise.then((dateComp) => {\n      if (!this.alive) {\n        context.destroyBean(dateComp);\n        return;\n      }\n      this.dateComp = dateComp;\n      if (!dateComp) {\n        return;\n      }\n      eParent.appendChild(dateComp.getGui());\n      if (dateComp.afterGuiAttached) {\n        dateComp.afterGuiAttached();\n      }\n      if (this.tempValue) {\n        dateComp.setDate(this.tempValue);\n      }\n      if (this.disabled != null) {\n        this.setDateCompDisabled(this.disabled);\n      }\n      onReady?.(this);\n    });\n  }\n  destroy() {\n    this.alive = false;\n    this.dateComp = this.context.destroyBean(this.dateComp);\n  }\n  getDate() {\n    return this.dateComp ? this.dateComp.getDate() : this.tempValue;\n  }\n  setDate(value) {\n    if (this.dateComp) {\n      this.dateComp.setDate(value);\n    } else {\n      this.tempValue = value;\n    }\n  }\n  setDisabled(disabled) {\n    if (this.dateComp) {\n      this.setDateCompDisabled(disabled);\n    } else {\n      this.disabled = disabled;\n    }\n  }\n  setDisplayed(displayed) {\n    _setDisplayed(this.eParent, displayed);\n  }\n  setInputPlaceholder(placeholder) {\n    if (this.dateComp && this.dateComp.setInputPlaceholder) {\n      this.dateComp.setInputPlaceholder(placeholder);\n    }\n  }\n  setInputAriaLabel(label) {\n    if (this.dateComp && this.dateComp.setInputAriaLabel) {\n      this.dateComp.setInputAriaLabel(label);\n    }\n  }\n  afterGuiAttached(params) {\n    if (this.dateComp && typeof this.dateComp.afterGuiAttached === \"function\") {\n      this.dateComp.afterGuiAttached(params);\n    }\n  }\n  updateParams(params) {\n    let hasRefreshed = false;\n    if (this.dateComp?.refresh && typeof this.dateComp.refresh === \"function\") {\n      const result = this.dateComp.refresh(params);\n      if (result !== null) {\n        hasRefreshed = true;\n      }\n    }\n    if (!hasRefreshed && this.dateComp?.onParamsUpdated && typeof this.dateComp.onParamsUpdated === \"function\") {\n      const result = this.dateComp.onParamsUpdated(params);\n      if (result !== null) {\n        _warnOnce(`Custom date component method 'onParamsUpdated' is deprecated. Use 'refresh' instead.`);\n      }\n    }\n  }\n  setDateCompDisabled(disabled) {\n    if (this.dateComp == null) {\n      return;\n    }\n    if (this.dateComp.setDisabled == null) {\n      return;\n    }\n    this.dateComp.setDisabled(disabled);\n  }\n};\n\n// community-modules/core/src/filter/provided/date/dateFilterConstants.ts\nvar DEFAULT_DATE_FILTER_OPTIONS = [\n  \"equals\",\n  \"notEqual\",\n  \"lessThan\",\n  \"greaterThan\",\n  \"inRange\",\n  \"blank\",\n  \"notBlank\"\n];\n\n// community-modules/core/src/filter/provided/date/dateFilterModelFormatter.ts\nvar DateFilterModelFormatter = class extends SimpleFilterModelFormatter {\n  constructor(dateFilterParams, localeService, optionsFactory) {\n    super(localeService, optionsFactory);\n    this.dateFilterParams = dateFilterParams;\n  }\n  conditionToString(condition, options) {\n    const { type } = condition;\n    const { numberOfInputs } = options || {};\n    const isRange = type == \"inRange\" || numberOfInputs === 2;\n    const dateFrom = _parseDateTimeFromString(condition.dateFrom);\n    const dateTo = _parseDateTimeFromString(condition.dateTo);\n    const format = this.dateFilterParams.inRangeFloatingFilterDateFormat;\n    if (isRange) {\n      const formattedFrom = dateFrom !== null ? _dateToFormattedString(dateFrom, format) : \"null\";\n      const formattedTo = dateTo !== null ? _dateToFormattedString(dateTo, format) : \"null\";\n      return `${formattedFrom}-${formattedTo}`;\n    }\n    if (dateFrom != null) {\n      return _dateToFormattedString(dateFrom, format);\n    }\n    return `${type}`;\n  }\n  updateParams(params) {\n    super.updateParams(params);\n    this.dateFilterParams = params.dateFilterParams;\n  }\n};\n\n// community-modules/core/src/filter/provided/date/dateFilter.ts\nvar DEFAULT_MIN_YEAR = 1e3;\nvar DEFAULT_MAX_YEAR = Infinity;\nvar DateFilter = class extends ScalarFilter {\n  constructor() {\n    super(\"dateFilter\");\n    this.eConditionPanelsFrom = [];\n    this.eConditionPanelsTo = [];\n    this.dateConditionFromComps = [];\n    this.dateConditionToComps = [];\n    this.minValidYear = DEFAULT_MIN_YEAR;\n    this.maxValidYear = DEFAULT_MAX_YEAR;\n    this.minValidDate = null;\n    this.maxValidDate = null;\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.context = beans.context;\n    this.userComponentFactory = beans.userComponentFactory;\n  }\n  afterGuiAttached(params) {\n    super.afterGuiAttached(params);\n    this.dateConditionFromComps[0].afterGuiAttached(params);\n  }\n  mapValuesFromModel(filterModel) {\n    const { dateFrom, dateTo, type } = filterModel || {};\n    return [\n      dateFrom && _parseDateTimeFromString(dateFrom) || null,\n      dateTo && _parseDateTimeFromString(dateTo) || null\n    ].slice(0, this.getNumberOfInputs(type));\n  }\n  comparator() {\n    return this.dateFilterParams.comparator ? this.dateFilterParams.comparator : this.defaultComparator.bind(this);\n  }\n  defaultComparator(filterDate, cellValue) {\n    const cellAsDate = cellValue;\n    if (cellValue == null || cellAsDate < filterDate) {\n      return -1;\n    }\n    if (cellAsDate > filterDate) {\n      return 1;\n    }\n    return 0;\n  }\n  setParams(params) {\n    this.dateFilterParams = params;\n    super.setParams(params);\n    const yearParser = (param, fallback) => {\n      if (params[param] != null) {\n        if (!isNaN(params[param])) {\n          return params[param] == null ? fallback : Number(params[param]);\n        } else {\n          _warnOnce(`DateFilter ${param} is not a number`);\n        }\n      }\n      return fallback;\n    };\n    this.minValidYear = yearParser(\"minValidYear\", DEFAULT_MIN_YEAR);\n    this.maxValidYear = yearParser(\"maxValidYear\", DEFAULT_MAX_YEAR);\n    if (this.minValidYear > this.maxValidYear) {\n      _warnOnce(`DateFilter minValidYear should be <= maxValidYear`);\n    }\n    if (params.minValidDate) {\n      this.minValidDate = params.minValidDate instanceof Date ? params.minValidDate : _parseDateTimeFromString(params.minValidDate);\n    } else {\n      this.minValidDate = null;\n    }\n    if (params.maxValidDate) {\n      this.maxValidDate = params.maxValidDate instanceof Date ? params.maxValidDate : _parseDateTimeFromString(params.maxValidDate);\n    } else {\n      this.maxValidDate = null;\n    }\n    if (this.minValidDate && this.maxValidDate && this.minValidDate > this.maxValidDate) {\n      _warnOnce(`DateFilter minValidDate should be <= maxValidDate`);\n    }\n    this.filterModelFormatter = new DateFilterModelFormatter(\n      this.dateFilterParams,\n      this.localeService,\n      this.optionsFactory\n    );\n  }\n  createDateCompWrapper(element) {\n    const dateCompWrapper = new DateCompWrapper(\n      this.context,\n      this.userComponentFactory,\n      {\n        onDateChanged: () => this.onUiChanged(),\n        filterParams: this.dateFilterParams\n      },\n      element\n    );\n    this.addDestroyFunc(() => dateCompWrapper.destroy());\n    return dateCompWrapper;\n  }\n  setElementValue(element, value) {\n    element.setDate(value);\n  }\n  setElementDisplayed(element, displayed) {\n    element.setDisplayed(displayed);\n  }\n  setElementDisabled(element, disabled) {\n    element.setDisabled(disabled);\n  }\n  getDefaultFilterOptions() {\n    return DEFAULT_DATE_FILTER_OPTIONS;\n  }\n  createValueElement() {\n    const eDocument = _getDocument(this.gos);\n    const eCondition = eDocument.createElement(\"div\");\n    eCondition.classList.add(\"ag-filter-body\");\n    this.createFromToElement(eCondition, this.eConditionPanelsFrom, this.dateConditionFromComps, \"from\");\n    this.createFromToElement(eCondition, this.eConditionPanelsTo, this.dateConditionToComps, \"to\");\n    return eCondition;\n  }\n  createFromToElement(eCondition, eConditionPanels, dateConditionComps, fromTo) {\n    const eDocument = _getDocument(this.gos);\n    const eConditionPanel = eDocument.createElement(\"div\");\n    eConditionPanel.classList.add(`ag-filter-${fromTo}`);\n    eConditionPanel.classList.add(`ag-filter-date-${fromTo}`);\n    eConditionPanels.push(eConditionPanel);\n    eCondition.appendChild(eConditionPanel);\n    dateConditionComps.push(this.createDateCompWrapper(eConditionPanel));\n  }\n  removeValueElements(startPosition, deleteCount) {\n    this.removeDateComps(this.dateConditionFromComps, startPosition, deleteCount);\n    this.removeDateComps(this.dateConditionToComps, startPosition, deleteCount);\n    this.removeItems(this.eConditionPanelsFrom, startPosition, deleteCount);\n    this.removeItems(this.eConditionPanelsTo, startPosition, deleteCount);\n  }\n  removeDateComps(components, startPosition, deleteCount) {\n    const removedComponents = this.removeItems(components, startPosition, deleteCount);\n    removedComponents.forEach((comp) => comp.destroy());\n  }\n  isValidDateValue(value) {\n    if (value === null) {\n      return false;\n    }\n    if (this.minValidDate) {\n      if (value < this.minValidDate) {\n        return false;\n      }\n    } else {\n      if (value.getUTCFullYear() < this.minValidYear) {\n        return false;\n      }\n    }\n    if (this.maxValidDate) {\n      if (value > this.maxValidDate) {\n        return false;\n      }\n    } else {\n      if (value.getUTCFullYear() > this.maxValidYear) {\n        return false;\n      }\n    }\n    return true;\n  }\n  isConditionUiComplete(position) {\n    if (!super.isConditionUiComplete(position)) {\n      return false;\n    }\n    let valid = true;\n    this.forEachInput((element, index, elPosition, numberOfInputs) => {\n      if (elPosition !== position || !valid || index >= numberOfInputs) {\n        return;\n      }\n      valid = valid && this.isValidDateValue(element.getDate());\n    });\n    return valid;\n  }\n  areSimpleModelsEqual(aSimple, bSimple) {\n    return aSimple.dateFrom === bSimple.dateFrom && aSimple.dateTo === bSimple.dateTo && aSimple.type === bSimple.type;\n  }\n  getFilterType() {\n    return \"date\";\n  }\n  createCondition(position) {\n    const type = this.getConditionType(position);\n    const model = {};\n    const values = this.getValues(position);\n    if (values.length > 0) {\n      model.dateFrom = _serialiseDate(values[0]);\n    }\n    if (values.length > 1) {\n      model.dateTo = _serialiseDate(values[1]);\n    }\n    return {\n      dateFrom: null,\n      dateTo: null,\n      filterType: this.getFilterType(),\n      type,\n      ...model\n    };\n  }\n  resetPlaceholder() {\n    const globalTranslate = this.localeService.getLocaleTextFunc();\n    const placeholder = this.translate(\"dateFormatOoo\");\n    const ariaLabel = globalTranslate(\"ariaFilterValue\", \"Filter Value\");\n    this.forEachInput((element) => {\n      element.setInputPlaceholder(placeholder);\n      element.setInputAriaLabel(ariaLabel);\n    });\n  }\n  getInputs(position) {\n    if (position >= this.dateConditionFromComps.length) {\n      return [null, null];\n    }\n    return [this.dateConditionFromComps[position], this.dateConditionToComps[position]];\n  }\n  getValues(position) {\n    const result = [];\n    this.forEachPositionInput(position, (element, index, _elPosition, numberOfInputs) => {\n      if (index < numberOfInputs) {\n        result.push(element.getDate());\n      }\n    });\n    return result;\n  }\n  translate(key) {\n    if (key === \"lessThan\") {\n      return super.translate(\"before\");\n    }\n    if (key === \"greaterThan\") {\n      return super.translate(\"after\");\n    }\n    return super.translate(key);\n  }\n  getModelAsString(model) {\n    return this.filterModelFormatter.getModelAsString(model) ?? \"\";\n  }\n};\n\n// community-modules/core/src/rendering/features/setLeftFeature.ts\nvar SetLeftFeature = class extends BeanStub {\n  constructor(columnOrGroup, eCell, beans, colsSpanning) {\n    super();\n    this.columnOrGroup = columnOrGroup;\n    this.columnOrGroup = columnOrGroup;\n    this.eCell = eCell;\n    this.ariaEl = this.eCell.querySelector(\"[role=columnheader]\") || this.eCell;\n    this.colsSpanning = colsSpanning;\n    this.beans = beans;\n  }\n  setColsSpanning(colsSpanning) {\n    this.colsSpanning = colsSpanning;\n    this.onLeftChanged();\n  }\n  getColumnOrGroup() {\n    if (this.beans.gos.get(\"enableRtl\") && this.colsSpanning) {\n      return _last(this.colsSpanning);\n    }\n    return this.columnOrGroup;\n  }\n  postConstruct() {\n    const onLeftChanged = this.onLeftChanged.bind(this);\n    this.addManagedListeners(this.columnOrGroup, { leftChanged: onLeftChanged });\n    this.setLeftFirstTime();\n    this.addManagedEventListeners({ displayedColumnsWidthChanged: onLeftChanged });\n    this.addManagedPropertyListener(\"domLayout\", onLeftChanged);\n  }\n  setLeftFirstTime() {\n    const suppressMoveAnimation = this.beans.gos.get(\"suppressColumnMoveAnimation\");\n    const oldLeftExists = _exists(this.columnOrGroup.getOldLeft());\n    const animateColumnMove = this.beans.columnAnimationService.isActive() && oldLeftExists && !suppressMoveAnimation;\n    if (animateColumnMove) {\n      this.animateInLeft();\n    } else {\n      this.onLeftChanged();\n    }\n  }\n  animateInLeft() {\n    const colOrGroup = this.getColumnOrGroup();\n    const left = colOrGroup.getLeft();\n    const oldLeft = colOrGroup.getOldLeft();\n    const oldActualLeft = this.modifyLeftForPrintLayout(colOrGroup, oldLeft);\n    const actualLeft = this.modifyLeftForPrintLayout(colOrGroup, left);\n    this.setLeft(oldActualLeft);\n    this.actualLeft = actualLeft;\n    this.beans.columnAnimationService.executeNextVMTurn(() => {\n      if (this.actualLeft === actualLeft) {\n        this.setLeft(actualLeft);\n      }\n    });\n  }\n  onLeftChanged() {\n    const colOrGroup = this.getColumnOrGroup();\n    const left = colOrGroup.getLeft();\n    this.actualLeft = this.modifyLeftForPrintLayout(colOrGroup, left);\n    this.setLeft(this.actualLeft);\n  }\n  modifyLeftForPrintLayout(colOrGroup, leftPosition) {\n    const printLayout = _isDomLayout(this.beans.gos, \"print\");\n    if (!printLayout) {\n      return leftPosition;\n    }\n    if (colOrGroup.getPinned() === \"left\") {\n      return leftPosition;\n    }\n    const leftWidth = this.beans.visibleColsService.getColsLeftWidth();\n    if (colOrGroup.getPinned() === \"right\") {\n      const bodyWidth = this.beans.visibleColsService.getBodyContainerWidth();\n      return leftWidth + bodyWidth + leftPosition;\n    }\n    return leftWidth + leftPosition;\n  }\n  setLeft(value) {\n    if (_exists(value)) {\n      this.eCell.style.left = `${value}px`;\n    }\n    if (isColumnGroup(this.columnOrGroup)) {\n      const children = this.columnOrGroup.getLeafColumns();\n      if (!children.length) {\n        return;\n      }\n      if (children.length > 1) {\n        _setAriaColSpan(this.ariaEl, children.length);\n      }\n    }\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/cssClassApplier.ts\nvar CSS_FIRST_COLUMN = \"ag-column-first\";\nvar CSS_LAST_COLUMN = \"ag-column-last\";\nfunction _getHeaderClassesFromColDef(abstractColDef, gos, column, columnGroup) {\n  if (_missing(abstractColDef)) {\n    return [];\n  }\n  return getColumnClassesFromCollDef(abstractColDef.headerClass, abstractColDef, gos, column, columnGroup);\n}\nfunction _getToolPanelClassesFromColDef(abstractColDef, gos, column, columnGroup) {\n  if (_missing(abstractColDef)) {\n    return [];\n  }\n  return getColumnClassesFromCollDef(abstractColDef.toolPanelClass, abstractColDef, gos, column, columnGroup);\n}\nfunction refreshFirstAndLastStyles(comp, column, presentedColsService) {\n  comp.addOrRemoveCssClass(CSS_FIRST_COLUMN, presentedColsService.isColAtEdge(column, \"first\"));\n  comp.addOrRemoveCssClass(CSS_LAST_COLUMN, presentedColsService.isColAtEdge(column, \"last\"));\n}\nfunction getClassParams(abstractColDef, gos, column, columnGroup) {\n  return gos.addGridCommonParams({\n    // bad naming, as colDef here can be a group or a column,\n    // however most people won't appreciate the difference,\n    // so keeping it as colDef to avoid confusion.\n    colDef: abstractColDef,\n    column,\n    columnGroup\n  });\n}\nfunction getColumnClassesFromCollDef(classesOrFunc, abstractColDef, gos, column, columnGroup) {\n  if (_missing(classesOrFunc)) {\n    return [];\n  }\n  let classToUse;\n  if (typeof classesOrFunc === \"function\") {\n    const params = getClassParams(abstractColDef, gos, column, columnGroup);\n    classToUse = classesOrFunc(params);\n  } else {\n    classToUse = classesOrFunc;\n  }\n  if (typeof classToUse === \"string\") {\n    return [classToUse];\n  }\n  if (Array.isArray(classToUse)) {\n    return [...classToUse];\n  }\n  return [];\n}\n\n// community-modules/core/src/headerRendering/cells/abstractCell/abstractHeaderCellCtrl.ts\nvar instanceIdSequence2 = 0;\nvar _AbstractHeaderCellCtrl = class _AbstractHeaderCellCtrl extends BeanStub {\n  constructor(columnGroupChild, beans, parentRowCtrl) {\n    super();\n    this.resizeToggleTimeout = 0;\n    this.resizeMultiplier = 1;\n    this.resizeFeature = null;\n    this.lastFocusEvent = null;\n    this.dragSource = null;\n    this.columnGroupChild = columnGroupChild;\n    this.parentRowCtrl = parentRowCtrl;\n    this.beans = beans;\n    this.instanceId = columnGroupChild.getUniqueId() + \"-\" + instanceIdSequence2++;\n  }\n  wireBeans(beans) {\n    this.pinnedWidthService = beans.pinnedWidthService;\n    this.focusService = beans.focusService;\n    this.userComponentFactory = beans.userComponentFactory;\n    this.ctrlsService = beans.ctrlsService;\n    this.dragAndDropService = beans.dragAndDropService;\n    this.menuService = beans.menuService;\n  }\n  postConstruct() {\n    const refreshTabIndex = this.refreshTabIndex.bind(this);\n    this.addManagedPropertyListeners([\"suppressHeaderFocus\"], refreshTabIndex);\n    this.addManagedEventListeners({\n      overlayExclusiveChanged: refreshTabIndex\n    });\n  }\n  shouldStopEventPropagation(e) {\n    const { headerRowIndex, column } = this.focusService.getFocusedHeader();\n    return _isUserSuppressingHeaderKeyboardEvent(this.gos, e, headerRowIndex, column);\n  }\n  getWrapperHasFocus() {\n    const activeEl = _getActiveDomElement(this.gos);\n    return activeEl === this.eGui;\n  }\n  setGui(eGui, compBean) {\n    this.eGui = eGui;\n    this.addDomData(compBean);\n    compBean.addManagedListeners(this.beans.eventService, {\n      displayedColumnsChanged: this.onDisplayedColumnsChanged.bind(this)\n    });\n    compBean.addManagedElementListeners(this.eGui, {\n      focus: this.onGuiFocus.bind(this)\n    });\n    this.onDisplayedColumnsChanged();\n    this.refreshTabIndex();\n  }\n  onGuiFocus() {\n    this.eventService.dispatchEvent({\n      type: \"headerFocused\",\n      column: this.column\n    });\n  }\n  setupAutoHeight(params) {\n    const { wrapperElement, checkMeasuringCallback, compBean } = params;\n    const { animationFrameService, resizeObserverService, columnModel, gos } = this.beans;\n    const measureHeight = (timesCalled) => {\n      if (!this.isAlive() || !compBean.isAlive()) {\n        return;\n      }\n      const { paddingTop, paddingBottom, borderBottomWidth, borderTopWidth } = _getElementSize(this.getGui());\n      const extraHeight = paddingTop + paddingBottom + borderBottomWidth + borderTopWidth;\n      const wrapperHeight = wrapperElement.offsetHeight;\n      const autoHeight = wrapperHeight + extraHeight;\n      if (timesCalled < 5) {\n        const doc = _getDocument(gos);\n        const notYetInDom = !doc || !doc.contains(wrapperElement);\n        const possiblyNoContentYet = autoHeight == 0;\n        if (notYetInDom || possiblyNoContentYet) {\n          animationFrameService.requestAnimationFrame(() => measureHeight(timesCalled + 1));\n          return;\n        }\n      }\n      columnModel.setColHeaderHeight(this.column, autoHeight);\n    };\n    let isMeasuring = false;\n    let stopResizeObserver;\n    const checkMeasuring = () => {\n      const newValue = this.column.isAutoHeaderHeight();\n      if (newValue && !isMeasuring) {\n        startMeasuring();\n      }\n      if (!newValue && isMeasuring) {\n        stopMeasuring();\n      }\n    };\n    const startMeasuring = () => {\n      isMeasuring = true;\n      measureHeight(0);\n      this.comp.addOrRemoveCssClass(\"ag-header-cell-auto-height\", true);\n      stopResizeObserver = resizeObserverService.observeResize(wrapperElement, () => measureHeight(0));\n    };\n    const stopMeasuring = () => {\n      isMeasuring = false;\n      if (stopResizeObserver) {\n        stopResizeObserver();\n      }\n      this.comp.addOrRemoveCssClass(\"ag-header-cell-auto-height\", false);\n      stopResizeObserver = void 0;\n    };\n    checkMeasuring();\n    compBean.addDestroyFunc(() => stopMeasuring());\n    compBean.addManagedListeners(this.column, { widthChanged: () => isMeasuring && measureHeight(0) });\n    compBean.addManagedEventListeners({\n      sortChanged: () => {\n        if (isMeasuring) {\n          window.setTimeout(() => measureHeight(0));\n        }\n      }\n    });\n    if (checkMeasuringCallback) {\n      checkMeasuringCallback(checkMeasuring);\n    }\n  }\n  onDisplayedColumnsChanged() {\n    const { comp, column, beans, eGui } = this;\n    if (!comp || !column || !eGui) {\n      return;\n    }\n    refreshFirstAndLastStyles(comp, column, beans.visibleColsService);\n    _setAriaColIndex(eGui, beans.visibleColsService.getAriaColIndex(column));\n  }\n  addResizeAndMoveKeyboardListeners(compBean) {\n    if (!this.resizeFeature) {\n      return;\n    }\n    compBean.addManagedListeners(this.eGui, {\n      keydown: this.onGuiKeyDown.bind(this),\n      keyup: this.onGuiKeyUp.bind(this)\n    });\n  }\n  refreshTabIndex() {\n    const suppressHeaderFocus = this.focusService.isHeaderFocusSuppressed();\n    if (this.eGui) {\n      _addOrRemoveAttribute(this.eGui, \"tabindex\", suppressHeaderFocus ? null : \"-1\");\n    }\n  }\n  onGuiKeyDown(e) {\n    const activeEl = _getActiveDomElement(this.gos);\n    const isLeftOrRight = e.key === KeyCode.LEFT || e.key === KeyCode.RIGHT;\n    if (this.isResizing) {\n      e.preventDefault();\n      e.stopImmediatePropagation();\n    }\n    if (\n      // if elements within the header are focused, we don't process the event\n      activeEl !== this.eGui || // if shiftKey and altKey are not pressed, it's cell navigation so we don't process the event\n      !e.shiftKey && !e.altKey\n    ) {\n      return;\n    }\n    if (this.isResizing || isLeftOrRight) {\n      e.preventDefault();\n      e.stopImmediatePropagation();\n    }\n    if (!isLeftOrRight) {\n      return;\n    }\n    const isLeft = e.key === KeyCode.LEFT !== this.gos.get(\"enableRtl\");\n    const direction = HorizontalDirection[isLeft ? \"Left\" : \"Right\"];\n    if (e.altKey) {\n      this.isResizing = true;\n      this.resizeMultiplier += 1;\n      const diff = this.getViewportAdjustedResizeDiff(e);\n      this.resizeHeader(diff, e.shiftKey);\n      this.resizeFeature?.toggleColumnResizing(true);\n    } else {\n      this.moveHeader(direction);\n    }\n  }\n  getViewportAdjustedResizeDiff(e) {\n    let diff = this.getResizeDiff(e);\n    const pinned = this.column.getPinned();\n    if (pinned) {\n      const leftWidth = this.pinnedWidthService.getPinnedLeftWidth();\n      const rightWidth = this.pinnedWidthService.getPinnedRightWidth();\n      const bodyWidth = _getInnerWidth(this.ctrlsService.getGridBodyCtrl().getBodyViewportElement()) - 50;\n      if (leftWidth + rightWidth + diff > bodyWidth) {\n        if (bodyWidth > leftWidth + rightWidth) {\n          diff = bodyWidth - leftWidth - rightWidth;\n        } else {\n          return 0;\n        }\n      }\n    }\n    return diff;\n  }\n  getResizeDiff(e) {\n    let isLeft = e.key === KeyCode.LEFT !== this.gos.get(\"enableRtl\");\n    const pinned = this.column.getPinned();\n    const isRtl = this.gos.get(\"enableRtl\");\n    if (pinned) {\n      if (isRtl !== (pinned === \"right\")) {\n        isLeft = !isLeft;\n      }\n    }\n    return (isLeft ? -1 : 1) * this.resizeMultiplier;\n  }\n  onGuiKeyUp() {\n    if (!this.isResizing) {\n      return;\n    }\n    if (this.resizeToggleTimeout) {\n      window.clearTimeout(this.resizeToggleTimeout);\n      this.resizeToggleTimeout = 0;\n    }\n    this.isResizing = false;\n    this.resizeMultiplier = 1;\n    this.resizeToggleTimeout = window.setTimeout(() => {\n      this.resizeFeature?.toggleColumnResizing(false);\n    }, 150);\n  }\n  handleKeyDown(e) {\n    const wrapperHasFocus = this.getWrapperHasFocus();\n    switch (e.key) {\n      case KeyCode.PAGE_DOWN:\n      case KeyCode.PAGE_UP:\n      case KeyCode.PAGE_HOME:\n      case KeyCode.PAGE_END:\n        if (wrapperHasFocus) {\n          e.preventDefault();\n        }\n    }\n  }\n  addDomData(compBean) {\n    const key = _AbstractHeaderCellCtrl.DOM_DATA_KEY_HEADER_CTRL;\n    _setDomData(this.gos, this.eGui, key, this);\n    compBean.addDestroyFunc(() => _setDomData(this.gos, this.eGui, key, null));\n  }\n  getGui() {\n    return this.eGui;\n  }\n  focus(event) {\n    if (!this.eGui) {\n      return false;\n    }\n    this.lastFocusEvent = event || null;\n    this.eGui.focus();\n    return true;\n  }\n  getRowIndex() {\n    return this.parentRowCtrl.getRowIndex();\n  }\n  getParentRowCtrl() {\n    return this.parentRowCtrl;\n  }\n  getPinned() {\n    return this.parentRowCtrl.getPinned();\n  }\n  getColumnGroupChild() {\n    return this.columnGroupChild;\n  }\n  removeDragSource() {\n    if (this.dragSource) {\n      this.dragAndDropService.removeDragSource(this.dragSource);\n      this.dragSource = null;\n    }\n  }\n  handleContextMenuMouseEvent(mouseEvent, touchEvent, column) {\n    const event = mouseEvent ?? touchEvent;\n    if (this.gos.get(\"preventDefaultOnContextMenu\")) {\n      event.preventDefault();\n    }\n    if (this.menuService.isHeaderContextMenuEnabled(column)) {\n      this.menuService.showHeaderContextMenu(column, mouseEvent, touchEvent);\n    }\n    this.dispatchColumnMouseEvent(\"columnHeaderContextMenu\", column);\n  }\n  dispatchColumnMouseEvent(eventType, column) {\n    this.eventService.dispatchEvent({\n      type: eventType,\n      column\n    });\n  }\n  clearComponent() {\n    this.removeDragSource();\n    this.resizeFeature = null;\n    this.comp = null;\n    this.eGui = null;\n  }\n  destroy() {\n    super.destroy();\n    this.column = null;\n    this.lastFocusEvent = null;\n    this.columnGroupChild = null;\n    this.parentRowCtrl = null;\n  }\n};\n_AbstractHeaderCellCtrl.DOM_DATA_KEY_HEADER_CTRL = \"headerCtrl\";\nvar AbstractHeaderCellCtrl = _AbstractHeaderCellCtrl;\n\n// community-modules/core/src/headerRendering/cells/hoverFeature.ts\nvar HoverFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.columnHoverService = beans.columnHoverService;\n  }\n  constructor(columns, element) {\n    super();\n    this.columns = columns;\n    this.element = element;\n  }\n  postConstruct() {\n    if (this.gos.get(\"columnHoverHighlight\")) {\n      this.addMouseHoverListeners();\n    }\n  }\n  addMouseHoverListeners() {\n    this.addManagedListeners(this.element, {\n      mouseout: this.onMouseOut.bind(this),\n      mouseover: this.onMouseOver.bind(this)\n    });\n  }\n  onMouseOut() {\n    this.columnHoverService.clearMouseOver();\n  }\n  onMouseOver() {\n    this.columnHoverService.setMouseOver(this.columns);\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/floatingFilter/headerFilterCellCtrl.ts\nvar HeaderFilterCellCtrl = class extends AbstractHeaderCellCtrl {\n  constructor(column, beans, parentRowCtrl) {\n    super(column, beans, parentRowCtrl);\n    this.iconCreated = false;\n    this.column = column;\n  }\n  setComp(comp, eGui, eButtonShowMainFilter, eFloatingFilterBody, compBean) {\n    this.comp = comp;\n    compBean = setupCompBean(this, this.beans.context, compBean);\n    this.eButtonShowMainFilter = eButtonShowMainFilter;\n    this.eFloatingFilterBody = eFloatingFilterBody;\n    this.setGui(eGui, compBean);\n    this.setupActive();\n    this.setupWidth(compBean);\n    this.setupLeft(compBean);\n    this.setupHover(compBean);\n    this.setupFocus(compBean);\n    this.setupAria();\n    this.setupFilterButton();\n    this.setupUserComp();\n    this.setupSyncWithFilter(compBean);\n    this.setupUi();\n    compBean.addManagedElementListeners(this.eButtonShowMainFilter, { click: this.showParentFilter.bind(this) });\n    this.setupFilterChangedListener(compBean);\n    compBean.addManagedListeners(this.column, { colDefChanged: () => this.onColDefChanged(compBean) });\n    compBean.addDestroyFunc(() => {\n      this.eButtonShowMainFilter = null;\n      this.eFloatingFilterBody = null;\n      this.userCompDetails = null;\n      this.clearComponent();\n    });\n  }\n  // empty abstract method\n  resizeHeader() {\n  }\n  // empty abstract method\n  moveHeader() {\n  }\n  setupActive() {\n    const colDef = this.column.getColDef();\n    const filterExists = !!colDef.filter;\n    const floatingFilterExists = !!colDef.floatingFilter;\n    this.active = filterExists && floatingFilterExists;\n  }\n  setupUi() {\n    this.comp.setButtonWrapperDisplayed(!this.suppressFilterButton && this.active);\n    this.comp.addOrRemoveBodyCssClass(\"ag-floating-filter-full-body\", this.suppressFilterButton);\n    this.comp.addOrRemoveBodyCssClass(\"ag-floating-filter-body\", !this.suppressFilterButton);\n    if (!this.active || this.iconCreated) {\n      return;\n    }\n    const eMenuIcon = _createIconNoSpan(\"filter\", this.gos, this.column);\n    if (eMenuIcon) {\n      this.iconCreated = true;\n      this.eButtonShowMainFilter.appendChild(eMenuIcon);\n    }\n  }\n  setupFocus(compBean) {\n    compBean.createManagedBean(\n      new ManagedFocusFeature(this.eGui, {\n        shouldStopEventPropagation: this.shouldStopEventPropagation.bind(this),\n        onTabKeyDown: this.onTabKeyDown.bind(this),\n        handleKeyDown: this.handleKeyDown.bind(this),\n        onFocusIn: this.onFocusIn.bind(this)\n      })\n    );\n  }\n  setupAria() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    _setAriaLabel(this.eButtonShowMainFilter, localeTextFunc(\"ariaFilterMenuOpen\", \"Open Filter Menu\"));\n  }\n  onTabKeyDown(e) {\n    const activeEl = _getActiveDomElement(this.gos);\n    const wrapperHasFocus = activeEl === this.eGui;\n    if (wrapperHasFocus) {\n      return;\n    }\n    const nextFocusableEl = this.focusService.findNextFocusableElement(this.eGui, null, e.shiftKey);\n    if (nextFocusableEl) {\n      this.beans.headerNavigationService.scrollToColumn(this.column);\n      e.preventDefault();\n      nextFocusableEl.focus();\n      return;\n    }\n    const nextFocusableColumn = this.findNextColumnWithFloatingFilter(e.shiftKey);\n    if (!nextFocusableColumn) {\n      return;\n    }\n    if (this.focusService.focusHeaderPosition({\n      headerPosition: {\n        headerRowIndex: this.getParentRowCtrl().getRowIndex(),\n        column: nextFocusableColumn\n      },\n      event: e\n    })) {\n      e.preventDefault();\n    }\n  }\n  findNextColumnWithFloatingFilter(backwards) {\n    const presentedColsService = this.beans.visibleColsService;\n    let nextCol = this.column;\n    do {\n      nextCol = backwards ? presentedColsService.getColBefore(nextCol) : presentedColsService.getColAfter(nextCol);\n      if (!nextCol) {\n        break;\n      }\n    } while (!nextCol.getColDef().filter || !nextCol.getColDef().floatingFilter);\n    return nextCol;\n  }\n  handleKeyDown(e) {\n    super.handleKeyDown(e);\n    const wrapperHasFocus = this.getWrapperHasFocus();\n    switch (e.key) {\n      case KeyCode.UP:\n      case KeyCode.DOWN:\n        if (!wrapperHasFocus) {\n          e.preventDefault();\n        }\n      case KeyCode.LEFT:\n      case KeyCode.RIGHT:\n        if (wrapperHasFocus) {\n          return;\n        }\n        e.stopPropagation();\n      case KeyCode.ENTER:\n        if (wrapperHasFocus) {\n          if (this.focusService.focusInto(this.eGui)) {\n            e.preventDefault();\n          }\n        }\n        break;\n      case KeyCode.ESCAPE:\n        if (!wrapperHasFocus) {\n          this.eGui.focus();\n        }\n    }\n  }\n  onFocusIn(e) {\n    const isRelatedWithin = this.eGui.contains(e.relatedTarget);\n    if (isRelatedWithin) {\n      return;\n    }\n    const notFromHeaderWrapper = !!e.relatedTarget && !e.relatedTarget.classList.contains(\"ag-floating-filter\");\n    const fromWithinHeader = !!e.relatedTarget && _isElementChildOfClass(e.relatedTarget, \"ag-floating-filter\");\n    if (notFromHeaderWrapper && fromWithinHeader && e.target === this.eGui) {\n      const lastFocusEvent = this.lastFocusEvent;\n      const fromTab = !!(lastFocusEvent && lastFocusEvent.key === KeyCode.TAB);\n      if (lastFocusEvent && fromTab) {\n        const shouldFocusLast = lastFocusEvent.shiftKey;\n        this.focusService.focusInto(this.eGui, shouldFocusLast);\n      }\n    }\n    const rowIndex = this.getRowIndex();\n    this.beans.focusService.setFocusedHeader(rowIndex, this.column);\n  }\n  setupHover(compBean) {\n    compBean.createManagedBean(new HoverFeature([this.column], this.eGui));\n    const listener = () => {\n      if (!this.gos.get(\"columnHoverHighlight\")) {\n        return;\n      }\n      const hovered = this.beans.columnHoverService.isHovered(this.column);\n      this.comp.addOrRemoveCssClass(\"ag-column-hover\", hovered);\n    };\n    compBean.addManagedEventListeners({ columnHoverChanged: listener });\n    listener();\n  }\n  setupLeft(compBean) {\n    const setLeftFeature = new SetLeftFeature(this.column, this.eGui, this.beans);\n    compBean.createManagedBean(setLeftFeature);\n  }\n  setupFilterButton() {\n    this.suppressFilterButton = !this.menuService.isFloatingFilterButtonEnabled(this.column);\n    this.highlightFilterButtonWhenActive = !this.menuService.isLegacyMenuEnabled();\n  }\n  setupUserComp() {\n    if (!this.active) {\n      return;\n    }\n    const compDetails = this.beans.filterManager?.getFloatingFilterCompDetails(\n      this.column,\n      () => this.showParentFilter()\n    );\n    if (compDetails) {\n      this.setCompDetails(compDetails);\n    }\n  }\n  setCompDetails(compDetails) {\n    this.userCompDetails = compDetails;\n    this.comp.setCompDetails(compDetails);\n  }\n  showParentFilter() {\n    const eventSource = this.suppressFilterButton ? this.eFloatingFilterBody : this.eButtonShowMainFilter;\n    this.menuService.showFilterMenu({\n      column: this.column,\n      buttonElement: eventSource,\n      containerType: \"floatingFilter\",\n      positionBy: \"button\"\n    });\n  }\n  setupSyncWithFilter(compBean) {\n    if (!this.active) {\n      return;\n    }\n    const { filterManager } = this.beans;\n    const syncWithFilter = (event) => {\n      if (event?.source === \"filterDestroyed\" && !this.isAlive()) {\n        return;\n      }\n      const compPromise = this.comp.getFloatingFilterComp();\n      if (!compPromise) {\n        return;\n      }\n      compPromise.then((comp) => {\n        if (comp) {\n          const parentModel = filterManager?.getCurrentFloatingFilterParentModel(this.column);\n          const filterChangedEvent = event ? {\n            // event can have additional params like `afterDataChange` which need to be passed through\n            ...event,\n            columns: event.columns ?? [],\n            source: event.source === \"api\" ? \"api\" : \"columnFilter\"\n          } : null;\n          comp.onParentModelChanged(parentModel, filterChangedEvent);\n        }\n      });\n    };\n    [this.destroySyncListener] = compBean.addManagedListeners(this.column, { filterChanged: syncWithFilter });\n    if (filterManager?.isFilterActive(this.column)) {\n      syncWithFilter(null);\n    }\n  }\n  setupWidth(compBean) {\n    const listener = () => {\n      const width = `${this.column.getActualWidth()}px`;\n      this.comp.setWidth(width);\n    };\n    compBean.addManagedListeners(this.column, { widthChanged: listener });\n    listener();\n  }\n  setupFilterChangedListener(compBean) {\n    if (this.active) {\n      [this.destroyFilterChangedListener] = compBean.addManagedListeners(this.column, {\n        filterChanged: this.updateFilterButton.bind(this)\n      });\n      this.updateFilterButton();\n    }\n  }\n  updateFilterButton() {\n    if (!this.suppressFilterButton && this.comp) {\n      const isFilterAllowed = !!this.beans.filterManager?.isFilterAllowed(this.column);\n      this.comp.setButtonWrapperDisplayed(isFilterAllowed);\n      if (this.highlightFilterButtonWhenActive && isFilterAllowed) {\n        this.eButtonShowMainFilter.classList.toggle(\"ag-filter-active\", this.column.isFilterActive());\n      }\n    }\n  }\n  onColDefChanged(compBean) {\n    const wasActive = this.active;\n    this.setupActive();\n    const becomeActive = !wasActive && this.active;\n    if (wasActive && !this.active) {\n      this.destroySyncListener();\n      this.destroyFilterChangedListener();\n    }\n    const newCompDetails = this.active ? this.beans.filterManager?.getFloatingFilterCompDetails(this.column, () => this.showParentFilter()) : null;\n    const compPromise = this.comp.getFloatingFilterComp();\n    if (!compPromise || !newCompDetails) {\n      this.updateCompDetails(compBean, newCompDetails, becomeActive);\n    } else {\n      compPromise.then((compInstance) => {\n        if (!compInstance || this.beans.filterManager?.areFilterCompsDifferent(this.userCompDetails ?? null, newCompDetails)) {\n          this.updateCompDetails(compBean, newCompDetails, becomeActive);\n        } else {\n          this.updateFloatingFilterParams(newCompDetails);\n        }\n      });\n    }\n  }\n  updateCompDetails(compBean, compDetails, becomeActive) {\n    if (!this.isAlive()) {\n      return;\n    }\n    this.setCompDetails(compDetails);\n    this.setupFilterButton();\n    this.setupUi();\n    if (becomeActive) {\n      this.setupSyncWithFilter(compBean);\n      this.setupFilterChangedListener(compBean);\n    }\n  }\n  updateFloatingFilterParams(userCompDetails) {\n    if (!userCompDetails) {\n      return;\n    }\n    const params = userCompDetails.params;\n    this.comp.getFloatingFilterComp()?.then((floatingFilter) => {\n      let hasRefreshed = false;\n      if (floatingFilter?.refresh && typeof floatingFilter.refresh === \"function\") {\n        const result = floatingFilter.refresh(params);\n        if (result !== null) {\n          hasRefreshed = true;\n        }\n      }\n      if (!hasRefreshed && floatingFilter?.onParamsUpdated && typeof floatingFilter.onParamsUpdated === \"function\") {\n        const result = floatingFilter.onParamsUpdated(params);\n        if (result !== null) {\n          _warnOnce(`Custom floating filter method 'onParamsUpdated' is deprecated. Use 'refresh' instead.`);\n        }\n      }\n    });\n  }\n  destroy() {\n    super.destroy();\n    this.destroySyncListener = null;\n    this.destroyFilterChangedListener = null;\n  }\n};\n\n// community-modules/core/src/interfaces/iModule.ts\nfunction _defineModule(definition) {\n  return definition;\n}\n\n// community-modules/core/src/version.ts\nvar VERSION = \"32.3.9\";\n\n// community-modules/core/src/filter/columnFilterApi.ts\nfunction isColumnFilterPresent(beans) {\n  return !!beans.filterManager?.isColumnFilterPresent() || !!beans.filterManager?.isAggregateFilterPresent();\n}\nfunction getFilterInstance(beans, key, callback) {\n  return beans.filterManager?.getFilterInstance(key, callback);\n}\nfunction getColumnFilterInstance(beans, key) {\n  return beans.filterManager?.getColumnFilterInstance(key) ?? Promise.resolve(void 0);\n}\nfunction destroyFilter(beans, key) {\n  const column = beans.columnModel.getColDefCol(key);\n  if (column) {\n    return beans.filterManager?.destroyFilter(column, \"api\");\n  }\n}\nfunction setFilterModel(beans, model) {\n  beans.frameworkOverrides.wrapIncoming(() => beans.filterManager?.setFilterModel(model));\n}\nfunction getFilterModel(beans) {\n  return beans.filterManager?.getFilterModel() ?? {};\n}\nfunction getColumnFilterModel(beans, column) {\n  return beans.filterManager?.getColumnFilterModel(column) ?? null;\n}\nfunction setColumnFilterModel(beans, column, model) {\n  return beans.filterManager?.setColumnFilterModel(column, model) ?? Promise.resolve();\n}\nfunction showColumnFilter(beans, colKey) {\n  const column = beans.columnModel.getCol(colKey);\n  if (!column) {\n    _errorOnce(`column '${colKey}' not found`);\n    return;\n  }\n  beans.menuService.showFilterMenu({\n    column,\n    containerType: \"columnFilter\",\n    positionBy: \"auto\"\n  });\n}\n\n// community-modules/core/src/filter/floating/floatingFilterMapper.ts\nfunction getDefaultFloatingFilterType(frameworkOverrides, def, getFromDefault) {\n  if (def == null) {\n    return null;\n  }\n  let defaultFloatingFilterType = null;\n  const { compName, jsComp, fwComp } = UserComponentFactory.getCompKeys(frameworkOverrides, def, FilterComponent);\n  if (compName) {\n    const floatingFilterTypeMap = {\n      set: \"agSetColumnFloatingFilter\",\n      agSetColumnFilter: \"agSetColumnFloatingFilter\",\n      multi: \"agMultiColumnFloatingFilter\",\n      agMultiColumnFilter: \"agMultiColumnFloatingFilter\",\n      group: \"agGroupColumnFloatingFilter\",\n      agGroupColumnFilter: \"agGroupColumnFloatingFilter\",\n      number: \"agNumberColumnFloatingFilter\",\n      agNumberColumnFilter: \"agNumberColumnFloatingFilter\",\n      date: \"agDateColumnFloatingFilter\",\n      agDateColumnFilter: \"agDateColumnFloatingFilter\",\n      text: \"agTextColumnFloatingFilter\",\n      agTextColumnFilter: \"agTextColumnFloatingFilter\"\n    };\n    defaultFloatingFilterType = floatingFilterTypeMap[compName];\n  } else {\n    const usingDefaultFilter = jsComp == null && fwComp == null && def.filter === true;\n    if (usingDefaultFilter) {\n      defaultFloatingFilterType = getFromDefault();\n    }\n  }\n  return defaultFloatingFilterType;\n}\n\n// community-modules/core/src/filter/columnFilterService.ts\nvar MONTH_LOCALE_TEXT = {\n  january: \"January\",\n  february: \"February\",\n  march: \"March\",\n  april: \"April\",\n  may: \"May\",\n  june: \"June\",\n  july: \"July\",\n  august: \"August\",\n  september: \"September\",\n  october: \"October\",\n  november: \"November\",\n  december: \"December\"\n};\nvar MONTH_KEYS = [\n  \"january\",\n  \"february\",\n  \"march\",\n  \"april\",\n  \"may\",\n  \"june\",\n  \"july\",\n  \"august\",\n  \"september\",\n  \"october\",\n  \"november\",\n  \"december\"\n];\nvar ColumnFilterService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnFilterService\";\n    this.allColumnFilters = /* @__PURE__ */ new Map();\n    this.allColumnListeners = /* @__PURE__ */ new Map();\n    this.activeAggregateFilters = [];\n    this.activeColumnFilters = [];\n    // this is true when the grid is processing the filter change. this is used by the cell comps, so that they\n    // don't flash when data changes due to filter changes. there is no need to flash when filter changes as the\n    // user is in control, so doesn't make sense to show flashing changes. for example, go to main demo where\n    // this feature is turned off (hack code to always return false for isSuppressFlashingCellsBecauseFiltering(), put in)\n    // 100,000 rows and group by country. then do some filtering. all the cells flash, which is silly.\n    this.processingFilterChange = false;\n    // when we're waiting for cell data types to be inferred, we need to defer filter model updates\n    this.filterModelUpdateQueue = [];\n    this.columnFilterModelUpdateQueue = [];\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.columnModel = beans.columnModel;\n    this.rowModel = beans.rowModel;\n    this.userComponentFactory = beans.userComponentFactory;\n    this.rowRenderer = beans.rowRenderer;\n    this.dataTypeService = beans.dataTypeService;\n    this.filterManager = beans.filterManager;\n  }\n  postConstruct() {\n    this.addManagedEventListeners({\n      gridColumnsChanged: this.onColumnsChanged.bind(this),\n      rowDataUpdated: () => this.onNewRowsLoaded(\"rowDataUpdated\"),\n      dataTypesInferred: this.processFilterModelUpdateQueue.bind(this)\n    });\n    this.initialFilterModel = {\n      ...this.gos.get(\"initialState\")?.filter?.filterModel ?? {}\n    };\n  }\n  setFilterModel(model, source = \"api\") {\n    if (this.dataTypeService?.isPendingInference()) {\n      this.filterModelUpdateQueue.push({ model, source });\n      return;\n    }\n    const allPromises = [];\n    const previousModel = this.getFilterModel(true);\n    if (model) {\n      const modelKeys = new Set(Object.keys(model));\n      this.allColumnFilters.forEach((filterWrapper, colId) => {\n        const newModel = model[colId];\n        allPromises.push(this.setModelOnFilterWrapper(filterWrapper.filterPromise, newModel));\n        modelKeys.delete(colId);\n      });\n      modelKeys.forEach((colId) => {\n        const column = this.columnModel.getColDefCol(colId) || this.columnModel.getCol(colId);\n        if (!column) {\n          _warnOnce(\"setFilterModel() - no column found for colId: \" + colId);\n          return;\n        }\n        if (!column.isFilterAllowed()) {\n          _warnOnce(\"setFilterModel() - unable to fully apply model, filtering disabled for colId: \" + colId);\n          return;\n        }\n        const filterWrapper = this.getOrCreateFilterWrapper(column);\n        if (!filterWrapper) {\n          _warnOnce(\n            \"setFilterModel() - unable to fully apply model, unable to create filter for colId: \" + colId\n          );\n          return;\n        }\n        allPromises.push(this.setModelOnFilterWrapper(filterWrapper.filterPromise, model[colId]));\n      });\n    } else {\n      this.allColumnFilters.forEach((filterWrapper) => {\n        allPromises.push(this.setModelOnFilterWrapper(filterWrapper.filterPromise, null));\n      });\n    }\n    AgPromise.all(allPromises).then(() => {\n      const currentModel = this.getFilterModel(true);\n      const columns = [];\n      this.allColumnFilters.forEach((filterWrapper, colId) => {\n        const before = previousModel ? previousModel[colId] : null;\n        const after = currentModel ? currentModel[colId] : null;\n        if (!_jsonEquals(before, after)) {\n          columns.push(filterWrapper.column);\n        }\n      });\n      if (columns.length > 0) {\n        this.filterManager?.onFilterChanged({ columns, source });\n      }\n    });\n  }\n  setModelOnFilterWrapper(filterPromise, newModel) {\n    return new AgPromise((resolve) => {\n      filterPromise.then((filter) => {\n        if (typeof filter.setModel !== \"function\") {\n          _warnOnce(\"filter missing setModel method, which is needed for setFilterModel\");\n          resolve();\n        }\n        (filter.setModel(newModel) || AgPromise.resolve()).then(() => resolve());\n      });\n    });\n  }\n  getFilterModel(excludeInitialState) {\n    const result = {};\n    const { allColumnFilters, initialFilterModel } = this;\n    allColumnFilters.forEach((filterWrapper, key) => {\n      const model = this.getModelFromFilterWrapper(filterWrapper);\n      if (_exists(model)) {\n        result[key] = model;\n      }\n    });\n    if (!excludeInitialState) {\n      Object.entries(initialFilterModel).forEach(([colId, model]) => {\n        if (_exists(model) && !allColumnFilters.has(colId) && this.columnModel.getCol(colId)?.isFilterAllowed()) {\n          result[colId] = model;\n        }\n      });\n    }\n    return result;\n  }\n  getModelFromFilterWrapper(filterWrapper) {\n    const { filter } = filterWrapper;\n    if (filter) {\n      if (typeof filter.getModel !== \"function\") {\n        _warnOnce(\"filter API missing getModel method, which is needed for getFilterModel\");\n        return null;\n      }\n      return filter.getModel();\n    } else {\n      return this.getModelFromInitialState(filterWrapper.column);\n    }\n  }\n  getModelFromInitialState(column) {\n    return this.initialFilterModel[column.getColId()] ?? null;\n  }\n  isColumnFilterPresent() {\n    return this.activeColumnFilters.length > 0;\n  }\n  isAggregateFilterPresent() {\n    return !!this.activeAggregateFilters.length;\n  }\n  disableColumnFilters() {\n    if (this.allColumnFilters.size) {\n      this.allColumnFilters.forEach(\n        (filterWrapper) => this.disposeFilterWrapper(filterWrapper, \"advancedFilterEnabled\")\n      );\n      return true;\n    }\n    return false;\n  }\n  doAggregateFiltersPass(node, filterToSkip) {\n    return this.doColumnFiltersPass(node, filterToSkip, true);\n  }\n  updateActiveFilters() {\n    const isFilterActive = (filter) => {\n      if (!filter) {\n        return false;\n      }\n      if (!filter.isFilterActive) {\n        _warnOnce(\"Filter is missing isFilterActive() method\");\n        return false;\n      }\n      return filter.isFilterActive();\n    };\n    const groupFilterEnabled = !!_getGroupAggFiltering(this.gos);\n    const isAggFilter = (column) => {\n      const isSecondary = !column.isPrimary();\n      if (isSecondary) {\n        return true;\n      }\n      const isShowingPrimaryColumns = !this.columnModel.isPivotActive();\n      const isValueActive = column.isValueActive();\n      if (!isValueActive || !isShowingPrimaryColumns) {\n        return false;\n      }\n      if (this.columnModel.isPivotMode()) {\n        return true;\n      }\n      return groupFilterEnabled;\n    };\n    const activeAggregateFilters = [];\n    const activeColumnFilters = [];\n    return this.forEachColumnFilter((filter, filterWrapper) => {\n      const filterActive = isFilterActive(filter);\n      if (filterActive) {\n        if (isAggFilter(filterWrapper.column)) {\n          activeAggregateFilters.push(filter);\n        } else {\n          activeColumnFilters.push(filter);\n        }\n      }\n    }).then(() => {\n      this.activeAggregateFilters = activeAggregateFilters;\n      this.activeColumnFilters = activeColumnFilters;\n    });\n  }\n  updateFilterFlagInColumns(source, additionalEventAttributes) {\n    return this.forEachColumnFilter(\n      (filter, filterWrapper) => filterWrapper.column.setFilterActive(filter.isFilterActive(), source, additionalEventAttributes)\n    );\n  }\n  forEachColumnFilter(callback) {\n    return AgPromise.all(\n      Array.from(this.allColumnFilters.values()).map(\n        (filterWrapper) => filterWrapper.filterPromise.then((filter) => callback(filter, filterWrapper))\n      )\n    );\n  }\n  doColumnFiltersPass(node, filterToSkip, targetAggregates) {\n    const { data, aggData } = node;\n    const targetedFilters = targetAggregates ? this.activeAggregateFilters : this.activeColumnFilters;\n    const targetedData = targetAggregates ? aggData : data;\n    for (let i = 0; i < targetedFilters.length; i++) {\n      const filter = targetedFilters[i];\n      if (filter == null || filter === filterToSkip) {\n        continue;\n      }\n      if (typeof filter.doesFilterPass !== \"function\") {\n        throw new Error(\"Filter is missing method doesFilterPass\");\n      }\n      if (!filter.doesFilterPass({ node, data: targetedData })) {\n        return false;\n      }\n    }\n    return true;\n  }\n  // sometimes (especially in React) the filter can call onFilterChanged when we are in the middle\n  // of a render cycle. this would be bad, so we wait for render cycle to complete when this happens.\n  // this happens in react when we change React State in the grid (eg setting RowCtrl's in RowContainer)\n  // which results in React State getting applied in the main application, triggering a useEffect() to\n  // be kicked off adn then the application calling the grid's API. in AG-6554, the custom filter was\n  // getting it's useEffect() triggered in this way.\n  callOnFilterChangedOutsideRenderCycle(params) {\n    const action = () => this.filterManager?.onFilterChanged(params);\n    if (this.rowRenderer.isRefreshInProgress()) {\n      setTimeout(action, 0);\n    } else {\n      action();\n    }\n  }\n  updateBeforeFilterChanged(params = {}) {\n    const { filterInstance, additionalEventAttributes } = params;\n    this.updateDependentFilters();\n    return this.updateActiveFilters().then(\n      () => this.updateFilterFlagInColumns(\"filterChanged\", additionalEventAttributes).then(() => {\n        this.allColumnFilters.forEach((filterWrapper) => {\n          if (!filterWrapper.filterPromise) {\n            return;\n          }\n          filterWrapper.filterPromise.then((filter) => {\n            if (filter && filter !== filterInstance && filter.onAnyFilterChanged) {\n              filter.onAnyFilterChanged();\n            }\n          });\n        });\n        this.processingFilterChange = true;\n      })\n    );\n  }\n  updateAfterFilterChanged() {\n    this.processingFilterChange = false;\n  }\n  isSuppressFlashingCellsBecauseFiltering() {\n    const allowShowChangeAfterFilter = this.gos.get(\"allowShowChangeAfterFilter\") ?? false;\n    return !allowShowChangeAfterFilter && this.processingFilterChange;\n  }\n  onNewRowsLoaded(source) {\n    this.forEachColumnFilter((filter) => {\n      if (filter.onNewRowsLoaded) {\n        filter.onNewRowsLoaded();\n      }\n    }).then(() => this.updateFilterFlagInColumns(source, { afterDataChange: true })).then(() => this.updateActiveFilters());\n  }\n  createValueGetter(column) {\n    return ({ node }) => this.valueService.getValue(column, node, true);\n  }\n  createGetValue(filterColumn) {\n    return (rowNode, column) => {\n      const columnToUse = column ? this.columnModel.getCol(column) : filterColumn;\n      return columnToUse ? this.valueService.getValue(columnToUse, rowNode, true) : void 0;\n    };\n  }\n  isFilterActive(column) {\n    const { filter } = this.cachedFilter(column) ?? {};\n    if (filter) {\n      return filter.isFilterActive();\n    }\n    return this.getModelFromInitialState(column) != null;\n  }\n  getOrCreateFilterWrapper(column) {\n    if (!column.isFilterAllowed()) {\n      return null;\n    }\n    let filterWrapper = this.cachedFilter(column);\n    if (!filterWrapper) {\n      filterWrapper = this.createFilterWrapper(column);\n      this.setColumnFilterWrapper(column, filterWrapper);\n    }\n    return filterWrapper;\n  }\n  cachedFilter(column) {\n    return this.allColumnFilters.get(column.getColId());\n  }\n  getDefaultFilter(column) {\n    let defaultFilter;\n    if (_isSetFilterByDefault(this.gos)) {\n      defaultFilter = \"agSetColumnFilter\";\n    } else {\n      const cellDataType = this.dataTypeService?.getBaseDataType(column);\n      if (cellDataType === \"number\") {\n        defaultFilter = \"agNumberColumnFilter\";\n      } else if (cellDataType === \"date\" || cellDataType === \"dateString\") {\n        defaultFilter = \"agDateColumnFilter\";\n      } else {\n        defaultFilter = \"agTextColumnFilter\";\n      }\n    }\n    return defaultFilter;\n  }\n  getDefaultFloatingFilter(column) {\n    let defaultFloatingFilterType;\n    if (_isSetFilterByDefault(this.gos)) {\n      defaultFloatingFilterType = \"agSetColumnFloatingFilter\";\n    } else {\n      const cellDataType = this.dataTypeService?.getBaseDataType(column);\n      if (cellDataType === \"number\") {\n        defaultFloatingFilterType = \"agNumberColumnFloatingFilter\";\n      } else if (cellDataType === \"date\" || cellDataType === \"dateString\") {\n        defaultFloatingFilterType = \"agDateColumnFloatingFilter\";\n      } else {\n        defaultFloatingFilterType = \"agTextColumnFloatingFilter\";\n      }\n    }\n    return defaultFloatingFilterType;\n  }\n  createFilterInstance(column, filterWrapper) {\n    const defaultFilter = this.getDefaultFilter(column);\n    const colDef = column.getColDef();\n    let filterInstance;\n    const params = {\n      ...this.createFilterParams(column, colDef),\n      filterModifiedCallback: () => this.filterModifiedCallbackFactory(filterInstance, column)(),\n      filterChangedCallback: (additionalEventAttributes) => this.filterChangedCallbackFactory(filterInstance, column)(additionalEventAttributes),\n      doesRowPassOtherFilter: (node) => this.filterManager ? this.filterManager.doesRowPassOtherFilters(filterInstance, node) : true\n    };\n    const compDetails = this.userComponentFactory.getFilterDetails(colDef, params, defaultFilter);\n    if (!compDetails) {\n      return { filterPromise: null, compDetails: null };\n    }\n    return {\n      filterPromise: () => {\n        const filterPromise = compDetails.newAgStackInstance();\n        if (filterPromise != null) {\n          filterPromise.then((r) => {\n            filterInstance = r;\n            if (filterWrapper) {\n              filterWrapper.filter = r;\n            }\n          });\n        }\n        return filterPromise;\n      },\n      compDetails\n    };\n  }\n  createFilterParams(column, colDef) {\n    const params = this.gos.addGridCommonParams({\n      column,\n      colDef: _cloneObject(colDef),\n      rowModel: this.rowModel,\n      filterChangedCallback: () => {\n      },\n      filterModifiedCallback: () => {\n      },\n      valueGetter: this.createValueGetter(column),\n      getValue: this.createGetValue(column),\n      doesRowPassOtherFilter: () => true\n    });\n    return params;\n  }\n  createFilterWrapper(column) {\n    const filterWrapper = {\n      column,\n      filterPromise: null,\n      compiledElement: null,\n      compDetails: null\n    };\n    const { filterPromise, compDetails } = this.createFilterInstance(column, filterWrapper);\n    filterWrapper.filterPromise = filterPromise?.() ?? null;\n    filterWrapper.compDetails = compDetails;\n    return filterWrapper;\n  }\n  onColumnsChanged() {\n    const columns = [];\n    this.allColumnFilters.forEach((wrapper, colId) => {\n      let currentColumn;\n      if (wrapper.column.isPrimary()) {\n        currentColumn = this.columnModel.getColDefCol(colId);\n      } else {\n        currentColumn = this.columnModel.getCol(colId);\n      }\n      if (currentColumn && currentColumn === wrapper.column) {\n        return;\n      }\n      columns.push(wrapper.column);\n      this.disposeFilterWrapper(wrapper, \"columnChanged\");\n      this.disposeColumnListener(colId);\n    });\n    const allFiltersAreGroupFilters = columns.every(\n      (column) => column.getColDef().filter === \"agGroupColumnFilter\"\n    );\n    if (columns.length > 0 && !allFiltersAreGroupFilters) {\n      this.filterManager?.onFilterChanged({ columns, source: \"api\" });\n    } else {\n      this.updateDependentFilters();\n    }\n  }\n  updateDependentFilters() {\n    const groupColumns = this.columnModel.getAutoCols();\n    groupColumns?.forEach((groupColumn) => {\n      if (groupColumn.getColDef().filter === \"agGroupColumnFilter\") {\n        this.getOrCreateFilterWrapper(groupColumn);\n      }\n    });\n  }\n  // for group filters, can change dynamically whether they are allowed or not\n  isFilterAllowed(column) {\n    const isFilterAllowed = column.isFilterAllowed();\n    if (!isFilterAllowed) {\n      return false;\n    }\n    const { filter } = this.allColumnFilters.get(column.getColId()) ?? {};\n    if (filter) {\n      return typeof filter?.isFilterAllowed === \"function\" ? filter.isFilterAllowed() : true;\n    }\n    return true;\n  }\n  getFloatingFilterCompDetails(column, showParentFilter) {\n    const parentFilterInstance = (callback) => {\n      const filterComponent = this.getOrCreateFilterWrapper(column)?.filterPromise;\n      if (filterComponent == null) {\n        return;\n      }\n      filterComponent.then((instance) => {\n        callback(_unwrapUserComp(instance));\n      });\n    };\n    const colDef = column.getColDef();\n    const filterParams = {\n      ...this.createFilterParams(column, colDef),\n      filterChangedCallback: () => parentFilterInstance(\n        (filterInstance) => this.filterChangedCallbackFactory(filterInstance, column)()\n      )\n    };\n    const finalFilterParams = this.userComponentFactory.mergeParamsWithApplicationProvidedParams(\n      colDef,\n      FilterComponent,\n      filterParams\n    );\n    let defaultFloatingFilterType = getDefaultFloatingFilterType(\n      this.frameworkOverrides,\n      colDef,\n      () => this.getDefaultFloatingFilter(column)\n    );\n    if (defaultFloatingFilterType == null) {\n      defaultFloatingFilterType = \"agReadOnlyFloatingFilter\";\n    }\n    const params = {\n      column,\n      filterParams: finalFilterParams,\n      currentParentModel: () => this.getCurrentFloatingFilterParentModel(column),\n      parentFilterInstance,\n      showParentFilter,\n      suppressFilterButton: false\n      // This one might be overridden from the colDef\n    };\n    return this.userComponentFactory.getFloatingFilterCompDetails(colDef, params, defaultFloatingFilterType);\n  }\n  getCurrentFloatingFilterParentModel(column) {\n    return this.getModelFromFilterWrapper(this.cachedFilter(column) ?? { column });\n  }\n  // destroys the filter, so it no longer takes part\n  destroyFilter(column, source = \"api\") {\n    const colId = column.getColId();\n    const filterWrapper = this.allColumnFilters.get(colId);\n    this.disposeColumnListener(colId);\n    delete this.initialFilterModel[colId];\n    if (filterWrapper) {\n      this.disposeFilterWrapper(filterWrapper, source);\n      this.filterManager?.onFilterChanged({\n        columns: [column],\n        source: \"api\"\n      });\n    }\n  }\n  disposeColumnListener(colId) {\n    const columnListener = this.allColumnListeners.get(colId);\n    if (columnListener) {\n      this.allColumnListeners.delete(colId);\n      columnListener();\n    }\n  }\n  disposeFilterWrapper(filterWrapper, source) {\n    filterWrapper.filterPromise.then((filter) => {\n      this.destroyBean(filter);\n      filterWrapper.column.setFilterActive(false, \"filterDestroyed\");\n      this.allColumnFilters.delete(filterWrapper.column.getColId());\n      this.eventService.dispatchEvent({\n        type: \"filterDestroyed\",\n        source,\n        column: filterWrapper.column\n      });\n    });\n  }\n  filterModifiedCallbackFactory(filter, column) {\n    return () => {\n      this.eventService.dispatchEvent({\n        type: \"filterModified\",\n        column,\n        filterInstance: filter\n      });\n    };\n  }\n  filterChangedCallbackFactory(filter, column) {\n    return (additionalEventAttributes) => {\n      const source = additionalEventAttributes?.source ?? \"columnFilter\";\n      const params = {\n        filter,\n        additionalEventAttributes,\n        columns: [column],\n        source\n      };\n      this.callOnFilterChangedOutsideRenderCycle(params);\n    };\n  }\n  checkDestroyFilter(colId) {\n    const filterWrapper = this.allColumnFilters.get(colId);\n    if (!filterWrapper) {\n      return;\n    }\n    const column = filterWrapper.column;\n    const { compDetails } = column.isFilterAllowed() ? this.createFilterInstance(column) : { compDetails: null };\n    if (this.areFilterCompsDifferent(filterWrapper.compDetails, compDetails)) {\n      this.destroyFilter(column, \"paramsUpdated\");\n      return;\n    }\n    const newFilterParams = column.getColDef().filterParams;\n    if (!filterWrapper.filterPromise) {\n      this.destroyFilter(column, \"paramsUpdated\");\n      return;\n    }\n    filterWrapper.filterPromise.then((filter) => {\n      const shouldRefreshFilter = filter?.refresh ? filter.refresh({\n        ...this.createFilterParams(column, column.getColDef()),\n        filterModifiedCallback: this.filterModifiedCallbackFactory(filter, column),\n        filterChangedCallback: this.filterChangedCallbackFactory(filter, column),\n        doesRowPassOtherFilter: (node) => this.filterManager ? this.filterManager.doesRowPassOtherFilters(filter, node) : true,\n        ...newFilterParams\n      }) : true;\n      if (shouldRefreshFilter === false) {\n        this.destroyFilter(column, \"paramsUpdated\");\n      }\n    });\n  }\n  setColumnFilterWrapper(column, filterWrapper) {\n    const colId = column.getColId();\n    this.allColumnFilters.set(colId, filterWrapper);\n    this.allColumnListeners.set(\n      colId,\n      this.addManagedListeners(column, { colDefChanged: () => this.checkDestroyFilter(colId) })[0]\n    );\n  }\n  areFilterCompsDifferent(oldCompDetails, newCompDetails) {\n    if (!newCompDetails || !oldCompDetails) {\n      return true;\n    }\n    const { componentClass: oldComponentClass } = oldCompDetails;\n    const { componentClass: newComponentClass } = newCompDetails;\n    const isSameComponentClass = oldComponentClass === newComponentClass || // react hooks returns new wrappers, so check nested render method\n    oldComponentClass?.render && newComponentClass?.render && oldComponentClass.render === newComponentClass.render;\n    return !isSameComponentClass;\n  }\n  hasFloatingFilters() {\n    const gridColumns = this.columnModel.getCols();\n    return gridColumns.some((col) => col.getColDef().floatingFilter);\n  }\n  getFilterInstance(key, callback) {\n    if (!callback) {\n      return void 0;\n    }\n    this.getFilterInstanceImpl(key).then((filter) => {\n      const unwrapped = _unwrapUserComp(filter);\n      callback(unwrapped);\n    });\n    return void 0;\n  }\n  getColumnFilterInstance(key) {\n    return new Promise((resolve) => {\n      this.getFilterInstanceImpl(key).then((filter) => {\n        resolve(_unwrapUserComp(filter));\n      });\n    });\n  }\n  getFilterInstanceImpl(key) {\n    const column = this.columnModel.getColDefCol(key);\n    if (!column) {\n      return AgPromise.resolve(void 0);\n    }\n    const filterPromise = this.getOrCreateFilterWrapper(column)?.filterPromise;\n    return filterPromise ?? AgPromise.resolve(null);\n  }\n  processFilterModelUpdateQueue() {\n    this.filterModelUpdateQueue.forEach(({ model, source }) => this.setFilterModel(model, source));\n    this.filterModelUpdateQueue = [];\n    this.columnFilterModelUpdateQueue.forEach(({ key, model, resolve }) => {\n      this.setColumnFilterModel(key, model).then(() => resolve());\n    });\n    this.columnFilterModelUpdateQueue = [];\n  }\n  getColumnFilterModel(key) {\n    const filterWrapper = this.getFilterWrapper(key);\n    return filterWrapper ? this.getModelFromFilterWrapper(filterWrapper) : null;\n  }\n  setColumnFilterModel(key, model) {\n    if (this.dataTypeService?.isPendingInference()) {\n      let resolve = () => {\n      };\n      const promise = new Promise((res) => {\n        resolve = res;\n      });\n      this.columnFilterModelUpdateQueue.push({ key, model, resolve });\n      return promise;\n    }\n    const column = this.columnModel.getColDefCol(key);\n    const filterWrapper = column ? this.getOrCreateFilterWrapper(column) : null;\n    const convertPromise = (promise) => {\n      return new Promise((resolve) => {\n        promise.then((result) => resolve(result));\n      });\n    };\n    return filterWrapper ? convertPromise(this.setModelOnFilterWrapper(filterWrapper.filterPromise, model)) : Promise.resolve();\n  }\n  getFilterWrapper(key) {\n    const column = this.columnModel.getColDefCol(key);\n    return column ? this.cachedFilter(column) ?? null : null;\n  }\n  setColDefPropertiesForDataType(colDef, dataTypeDefinition, formatValue) {\n    const usingSetFilter = _isSetFilterByDefault(this.gos);\n    const translate = this.localeService.getLocaleTextFunc();\n    const mergeFilterParams = (params) => {\n      const { filterParams } = colDef;\n      colDef.filterParams = typeof filterParams === \"object\" ? {\n        ...filterParams,\n        ...params\n      } : params;\n    };\n    switch (dataTypeDefinition.baseDataType) {\n      case \"number\": {\n        if (usingSetFilter) {\n          mergeFilterParams({\n            comparator: (a, b) => {\n              const valA = a == null ? 0 : parseInt(a);\n              const valB = b == null ? 0 : parseInt(b);\n              if (valA === valB)\n                return 0;\n              return valA > valB ? 1 : -1;\n            }\n          });\n        }\n        break;\n      }\n      case \"boolean\": {\n        if (usingSetFilter) {\n          mergeFilterParams({\n            valueFormatter: (params) => {\n              if (!_exists(params.value)) {\n                return translate(\"blanks\", \"(Blanks)\");\n              }\n              return translate(String(params.value), params.value ? \"True\" : \"False\");\n            }\n          });\n        } else {\n          mergeFilterParams({\n            maxNumConditions: 1,\n            debounceMs: 0,\n            filterOptions: [\n              \"empty\",\n              {\n                displayKey: \"true\",\n                displayName: \"True\",\n                predicate: (_filterValues, cellValue) => cellValue,\n                numberOfInputs: 0\n              },\n              {\n                displayKey: \"false\",\n                displayName: \"False\",\n                predicate: (_filterValues, cellValue) => cellValue === false,\n                numberOfInputs: 0\n              }\n            ]\n          });\n        }\n        break;\n      }\n      case \"date\": {\n        if (usingSetFilter) {\n          mergeFilterParams({\n            valueFormatter: (params) => {\n              const valueFormatted = formatValue(params);\n              return _exists(valueFormatted) ? valueFormatted : translate(\"blanks\", \"(Blanks)\");\n            },\n            treeList: true,\n            treeListFormatter: (pathKey, level) => {\n              if (level === 1 && pathKey != null) {\n                const monthKey = MONTH_KEYS[Number(pathKey) - 1];\n                return translate(monthKey, MONTH_LOCALE_TEXT[monthKey]);\n              }\n              return pathKey ?? translate(\"blanks\", \"(Blanks)\");\n            }\n          });\n        }\n        break;\n      }\n      case \"dateString\": {\n        const convertToDate = dataTypeDefinition.dateParser;\n        if (usingSetFilter) {\n          mergeFilterParams({\n            valueFormatter: (params) => {\n              const valueFormatted = formatValue(params);\n              return _exists(valueFormatted) ? valueFormatted : translate(\"blanks\", \"(Blanks)\");\n            },\n            treeList: true,\n            treeListPathGetter: (value) => {\n              const date = convertToDate(value ?? void 0);\n              return date ? [String(date.getFullYear()), String(date.getMonth() + 1), String(date.getDate())] : null;\n            },\n            treeListFormatter: (pathKey, level) => {\n              if (level === 1 && pathKey != null) {\n                const monthKey = MONTH_KEYS[Number(pathKey) - 1];\n                return translate(monthKey, MONTH_LOCALE_TEXT[monthKey]);\n              }\n              return pathKey ?? translate(\"blanks\", \"(Blanks)\");\n            }\n          });\n        } else {\n          mergeFilterParams({\n            comparator: (filterDate, cellValue) => {\n              const cellAsDate = convertToDate(cellValue);\n              if (cellValue == null || cellAsDate < filterDate) {\n                return -1;\n              }\n              if (cellAsDate > filterDate) {\n                return 1;\n              }\n              return 0;\n            }\n          });\n        }\n        break;\n      }\n      case \"object\": {\n        if (usingSetFilter) {\n          mergeFilterParams({\n            valueFormatter: (params) => {\n              const valueFormatted = formatValue(params);\n              return _exists(valueFormatted) ? valueFormatted : translate(\"blanks\", \"(Blanks)\");\n            }\n          });\n        } else {\n          colDef.filterValueGetter = (params) => formatValue({\n            column: params.column,\n            node: params.node,\n            value: this.valueService.getValue(params.column, params.node)\n          });\n        }\n        break;\n      }\n    }\n  }\n  destroy() {\n    super.destroy();\n    this.allColumnFilters.forEach((filterWrapper) => this.disposeFilterWrapper(filterWrapper, \"gridDestroyed\"));\n    this.allColumnListeners.clear();\n  }\n};\n\n// community-modules/core/src/filter/filterApi.ts\nfunction isAnyFilterPresent(beans) {\n  return !!beans.filterManager?.isAnyFilterPresent();\n}\nfunction onFilterChanged(beans, source = \"api\") {\n  beans.filterManager?.onFilterChanged({ source });\n}\n\n// community-modules/core/src/filter/floating/provided/readOnlyFloatingFilter.ts\nvar ReadOnlyFloatingFilter = class extends Component {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-floating-filter-input\" role=\"presentation\">\n                <ag-input-text-field data-ref=\"eFloatingFilterText\"></ag-input-text-field>\n            </div>`,\n      [AgInputTextFieldSelector]\n    );\n    this.eFloatingFilterText = RefPlaceholder;\n  }\n  wireBeans(beans) {\n    this.columnNameService = beans.columnNameService;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n  init(params) {\n    this.params = params;\n    const displayName = this.columnNameService.getDisplayNameForColumn(params.column, \"header\", true);\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eFloatingFilterText.setDisabled(true).setInputAriaLabel(`${displayName} ${translate(\"ariaFilterInput\", \"Filter Input\")}`);\n  }\n  onParentModelChanged(parentModel) {\n    if (parentModel == null) {\n      this.eFloatingFilterText.setValue(\"\");\n      return;\n    }\n    this.params.parentFilterInstance((filterInstance) => {\n      if (filterInstance.getModelAsString) {\n        const modelAsString = filterInstance.getModelAsString(parentModel);\n        this.eFloatingFilterText.setValue(modelAsString);\n      }\n    });\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    this.init(params);\n  }\n};\n\n// community-modules/core/src/filter/floating/provided/simpleFloatingFilter.ts\nvar SimpleFloatingFilter = class extends Component {\n  wireBeans(beans) {\n    this.columnNameService = beans.columnNameService;\n  }\n  getDefaultDebounceMs() {\n    return 0;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n  isEventFromFloatingFilter(event) {\n    return event && event.afterFloatingFilter;\n  }\n  isEventFromDataChange(event) {\n    return event?.afterDataChange;\n  }\n  getLastType() {\n    return this.lastType;\n  }\n  isReadOnly() {\n    return this.readOnly;\n  }\n  setLastTypeFromModel(model) {\n    if (!model) {\n      this.lastType = this.optionsFactory.getDefaultOption();\n      return;\n    }\n    const isCombined = model.operator;\n    let condition;\n    if (isCombined) {\n      const combinedModel = model;\n      condition = combinedModel.conditions[0];\n    } else {\n      condition = model;\n    }\n    this.lastType = condition.type;\n  }\n  canWeEditAfterModelFromParentFilter(model) {\n    if (!model) {\n      return this.isTypeEditable(this.lastType);\n    }\n    const isCombined = model.operator;\n    if (isCombined) {\n      return false;\n    }\n    const simpleModel = model;\n    return this.isTypeEditable(simpleModel.type);\n  }\n  init(params) {\n    this.setSimpleParams(params, false);\n  }\n  setSimpleParams(params, update = true) {\n    this.optionsFactory = new OptionsFactory();\n    this.optionsFactory.init(params.filterParams, this.getDefaultFilterOptions());\n    if (!update) {\n      this.lastType = this.optionsFactory.getDefaultOption();\n    }\n    this.readOnly = !!params.filterParams.readOnly;\n    const editable = this.isTypeEditable(this.optionsFactory.getDefaultOption());\n    this.setEditable(editable);\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    this.setSimpleParams(params);\n  }\n  doesFilterHaveSingleInput(filterType) {\n    const customFilterOption = this.optionsFactory.getCustomOption(filterType);\n    const { numberOfInputs } = customFilterOption || {};\n    return numberOfInputs == null || numberOfInputs == 1;\n  }\n  isTypeEditable(type) {\n    const uneditableTypes = [\"inRange\", \"empty\", \"blank\", \"notBlank\"];\n    return !!type && !this.isReadOnly() && this.doesFilterHaveSingleInput(type) && uneditableTypes.indexOf(type) < 0;\n  }\n  getAriaLabel(params) {\n    const displayName = this.columnNameService.getDisplayNameForColumn(params.column, \"header\", true);\n    const translate = this.localeService.getLocaleTextFunc();\n    return `${displayName} ${translate(\"ariaFilterInput\", \"Filter Input\")}`;\n  }\n};\n\n// community-modules/core/src/filter/provided/date/dateFloatingFilter.ts\nvar DateFloatingFilter = class extends SimpleFloatingFilter {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-floating-filter-input\" role=\"presentation\">\n                <ag-input-text-field data-ref=\"eReadOnlyText\"></ag-input-text-field>\n                <div data-ref=\"eDateWrapper\" style=\"display: flex;\"></div>\n            </div>`,\n      [AgInputTextFieldSelector]\n    );\n    this.eReadOnlyText = RefPlaceholder;\n    this.eDateWrapper = RefPlaceholder;\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.context = beans.context;\n    this.userComponentFactory = beans.userComponentFactory;\n  }\n  getDefaultFilterOptions() {\n    return DEFAULT_DATE_FILTER_OPTIONS;\n  }\n  init(params) {\n    super.init(params);\n    this.params = params;\n    this.filterParams = params.filterParams;\n    this.createDateComponent();\n    this.filterModelFormatter = new DateFilterModelFormatter(\n      this.filterParams,\n      this.localeService,\n      this.optionsFactory\n    );\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eReadOnlyText.setDisabled(true).setInputAriaLabel(translate(\"ariaDateFilterInput\", \"Date Filter Input\"));\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    super.refresh(params);\n    this.params = params;\n    this.filterParams = params.filterParams;\n    this.updateDateComponent();\n    this.filterModelFormatter.updateParams({\n      optionsFactory: this.optionsFactory,\n      dateFilterParams: this.filterParams\n    });\n    this.updateCompOnModelChange(params.currentParentModel());\n  }\n  updateCompOnModelChange(model) {\n    const allowEditing = !this.isReadOnly() && this.canWeEditAfterModelFromParentFilter(model);\n    this.setEditable(allowEditing);\n    if (allowEditing) {\n      if (model) {\n        const dateModel = model;\n        this.dateComp.setDate(_parseDateTimeFromString(dateModel.dateFrom));\n      } else {\n        this.dateComp.setDate(null);\n      }\n      this.eReadOnlyText.setValue(\"\");\n    } else {\n      this.eReadOnlyText.setValue(this.filterModelFormatter.getModelAsString(model));\n      this.dateComp.setDate(null);\n    }\n  }\n  setEditable(editable) {\n    _setDisplayed(this.eDateWrapper, editable);\n    _setDisplayed(this.eReadOnlyText.getGui(), !editable);\n  }\n  onParentModelChanged(model, event) {\n    if (this.isEventFromFloatingFilter(event) || this.isEventFromDataChange(event)) {\n      return;\n    }\n    super.setLastTypeFromModel(model);\n    this.updateCompOnModelChange(model);\n  }\n  onDateChanged() {\n    const filterValueDate = this.dateComp.getDate();\n    const filterValueText = _serialiseDate(filterValueDate);\n    this.params.parentFilterInstance((filterInstance) => {\n      if (filterInstance) {\n        const date = _parseDateTimeFromString(filterValueText);\n        filterInstance.onFloatingFilterChanged(this.getLastType() || null, date);\n      }\n    });\n  }\n  getDateComponentParams() {\n    const debounceMs = getDebounceMs(this.params.filterParams, this.getDefaultDebounceMs());\n    return {\n      onDateChanged: _debounce(this.onDateChanged.bind(this), debounceMs),\n      filterParams: this.params.column.getColDef().filterParams\n    };\n  }\n  createDateComponent() {\n    this.dateComp = new DateCompWrapper(\n      this.context,\n      this.userComponentFactory,\n      this.getDateComponentParams(),\n      this.eDateWrapper,\n      (dateComp) => {\n        dateComp.setInputAriaLabel(this.getAriaLabel(this.params));\n      }\n    );\n    this.addDestroyFunc(() => this.dateComp.destroy());\n  }\n  updateDateComponent() {\n    const params = this.gos.addGridCommonParams(this.getDateComponentParams());\n    this.dateComp.updateParams(params);\n  }\n  getFilterModelFormatter() {\n    return this.filterModelFormatter;\n  }\n};\n\n// community-modules/core/src/filter/provided/date/defaultDateComponent.ts\nvar DefaultDateComponent = class extends Component {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-filter-filter\">\n                <ag-input-text-field class=\"ag-date-filter\" data-ref=\"eDateInput\"></ag-input-text-field>\n            </div>`,\n      [AgInputTextFieldSelector]\n    );\n    this.eDateInput = RefPlaceholder;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n  init(params) {\n    this.params = params;\n    this.setParams(params);\n    const inputElement = this.eDateInput.getInputElement();\n    this.addManagedListeners(inputElement, {\n      // ensures that the input element is focussed when a clear button is clicked,\n      // unless using safari as there is no clear button and focus does not work properly\n      mouseDown: () => {\n        if (this.eDateInput.isDisabled() || this.usingSafariDatePicker) {\n          return;\n        }\n        inputElement.focus();\n      },\n      input: (e) => {\n        if (e.target !== _getActiveDomElement(this.gos)) {\n          return;\n        }\n        if (this.eDateInput.isDisabled()) {\n          return;\n        }\n        this.params.onDateChanged();\n      }\n    });\n  }\n  setParams(params) {\n    const inputElement = this.eDateInput.getInputElement();\n    const shouldUseBrowserDatePicker = this.shouldUseBrowserDatePicker(params);\n    this.usingSafariDatePicker = shouldUseBrowserDatePicker && _isBrowserSafari();\n    inputElement.type = shouldUseBrowserDatePicker ? \"date\" : \"text\";\n    const { minValidYear, maxValidYear, minValidDate, maxValidDate } = params.filterParams || {};\n    if (minValidDate && minValidYear) {\n      _warnOnce(\n        \"DateFilter should not have both minValidDate and minValidYear parameters set at the same time! minValidYear will be ignored.\"\n      );\n    }\n    if (maxValidDate && maxValidYear) {\n      _warnOnce(\n        \"DateFilter should not have both maxValidDate and maxValidYear parameters set at the same time! maxValidYear will be ignored.\"\n      );\n    }\n    if (minValidDate && maxValidDate) {\n      const [parsedMinValidDate, parsedMaxValidDate] = [minValidDate, maxValidDate].map(\n        (v) => v instanceof Date ? v : _parseDateTimeFromString(v)\n      );\n      if (parsedMinValidDate && parsedMaxValidDate && parsedMinValidDate.getTime() > parsedMaxValidDate.getTime()) {\n        _warnOnce(\n          \"DateFilter parameter minValidDate should always be lower than or equal to parameter maxValidDate.\"\n        );\n      }\n    }\n    if (minValidDate) {\n      if (minValidDate instanceof Date) {\n        inputElement.min = _dateToFormattedString(minValidDate);\n      } else {\n        inputElement.min = minValidDate;\n      }\n    } else {\n      if (minValidYear) {\n        inputElement.min = `${minValidYear}-01-01`;\n      }\n    }\n    if (maxValidDate) {\n      if (maxValidDate instanceof Date) {\n        inputElement.max = _dateToFormattedString(maxValidDate);\n      } else {\n        inputElement.max = maxValidDate;\n      }\n    } else {\n      if (maxValidYear) {\n        inputElement.max = `${maxValidYear}-12-31`;\n      }\n    }\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    this.params = params;\n    this.setParams(params);\n  }\n  getDate() {\n    return _parseDateTimeFromString(this.eDateInput.getValue());\n  }\n  setDate(date) {\n    this.eDateInput.setValue(_serialiseDate(date, false));\n  }\n  setInputPlaceholder(placeholder) {\n    this.eDateInput.setInputPlaceholder(placeholder);\n  }\n  setInputAriaLabel(ariaLabel) {\n    this.eDateInput.setAriaLabel(ariaLabel);\n  }\n  setDisabled(disabled) {\n    this.eDateInput.setDisabled(disabled);\n  }\n  afterGuiAttached(params) {\n    if (!params || !params.suppressFocus) {\n      this.eDateInput.getInputElement().focus();\n    }\n  }\n  shouldUseBrowserDatePicker(params) {\n    if (params.filterParams && params.filterParams.browserDatePicker != null) {\n      return params.filterParams.browserDatePicker;\n    }\n    return _isBrowserChrome() || _isBrowserFirefox() || _isBrowserSafari() && _getSafariVersion() >= 14.1;\n  }\n};\n\n// community-modules/core/src/filter/floating/provided/floatingFilterTextInputService.ts\nvar FloatingFilterTextInputService = class extends BeanStub {\n  constructor(params) {\n    super();\n    this.params = params;\n    this.eFloatingFilterTextInput = RefPlaceholder;\n    this.valueChangedListener = () => {\n    };\n  }\n  setupGui(parentElement) {\n    this.eFloatingFilterTextInput = this.createManagedBean(new AgInputTextField(this.params?.config));\n    const eInput = this.eFloatingFilterTextInput.getGui();\n    parentElement.appendChild(eInput);\n    const listener = (e) => this.valueChangedListener(e);\n    this.addManagedListeners(eInput, {\n      input: listener,\n      keydown: listener\n    });\n  }\n  setEditable(editable) {\n    this.eFloatingFilterTextInput.setDisabled(!editable);\n  }\n  setAutoComplete(autoComplete) {\n    this.eFloatingFilterTextInput.setAutoComplete(autoComplete);\n  }\n  getValue() {\n    return this.eFloatingFilterTextInput.getValue();\n  }\n  setValue(value, silent) {\n    this.eFloatingFilterTextInput.setValue(value, silent);\n  }\n  setValueChangedListener(listener) {\n    this.valueChangedListener = listener;\n  }\n  setParams(params) {\n    this.setAriaLabel(params.ariaLabel);\n    if (params.autoComplete !== void 0) {\n      this.setAutoComplete(params.autoComplete);\n    }\n  }\n  setAriaLabel(ariaLabel) {\n    this.eFloatingFilterTextInput.setInputAriaLabel(ariaLabel);\n  }\n};\n\n// community-modules/core/src/filter/floating/provided/textInputFloatingFilter.ts\nvar TextInputFloatingFilter = class extends SimpleFloatingFilter {\n  constructor() {\n    super(...arguments);\n    this.eFloatingFilterInputContainer = RefPlaceholder;\n  }\n  postConstruct() {\n    this.setTemplate(\n      /* html */\n      `\n            <div class=\"ag-floating-filter-input\" role=\"presentation\" data-ref=\"eFloatingFilterInputContainer\"></div>\n        `\n    );\n  }\n  getDefaultDebounceMs() {\n    return 500;\n  }\n  onParentModelChanged(model, event) {\n    if (this.isEventFromFloatingFilter(event) || this.isEventFromDataChange(event)) {\n      return;\n    }\n    this.setLastTypeFromModel(model);\n    this.setEditable(this.canWeEditAfterModelFromParentFilter(model));\n    this.floatingFilterInputService.setValue(this.getFilterModelFormatter().getModelAsString(model));\n  }\n  init(params) {\n    this.setupFloatingFilterInputService(params);\n    super.init(params);\n    this.setTextInputParams(params);\n  }\n  setupFloatingFilterInputService(params) {\n    this.floatingFilterInputService = this.createFloatingFilterInputService(params);\n    this.floatingFilterInputService.setupGui(this.eFloatingFilterInputContainer);\n  }\n  setTextInputParams(params) {\n    this.params = params;\n    const autoComplete = params.browserAutoComplete ?? false;\n    this.floatingFilterInputService.setParams({\n      ariaLabel: this.getAriaLabel(params),\n      autoComplete\n    });\n    this.applyActive = isUseApplyButton(this.params.filterParams);\n    if (!this.isReadOnly()) {\n      const debounceMs = getDebounceMs(this.params.filterParams, this.getDefaultDebounceMs());\n      const toDebounce = _debounce(\n        this.syncUpWithParentFilter.bind(this),\n        debounceMs\n      );\n      this.floatingFilterInputService.setValueChangedListener(toDebounce);\n    }\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    super.refresh(params);\n    this.setTextInputParams(params);\n  }\n  recreateFloatingFilterInputService(params) {\n    const value = this.floatingFilterInputService.getValue();\n    _clearElement(this.eFloatingFilterInputContainer);\n    this.destroyBean(this.floatingFilterInputService);\n    this.setupFloatingFilterInputService(params);\n    this.floatingFilterInputService.setValue(value, true);\n  }\n  syncUpWithParentFilter(e) {\n    const isEnterKey = e.key === KeyCode.ENTER;\n    if (this.applyActive && !isEnterKey) {\n      return;\n    }\n    let value = this.floatingFilterInputService.getValue();\n    if (this.params.filterParams.trimInput) {\n      value = trimInputForFilter(value);\n      this.floatingFilterInputService.setValue(value, true);\n    }\n    this.params.parentFilterInstance((filterInstance) => {\n      if (filterInstance) {\n        filterInstance.onFloatingFilterChanged(this.getLastType() || null, value || null);\n      }\n    });\n  }\n  setEditable(editable) {\n    this.floatingFilterInputService.setEditable(editable);\n  }\n};\n\n// community-modules/core/src/filter/provided/number/numberFloatingFilter.ts\nvar FloatingFilterNumberInputService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.valueChangedListener = () => {\n    };\n    this.numberInputActive = true;\n  }\n  setupGui(parentElement) {\n    this.eFloatingFilterNumberInput = this.createManagedBean(new AgInputNumberField());\n    this.eFloatingFilterTextInput = this.createManagedBean(new AgInputTextField());\n    this.eFloatingFilterTextInput.setDisabled(true);\n    const eNumberInput = this.eFloatingFilterNumberInput.getGui();\n    const eTextInput = this.eFloatingFilterTextInput.getGui();\n    parentElement.appendChild(eNumberInput);\n    parentElement.appendChild(eTextInput);\n    this.setupListeners(eNumberInput, (e) => this.valueChangedListener(e));\n    this.setupListeners(eTextInput, (e) => this.valueChangedListener(e));\n  }\n  setEditable(editable) {\n    this.numberInputActive = editable;\n    this.eFloatingFilterNumberInput.setDisplayed(this.numberInputActive);\n    this.eFloatingFilterTextInput.setDisplayed(!this.numberInputActive);\n  }\n  setAutoComplete(autoComplete) {\n    this.eFloatingFilterNumberInput.setAutoComplete(autoComplete);\n    this.eFloatingFilterTextInput.setAutoComplete(autoComplete);\n  }\n  getValue() {\n    return this.getActiveInputElement().getValue();\n  }\n  setValue(value, silent) {\n    this.getActiveInputElement().setValue(value, silent);\n  }\n  getActiveInputElement() {\n    return this.numberInputActive ? this.eFloatingFilterNumberInput : this.eFloatingFilterTextInput;\n  }\n  setValueChangedListener(listener) {\n    this.valueChangedListener = listener;\n  }\n  setupListeners(element, listener) {\n    this.addManagedListeners(element, {\n      input: listener,\n      keydown: listener\n    });\n  }\n  setParams(params) {\n    this.setAriaLabel(params.ariaLabel);\n    if (params.autoComplete !== void 0) {\n      this.setAutoComplete(params.autoComplete);\n    }\n  }\n  setAriaLabel(ariaLabel) {\n    this.eFloatingFilterNumberInput.setInputAriaLabel(ariaLabel);\n    this.eFloatingFilterTextInput.setInputAriaLabel(ariaLabel);\n  }\n};\nvar NumberFloatingFilter = class extends TextInputFloatingFilter {\n  init(params) {\n    super.init(params);\n    this.filterModelFormatter = new NumberFilterModelFormatter(\n      this.localeService,\n      this.optionsFactory,\n      params.filterParams?.numberFormatter\n    );\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    const allowedCharPattern = getAllowedCharPattern(params.filterParams);\n    if (allowedCharPattern !== this.allowedCharPattern) {\n      this.recreateFloatingFilterInputService(params);\n    }\n    super.refresh(params);\n    this.filterModelFormatter.updateParams({ optionsFactory: this.optionsFactory });\n  }\n  getDefaultFilterOptions() {\n    return DEFAULT_NUMBER_FILTER_OPTIONS;\n  }\n  getFilterModelFormatter() {\n    return this.filterModelFormatter;\n  }\n  createFloatingFilterInputService(params) {\n    this.allowedCharPattern = getAllowedCharPattern(params.filterParams);\n    if (this.allowedCharPattern) {\n      return this.createManagedBean(\n        new FloatingFilterTextInputService({\n          config: { allowedCharPattern: this.allowedCharPattern }\n        })\n      );\n    }\n    return this.createManagedBean(new FloatingFilterNumberInputService());\n  }\n};\n\n// community-modules/core/src/filter/provided/text/textFloatingFilter.ts\nvar TextFloatingFilter = class extends TextInputFloatingFilter {\n  init(params) {\n    super.init(params);\n    this.filterModelFormatter = new TextFilterModelFormatter(this.localeService, this.optionsFactory);\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    super.refresh(params);\n    this.filterModelFormatter.updateParams({ optionsFactory: this.optionsFactory });\n  }\n  getDefaultFilterOptions() {\n    return DEFAULT_TEXT_FILTER_OPTIONS;\n  }\n  getFilterModelFormatter() {\n    return this.filterModelFormatter;\n  }\n  createFloatingFilterInputService() {\n    return this.createManagedBean(new FloatingFilterTextInputService());\n  }\n};\n\n// community-modules/core/src/filter/quickFilterApi.ts\nfunction isQuickFilterPresent(beans) {\n  return !!beans.filterManager?.isQuickFilterPresent();\n}\nfunction getQuickFilter(beans) {\n  return beans.gos.get(\"quickFilterText\");\n}\nfunction resetQuickFilter(beans) {\n  beans.filterManager?.resetQuickFilterCache();\n}\n\n// community-modules/core/src/filter/quickFilterService.ts\nvar QuickFilterService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"quickFilterService\";\n    this.quickFilter = null;\n    this.quickFilterParts = null;\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.columnModel = beans.columnModel;\n    this.rowModel = beans.rowModel;\n    this.pivotResultColsService = beans.pivotResultColsService;\n  }\n  postConstruct() {\n    const resetListener = this.resetQuickFilterCache.bind(this);\n    this.addManagedEventListeners({\n      columnPivotModeChanged: resetListener,\n      newColumnsLoaded: resetListener,\n      columnRowGroupChanged: resetListener,\n      columnVisible: () => {\n        if (!this.gos.get(\"includeHiddenColumnsInQuickFilter\")) {\n          this.resetQuickFilterCache();\n        }\n      }\n    });\n    this.addManagedPropertyListener(\"quickFilterText\", (e) => this.setQuickFilter(e.currentValue));\n    this.addManagedPropertyListeners(\n      [\"includeHiddenColumnsInQuickFilter\", \"applyQuickFilterBeforePivotOrAgg\"],\n      () => this.onQuickFilterColumnConfigChanged()\n    );\n    this.quickFilter = this.parseQuickFilter(this.gos.get(\"quickFilterText\"));\n    this.parser = this.gos.get(\"quickFilterParser\");\n    this.matcher = this.gos.get(\"quickFilterMatcher\");\n    this.setQuickFilterParts();\n    this.addManagedPropertyListeners(\n      [\"quickFilterMatcher\", \"quickFilterParser\"],\n      () => this.setQuickFilterParserAndMatcher()\n    );\n  }\n  // if we are using autoGroupCols, then they should be included for quick filter. this covers the\n  // following scenarios:\n  // a) user provides 'field' into autoGroupCol of normal grid, so now because a valid col to filter leafs on\n  // b) using tree data and user depends on autoGroupCol for first col, and we also want to filter on this\n  //    (tree data is a bit different, as parent rows can be filtered on, unlike row grouping)\n  refreshQuickFilterCols() {\n    const pivotMode = this.columnModel.isPivotMode();\n    const groupAutoCols = this.columnModel.getAutoCols();\n    const providedCols = this.columnModel.getColDefCols();\n    let columnsForQuickFilter = (pivotMode && !this.gos.get(\"applyQuickFilterBeforePivotOrAgg\") ? this.pivotResultColsService.getPivotResultCols()?.list : providedCols) ?? [];\n    if (groupAutoCols) {\n      columnsForQuickFilter = columnsForQuickFilter.concat(groupAutoCols);\n    }\n    this.colsForQuickFilter = this.gos.get(\"includeHiddenColumnsInQuickFilter\") ? columnsForQuickFilter : columnsForQuickFilter.filter((col) => col.isVisible() || col.isRowGroupActive());\n  }\n  isQuickFilterPresent() {\n    return this.quickFilter !== null;\n  }\n  doesRowPassQuickFilter(node) {\n    const usingCache = this.gos.get(\"cacheQuickFilter\");\n    if (this.matcher) {\n      return this.doesRowPassQuickFilterMatcher(usingCache, node);\n    }\n    return this.quickFilterParts.every(\n      (part) => usingCache ? this.doesRowPassQuickFilterCache(node, part) : this.doesRowPassQuickFilterNoCache(node, part)\n    );\n  }\n  resetQuickFilterCache() {\n    this.rowModel.forEachNode((node) => node.quickFilterAggregateText = null);\n  }\n  setQuickFilterParts() {\n    const { quickFilter, parser } = this;\n    if (quickFilter) {\n      this.quickFilterParts = parser ? parser(quickFilter) : quickFilter.split(\" \");\n    } else {\n      this.quickFilterParts = null;\n    }\n  }\n  parseQuickFilter(newFilter) {\n    if (!_exists(newFilter)) {\n      return null;\n    }\n    if (!_isClientSideRowModel(this.gos)) {\n      _warnOnce(\"Quick filtering only works with the Client-Side Row Model\");\n      return null;\n    }\n    return newFilter.toUpperCase();\n  }\n  setQuickFilter(newFilter) {\n    if (newFilter != null && typeof newFilter !== \"string\") {\n      _warnOnce(`Grid option quickFilterText only supports string inputs, received: ${typeof newFilter}`);\n      return;\n    }\n    const parsedFilter = this.parseQuickFilter(newFilter);\n    if (this.quickFilter !== parsedFilter) {\n      this.quickFilter = parsedFilter;\n      this.setQuickFilterParts();\n      this.dispatchLocalEvent({ type: \"quickFilterChanged\" });\n    }\n  }\n  setQuickFilterParserAndMatcher() {\n    const parser = this.gos.get(\"quickFilterParser\");\n    const matcher = this.gos.get(\"quickFilterMatcher\");\n    const hasChanged = parser !== this.parser || matcher !== this.matcher;\n    this.parser = parser;\n    this.matcher = matcher;\n    if (hasChanged) {\n      this.setQuickFilterParts();\n      this.dispatchLocalEvent({ type: \"quickFilterChanged\" });\n    }\n  }\n  onQuickFilterColumnConfigChanged() {\n    this.refreshQuickFilterCols();\n    this.resetQuickFilterCache();\n    if (this.isQuickFilterPresent()) {\n      this.dispatchLocalEvent({ type: \"quickFilterChanged\" });\n    }\n  }\n  doesRowPassQuickFilterNoCache(node, filterPart) {\n    return this.colsForQuickFilter.some((column) => {\n      const part = this.getQuickFilterTextForColumn(column, node);\n      return _exists(part) && part.indexOf(filterPart) >= 0;\n    });\n  }\n  doesRowPassQuickFilterCache(node, filterPart) {\n    this.checkGenerateQuickFilterAggregateText(node);\n    return node.quickFilterAggregateText.indexOf(filterPart) >= 0;\n  }\n  doesRowPassQuickFilterMatcher(usingCache, node) {\n    let quickFilterAggregateText;\n    if (usingCache) {\n      this.checkGenerateQuickFilterAggregateText(node);\n      quickFilterAggregateText = node.quickFilterAggregateText;\n    } else {\n      quickFilterAggregateText = this.getQuickFilterAggregateText(node);\n    }\n    const { quickFilterParts, matcher } = this;\n    return matcher(quickFilterParts, quickFilterAggregateText);\n  }\n  checkGenerateQuickFilterAggregateText(node) {\n    if (!node.quickFilterAggregateText) {\n      node.quickFilterAggregateText = this.getQuickFilterAggregateText(node);\n    }\n  }\n  getQuickFilterTextForColumn(column, node) {\n    let value = this.valueService.getValue(column, node, true);\n    const colDef = column.getColDef();\n    if (colDef.getQuickFilterText) {\n      const params = this.gos.addGridCommonParams({\n        value,\n        node,\n        data: node.data,\n        column,\n        colDef\n      });\n      value = colDef.getQuickFilterText(params);\n    }\n    return _exists(value) ? value.toString().toUpperCase() : null;\n  }\n  getQuickFilterAggregateText(node) {\n    const stringParts = [];\n    this.colsForQuickFilter.forEach((column) => {\n      const part = this.getQuickFilterTextForColumn(column, node);\n      if (_exists(part)) {\n        stringParts.push(part);\n      }\n    });\n    return stringParts.join(\"\\n\");\n  }\n};\n\n// community-modules/core/src/filter/filterModule.ts\nvar FilterCoreModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/filter-core\",\n  beans: [FilterManager]\n});\nvar FilterApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/filter-api\",\n  apiFunctions: {\n    isAnyFilterPresent,\n    onFilterChanged\n  },\n  dependantModules: [FilterCoreModule]\n});\nvar ColumnFilterModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/column-filter\",\n  beans: [ColumnFilterService],\n  dependantModules: [FilterCoreModule]\n});\nvar ColumnFilterApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/column-filter-api\",\n  apiFunctions: {\n    isColumnFilterPresent,\n    getFilterInstance,\n    getColumnFilterInstance,\n    destroyFilter,\n    setFilterModel,\n    getFilterModel,\n    getColumnFilterModel,\n    setColumnFilterModel,\n    showColumnFilter\n  },\n  dependantModules: [ColumnFilterModule, FilterApiModule]\n});\nvar FloatingFilterCoreModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/floating-filter-core\",\n  controllers: [{ name: \"headerFilterCell\", classImp: HeaderFilterCellCtrl }],\n  dependantModules: [ColumnFilterModule]\n});\nvar FloatingFilterModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/floating-filter\",\n  dependantModules: [FloatingFilterCoreModule, ColumnFilterModule]\n});\nvar ReadOnlyFloatingFilterModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/read-only-floating-filter\",\n  userComponents: [{ name: \"agReadOnlyFloatingFilter\", classImp: ReadOnlyFloatingFilter }],\n  dependantModules: [FloatingFilterCoreModule]\n});\nvar SimpleFilterModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/simple-filter\",\n  dependantModules: [ColumnFilterModule],\n  userComponents: [\n    { name: \"agTextColumnFilter\", classImp: TextFilter },\n    { name: \"agNumberColumnFilter\", classImp: NumberFilter },\n    { name: \"agDateColumnFilter\", classImp: DateFilter },\n    { name: \"agDateInput\", classImp: DefaultDateComponent }\n  ]\n});\nvar SimpleFloatingFilterModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/simple-floating-filter\",\n  dependantModules: [SimpleFilterModule, FloatingFilterCoreModule],\n  userComponents: [\n    { name: \"agTextColumnFloatingFilter\", classImp: TextFloatingFilter },\n    { name: \"agNumberColumnFloatingFilter\", classImp: NumberFloatingFilter },\n    { name: \"agDateColumnFloatingFilter\", classImp: DateFloatingFilter }\n  ]\n});\nvar QuickFilterCoreModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/quick-filter-core\",\n  beans: [QuickFilterService],\n  dependantModules: [FilterCoreModule]\n});\nvar QuickFilterApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/quick-filter-api\",\n  apiFunctions: {\n    isQuickFilterPresent,\n    getQuickFilter,\n    resetQuickFilter\n  },\n  dependantModules: [QuickFilterCoreModule]\n});\nvar QuickFilterModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/quick-filter\",\n  dependantModules: [QuickFilterCoreModule, QuickFilterApiModule]\n});\nvar FilterModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/filter\",\n  dependantModules: [\n    SimpleFloatingFilterModule,\n    ReadOnlyFloatingFilterModule,\n    QuickFilterModule,\n    ColumnFilterApiModule\n  ]\n});\n\n// community-modules/core/src/headerRendering/cells/abstractCell/abstractHeaderCellComp.ts\nvar AbstractHeaderCellComp = class extends Component {\n  constructor(template, ctrl) {\n    super(template);\n    this.ctrl = ctrl;\n  }\n  getCtrl() {\n    return this.ctrl;\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/floatingFilter/headerFilterCellComp.ts\nvar HeaderFilterCellComp = class extends AbstractHeaderCellComp {\n  constructor(ctrl) {\n    super(\n      /* html */\n      `<div class=\"ag-header-cell ag-floating-filter\" role=\"gridcell\">\n            <div data-ref=\"eFloatingFilterBody\" role=\"presentation\"></div>\n            <div class=\"ag-floating-filter-button ag-hidden\" data-ref=\"eButtonWrapper\" role=\"presentation\">\n                <button type=\"button\" class=\"ag-button ag-floating-filter-button-button\" data-ref=\"eButtonShowMainFilter\" tabindex=\"-1\"></button>\n            </div>\n        </div>`,\n      ctrl\n    );\n    this.eFloatingFilterBody = RefPlaceholder;\n    this.eButtonWrapper = RefPlaceholder;\n    this.eButtonShowMainFilter = RefPlaceholder;\n  }\n  postConstruct() {\n    const eGui = this.getGui();\n    const compProxy = {\n      addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n      addOrRemoveBodyCssClass: (cssClassName, on) => this.eFloatingFilterBody.classList.toggle(cssClassName, on),\n      setButtonWrapperDisplayed: (displayed) => _setDisplayed(this.eButtonWrapper, displayed),\n      setCompDetails: (compDetails) => this.setCompDetails(compDetails),\n      getFloatingFilterComp: () => this.compPromise,\n      setWidth: (width) => eGui.style.width = width,\n      setMenuIcon: (eIcon) => this.eButtonShowMainFilter.appendChild(eIcon)\n    };\n    this.ctrl.setComp(compProxy, eGui, this.eButtonShowMainFilter, this.eFloatingFilterBody, void 0);\n  }\n  setCompDetails(compDetails) {\n    if (!compDetails) {\n      this.destroyFloatingFilterComp();\n      this.compPromise = null;\n      return;\n    }\n    this.compPromise = compDetails.newAgStackInstance();\n    this.compPromise.then((comp) => this.afterCompCreated(comp));\n  }\n  destroy() {\n    this.destroyFloatingFilterComp();\n    super.destroy();\n  }\n  destroyFloatingFilterComp() {\n    if (this.floatingFilterComp) {\n      this.eFloatingFilterBody.removeChild(this.floatingFilterComp.getGui());\n      this.floatingFilterComp = this.destroyBean(this.floatingFilterComp);\n    }\n  }\n  afterCompCreated(comp) {\n    if (!comp) {\n      return;\n    }\n    if (!this.isAlive()) {\n      this.destroyBean(comp);\n      return;\n    }\n    this.destroyFloatingFilterComp();\n    this.floatingFilterComp = comp;\n    this.eFloatingFilterBody.appendChild(comp.getGui());\n    if (comp.afterGuiAttached) {\n      comp.afterGuiAttached();\n    }\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/column/headerCellComp.ts\nvar HeaderCellComp = class extends AbstractHeaderCellComp {\n  constructor(ctrl) {\n    super(\n      /* html */\n      `<div class=\"ag-header-cell\" role=\"columnheader\">\n            <div data-ref=\"eResize\" class=\"ag-header-cell-resize\" role=\"presentation\"></div>\n            <div data-ref=\"eHeaderCompWrapper\" class=\"ag-header-cell-comp-wrapper\" role=\"presentation\"></div>\n        </div>`,\n      ctrl\n    );\n    this.eResize = RefPlaceholder;\n    this.eHeaderCompWrapper = RefPlaceholder;\n    this.headerCompVersion = 0;\n    this.column = ctrl.getColumnGroupChild();\n    this.pinned = ctrl.getPinned();\n  }\n  postConstruct() {\n    const eGui = this.getGui();\n    const setAttribute = (name, value) => {\n      if (value != null && value != \"\") {\n        eGui.setAttribute(name, value);\n      } else {\n        eGui.removeAttribute(name);\n      }\n    };\n    setAttribute(\"col-id\", this.column.getColId());\n    const compProxy = {\n      setWidth: (width) => eGui.style.width = width,\n      addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n      setAriaSort: (sort) => sort ? _setAriaSort(eGui, sort) : _removeAriaSort(eGui),\n      setUserCompDetails: (compDetails) => this.setUserCompDetails(compDetails),\n      getUserCompInstance: () => this.headerComp\n    };\n    this.ctrl.setComp(compProxy, this.getGui(), this.eResize, this.eHeaderCompWrapper, void 0);\n    const selectAllGui = this.ctrl.getSelectAllGui();\n    this.eResize.insertAdjacentElement(\"afterend\", selectAllGui);\n  }\n  destroy() {\n    this.destroyHeaderComp();\n    super.destroy();\n  }\n  destroyHeaderComp() {\n    if (this.headerComp) {\n      this.eHeaderCompWrapper.removeChild(this.headerCompGui);\n      this.headerComp = this.destroyBean(this.headerComp);\n      this.headerCompGui = void 0;\n    }\n  }\n  setUserCompDetails(compDetails) {\n    this.headerCompVersion++;\n    const versionCopy = this.headerCompVersion;\n    compDetails.newAgStackInstance().then((comp) => this.afterCompCreated(versionCopy, comp));\n  }\n  afterCompCreated(version, headerComp) {\n    if (version != this.headerCompVersion || !this.isAlive()) {\n      this.destroyBean(headerComp);\n      return;\n    }\n    this.destroyHeaderComp();\n    this.headerComp = headerComp;\n    this.headerCompGui = headerComp.getGui();\n    this.eHeaderCompWrapper.appendChild(this.headerCompGui);\n    this.ctrl.setDragSource(this.getGui());\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/columnGroup/headerGroupCellComp.ts\nvar HeaderGroupCellComp = class extends AbstractHeaderCellComp {\n  constructor(ctrl) {\n    super(\n      /* html */\n      `<div class=\"ag-header-group-cell\" role=\"columnheader\">\n            <div data-ref=\"eHeaderCompWrapper\" class=\"ag-header-cell-comp-wrapper\" role=\"presentation\"></div>\n            <div data-ref=\"eResize\" class=\"ag-header-cell-resize\" role=\"presentation\"></div>\n        </div>`,\n      ctrl\n    );\n    this.eResize = RefPlaceholder;\n    this.eHeaderCompWrapper = RefPlaceholder;\n  }\n  postConstruct() {\n    const eGui = this.getGui();\n    const setAttribute = (key, value) => value != void 0 ? eGui.setAttribute(key, value) : eGui.removeAttribute(key);\n    eGui.setAttribute(\"col-id\", this.ctrl.getColId());\n    const compProxy = {\n      addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n      setHeaderWrapperHidden: (hidden) => {\n        if (hidden) {\n          this.eHeaderCompWrapper.style.setProperty(\"display\", \"none\");\n        } else {\n          this.eHeaderCompWrapper.style.removeProperty(\"display\");\n        }\n      },\n      setHeaderWrapperMaxHeight: (value) => {\n        if (value != null) {\n          this.eHeaderCompWrapper.style.setProperty(\"max-height\", `${value}px`);\n        } else {\n          this.eHeaderCompWrapper.style.removeProperty(\"max-height\");\n        }\n        this.eHeaderCompWrapper.classList.toggle(\"ag-header-cell-comp-wrapper-limited-height\", value != null);\n      },\n      setResizableDisplayed: (displayed) => _setDisplayed(this.eResize, displayed),\n      setWidth: (width) => eGui.style.width = width,\n      setAriaExpanded: (expanded) => setAttribute(\"aria-expanded\", expanded),\n      setUserCompDetails: (details) => this.setUserCompDetails(details),\n      getUserCompInstance: () => this.headerGroupComp\n    };\n    this.ctrl.setComp(compProxy, eGui, this.eResize, this.eHeaderCompWrapper, void 0);\n  }\n  setUserCompDetails(details) {\n    details.newAgStackInstance().then((comp) => this.afterHeaderCompCreated(comp));\n  }\n  afterHeaderCompCreated(headerGroupComp) {\n    const destroyFunc = () => this.destroyBean(headerGroupComp);\n    if (!this.isAlive()) {\n      destroyFunc();\n      return;\n    }\n    const eGui = this.getGui();\n    const eHeaderGroupGui = headerGroupComp.getGui();\n    this.eHeaderCompWrapper.appendChild(eHeaderGroupGui);\n    this.addDestroyFunc(destroyFunc);\n    this.headerGroupComp = headerGroupComp;\n    this.ctrl.setDragSource(eGui);\n  }\n  addOrRemoveHeaderWrapperStyle(style, value) {\n    const { eHeaderCompWrapper } = this;\n    if (value) {\n      eHeaderCompWrapper.style.setProperty(style, value);\n    } else {\n      eHeaderCompWrapper.style.removeProperty(style);\n    }\n  }\n};\n\n// community-modules/core/src/headerRendering/row/headerRowComp.ts\nvar HeaderRowType = /* @__PURE__ */ ((HeaderRowType2) => {\n  HeaderRowType2[\"COLUMN_GROUP\"] = \"group\";\n  HeaderRowType2[\"COLUMN\"] = \"column\";\n  HeaderRowType2[\"FLOATING_FILTER\"] = \"filter\";\n  return HeaderRowType2;\n})(HeaderRowType || {});\nvar HeaderRowComp = class extends Component {\n  constructor(ctrl) {\n    super();\n    this.headerComps = {};\n    this.ctrl = ctrl;\n    this.setTemplate(\n      /* html */\n      `<div class=\"${this.ctrl.getHeaderRowClass()}\" role=\"row\"></div>`\n    );\n  }\n  postConstruct() {\n    _setAriaRowIndex(this.getGui(), this.ctrl.getAriaRowIndex());\n    const compProxy = {\n      setHeight: (height) => this.getGui().style.height = height,\n      setTop: (top) => this.getGui().style.top = top,\n      setHeaderCtrls: (ctrls, forceOrder) => this.setHeaderCtrls(ctrls, forceOrder),\n      setWidth: (width) => this.getGui().style.width = width\n    };\n    this.ctrl.setComp(compProxy, void 0);\n  }\n  destroy() {\n    this.setHeaderCtrls([], false);\n    super.destroy();\n  }\n  setHeaderCtrls(ctrls, forceOrder) {\n    if (!this.isAlive()) {\n      return;\n    }\n    const oldComps = this.headerComps;\n    this.headerComps = {};\n    ctrls.forEach((ctrl) => {\n      const id = ctrl.instanceId;\n      let comp = oldComps[id];\n      delete oldComps[id];\n      if (comp == null) {\n        comp = this.createHeaderComp(ctrl);\n        this.getGui().appendChild(comp.getGui());\n      }\n      this.headerComps[id] = comp;\n    });\n    _iterateObject(oldComps, (id, comp) => {\n      this.getGui().removeChild(comp.getGui());\n      this.destroyBean(comp);\n    });\n    if (forceOrder) {\n      const comps = _getAllValuesInObject(this.headerComps);\n      comps.sort(\n        (a, b) => {\n          const leftA = a.getCtrl().getColumnGroupChild().getLeft();\n          const leftB = b.getCtrl().getColumnGroupChild().getLeft();\n          return leftA - leftB;\n        }\n      );\n      const elementsInOrder = comps.map((c) => c.getGui());\n      _setDomChildOrder(this.getGui(), elementsInOrder);\n    }\n  }\n  createHeaderComp(headerCtrl) {\n    let result;\n    switch (this.ctrl.getType()) {\n      case \"group\" /* COLUMN_GROUP */:\n        result = new HeaderGroupCellComp(headerCtrl);\n        break;\n      case \"filter\" /* FLOATING_FILTER */:\n        result = new HeaderFilterCellComp(headerCtrl);\n        break;\n      default:\n        result = new HeaderCellComp(headerCtrl);\n        break;\n    }\n    this.createBean(result);\n    result.setParentComponent(this);\n    return result;\n  }\n};\n\n// community-modules/core/src/headerRendering/common/headerNavigationService.ts\nvar HeaderNavigationDirection = /* @__PURE__ */ ((HeaderNavigationDirection2) => {\n  HeaderNavigationDirection2[HeaderNavigationDirection2[\"UP\"] = 0] = \"UP\";\n  HeaderNavigationDirection2[HeaderNavigationDirection2[\"DOWN\"] = 1] = \"DOWN\";\n  HeaderNavigationDirection2[HeaderNavigationDirection2[\"LEFT\"] = 2] = \"LEFT\";\n  HeaderNavigationDirection2[HeaderNavigationDirection2[\"RIGHT\"] = 3] = \"RIGHT\";\n  return HeaderNavigationDirection2;\n})(HeaderNavigationDirection || {});\nvar HeaderNavigationService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"headerNavigationService\";\n    this.currentHeaderRowWithoutSpan = -1;\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.headerPositionUtils = beans.headerPositionUtils;\n    this.ctrlsService = beans.ctrlsService;\n    this.columnModel = beans.columnModel;\n    this.visibleColService = beans.visibleColsService;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridBodyCon = p.gridBodyCtrl;\n    });\n    const eDocument = _getDocument(this.gos);\n    this.addManagedElementListeners(eDocument, { mousedown: () => this.setCurrentHeaderRowWithoutSpan(-1) });\n  }\n  getHeaderRowCount() {\n    return this.ctrlsService.getHeaderRowContainerCtrl()?.getRowCount() ?? 0;\n  }\n  getHeaderPositionForColumn(colKey, floatingFilter) {\n    let column;\n    if (typeof colKey === \"string\") {\n      column = this.columnModel.getCol(colKey);\n      if (!column) {\n        column = this.visibleColService.getColumnGroup(colKey);\n      }\n    } else {\n      column = colKey;\n    }\n    if (!column) {\n      return null;\n    }\n    const centerHeaderContainer = this.ctrlsService.getHeaderRowContainerCtrl();\n    const allCtrls = centerHeaderContainer?.getAllCtrls();\n    const isFloatingFilterVisible = _last(allCtrls || []).getType() === \"filter\" /* FLOATING_FILTER */;\n    const headerRowCount = this.getHeaderRowCount() - 1;\n    let row = -1;\n    let col = column;\n    while (col) {\n      row++;\n      col = col.getParent();\n    }\n    let headerRowIndex = row;\n    if (floatingFilter && isFloatingFilterVisible && headerRowIndex === headerRowCount - 1) {\n      headerRowIndex++;\n    }\n    return headerRowIndex === -1 ? null : {\n      headerRowIndex,\n      column\n    };\n  }\n  /*\n   * This method navigates grid header vertically\n   * @return {boolean} true to preventDefault on the event that caused this navigation.\n   */\n  navigateVertically(direction, fromHeader, event) {\n    if (!fromHeader) {\n      fromHeader = this.focusService.getFocusedHeader();\n    }\n    if (!fromHeader) {\n      return false;\n    }\n    const { headerRowIndex } = fromHeader;\n    const column = fromHeader.column;\n    const rowLen = this.getHeaderRowCount();\n    const isUp = direction === 0 /* UP */;\n    let {\n      headerRowIndex: nextRow,\n      column: nextFocusColumn,\n      // eslint-disable-next-line prefer-const\n      headerRowIndexWithoutSpan\n    } = isUp ? this.headerPositionUtils.getColumnVisibleParent(column, headerRowIndex) : this.headerPositionUtils.getColumnVisibleChild(column, headerRowIndex);\n    let skipColumn = false;\n    if (nextRow < 0) {\n      nextRow = 0;\n      nextFocusColumn = column;\n      skipColumn = true;\n    }\n    if (nextRow >= rowLen) {\n      nextRow = -1;\n      this.setCurrentHeaderRowWithoutSpan(-1);\n    } else if (headerRowIndexWithoutSpan !== void 0) {\n      this.currentHeaderRowWithoutSpan = headerRowIndexWithoutSpan;\n    }\n    if (!skipColumn && !nextFocusColumn) {\n      return false;\n    }\n    return this.focusService.focusHeaderPosition({\n      headerPosition: { headerRowIndex: nextRow, column: nextFocusColumn },\n      allowUserOverride: true,\n      event\n    });\n  }\n  setCurrentHeaderRowWithoutSpan(row) {\n    this.currentHeaderRowWithoutSpan = row;\n  }\n  /*\n   * This method navigates grid header horizontally\n   * @return {boolean} true to preventDefault on the event that caused this navigation.\n   */\n  navigateHorizontally(direction, fromTab = false, event) {\n    const focusedHeader = this.focusService.getFocusedHeader();\n    const isLeft = direction === 2 /* LEFT */;\n    const isRtl = this.gos.get(\"enableRtl\");\n    let nextHeader;\n    let normalisedDirection;\n    if (this.currentHeaderRowWithoutSpan !== -1) {\n      focusedHeader.headerRowIndex = this.currentHeaderRowWithoutSpan;\n    } else {\n      this.currentHeaderRowWithoutSpan = focusedHeader.headerRowIndex;\n    }\n    if (isLeft !== isRtl) {\n      normalisedDirection = \"Before\";\n      nextHeader = this.headerPositionUtils.findHeader(focusedHeader, normalisedDirection);\n    } else {\n      normalisedDirection = \"After\";\n      nextHeader = this.headerPositionUtils.findHeader(focusedHeader, normalisedDirection);\n    }\n    if (nextHeader || !fromTab) {\n      return this.focusService.focusHeaderPosition({\n        headerPosition: nextHeader,\n        direction: normalisedDirection,\n        fromTab,\n        allowUserOverride: true,\n        event\n      });\n    } else if (fromTab) {\n      const userFunc = this.gos.getCallback(\"tabToNextHeader\");\n      if (userFunc) {\n        return this.focusService.focusHeaderPositionFromUserFunc({\n          userFunc,\n          headerPosition: nextHeader,\n          direction: normalisedDirection\n        });\n      }\n    }\n    return this.focusNextHeaderRow(focusedHeader, normalisedDirection, event);\n  }\n  focusNextHeaderRow(focusedHeader, direction, event) {\n    const currentIndex = focusedHeader.headerRowIndex;\n    let nextPosition = null;\n    let nextRowIndex;\n    if (direction === \"Before\") {\n      if (currentIndex > 0) {\n        nextRowIndex = currentIndex - 1;\n        this.currentHeaderRowWithoutSpan -= 1;\n        nextPosition = this.headerPositionUtils.findColAtEdgeForHeaderRow(nextRowIndex, \"end\");\n      }\n    } else {\n      nextRowIndex = currentIndex + 1;\n      if (this.currentHeaderRowWithoutSpan < this.getHeaderRowCount()) {\n        this.currentHeaderRowWithoutSpan += 1;\n      } else {\n        this.setCurrentHeaderRowWithoutSpan(-1);\n      }\n      nextPosition = this.headerPositionUtils.findColAtEdgeForHeaderRow(nextRowIndex, \"start\");\n    }\n    if (!nextPosition) {\n      return false;\n    }\n    const { column, headerRowIndex } = this.headerPositionUtils.getHeaderIndexToFocus(\n      nextPosition.column,\n      nextPosition?.headerRowIndex\n    );\n    return this.focusService.focusHeaderPosition({\n      headerPosition: { column, headerRowIndex },\n      direction,\n      fromTab: true,\n      allowUserOverride: true,\n      event\n    });\n  }\n  scrollToColumn(column, direction = \"After\") {\n    if (column.getPinned()) {\n      return;\n    }\n    let columnToScrollTo;\n    if (isColumnGroup(column)) {\n      const columns = column.getDisplayedLeafColumns();\n      columnToScrollTo = direction === \"Before\" ? _last(columns) : columns[0];\n    } else {\n      columnToScrollTo = column;\n    }\n    this.gridBodyCon.getScrollFeature().ensureColumnVisible(columnToScrollTo);\n  }\n};\n\n// community-modules/core/src/headerRendering/gridHeaderCtrl.ts\nvar GridHeaderCtrl = class extends BeanStub {\n  wireBeans(beans) {\n    this.animationFrameService = beans.animationFrameService;\n    this.headerNavigationService = beans.headerNavigationService;\n    this.focusService = beans.focusService;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.ctrlsService = beans.ctrlsService;\n    this.filterManager = beans.filterManager;\n    this.menuService = beans.menuService;\n  }\n  setComp(comp, eGui, eFocusableElement) {\n    this.comp = comp;\n    this.eGui = eGui;\n    this.createManagedBean(\n      new ManagedFocusFeature(eFocusableElement, {\n        onTabKeyDown: this.onTabKeyDown.bind(this),\n        handleKeyDown: this.handleKeyDown.bind(this),\n        onFocusOut: this.onFocusOut.bind(this)\n      })\n    );\n    this.addManagedEventListeners({\n      columnPivotModeChanged: this.onPivotModeChanged.bind(this),\n      displayedColumnsChanged: this.onDisplayedColumnsChanged.bind(this)\n    });\n    this.onPivotModeChanged();\n    this.setupHeaderHeight();\n    const listener = this.onHeaderContextMenu.bind(this);\n    this.addManagedElementListeners(this.eGui, { contextmenu: listener });\n    this.mockContextMenuForIPad(listener);\n    this.ctrlsService.register(\"gridHeaderCtrl\", this);\n  }\n  setupHeaderHeight() {\n    const listener = this.setHeaderHeight.bind(this);\n    listener();\n    this.addManagedPropertyListeners(\n      [\n        \"headerHeight\",\n        \"pivotHeaderHeight\",\n        \"groupHeaderHeight\",\n        \"pivotGroupHeaderHeight\",\n        \"floatingFiltersHeight\"\n      ],\n      listener\n    );\n    this.addManagedEventListeners({\n      displayedColumnsChanged: listener,\n      columnHeaderHeightChanged: listener,\n      // add this to the animation frame to avoid a feedback loop\n      columnGroupHeaderHeightChanged: () => this.animationFrameService.requestAnimationFrame(() => listener()),\n      gridStylesChanged: listener,\n      advancedFilterEnabledChanged: listener\n    });\n  }\n  getHeaderHeight() {\n    return this.headerHeight;\n  }\n  setHeaderHeight() {\n    const { columnModel } = this;\n    let totalHeaderHeight = 0;\n    const groupHeight = this.columnModel.getGroupRowsHeight().reduce((prev, curr) => prev + curr, 0);\n    const headerHeight = this.columnModel.getColumnHeaderRowHeight();\n    if (this.filterManager?.hasFloatingFilters()) {\n      totalHeaderHeight += columnModel.getFloatingFiltersHeight();\n    }\n    totalHeaderHeight += groupHeight;\n    totalHeaderHeight += headerHeight;\n    if (this.headerHeight === totalHeaderHeight) {\n      return;\n    }\n    this.headerHeight = totalHeaderHeight;\n    const px = `${totalHeaderHeight + 1}px`;\n    this.comp.setHeightAndMinHeight(px);\n    this.eventService.dispatchEvent({\n      type: \"headerHeightChanged\"\n    });\n  }\n  onPivotModeChanged() {\n    const pivotMode = this.columnModel.isPivotMode();\n    this.comp.addOrRemoveCssClass(\"ag-pivot-on\", pivotMode);\n    this.comp.addOrRemoveCssClass(\"ag-pivot-off\", !pivotMode);\n  }\n  onDisplayedColumnsChanged() {\n    const columns = this.visibleColsService.getAllCols();\n    const shouldAllowOverflow = columns.some((col) => col.isSpanHeaderHeight());\n    this.comp.addOrRemoveCssClass(\"ag-header-allow-overflow\", shouldAllowOverflow);\n  }\n  onTabKeyDown(e) {\n    const isRtl = this.gos.get(\"enableRtl\");\n    const backwards = e.shiftKey;\n    const direction = backwards !== isRtl ? 2 /* LEFT */ : 3 /* RIGHT */;\n    if (this.headerNavigationService.navigateHorizontally(direction, true, e) || !backwards && this.focusService.focusOverlay(false) || this.focusService.focusNextGridCoreContainer(backwards, true)) {\n      e.preventDefault();\n    }\n  }\n  handleKeyDown(e) {\n    let direction = null;\n    switch (e.key) {\n      case KeyCode.LEFT:\n        direction = 2 /* LEFT */;\n      case KeyCode.RIGHT: {\n        if (!_exists(direction)) {\n          direction = 3 /* RIGHT */;\n        }\n        if (this.headerNavigationService.navigateHorizontally(direction, false, e)) {\n          e.preventDefault();\n        }\n        break;\n      }\n      case KeyCode.UP:\n        direction = 0 /* UP */;\n      case KeyCode.DOWN: {\n        if (!_exists(direction)) {\n          direction = 1 /* DOWN */;\n        }\n        if (this.headerNavigationService.navigateVertically(direction, null, e)) {\n          e.preventDefault();\n        }\n        break;\n      }\n      default:\n        return;\n    }\n  }\n  onFocusOut(e) {\n    const { relatedTarget } = e;\n    if (!relatedTarget && this.eGui.contains(_getActiveDomElement(this.gos))) {\n      return;\n    }\n    if (!this.eGui.contains(relatedTarget)) {\n      this.focusService.clearFocusedHeader();\n    }\n  }\n  onHeaderContextMenu(mouseEvent, touch, touchEvent) {\n    if (!mouseEvent && !touchEvent || !this.menuService.isHeaderContextMenuEnabled()) {\n      return;\n    }\n    const { target } = mouseEvent ?? touch;\n    if (target === this.eGui || target === this.ctrlsService.getHeaderRowContainerCtrl()?.getViewportElement()) {\n      this.menuService.showHeaderContextMenu(void 0, mouseEvent, touchEvent);\n    }\n  }\n  mockContextMenuForIPad(listener) {\n    if (!_isIOSUserAgent()) {\n      return;\n    }\n    const touchListener = new TouchListener(this.eGui);\n    const longTapListener = (event) => {\n      listener(void 0, event.touchStart, event.touchEvent);\n    };\n    this.addManagedListeners(touchListener, { longTap: longTapListener });\n    this.addDestroyFunc(() => touchListener.destroy());\n  }\n};\n\n// community-modules/core/src/gridBodyComp/centerWidthFeature.ts\nvar CenterWidthFeature = class extends BeanStub {\n  constructor(callback, addSpacer = false) {\n    super();\n    this.callback = callback;\n    this.addSpacer = addSpacer;\n  }\n  wireBeans(beans) {\n    this.visibleColsService = beans.visibleColsService;\n    this.scrollVisibleService = beans.scrollVisibleService;\n  }\n  postConstruct() {\n    const listener = this.setWidth.bind(this);\n    this.addManagedPropertyListener(\"domLayout\", listener);\n    this.addManagedEventListeners({\n      columnContainerWidthChanged: listener,\n      displayedColumnsChanged: listener,\n      leftPinnedWidthChanged: listener\n    });\n    if (this.addSpacer) {\n      this.addManagedEventListeners({\n        rightPinnedWidthChanged: listener,\n        scrollVisibilityChanged: listener,\n        scrollbarWidthChanged: listener\n      });\n    }\n    this.setWidth();\n  }\n  setWidth() {\n    const printLayout = _isDomLayout(this.gos, \"print\");\n    const centerWidth = this.visibleColsService.getBodyContainerWidth();\n    const leftWidth = this.visibleColsService.getColsLeftWidth();\n    const rightWidth = this.visibleColsService.getDisplayedColumnsRightWidth();\n    let totalWidth;\n    if (printLayout) {\n      totalWidth = centerWidth + leftWidth + rightWidth;\n    } else {\n      totalWidth = centerWidth;\n      if (this.addSpacer) {\n        const relevantWidth = this.gos.get(\"enableRtl\") ? leftWidth : rightWidth;\n        if (relevantWidth === 0 && this.scrollVisibleService.isVerticalScrollShowing()) {\n          totalWidth += this.scrollVisibleService.getScrollbarWidth();\n        }\n      }\n    }\n    this.callback(totalWidth);\n  }\n};\n\n// community-modules/core/src/headerRendering/columnDrag/bodyDropPivotTarget.ts\nvar BodyDropPivotTarget = class extends BeanStub {\n  constructor(pinned) {\n    super();\n    this.columnsToAggregate = [];\n    this.columnsToGroup = [];\n    this.columnsToPivot = [];\n    this.pinned = pinned;\n  }\n  wireBeans(beans) {\n    this.funcColsService = beans.funcColsService;\n  }\n  /** Callback for when drag enters */\n  onDragEnter(draggingEvent) {\n    this.clearColumnsList();\n    if (this.gos.get(\"functionsReadOnly\")) {\n      return;\n    }\n    const dragColumns = draggingEvent.dragItem.columns;\n    if (!dragColumns) {\n      return;\n    }\n    dragColumns.forEach((column) => {\n      if (!column.isPrimary()) {\n        return;\n      }\n      if (column.isAnyFunctionActive()) {\n        return;\n      }\n      if (column.isAllowValue()) {\n        this.columnsToAggregate.push(column);\n      } else if (column.isAllowRowGroup()) {\n        this.columnsToGroup.push(column);\n      } else if (column.isAllowPivot()) {\n        this.columnsToPivot.push(column);\n      }\n    });\n  }\n  getIconName() {\n    const totalColumns = this.columnsToAggregate.length + this.columnsToGroup.length + this.columnsToPivot.length;\n    if (totalColumns > 0) {\n      return this.pinned ? \"pinned\" : \"move\";\n    }\n    return null;\n  }\n  /** Callback for when drag leaves */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  onDragLeave(draggingEvent) {\n    this.clearColumnsList();\n  }\n  clearColumnsList() {\n    this.columnsToAggregate.length = 0;\n    this.columnsToGroup.length = 0;\n    this.columnsToPivot.length = 0;\n  }\n  /** Callback for when dragging */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  onDragging(draggingEvent) {\n  }\n  /** Callback for when drag stops */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  onDragStop(draggingEvent) {\n    if (this.columnsToAggregate.length > 0) {\n      this.funcColsService.addValueColumns(this.columnsToAggregate, \"toolPanelDragAndDrop\");\n    }\n    if (this.columnsToGroup.length > 0) {\n      this.funcColsService.addRowGroupColumns(this.columnsToGroup, \"toolPanelDragAndDrop\");\n    }\n    if (this.columnsToPivot.length > 0) {\n      this.funcColsService.addPivotColumns(this.columnsToPivot, \"toolPanelDragAndDrop\");\n    }\n  }\n  onDragCancel() {\n    this.clearColumnsList();\n  }\n};\n\n// community-modules/core/src/headerRendering/columnMoveHelper.ts\nfunction getBestColumnMoveIndexFromXPosition(params) {\n  const {\n    isFromHeader,\n    fromLeft,\n    xPosition,\n    fromEnter,\n    fakeEvent,\n    pinned,\n    gos,\n    columnModel,\n    columnMoveService,\n    visibleColsService\n  } = params;\n  let { allMovingColumns } = params;\n  if (isFromHeader) {\n    const newCols = [];\n    allMovingColumns.forEach((col) => {\n      let movingGroup = null;\n      let parent = col.getParent();\n      while (parent != null && parent.getDisplayedLeafColumns().length === 1) {\n        movingGroup = parent;\n        parent = parent.getParent();\n      }\n      if (movingGroup != null) {\n        const isMarryChildren = !!movingGroup.getColGroupDef()?.marryChildren;\n        const columnsToMove = isMarryChildren ? (\n          // when marry children is true, we also have to move hidden\n          // columns within the group, so grab them from the `providedColumnGroup`\n          movingGroup.getProvidedColumnGroup().getLeafColumns()\n        ) : movingGroup.getLeafColumns();\n        columnsToMove.forEach((newCol) => {\n          if (!newCols.includes(newCol)) {\n            newCols.push(newCol);\n          }\n        });\n      } else if (!newCols.includes(col)) {\n        newCols.push(col);\n      }\n    });\n    allMovingColumns = newCols;\n  }\n  const allMovingColumnsOrdered = allMovingColumns.slice();\n  columnModel.sortColsLikeCols(allMovingColumnsOrdered);\n  const validMoves = calculateValidMoves({\n    movingCols: allMovingColumnsOrdered,\n    draggingRight: fromLeft,\n    xPosition,\n    pinned,\n    gos,\n    columnModel,\n    visibleColsService\n  });\n  const oldIndex = calculateOldIndex(allMovingColumnsOrdered, columnModel);\n  if (validMoves.length === 0) {\n    return;\n  }\n  const firstValidMove = validMoves[0];\n  let constrainDirection = oldIndex !== null && !fromEnter;\n  if (isFromHeader) {\n    constrainDirection = oldIndex !== null;\n  }\n  if (constrainDirection && !fakeEvent) {\n    if (!fromLeft && firstValidMove >= oldIndex) {\n      return;\n    }\n    if (fromLeft && firstValidMove <= oldIndex) {\n      return;\n    }\n  }\n  const displayedCols = visibleColsService.getAllCols();\n  const potentialMoves = [];\n  let targetOrder = null;\n  for (let i = 0; i < validMoves.length; i++) {\n    const move = validMoves[i];\n    const order = columnMoveService.getProposedColumnOrder(allMovingColumnsOrdered, move);\n    if (!columnMoveService.doesOrderPassRules(order)) {\n      continue;\n    }\n    const displayedOrder = order.filter((col) => displayedCols.includes(col));\n    if (targetOrder === null) {\n      targetOrder = displayedOrder;\n    } else if (!_areEqual(displayedOrder, targetOrder)) {\n      break;\n    }\n    const fragCount = groupFragCount(order);\n    potentialMoves.push({ move, fragCount });\n  }\n  if (potentialMoves.length === 0) {\n    return;\n  }\n  potentialMoves.sort((a, b) => a.fragCount - b.fragCount);\n  const toIndex = potentialMoves[0].move;\n  if (toIndex > columnModel.getCols().length - allMovingColumns.length) {\n    return;\n  }\n  return { columns: allMovingColumns, toIndex };\n}\nfunction attemptMoveColumns(params) {\n  const { columns, toIndex } = getBestColumnMoveIndexFromXPosition(params) || {};\n  const { finished, columnMoveService } = params;\n  if (!columns || toIndex == null) {\n    return null;\n  }\n  columnMoveService.moveColumns(columns, toIndex, \"uiColumnMoved\", finished);\n  return finished ? null : { columns, toIndex };\n}\nfunction calculateOldIndex(movingCols, columnModel) {\n  const gridCols = columnModel.getCols();\n  const indexes = _sortNumerically(movingCols.map((col) => gridCols.indexOf(col)));\n  const firstIndex = indexes[0];\n  const lastIndex = _last(indexes);\n  const spread = lastIndex - firstIndex;\n  const gapsExist = spread !== indexes.length - 1;\n  return gapsExist ? null : firstIndex;\n}\nfunction groupFragCount(columns) {\n  function parents(col) {\n    const result = [];\n    let parent = col.getOriginalParent();\n    while (parent != null) {\n      result.push(parent);\n      parent = parent.getOriginalParent();\n    }\n    return result;\n  }\n  let count = 0;\n  for (let i = 0; i < columns.length - 1; i++) {\n    let a = parents(columns[i]);\n    let b = parents(columns[i + 1]);\n    [a, b] = a.length > b.length ? [a, b] : [b, a];\n    a.forEach((parent) => {\n      if (b.indexOf(parent) === -1) {\n        count++;\n      }\n    });\n  }\n  return count;\n}\nfunction getDisplayedColumns(visibleColsService, type) {\n  switch (type) {\n    case \"left\":\n      return visibleColsService.getLeftCols();\n    case \"right\":\n      return visibleColsService.getRightCols();\n    default:\n      return visibleColsService.getCenterCols();\n  }\n}\nfunction calculateValidMoves(params) {\n  const { movingCols, draggingRight, xPosition, pinned, gos, columnModel, visibleColsService } = params;\n  const isMoveBlocked = gos.get(\"suppressMovableColumns\") || movingCols.some((col) => col.getColDef().suppressMovable);\n  if (isMoveBlocked) {\n    return [];\n  }\n  const allDisplayedCols = getDisplayedColumns(visibleColsService, pinned);\n  const allGridCols = columnModel.getCols();\n  const movingDisplayedCols = allDisplayedCols.filter((col) => _includes(movingCols, col));\n  const otherDisplayedCols = allDisplayedCols.filter((col) => !_includes(movingCols, col));\n  const otherGridCols = allGridCols.filter((col) => !_includes(movingCols, col));\n  let displayIndex = 0;\n  let availableWidth = xPosition;\n  if (draggingRight) {\n    let widthOfMovingDisplayedCols = 0;\n    movingDisplayedCols.forEach((col) => widthOfMovingDisplayedCols += col.getActualWidth());\n    availableWidth -= widthOfMovingDisplayedCols;\n  }\n  if (availableWidth > 0) {\n    for (let i = 0; i < otherDisplayedCols.length; i++) {\n      const col = otherDisplayedCols[i];\n      availableWidth -= col.getActualWidth();\n      if (availableWidth < 0) {\n        break;\n      }\n      displayIndex++;\n    }\n    if (draggingRight) {\n      displayIndex++;\n    }\n  }\n  let firstValidMove;\n  if (displayIndex > 0) {\n    const leftColumn = otherDisplayedCols[displayIndex - 1];\n    firstValidMove = otherGridCols.indexOf(leftColumn) + 1;\n  } else {\n    firstValidMove = otherGridCols.indexOf(otherDisplayedCols[0]);\n    if (firstValidMove === -1) {\n      firstValidMove = 0;\n    }\n  }\n  const validMoves = [firstValidMove];\n  const numberComparator = (a, b) => a - b;\n  if (draggingRight) {\n    let pointer = firstValidMove + 1;\n    const lastIndex = allGridCols.length - 1;\n    while (pointer <= lastIndex) {\n      validMoves.push(pointer);\n      pointer++;\n    }\n    validMoves.sort(numberComparator);\n  } else {\n    let pointer = firstValidMove;\n    const lastIndex = allGridCols.length - 1;\n    let displacedCol = allGridCols[pointer];\n    while (pointer <= lastIndex && allDisplayedCols.indexOf(displacedCol) < 0) {\n      pointer++;\n      validMoves.push(pointer);\n      displacedCol = allGridCols[pointer];\n    }\n    pointer = firstValidMove - 1;\n    const firstDisplayIndex = 0;\n    while (pointer >= firstDisplayIndex) {\n      validMoves.push(pointer);\n      pointer--;\n    }\n    validMoves.sort(numberComparator).reverse();\n  }\n  return validMoves;\n}\nfunction normaliseX(params) {\n  const { pinned, fromKeyboard, gos, ctrlsService, useHeaderRow, skipScrollPadding } = params;\n  let eViewport = ctrlsService.getHeaderRowContainerCtrl(pinned)?.getViewportElement();\n  let { x } = params;\n  if (!eViewport) {\n    return 0;\n  }\n  if (fromKeyboard) {\n    x -= eViewport.getBoundingClientRect().left;\n  }\n  if (gos.get(\"enableRtl\")) {\n    if (useHeaderRow) {\n      eViewport = eViewport.querySelector(\".ag-header-row\");\n    }\n    x = eViewport.clientWidth - x;\n  }\n  if (pinned == null && !skipScrollPadding) {\n    x += ctrlsService.get(\"center\").getCenterViewportScrollLeft();\n  }\n  return x;\n}\nfunction setColumnsMoving(columns, isMoving) {\n  for (const column of columns) {\n    column.setMoving(isMoving, \"uiColumnMoved\");\n  }\n}\n\n// community-modules/core/src/headerRendering/columnDrag/moveColumnFeature.ts\nvar MOVE_FAIL_THRESHOLD = 7;\nvar SCROLL_MOVE_WIDTH = 100;\nvar SCROLL_GAP_NEEDED_BEFORE_MOVE = SCROLL_MOVE_WIDTH / 2;\nvar SCROLL_ACCELERATION_RATE = 5;\nvar SCROLL_TIME_INTERVAL = 100;\nvar MoveColumnFeature = class extends BeanStub {\n  constructor(pinned) {\n    super();\n    this.needToMoveLeft = false;\n    this.needToMoveRight = false;\n    this.lastMovedInfo = null;\n    this.pinned = pinned;\n    this.isCenterContainer = !_exists(pinned);\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.columnMoveService = beans.columnMoveService;\n    this.dragAndDropService = beans.dragAndDropService;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridBodyCon = p.gridBodyCtrl;\n    });\n  }\n  getIconName() {\n    const columns = this.lastDraggingEvent?.dragItem.columns ?? [];\n    for (const col of columns) {\n      const colPinned = col.getPinned();\n      if (col.getColDef().lockPinned) {\n        if (colPinned == this.pinned) {\n          return \"move\";\n        }\n        continue;\n      }\n      if (colPinned === this.pinned || !this.pinned) {\n        return \"move\";\n      }\n      if (!colPinned && this.pinned) {\n        return \"pinned\";\n      }\n    }\n    return \"notAllowed\";\n  }\n  onDragEnter(draggingEvent) {\n    const columns = draggingEvent.dragItem.columns;\n    const dragCameFromToolPanel = draggingEvent.dragSource.type === 0 /* ToolPanel */;\n    if (dragCameFromToolPanel) {\n      this.setColumnsVisible(columns, true, \"uiColumnDragged\");\n    } else {\n      const visibleState = draggingEvent.dragItem.visibleState;\n      const visibleColumns = (columns || []).filter((column) => visibleState[column.getId()]);\n      this.setColumnsVisible(visibleColumns, true, \"uiColumnDragged\");\n    }\n    if (!this.gos.get(\"suppressMoveWhenColumnDragging\")) {\n      this.attemptToPinColumns(columns, this.pinned);\n    }\n    this.onDragging(draggingEvent, true, true);\n  }\n  onDragging(draggingEvent = this.lastDraggingEvent, fromEnter = false, fakeEvent = false, finished = false) {\n    const isSuppressMoveWhenDragging = this.gos.get(\"suppressMoveWhenColumnDragging\");\n    if (finished && !isSuppressMoveWhenDragging) {\n      this.finishColumnMoving();\n      return;\n    }\n    this.lastDraggingEvent = draggingEvent;\n    if (!draggingEvent || !finished && _missing(draggingEvent.hDirection)) {\n      return;\n    }\n    const { pinned, gos, ctrlsService } = this;\n    const mouseX = normaliseX({\n      x: draggingEvent.x,\n      pinned,\n      gos,\n      ctrlsService\n    });\n    if (!fromEnter) {\n      this.checkCenterForScrolling(mouseX);\n    }\n    if (isSuppressMoveWhenDragging) {\n      this.handleColumnDragWhileSuppressingMovement(draggingEvent, fromEnter, fakeEvent, mouseX, finished);\n    } else {\n      this.handleColumnDragWhileAllowingMovement(draggingEvent, fromEnter, fakeEvent, mouseX, finished);\n    }\n  }\n  onDragLeave() {\n    this.ensureIntervalCleared();\n    this.clearHighlighted();\n    this.lastMovedInfo = null;\n  }\n  onDragStop() {\n    this.onDragging(this.lastDraggingEvent, false, true, true);\n    this.ensureIntervalCleared();\n    this.lastMovedInfo = null;\n  }\n  onDragCancel() {\n    this.clearHighlighted();\n    this.ensureIntervalCleared();\n    this.lastMovedInfo = null;\n  }\n  setColumnsVisible(columns, visible, source) {\n    if (!columns) {\n      return;\n    }\n    const allowedCols = columns.filter((c) => !c.getColDef().lockVisible);\n    this.columnModel.setColsVisible(allowedCols, visible, source);\n  }\n  finishColumnMoving() {\n    this.clearHighlighted();\n    if (!this.lastMovedInfo) {\n      return;\n    }\n    const { columns, toIndex } = this.lastMovedInfo;\n    this.columnMoveService.moveColumns(columns, toIndex, \"uiColumnMoved\", true);\n  }\n  handleColumnDragWhileSuppressingMovement(draggingEvent, fromEnter, fakeEvent, mouseX, finished) {\n    const allMovingColumns = this.getAllMovingColumns(draggingEvent, true);\n    if (finished) {\n      const isAttemptingToPin = this.isAttemptingToPin(allMovingColumns);\n      if (isAttemptingToPin) {\n        this.attemptToPinColumns(allMovingColumns, void 0, true);\n      }\n      const { fromLeft, xPosition } = this.getNormalisedXPositionInfo(allMovingColumns, isAttemptingToPin) || {};\n      if (fromLeft == null || xPosition == null) {\n        this.finishColumnMoving();\n        return;\n      }\n      this.moveColumnsAfterHighlight({\n        allMovingColumns,\n        xPosition,\n        fromEnter,\n        fakeEvent,\n        fromLeft\n      });\n    } else {\n      if (!this.dragAndDropService.isDropZoneWithinThisGrid(draggingEvent)) {\n        return;\n      }\n      this.highlightHoveredColumn(allMovingColumns, mouseX);\n    }\n  }\n  handleColumnDragWhileAllowingMovement(draggingEvent, fromEnter, fakeEvent, mouseX, finished) {\n    const allMovingColumns = this.getAllMovingColumns(draggingEvent);\n    const fromLeft = this.normaliseDirection(draggingEvent.hDirection) === 1 /* Right */;\n    const isFromHeader = draggingEvent.dragSource.type === 1 /* HeaderCell */;\n    const params = this.getMoveColumnParams({\n      allMovingColumns,\n      isFromHeader,\n      xPosition: mouseX,\n      fromLeft,\n      fromEnter,\n      fakeEvent\n    });\n    const lastMovedInfo = attemptMoveColumns({ ...params, finished });\n    if (lastMovedInfo) {\n      this.lastMovedInfo = lastMovedInfo;\n    }\n  }\n  getAllMovingColumns(draggingEvent, useSplit = false) {\n    const dragItem = draggingEvent.dragSource.getDragItem();\n    let columns = null;\n    if (useSplit) {\n      columns = dragItem.columnsInSplit;\n      if (!columns) {\n        columns = dragItem.columns;\n      }\n    } else {\n      columns = dragItem.columns;\n    }\n    const conditionCallback = (col) => col.getColDef().lockPinned ? col.getPinned() == this.pinned : true;\n    if (!columns) {\n      return [];\n    }\n    return columns.filter(conditionCallback);\n  }\n  getMoveColumnParams(params) {\n    const { allMovingColumns, isFromHeader, xPosition, fromLeft, fromEnter, fakeEvent } = params;\n    const { pinned, gos, columnModel, columnMoveService, visibleColsService } = this;\n    return {\n      allMovingColumns,\n      isFromHeader,\n      fromLeft,\n      xPosition,\n      pinned,\n      fromEnter,\n      fakeEvent,\n      gos,\n      columnModel,\n      columnMoveService,\n      visibleColsService\n    };\n  }\n  findFirstAndLastMovingColumns(allMovingColumns) {\n    const moveLen = allMovingColumns.length;\n    let firstMovingCol;\n    let lastMovingCol;\n    for (let i = 0; i <= moveLen; i++) {\n      if (!firstMovingCol) {\n        const leftCol = allMovingColumns[i];\n        if (leftCol.getLeft() != null) {\n          firstMovingCol = leftCol;\n        }\n      }\n      if (!lastMovingCol) {\n        const rightCol = allMovingColumns[moveLen - 1 - i];\n        if (rightCol.getLeft() != null) {\n          lastMovingCol = rightCol;\n        }\n      }\n      if (firstMovingCol && lastMovingCol) {\n        break;\n      }\n    }\n    return { firstMovingCol, lastMovingCol };\n  }\n  highlightHoveredColumn(movingColumns, mouseX) {\n    const { gos, columnModel } = this;\n    const isRtl = gos.get(\"enableRtl\");\n    const consideredColumns = columnModel.getCols().filter((col) => col.isVisible() && col.getPinned() === this.pinned);\n    let start = null;\n    let width = null;\n    let targetColumn = null;\n    for (const col of consideredColumns) {\n      width = col.getActualWidth();\n      start = this.getNormalisedColumnLeft(col, 0, isRtl);\n      if (start != null) {\n        const end = start + width;\n        if (start <= mouseX && end >= mouseX) {\n          targetColumn = col;\n          break;\n        }\n      }\n      start = null;\n      width = null;\n    }\n    if (!targetColumn) {\n      for (let i = consideredColumns.length - 1; i >= 0; i--) {\n        const currentColumn = consideredColumns[i];\n        const parent = consideredColumns[i].getParent();\n        if (!parent) {\n          targetColumn = currentColumn;\n          break;\n        }\n        const leafDisplayedCols = parent?.getDisplayedLeafColumns();\n        if (leafDisplayedCols.length) {\n          targetColumn = _last(leafDisplayedCols);\n          break;\n        }\n      }\n      if (!targetColumn) {\n        return;\n      }\n      start = this.getNormalisedColumnLeft(targetColumn, 0, isRtl);\n      width = targetColumn.getActualWidth();\n    } else if (movingColumns.indexOf(targetColumn) !== -1) {\n      targetColumn = null;\n    }\n    if (this.lastHighlightedColumn?.column !== targetColumn) {\n      this.clearHighlighted();\n    }\n    if (targetColumn == null || start == null || width == null) {\n      return;\n    }\n    let position;\n    if (mouseX - start < width / 2 !== isRtl) {\n      position = 0 /* Before */;\n    } else {\n      position = 1 /* After */;\n    }\n    targetColumn.setHighlighted(position);\n    this.lastHighlightedColumn = { column: targetColumn, position };\n  }\n  getNormalisedXPositionInfo(allMovingColumns, isAttemptingToPin) {\n    const { gos, visibleColsService } = this;\n    const isRtl = gos.get(\"enableRtl\");\n    const { firstMovingCol, column, position } = this.getColumnMoveAndTargetInfo(\n      allMovingColumns,\n      isAttemptingToPin,\n      isRtl\n    );\n    if (!firstMovingCol || !column || position == null) {\n      return;\n    }\n    const visibleColumns = visibleColsService.getAllCols();\n    const movingColIndex = visibleColumns.indexOf(firstMovingCol);\n    const targetIndex = visibleColumns.indexOf(column);\n    const isBefore = position === 0 /* Before */ !== isRtl;\n    const fromLeft = movingColIndex < targetIndex || movingColIndex === targetIndex && !isBefore;\n    let diff = 0;\n    if (isBefore) {\n      if (fromLeft) {\n        diff -= 1;\n      }\n    } else {\n      if (!fromLeft) {\n        diff += 1;\n      }\n    }\n    if (targetIndex + diff === movingColIndex) {\n      return;\n    }\n    const targetColumn = visibleColumns[targetIndex + diff];\n    if (!targetColumn) {\n      return;\n    }\n    const xPosition = this.getNormalisedColumnLeft(targetColumn, 20, isRtl);\n    return { fromLeft, xPosition };\n  }\n  getColumnMoveAndTargetInfo(allMovingColumns, isAttemptingToPin, isRtl) {\n    const lastHighlightedColumn = this.lastHighlightedColumn || {};\n    const { firstMovingCol, lastMovingCol } = this.findFirstAndLastMovingColumns(allMovingColumns);\n    if (!firstMovingCol || !lastMovingCol || lastHighlightedColumn.column || !isAttemptingToPin) {\n      return {\n        firstMovingCol,\n        ...lastHighlightedColumn\n      };\n    }\n    const pinned = this.getPinDirection();\n    const isLeft = pinned === \"left\";\n    return {\n      firstMovingCol,\n      position: isLeft ? 1 /* After */ : 0 /* Before */,\n      column: isLeft !== isRtl ? firstMovingCol : lastMovingCol\n    };\n  }\n  normaliseDirection(hDirection) {\n    if (this.gos.get(\"enableRtl\")) {\n      switch (hDirection) {\n        case 0 /* Left */:\n          return 1 /* Right */;\n        case 1 /* Right */:\n          return 0 /* Left */;\n      }\n    }\n    return hDirection;\n  }\n  getNormalisedColumnLeft(col, padding, isRtl) {\n    const { gos, ctrlsService } = this;\n    const left = col.getLeft();\n    if (left == null) {\n      return null;\n    }\n    const width = col.getActualWidth();\n    return normaliseX({\n      x: isRtl ? left + width - padding : left + padding,\n      pinned: col.getPinned(),\n      useHeaderRow: isRtl,\n      skipScrollPadding: true,\n      gos,\n      ctrlsService\n    });\n  }\n  isAttemptingToPin(columns) {\n    const isMovingHorizontally = this.needToMoveLeft || this.needToMoveRight;\n    const isFailedMoreThanThreshold = this.failedMoveAttempts > MOVE_FAIL_THRESHOLD;\n    return isMovingHorizontally && isFailedMoreThanThreshold || columns.some((col) => col.getPinned() !== this.pinned);\n  }\n  moveColumnsAfterHighlight(params) {\n    const { allMovingColumns, xPosition, fromEnter, fakeEvent, fromLeft } = params;\n    const columnMoveParams = this.getMoveColumnParams({\n      allMovingColumns,\n      isFromHeader: true,\n      xPosition,\n      fromLeft,\n      fromEnter,\n      fakeEvent\n    });\n    const { columns, toIndex } = getBestColumnMoveIndexFromXPosition(columnMoveParams) || {};\n    if (columns && toIndex != null) {\n      this.lastMovedInfo = {\n        columns,\n        toIndex\n      };\n    }\n    this.finishColumnMoving();\n  }\n  clearHighlighted() {\n    if (!this.lastHighlightedColumn) {\n      return;\n    }\n    this.lastHighlightedColumn.column.setHighlighted(null);\n    this.lastHighlightedColumn = null;\n  }\n  checkCenterForScrolling(xAdjustedForScroll) {\n    if (!this.isCenterContainer) {\n      return;\n    }\n    const centerCtrl = this.ctrlsService.get(\"center\");\n    const firstVisiblePixel = centerCtrl.getCenterViewportScrollLeft();\n    const lastVisiblePixel = firstVisiblePixel + centerCtrl.getCenterWidth();\n    if (this.gos.get(\"enableRtl\")) {\n      this.needToMoveRight = xAdjustedForScroll < firstVisiblePixel + SCROLL_GAP_NEEDED_BEFORE_MOVE;\n      this.needToMoveLeft = xAdjustedForScroll > lastVisiblePixel - SCROLL_GAP_NEEDED_BEFORE_MOVE;\n    } else {\n      this.needToMoveLeft = xAdjustedForScroll < firstVisiblePixel + SCROLL_GAP_NEEDED_BEFORE_MOVE;\n      this.needToMoveRight = xAdjustedForScroll > lastVisiblePixel - SCROLL_GAP_NEEDED_BEFORE_MOVE;\n    }\n    if (this.needToMoveLeft || this.needToMoveRight) {\n      this.ensureIntervalStarted();\n    } else {\n      this.ensureIntervalCleared();\n    }\n  }\n  ensureIntervalStarted() {\n    if (this.movingIntervalId) {\n      return;\n    }\n    this.intervalCount = 0;\n    this.failedMoveAttempts = 0;\n    this.movingIntervalId = window.setInterval(this.moveInterval.bind(this), SCROLL_TIME_INTERVAL);\n    this.dragAndDropService.getDragAndDropImageComponent()?.setIcon(this.needToMoveLeft ? \"left\" : \"right\", true);\n  }\n  ensureIntervalCleared() {\n    if (!this.movingIntervalId) {\n      return;\n    }\n    window.clearInterval(this.movingIntervalId);\n    this.movingIntervalId = null;\n    this.failedMoveAttempts = 0;\n    this.dragAndDropService.getDragAndDropImageComponent()?.setIcon(this.getIconName());\n  }\n  moveInterval() {\n    let pixelsToMove;\n    this.intervalCount++;\n    pixelsToMove = 10 + this.intervalCount * SCROLL_ACCELERATION_RATE;\n    if (pixelsToMove > SCROLL_MOVE_WIDTH) {\n      pixelsToMove = SCROLL_MOVE_WIDTH;\n    }\n    let pixelsMoved = null;\n    const scrollFeature = this.gridBodyCon.getScrollFeature();\n    if (this.needToMoveLeft) {\n      pixelsMoved = scrollFeature.scrollHorizontally(-pixelsToMove);\n    } else if (this.needToMoveRight) {\n      pixelsMoved = scrollFeature.scrollHorizontally(pixelsToMove);\n    }\n    if (pixelsMoved !== 0) {\n      this.onDragging(this.lastDraggingEvent);\n      this.failedMoveAttempts = 0;\n    } else {\n      this.failedMoveAttempts++;\n      if (this.failedMoveAttempts <= MOVE_FAIL_THRESHOLD + 1) {\n        return;\n      }\n      this.dragAndDropService.getDragAndDropImageComponent()?.setIcon(\"pinned\");\n      if (!this.gos.get(\"suppressMoveWhenColumnDragging\")) {\n        const columns = this.lastDraggingEvent?.dragItem.columns;\n        this.attemptToPinColumns(columns, void 0, true);\n      }\n    }\n  }\n  getPinDirection() {\n    if (this.needToMoveLeft || this.pinned === \"left\") {\n      return \"left\";\n    }\n    if (this.needToMoveRight || this.pinned === \"right\") {\n      return \"right\";\n    }\n  }\n  attemptToPinColumns(columns, pinned, fromMoving = false) {\n    const allowedCols = (columns || []).filter((c) => !c.getColDef().lockPinned);\n    if (!allowedCols.length) {\n      return 0;\n    }\n    if (fromMoving) {\n      pinned = this.getPinDirection();\n    }\n    this.columnModel.setColsPinned(allowedCols, pinned, \"uiColumnDragged\");\n    if (fromMoving) {\n      this.dragAndDropService.nudge();\n    }\n    return allowedCols.length;\n  }\n  destroy() {\n    super.destroy();\n    this.lastDraggingEvent = null;\n    this.clearHighlighted();\n    this.lastMovedInfo = null;\n  }\n};\n\n// community-modules/core/src/headerRendering/columnDrag/bodyDropTarget.ts\nvar BodyDropTarget = class extends BeanStub {\n  wireBeans(beans) {\n    this.dragAndDropService = beans.dragAndDropService;\n    this.columnModel = beans.columnModel;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  constructor(pinned, eContainer) {\n    super();\n    this.pinned = pinned;\n    this.eContainer = eContainer;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      switch (this.pinned) {\n        case \"left\":\n          this.eSecondaryContainers = [\n            [p.gridBodyCtrl.getBodyViewportElement(), p.left.getContainerElement()],\n            [p.bottomLeft.getContainerElement()],\n            [p.topLeft.getContainerElement()]\n          ];\n          break;\n        case \"right\":\n          this.eSecondaryContainers = [\n            [p.gridBodyCtrl.getBodyViewportElement(), p.right.getContainerElement()],\n            [p.bottomRight.getContainerElement()],\n            [p.topRight.getContainerElement()]\n          ];\n          break;\n        default:\n          this.eSecondaryContainers = [\n            [p.gridBodyCtrl.getBodyViewportElement(), p.center.getViewportElement()],\n            [p.bottomCenter.getViewportElement()],\n            [p.topCenter.getViewportElement()]\n          ];\n          break;\n      }\n    });\n    this.moveColumnFeature = this.createManagedBean(new MoveColumnFeature(this.pinned));\n    this.bodyDropPivotTarget = this.createManagedBean(new BodyDropPivotTarget(this.pinned));\n    this.dragAndDropService.addDropTarget(this);\n    this.addDestroyFunc(() => this.dragAndDropService.removeDropTarget(this));\n  }\n  isInterestedIn(type) {\n    return type === 1 /* HeaderCell */ || type === 0 /* ToolPanel */ && this.gos.get(\"allowDragFromColumnsToolPanel\");\n  }\n  getSecondaryContainers() {\n    return this.eSecondaryContainers;\n  }\n  getContainer() {\n    return this.eContainer;\n  }\n  getIconName() {\n    return this.currentDropListener.getIconName();\n  }\n  // we want to use the bodyPivotTarget if the user is dragging columns in from the toolPanel\n  // and we are in pivot mode, as it has to logic to set pivot/value/group on the columns when\n  // dropped into the grid's body.\n  isDropColumnInPivotMode(draggingEvent) {\n    return this.columnModel.isPivotMode() && draggingEvent.dragSource.type === 0 /* ToolPanel */;\n  }\n  onDragEnter(draggingEvent) {\n    this.currentDropListener = this.isDropColumnInPivotMode(draggingEvent) ? this.bodyDropPivotTarget : this.moveColumnFeature;\n    this.currentDropListener.onDragEnter(draggingEvent);\n  }\n  onDragLeave(params) {\n    this.currentDropListener.onDragLeave(params);\n  }\n  onDragging(params) {\n    this.currentDropListener.onDragging(params);\n  }\n  onDragStop(params) {\n    this.currentDropListener.onDragStop(params);\n  }\n  onDragCancel() {\n    this.currentDropListener.onDragCancel();\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/column/resizeFeature.ts\nvar ResizeFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.horizontalResizeService = beans.horizontalResizeService;\n    this.pinnedWidthService = beans.pinnedWidthService;\n    this.ctrlsService = beans.ctrlsService;\n    this.columnSizeService = beans.columnSizeService;\n    this.columnAutosizeService = beans.columnAutosizeService;\n  }\n  constructor(pinned, column, eResize, comp, ctrl) {\n    super();\n    this.pinned = pinned;\n    this.column = column;\n    this.eResize = eResize;\n    this.comp = comp;\n    this.ctrl = ctrl;\n  }\n  postConstruct() {\n    const destroyResizeFuncs = [];\n    let canResize;\n    let canAutosize;\n    const addResize = () => {\n      _setDisplayed(this.eResize, canResize);\n      if (!canResize) {\n        return;\n      }\n      const finishedWithResizeFunc = this.horizontalResizeService.addResizeBar({\n        eResizeBar: this.eResize,\n        onResizeStart: this.onResizeStart.bind(this),\n        onResizing: this.onResizing.bind(this, false),\n        onResizeEnd: this.onResizing.bind(this, true)\n      });\n      destroyResizeFuncs.push(finishedWithResizeFunc);\n      if (canAutosize) {\n        const skipHeaderOnAutoSize = this.gos.get(\"skipHeaderOnAutoSize\");\n        const autoSizeColListener = () => {\n          this.columnAutosizeService.autoSizeColumn(this.column, \"uiColumnResized\", skipHeaderOnAutoSize);\n        };\n        this.eResize.addEventListener(\"dblclick\", autoSizeColListener);\n        const touchListener = new TouchListener(this.eResize);\n        touchListener.addEventListener(\"doubleTap\", autoSizeColListener);\n        destroyResizeFuncs.push(() => {\n          this.eResize.removeEventListener(\"dblclick\", autoSizeColListener);\n          touchListener.removeEventListener(\"doubleTap\", autoSizeColListener);\n          touchListener.destroy();\n        });\n      }\n    };\n    const removeResize = () => {\n      destroyResizeFuncs.forEach((f) => f());\n      destroyResizeFuncs.length = 0;\n    };\n    const refresh = () => {\n      const resize = this.column.isResizable();\n      const autoSize = !this.gos.get(\"suppressAutoSize\") && !this.column.getColDef().suppressAutoSize;\n      const propertyChange = resize !== canResize || autoSize !== canAutosize;\n      if (propertyChange) {\n        canResize = resize;\n        canAutosize = autoSize;\n        removeResize();\n        addResize();\n      }\n    };\n    refresh();\n    this.addDestroyFunc(removeResize);\n    this.ctrl.setRefreshFunction(\"resize\", refresh);\n  }\n  onResizing(finished, resizeAmount) {\n    const { column: key, lastResizeAmount, resizeStartWidth } = this;\n    const resizeAmountNormalised = this.normaliseResizeAmount(resizeAmount);\n    const newWidth = resizeStartWidth + resizeAmountNormalised;\n    const columnWidths = [{ key, newWidth }];\n    if (this.column.getPinned()) {\n      const leftWidth = this.pinnedWidthService.getPinnedLeftWidth();\n      const rightWidth = this.pinnedWidthService.getPinnedRightWidth();\n      const bodyWidth = _getInnerWidth(this.ctrlsService.getGridBodyCtrl().getBodyViewportElement()) - 50;\n      if (leftWidth + rightWidth + (resizeAmountNormalised - lastResizeAmount) > bodyWidth) {\n        return;\n      }\n    }\n    this.lastResizeAmount = resizeAmountNormalised;\n    this.columnSizeService.setColumnWidths(columnWidths, this.resizeWithShiftKey, finished, \"uiColumnResized\");\n    if (finished) {\n      this.toggleColumnResizing(false);\n    }\n  }\n  onResizeStart(shiftKey) {\n    this.resizeStartWidth = this.column.getActualWidth();\n    this.lastResizeAmount = 0;\n    this.resizeWithShiftKey = shiftKey;\n    this.toggleColumnResizing(true);\n  }\n  toggleColumnResizing(resizing) {\n    this.comp.addOrRemoveCssClass(\"ag-column-resizing\", resizing);\n  }\n  // optionally inverts the drag, depending on pinned and RTL\n  // note - this method is duplicated in RenderedHeaderGroupCell - should refactor out?\n  normaliseResizeAmount(dragChange) {\n    let result = dragChange;\n    const notPinningLeft = this.pinned !== \"left\";\n    const pinningRight = this.pinned === \"right\";\n    if (this.gos.get(\"enableRtl\")) {\n      if (notPinningLeft) {\n        result *= -1;\n      }\n    } else {\n      if (pinningRight) {\n        result *= -1;\n      }\n    }\n    return result;\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/column/selectAllFeature.ts\nvar SelectAllFeature = class extends BeanStub {\n  constructor(column) {\n    super();\n    this.cbSelectAllVisible = false;\n    this.processingEventFromCheckbox = false;\n    this.column = column;\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.selectionService = beans.selectionService;\n  }\n  onSpaceKeyDown(e) {\n    const checkbox = this.cbSelectAll;\n    if (checkbox.isDisplayed() && !checkbox.getGui().contains(_getActiveDomElement(this.gos))) {\n      e.preventDefault();\n      checkbox.setValue(!checkbox.getValue());\n    }\n  }\n  getCheckboxGui() {\n    return this.cbSelectAll.getGui();\n  }\n  setComp(ctrl) {\n    this.headerCellCtrl = ctrl;\n    this.cbSelectAll = this.createManagedBean(new AgCheckbox());\n    this.cbSelectAll.addCssClass(\"ag-header-select-all\");\n    _setAriaRole(this.cbSelectAll.getGui(), \"presentation\");\n    this.showOrHideSelectAll();\n    this.addManagedEventListeners({\n      newColumnsLoaded: this.onNewColumnsLoaded.bind(this),\n      displayedColumnsChanged: this.onDisplayedColumnsChanged.bind(this),\n      selectionChanged: this.onSelectionChanged.bind(this),\n      paginationChanged: this.onSelectionChanged.bind(this),\n      modelUpdated: this.onModelChanged.bind(this)\n    });\n    this.addManagedListeners(this.cbSelectAll, { fieldValueChanged: this.onCbSelectAll.bind(this) });\n    this.cbSelectAll.getInputElement().setAttribute(\"tabindex\", \"-1\");\n    this.refreshSelectAllLabel();\n  }\n  onNewColumnsLoaded() {\n    this.showOrHideSelectAll();\n  }\n  onDisplayedColumnsChanged() {\n    if (!this.isAlive()) {\n      return;\n    }\n    this.showOrHideSelectAll();\n  }\n  showOrHideSelectAll() {\n    this.cbSelectAllVisible = this.isCheckboxSelection();\n    this.cbSelectAll.setDisplayed(this.cbSelectAllVisible);\n    if (this.cbSelectAllVisible) {\n      this.checkRightRowModelType(\"selectAllCheckbox\");\n      this.checkSelectionType(\"selectAllCheckbox\");\n      this.updateStateOfCheckbox();\n    }\n    this.refreshSelectAllLabel();\n  }\n  onModelChanged() {\n    if (!this.cbSelectAllVisible) {\n      return;\n    }\n    this.updateStateOfCheckbox();\n  }\n  onSelectionChanged() {\n    if (!this.cbSelectAllVisible) {\n      return;\n    }\n    this.updateStateOfCheckbox();\n  }\n  updateStateOfCheckbox() {\n    if (this.processingEventFromCheckbox) {\n      return;\n    }\n    this.processingEventFromCheckbox = true;\n    const allSelected = this.selectionService.getSelectAllState(this.isFilteredOnly(), this.isCurrentPageOnly());\n    this.cbSelectAll.setValue(allSelected);\n    const hasNodesToSelect = this.selectionService.hasNodesToSelect(\n      this.isFilteredOnly(),\n      this.isCurrentPageOnly()\n    );\n    this.cbSelectAll.setDisabled(!hasNodesToSelect);\n    this.refreshSelectAllLabel();\n    this.processingEventFromCheckbox = false;\n  }\n  refreshSelectAllLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const checked = this.cbSelectAll.getValue();\n    const ariaStatus = checked ? translate(\"ariaChecked\", \"checked\") : translate(\"ariaUnchecked\", \"unchecked\");\n    const ariaLabel = translate(\"ariaRowSelectAll\", \"Press Space to toggle all rows selection\");\n    if (!this.cbSelectAllVisible) {\n      this.headerCellCtrl.setAriaDescriptionProperty(\"selectAll\", null);\n    } else {\n      this.headerCellCtrl.setAriaDescriptionProperty(\"selectAll\", `${ariaLabel} (${ariaStatus})`);\n    }\n    this.cbSelectAll.setInputAriaLabel(translate(\"ariaHeaderSelection\", \"Column with Header Selection\"));\n    this.headerCellCtrl.announceAriaDescription();\n  }\n  checkSelectionType(feature) {\n    const isMultiSelect = _isMultiRowSelection(this.gos);\n    if (!isMultiSelect) {\n      _warnOnce(`${feature} is only available if using 'multiRow' selection mode.`);\n      return false;\n    }\n    return true;\n  }\n  checkRightRowModelType(feature) {\n    const rowModelMatches = _isClientSideRowModel(this.gos) || _isServerSideRowModel(this.gos);\n    if (!rowModelMatches) {\n      _warnOnce(\n        `${feature} is only available if using 'clientSide' or 'serverSide' rowModelType, you are using ${this.rowModel.getType()}.`\n      );\n      return false;\n    }\n    return true;\n  }\n  onCbSelectAll() {\n    if (this.processingEventFromCheckbox) {\n      return;\n    }\n    if (!this.cbSelectAllVisible) {\n      return;\n    }\n    const value = this.cbSelectAll.getValue();\n    const justFiltered = this.isFilteredOnly();\n    const justCurrentPage = this.isCurrentPageOnly();\n    let source = \"uiSelectAll\";\n    if (justCurrentPage) {\n      source = \"uiSelectAllCurrentPage\";\n    } else if (justFiltered) {\n      source = \"uiSelectAllFiltered\";\n    }\n    const params = {\n      source,\n      justFiltered,\n      justCurrentPage\n    };\n    if (value) {\n      this.selectionService.selectAllRowNodes(params);\n    } else {\n      this.selectionService.deselectAllRowNodes(params);\n    }\n  }\n  /**\n   * Checkbox is enabled when either the `headerCheckbox` option is enabled in the new selection API\n   * or `headerCheckboxSelection` is enabled in the legacy API.\n   */\n  isCheckboxSelection() {\n    const so = this.gos.get(\"rowSelection\");\n    const newHeaderCheckbox = typeof so === \"object\" && _getHeaderCheckbox(so) && isColumnControlsCol(this.column);\n    const headerCheckboxSelection = this.column.getColDef().headerCheckboxSelection;\n    let result = false;\n    if (newHeaderCheckbox) {\n      result = true;\n    } else if (typeof headerCheckboxSelection === \"function\") {\n      result = headerCheckboxSelection(\n        this.gos.addGridCommonParams({\n          column: this.column,\n          colDef: this.column.getColDef()\n        })\n      );\n    } else {\n      result = !!headerCheckboxSelection;\n    }\n    return result && this.checkRightRowModelType(newHeaderCheckbox ? \"headerCheckbox\" : \"headerCheckboxSelection\") && this.checkSelectionType(newHeaderCheckbox ? \"headerCheckbox\" : \"headerCheckboxSelection\");\n  }\n  isFilteredOnly() {\n    const so = this.gos.get(\"rowSelection\");\n    return typeof so === \"object\" ? so.mode === \"multiRow\" && so.selectAll === \"filtered\" : !!this.column.getColDef().headerCheckboxSelectionFilteredOnly;\n  }\n  isCurrentPageOnly() {\n    const so = this.gos.get(\"rowSelection\");\n    return typeof so === \"object\" ? so.mode === \"multiRow\" && so.selectAll === \"currentPage\" : !!this.column.getColDef().headerCheckboxSelectionCurrentPageOnly;\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/column/headerCellCtrl.ts\nvar HeaderCellCtrl = class extends AbstractHeaderCellCtrl {\n  constructor(column, beans, parentRowCtrl) {\n    super(column, beans, parentRowCtrl);\n    this.refreshFunctions = {};\n    this.userHeaderClasses = /* @__PURE__ */ new Set();\n    this.ariaDescriptionProperties = /* @__PURE__ */ new Map();\n    this.column = column;\n  }\n  setComp(comp, eGui, eResize, eHeaderCompWrapper, compBean) {\n    this.comp = comp;\n    compBean = setupCompBean(this, this.beans.context, compBean);\n    this.setGui(eGui, compBean);\n    this.updateState();\n    this.setupWidth(compBean);\n    this.setupMovingCss(compBean);\n    this.setupMenuClass(compBean);\n    this.setupSortableClass(compBean);\n    this.setupWrapTextClass();\n    this.refreshSpanHeaderHeight();\n    this.setupAutoHeight({\n      wrapperElement: eHeaderCompWrapper,\n      checkMeasuringCallback: (checkMeasuring) => this.setRefreshFunction(\"measuring\", checkMeasuring),\n      compBean\n    });\n    this.addColumnHoverListener(compBean);\n    this.setupFilterClass(compBean);\n    this.setupClassesFromColDef();\n    this.setupTooltip(compBean);\n    this.addActiveHeaderMouseListeners(compBean);\n    this.setupSelectAll(compBean);\n    this.setupUserComp(compBean);\n    this.refreshAria();\n    this.resizeFeature = compBean.createManagedBean(\n      new ResizeFeature(this.getPinned(), this.column, eResize, comp, this)\n    );\n    compBean.createManagedBean(new HoverFeature([this.column], eGui));\n    compBean.createManagedBean(new SetLeftFeature(this.column, eGui, this.beans));\n    compBean.createManagedBean(\n      new ManagedFocusFeature(eGui, {\n        shouldStopEventPropagation: (e) => this.shouldStopEventPropagation(e),\n        onTabKeyDown: () => null,\n        handleKeyDown: this.handleKeyDown.bind(this),\n        onFocusIn: this.onFocusIn.bind(this),\n        onFocusOut: this.onFocusOut.bind(this)\n      })\n    );\n    this.addResizeAndMoveKeyboardListeners(compBean);\n    compBean.addManagedPropertyListeners(\n      [\"suppressMovableColumns\", \"suppressMenuHide\", \"suppressAggFuncInHeader\"],\n      () => this.refresh(compBean)\n    );\n    compBean.addManagedListeners(this.column, { colDefChanged: () => this.refresh(compBean) });\n    compBean.addManagedListeners(this.column, { headerHighlightChanged: this.onHeaderHighlightChanged.bind(this) });\n    const listener = () => this.checkDisplayName(compBean);\n    compBean.addManagedEventListeners({\n      columnValueChanged: listener,\n      columnRowGroupChanged: listener,\n      columnPivotChanged: listener,\n      headerHeightChanged: this.onHeaderHeightChanged.bind(this)\n    });\n    compBean.addDestroyFunc(() => {\n      this.refreshFunctions = {};\n      this.selectAllFeature = null;\n      this.dragSourceElement = void 0;\n      this.userCompDetails = null;\n      this.userHeaderClasses.clear();\n      this.ariaDescriptionProperties.clear();\n      this.clearComponent();\n    });\n  }\n  resizeHeader(delta, shiftKey) {\n    if (!this.column.isResizable()) {\n      return;\n    }\n    const actualWidth = this.column.getActualWidth();\n    const minWidth = this.column.getMinWidth();\n    const maxWidth = this.column.getMaxWidth();\n    const newWidth = Math.min(Math.max(actualWidth + delta, minWidth), maxWidth);\n    this.beans.columnSizeService.setColumnWidths(\n      [{ key: this.column, newWidth }],\n      shiftKey,\n      true,\n      \"uiColumnResized\"\n    );\n  }\n  moveHeader(hDirection) {\n    const { eGui, beans, column, ctrlsService } = this;\n    const { gos, columnModel, columnMoveService, visibleColsService } = beans;\n    const pinned = this.getPinned();\n    const left = eGui.getBoundingClientRect().left;\n    const width = column.getActualWidth();\n    const isRtl = gos.get(\"enableRtl\");\n    const isLeft = hDirection === 0 /* Left */ !== isRtl;\n    const xPosition = normaliseX({\n      x: isLeft ? left - 20 : left + width + 20,\n      pinned,\n      fromKeyboard: true,\n      gos,\n      ctrlsService\n    });\n    const headerPosition = this.focusService.getFocusedHeader();\n    attemptMoveColumns({\n      allMovingColumns: [column],\n      isFromHeader: true,\n      fromLeft: hDirection === 1 /* Right */,\n      xPosition,\n      pinned,\n      fromEnter: false,\n      fakeEvent: false,\n      gos,\n      columnModel,\n      columnMoveService,\n      visibleColsService,\n      finished: true\n    });\n    ctrlsService.getGridBodyCtrl().getScrollFeature().ensureColumnVisible(column, \"auto\");\n    if ((!this.isAlive() || this.beans.gos.get(\"ensureDomOrder\")) && headerPosition) {\n      this.restoreFocus(headerPosition);\n    }\n  }\n  restoreFocus(previousPosition) {\n    this.focusService.focusHeaderPosition({\n      headerPosition: {\n        ...previousPosition,\n        column: this.column\n      }\n    });\n  }\n  setupUserComp(compBean) {\n    const compDetails = this.lookupUserCompDetails(compBean);\n    this.setCompDetails(compDetails);\n  }\n  setCompDetails(compDetails) {\n    this.userCompDetails = compDetails;\n    this.comp.setUserCompDetails(compDetails);\n  }\n  lookupUserCompDetails(compBean) {\n    const params = this.createParams(compBean);\n    const colDef = this.column.getColDef();\n    return this.userComponentFactory.getHeaderCompDetails(colDef, params);\n  }\n  createParams(compBean) {\n    const params = this.gos.addGridCommonParams({\n      column: this.column,\n      displayName: this.displayName,\n      enableSorting: this.column.isSortable(),\n      enableMenu: this.menuEnabled,\n      enableFilterButton: this.openFilterEnabled && this.menuService.isHeaderFilterButtonEnabled(this.column),\n      enableFilterIcon: !this.openFilterEnabled || this.menuService.isLegacyMenuEnabled(),\n      showColumnMenu: (buttonElement) => {\n        this.menuService.showColumnMenu({\n          column: this.column,\n          buttonElement,\n          positionBy: \"button\"\n        });\n      },\n      showColumnMenuAfterMouseClick: (mouseEvent) => {\n        this.menuService.showColumnMenu({\n          column: this.column,\n          mouseEvent,\n          positionBy: \"mouse\"\n        });\n      },\n      showFilter: (buttonElement) => {\n        this.menuService.showFilterMenu({\n          column: this.column,\n          buttonElement,\n          containerType: \"columnFilter\",\n          positionBy: \"button\"\n        });\n      },\n      progressSort: (multiSort) => {\n        this.beans.sortController.progressSort(this.column, !!multiSort, \"uiColumnSorted\");\n      },\n      setSort: (sort, multiSort) => {\n        this.beans.sortController.setSortForColumn(this.column, sort, !!multiSort, \"uiColumnSorted\");\n      },\n      eGridHeader: this.getGui(),\n      setTooltip: (value, shouldDisplayTooltip) => {\n        this.setupTooltip(compBean, value, shouldDisplayTooltip);\n      }\n    });\n    return params;\n  }\n  setupSelectAll(compBean) {\n    this.selectAllFeature = compBean.createManagedBean(new SelectAllFeature(this.column));\n    this.selectAllFeature.setComp(this);\n  }\n  getSelectAllGui() {\n    return this.selectAllFeature.getCheckboxGui();\n  }\n  handleKeyDown(e) {\n    super.handleKeyDown(e);\n    if (e.key === KeyCode.SPACE) {\n      this.selectAllFeature.onSpaceKeyDown(e);\n    }\n    if (e.key === KeyCode.ENTER) {\n      this.onEnterKeyDown(e);\n    }\n    if (e.key === KeyCode.DOWN && e.altKey) {\n      this.showMenuOnKeyPress(e, false);\n    }\n  }\n  onEnterKeyDown(e) {\n    if (e.ctrlKey || e.metaKey) {\n      this.showMenuOnKeyPress(e, true);\n    } else if (this.sortable) {\n      const multiSort = e.shiftKey;\n      this.beans.sortController.progressSort(this.column, multiSort, \"uiColumnSorted\");\n    }\n  }\n  showMenuOnKeyPress(e, isFilterShortcut) {\n    const headerComp = this.comp.getUserCompInstance();\n    if (!headerComp || !(headerComp instanceof HeaderComp)) {\n      return;\n    }\n    if (headerComp.onMenuKeyboardShortcut(isFilterShortcut)) {\n      e.preventDefault();\n    }\n  }\n  onFocusIn(e) {\n    if (!this.getGui().contains(e.relatedTarget)) {\n      const rowIndex = this.getRowIndex();\n      this.focusService.setFocusedHeader(rowIndex, this.column);\n      this.announceAriaDescription();\n    }\n    if (this.focusService.isKeyboardMode()) {\n      this.setActiveHeader(true);\n    }\n  }\n  onFocusOut(e) {\n    if (this.getGui().contains(e.relatedTarget)) {\n      return;\n    }\n    this.setActiveHeader(false);\n  }\n  setupTooltip(compBean, value, shouldDisplayTooltip) {\n    if (this.tooltipFeature) {\n      this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n    }\n    const isTooltipWhenTruncated = this.gos.get(\"tooltipShowMode\") === \"whenTruncated\";\n    const eGui = this.eGui;\n    const colDef = this.column.getColDef();\n    if (!shouldDisplayTooltip && isTooltipWhenTruncated && !colDef.headerComponent) {\n      shouldDisplayTooltip = () => {\n        const textEl = eGui.querySelector(\".ag-header-cell-text\");\n        if (!textEl) {\n          return true;\n        }\n        return textEl.scrollWidth > textEl.clientWidth;\n      };\n    }\n    const tooltipCtrl = {\n      getColumn: () => this.column,\n      getColDef: () => this.column.getColDef(),\n      getGui: () => eGui,\n      getLocation: () => \"header\",\n      getTooltipValue: () => {\n        if (value != null) {\n          return value;\n        }\n        const res = this.column.getColDef().headerTooltip;\n        return res;\n      },\n      shouldDisplayTooltip\n    };\n    const tooltipFeature = compBean.createManagedBean(new TooltipFeature(tooltipCtrl));\n    this.setRefreshFunction(\"tooltip\", () => tooltipFeature.refreshToolTip());\n  }\n  setupClassesFromColDef() {\n    const refreshHeaderClasses = () => {\n      const colDef = this.column.getColDef();\n      const classes = _getHeaderClassesFromColDef(colDef, this.gos, this.column, null);\n      const oldClasses = this.userHeaderClasses;\n      this.userHeaderClasses = new Set(classes);\n      classes.forEach((c) => {\n        if (oldClasses.has(c)) {\n          oldClasses.delete(c);\n        } else {\n          this.comp.addOrRemoveCssClass(c, true);\n        }\n      });\n      oldClasses.forEach((c) => this.comp.addOrRemoveCssClass(c, false));\n    };\n    this.setRefreshFunction(\"headerClasses\", refreshHeaderClasses);\n    refreshHeaderClasses();\n  }\n  setDragSource(eSource) {\n    this.dragSourceElement = eSource;\n    this.removeDragSource();\n    if (!eSource || !this.draggable) {\n      return;\n    }\n    const { column, beans, displayName, dragAndDropService, gos } = this;\n    const { columnModel } = beans;\n    let hideColumnOnExit = !this.gos.get(\"suppressDragLeaveHidesColumns\");\n    const dragSource = this.dragSource = {\n      type: 1 /* HeaderCell */,\n      eElement: eSource,\n      getDefaultIconName: () => hideColumnOnExit ? \"hide\" : \"notAllowed\",\n      getDragItem: () => this.createDragItem(column),\n      dragItemName: displayName,\n      onDragStarted: () => {\n        hideColumnOnExit = !gos.get(\"suppressDragLeaveHidesColumns\");\n        setColumnsMoving([column], true);\n      },\n      onDragStopped: () => setColumnsMoving([column], false),\n      onDragCancelled: () => setColumnsMoving([column], false),\n      onGridEnter: (dragItem) => {\n        if (hideColumnOnExit) {\n          const unlockedColumns = dragItem?.columns?.filter((col) => !col.getColDef().lockVisible) || [];\n          columnModel.setColsVisible(unlockedColumns, true, \"uiColumnMoved\");\n        }\n      },\n      onGridExit: (dragItem) => {\n        if (hideColumnOnExit) {\n          const unlockedColumns = dragItem?.columns?.filter((col) => !col.getColDef().lockVisible) || [];\n          columnModel.setColsVisible(unlockedColumns, false, \"uiColumnMoved\");\n        }\n      }\n    };\n    dragAndDropService.addDragSource(dragSource, true);\n  }\n  createDragItem(column) {\n    const visibleState = {};\n    visibleState[column.getId()] = column.isVisible();\n    return {\n      columns: [column],\n      visibleState\n    };\n  }\n  updateState() {\n    this.menuEnabled = this.menuService.isColumnMenuInHeaderEnabled(this.column);\n    this.openFilterEnabled = this.menuService.isFilterMenuInHeaderEnabled(this.column);\n    this.sortable = this.column.isSortable();\n    this.displayName = this.calculateDisplayName();\n    this.draggable = this.workOutDraggable();\n  }\n  setRefreshFunction(name, func) {\n    this.refreshFunctions[name] = func;\n  }\n  refresh(compBean) {\n    this.updateState();\n    this.refreshHeaderComp(compBean);\n    this.refreshAria();\n    Object.values(this.refreshFunctions).forEach((f) => f());\n  }\n  refreshHeaderComp(compBean) {\n    const newCompDetails = this.lookupUserCompDetails(compBean);\n    const compInstance = this.comp.getUserCompInstance();\n    const attemptRefresh = compInstance != null && this.userCompDetails.componentClass == newCompDetails.componentClass;\n    const headerCompRefreshed = attemptRefresh ? this.attemptHeaderCompRefresh(newCompDetails.params) : false;\n    if (headerCompRefreshed) {\n      this.setDragSource(this.dragSourceElement);\n    } else {\n      this.setCompDetails(newCompDetails);\n    }\n  }\n  attemptHeaderCompRefresh(params) {\n    const headerComp = this.comp.getUserCompInstance();\n    if (!headerComp) {\n      return false;\n    }\n    if (!headerComp.refresh) {\n      return false;\n    }\n    const res = headerComp.refresh(params);\n    return res;\n  }\n  calculateDisplayName() {\n    return this.beans.columnNameService.getDisplayNameForColumn(this.column, \"header\", true);\n  }\n  checkDisplayName(compBean) {\n    if (this.displayName !== this.calculateDisplayName()) {\n      this.refresh(compBean);\n    }\n  }\n  workOutDraggable() {\n    const colDef = this.column.getColDef();\n    const isSuppressMovableColumns = this.gos.get(\"suppressMovableColumns\");\n    const colCanMove = !isSuppressMovableColumns && !colDef.suppressMovable && !colDef.lockPosition;\n    return !!colCanMove || !!colDef.enableRowGroup || !!colDef.enablePivot;\n  }\n  setupWidth(compBean) {\n    const listener = () => {\n      const columnWidth = this.column.getActualWidth();\n      this.comp.setWidth(`${columnWidth}px`);\n    };\n    compBean.addManagedListeners(this.column, { widthChanged: listener });\n    listener();\n  }\n  setupMovingCss(compBean) {\n    const listener = () => {\n      this.comp.addOrRemoveCssClass(\"ag-header-cell-moving\", this.column.isMoving());\n    };\n    compBean.addManagedListeners(this.column, { movingChanged: listener });\n    listener();\n  }\n  setupMenuClass(compBean) {\n    const listener = () => {\n      this.comp.addOrRemoveCssClass(\"ag-column-menu-visible\", this.column.isMenuVisible());\n    };\n    compBean.addManagedListeners(this.column, { menuVisibleChanged: listener });\n    listener();\n  }\n  setupSortableClass(compBean) {\n    const updateSortableCssClass = () => {\n      this.comp.addOrRemoveCssClass(\"ag-header-cell-sortable\", !!this.sortable);\n    };\n    updateSortableCssClass();\n    this.setRefreshFunction(\"updateSortable\", updateSortableCssClass);\n    compBean.addManagedEventListeners({ sortChanged: this.refreshAriaSort.bind(this) });\n  }\n  setupFilterClass(compBean) {\n    const listener = () => {\n      const isFilterActive = this.column.isFilterActive();\n      this.comp.addOrRemoveCssClass(\"ag-header-cell-filtered\", isFilterActive);\n      this.refreshAria();\n    };\n    compBean.addManagedListeners(this.column, { filterActiveChanged: listener });\n    listener();\n  }\n  setupWrapTextClass() {\n    const listener = () => {\n      const wrapText = !!this.column.getColDef().wrapHeaderText;\n      this.comp.addOrRemoveCssClass(\"ag-header-cell-wrap-text\", wrapText);\n    };\n    listener();\n    this.setRefreshFunction(\"wrapText\", listener);\n  }\n  onHeaderHighlightChanged() {\n    const highlighted = this.column.getHighlighted();\n    const beforeOn = highlighted === 0 /* Before */;\n    const afterOn = highlighted === 1 /* After */;\n    this.comp.addOrRemoveCssClass(\"ag-header-highlight-before\", beforeOn);\n    this.comp.addOrRemoveCssClass(\"ag-header-highlight-after\", afterOn);\n  }\n  onDisplayedColumnsChanged() {\n    super.onDisplayedColumnsChanged();\n    if (!this.isAlive()) {\n      return;\n    }\n    this.onHeaderHeightChanged();\n  }\n  onHeaderHeightChanged() {\n    this.refreshSpanHeaderHeight();\n  }\n  refreshSpanHeaderHeight() {\n    const { eGui, column, comp, beans } = this;\n    const groupHeaderHeight = this.beans.columnModel.getGroupRowsHeight();\n    const isZeroGroupHeight = groupHeaderHeight.reduce((total, next) => total += next, 0) === 0;\n    comp.addOrRemoveCssClass(\"ag-header-parent-hidden\", isZeroGroupHeight);\n    if (!column.isSpanHeaderHeight()) {\n      eGui.style.removeProperty(\"top\");\n      eGui.style.removeProperty(\"height\");\n      comp.addOrRemoveCssClass(\"ag-header-span-height\", false);\n      comp.addOrRemoveCssClass(\"ag-header-span-total\", false);\n      return;\n    }\n    const { numberOfParents, isSpanningTotal } = this.column.getColumnGroupPaddingInfo();\n    comp.addOrRemoveCssClass(\"ag-header-span-height\", numberOfParents > 0);\n    const { columnModel } = beans;\n    const headerHeight = columnModel.getColumnHeaderRowHeight();\n    if (numberOfParents === 0) {\n      comp.addOrRemoveCssClass(\"ag-header-span-total\", false);\n      eGui.style.setProperty(\"top\", `0px`);\n      eGui.style.setProperty(\"height\", `${headerHeight}px`);\n      return;\n    }\n    comp.addOrRemoveCssClass(\"ag-header-span-total\", isSpanningTotal);\n    let extraHeight = 0;\n    for (let i = 0; i < numberOfParents; i++) {\n      extraHeight += groupHeaderHeight[groupHeaderHeight.length - 1 - i];\n    }\n    eGui.style.setProperty(\"top\", `${-extraHeight}px`);\n    eGui.style.setProperty(\"height\", `${headerHeight + extraHeight}px`);\n  }\n  refreshAriaSort() {\n    if (this.sortable) {\n      const translate = this.localeService.getLocaleTextFunc();\n      const sort = this.beans.sortController.getDisplaySortForColumn(this.column) || null;\n      this.comp.setAriaSort(_getAriaSortState(sort));\n      this.setAriaDescriptionProperty(\"sort\", translate(\"ariaSortableColumn\", \"Press ENTER to sort\"));\n    } else {\n      this.comp.setAriaSort();\n      this.setAriaDescriptionProperty(\"sort\", null);\n    }\n  }\n  refreshAriaMenu() {\n    if (this.menuEnabled) {\n      const translate = this.localeService.getLocaleTextFunc();\n      this.setAriaDescriptionProperty(\"menu\", translate(\"ariaMenuColumn\", \"Press ALT DOWN to open column menu\"));\n    } else {\n      this.setAriaDescriptionProperty(\"menu\", null);\n    }\n  }\n  refreshAriaFilterButton() {\n    if (this.openFilterEnabled && !this.menuService.isLegacyMenuEnabled()) {\n      const translate = this.localeService.getLocaleTextFunc();\n      this.setAriaDescriptionProperty(\n        \"filterButton\",\n        translate(\"ariaFilterColumn\", \"Press CTRL ENTER to open filter\")\n      );\n    } else {\n      this.setAriaDescriptionProperty(\"filterButton\", null);\n    }\n  }\n  refreshAriaFiltered() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const isFilterActive = this.column.isFilterActive();\n    if (isFilterActive) {\n      this.setAriaDescriptionProperty(\"filter\", translate(\"ariaColumnFiltered\", \"Column Filtered\"));\n    } else {\n      this.setAriaDescriptionProperty(\"filter\", null);\n    }\n  }\n  setAriaDescriptionProperty(property, value) {\n    if (value != null) {\n      this.ariaDescriptionProperties.set(property, value);\n    } else {\n      this.ariaDescriptionProperties.delete(property);\n    }\n  }\n  announceAriaDescription() {\n    if (!this.eGui.contains(_getActiveDomElement(this.beans.gos))) {\n      return;\n    }\n    const ariaDescription = Array.from(this.ariaDescriptionProperties.keys()).sort((a, b) => a === \"filter\" ? -1 : b.charCodeAt(0) - a.charCodeAt(0)).map((key) => this.ariaDescriptionProperties.get(key)).join(\". \");\n    this.beans.ariaAnnouncementService.announceValue(ariaDescription, \"columnHeader\");\n  }\n  refreshAria() {\n    this.refreshAriaSort();\n    this.refreshAriaMenu();\n    this.refreshAriaFilterButton();\n    this.refreshAriaFiltered();\n  }\n  addColumnHoverListener(compBean) {\n    const listener = () => {\n      if (!this.gos.get(\"columnHoverHighlight\")) {\n        return;\n      }\n      const isHovered = this.beans.columnHoverService.isHovered(this.column);\n      this.comp.addOrRemoveCssClass(\"ag-column-hover\", isHovered);\n    };\n    compBean.addManagedEventListeners({ columnHoverChanged: listener });\n    listener();\n  }\n  getColId() {\n    return this.column.getColId();\n  }\n  addActiveHeaderMouseListeners(compBean) {\n    const listener = (e) => this.handleMouseOverChange(e.type === \"mouseenter\");\n    const clickListener = () => this.dispatchColumnMouseEvent(\"columnHeaderClicked\", this.column);\n    const contextMenuListener = (event) => this.handleContextMenuMouseEvent(event, void 0, this.column);\n    compBean.addManagedListeners(this.getGui(), {\n      mouseenter: listener,\n      mouseleave: listener,\n      click: clickListener,\n      contextmenu: contextMenuListener\n    });\n  }\n  handleMouseOverChange(isMouseOver) {\n    this.setActiveHeader(isMouseOver);\n    this.eventService.dispatchEvent({\n      type: isMouseOver ? \"columnHeaderMouseOver\" : \"columnHeaderMouseLeave\",\n      column: this.column\n    });\n  }\n  setActiveHeader(active) {\n    this.comp.addOrRemoveCssClass(\"ag-header-active\", active);\n  }\n  getAnchorElementForMenu(isFilter) {\n    const headerComp = this.comp.getUserCompInstance();\n    if (headerComp instanceof HeaderComp) {\n      return headerComp.getAnchorElementForMenu(isFilter);\n    }\n    return this.getGui();\n  }\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/columnGroup/groupResizeFeature.ts\nvar GroupResizeFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.horizontalResizeService = beans.horizontalResizeService;\n    this.autoWidthCalculator = beans.autoWidthCalculator;\n    this.visibleColsService = beans.visibleColsService;\n    this.columnSizeService = beans.columnSizeService;\n    this.columnAutosizeService = beans.columnAutosizeService;\n  }\n  constructor(comp, eResize, pinned, columnGroup) {\n    super();\n    this.eResize = eResize;\n    this.comp = comp;\n    this.pinned = pinned;\n    this.columnGroup = columnGroup;\n  }\n  postConstruct() {\n    if (!this.columnGroup.isResizable()) {\n      this.comp.setResizableDisplayed(false);\n      return;\n    }\n    const finishedWithResizeFunc = this.horizontalResizeService.addResizeBar({\n      eResizeBar: this.eResize,\n      onResizeStart: this.onResizeStart.bind(this),\n      onResizing: this.onResizing.bind(this, false),\n      onResizeEnd: this.onResizing.bind(this, true)\n    });\n    this.addDestroyFunc(finishedWithResizeFunc);\n    if (!this.gos.get(\"suppressAutoSize\")) {\n      const skipHeaderOnAutoSize = this.gos.get(\"skipHeaderOnAutoSize\");\n      this.eResize.addEventListener(\"dblclick\", () => {\n        const keys = [];\n        const leafCols = this.columnGroup.getDisplayedLeafColumns();\n        leafCols.forEach((column) => {\n          if (!column.getColDef().suppressAutoSize) {\n            keys.push(column.getColId());\n          }\n        });\n        if (keys.length > 0) {\n          this.columnAutosizeService.autoSizeCols({\n            colKeys: keys,\n            skipHeader: skipHeaderOnAutoSize,\n            stopAtGroup: this.columnGroup,\n            source: \"uiColumnResized\"\n          });\n        }\n        this.resizeLeafColumnsToFit(\"uiColumnResized\");\n      });\n    }\n  }\n  onResizeStart(shiftKey) {\n    const initialValues = this.getInitialValues(shiftKey);\n    this.storeLocalValues(initialValues);\n    this.toggleColumnResizing(true);\n  }\n  onResizing(finished, resizeAmount, source = \"uiColumnResized\") {\n    const resizeAmountNormalised = this.normaliseDragChange(resizeAmount);\n    const width = this.resizeStartWidth + resizeAmountNormalised;\n    this.resizeColumnsFromLocalValues(width, source, finished);\n  }\n  getInitialValues(shiftKey) {\n    const columnsToResize = this.getColumnsToResize();\n    const resizeStartWidth = this.getInitialSizeOfColumns(columnsToResize);\n    const resizeRatios = this.getSizeRatiosOfColumns(columnsToResize, resizeStartWidth);\n    const columnSizeAndRatios = {\n      columnsToResize,\n      resizeStartWidth,\n      resizeRatios\n    };\n    let groupAfter = null;\n    if (shiftKey) {\n      groupAfter = this.visibleColsService.getGroupAtDirection(this.columnGroup, \"After\");\n    }\n    if (groupAfter) {\n      const takeFromLeafCols = groupAfter.getDisplayedLeafColumns();\n      const groupAfterColumns = columnSizeAndRatios.groupAfterColumns = takeFromLeafCols.filter(\n        (col) => col.isResizable()\n      );\n      const groupAfterStartWidth = columnSizeAndRatios.groupAfterStartWidth = this.getInitialSizeOfColumns(groupAfterColumns);\n      columnSizeAndRatios.groupAfterRatios = this.getSizeRatiosOfColumns(groupAfterColumns, groupAfterStartWidth);\n    } else {\n      columnSizeAndRatios.groupAfterColumns = void 0;\n      columnSizeAndRatios.groupAfterStartWidth = void 0;\n      columnSizeAndRatios.groupAfterRatios = void 0;\n    }\n    return columnSizeAndRatios;\n  }\n  storeLocalValues(initialValues) {\n    const {\n      columnsToResize,\n      resizeStartWidth,\n      resizeRatios,\n      groupAfterColumns,\n      groupAfterStartWidth,\n      groupAfterRatios\n    } = initialValues;\n    this.resizeCols = columnsToResize;\n    this.resizeStartWidth = resizeStartWidth;\n    this.resizeRatios = resizeRatios;\n    this.resizeTakeFromCols = groupAfterColumns;\n    this.resizeTakeFromStartWidth = groupAfterStartWidth;\n    this.resizeTakeFromRatios = groupAfterRatios;\n  }\n  clearLocalValues() {\n    this.resizeCols = void 0;\n    this.resizeRatios = void 0;\n    this.resizeTakeFromCols = void 0;\n    this.resizeTakeFromRatios = void 0;\n  }\n  resizeLeafColumnsToFit(source) {\n    const preferredSize = this.autoWidthCalculator.getPreferredWidthForColumnGroup(this.columnGroup);\n    const initialValues = this.getInitialValues();\n    if (preferredSize > initialValues.resizeStartWidth) {\n      this.resizeColumns(initialValues, preferredSize, source, true);\n    }\n  }\n  resizeColumnsFromLocalValues(totalWidth, source, finished = true) {\n    if (!this.resizeCols || !this.resizeRatios) {\n      return;\n    }\n    const initialValues = {\n      columnsToResize: this.resizeCols,\n      resizeStartWidth: this.resizeStartWidth,\n      resizeRatios: this.resizeRatios,\n      groupAfterColumns: this.resizeTakeFromCols ?? void 0,\n      groupAfterStartWidth: this.resizeTakeFromStartWidth ?? void 0,\n      groupAfterRatios: this.resizeTakeFromRatios ?? void 0\n    };\n    this.resizeColumns(initialValues, totalWidth, source, finished);\n  }\n  resizeColumns(initialValues, totalWidth, source, finished = true) {\n    const {\n      columnsToResize,\n      resizeStartWidth,\n      resizeRatios,\n      groupAfterColumns,\n      groupAfterStartWidth,\n      groupAfterRatios\n    } = initialValues;\n    const resizeSets = [];\n    resizeSets.push({\n      columns: columnsToResize,\n      ratios: resizeRatios,\n      width: totalWidth\n    });\n    if (groupAfterColumns) {\n      const diff = totalWidth - resizeStartWidth;\n      resizeSets.push({\n        columns: groupAfterColumns,\n        ratios: groupAfterRatios,\n        width: groupAfterStartWidth - diff\n      });\n    }\n    this.columnSizeService.resizeColumnSets({\n      resizeSets,\n      finished,\n      source\n    });\n    if (finished) {\n      this.toggleColumnResizing(false);\n    }\n  }\n  toggleColumnResizing(resizing) {\n    this.comp.addOrRemoveCssClass(\"ag-column-resizing\", resizing);\n  }\n  getColumnsToResize() {\n    const leafCols = this.columnGroup.getDisplayedLeafColumns();\n    return leafCols.filter((col) => col.isResizable());\n  }\n  getInitialSizeOfColumns(columns) {\n    return columns.reduce((totalWidth, column) => totalWidth + column.getActualWidth(), 0);\n  }\n  getSizeRatiosOfColumns(columns, initialSizeOfColumns) {\n    return columns.map((column) => column.getActualWidth() / initialSizeOfColumns);\n  }\n  // optionally inverts the drag, depending on pinned and RTL\n  // note - this method is duplicated in RenderedHeaderCell - should refactor out?\n  normaliseDragChange(dragChange) {\n    let result = dragChange;\n    if (this.gos.get(\"enableRtl\")) {\n      if (this.pinned !== \"left\") {\n        result *= -1;\n      }\n    } else if (this.pinned === \"right\") {\n      result *= -1;\n    }\n    return result;\n  }\n  destroy() {\n    super.destroy();\n    this.clearLocalValues();\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/columnGroup/groupWidthFeature.ts\nvar GroupWidthFeature = class extends BeanStub {\n  constructor(comp, columnGroup) {\n    super();\n    // the children can change, we keep destroy functions related to listening to the children here\n    this.removeChildListenersFuncs = [];\n    this.columnGroup = columnGroup;\n    this.comp = comp;\n  }\n  postConstruct() {\n    this.addListenersToChildrenColumns();\n    this.addManagedListeners(this.columnGroup, {\n      displayedChildrenChanged: this.onDisplayedChildrenChanged.bind(this)\n    });\n    this.onWidthChanged();\n    this.addDestroyFunc(this.removeListenersOnChildrenColumns.bind(this));\n  }\n  addListenersToChildrenColumns() {\n    this.removeListenersOnChildrenColumns();\n    const widthChangedListener = this.onWidthChanged.bind(this);\n    this.columnGroup.getLeafColumns().forEach((column) => {\n      column.addEventListener(\"widthChanged\", widthChangedListener);\n      column.addEventListener(\"visibleChanged\", widthChangedListener);\n      this.removeChildListenersFuncs.push(() => {\n        column.removeEventListener(\"widthChanged\", widthChangedListener);\n        column.removeEventListener(\"visibleChanged\", widthChangedListener);\n      });\n    });\n  }\n  removeListenersOnChildrenColumns() {\n    this.removeChildListenersFuncs.forEach((func) => func());\n    this.removeChildListenersFuncs = [];\n  }\n  onDisplayedChildrenChanged() {\n    this.addListenersToChildrenColumns();\n    this.onWidthChanged();\n  }\n  onWidthChanged() {\n    const columnWidth = this.columnGroup.getActualWidth();\n    this.comp.setWidth(`${columnWidth}px`);\n    this.comp.addOrRemoveCssClass(\"ag-hidden\", columnWidth === 0);\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/columnGroup/headerGroupCellCtrl.ts\nvar HeaderGroupCellCtrl = class extends AbstractHeaderCellCtrl {\n  constructor(columnGroup, beans, parentRowCtrl) {\n    super(columnGroup, beans, parentRowCtrl);\n    this.onSuppressColMoveChange = () => {\n      if (!this.isAlive() || this.isSuppressMoving()) {\n        this.removeDragSource();\n      } else {\n        if (!this.dragSource) {\n          const eGui = this.getGui();\n          this.setDragSource(eGui);\n        }\n      }\n    };\n    this.column = columnGroup;\n  }\n  setComp(comp, eGui, eResize, eHeaderCompWrapper, compBean) {\n    this.comp = comp;\n    compBean = setupCompBean(this, this.beans.context, compBean);\n    this.setGui(eGui, compBean);\n    this.displayName = this.beans.columnNameService.getDisplayNameForColumnGroup(this.column, \"header\");\n    this.addClasses();\n    this.setupMovingCss(compBean);\n    this.setupExpandable(compBean);\n    this.setupTooltip(compBean);\n    this.setupAutoHeight({\n      wrapperElement: eHeaderCompWrapper,\n      compBean\n    });\n    this.setupUserComp(compBean);\n    this.addHeaderMouseListeners(compBean);\n    this.addManagedPropertyListener(\"groupHeaderHeight\", this.refreshMaxHeaderHeight.bind(this));\n    this.refreshMaxHeaderHeight();\n    const pinned = this.getParentRowCtrl().getPinned();\n    const leafCols = this.column.getProvidedColumnGroup().getLeafColumns();\n    compBean.createManagedBean(new HoverFeature(leafCols, eGui));\n    compBean.createManagedBean(new SetLeftFeature(this.column, eGui, this.beans));\n    compBean.createManagedBean(new GroupWidthFeature(comp, this.column));\n    this.resizeFeature = compBean.createManagedBean(new GroupResizeFeature(comp, eResize, pinned, this.column));\n    compBean.createManagedBean(\n      new ManagedFocusFeature(eGui, {\n        shouldStopEventPropagation: this.shouldStopEventPropagation.bind(this),\n        onTabKeyDown: () => void 0,\n        handleKeyDown: this.handleKeyDown.bind(this),\n        onFocusIn: this.onFocusIn.bind(this)\n      })\n    );\n    this.addHighlightListeners(compBean, leafCols);\n    compBean.addManagedPropertyListener(\"suppressMovableColumns\", this.onSuppressColMoveChange);\n    this.addResizeAndMoveKeyboardListeners(compBean);\n    compBean.addDestroyFunc(() => this.clearComponent());\n  }\n  refreshMaxHeaderHeight() {\n    const { gos, comp } = this;\n    const groupHeaderHeight = gos.get(\"groupHeaderHeight\");\n    if (groupHeaderHeight != null) {\n      if (groupHeaderHeight === 0) {\n        comp.setHeaderWrapperHidden(true);\n      } else {\n        comp.setHeaderWrapperMaxHeight(groupHeaderHeight);\n      }\n    } else {\n      comp.setHeaderWrapperHidden(false);\n      comp.setHeaderWrapperMaxHeight(null);\n    }\n  }\n  addHighlightListeners(compBean, columns) {\n    if (!this.beans.gos.get(\"suppressMoveWhenColumnDragging\")) {\n      return;\n    }\n    for (const column of columns) {\n      compBean.addManagedListeners(column, {\n        headerHighlightChanged: this.onLeafColumnHighlightChanged.bind(this, column)\n      });\n    }\n  }\n  onLeafColumnHighlightChanged(column) {\n    const displayedColumns = this.column.getDisplayedLeafColumns();\n    const isFirst = displayedColumns[0] === column;\n    const isLast = _last(displayedColumns) === column;\n    if (!isFirst && !isLast) {\n      return;\n    }\n    const highlighted = column.getHighlighted();\n    const isColumnMoveAtThisLevel = !!this.getParentRowCtrl().findHeaderCellCtrl((ctrl) => {\n      return ctrl.getColumnGroupChild().isMoving();\n    });\n    let beforeOn = false;\n    let afterOn = false;\n    if (isColumnMoveAtThisLevel) {\n      const isRtl = this.beans.gos.get(\"enableRtl\");\n      const isHighlightAfter = highlighted === 1 /* After */;\n      const isHighlightBefore = highlighted === 0 /* Before */;\n      if (isFirst) {\n        if (isRtl) {\n          afterOn = isHighlightAfter;\n        } else {\n          beforeOn = isHighlightBefore;\n        }\n      }\n      if (isLast) {\n        if (isRtl) {\n          beforeOn = isHighlightBefore;\n        } else {\n          afterOn = isHighlightAfter;\n        }\n      }\n    }\n    this.comp.addOrRemoveCssClass(\"ag-header-highlight-before\", beforeOn);\n    this.comp.addOrRemoveCssClass(\"ag-header-highlight-after\", afterOn);\n  }\n  getColumn() {\n    return this.column;\n  }\n  resizeHeader(delta, shiftKey) {\n    if (!this.resizeFeature) {\n      return;\n    }\n    const initialValues = this.resizeFeature.getInitialValues(shiftKey);\n    this.resizeFeature.resizeColumns(\n      initialValues,\n      initialValues.resizeStartWidth + delta,\n      \"uiColumnResized\",\n      true\n    );\n  }\n  moveHeader(hDirection) {\n    const { beans, eGui, column, ctrlsService } = this;\n    const { gos, columnModel, columnMoveService, visibleColsService } = beans;\n    const isRtl = gos.get(\"enableRtl\");\n    const isLeft = hDirection === 0 /* Left */;\n    const pinned = this.getPinned();\n    const rect = eGui.getBoundingClientRect();\n    const left = rect.left;\n    const width = rect.width;\n    const xPosition = normaliseX({\n      x: isLeft !== isRtl ? left - 20 : left + width + 20,\n      pinned,\n      fromKeyboard: true,\n      gos,\n      ctrlsService\n    });\n    const id = column.getGroupId();\n    const headerPosition = this.focusService.getFocusedHeader();\n    attemptMoveColumns({\n      allMovingColumns: this.column.getLeafColumns(),\n      isFromHeader: true,\n      fromLeft: hDirection === 1 /* Right */,\n      xPosition,\n      pinned,\n      fromEnter: false,\n      fakeEvent: false,\n      gos,\n      columnModel,\n      columnMoveService,\n      visibleColsService,\n      finished: true\n    });\n    const displayedLeafColumns = column.getDisplayedLeafColumns();\n    const targetColumn = isLeft ? displayedLeafColumns[0] : _last(displayedLeafColumns);\n    this.ctrlsService.getGridBodyCtrl().getScrollFeature().ensureColumnVisible(targetColumn, \"auto\");\n    if ((!this.isAlive() || this.beans.gos.get(\"ensureDomOrder\")) && headerPosition) {\n      this.restoreFocus(id, column, headerPosition);\n    }\n  }\n  restoreFocus(groupId, previousColumnGroup, previousPosition) {\n    const leafCols = previousColumnGroup.getLeafColumns();\n    if (!leafCols.length) {\n      return;\n    }\n    const parent = leafCols[0].getParent();\n    if (!parent) {\n      return;\n    }\n    const newColumnGroup = this.findGroupWidthId(parent, groupId);\n    if (newColumnGroup) {\n      this.focusService.focusHeaderPosition({\n        headerPosition: {\n          ...previousPosition,\n          column: newColumnGroup\n        }\n      });\n    }\n  }\n  findGroupWidthId(columnGroup, id) {\n    while (columnGroup) {\n      if (columnGroup.getGroupId() === id) {\n        return columnGroup;\n      }\n      columnGroup = columnGroup.getParent();\n    }\n    return null;\n  }\n  resizeLeafColumnsToFit(source) {\n    if (!this.resizeFeature) {\n      return;\n    }\n    this.resizeFeature.resizeLeafColumnsToFit(source);\n  }\n  setupUserComp(compBean) {\n    const params = this.gos.addGridCommonParams({\n      displayName: this.displayName,\n      columnGroup: this.column,\n      setExpanded: (expanded) => {\n        this.beans.columnModel.setColumnGroupOpened(\n          this.column.getProvidedColumnGroup(),\n          expanded,\n          \"gridInitializing\"\n        );\n      },\n      setTooltip: (value, shouldDisplayTooltip) => {\n        this.setupTooltip(compBean, value, shouldDisplayTooltip);\n      }\n    });\n    const compDetails = this.userComponentFactory.getHeaderGroupCompDetails(params);\n    this.comp.setUserCompDetails(compDetails);\n  }\n  addHeaderMouseListeners(compBean) {\n    const listener = (e) => this.handleMouseOverChange(e.type === \"mouseenter\");\n    const clickListener = () => this.dispatchColumnMouseEvent(\"columnHeaderClicked\", this.column.getProvidedColumnGroup());\n    const contextMenuListener = (event) => this.handleContextMenuMouseEvent(event, void 0, this.column.getProvidedColumnGroup());\n    compBean.addManagedListeners(this.getGui(), {\n      mouseenter: listener,\n      mouseleave: listener,\n      click: clickListener,\n      contextmenu: contextMenuListener\n    });\n  }\n  handleMouseOverChange(isMouseOver) {\n    this.eventService.dispatchEvent({\n      type: isMouseOver ? \"columnHeaderMouseOver\" : \"columnHeaderMouseLeave\",\n      column: this.column.getProvidedColumnGroup()\n    });\n  }\n  setupTooltip(compBean, value, shouldDisplayTooltip) {\n    if (this.tooltipFeature) {\n      this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n    }\n    const colGroupDef = this.column.getColGroupDef();\n    const isTooltipWhenTruncated = this.gos.get(\"tooltipShowMode\") === \"whenTruncated\";\n    const eGui = this.eGui;\n    if (!shouldDisplayTooltip && isTooltipWhenTruncated && !colGroupDef?.headerGroupComponent) {\n      shouldDisplayTooltip = () => {\n        const textEl = eGui.querySelector(\".ag-header-group-text\");\n        if (!textEl) {\n          return true;\n        }\n        return textEl.scrollWidth > textEl.clientWidth;\n      };\n    }\n    const tooltipCtrl = {\n      getColumn: () => this.column,\n      getGui: () => eGui,\n      getLocation: () => \"headerGroup\",\n      getTooltipValue: () => value ?? (colGroupDef && colGroupDef.headerTooltip),\n      shouldDisplayTooltip\n    };\n    if (colGroupDef) {\n      tooltipCtrl.getColDef = () => colGroupDef;\n    }\n    compBean.createManagedBean(new TooltipFeature(tooltipCtrl));\n  }\n  setupExpandable(compBean) {\n    const providedColGroup = this.column.getProvidedColumnGroup();\n    this.refreshExpanded();\n    const listener = this.refreshExpanded.bind(this);\n    compBean.addManagedListeners(providedColGroup, {\n      expandedChanged: listener,\n      expandableChanged: listener\n    });\n  }\n  refreshExpanded() {\n    const { column } = this;\n    this.expandable = column.isExpandable();\n    const expanded = column.isExpanded();\n    if (this.expandable) {\n      this.comp.setAriaExpanded(expanded ? \"true\" : \"false\");\n    } else {\n      this.comp.setAriaExpanded(void 0);\n    }\n  }\n  getColId() {\n    return this.column.getUniqueId();\n  }\n  addClasses() {\n    const colGroupDef = this.column.getColGroupDef();\n    const classes = _getHeaderClassesFromColDef(colGroupDef, this.gos, null, this.column);\n    if (this.column.isPadding()) {\n      classes.push(\"ag-header-group-cell-no-group\");\n      const leafCols = this.column.getLeafColumns();\n      if (leafCols.every((col) => col.isSpanHeaderHeight())) {\n        classes.push(\"ag-header-span-height\");\n      }\n    } else {\n      classes.push(\"ag-header-group-cell-with-group\");\n      if (colGroupDef?.wrapHeaderText) {\n        classes.push(\"ag-header-cell-wrap-text\");\n      }\n    }\n    classes.forEach((c) => this.comp.addOrRemoveCssClass(c, true));\n  }\n  setupMovingCss(compBean) {\n    const providedColumnGroup = this.column.getProvidedColumnGroup();\n    const leafColumns = providedColumnGroup.getLeafColumns();\n    const listener = () => this.comp.addOrRemoveCssClass(\"ag-header-cell-moving\", this.column.isMoving());\n    leafColumns.forEach((col) => {\n      compBean.addManagedListeners(col, { movingChanged: listener });\n    });\n    listener();\n  }\n  onFocusIn(e) {\n    if (!this.eGui.contains(e.relatedTarget)) {\n      const rowIndex = this.getRowIndex();\n      this.beans.focusService.setFocusedHeader(rowIndex, this.column);\n    }\n  }\n  handleKeyDown(e) {\n    super.handleKeyDown(e);\n    const wrapperHasFocus = this.getWrapperHasFocus();\n    if (!this.expandable || !wrapperHasFocus) {\n      return;\n    }\n    if (e.key === KeyCode.ENTER) {\n      const column = this.column;\n      const newExpandedValue = !column.isExpanded();\n      this.beans.columnModel.setColumnGroupOpened(\n        column.getProvidedColumnGroup(),\n        newExpandedValue,\n        \"uiColumnExpanded\"\n      );\n    }\n  }\n  // unlike columns, this will only get called once, as we don't react on props on column groups\n  // (we will always destroy and recreate this comp if something changes)\n  setDragSource(eHeaderGroup) {\n    if (!this.isAlive() || this.isSuppressMoving()) {\n      return;\n    }\n    this.removeDragSource();\n    if (!eHeaderGroup) {\n      return;\n    }\n    const { beans, column, displayName, gos, dragAndDropService } = this;\n    const { columnModel } = beans;\n    const allLeafColumns = column.getProvidedColumnGroup().getLeafColumns();\n    let hideColumnOnExit = !gos.get(\"suppressDragLeaveHidesColumns\");\n    const dragSource = this.dragSource = {\n      type: 1 /* HeaderCell */,\n      eElement: eHeaderGroup,\n      getDefaultIconName: () => hideColumnOnExit ? \"hide\" : \"notAllowed\",\n      dragItemName: displayName,\n      // we add in the original group leaf columns, so we move both visible and non-visible items\n      getDragItem: () => this.getDragItemForGroup(column),\n      onDragStarted: () => {\n        hideColumnOnExit = !gos.get(\"suppressDragLeaveHidesColumns\");\n        setColumnsMoving(allLeafColumns, true);\n      },\n      onDragStopped: () => setColumnsMoving(allLeafColumns, false),\n      onDragCancelled: () => setColumnsMoving(allLeafColumns, false),\n      onGridEnter: (dragItem) => {\n        if (hideColumnOnExit) {\n          const { columns = [], visibleState } = dragItem ?? {};\n          const unlockedColumns = columns.filter(\n            (col) => !col.getColDef().lockVisible && (!visibleState || visibleState[col.getColId()])\n          );\n          columnModel.setColsVisible(unlockedColumns, true, \"uiColumnMoved\");\n        }\n      },\n      onGridExit: (dragItem) => {\n        if (hideColumnOnExit) {\n          const unlockedColumns = dragItem?.columns?.filter((col) => !col.getColDef().lockVisible) || [];\n          columnModel.setColsVisible(unlockedColumns, false, \"uiColumnMoved\");\n        }\n      }\n    };\n    dragAndDropService.addDragSource(dragSource, true);\n  }\n  // when moving the columns, we want to move all the columns (contained within the DragItem) in this group in one go,\n  // and in the order they are currently in the screen.\n  getDragItemForGroup(columnGroup) {\n    const allColumnsOriginalOrder = columnGroup.getProvidedColumnGroup().getLeafColumns();\n    const visibleState = {};\n    allColumnsOriginalOrder.forEach((column) => visibleState[column.getId()] = column.isVisible());\n    const allColumnsCurrentOrder = [];\n    this.beans.visibleColsService.getAllCols().forEach((column) => {\n      if (allColumnsOriginalOrder.indexOf(column) >= 0) {\n        allColumnsCurrentOrder.push(column);\n        _removeFromArray(allColumnsOriginalOrder, column);\n      }\n    });\n    allColumnsOriginalOrder.forEach((column) => allColumnsCurrentOrder.push(column));\n    const columnsInSplit = [];\n    const columnGroupColumns = columnGroup.getLeafColumns();\n    for (const col of allColumnsCurrentOrder) {\n      if (columnGroupColumns.indexOf(col) !== -1) {\n        columnsInSplit.push(col);\n      }\n    }\n    return {\n      columns: allColumnsCurrentOrder,\n      columnsInSplit,\n      visibleState\n    };\n  }\n  isSuppressMoving() {\n    let childSuppressesMoving = false;\n    this.column.getLeafColumns().forEach((column) => {\n      if (column.getColDef().suppressMovable || column.getColDef().lockPosition) {\n        childSuppressesMoving = true;\n      }\n    });\n    const result = childSuppressesMoving || this.gos.get(\"suppressMovableColumns\");\n    return result;\n  }\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/headerRendering/row/headerRowCtrl.ts\nvar instanceIdSequence3 = 0;\nvar HeaderRowCtrl = class extends BeanStub {\n  constructor(rowIndex, pinned, type) {\n    super();\n    this.instanceId = instanceIdSequence3++;\n    this.rowIndex = rowIndex;\n    this.pinned = pinned;\n    this.type = type;\n    const typeClass = type == \"group\" /* COLUMN_GROUP */ ? `ag-header-row-column-group` : type == \"filter\" /* FLOATING_FILTER */ ? `ag-header-row-column-filter` : `ag-header-row-column`;\n    this.headerRowClass = `ag-header-row ${typeClass}`;\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n  }\n  postConstruct() {\n    this.isPrintLayout = _isDomLayout(this.gos, \"print\");\n    this.isEnsureDomOrder = this.gos.get(\"ensureDomOrder\");\n  }\n  /** Checks that every header cell that is currently visible has been rendered.\n   * Can only be false under some circumstances when using React\n   */\n  areCellsRendered() {\n    if (!this.comp) {\n      return false;\n    }\n    return this.getHeaderCellCtrls().every((ctrl) => ctrl.getGui() != null);\n  }\n  /**\n   *\n   * @param comp Proxy to the actual component\n   * @param initCompState Should the component be initialised with the current state of the controller. Default: true\n   */\n  setComp(comp, compBean, initCompState = true) {\n    this.comp = comp;\n    compBean = setupCompBean(this, this.beans.context, compBean);\n    if (initCompState) {\n      this.onRowHeightChanged();\n      this.onVirtualColumnsChanged();\n    }\n    this.setWidth();\n    this.addEventListeners(compBean);\n  }\n  getHeaderRowClass() {\n    return this.headerRowClass;\n  }\n  getAriaRowIndex() {\n    return this.rowIndex + 1;\n  }\n  addEventListeners(compBean) {\n    const onHeightChanged = this.onRowHeightChanged.bind(this);\n    compBean.addManagedEventListeners({\n      columnResized: this.onColumnResized.bind(this),\n      displayedColumnsChanged: this.onDisplayedColumnsChanged.bind(this),\n      virtualColumnsChanged: (params) => this.onVirtualColumnsChanged(params.afterScroll),\n      columnGroupHeaderHeightChanged: onHeightChanged,\n      columnHeaderHeightChanged: onHeightChanged,\n      gridStylesChanged: onHeightChanged,\n      advancedFilterEnabledChanged: onHeightChanged\n    });\n    compBean.addManagedPropertyListener(\"domLayout\", this.onDisplayedColumnsChanged.bind(this));\n    compBean.addManagedPropertyListener(\"ensureDomOrder\", (e) => this.isEnsureDomOrder = e.currentValue);\n    compBean.addManagedPropertyListeners(\n      [\n        \"headerHeight\",\n        \"pivotHeaderHeight\",\n        \"groupHeaderHeight\",\n        \"pivotGroupHeaderHeight\",\n        \"floatingFiltersHeight\"\n      ],\n      onHeightChanged\n    );\n  }\n  getHeaderCellCtrl(column) {\n    if (!this.headerCellCtrls) {\n      return;\n    }\n    return _values(this.headerCellCtrls).find((cellCtrl) => cellCtrl.getColumnGroupChild() === column);\n  }\n  onDisplayedColumnsChanged() {\n    this.isPrintLayout = _isDomLayout(this.gos, \"print\");\n    this.onVirtualColumnsChanged();\n    this.setWidth();\n    this.onRowHeightChanged();\n  }\n  getType() {\n    return this.type;\n  }\n  onColumnResized() {\n    this.setWidth();\n  }\n  setWidth() {\n    const width = this.getWidthForRow();\n    this.comp.setWidth(`${width}px`);\n  }\n  getWidthForRow() {\n    const { visibleColsService: presentedColsService } = this.beans;\n    if (this.isPrintLayout) {\n      const pinned = this.pinned != null;\n      if (pinned) {\n        return 0;\n      }\n      return presentedColsService.getContainerWidth(\"right\") + presentedColsService.getContainerWidth(\"left\") + presentedColsService.getContainerWidth(null);\n    }\n    return presentedColsService.getContainerWidth(this.pinned);\n  }\n  onRowHeightChanged() {\n    const { topOffset, rowHeight } = this.getTopAndHeight();\n    this.comp.setTop(topOffset + \"px\");\n    this.comp.setHeight(rowHeight + \"px\");\n  }\n  getTopAndHeight() {\n    const { columnModel, filterManager } = this.beans;\n    const sizes = [];\n    const groupHeadersHeight = columnModel.getGroupRowsHeight();\n    const headerHeight = columnModel.getColumnHeaderRowHeight();\n    sizes.push(...groupHeadersHeight);\n    sizes.push(headerHeight);\n    if (filterManager?.hasFloatingFilters()) {\n      sizes.push(columnModel.getFloatingFiltersHeight());\n    }\n    let topOffset = 0;\n    for (let i = 0; i < this.rowIndex; i++) {\n      topOffset += sizes[i];\n    }\n    const rowHeight = sizes[this.rowIndex];\n    return { topOffset, rowHeight };\n  }\n  getPinned() {\n    return this.pinned;\n  }\n  getRowIndex() {\n    return this.rowIndex;\n  }\n  onVirtualColumnsChanged(afterScroll = false) {\n    const ctrlsToDisplay = this.getHeaderCtrls();\n    const forceOrder = this.isEnsureDomOrder || this.isPrintLayout;\n    this.comp.setHeaderCtrls(ctrlsToDisplay, forceOrder, afterScroll);\n  }\n  getHeaderCtrls() {\n    const oldCtrls = this.headerCellCtrls;\n    this.headerCellCtrls = /* @__PURE__ */ new Map();\n    const columns = this.getColumnsInViewport();\n    for (const child of columns) {\n      this.recycleAndCreateHeaderCtrls(child, oldCtrls);\n    }\n    const isFocusedAndDisplayed = (ctrl) => {\n      const { focusService, visibleColsService } = this.beans;\n      const isFocused = focusService.isHeaderWrapperFocused(ctrl);\n      if (!isFocused) {\n        return false;\n      }\n      const isDisplayed = visibleColsService.isVisible(ctrl.getColumnGroupChild());\n      return isDisplayed;\n    };\n    if (oldCtrls) {\n      for (const [id, oldCtrl] of oldCtrls) {\n        const keepCtrl = isFocusedAndDisplayed(oldCtrl);\n        if (keepCtrl) {\n          this.headerCellCtrls.set(id, oldCtrl);\n        } else {\n          this.destroyBean(oldCtrl);\n        }\n      }\n    }\n    return this.getHeaderCellCtrls();\n  }\n  getHeaderCellCtrls() {\n    return Array.from(this.headerCellCtrls?.values() ?? []);\n  }\n  recycleAndCreateHeaderCtrls(headerColumn, oldCtrls) {\n    if (!this.headerCellCtrls) {\n      return;\n    }\n    if (headerColumn.isEmptyGroup()) {\n      return;\n    }\n    const idOfChild = headerColumn.getUniqueId();\n    let headerCtrl;\n    if (oldCtrls) {\n      headerCtrl = oldCtrls.get(idOfChild);\n      oldCtrls.delete(idOfChild);\n    }\n    const forOldColumn = headerCtrl && headerCtrl.getColumnGroupChild() != headerColumn;\n    if (forOldColumn) {\n      this.destroyBean(headerCtrl);\n      headerCtrl = void 0;\n    }\n    if (headerCtrl == null) {\n      switch (this.type) {\n        case \"filter\" /* FLOATING_FILTER */: {\n          headerCtrl = this.createBean(\n            this.beans.ctrlsFactory.getInstance(\n              \"headerFilterCell\",\n              headerColumn,\n              this.beans,\n              this\n            )\n          );\n          break;\n        }\n        case \"group\" /* COLUMN_GROUP */:\n          headerCtrl = this.createBean(\n            new HeaderGroupCellCtrl(headerColumn, this.beans, this)\n          );\n          break;\n        default:\n          headerCtrl = this.createBean(new HeaderCellCtrl(headerColumn, this.beans, this));\n          break;\n      }\n    }\n    this.headerCellCtrls.set(idOfChild, headerCtrl);\n  }\n  getColumnsInViewport() {\n    return this.isPrintLayout ? this.getColumnsInViewportPrintLayout() : this.getColumnsInViewportNormalLayout();\n  }\n  getColumnsInViewportPrintLayout() {\n    if (this.pinned != null) {\n      return [];\n    }\n    let viewportColumns = [];\n    const actualDepth = this.getActualDepth();\n    const { columnViewportService } = this.beans;\n    [\"left\", null, \"right\"].forEach((pinned) => {\n      const items = columnViewportService.getHeadersToRender(pinned, actualDepth);\n      viewportColumns = viewportColumns.concat(items);\n    });\n    return viewportColumns;\n  }\n  getActualDepth() {\n    return this.type == \"filter\" /* FLOATING_FILTER */ ? this.rowIndex - 1 : this.rowIndex;\n  }\n  getColumnsInViewportNormalLayout() {\n    return this.beans.columnViewportService.getHeadersToRender(this.pinned, this.getActualDepth());\n  }\n  findHeaderCellCtrl(column) {\n    if (!this.headerCellCtrls) {\n      return;\n    }\n    const allCtrls = this.getHeaderCellCtrls();\n    let ctrl;\n    if (typeof column === \"function\") {\n      ctrl = allCtrls.find(column);\n    } else {\n      ctrl = allCtrls.find((ctrl2) => ctrl2.getColumnGroupChild() == column);\n    }\n    return ctrl;\n  }\n  focusHeader(column, event) {\n    const ctrl = this.findHeaderCellCtrl(column);\n    if (!ctrl) {\n      return false;\n    }\n    const focused = ctrl.focus(event);\n    return focused;\n  }\n  destroy() {\n    this.headerCellCtrls?.forEach((ctrl) => {\n      this.destroyBean(ctrl);\n    });\n    this.headerCellCtrls = void 0;\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/headerRendering/rowContainer/headerRowContainerCtrl.ts\nvar HeaderRowContainerCtrl = class extends BeanStub {\n  constructor(pinned) {\n    super();\n    this.hidden = false;\n    this.includeFloatingFilter = false;\n    this.groupsRowCtrls = [];\n    this.pinned = pinned;\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.scrollVisibleService = beans.scrollVisibleService;\n    this.pinnedWidthService = beans.pinnedWidthService;\n    this.columnModel = beans.columnModel;\n    this.focusService = beans.focusService;\n    this.filterManager = beans.filterManager;\n  }\n  setComp(comp, eGui) {\n    this.comp = comp;\n    this.eViewport = eGui;\n    this.setupCenterWidth();\n    this.setupPinnedWidth();\n    this.setupDragAndDrop(this.eViewport);\n    const onDisplayedColsChanged = this.onDisplayedColumnsChanged.bind(this);\n    this.addManagedEventListeners({\n      gridColumnsChanged: this.onGridColumnsChanged.bind(this),\n      displayedColumnsChanged: onDisplayedColsChanged,\n      advancedFilterEnabledChanged: onDisplayedColsChanged\n    });\n    const headerType = `${typeof this.pinned === \"string\" ? this.pinned : \"center\"}Header`;\n    this.ctrlsService.register(headerType, this);\n    if (this.columnModel.isReady()) {\n      this.refresh();\n    }\n  }\n  getAllCtrls() {\n    const res = [...this.groupsRowCtrls];\n    if (this.columnsRowCtrl) {\n      res.push(this.columnsRowCtrl);\n    }\n    if (this.filtersRowCtrl) {\n      res.push(this.filtersRowCtrl);\n    }\n    return res;\n  }\n  refresh(keepColumns = false) {\n    const sequence = new NumberSequence();\n    const focusedHeaderPosition = this.focusService.getFocusHeaderToUseAfterRefresh();\n    const refreshColumnGroups = () => {\n      const groupRowCount = this.columnModel.getHeaderRowCount() - 1;\n      this.groupsRowCtrls = this.destroyBeans(this.groupsRowCtrls);\n      for (let i = 0; i < groupRowCount; i++) {\n        const ctrl = this.createBean(\n          new HeaderRowCtrl(sequence.next(), this.pinned, \"group\" /* COLUMN_GROUP */)\n        );\n        this.groupsRowCtrls.push(ctrl);\n      }\n    };\n    const refreshColumns = () => {\n      const rowIndex = sequence.next();\n      const needNewInstance = !this.hidden && (this.columnsRowCtrl == null || !keepColumns || this.columnsRowCtrl.getRowIndex() !== rowIndex);\n      const shouldDestroyInstance = needNewInstance || this.hidden;\n      if (shouldDestroyInstance) {\n        this.columnsRowCtrl = this.destroyBean(this.columnsRowCtrl);\n      }\n      if (needNewInstance) {\n        this.columnsRowCtrl = this.createBean(new HeaderRowCtrl(rowIndex, this.pinned, \"column\" /* COLUMN */));\n      }\n    };\n    const refreshFilters = () => {\n      this.includeFloatingFilter = !!this.filterManager?.hasFloatingFilters() && !this.hidden;\n      const destroyPreviousComp = () => {\n        this.filtersRowCtrl = this.destroyBean(this.filtersRowCtrl);\n      };\n      if (!this.includeFloatingFilter) {\n        destroyPreviousComp();\n        return;\n      }\n      const rowIndex = sequence.next();\n      if (this.filtersRowCtrl) {\n        const rowIndexMismatch = this.filtersRowCtrl.getRowIndex() !== rowIndex;\n        if (!keepColumns || rowIndexMismatch) {\n          destroyPreviousComp();\n        }\n      }\n      if (!this.filtersRowCtrl) {\n        this.filtersRowCtrl = this.createBean(\n          new HeaderRowCtrl(rowIndex, this.pinned, \"filter\" /* FLOATING_FILTER */)\n        );\n      }\n    };\n    refreshColumnGroups();\n    refreshColumns();\n    refreshFilters();\n    const allCtrls = this.getAllCtrls();\n    this.comp.setCtrls(allCtrls);\n    this.restoreFocusOnHeader(focusedHeaderPosition);\n  }\n  getHeaderCtrlForColumn(column) {\n    if (isColumn(column)) {\n      return this.columnsRowCtrl?.getHeaderCellCtrl(column);\n    }\n    if (this.groupsRowCtrls.length === 0) {\n      return;\n    }\n    for (let i = 0; i < this.groupsRowCtrls.length; i++) {\n      const ctrl = this.groupsRowCtrls[i].getHeaderCellCtrl(column);\n      if (ctrl) {\n        return ctrl;\n      }\n    }\n  }\n  getHtmlElementForColumnHeader(column) {\n    const cellCtrl = this.getHeaderCtrlForColumn(column);\n    if (!cellCtrl) {\n      return null;\n    }\n    return cellCtrl.getGui();\n  }\n  getRowType(rowIndex) {\n    const allCtrls = this.getAllCtrls();\n    const ctrl = allCtrls[rowIndex];\n    return ctrl ? ctrl.getType() : void 0;\n  }\n  focusHeader(rowIndex, column, event) {\n    const allCtrls = this.getAllCtrls();\n    const ctrl = allCtrls[rowIndex];\n    if (!ctrl) {\n      return false;\n    }\n    return ctrl.focusHeader(column, event);\n  }\n  getViewportElement() {\n    return this.eViewport;\n  }\n  getGroupRowCount() {\n    return this.groupsRowCtrls.length;\n  }\n  getGroupRowCtrlAtIndex(index) {\n    return this.groupsRowCtrls[index];\n  }\n  getRowCount() {\n    return this.groupsRowCtrls.length + (this.columnsRowCtrl ? 1 : 0) + (this.filtersRowCtrl ? 1 : 0);\n  }\n  setHorizontalScroll(offset) {\n    this.comp.setViewportScrollLeft(offset);\n  }\n  onScrollCallback(fn) {\n    this.addManagedElementListeners(this.getViewportElement(), { scroll: fn });\n  }\n  destroy() {\n    if (this.filtersRowCtrl) {\n      this.filtersRowCtrl = this.destroyBean(this.filtersRowCtrl);\n    }\n    if (this.columnsRowCtrl) {\n      this.columnsRowCtrl = this.destroyBean(this.columnsRowCtrl);\n    }\n    if (this.groupsRowCtrls && this.groupsRowCtrls.length) {\n      this.groupsRowCtrls = this.destroyBeans(this.groupsRowCtrls);\n    }\n    super.destroy();\n  }\n  setupDragAndDrop(dropContainer) {\n    const bodyDropTarget = new BodyDropTarget(this.pinned, dropContainer);\n    this.createManagedBean(bodyDropTarget);\n  }\n  restoreFocusOnHeader(position) {\n    if (!position) {\n      return;\n    }\n    const { column } = position;\n    if (column.getPinned() != this.pinned) {\n      return;\n    }\n    this.focusService.focusHeaderPosition({ headerPosition: position });\n  }\n  // grid cols have changed - this also means the number of rows in the header can have\n  // changed. so we remove all the old rows and insert new ones for a complete refresh\n  onGridColumnsChanged() {\n    this.refresh(true);\n  }\n  onDisplayedColumnsChanged() {\n    const includeFloatingFilter = this.filterManager?.hasFloatingFilters() && !this.hidden;\n    if (this.includeFloatingFilter !== includeFloatingFilter) {\n      this.refresh(true);\n    }\n  }\n  setupCenterWidth() {\n    if (this.pinned != null) {\n      return;\n    }\n    this.createManagedBean(new CenterWidthFeature((width) => this.comp.setCenterWidth(`${width}px`), true));\n  }\n  setupPinnedWidth() {\n    if (this.pinned == null) {\n      return;\n    }\n    const pinningLeft = this.pinned === \"left\";\n    const pinningRight = this.pinned === \"right\";\n    this.hidden = true;\n    const listener = () => {\n      const width = pinningLeft ? this.pinnedWidthService.getPinnedLeftWidth() : this.pinnedWidthService.getPinnedRightWidth();\n      if (width == null) {\n        return;\n      }\n      const hidden = width == 0;\n      const hiddenChanged = this.hidden !== hidden;\n      const isRtl = this.gos.get(\"enableRtl\");\n      const scrollbarWidth = this.scrollVisibleService.getScrollbarWidth();\n      const addPaddingForScrollbar = this.scrollVisibleService.isVerticalScrollShowing() && (isRtl && pinningLeft || !isRtl && pinningRight);\n      const widthWithPadding = addPaddingForScrollbar ? width + scrollbarWidth : width;\n      this.comp.setPinnedContainerWidth(`${widthWithPadding}px`);\n      this.comp.setDisplayed(!hidden);\n      if (hiddenChanged) {\n        this.hidden = hidden;\n        this.refresh();\n      }\n    };\n    this.addManagedEventListeners({\n      leftPinnedWidthChanged: listener,\n      rightPinnedWidthChanged: listener,\n      scrollVisibilityChanged: listener,\n      scrollbarWidthChanged: listener\n    });\n  }\n};\n\n// community-modules/core/src/headerRendering/rowContainer/headerRowContainerComp.ts\nvar PINNED_LEFT_TEMPLATE = (\n  /* html */\n  `<div class=\"ag-pinned-left-header\" role=\"rowgroup\"></div>`\n);\nvar PINNED_RIGHT_TEMPLATE = (\n  /* html */\n  `<div class=\"ag-pinned-right-header\" role=\"rowgroup\"></div>`\n);\nvar CENTER_TEMPLATE = (\n  /* html */\n  `<div class=\"ag-header-viewport\" role=\"presentation\">\n        <div class=\"ag-header-container\" data-ref=\"eCenterContainer\" role=\"rowgroup\"></div>\n    </div>`\n);\nvar HeaderRowContainerComp = class extends Component {\n  constructor(pinned) {\n    super();\n    this.eCenterContainer = RefPlaceholder;\n    this.headerRowComps = {};\n    this.rowCompsList = [];\n    this.pinned = pinned;\n  }\n  postConstruct() {\n    this.selectAndSetTemplate();\n    const compProxy = {\n      setDisplayed: (displayed) => this.setDisplayed(displayed),\n      setCtrls: (ctrls) => this.setCtrls(ctrls),\n      // only gets called for center section\n      setCenterWidth: (width) => this.eCenterContainer.style.width = width,\n      setViewportScrollLeft: (left) => this.getGui().scrollLeft = left,\n      // only gets called for pinned sections\n      setPinnedContainerWidth: (width) => {\n        const eGui = this.getGui();\n        eGui.style.width = width;\n        eGui.style.maxWidth = width;\n        eGui.style.minWidth = width;\n      }\n    };\n    const ctrl = this.createManagedBean(new HeaderRowContainerCtrl(this.pinned));\n    ctrl.setComp(compProxy, this.getGui());\n  }\n  selectAndSetTemplate() {\n    const pinnedLeft = this.pinned == \"left\";\n    const pinnedRight = this.pinned == \"right\";\n    const template = pinnedLeft ? PINNED_LEFT_TEMPLATE : pinnedRight ? PINNED_RIGHT_TEMPLATE : CENTER_TEMPLATE;\n    this.setTemplate(template);\n    this.eRowContainer = this.eCenterContainer !== RefPlaceholder ? this.eCenterContainer : this.getGui();\n  }\n  destroy() {\n    this.setCtrls([]);\n    super.destroy();\n  }\n  destroyRowComp(rowComp) {\n    this.destroyBean(rowComp);\n    this.eRowContainer.removeChild(rowComp.getGui());\n  }\n  setCtrls(ctrls) {\n    const oldRowComps = this.headerRowComps;\n    this.headerRowComps = {};\n    this.rowCompsList = [];\n    let prevGui;\n    const appendEnsuringDomOrder = (rowComp) => {\n      const eGui = rowComp.getGui();\n      const notAlreadyIn = eGui.parentElement != this.eRowContainer;\n      if (notAlreadyIn) {\n        this.eRowContainer.appendChild(eGui);\n      }\n      if (prevGui) {\n        _ensureDomOrder(this.eRowContainer, eGui, prevGui);\n      }\n      prevGui = eGui;\n    };\n    ctrls.forEach((ctrl) => {\n      const ctrlId = ctrl.instanceId;\n      const existingComp = oldRowComps[ctrlId];\n      delete oldRowComps[ctrlId];\n      const rowComp = existingComp ? existingComp : this.createBean(new HeaderRowComp(ctrl));\n      this.headerRowComps[ctrlId] = rowComp;\n      this.rowCompsList.push(rowComp);\n      appendEnsuringDomOrder(rowComp);\n    });\n    _getAllValuesInObject(oldRowComps).forEach((c) => this.destroyRowComp(c));\n  }\n};\n\n// community-modules/core/src/headerRendering/gridHeaderComp.ts\nvar GridHeaderComp = class extends Component {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-header\" role=\"presentation\"/>`\n    );\n  }\n  postConstruct() {\n    const compProxy = {\n      addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n      setHeightAndMinHeight: (height) => {\n        this.getGui().style.height = height;\n        this.getGui().style.minHeight = height;\n      }\n    };\n    const ctrl = this.createManagedBean(new GridHeaderCtrl());\n    ctrl.setComp(compProxy, this.getGui(), this.getFocusableElement());\n    const addContainer = (container) => {\n      this.createManagedBean(container);\n      this.appendChild(container);\n    };\n    addContainer(new HeaderRowContainerComp(\"left\"));\n    addContainer(new HeaderRowContainerComp(null));\n    addContainer(new HeaderRowContainerComp(\"right\"));\n  }\n};\nvar GridHeaderSelector = {\n  selector: \"AG-HEADER-ROOT\",\n  component: GridHeaderComp\n};\n\n// community-modules/core/src/styling/layoutFeature.ts\nvar LayoutCssClasses = /* @__PURE__ */ ((LayoutCssClasses2) => {\n  LayoutCssClasses2[\"AUTO_HEIGHT\"] = \"ag-layout-auto-height\";\n  LayoutCssClasses2[\"NORMAL\"] = \"ag-layout-normal\";\n  LayoutCssClasses2[\"PRINT\"] = \"ag-layout-print\";\n  return LayoutCssClasses2;\n})(LayoutCssClasses || {});\nvar LayoutFeature = class extends BeanStub {\n  constructor(view) {\n    super();\n    this.view = view;\n  }\n  postConstruct() {\n    this.addManagedPropertyListener(\"domLayout\", this.updateLayoutClasses.bind(this));\n    this.updateLayoutClasses();\n  }\n  updateLayoutClasses() {\n    const domLayout = this.getDomLayout();\n    const params = {\n      autoHeight: domLayout === \"autoHeight\",\n      normal: domLayout === \"normal\",\n      print: domLayout === \"print\"\n    };\n    const cssClass = params.autoHeight ? \"ag-layout-auto-height\" /* AUTO_HEIGHT */ : params.print ? \"ag-layout-print\" /* PRINT */ : \"ag-layout-normal\" /* NORMAL */;\n    this.view.updateLayoutClasses(cssClass, params);\n  }\n  // returns either 'print', 'autoHeight' or 'normal' (normal is the default)\n  getDomLayout() {\n    const domLayout = this.gos.get(\"domLayout\") ?? \"normal\";\n    const validLayouts = [\"normal\", \"print\", \"autoHeight\"];\n    if (validLayouts.indexOf(domLayout) === -1) {\n      _warnOnce(`${domLayout} is not valid for DOM Layout, valid values are 'normal', 'autoHeight', 'print'.`);\n      return \"normal\";\n    }\n    return domLayout;\n  }\n};\n\n// community-modules/core/src/rendering/overlays/overlayWrapperComponent.ts\nvar OverlayWrapperComponent = class extends Component {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-overlay\" role=\"presentation\">\n                <div class=\"ag-overlay-panel\" role=\"presentation\">\n                    <div class=\"ag-overlay-wrapper\" data-ref=\"eOverlayWrapper\" role=\"presentation\"></div>\n                </div>\n            </div>`\n    );\n    this.eOverlayWrapper = RefPlaceholder;\n    this.activePromise = null;\n    this.activeOverlay = null;\n    this.updateListenerDestroyFunc = null;\n    this.activeOverlayWrapperCssClass = null;\n    this.elToFocusAfter = null;\n  }\n  wireBeans(beans) {\n    this.overlayService = beans.overlayService;\n    this.focusService = beans.focusService;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  handleKeyDown(e) {\n    if (e.key !== KeyCode.TAB || e.defaultPrevented || _isStopPropagationForAgGrid(e)) {\n      return;\n    }\n    const nextEl = this.focusService.findNextFocusableElement(this.eOverlayWrapper, false, e.shiftKey);\n    if (nextEl) {\n      return;\n    }\n    let isFocused = false;\n    if (e.shiftKey) {\n      isFocused = this.focusService.focusGridView(_last(this.visibleColsService.getAllCols()), true, false);\n    } else {\n      isFocused = this.focusService.focusNextGridCoreContainer(false);\n    }\n    if (isFocused) {\n      e.preventDefault();\n    }\n  }\n  updateLayoutClasses(cssClass, params) {\n    const overlayWrapperClassList = this.eOverlayWrapper.classList;\n    overlayWrapperClassList.toggle(\"ag-layout-auto-height\" /* AUTO_HEIGHT */, params.autoHeight);\n    overlayWrapperClassList.toggle(\"ag-layout-normal\" /* NORMAL */, params.normal);\n    overlayWrapperClassList.toggle(\"ag-layout-print\" /* PRINT */, params.print);\n  }\n  postConstruct() {\n    this.createManagedBean(new LayoutFeature(this));\n    this.setDisplayed(false, { skipAriaHidden: true });\n    this.overlayService.setOverlayWrapperComp(this);\n    this.addManagedElementListeners(this.getFocusableElement(), { keydown: this.handleKeyDown.bind(this) });\n  }\n  setWrapperTypeClass(overlayWrapperCssClass) {\n    const overlayWrapperClassList = this.eOverlayWrapper.classList;\n    if (this.activeOverlayWrapperCssClass) {\n      overlayWrapperClassList.toggle(this.activeOverlayWrapperCssClass, false);\n    }\n    this.activeOverlayWrapperCssClass = overlayWrapperCssClass;\n    overlayWrapperClassList.toggle(overlayWrapperCssClass, true);\n  }\n  showOverlay(overlayComponentPromise, overlayWrapperCssClass, exclusive, gridOption) {\n    this.setWrapperTypeClass(overlayWrapperCssClass);\n    this.destroyActiveOverlay();\n    this.elToFocusAfter = null;\n    this.activePromise = overlayComponentPromise;\n    if (!overlayComponentPromise) {\n      return;\n    }\n    this.setDisplayed(true, { skipAriaHidden: true });\n    if (exclusive && this.focusService.isGridFocused()) {\n      const activeElement = _getActiveDomElement(this.gos);\n      if (activeElement && !_isNothingFocused(this.gos)) {\n        this.elToFocusAfter = activeElement;\n      }\n    }\n    overlayComponentPromise.then((comp) => {\n      if (this.activePromise !== overlayComponentPromise) {\n        if (this.activeOverlay !== comp) {\n          this.destroyBean(comp);\n          comp = null;\n        }\n        return;\n      }\n      this.activePromise = null;\n      if (!comp) {\n        return;\n      }\n      if (this.activeOverlay !== comp) {\n        this.eOverlayWrapper.appendChild(comp.getGui());\n        this.activeOverlay = comp;\n        if (gridOption) {\n          const component = comp;\n          this.updateListenerDestroyFunc = this.addManagedPropertyListener(gridOption, ({ currentValue }) => {\n            component.refresh?.(this.gos.addGridCommonParams({ ...currentValue ?? {} }));\n          });\n        }\n      }\n      const focusService = this.focusService;\n      if (exclusive && focusService.isGridFocused()) {\n        focusService.focusInto(this.eOverlayWrapper);\n      }\n    });\n  }\n  updateOverlayWrapperPaddingTop(padding) {\n    this.eOverlayWrapper.style.setProperty(\"padding-top\", `${padding}px`);\n  }\n  destroyActiveOverlay() {\n    this.activePromise = null;\n    const activeOverlay = this.activeOverlay;\n    if (!activeOverlay) {\n      return;\n    }\n    let elementToFocus = this.elToFocusAfter;\n    this.activeOverlay = null;\n    this.elToFocusAfter = null;\n    if (elementToFocus && !this.focusService.isGridFocused()) {\n      elementToFocus = null;\n    }\n    const updateListenerDestroyFunc = this.updateListenerDestroyFunc;\n    if (updateListenerDestroyFunc) {\n      updateListenerDestroyFunc();\n      this.updateListenerDestroyFunc = null;\n    }\n    this.destroyBean(activeOverlay);\n    _clearElement(this.eOverlayWrapper);\n    elementToFocus?.focus?.({ preventScroll: true });\n  }\n  hideOverlay() {\n    this.destroyActiveOverlay();\n    this.setDisplayed(false, { skipAriaHidden: true });\n  }\n  destroy() {\n    this.elToFocusAfter = null;\n    this.destroyActiveOverlay();\n    this.overlayService.setOverlayWrapperComp(void 0);\n    super.destroy();\n  }\n};\nvar OverlayWrapperSelector = {\n  selector: \"AG-OVERLAY-WRAPPER\",\n  component: OverlayWrapperComponent\n};\n\n// community-modules/core/src/gridBodyComp/abstractFakeScrollComp.ts\nvar AbstractFakeScrollComp = class extends Component {\n  constructor(template, direction) {\n    super();\n    this.direction = direction;\n    this.eViewport = RefPlaceholder;\n    this.eContainer = RefPlaceholder;\n    this.hideTimeout = null;\n    this.setTemplate(template);\n  }\n  wireBeans(beans) {\n    this.animationFrameService = beans.animationFrameService;\n  }\n  postConstruct() {\n    this.addManagedEventListeners({\n      scrollVisibilityChanged: this.onScrollVisibilityChanged.bind(this)\n    });\n    this.onScrollVisibilityChanged();\n    this.addOrRemoveCssClass(\"ag-apple-scrollbar\", _isMacOsUserAgent() || _isIOSUserAgent());\n  }\n  initialiseInvisibleScrollbar() {\n    if (this.invisibleScrollbar !== void 0) {\n      return;\n    }\n    this.invisibleScrollbar = _isInvisibleScrollbar();\n    if (this.invisibleScrollbar) {\n      this.hideAndShowInvisibleScrollAsNeeded();\n      this.addActiveListenerToggles();\n    }\n  }\n  addActiveListenerToggles() {\n    const eGui = this.getGui();\n    const onActivate = () => this.addOrRemoveCssClass(\"ag-scrollbar-active\", true);\n    const onDeactivate = () => this.addOrRemoveCssClass(\"ag-scrollbar-active\", false);\n    this.addManagedListeners(eGui, {\n      mouseenter: onActivate,\n      mousedown: onActivate,\n      touchstart: onActivate,\n      mouseleave: onDeactivate,\n      touchend: onDeactivate\n    });\n  }\n  onScrollVisibilityChanged() {\n    if (this.invisibleScrollbar === void 0) {\n      this.initialiseInvisibleScrollbar();\n    }\n    this.animationFrameService.requestAnimationFrame(() => this.setScrollVisible());\n  }\n  hideAndShowInvisibleScrollAsNeeded() {\n    this.addManagedEventListeners({\n      bodyScroll: (params) => {\n        if (params.direction === this.direction) {\n          if (this.hideTimeout !== null) {\n            window.clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n          }\n          this.addOrRemoveCssClass(\"ag-scrollbar-scrolling\", true);\n        }\n      },\n      bodyScrollEnd: () => {\n        this.hideTimeout = window.setTimeout(() => {\n          this.addOrRemoveCssClass(\"ag-scrollbar-scrolling\", false);\n          this.hideTimeout = null;\n        }, 400);\n      }\n    });\n  }\n  attemptSettingScrollPosition(value) {\n    const viewport = this.getViewportElement();\n    _waitUntil(\n      () => _isVisible(viewport),\n      () => this.setScrollPosition(value),\n      100\n    );\n  }\n  getViewportElement() {\n    return this.eViewport;\n  }\n  getContainer() {\n    return this.eContainer;\n  }\n  onScrollCallback(fn) {\n    this.addManagedElementListeners(this.getViewportElement(), { scroll: fn });\n  }\n};\n\n// community-modules/core/src/gridBodyComp/fakeHScrollComp.ts\nvar FakeHScrollComp = class extends AbstractFakeScrollComp {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-body-horizontal-scroll\" aria-hidden=\"true\">\n            <div class=\"ag-horizontal-left-spacer\" data-ref=\"eLeftSpacer\"></div>\n            <div class=\"ag-body-horizontal-scroll-viewport\" data-ref=\"eViewport\">\n                <div class=\"ag-body-horizontal-scroll-container\" data-ref=\"eContainer\"></div>\n            </div>\n            <div class=\"ag-horizontal-right-spacer\" data-ref=\"eRightSpacer\"></div>\n        </div>`,\n      \"horizontal\"\n    );\n    this.eLeftSpacer = RefPlaceholder;\n    this.eRightSpacer = RefPlaceholder;\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.visibleColsService = beans.visibleColsService;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.ctrlsService = beans.ctrlsService;\n    this.scrollVisibleService = beans.scrollVisibleService;\n  }\n  postConstruct() {\n    super.postConstruct();\n    const spacerWidthsListener = this.setFakeHScrollSpacerWidths.bind(this);\n    this.addManagedEventListeners({\n      displayedColumnsChanged: spacerWidthsListener,\n      displayedColumnsWidthChanged: spacerWidthsListener,\n      pinnedRowDataChanged: this.onPinnedRowDataChanged.bind(this)\n    });\n    this.addManagedPropertyListener(\"domLayout\", spacerWidthsListener);\n    this.ctrlsService.register(\"fakeHScrollComp\", this);\n    this.createManagedBean(new CenterWidthFeature((width) => this.eContainer.style.width = `${width}px`));\n    this.addManagedPropertyListeners([\"suppressHorizontalScroll\"], this.onScrollVisibilityChanged.bind(this));\n  }\n  initialiseInvisibleScrollbar() {\n    if (this.invisibleScrollbar !== void 0) {\n      return;\n    }\n    this.enableRtl = this.gos.get(\"enableRtl\");\n    super.initialiseInvisibleScrollbar();\n    if (this.invisibleScrollbar) {\n      this.refreshCompBottom();\n    }\n  }\n  onPinnedRowDataChanged() {\n    this.refreshCompBottom();\n  }\n  refreshCompBottom() {\n    if (!this.invisibleScrollbar) {\n      return;\n    }\n    const bottomPinnedHeight = this.pinnedRowModel.getPinnedBottomTotalHeight();\n    this.getGui().style.bottom = `${bottomPinnedHeight}px`;\n  }\n  onScrollVisibilityChanged() {\n    super.onScrollVisibilityChanged();\n    this.setFakeHScrollSpacerWidths();\n  }\n  setFakeHScrollSpacerWidths() {\n    const vScrollShowing = this.scrollVisibleService.isVerticalScrollShowing();\n    let rightSpacing = this.visibleColsService.getDisplayedColumnsRightWidth();\n    const scrollOnRight = !this.enableRtl && vScrollShowing;\n    const scrollbarWidth = this.scrollVisibleService.getScrollbarWidth();\n    if (scrollOnRight) {\n      rightSpacing += scrollbarWidth;\n    }\n    _setFixedWidth(this.eRightSpacer, rightSpacing);\n    this.eRightSpacer.classList.toggle(\"ag-scroller-corner\", rightSpacing <= scrollbarWidth);\n    let leftSpacing = this.visibleColsService.getColsLeftWidth();\n    const scrollOnLeft = this.enableRtl && vScrollShowing;\n    if (scrollOnLeft) {\n      leftSpacing += scrollbarWidth;\n    }\n    _setFixedWidth(this.eLeftSpacer, leftSpacing);\n    this.eLeftSpacer.classList.toggle(\"ag-scroller-corner\", leftSpacing <= scrollbarWidth);\n  }\n  setScrollVisible() {\n    const hScrollShowing = this.scrollVisibleService.isHorizontalScrollShowing();\n    const invisibleScrollbar2 = this.invisibleScrollbar;\n    const isSuppressHorizontalScroll = this.gos.get(\"suppressHorizontalScroll\");\n    const scrollbarWidth = hScrollShowing ? this.scrollVisibleService.getScrollbarWidth() || 0 : 0;\n    const adjustedScrollbarWidth = scrollbarWidth === 0 && invisibleScrollbar2 ? 16 : scrollbarWidth;\n    const scrollContainerSize = !isSuppressHorizontalScroll ? adjustedScrollbarWidth : 0;\n    this.addOrRemoveCssClass(\"ag-scrollbar-invisible\", invisibleScrollbar2);\n    _setFixedHeight(this.getGui(), scrollContainerSize);\n    _setFixedHeight(this.eViewport, scrollContainerSize);\n    _setFixedHeight(this.eContainer, scrollContainerSize);\n    this.setDisplayed(hScrollShowing, { skipAriaHidden: true });\n  }\n  getScrollPosition() {\n    return _getScrollLeft(this.getViewportElement(), this.enableRtl);\n  }\n  setScrollPosition(value) {\n    if (!_isVisible(this.getViewportElement())) {\n      this.attemptSettingScrollPosition(value);\n    }\n    _setScrollLeft(this.getViewportElement(), value, this.enableRtl);\n  }\n};\nvar FakeHScrollSelector = {\n  selector: \"AG-FAKE-HORIZONTAL-SCROLL\",\n  component: FakeHScrollComp\n};\n\n// community-modules/core/src/gridBodyComp/rowContainer/setHeightFeature.ts\nvar SetHeightFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.maxDivHeightScaler = beans.rowContainerHeightService;\n  }\n  constructor(eContainer, eViewport) {\n    super();\n    this.eContainer = eContainer;\n    this.eViewport = eViewport;\n  }\n  postConstruct() {\n    this.addManagedEventListeners({ rowContainerHeightChanged: this.onHeightChanged.bind(this) });\n  }\n  onHeightChanged() {\n    const height = this.maxDivHeightScaler.getUiContainerHeight();\n    const heightString = height != null ? `${height}px` : ``;\n    this.eContainer.style.height = heightString;\n    if (this.eViewport) {\n      this.eViewport.style.height = heightString;\n    }\n  }\n};\n\n// community-modules/core/src/gridBodyComp/fakeVScrollComp.ts\nvar FakeVScrollComp = class extends AbstractFakeScrollComp {\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.ctrlsService = beans.ctrlsService;\n    this.scrollVisibleService = beans.scrollVisibleService;\n  }\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-body-vertical-scroll\" aria-hidden=\"true\">\n            <div class=\"ag-body-vertical-scroll-viewport\" data-ref=\"eViewport\">\n                <div class=\"ag-body-vertical-scroll-container\" data-ref=\"eContainer\"></div>\n            </div>\n        </div>`,\n      \"vertical\"\n    );\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.createManagedBean(new SetHeightFeature(this.eContainer));\n    this.ctrlsService.register(\"fakeVScrollComp\", this);\n    this.addManagedEventListeners({ rowContainerHeightChanged: this.onRowContainerHeightChanged.bind(this) });\n  }\n  setScrollVisible() {\n    const vScrollShowing = this.scrollVisibleService.isVerticalScrollShowing();\n    const invisibleScrollbar2 = this.invisibleScrollbar;\n    const scrollbarWidth = vScrollShowing ? this.scrollVisibleService.getScrollbarWidth() || 0 : 0;\n    const adjustedScrollbarWidth = scrollbarWidth === 0 && invisibleScrollbar2 ? 16 : scrollbarWidth;\n    this.addOrRemoveCssClass(\"ag-scrollbar-invisible\", invisibleScrollbar2);\n    _setFixedWidth(this.getGui(), adjustedScrollbarWidth);\n    _setFixedWidth(this.eViewport, adjustedScrollbarWidth);\n    _setFixedWidth(this.eContainer, adjustedScrollbarWidth);\n    this.setDisplayed(vScrollShowing, { skipAriaHidden: true });\n  }\n  onRowContainerHeightChanged() {\n    const { ctrlsService } = this;\n    const gridBodyCtrl = ctrlsService.getGridBodyCtrl();\n    const gridBodyViewportEl = gridBodyCtrl.getBodyViewportElement();\n    const eViewportScrollTop = this.getScrollPosition();\n    const gridBodyViewportScrollTop = gridBodyViewportEl.scrollTop;\n    if (eViewportScrollTop != gridBodyViewportScrollTop) {\n      this.setScrollPosition(gridBodyViewportScrollTop, true);\n    }\n  }\n  getScrollPosition() {\n    return this.getViewportElement().scrollTop;\n  }\n  setScrollPosition(value, force) {\n    if (!force && !_isVisible(this.getViewportElement())) {\n      this.attemptSettingScrollPosition(value);\n    }\n    this.getViewportElement().scrollTop = value;\n  }\n};\nvar FakeVScrollSelector = {\n  selector: \"AG-FAKE-VERTICAL-SCROLL\",\n  component: FakeVScrollComp\n};\n\n// community-modules/core/src/gridBodyComp/gridBodyScrollFeature.ts\nvar HorizontalSources = /* @__PURE__ */ ((HorizontalSources2) => {\n  HorizontalSources2[\"FakeHScrollbar\"] = \"fakeHScrollComp\";\n  HorizontalSources2[\"Header\"] = \"centerHeader\";\n  HorizontalSources2[\"PinnedTop\"] = \"topCenter\";\n  HorizontalSources2[\"PinnedBottom\"] = \"bottomCenter\";\n  HorizontalSources2[\"StickyTop\"] = \"stickyTopCenter\";\n  HorizontalSources2[\"StickyBottom\"] = \"stickyBottomCenter\";\n  return HorizontalSources2;\n})(HorizontalSources || {});\nvar GridBodyScrollFeature = class extends BeanStub {\n  constructor(eBodyViewport) {\n    super();\n    this.lastScrollSource = [null, null];\n    this.scrollLeft = -1;\n    this.nextScrollTop = -1;\n    this.scrollTop = -1;\n    // Used to provide approximate values of scrollTop and offsetHeight\n    // without forcing the browser to recalculate styles.\n    this.lastOffsetHeight = -1;\n    this.lastScrollTop = -1;\n    this.eBodyViewport = eBodyViewport;\n    this.resetLastHScrollDebounced = _debounce(\n      () => this.lastScrollSource[1 /* Horizontal */] = null,\n      500\n    );\n    this.resetLastVScrollDebounced = _debounce(() => this.lastScrollSource[0 /* Vertical */] = null, 500);\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.animationFrameService = beans.animationFrameService;\n    this.paginationService = beans.paginationService;\n    this.pageBoundsService = beans.pageBoundsService;\n    this.rowModel = beans.rowModel;\n    this.heightScaler = beans.rowContainerHeightService;\n    this.rowRenderer = beans.rowRenderer;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  postConstruct() {\n    this.enableRtl = this.gos.get(\"enableRtl\");\n    this.addManagedEventListeners({\n      displayedColumnsWidthChanged: this.onDisplayedColumnsWidthChanged.bind(this)\n    });\n    this.ctrlsService.whenReady(this, (p) => {\n      this.centerRowsCtrl = p.center;\n      this.onDisplayedColumnsWidthChanged();\n      this.addScrollListener();\n    });\n  }\n  addScrollListener() {\n    this.addHorizontalScrollListeners();\n    this.addVerticalScrollListeners();\n  }\n  addHorizontalScrollListeners() {\n    this.addManagedElementListeners(this.centerRowsCtrl.getViewportElement(), {\n      scroll: this.onHScroll.bind(this, \"Viewport\" /* Viewport */)\n    });\n    for (const source of Object.values(HorizontalSources)) {\n      const scrollPartner = this.ctrlsService.get(source);\n      this.registerScrollPartner(scrollPartner, this.onHScroll.bind(this, source));\n    }\n  }\n  addVerticalScrollListeners() {\n    const fakeVScrollComp = this.ctrlsService.get(\"fakeVScrollComp\");\n    const isDebounce = this.gos.get(\"debounceVerticalScrollbar\");\n    const onVScroll = isDebounce ? _debounce(this.onVScroll.bind(this, \"Viewport\" /* Viewport */), 100) : this.onVScroll.bind(this, \"Viewport\" /* Viewport */);\n    const onFakeVScroll = isDebounce ? _debounce(this.onVScroll.bind(this, \"fakeVScrollComp\" /* FakeVScrollbar */), 100) : this.onVScroll.bind(this, \"fakeVScrollComp\" /* FakeVScrollbar */);\n    this.addManagedElementListeners(this.eBodyViewport, { scroll: onVScroll });\n    this.registerScrollPartner(fakeVScrollComp, onFakeVScroll);\n  }\n  registerScrollPartner(comp, callback) {\n    comp.onScrollCallback(callback);\n  }\n  onDisplayedColumnsWidthChanged() {\n    if (this.enableRtl) {\n      this.horizontallyScrollHeaderCenterAndFloatingCenter();\n    }\n  }\n  horizontallyScrollHeaderCenterAndFloatingCenter(scrollLeft) {\n    const notYetInitialised = this.centerRowsCtrl == null;\n    if (notYetInitialised) {\n      return;\n    }\n    if (scrollLeft === void 0) {\n      scrollLeft = this.centerRowsCtrl.getCenterViewportScrollLeft();\n    }\n    this.setScrollLeftForAllContainersExceptCurrent(Math.abs(scrollLeft));\n  }\n  setScrollLeftForAllContainersExceptCurrent(scrollLeft) {\n    for (const container of [...Object.values(HorizontalSources), \"Viewport\" /* Viewport */]) {\n      if (this.lastScrollSource[1 /* Horizontal */] === container) {\n        continue;\n      }\n      const viewport = this.getViewportForSource(container);\n      _setScrollLeft(viewport, scrollLeft, this.enableRtl);\n    }\n  }\n  getViewportForSource(source) {\n    if (source === \"Viewport\" /* Viewport */) {\n      return this.centerRowsCtrl.getViewportElement();\n    }\n    return this.ctrlsService.get(source).getViewportElement();\n  }\n  isControllingScroll(source, direction) {\n    if (this.lastScrollSource[direction] == null) {\n      if (direction === 0 /* Vertical */) {\n        this.lastScrollSource[0] = source;\n      } else {\n        this.lastScrollSource[1] = source;\n      }\n      return true;\n    }\n    return this.lastScrollSource[direction] === source;\n  }\n  onHScroll(source) {\n    if (!this.isControllingScroll(source, 1 /* Horizontal */)) {\n      return;\n    }\n    const centerContainerViewport = this.centerRowsCtrl.getViewportElement();\n    const { scrollLeft } = centerContainerViewport;\n    if (this.shouldBlockScrollUpdate(1 /* Horizontal */, scrollLeft, true)) {\n      return;\n    }\n    const newScrollLeft = _getScrollLeft(this.getViewportForSource(source), this.enableRtl);\n    this.doHorizontalScroll(newScrollLeft);\n    this.resetLastHScrollDebounced();\n  }\n  onVScroll(source) {\n    if (!this.isControllingScroll(source, 0 /* Vertical */)) {\n      return;\n    }\n    let scrollTop;\n    if (source === \"Viewport\" /* Viewport */) {\n      scrollTop = this.eBodyViewport.scrollTop;\n    } else {\n      scrollTop = this.ctrlsService.get(\"fakeVScrollComp\").getScrollPosition();\n    }\n    if (this.shouldBlockScrollUpdate(0 /* Vertical */, scrollTop, true)) {\n      return;\n    }\n    this.animationFrameService.setScrollTop(scrollTop);\n    this.nextScrollTop = scrollTop;\n    if (source === \"Viewport\" /* Viewport */) {\n      this.ctrlsService.get(\"fakeVScrollComp\").setScrollPosition(scrollTop);\n    } else {\n      this.eBodyViewport.scrollTop = scrollTop;\n    }\n    if (this.gos.get(\"suppressAnimationFrame\")) {\n      this.scrollGridIfNeeded();\n    } else {\n      this.animationFrameService.schedule();\n    }\n    this.resetLastVScrollDebounced();\n  }\n  doHorizontalScroll(scrollLeft) {\n    const fakeScrollLeft = this.ctrlsService.get(\"fakeHScrollComp\").getScrollPosition();\n    if (this.scrollLeft === scrollLeft && scrollLeft === fakeScrollLeft) {\n      return;\n    }\n    this.scrollLeft = scrollLeft;\n    this.fireScrollEvent(1 /* Horizontal */);\n    this.horizontallyScrollHeaderCenterAndFloatingCenter(scrollLeft);\n    this.centerRowsCtrl.onHorizontalViewportChanged(true);\n  }\n  fireScrollEvent(direction) {\n    const bodyScrollEvent = {\n      type: \"bodyScroll\",\n      direction: direction === 1 /* Horizontal */ ? \"horizontal\" : \"vertical\",\n      left: this.scrollLeft,\n      top: this.scrollTop\n    };\n    this.eventService.dispatchEvent(bodyScrollEvent);\n    window.clearTimeout(this.scrollTimer);\n    this.scrollTimer = void 0;\n    this.scrollTimer = window.setTimeout(() => {\n      this.eventService.dispatchEvent({\n        ...bodyScrollEvent,\n        type: \"bodyScrollEnd\"\n      });\n    }, 100);\n  }\n  shouldBlockScrollUpdate(direction, scrollTo, touchOnly = false) {\n    if (touchOnly && !_isIOSUserAgent()) {\n      return false;\n    }\n    if (direction === 0 /* Vertical */) {\n      return this.shouldBlockVerticalScroll(scrollTo);\n    }\n    return this.shouldBlockHorizontalScroll(scrollTo);\n  }\n  shouldBlockVerticalScroll(scrollTo) {\n    const clientHeight = _getInnerHeight(this.eBodyViewport);\n    const { scrollHeight } = this.eBodyViewport;\n    if (scrollTo < 0 || scrollTo + clientHeight > scrollHeight) {\n      return true;\n    }\n    return false;\n  }\n  shouldBlockHorizontalScroll(scrollTo) {\n    const clientWidth = this.centerRowsCtrl.getCenterWidth();\n    const { scrollWidth } = this.centerRowsCtrl.getViewportElement();\n    if (this.enableRtl) {\n      if (scrollTo > 0) {\n        return true;\n      }\n    } else if (scrollTo < 0) {\n      return true;\n    }\n    if (Math.abs(scrollTo) + clientWidth > scrollWidth) {\n      return true;\n    }\n    return false;\n  }\n  redrawRowsAfterScroll() {\n    this.fireScrollEvent(0 /* Vertical */);\n  }\n  // this is to cater for AG-3274, where grid is removed from the dom and then inserted back in again.\n  // (which happens with some implementations of tabbing). this can result in horizontal scroll getting\n  // reset back to the left, however no scroll event is fired. so we need to get header to also scroll\n  // back to the left to be kept in sync.\n  // adding and removing the grid from the DOM both resets the scroll position and\n  // triggers a resize event, so notify listeners if the scroll position has changed\n  checkScrollLeft() {\n    if (this.scrollLeft !== this.centerRowsCtrl.getCenterViewportScrollLeft()) {\n      this.onHScroll(\"Viewport\" /* Viewport */);\n    }\n  }\n  scrollGridIfNeeded() {\n    const frameNeeded = this.scrollTop != this.nextScrollTop;\n    if (frameNeeded) {\n      this.scrollTop = this.nextScrollTop;\n      this.redrawRowsAfterScroll();\n    }\n    return frameNeeded;\n  }\n  // called by scrollHorizontally method and alignedGridsService\n  setHorizontalScrollPosition(hScrollPosition, fromAlignedGridsService = false) {\n    const minScrollLeft = 0;\n    const maxScrollLeft = this.centerRowsCtrl.getViewportElement().scrollWidth - this.centerRowsCtrl.getCenterWidth();\n    if (!fromAlignedGridsService && this.shouldBlockScrollUpdate(1 /* Horizontal */, hScrollPosition)) {\n      if (this.enableRtl) {\n        hScrollPosition = hScrollPosition > 0 ? 0 : maxScrollLeft;\n      } else {\n        hScrollPosition = Math.min(Math.max(hScrollPosition, minScrollLeft), maxScrollLeft);\n      }\n    }\n    _setScrollLeft(this.centerRowsCtrl.getViewportElement(), Math.abs(hScrollPosition), this.enableRtl);\n    this.doHorizontalScroll(hScrollPosition);\n  }\n  setVerticalScrollPosition(vScrollPosition) {\n    this.eBodyViewport.scrollTop = vScrollPosition;\n  }\n  getVScrollPosition() {\n    this.lastScrollTop = this.eBodyViewport.scrollTop;\n    this.lastOffsetHeight = this.eBodyViewport.offsetHeight;\n    const result = {\n      top: this.lastScrollTop,\n      bottom: this.lastScrollTop + this.lastOffsetHeight\n    };\n    return result;\n  }\n  /** Get an approximate scroll position that returns the last real value read.\n   * This is useful for avoiding repeated DOM reads that force the browser to recalculate styles.\n   * This can have big performance improvements but may not be 100% accurate so only use if this is acceptable.\n   */\n  getApproximateVScollPosition() {\n    if (this.lastScrollTop >= 0 && this.lastOffsetHeight >= 0) {\n      return {\n        top: this.scrollTop,\n        bottom: this.scrollTop + this.lastOffsetHeight\n      };\n    }\n    return this.getVScrollPosition();\n  }\n  getHScrollPosition() {\n    return this.centerRowsCtrl.getHScrollPosition();\n  }\n  isHorizontalScrollShowing() {\n    return this.centerRowsCtrl.isHorizontalScrollShowing();\n  }\n  // called by the headerRootComp and moveColumnController\n  scrollHorizontally(pixels) {\n    const oldScrollPosition = this.centerRowsCtrl.getViewportElement().scrollLeft;\n    this.setHorizontalScrollPosition(oldScrollPosition + pixels);\n    return this.centerRowsCtrl.getViewportElement().scrollLeft - oldScrollPosition;\n  }\n  // gets called by rowRenderer when new data loaded, as it will want to scroll to the top\n  scrollToTop() {\n    this.eBodyViewport.scrollTop = 0;\n  }\n  // Valid values for position are bottom, middle and top\n  ensureNodeVisible(comparator, position = null) {\n    const rowCount = this.rowModel.getRowCount();\n    let indexToSelect = -1;\n    for (let i = 0; i < rowCount; i++) {\n      const node = this.rowModel.getRow(i);\n      if (typeof comparator === \"function\") {\n        const predicate = comparator;\n        if (node && predicate(node)) {\n          indexToSelect = i;\n          break;\n        }\n      } else {\n        if (comparator === node || comparator === node.data) {\n          indexToSelect = i;\n          break;\n        }\n      }\n    }\n    if (indexToSelect >= 0) {\n      this.ensureIndexVisible(indexToSelect, position);\n    }\n  }\n  // Valid values for position are bottom, middle and top\n  // position should be {'top','middle','bottom', or undefined/null}.\n  // if undefined/null, then the grid will to the minimal amount of scrolling,\n  // eg if grid needs to scroll up, it scrolls until row is on top,\n  //    if grid needs to scroll down, it scrolls until row is on bottom,\n  //    if row is already in view, grid does not scroll\n  ensureIndexVisible(index, position) {\n    if (_isDomLayout(this.gos, \"print\")) {\n      return;\n    }\n    const rowCount = this.rowModel.getRowCount();\n    if (typeof index !== \"number\" || index < 0 || index >= rowCount) {\n      _warnOnce(\"Invalid row index for ensureIndexVisible: \" + index);\n      return;\n    }\n    const isPaging = this.gos.get(\"pagination\");\n    const paginationPanelEnabled = isPaging && !this.gos.get(\"suppressPaginationPanel\");\n    this.getFrameworkOverrides().wrapIncoming(() => {\n      if (!paginationPanelEnabled) {\n        this.paginationService?.goToPageWithIndex(index);\n      }\n      const gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n      const stickyTopHeight = gridBodyCtrl.getStickyTopHeight();\n      const stickyBottomHeight = gridBodyCtrl.getStickyBottomHeight();\n      const rowNode = this.rowModel.getRow(index);\n      let rowGotShiftedDuringOperation;\n      do {\n        const startingRowTop = rowNode.rowTop;\n        const startingRowHeight = rowNode.rowHeight;\n        const paginationOffset = this.pageBoundsService.getPixelOffset();\n        const rowTopPixel = rowNode.rowTop - paginationOffset;\n        const rowBottomPixel = rowTopPixel + rowNode.rowHeight;\n        const scrollPosition = this.getVScrollPosition();\n        const heightOffset = this.heightScaler.getDivStretchOffset();\n        const vScrollTop = scrollPosition.top + heightOffset;\n        const vScrollBottom = scrollPosition.bottom + heightOffset;\n        const viewportHeight = vScrollBottom - vScrollTop;\n        const pxTop = this.heightScaler.getScrollPositionForPixel(rowTopPixel);\n        const pxBottom = this.heightScaler.getScrollPositionForPixel(rowBottomPixel - viewportHeight);\n        const pxMiddle = Math.min((pxTop + pxBottom) / 2, rowTopPixel);\n        const rowAboveViewport = vScrollTop + stickyTopHeight > rowTopPixel;\n        const rowBelowViewport = vScrollBottom - stickyBottomHeight < rowBottomPixel;\n        let newScrollPosition = null;\n        if (position === \"top\") {\n          newScrollPosition = pxTop;\n        } else if (position === \"bottom\") {\n          newScrollPosition = pxBottom;\n        } else if (position === \"middle\") {\n          newScrollPosition = pxMiddle;\n        } else if (rowAboveViewport) {\n          newScrollPosition = pxTop - stickyTopHeight;\n        } else if (rowBelowViewport) {\n          newScrollPosition = pxBottom + stickyBottomHeight;\n        }\n        if (newScrollPosition !== null) {\n          this.setVerticalScrollPosition(newScrollPosition);\n          this.rowRenderer.redraw({ afterScroll: true });\n        }\n        rowGotShiftedDuringOperation = startingRowTop !== rowNode.rowTop || startingRowHeight !== rowNode.rowHeight;\n      } while (rowGotShiftedDuringOperation);\n      this.animationFrameService.flushAllFrames();\n    });\n  }\n  ensureColumnVisible(key, position = \"auto\") {\n    const column = this.columnModel.getCol(key);\n    if (!column) {\n      return;\n    }\n    if (column.isPinned()) {\n      return;\n    }\n    if (!this.visibleColsService.isColDisplayed(column)) {\n      return;\n    }\n    const newHorizontalScroll = this.getPositionedHorizontalScroll(column, position);\n    this.getFrameworkOverrides().wrapIncoming(() => {\n      if (newHorizontalScroll !== null) {\n        this.centerRowsCtrl.setCenterViewportScrollLeft(newHorizontalScroll);\n      }\n      this.centerRowsCtrl.onHorizontalViewportChanged();\n      this.animationFrameService.flushAllFrames();\n    });\n  }\n  setScrollPosition(top, left) {\n    this.getFrameworkOverrides().wrapIncoming(() => {\n      this.centerRowsCtrl.setCenterViewportScrollLeft(left);\n      this.setVerticalScrollPosition(top);\n      this.rowRenderer.redraw({ afterScroll: true });\n      this.animationFrameService.flushAllFrames();\n    });\n  }\n  getPositionedHorizontalScroll(column, position) {\n    const { columnBeforeStart, columnAfterEnd } = this.isColumnOutsideViewport(column);\n    const viewportTooSmallForColumn = this.centerRowsCtrl.getCenterWidth() < column.getActualWidth();\n    const viewportWidth = this.centerRowsCtrl.getCenterWidth();\n    const isRtl = this.enableRtl;\n    let alignColToStart = (isRtl ? columnBeforeStart : columnAfterEnd) || viewportTooSmallForColumn;\n    let alignColToEnd = isRtl ? columnAfterEnd : columnBeforeStart;\n    if (position !== \"auto\") {\n      alignColToStart = position === \"start\";\n      alignColToEnd = position === \"end\";\n    }\n    const isMiddle = position === \"middle\";\n    if (alignColToStart || alignColToEnd || isMiddle) {\n      const { colLeft, colMiddle, colRight } = this.getColumnBounds(column);\n      if (isMiddle) {\n        return colMiddle - viewportWidth / 2;\n      }\n      if (alignColToStart) {\n        return isRtl ? colRight : colLeft;\n      }\n      return isRtl ? colLeft - viewportWidth : colRight - viewportWidth;\n    }\n    return null;\n  }\n  isColumnOutsideViewport(column) {\n    const { start: viewportStart, end: viewportEnd } = this.getViewportBounds();\n    const { colLeft, colRight } = this.getColumnBounds(column);\n    const isRtl = this.enableRtl;\n    const columnBeforeStart = isRtl ? viewportStart > colRight : viewportEnd < colRight;\n    const columnAfterEnd = isRtl ? viewportEnd < colLeft : viewportStart > colLeft;\n    return { columnBeforeStart, columnAfterEnd };\n  }\n  getColumnBounds(column) {\n    const isRtl = this.enableRtl;\n    const bodyWidth = this.visibleColsService.getBodyContainerWidth();\n    const colWidth = column.getActualWidth();\n    const colLeft = column.getLeft();\n    const multiplier = isRtl ? -1 : 1;\n    const colLeftPixel = isRtl ? bodyWidth - colLeft : colLeft;\n    const colRightPixel = colLeftPixel + colWidth * multiplier;\n    const colMidPixel = colLeftPixel + colWidth / 2 * multiplier;\n    return { colLeft: colLeftPixel, colMiddle: colMidPixel, colRight: colRightPixel };\n  }\n  getViewportBounds() {\n    const viewportWidth = this.centerRowsCtrl.getCenterWidth();\n    const scrollPosition = this.centerRowsCtrl.getCenterViewportScrollLeft();\n    const viewportStartPixel = scrollPosition;\n    const viewportEndPixel = viewportWidth + scrollPosition;\n    return { start: viewportStartPixel, end: viewportEndPixel, width: viewportWidth };\n  }\n};\n\n// community-modules/core/src/gridBodyComp/viewportSizeFeature.ts\nvar ViewportSizeFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.animationFrameService = beans.animationFrameService;\n    this.ctrlsService = beans.ctrlsService;\n    this.pinnedWidthService = beans.pinnedWidthService;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.columnSizeService = beans.columnSizeService;\n    this.scrollVisibleService = beans.scrollVisibleService;\n    this.columnViewportService = beans.columnViewportService;\n  }\n  constructor(centerContainerCtrl) {\n    super();\n    this.centerContainerCtrl = centerContainerCtrl;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridBodyCtrl = p.gridBodyCtrl;\n      this.listenForResize();\n    });\n    this.addManagedEventListeners({ scrollbarWidthChanged: this.onScrollbarWidthChanged.bind(this) });\n    this.addManagedPropertyListeners([\"alwaysShowHorizontalScroll\", \"alwaysShowVerticalScroll\"], () => {\n      this.checkViewportAndScrolls();\n    });\n  }\n  listenForResize() {\n    const listener = () => {\n      this.animationFrameService.requestAnimationFrame(() => {\n        this.onCenterViewportResized();\n      });\n    };\n    this.centerContainerCtrl.registerViewportResizeListener(listener);\n    this.gridBodyCtrl.registerBodyViewportResizeListener(listener);\n  }\n  onScrollbarWidthChanged() {\n    this.checkViewportAndScrolls();\n  }\n  onCenterViewportResized() {\n    this.scrollVisibleService.onCentreViewportResized();\n    if (this.centerContainerCtrl.isViewportInTheDOMTree()) {\n      this.keepPinnedColumnsNarrowerThanViewport();\n      this.checkViewportAndScrolls();\n      const newWidth = this.centerContainerCtrl.getCenterWidth();\n      if (newWidth !== this.centerWidth) {\n        this.centerWidth = newWidth;\n        this.columnSizeService.refreshFlexedColumns({\n          viewportWidth: this.centerWidth,\n          updateBodyWidths: true,\n          fireResizedEvent: true\n        });\n      }\n    } else {\n      this.bodyHeight = 0;\n    }\n  }\n  keepPinnedColumnsNarrowerThanViewport() {\n    const eBodyViewport = this.gridBodyCtrl.getBodyViewportElement();\n    const bodyWidth = _getInnerWidth(eBodyViewport);\n    if (bodyWidth <= 50) {\n      return;\n    }\n    let columnsToRemove = this.getPinnedColumnsOverflowingViewport(bodyWidth - 50);\n    const processUnpinnedColumns = this.gos.getCallback(\"processUnpinnedColumns\");\n    if (!columnsToRemove.length) {\n      return;\n    }\n    if (processUnpinnedColumns) {\n      const params = {\n        columns: columnsToRemove,\n        viewportWidth: bodyWidth\n      };\n      columnsToRemove = processUnpinnedColumns(params);\n    }\n    this.columnModel.setColsPinned(columnsToRemove, null, \"viewportSizeFeature\");\n  }\n  getPinnedColumnsOverflowingViewport(viewportWidth) {\n    const pinnedRightWidth = this.pinnedWidthService.getPinnedRightWidth();\n    const pinnedLeftWidth = this.pinnedWidthService.getPinnedLeftWidth();\n    const totalPinnedWidth = pinnedRightWidth + pinnedLeftWidth;\n    if (totalPinnedWidth < viewportWidth) {\n      return [];\n    }\n    const pinnedLeftColumns = [...this.visibleColsService.getLeftCols()];\n    const pinnedRightColumns = [...this.visibleColsService.getRightCols()];\n    let indexRight = 0;\n    let indexLeft = 0;\n    const totalWidthRemoved = 0;\n    const columnsToRemove = [];\n    let spaceNecessary = totalPinnedWidth - totalWidthRemoved - viewportWidth;\n    while ((indexLeft < pinnedLeftColumns.length || indexRight < pinnedRightColumns.length) && spaceNecessary > 0) {\n      if (indexRight < pinnedRightColumns.length) {\n        const currentColumn = pinnedRightColumns[indexRight++];\n        spaceNecessary -= currentColumn.getActualWidth();\n        columnsToRemove.push(currentColumn);\n      }\n      if (indexLeft < pinnedLeftColumns.length && spaceNecessary > 0) {\n        const currentColumn = pinnedLeftColumns[indexLeft++];\n        spaceNecessary -= currentColumn.getActualWidth();\n        columnsToRemove.push(currentColumn);\n      }\n    }\n    return columnsToRemove;\n  }\n  // gets called every time the viewport size changes. we use this to check visibility of scrollbars\n  // in the grid panel, and also to check size and position of viewport for row and column virtualisation.\n  checkViewportAndScrolls() {\n    this.updateScrollVisibleService();\n    this.checkBodyHeight();\n    this.onHorizontalViewportChanged();\n    this.gridBodyCtrl.getScrollFeature().checkScrollLeft();\n  }\n  getBodyHeight() {\n    return this.bodyHeight;\n  }\n  checkBodyHeight() {\n    const eBodyViewport = this.gridBodyCtrl.getBodyViewportElement();\n    const bodyHeight = _getInnerHeight(eBodyViewport);\n    if (this.bodyHeight !== bodyHeight) {\n      this.bodyHeight = bodyHeight;\n      this.eventService.dispatchEvent({\n        type: \"bodyHeightChanged\"\n      });\n    }\n  }\n  updateScrollVisibleService() {\n    this.updateScrollVisibleServiceImpl();\n    setTimeout(this.updateScrollVisibleServiceImpl.bind(this), 500);\n  }\n  updateScrollVisibleServiceImpl() {\n    const params = {\n      horizontalScrollShowing: this.isHorizontalScrollShowing(),\n      verticalScrollShowing: this.gridBodyCtrl.isVerticalScrollShowing()\n    };\n    this.scrollVisibleService.setScrollsVisible(params);\n  }\n  isHorizontalScrollShowing() {\n    return this.centerContainerCtrl.isHorizontalScrollShowing();\n  }\n  // this gets called whenever a change in the viewport, so we can inform column controller it has to work\n  // out the virtual columns again. gets called from following locations:\n  // + ensureColVisible, scroll, init, layoutChanged, displayedColumnsChanged\n  onHorizontalViewportChanged() {\n    const scrollWidth = this.centerContainerCtrl.getCenterWidth();\n    const scrollPosition = this.centerContainerCtrl.getViewportScrollLeft();\n    this.columnViewportService.setScrollPosition(scrollWidth, scrollPosition);\n  }\n};\n\n// community-modules/core/src/gridBodyComp/rowContainer/dragListenerFeature.ts\nvar DragListenerFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.dragService = beans.dragService;\n    this.rangeService = beans.rangeService;\n  }\n  constructor(eContainer) {\n    super();\n    this.eContainer = eContainer;\n  }\n  postConstruct() {\n    if (!this.rangeService) {\n      return;\n    }\n    this.params = {\n      eElement: this.eContainer,\n      onDragStart: this.rangeService.onDragStart.bind(this.rangeService),\n      onDragStop: this.rangeService.onDragStop.bind(this.rangeService),\n      onDragging: this.rangeService.onDragging.bind(this.rangeService)\n    };\n    this.addManagedPropertyListeners([\"enableRangeSelection\", \"cellSelection\"], () => {\n      const isEnabled = _isCellSelectionEnabled(this.gos);\n      if (isEnabled) {\n        this.enableFeature();\n      } else {\n        this.disableFeature();\n      }\n    });\n    this.addDestroyFunc(() => this.disableFeature());\n    const isRangeSelection = _isCellSelectionEnabled(this.gos);\n    if (isRangeSelection) {\n      this.enableFeature();\n    }\n  }\n  enableFeature() {\n    this.dragService.addDragSource(this.params);\n  }\n  disableFeature() {\n    this.dragService.removeDragSource(this.params);\n  }\n};\n\n// community-modules/core/src/rendering/checkboxSelectionComponent.ts\nvar CheckboxSelectionComponent = class extends Component {\n  constructor() {\n    super(\n      /* html*/\n      `\n            <div class=\"ag-selection-checkbox\" role=\"presentation\">\n                <ag-checkbox role=\"presentation\" data-ref=\"eCheckbox\"></ag-checkbox>\n            </div>`,\n      [AgCheckboxSelector]\n    );\n    this.eCheckbox = RefPlaceholder;\n  }\n  postConstruct() {\n    this.eCheckbox.setPassive(true);\n  }\n  getCheckboxId() {\n    return this.eCheckbox.getInputElement().id;\n  }\n  onDataChanged() {\n    this.onSelectionChanged();\n  }\n  onSelectableChanged() {\n    this.showOrHideSelect();\n  }\n  onSelectionChanged() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const state = this.rowNode.isSelected();\n    const stateName = _getAriaCheckboxStateName(translate, state);\n    const [ariaKey, ariaLabel] = this.rowNode.selectable ? [\"ariaRowToggleSelection\", \"Press Space to toggle row selection\"] : [\"ariaRowSelectionDisabled\", \"Row Selection is disabled for this row\"];\n    const translatedLabel = translate(ariaKey, ariaLabel);\n    this.eCheckbox.setValue(state, true);\n    this.eCheckbox.setInputAriaLabel(`${translatedLabel} (${stateName})`);\n  }\n  onClicked(newValue, groupSelectsFiltered, event) {\n    return this.rowNode.setSelectedParams({\n      newValue,\n      rangeSelect: event.shiftKey,\n      groupSelectsFiltered,\n      event,\n      source: \"checkboxSelected\"\n    });\n  }\n  init(params) {\n    this.rowNode = params.rowNode;\n    this.column = params.column;\n    this.overrides = params.overrides;\n    this.onSelectionChanged();\n    this.addManagedListeners(this.eCheckbox.getInputElement(), {\n      // we don't want double click on this icon to open a group\n      dblclick: (event) => _stopPropagationForAgGrid(event),\n      click: (event) => {\n        _stopPropagationForAgGrid(event);\n        const groupSelectsFiltered = _getGroupSelection(this.gos) === \"filteredDescendants\";\n        const isSelected = this.eCheckbox.getValue();\n        if (this.shouldHandleIndeterminateState(isSelected, groupSelectsFiltered)) {\n          const result = this.onClicked(true, groupSelectsFiltered, event || {});\n          if (result === 0) {\n            this.onClicked(false, groupSelectsFiltered, event);\n          }\n        } else if (isSelected) {\n          this.onClicked(false, groupSelectsFiltered, event);\n        } else {\n          this.onClicked(true, groupSelectsFiltered, event || {});\n        }\n      }\n    });\n    this.addManagedListeners(this.rowNode, {\n      rowSelected: this.onSelectionChanged.bind(this),\n      dataChanged: this.onDataChanged.bind(this),\n      selectableChanged: this.onSelectableChanged.bind(this)\n    });\n    const isRowSelectableFunc = _getIsRowSelectable(this.gos);\n    const checkboxVisibleIsDynamic = isRowSelectableFunc || typeof this.getIsVisible() === \"function\";\n    if (checkboxVisibleIsDynamic) {\n      const showOrHideSelectListener = this.showOrHideSelect.bind(this);\n      this.addManagedEventListeners({ displayedColumnsChanged: showOrHideSelectListener });\n      this.addManagedListeners(this.rowNode, {\n        dataChanged: showOrHideSelectListener,\n        cellChanged: showOrHideSelectListener\n      });\n      this.showOrHideSelect();\n    }\n    this.eCheckbox.getInputElement().setAttribute(\"tabindex\", \"-1\");\n  }\n  shouldHandleIndeterminateState(isSelected, groupSelectsFiltered) {\n    return groupSelectsFiltered && (this.eCheckbox.getPreviousValue() === void 0 || isSelected === void 0) && _isClientSideRowModel(this.gos);\n  }\n  showOrHideSelect() {\n    let selectable = this.rowNode.selectable;\n    const isVisible = this.getIsVisible();\n    if (selectable) {\n      if (typeof isVisible === \"function\") {\n        const extraParams = this.overrides?.callbackParams;\n        if (!this.column) {\n          selectable = isVisible({ ...extraParams, node: this.rowNode, data: this.rowNode.data });\n        } else {\n          const params = this.column.createColumnFunctionCallbackParams(this.rowNode);\n          selectable = isVisible({ ...extraParams, ...params });\n        }\n      } else {\n        selectable = isVisible ?? false;\n      }\n    }\n    const so = this.gos.get(\"rowSelection\");\n    const disableInsteadOfHide = so && typeof so !== \"string\" ? !_getHideDisabledCheckboxes(so) : this.column?.getColDef().showDisabledCheckboxes;\n    if (disableInsteadOfHide) {\n      this.eCheckbox.setDisabled(!selectable);\n      this.setVisible(true);\n      this.setDisplayed(true);\n      return;\n    }\n    if (this.overrides?.removeHidden) {\n      this.setDisplayed(selectable);\n      return;\n    }\n    this.setVisible(selectable);\n  }\n  getIsVisible() {\n    if (this.overrides) {\n      return this.overrides.isVisible;\n    }\n    const so = this.gos.get(\"rowSelection\");\n    if (so && typeof so !== \"string\") {\n      return _getCheckboxes(so);\n    }\n    return this.column?.getColDef()?.checkboxSelection;\n  }\n};\n\n// community-modules/core/src/rendering/dndSourceComp.ts\nvar DndSourceComp = class extends Component {\n  constructor(rowNode, column, eCell) {\n    super(\n      /* html */\n      `<div class=\"ag-drag-handle ag-row-drag\" draggable=\"true\"></div>`\n    );\n    this.rowNode = rowNode;\n    this.column = column;\n    this.eCell = eCell;\n  }\n  postConstruct() {\n    const eGui = this.getGui();\n    eGui.appendChild(_createIconNoSpan(\"rowDrag\", this.gos, null));\n    this.addGuiEventListener(\"mousedown\", (e) => {\n      e.stopPropagation();\n    });\n    this.addDragSource();\n    this.checkVisibility();\n  }\n  addDragSource() {\n    this.addGuiEventListener(\"dragstart\", this.onDragStart.bind(this));\n  }\n  onDragStart(dragEvent) {\n    const providedOnRowDrag = this.column.getColDef().dndSourceOnRowDrag;\n    dragEvent.dataTransfer.setDragImage(this.eCell, 0, 0);\n    const defaultOnRowDrag = () => {\n      try {\n        const jsonData = JSON.stringify(this.rowNode.data);\n        dragEvent.dataTransfer.setData(\"application/json\", jsonData);\n        dragEvent.dataTransfer.setData(\"text/plain\", jsonData);\n      } catch (e) {\n      }\n    };\n    if (providedOnRowDrag) {\n      const params = this.gos.addGridCommonParams({\n        rowNode: this.rowNode,\n        dragEvent\n      });\n      providedOnRowDrag(params);\n    } else {\n      defaultOnRowDrag();\n    }\n  }\n  checkVisibility() {\n    const visible = this.column.isDndSource(this.rowNode);\n    this.setDisplayed(visible);\n  }\n};\n\n// community-modules/core/src/rendering/cell/cellCustomStyleFeature.ts\nvar CellCustomStyleFeature = class extends BeanStub {\n  constructor(ctrl, beans) {\n    super();\n    this.staticClasses = [];\n    this.cellCtrl = ctrl;\n    this.beans = beans;\n    this.column = ctrl.getColumn();\n    this.rowNode = ctrl.getRowNode();\n  }\n  setComp(comp) {\n    this.cellComp = comp;\n    this.applyUserStyles();\n    this.applyCellClassRules();\n    this.applyClassesFromColDef();\n  }\n  applyCellClassRules() {\n    const colDef = this.column.getColDef();\n    const { cellClassRules } = colDef;\n    const cellClassParams = this.beans.gos.addGridCommonParams({\n      value: this.cellCtrl.getValue(),\n      data: this.rowNode.data,\n      node: this.rowNode,\n      colDef,\n      column: this.column,\n      rowIndex: this.rowNode.rowIndex\n    });\n    this.beans.stylingService.processClassRules(\n      // if current was previous, skip\n      cellClassRules === this.cellClassRules ? void 0 : this.cellClassRules,\n      cellClassRules,\n      cellClassParams,\n      (className) => this.cellComp.addOrRemoveCssClass(className, true),\n      (className) => this.cellComp.addOrRemoveCssClass(className, false)\n    );\n    this.cellClassRules = cellClassRules;\n  }\n  applyUserStyles() {\n    const colDef = this.column.getColDef();\n    if (!colDef.cellStyle) {\n      return;\n    }\n    let styles;\n    if (typeof colDef.cellStyle === \"function\") {\n      const cellStyleParams = this.beans.gos.addGridCommonParams({\n        column: this.column,\n        value: this.cellCtrl.getValue(),\n        colDef,\n        data: this.rowNode.data,\n        node: this.rowNode,\n        rowIndex: this.rowNode.rowIndex\n      });\n      const cellStyleFunc = colDef.cellStyle;\n      styles = cellStyleFunc(cellStyleParams);\n    } else {\n      styles = colDef.cellStyle;\n    }\n    if (styles) {\n      this.cellComp.setUserStyles(styles);\n    }\n  }\n  applyClassesFromColDef() {\n    const colDef = this.column.getColDef();\n    const cellClassParams = this.beans.gos.addGridCommonParams({\n      value: this.cellCtrl.getValue(),\n      data: this.rowNode.data,\n      node: this.rowNode,\n      column: this.column,\n      colDef,\n      rowIndex: this.rowNode.rowIndex\n    });\n    if (this.staticClasses.length) {\n      this.staticClasses.forEach((className) => this.cellComp.addOrRemoveCssClass(className, false));\n    }\n    this.staticClasses = this.beans.stylingService.getStaticCellClasses(colDef, cellClassParams);\n    if (this.staticClasses.length) {\n      this.staticClasses.forEach((className) => this.cellComp.addOrRemoveCssClass(className, true));\n    }\n  }\n  // overriding to make public, as we don't dispose this bean via context\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/rendering/cell/cellKeyboardListenerFeature.ts\nvar CellKeyboardListenerFeature = class extends BeanStub {\n  constructor(ctrl, beans, column, rowNode, rowCtrl) {\n    super();\n    this.cellCtrl = ctrl;\n    this.beans = beans;\n    this.rowNode = rowNode;\n    this.rowCtrl = rowCtrl;\n  }\n  setComp(eGui) {\n    this.eGui = eGui;\n  }\n  onKeyDown(event) {\n    const key = event.key;\n    switch (key) {\n      case KeyCode.ENTER:\n        this.onEnterKeyDown(event);\n        break;\n      case KeyCode.F2:\n        this.onF2KeyDown(event);\n        break;\n      case KeyCode.ESCAPE:\n        this.onEscapeKeyDown(event);\n        break;\n      case KeyCode.TAB:\n        this.onTabKeyDown(event);\n        break;\n      case KeyCode.BACKSPACE:\n      case KeyCode.DELETE:\n        this.onBackspaceOrDeleteKeyDown(key, event);\n        break;\n      case KeyCode.DOWN:\n      case KeyCode.UP:\n      case KeyCode.RIGHT:\n      case KeyCode.LEFT:\n        this.onNavigationKeyDown(event, key);\n        break;\n    }\n  }\n  onNavigationKeyDown(event, key) {\n    if (this.cellCtrl.isEditing()) {\n      return;\n    }\n    if (event.shiftKey && this.cellCtrl.isRangeSelectionEnabled()) {\n      this.onShiftRangeSelect(event);\n    } else {\n      this.beans.navigationService.navigateToNextCell(event, key, this.cellCtrl.getCellPosition(), true);\n    }\n    event.preventDefault();\n  }\n  onShiftRangeSelect(event) {\n    if (!this.beans.rangeService) {\n      return;\n    }\n    const endCell = this.beans.rangeService.extendLatestRangeInDirection(event);\n    if (endCell) {\n      this.beans.navigationService.ensureCellVisible(endCell);\n    }\n  }\n  onTabKeyDown(event) {\n    this.beans.navigationService.onTabKeyDown(this.cellCtrl, event);\n  }\n  onBackspaceOrDeleteKeyDown(key, event) {\n    const { cellCtrl, beans, rowNode } = this;\n    const { gos, rangeService, eventService } = beans;\n    if (cellCtrl.isEditing()) {\n      return;\n    }\n    eventService.dispatchEvent({ type: \"keyShortcutChangedCellStart\" });\n    if (_isDeleteKey(key, gos.get(\"enableCellEditingOnBackspace\"))) {\n      if (rangeService && _isCellSelectionEnabled(gos)) {\n        rangeService.clearCellRangeCellValues({ dispatchWrapperEvents: true, wrapperEventSource: \"deleteKey\" });\n      } else if (cellCtrl.isCellEditable()) {\n        const column = cellCtrl.getColumn();\n        const emptyValue = this.beans.valueService.getDeleteValue(column, rowNode);\n        rowNode.setDataValue(column, emptyValue, \"cellClear\");\n      }\n    } else {\n      cellCtrl.startRowOrCellEdit(key, event);\n    }\n    eventService.dispatchEvent({ type: \"keyShortcutChangedCellEnd\" });\n  }\n  onEnterKeyDown(e) {\n    if (this.cellCtrl.isEditing() || this.rowCtrl.isEditing()) {\n      this.cellCtrl.stopEditingAndFocus(false, e.shiftKey);\n    } else {\n      if (this.beans.gos.get(\"enterNavigatesVertically\")) {\n        const key = e.shiftKey ? KeyCode.UP : KeyCode.DOWN;\n        this.beans.navigationService.navigateToNextCell(null, key, this.cellCtrl.getCellPosition(), false);\n      } else {\n        this.cellCtrl.startRowOrCellEdit(KeyCode.ENTER, e);\n        if (this.cellCtrl.isEditing()) {\n          e.preventDefault();\n        }\n      }\n    }\n  }\n  onF2KeyDown(event) {\n    if (!this.cellCtrl.isEditing()) {\n      this.cellCtrl.startRowOrCellEdit(KeyCode.F2, event);\n    }\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  onEscapeKeyDown(event) {\n    if (this.cellCtrl.isEditing()) {\n      this.cellCtrl.stopRowOrCellEdit(true);\n      this.cellCtrl.focusCell(true);\n    }\n  }\n  processCharacter(event) {\n    const eventTarget = event.target;\n    const eventOnChildComponent = eventTarget !== this.eGui;\n    if (eventOnChildComponent || this.cellCtrl.isEditing()) {\n      return;\n    }\n    const key = event.key;\n    if (key === \" \") {\n      this.onSpaceKeyDown(event);\n    } else {\n      if (this.cellCtrl.startRowOrCellEdit(key, event)) {\n        event.preventDefault();\n      }\n    }\n  }\n  onSpaceKeyDown(event) {\n    const { gos } = this.beans;\n    if (!this.cellCtrl.isEditing() && _isRowSelection(gos)) {\n      const currentSelection = this.rowNode.isSelected();\n      const newSelection = !currentSelection;\n      const groupSelectsFiltered = _getGroupSelection(gos) === \"filteredDescendants\";\n      const updatedCount = this.rowNode.setSelectedParams({\n        newValue: newSelection,\n        rangeSelect: event.shiftKey,\n        groupSelectsFiltered,\n        event,\n        source: \"spaceKey\"\n      });\n      if (currentSelection === void 0 && updatedCount === 0) {\n        this.rowNode.setSelectedParams({\n          newValue: false,\n          rangeSelect: event.shiftKey,\n          groupSelectsFiltered,\n          event,\n          source: \"spaceKey\"\n        });\n      }\n    }\n    event.preventDefault();\n  }\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/rendering/cell/cellMouseListenerFeature.ts\nvar CellMouseListenerFeature = class extends BeanStub {\n  constructor(ctrl, beans, column) {\n    super();\n    this.cellCtrl = ctrl;\n    this.beans = beans;\n    this.column = column;\n  }\n  onMouseEvent(eventName, mouseEvent) {\n    if (_isStopPropagationForAgGrid(mouseEvent)) {\n      return;\n    }\n    switch (eventName) {\n      case \"click\":\n        this.onCellClicked(mouseEvent);\n        break;\n      case \"mousedown\":\n      case \"touchstart\":\n        this.onMouseDown(mouseEvent);\n        break;\n      case \"dblclick\":\n        this.onCellDoubleClicked(mouseEvent);\n        break;\n      case \"mouseout\":\n        this.onMouseOut(mouseEvent);\n        break;\n      case \"mouseover\":\n        this.onMouseOver(mouseEvent);\n        break;\n    }\n  }\n  onCellClicked(mouseEvent) {\n    if (this.isDoubleClickOnIPad()) {\n      this.onCellDoubleClicked(mouseEvent);\n      mouseEvent.preventDefault();\n      return;\n    }\n    const { eventService, rangeService, gos } = this.beans;\n    const isMultiKey = mouseEvent.ctrlKey || mouseEvent.metaKey;\n    if (rangeService && isMultiKey) {\n      if (rangeService.getCellRangeCount(this.cellCtrl.getCellPosition()) > 1) {\n        rangeService.intersectLastRange(true);\n      }\n    }\n    const cellClickedEvent = this.cellCtrl.createEvent(mouseEvent, \"cellClicked\");\n    eventService.dispatchEvent(cellClickedEvent);\n    const colDef = this.column.getColDef();\n    if (colDef.onCellClicked) {\n      window.setTimeout(() => {\n        this.beans.frameworkOverrides.wrapOutgoing(() => {\n          colDef.onCellClicked(cellClickedEvent);\n        });\n      }, 0);\n    }\n    const editOnSingleClick = (gos.get(\"singleClickEdit\") || colDef.singleClickEdit) && !gos.get(\"suppressClickEdit\");\n    if (editOnSingleClick && !(mouseEvent.shiftKey && rangeService?.getCellRanges().length != 0)) {\n      this.cellCtrl.startRowOrCellEdit();\n    }\n  }\n  // returns true if on iPad and this is second 'click' event in 200ms\n  isDoubleClickOnIPad() {\n    if (!_isIOSUserAgent() || _isEventSupported(\"dblclick\")) {\n      return false;\n    }\n    const nowMillis = (/* @__PURE__ */ new Date()).getTime();\n    const res = nowMillis - this.lastIPadMouseClickEvent < 200;\n    this.lastIPadMouseClickEvent = nowMillis;\n    return res;\n  }\n  onCellDoubleClicked(mouseEvent) {\n    const { column, beans, cellCtrl } = this;\n    const { eventService, frameworkOverrides, gos } = beans;\n    const colDef = column.getColDef();\n    const cellDoubleClickedEvent = cellCtrl.createEvent(mouseEvent, \"cellDoubleClicked\");\n    eventService.dispatchEvent(cellDoubleClickedEvent);\n    if (typeof colDef.onCellDoubleClicked === \"function\") {\n      window.setTimeout(() => {\n        frameworkOverrides.wrapOutgoing(() => {\n          colDef.onCellDoubleClicked(cellDoubleClickedEvent);\n        });\n      }, 0);\n    }\n    const editOnDoubleClick = !gos.get(\"singleClickEdit\") && !gos.get(\"suppressClickEdit\");\n    if (editOnDoubleClick) {\n      cellCtrl.startRowOrCellEdit(null, mouseEvent);\n    }\n  }\n  onMouseDown(mouseEvent) {\n    const { ctrlKey, metaKey, shiftKey } = mouseEvent;\n    const target = mouseEvent.target;\n    const { cellCtrl, beans } = this;\n    const { eventService, rangeService, focusService, gos } = beans;\n    if (this.isRightClickInExistingRange(mouseEvent)) {\n      return;\n    }\n    const ranges = rangeService && rangeService.getCellRanges().length != 0;\n    if (!shiftKey || !ranges) {\n      const isEnableCellTextSelection = gos.get(\"enableCellTextSelection\");\n      const shouldFocus = isEnableCellTextSelection && mouseEvent.defaultPrevented;\n      const forceBrowserFocus = (_isBrowserSafari() || shouldFocus) && !cellCtrl.isEditing() && !_isFocusableFormField(target);\n      cellCtrl.focusCell(forceBrowserFocus);\n    }\n    if (shiftKey && ranges && !focusService.isCellFocused(cellCtrl.getCellPosition())) {\n      mouseEvent.preventDefault();\n      const focusedCellPosition = focusService.getFocusedCell();\n      if (focusedCellPosition) {\n        const { column, rowIndex, rowPinned } = focusedCellPosition;\n        const focusedRowCtrl = beans.rowRenderer.getRowByPosition({ rowIndex, rowPinned });\n        const focusedCellCtrl = focusedRowCtrl?.getCellCtrl(column);\n        if (focusedCellCtrl?.isEditing()) {\n          focusedCellCtrl.stopEditing();\n        }\n        focusService.setFocusedCell({\n          column,\n          rowIndex,\n          rowPinned,\n          forceBrowserFocus: true,\n          preventScrollOnBrowserFocus: true\n        });\n      }\n    }\n    if (this.containsWidget(target)) {\n      return;\n    }\n    if (rangeService) {\n      const thisCell = this.cellCtrl.getCellPosition();\n      if (shiftKey) {\n        rangeService.extendLatestRangeToCell(thisCell);\n      } else {\n        const isMultiKey = ctrlKey || metaKey;\n        rangeService.setRangeToCell(thisCell, isMultiKey);\n      }\n    }\n    eventService.dispatchEvent(this.cellCtrl.createEvent(mouseEvent, \"cellMouseDown\"));\n  }\n  isRightClickInExistingRange(mouseEvent) {\n    const { rangeService } = this.beans;\n    if (rangeService) {\n      const cellInRange = rangeService.isCellInAnyRange(this.cellCtrl.getCellPosition());\n      const isRightClick = mouseEvent.button === 2 || mouseEvent.ctrlKey && this.beans.gos.get(\"allowContextMenuWithControlKey\");\n      if (cellInRange && isRightClick) {\n        return true;\n      }\n    }\n    return false;\n  }\n  containsWidget(target) {\n    return _isElementChildOfClass(target, \"ag-selection-checkbox\", 3);\n  }\n  onMouseOut(mouseEvent) {\n    if (this.mouseStayingInsideCell(mouseEvent)) {\n      return;\n    }\n    this.beans.eventService.dispatchEvent(this.cellCtrl.createEvent(mouseEvent, \"cellMouseOut\"));\n    this.beans.columnHoverService.clearMouseOver();\n  }\n  onMouseOver(mouseEvent) {\n    if (this.mouseStayingInsideCell(mouseEvent)) {\n      return;\n    }\n    this.beans.eventService.dispatchEvent(this.cellCtrl.createEvent(mouseEvent, \"cellMouseOver\"));\n    this.beans.columnHoverService.setMouseOver([this.column]);\n  }\n  mouseStayingInsideCell(e) {\n    if (!e.target || !e.relatedTarget) {\n      return false;\n    }\n    const eGui = this.cellCtrl.getGui();\n    const cellContainsTarget = eGui.contains(e.target);\n    const cellContainsRelatedTarget = eGui.contains(e.relatedTarget);\n    return cellContainsTarget && cellContainsRelatedTarget;\n  }\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/rendering/cell/cellPositionFeature.ts\nvar CellPositionFeature = class extends BeanStub {\n  constructor(ctrl, beans) {\n    super();\n    this.cellCtrl = ctrl;\n    this.beans = beans;\n    this.column = ctrl.getColumn();\n    this.rowNode = ctrl.getRowNode();\n  }\n  setupRowSpan() {\n    this.rowSpan = this.column.getRowSpan(this.rowNode);\n    this.addManagedListeners(this.beans.eventService, { newColumnsLoaded: () => this.onNewColumnsLoaded() });\n  }\n  setComp(eGui) {\n    this.eGui = eGui;\n    this.setupColSpan();\n    this.setupRowSpan();\n    this.onLeftChanged();\n    this.onWidthChanged();\n    this.applyRowSpan();\n  }\n  onNewColumnsLoaded() {\n    const rowSpan = this.column.getRowSpan(this.rowNode);\n    if (this.rowSpan === rowSpan) {\n      return;\n    }\n    this.rowSpan = rowSpan;\n    this.applyRowSpan(true);\n  }\n  onDisplayColumnsChanged() {\n    const colsSpanning = this.getColSpanningList();\n    if (!_areEqual(this.colsSpanning, colsSpanning)) {\n      this.colsSpanning = colsSpanning;\n      this.onWidthChanged();\n      this.onLeftChanged();\n    }\n  }\n  setupColSpan() {\n    if (this.column.getColDef().colSpan == null) {\n      return;\n    }\n    this.colsSpanning = this.getColSpanningList();\n    this.addManagedListeners(this.beans.eventService, {\n      // because we are col spanning, a reorder of the cols can change what cols we are spanning over\n      displayedColumnsChanged: this.onDisplayColumnsChanged.bind(this),\n      // because we are spanning over multiple cols, we check for width any time any cols width changes.\n      // this is expensive - really we should be explicitly checking only the cols we are spanning over\n      // instead of every col, however it would be tricky code to track the cols we are spanning over, so\n      // because hardly anyone will be using colSpan, am favouring this easier way for more maintainable code.\n      displayedColumnsWidthChanged: this.onWidthChanged.bind(this)\n    });\n  }\n  onWidthChanged() {\n    if (!this.eGui) {\n      return;\n    }\n    const width = this.getCellWidth();\n    this.eGui.style.width = `${width}px`;\n  }\n  getCellWidth() {\n    if (!this.colsSpanning) {\n      return this.column.getActualWidth();\n    }\n    return this.colsSpanning.reduce((width, col) => width + col.getActualWidth(), 0);\n  }\n  getColSpanningList() {\n    const colSpan = this.column.getColSpan(this.rowNode);\n    const colsSpanning = [];\n    if (colSpan === 1) {\n      colsSpanning.push(this.column);\n    } else {\n      let pointer = this.column;\n      const pinned = this.column.getPinned();\n      for (let i = 0; pointer && i < colSpan; i++) {\n        colsSpanning.push(pointer);\n        pointer = this.beans.visibleColsService.getColAfter(pointer);\n        if (!pointer || _missing(pointer)) {\n          break;\n        }\n        if (pinned !== pointer.getPinned()) {\n          break;\n        }\n      }\n    }\n    return colsSpanning;\n  }\n  onLeftChanged() {\n    if (!this.eGui) {\n      return;\n    }\n    const left = this.modifyLeftForPrintLayout(this.getCellLeft());\n    this.eGui.style.left = left + \"px\";\n  }\n  getCellLeft() {\n    let mostLeftCol;\n    if (this.beans.gos.get(\"enableRtl\") && this.colsSpanning) {\n      mostLeftCol = _last(this.colsSpanning);\n    } else {\n      mostLeftCol = this.column;\n    }\n    return mostLeftCol.getLeft();\n  }\n  modifyLeftForPrintLayout(leftPosition) {\n    if (!this.cellCtrl.isPrintLayout() || this.column.getPinned() === \"left\") {\n      return leftPosition;\n    }\n    const leftWidth = this.beans.visibleColsService.getColsLeftWidth();\n    if (this.column.getPinned() === \"right\") {\n      const bodyWidth = this.beans.visibleColsService.getBodyContainerWidth();\n      return leftWidth + bodyWidth + (leftPosition || 0);\n    }\n    return leftWidth + (leftPosition || 0);\n  }\n  applyRowSpan(force) {\n    if (this.rowSpan === 1 && !force) {\n      return;\n    }\n    const singleRowHeight = _getRowHeightAsNumber(this.beans.gos);\n    const totalRowHeight = singleRowHeight * this.rowSpan;\n    this.eGui.style.height = `${totalRowHeight}px`;\n    this.eGui.style.zIndex = \"1\";\n  }\n  // overriding to make public, as we don't dispose this bean via context\n  destroy() {\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/interfaces/IRangeService.ts\nvar SelectionHandleType = /* @__PURE__ */ ((SelectionHandleType2) => {\n  SelectionHandleType2[SelectionHandleType2[\"FILL\"] = 0] = \"FILL\";\n  SelectionHandleType2[SelectionHandleType2[\"RANGE\"] = 1] = \"RANGE\";\n  return SelectionHandleType2;\n})(SelectionHandleType || {});\nvar CellRangeType = /* @__PURE__ */ ((CellRangeType2) => {\n  CellRangeType2[CellRangeType2[\"VALUE\"] = 0] = \"VALUE\";\n  CellRangeType2[CellRangeType2[\"DIMENSION\"] = 1] = \"DIMENSION\";\n  return CellRangeType2;\n})(CellRangeType || {});\n\n// community-modules/core/src/rendering/cell/cellRangeFeature.ts\nvar CSS_CELL_RANGE_SELECTED = \"ag-cell-range-selected\";\nvar CSS_CELL_RANGE_CHART = \"ag-cell-range-chart\";\nvar CSS_CELL_RANGE_SINGLE_CELL = \"ag-cell-range-single-cell\";\nvar CSS_CELL_RANGE_CHART_CATEGORY = \"ag-cell-range-chart-category\";\nvar CSS_CELL_RANGE_HANDLE = \"ag-cell-range-handle\";\nvar CSS_CELL_RANGE_TOP = \"ag-cell-range-top\";\nvar CSS_CELL_RANGE_RIGHT = \"ag-cell-range-right\";\nvar CSS_CELL_RANGE_BOTTOM = \"ag-cell-range-bottom\";\nvar CSS_CELL_RANGE_LEFT = \"ag-cell-range-left\";\nvar CellRangeFeature = class {\n  constructor(beans, ctrl) {\n    this.beans = beans;\n    this.rangeService = beans.rangeService;\n    this.selectionHandleFactory = beans.selectionHandleFactory;\n    this.cellCtrl = ctrl;\n  }\n  setComp(cellComp, eGui) {\n    this.cellComp = cellComp;\n    this.eGui = eGui;\n    this.onCellSelectionChanged();\n  }\n  onCellSelectionChanged() {\n    if (!this.cellComp) {\n      return;\n    }\n    this.rangeCount = this.rangeService.getCellRangeCount(this.cellCtrl.getCellPosition());\n    this.hasChartRange = this.getHasChartRange();\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_SELECTED, this.rangeCount !== 0);\n    this.cellComp.addOrRemoveCssClass(`${CSS_CELL_RANGE_SELECTED}-1`, this.rangeCount === 1);\n    this.cellComp.addOrRemoveCssClass(`${CSS_CELL_RANGE_SELECTED}-2`, this.rangeCount === 2);\n    this.cellComp.addOrRemoveCssClass(`${CSS_CELL_RANGE_SELECTED}-3`, this.rangeCount === 3);\n    this.cellComp.addOrRemoveCssClass(`${CSS_CELL_RANGE_SELECTED}-4`, this.rangeCount >= 4);\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_CHART, this.hasChartRange);\n    _setAriaSelected(this.eGui, this.rangeCount > 0 ? true : void 0);\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_SINGLE_CELL, this.isSingleCell());\n    this.updateRangeBorders();\n    this.refreshHandle();\n  }\n  updateRangeBorders() {\n    const rangeBorders = this.getRangeBorders();\n    const isSingleCell = this.isSingleCell();\n    const isTop = !isSingleCell && rangeBorders.top;\n    const isRight = !isSingleCell && rangeBorders.right;\n    const isBottom = !isSingleCell && rangeBorders.bottom;\n    const isLeft = !isSingleCell && rangeBorders.left;\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_TOP, isTop);\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_RIGHT, isRight);\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_BOTTOM, isBottom);\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_LEFT, isLeft);\n  }\n  isSingleCell() {\n    const { rangeService } = this.beans;\n    return this.rangeCount === 1 && !!rangeService && !rangeService.isMoreThanOneCell();\n  }\n  getHasChartRange() {\n    const { rangeService } = this.beans;\n    if (!this.rangeCount || !rangeService) {\n      return false;\n    }\n    const cellRanges = rangeService.getCellRanges();\n    return cellRanges.length > 0 && cellRanges.every((range) => _includes([1 /* DIMENSION */, 0 /* VALUE */], range.type));\n  }\n  updateRangeBordersIfRangeCount() {\n    if (this.rangeCount > 0) {\n      this.updateRangeBorders();\n      this.refreshHandle();\n    }\n  }\n  getRangeBorders() {\n    const isRtl = this.beans.gos.get(\"enableRtl\");\n    let top = false;\n    let right = false;\n    let bottom = false;\n    let left = false;\n    const thisCol = this.cellCtrl.getCellPosition().column;\n    const presentedColsService = this.beans.visibleColsService;\n    let leftCol;\n    let rightCol;\n    if (isRtl) {\n      leftCol = presentedColsService.getColAfter(thisCol);\n      rightCol = presentedColsService.getColBefore(thisCol);\n    } else {\n      leftCol = presentedColsService.getColBefore(thisCol);\n      rightCol = presentedColsService.getColAfter(thisCol);\n    }\n    const ranges = this.rangeService.getCellRanges().filter((range) => this.rangeService.isCellInSpecificRange(this.cellCtrl.getCellPosition(), range));\n    if (!leftCol) {\n      left = true;\n    }\n    if (!rightCol) {\n      right = true;\n    }\n    for (let i = 0; i < ranges.length; i++) {\n      if (top && right && bottom && left) {\n        break;\n      }\n      const range = ranges[i];\n      const startRow = this.rangeService.getRangeStartRow(range);\n      const endRow = this.rangeService.getRangeEndRow(range);\n      if (!top && this.beans.rowPositionUtils.sameRow(startRow, this.cellCtrl.getCellPosition())) {\n        top = true;\n      }\n      if (!bottom && this.beans.rowPositionUtils.sameRow(endRow, this.cellCtrl.getCellPosition())) {\n        bottom = true;\n      }\n      if (!left && leftCol && range.columns.indexOf(leftCol) < 0) {\n        left = true;\n      }\n      if (!right && rightCol && range.columns.indexOf(rightCol) < 0) {\n        right = true;\n      }\n    }\n    return { top, right, bottom, left };\n  }\n  refreshHandle() {\n    if (this.beans.context.isDestroyed()) {\n      return;\n    }\n    const shouldHaveSelectionHandle = this.shouldHaveSelectionHandle();\n    if (this.selectionHandle && !shouldHaveSelectionHandle) {\n      this.selectionHandle = this.beans.context.destroyBean(this.selectionHandle);\n    }\n    if (shouldHaveSelectionHandle) {\n      this.addSelectionHandle();\n    }\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_HANDLE, !!this.selectionHandle);\n  }\n  shouldHaveSelectionHandle() {\n    const gos = this.beans.gos;\n    const cellRanges = this.rangeService.getCellRanges();\n    const rangesLen = cellRanges.length;\n    if (this.rangeCount < 1 || rangesLen < 1) {\n      return false;\n    }\n    const cellRange = _last(cellRanges);\n    const cellPosition = this.cellCtrl.getCellPosition();\n    const isFillHandleAvailable = _isFillHandleEnabled(gos) && !this.cellCtrl.isSuppressFillHandle();\n    const isRangeHandleAvailable = _isRangeHandleEnabled(gos);\n    let handleIsAvailable = rangesLen === 1 && !this.cellCtrl.isEditing() && (isFillHandleAvailable || isRangeHandleAvailable);\n    if (this.hasChartRange) {\n      const hasCategoryRange = cellRanges[0].type === 1 /* DIMENSION */;\n      const isCategoryCell = hasCategoryRange && this.rangeService.isCellInSpecificRange(cellPosition, cellRanges[0]);\n      this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_CHART_CATEGORY, isCategoryCell);\n      handleIsAvailable = cellRange.type === 0 /* VALUE */;\n    }\n    return handleIsAvailable && cellRange.endRow != null && this.rangeService.isContiguousRange(cellRange) && this.rangeService.isBottomRightCell(cellRange, cellPosition);\n  }\n  addSelectionHandle() {\n    const cellRangeType = _last(this.rangeService.getCellRanges()).type;\n    const selectionHandleFill = _isFillHandleEnabled(this.beans.gos) && _missing(cellRangeType);\n    const type = selectionHandleFill ? 0 /* FILL */ : 1 /* RANGE */;\n    if (this.selectionHandle && this.selectionHandle.getType() !== type) {\n      this.selectionHandle = this.beans.context.destroyBean(this.selectionHandle);\n    }\n    if (!this.selectionHandle) {\n      this.selectionHandle = this.selectionHandleFactory.createSelectionHandle(type);\n    }\n    this.selectionHandle.refresh(this.cellCtrl);\n  }\n  destroy() {\n    this.beans.context.destroyBean(this.selectionHandle);\n  }\n};\n\n// community-modules/core/src/rendering/cell/cellCtrl.ts\nvar CSS_CELL = \"ag-cell\";\nvar CSS_AUTO_HEIGHT = \"ag-cell-auto-height\";\nvar CSS_NORMAL_HEIGHT = \"ag-cell-normal-height\";\nvar CSS_CELL_FOCUS = \"ag-cell-focus\";\nvar CSS_CELL_FIRST_RIGHT_PINNED = \"ag-cell-first-right-pinned\";\nvar CSS_CELL_LAST_LEFT_PINNED = \"ag-cell-last-left-pinned\";\nvar CSS_CELL_NOT_INLINE_EDITING = \"ag-cell-not-inline-editing\";\nvar CSS_COLUMN_HOVER = \"ag-column-hover\";\nvar CSS_CELL_WRAP_TEXT = \"ag-cell-wrap-text\";\nvar instanceIdSequence4 = 0;\nvar _CellCtrl = class _CellCtrl extends BeanStub {\n  constructor(column, rowNode, beans, rowCtrl) {\n    super();\n    this.column = column;\n    this.rowNode = rowNode;\n    this.beans = beans;\n    this.rowCtrl = rowCtrl;\n    this.cellRangeFeature = void 0;\n    this.cellPositionFeature = void 0;\n    this.cellCustomStyleFeature = void 0;\n    this.tooltipFeature = void 0;\n    this.cellMouseListenerFeature = void 0;\n    this.cellKeyboardListenerFeature = void 0;\n    this.suppressRefreshCell = false;\n    this.onCellCompAttachedFuncs = [];\n    this.onCellEditorAttachedFuncs = [];\n    this.instanceId = column.getId() + \"-\" + instanceIdSequence4++;\n    this.colIdSanitised = _escapeString(this.column.getId());\n    this.createCellPosition();\n    this.updateAndFormatValue(false);\n  }\n  shouldRestoreFocus() {\n    return this.beans.focusService.shouldRestoreFocus(this.cellPosition);\n  }\n  onFocusOut() {\n    this.beans.focusService.clearRestoreFocus();\n  }\n  addFeatures() {\n    this.cellPositionFeature = new CellPositionFeature(this, this.beans);\n    this.cellCustomStyleFeature = new CellCustomStyleFeature(this, this.beans);\n    this.cellMouseListenerFeature = new CellMouseListenerFeature(this, this.beans, this.column);\n    this.cellKeyboardListenerFeature = new CellKeyboardListenerFeature(\n      this,\n      this.beans,\n      this.column,\n      this.rowNode,\n      this.rowCtrl\n    );\n    if (this.column.isTooltipEnabled()) {\n      this.enableTooltipFeature();\n    }\n    const cellSelectionEnabled = this.beans.rangeService && _isCellSelectionEnabled(this.beans.gos);\n    if (cellSelectionEnabled) {\n      this.cellRangeFeature = new CellRangeFeature(this.beans, this);\n    }\n  }\n  removeFeatures() {\n    const context = this.beans.context;\n    this.cellPositionFeature = context.destroyBean(this.cellPositionFeature);\n    this.cellCustomStyleFeature = context.destroyBean(this.cellCustomStyleFeature);\n    this.cellMouseListenerFeature = context.destroyBean(this.cellMouseListenerFeature);\n    this.cellKeyboardListenerFeature = context.destroyBean(this.cellKeyboardListenerFeature);\n    this.cellRangeFeature = context.destroyBean(this.cellRangeFeature);\n    this.disableTooltipFeature();\n  }\n  enableTooltipFeature(value, shouldDisplayTooltip) {\n    const getTooltipValue = () => {\n      const colDef = this.column.getColDef();\n      const data = this.rowNode.data;\n      if (colDef.tooltipField && _exists(data)) {\n        return _getValueUsingField(data, colDef.tooltipField, this.column.isTooltipFieldContainsDots());\n      }\n      const valueGetter = colDef.tooltipValueGetter;\n      if (valueGetter) {\n        return valueGetter(\n          this.beans.gos.addGridCommonParams({\n            location: \"cell\",\n            colDef: this.column.getColDef(),\n            column: this.column,\n            rowIndex: this.cellPosition.rowIndex,\n            node: this.rowNode,\n            data: this.rowNode.data,\n            value: this.value,\n            valueFormatted: this.valueFormatted\n          })\n        );\n      }\n      return null;\n    };\n    const isTooltipWhenTruncated = this.beans.gos.get(\"tooltipShowMode\") === \"whenTruncated\";\n    if (!shouldDisplayTooltip && isTooltipWhenTruncated && !this.isCellRenderer()) {\n      shouldDisplayTooltip = () => {\n        const eGui = this.getGui();\n        const textEl = eGui.children.length === 0 ? eGui : eGui.querySelector(\".ag-cell-value\");\n        if (!textEl) {\n          return true;\n        }\n        return textEl.scrollWidth > textEl.clientWidth;\n      };\n    }\n    const tooltipCtrl = {\n      getColumn: () => this.column,\n      getColDef: () => this.column.getColDef(),\n      getRowIndex: () => this.cellPosition.rowIndex,\n      getRowNode: () => this.rowNode,\n      getGui: () => this.getGui(),\n      getLocation: () => \"cell\",\n      getTooltipValue: value != null ? () => value : getTooltipValue,\n      // this makes no sense, why is the cell formatted value passed to the tooltip???\n      getValueFormatted: () => this.valueFormatted,\n      shouldDisplayTooltip\n    };\n    this.tooltipFeature = new TooltipFeature(tooltipCtrl, this.beans);\n  }\n  disableTooltipFeature() {\n    this.tooltipFeature = this.beans.context.destroyBean(this.tooltipFeature);\n  }\n  setComp(comp, eGui, eCellWrapper, printLayout, startEditing, compBean) {\n    this.cellComp = comp;\n    this.eGui = eGui;\n    this.printLayout = printLayout;\n    compBean ?? (compBean = this);\n    this.addDomData(compBean);\n    this.addFeatures();\n    compBean.addDestroyFunc(() => this.removeFeatures());\n    this.onSuppressCellFocusChanged(this.beans.gos.get(\"suppressCellFocus\"));\n    this.onCellFocused(this.focusEventToRestore);\n    this.applyStaticCssClasses();\n    this.setWrapText();\n    this.onFirstRightPinnedChanged();\n    this.onLastLeftPinnedChanged();\n    this.onColumnHover();\n    this.setupControlComps();\n    this.setupAutoHeight(eCellWrapper, compBean);\n    this.refreshFirstAndLastStyles();\n    this.refreshAriaColIndex();\n    this.cellPositionFeature?.setComp(eGui);\n    this.cellCustomStyleFeature?.setComp(comp);\n    this.tooltipFeature?.refreshToolTip();\n    this.cellKeyboardListenerFeature?.setComp(this.eGui);\n    if (this.cellRangeFeature) {\n      this.cellRangeFeature.setComp(comp, eGui);\n    }\n    if (startEditing && this.isCellEditable()) {\n      this.startEditing();\n    } else {\n      this.showValue();\n    }\n    if (this.onCellCompAttachedFuncs.length) {\n      this.onCellCompAttachedFuncs.forEach((func) => func());\n      this.onCellCompAttachedFuncs = [];\n    }\n  }\n  setupAutoHeight(eCellWrapper, compBean) {\n    this.isAutoHeight = this.column.isAutoHeight();\n    if (!this.isAutoHeight || !eCellWrapper) {\n      return;\n    }\n    const eParentCell = eCellWrapper.parentElement;\n    const minRowHeight = _getRowHeightForNode(this.beans.gos, this.rowNode).height;\n    const measureHeight = (timesCalled) => {\n      if (this.editing) {\n        return;\n      }\n      if (!this.isAlive() || !compBean.isAlive()) {\n        return;\n      }\n      const { paddingTop, paddingBottom, borderBottomWidth, borderTopWidth } = _getElementSize(eParentCell);\n      const extraHeight = paddingTop + paddingBottom + borderBottomWidth + borderTopWidth;\n      const wrapperHeight = eCellWrapper.offsetHeight;\n      const autoHeight = wrapperHeight + extraHeight;\n      if (timesCalled < 5) {\n        const doc = _getDocument(this.beans.gos);\n        const notYetInDom = !doc || !doc.contains(eCellWrapper);\n        const possiblyNoContentYet = autoHeight == 0;\n        if (notYetInDom || possiblyNoContentYet) {\n          window.setTimeout(() => measureHeight(timesCalled + 1), 0);\n          return;\n        }\n      }\n      const newHeight = Math.max(autoHeight, minRowHeight);\n      this.rowNode.setRowAutoHeight(newHeight, this.column);\n    };\n    const listener = () => measureHeight(0);\n    listener();\n    const destroyResizeObserver = this.beans.resizeObserverService.observeResize(eCellWrapper, listener);\n    compBean.addDestroyFunc(() => {\n      destroyResizeObserver();\n      this.rowNode.setRowAutoHeight(void 0, this.column);\n    });\n  }\n  getCellAriaRole() {\n    return this.column.getColDef().cellAriaRole ?? \"gridcell\";\n  }\n  isCellRenderer() {\n    const colDef = this.column.getColDef();\n    return colDef.cellRenderer != null || colDef.cellRendererSelector != null;\n  }\n  getValueToDisplay() {\n    return this.valueFormatted ?? this.value;\n  }\n  showValue(forceNewCellRendererInstance = false) {\n    const { beans, column, rowNode, cellRangeFeature, cellComp } = this;\n    const { userComponentFactory, animationFrameService } = beans;\n    const valueToDisplay = this.getValueToDisplay();\n    let compDetails;\n    const isSsrmLoading = rowNode.stub && rowNode.groupData?.[this.column.getId()] == null;\n    if (isSsrmLoading) {\n      const params = this.createCellRendererParams();\n      compDetails = userComponentFactory.getLoadingCellRendererDetails(column.getColDef(), params);\n    } else if (this.isCellRenderer()) {\n      const params = this.createCellRendererParams();\n      compDetails = userComponentFactory.getCellRendererDetails(column.getColDef(), params);\n    }\n    cellComp.setRenderDetails(compDetails, valueToDisplay, forceNewCellRendererInstance);\n    animationFrameService.requestAnimationFrame(() => cellRangeFeature?.refreshHandle());\n  }\n  setupControlComps() {\n    const colDef = this.column.getColDef();\n    this.includeSelection = this.isIncludeControl(this.isCheckboxSelection(colDef));\n    this.includeRowDrag = this.isIncludeControl(colDef.rowDrag);\n    this.includeDndSource = this.isIncludeControl(colDef.dndSource);\n    this.cellComp.setIncludeSelection(this.includeSelection);\n    this.cellComp.setIncludeDndSource(this.includeDndSource);\n    this.cellComp.setIncludeRowDrag(this.includeRowDrag);\n  }\n  isForceWrapper() {\n    const forceWrapper = this.beans.gos.get(\"enableCellTextSelection\") || this.column.isAutoHeight();\n    return forceWrapper;\n  }\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  isIncludeControl(value) {\n    const rowNodePinned = this.rowNode.rowPinned != null;\n    const isFunc = typeof value === \"function\";\n    const res = rowNodePinned ? false : isFunc || value === true;\n    return res;\n  }\n  isCheckboxSelection(colDef) {\n    const { rowSelection } = this.beans.gridOptions;\n    return colDef.checkboxSelection || isColumnControlsCol(this.column) && rowSelection && typeof rowSelection !== \"string\" && _getCheckboxes(rowSelection);\n  }\n  refreshShouldDestroy() {\n    const colDef = this.column.getColDef();\n    const selectionChanged = this.includeSelection != this.isIncludeControl(this.isCheckboxSelection(colDef));\n    const rowDragChanged = this.includeRowDrag != this.isIncludeControl(colDef.rowDrag);\n    const dndSourceChanged = this.includeDndSource != this.isIncludeControl(colDef.dndSource);\n    const autoHeightChanged = this.isAutoHeight != this.column.isAutoHeight();\n    return selectionChanged || rowDragChanged || dndSourceChanged || autoHeightChanged;\n  }\n  // either called internally if single cell editing, or called by rowRenderer if row editing\n  startEditing(key = null, cellStartedEdit = false, event = null) {\n    const { editService } = this.beans;\n    if (!this.isCellEditable() || this.editing || !editService) {\n      return true;\n    }\n    if (!this.cellComp) {\n      this.onCellCompAttachedFuncs.push(() => {\n        this.startEditing(key, cellStartedEdit, event);\n      });\n      return true;\n    }\n    return editService.startEditing(this, key, cellStartedEdit, event);\n  }\n  setEditing(editing, compDetails) {\n    this.editCompDetails = compDetails;\n    if (this.editing === editing) {\n      return;\n    }\n    this.editing = editing;\n  }\n  // pass in 'true' to cancel the editing.\n  stopRowOrCellEdit(cancel = false) {\n    if (this.beans.gos.get(\"editType\") === \"fullRow\") {\n      this.rowCtrl.stopEditing(cancel);\n    } else {\n      this.stopEditing(cancel);\n    }\n  }\n  onPopupEditorClosed() {\n    if (!this.editing) {\n      return;\n    }\n    this.stopEditingAndFocus();\n  }\n  /**\n   * Ends the Cell Editing\n   * @param cancel `True` if the edit process is being canceled.\n   * @returns `True` if the value of the `GridCell` has been updated, otherwise `False`.\n   */\n  stopEditing(cancel = false) {\n    this.onCellEditorAttachedFuncs = [];\n    const { editService } = this.beans;\n    if (!this.editing || !editService) {\n      return false;\n    }\n    return editService.stopEditing(this, cancel);\n  }\n  createCellRendererParams() {\n    const res = this.beans.gos.addGridCommonParams({\n      value: this.value,\n      valueFormatted: this.valueFormatted,\n      getValue: () => this.beans.valueService.getValueForDisplay(this.column, this.rowNode),\n      setValue: (value) => this.beans.valueService.setValue(this.rowNode, this.column, value),\n      formatValue: this.formatValue.bind(this),\n      data: this.rowNode.data,\n      node: this.rowNode,\n      pinned: this.column.getPinned(),\n      colDef: this.column.getColDef(),\n      column: this.column,\n      refreshCell: this.refreshCell.bind(this),\n      eGridCell: this.getGui(),\n      eParentOfValue: this.cellComp.getParentOfValue(),\n      registerRowDragger: (rowDraggerElement, dragStartPixels, value, suppressVisibilityChange) => this.registerRowDragger(rowDraggerElement, dragStartPixels, suppressVisibilityChange),\n      setTooltip: (value, shouldDisplayTooltip) => {\n        if (this.tooltipFeature) {\n          this.disableTooltipFeature();\n        }\n        this.enableTooltipFeature(value, shouldDisplayTooltip);\n        this.tooltipFeature?.refreshToolTip();\n      }\n    });\n    return res;\n  }\n  setFocusOutOnEditor() {\n    if (!this.editing) {\n      return;\n    }\n    this.beans.editService?.setFocusOutOnEditor(this);\n  }\n  setFocusInOnEditor() {\n    if (!this.editing) {\n      return;\n    }\n    this.beans.editService?.setFocusInOnEditor(this);\n  }\n  onCellChanged(event) {\n    const eventImpactsThisCell = event.column === this.column;\n    if (eventImpactsThisCell) {\n      this.refreshCell({});\n    }\n  }\n  refreshOrDestroyCell(params) {\n    if (this.refreshShouldDestroy()) {\n      this.rowCtrl?.recreateCell(this);\n    } else {\n      this.refreshCell(params);\n    }\n  }\n  // + stop editing {forceRefresh: true, suppressFlash: true}\n  // + event cellChanged {}\n  // + cellRenderer.params.refresh() {} -> method passes 'as is' to the cellRenderer, so params could be anything\n  // + rowCtrl: event dataChanged {suppressFlash: !update, newData: !update}\n  // + rowCtrl: api refreshCells() {animate: true/false}\n  // + rowRenderer: api softRefreshView() {}\n  refreshCell(params) {\n    if (this.suppressRefreshCell || this.editing) {\n      return;\n    }\n    const colDef = this.column.getColDef();\n    const newData = params != null && !!params.newData;\n    const suppressFlash = params != null && !!params.suppressFlash || !!colDef.suppressCellFlash;\n    const noValueProvided = colDef.field == null && colDef.valueGetter == null && colDef.showRowGroup == null;\n    const forceRefresh = params && params.forceRefresh || noValueProvided || newData;\n    const isCellCompReady = !!this.cellComp;\n    const valuesDifferent = this.updateAndFormatValue(isCellCompReady);\n    const dataNeedsUpdating = forceRefresh || valuesDifferent;\n    if (!isCellCompReady) {\n      return;\n    }\n    if (dataNeedsUpdating) {\n      this.showValue(newData);\n      const processingFilterChange = this.beans.filterManager?.isSuppressFlashingCellsBecauseFiltering();\n      const flashCell = !suppressFlash && !processingFilterChange && (this.beans.gos.get(\"enableCellChangeFlash\") || colDef.enableCellChangeFlash);\n      if (flashCell) {\n        this.flashCell();\n      }\n      this.cellCustomStyleFeature?.applyUserStyles();\n      this.cellCustomStyleFeature?.applyClassesFromColDef();\n    }\n    this.tooltipFeature?.refreshToolTip();\n    this.cellCustomStyleFeature?.applyCellClassRules();\n  }\n  // cell editors call this, when they want to stop for reasons other\n  // than what we pick up on. eg selecting from a dropdown ends editing.\n  stopEditingAndFocus(suppressNavigateAfterEdit = false, shiftKey = false) {\n    this.beans.editService?.stopEditingAndFocus(this, suppressNavigateAfterEdit, shiftKey);\n  }\n  // user can also call this via API\n  flashCell(delays) {\n    const flashDuration = delays?.flashDuration ?? delays?.flashDelay;\n    const fadeDuration = delays?.fadeDuration ?? delays?.fadeDelay;\n    this.animateCell(\"data-changed\", flashDuration, fadeDuration);\n  }\n  animateCell(cssName, flashDuration, fadeDuration) {\n    if (!this.cellComp) {\n      return;\n    }\n    const { gos } = this.beans;\n    if (!flashDuration) {\n      flashDuration = gos.get(\"cellFlashDuration\");\n    }\n    if (flashDuration === 0) {\n      return;\n    }\n    if (!_exists(fadeDuration)) {\n      fadeDuration = gos.get(\"cellFadeDuration\");\n    }\n    const fullName = `ag-cell-${cssName}`;\n    const animationFullName = `ag-cell-${cssName}-animation`;\n    this.cellComp.addOrRemoveCssClass(fullName, true);\n    this.cellComp.addOrRemoveCssClass(animationFullName, false);\n    this.beans.frameworkOverrides.wrapIncoming(() => {\n      window.setTimeout(() => {\n        if (!this.isAlive()) {\n          return;\n        }\n        this.cellComp.addOrRemoveCssClass(fullName, false);\n        this.cellComp.addOrRemoveCssClass(animationFullName, true);\n        this.eGui.style.transition = `background-color ${fadeDuration}ms`;\n        window.setTimeout(() => {\n          if (!this.isAlive()) {\n            return;\n          }\n          this.cellComp.addOrRemoveCssClass(animationFullName, false);\n          this.eGui.style.transition = \"\";\n        }, fadeDuration);\n      }, flashDuration);\n    });\n  }\n  onFlashCells(event) {\n    if (!this.cellComp) {\n      return;\n    }\n    const cellId = this.beans.cellPositionUtils.createId(this.getCellPosition());\n    const shouldFlash = event.cells[cellId];\n    if (shouldFlash) {\n      this.animateCell(\"highlight\");\n    }\n  }\n  isCellEditable() {\n    return this.column.isCellEditable(this.rowNode);\n  }\n  isSuppressFillHandle() {\n    return this.column.isSuppressFillHandle();\n  }\n  formatValue(value) {\n    return this.callValueFormatter(value) ?? value;\n  }\n  callValueFormatter(value) {\n    return this.beans.valueService.formatValue(this.column, this.rowNode, value);\n  }\n  updateAndFormatValue(compareValues) {\n    const oldValue = this.value;\n    const oldValueFormatted = this.valueFormatted;\n    this.value = this.beans.valueService.getValueForDisplay(this.column, this.rowNode);\n    this.valueFormatted = this.callValueFormatter(this.value);\n    if (compareValues) {\n      return !this.valuesAreEqual(oldValue, this.value) || this.valueFormatted != oldValueFormatted;\n    }\n    return true;\n  }\n  valuesAreEqual(val1, val2) {\n    const colDef = this.column.getColDef();\n    return colDef.equals ? colDef.equals(val1, val2) : val1 === val2;\n  }\n  getComp() {\n    return this.cellComp;\n  }\n  getValue() {\n    return this.value;\n  }\n  addDomData(compBean) {\n    const element = this.getGui();\n    _setDomData(this.beans.gos, element, _CellCtrl.DOM_DATA_KEY_CELL_CTRL, this);\n    compBean.addDestroyFunc(() => _setDomData(this.beans.gos, element, _CellCtrl.DOM_DATA_KEY_CELL_CTRL, null));\n  }\n  createEvent(domEvent, eventType) {\n    const event = this.beans.gos.addGridCommonParams({\n      type: eventType,\n      node: this.rowNode,\n      data: this.rowNode.data,\n      value: this.value,\n      column: this.column,\n      colDef: this.column.getColDef(),\n      rowPinned: this.rowNode.rowPinned,\n      event: domEvent,\n      rowIndex: this.rowNode.rowIndex\n    });\n    return event;\n  }\n  processCharacter(event) {\n    this.cellKeyboardListenerFeature?.processCharacter(event);\n  }\n  onKeyDown(event) {\n    this.cellKeyboardListenerFeature?.onKeyDown(event);\n  }\n  onMouseEvent(eventName, mouseEvent) {\n    this.cellMouseListenerFeature?.onMouseEvent(eventName, mouseEvent);\n  }\n  getGui() {\n    return this.eGui;\n  }\n  getColSpanningList() {\n    return this.cellPositionFeature.getColSpanningList();\n  }\n  onLeftChanged() {\n    if (!this.cellComp) {\n      return;\n    }\n    this.cellPositionFeature?.onLeftChanged();\n  }\n  onDisplayedColumnsChanged() {\n    if (!this.eGui) {\n      return;\n    }\n    this.refreshAriaColIndex();\n    this.refreshFirstAndLastStyles();\n  }\n  refreshFirstAndLastStyles() {\n    const { cellComp, column, beans } = this;\n    refreshFirstAndLastStyles(cellComp, column, beans.visibleColsService);\n  }\n  refreshAriaColIndex() {\n    const colIdx = this.beans.visibleColsService.getAriaColIndex(this.column);\n    _setAriaColIndex(this.getGui(), colIdx);\n  }\n  isSuppressNavigable() {\n    return this.column.isSuppressNavigable(this.rowNode);\n  }\n  onWidthChanged() {\n    return this.cellPositionFeature?.onWidthChanged();\n  }\n  getColumn() {\n    return this.column;\n  }\n  getRowNode() {\n    return this.rowNode;\n  }\n  isPrintLayout() {\n    return this.printLayout;\n  }\n  getCellPosition() {\n    return this.cellPosition;\n  }\n  isEditing() {\n    return this.editing;\n  }\n  // called by rowRenderer when user navigates via tab key\n  startRowOrCellEdit(key, event = null) {\n    if (!this.cellComp) {\n      this.onCellCompAttachedFuncs.push(() => {\n        this.startRowOrCellEdit(key, event);\n      });\n      return true;\n    }\n    if (this.beans.gos.get(\"editType\") === \"fullRow\") {\n      return this.rowCtrl.startRowEditing(key, this);\n    } else {\n      return this.startEditing(key, true, event);\n    }\n  }\n  getRowCtrl() {\n    return this.rowCtrl;\n  }\n  getRowPosition() {\n    return {\n      rowIndex: this.cellPosition.rowIndex,\n      rowPinned: this.cellPosition.rowPinned\n    };\n  }\n  updateRangeBordersIfRangeCount() {\n    if (!this.cellComp) {\n      return;\n    }\n    if (this.cellRangeFeature) {\n      this.cellRangeFeature.updateRangeBordersIfRangeCount();\n    }\n  }\n  onCellSelectionChanged() {\n    if (!this.cellComp) {\n      return;\n    }\n    if (this.cellRangeFeature) {\n      this.cellRangeFeature.onCellSelectionChanged();\n    }\n  }\n  isRangeSelectionEnabled() {\n    return this.cellRangeFeature != null;\n  }\n  focusCell(forceBrowserFocus = false) {\n    this.beans.focusService.setFocusedCell({\n      rowIndex: this.getCellPosition().rowIndex,\n      column: this.column,\n      rowPinned: this.rowNode.rowPinned,\n      forceBrowserFocus\n    });\n  }\n  onRowIndexChanged() {\n    this.createCellPosition();\n    this.onCellFocused();\n    if (this.cellRangeFeature) {\n      this.cellRangeFeature.onCellSelectionChanged();\n    }\n  }\n  onSuppressCellFocusChanged(suppressCellFocus) {\n    if (!this.eGui) {\n      return;\n    }\n    _addOrRemoveAttribute(this.eGui, \"tabindex\", suppressCellFocus ? void 0 : -1);\n  }\n  onFirstRightPinnedChanged() {\n    if (!this.cellComp) {\n      return;\n    }\n    const firstRightPinned = this.column.isFirstRightPinned();\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_FIRST_RIGHT_PINNED, firstRightPinned);\n  }\n  onLastLeftPinnedChanged() {\n    if (!this.cellComp) {\n      return;\n    }\n    const lastLeftPinned = this.column.isLastLeftPinned();\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_LAST_LEFT_PINNED, lastLeftPinned);\n  }\n  onCellFocused(event) {\n    if (this.beans.focusService.isCellFocusSuppressed()) {\n      return;\n    }\n    const cellFocused = this.beans.focusService.isCellFocused(this.cellPosition);\n    if (!this.cellComp) {\n      if (cellFocused && event?.forceBrowserFocus) {\n        this.focusEventToRestore = event;\n      }\n      return;\n    }\n    this.focusEventToRestore = void 0;\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_FOCUS, cellFocused);\n    if (cellFocused && event && event.forceBrowserFocus) {\n      let focusEl = this.cellComp.getFocusableElement();\n      if (this.editing) {\n        const focusableEls = this.beans.focusService.findFocusableElements(focusEl, null, true);\n        if (focusableEls.length) {\n          focusEl = focusableEls[0];\n        }\n      }\n      focusEl.focus({ preventScroll: !!event.preventScrollOnBrowserFocus });\n    }\n    const fullRowEdit = this.beans.gos.get(\"editType\") === \"fullRow\";\n    if (!cellFocused && !fullRowEdit && this.editing) {\n      this.stopRowOrCellEdit();\n    }\n    if (cellFocused) {\n      this.rowCtrl.announceDescription();\n    }\n  }\n  createCellPosition() {\n    this.cellPosition = {\n      rowIndex: this.rowNode.rowIndex,\n      rowPinned: _makeNull(this.rowNode.rowPinned),\n      column: this.column\n    };\n  }\n  // CSS Classes that only get applied once, they never change\n  applyStaticCssClasses() {\n    this.cellComp.addOrRemoveCssClass(CSS_CELL, true);\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_NOT_INLINE_EDITING, true);\n    const autoHeight = this.column.isAutoHeight() == true;\n    this.cellComp.addOrRemoveCssClass(CSS_AUTO_HEIGHT, autoHeight);\n    this.cellComp.addOrRemoveCssClass(CSS_NORMAL_HEIGHT, !autoHeight);\n  }\n  onColumnHover() {\n    if (!this.cellComp) {\n      return;\n    }\n    if (!this.beans.gos.get(\"columnHoverHighlight\")) {\n      return;\n    }\n    const isHovered = this.beans.columnHoverService.isHovered(this.column);\n    this.cellComp.addOrRemoveCssClass(CSS_COLUMN_HOVER, isHovered);\n  }\n  onColDefChanged() {\n    if (!this.cellComp) {\n      return;\n    }\n    const isTooltipEnabled = this.column.isTooltipEnabled();\n    if (isTooltipEnabled) {\n      this.disableTooltipFeature();\n      this.enableTooltipFeature();\n    } else {\n      this.disableTooltipFeature();\n    }\n    this.setWrapText();\n    if (!this.editing) {\n      this.refreshOrDestroyCell({ forceRefresh: true, suppressFlash: true });\n    } else {\n      this.beans.editService?.handleColDefChanged(this);\n    }\n  }\n  setWrapText() {\n    const value = this.column.getColDef().wrapText == true;\n    this.cellComp.addOrRemoveCssClass(CSS_CELL_WRAP_TEXT, value);\n  }\n  dispatchCellContextMenuEvent(event) {\n    const colDef = this.column.getColDef();\n    const cellContextMenuEvent = this.createEvent(event, \"cellContextMenu\");\n    this.beans.eventService.dispatchEvent(cellContextMenuEvent);\n    if (colDef.onCellContextMenu) {\n      window.setTimeout(() => {\n        this.beans.frameworkOverrides.wrapOutgoing(() => {\n          colDef.onCellContextMenu(cellContextMenuEvent);\n        });\n      }, 0);\n    }\n  }\n  getCellRenderer() {\n    return this.cellComp ? this.cellComp.getCellRenderer() : null;\n  }\n  getCellEditor() {\n    return this.cellComp ? this.cellComp.getCellEditor() : null;\n  }\n  destroy() {\n    this.onCellCompAttachedFuncs = [];\n    this.onCellEditorAttachedFuncs = [];\n    super.destroy();\n  }\n  createSelectionCheckbox() {\n    const cbSelectionComponent = new CheckboxSelectionComponent();\n    this.beans.context.createBean(cbSelectionComponent);\n    cbSelectionComponent.init({ rowNode: this.rowNode, column: this.column });\n    return cbSelectionComponent;\n  }\n  createDndSource() {\n    const dndSourceComp = new DndSourceComp(this.rowNode, this.column, this.eGui);\n    this.beans.context.createBean(dndSourceComp);\n    return dndSourceComp;\n  }\n  registerRowDragger(customElement, dragStartPixels, suppressVisibilityChange) {\n    if (this.customRowDragComp) {\n      this.customRowDragComp.setDragElement(customElement, dragStartPixels);\n      return;\n    }\n    const newComp = this.createRowDragComp(customElement, dragStartPixels, suppressVisibilityChange);\n    if (newComp) {\n      this.customRowDragComp = newComp;\n      this.addDestroyFunc(() => {\n        this.beans.context.destroyBean(newComp);\n        this.customRowDragComp = null;\n      });\n    }\n  }\n  createRowDragComp(customElement, dragStartPixels, suppressVisibilityChange) {\n    const pagination = this.beans.gos.get(\"pagination\");\n    const rowDragManaged = this.beans.gos.get(\"rowDragManaged\");\n    const clientSideRowModelActive = _isClientSideRowModel(this.beans.gos);\n    if (rowDragManaged) {\n      if (!clientSideRowModelActive) {\n        _warnOnce(\"managed row dragging is only allowed in the Client Side Row Model\");\n        return;\n      }\n      if (pagination) {\n        _warnOnce(\"managed row dragging is not possible when doing pagination\");\n        return;\n      }\n    }\n    const rowDragComp = new RowDragComp(\n      () => this.value,\n      this.rowNode,\n      this.column,\n      customElement,\n      dragStartPixels,\n      suppressVisibilityChange\n    );\n    this.beans.context.createBean(rowDragComp);\n    return rowDragComp;\n  }\n  setSuppressRefreshCell(suppressRefreshCell) {\n    this.suppressRefreshCell = suppressRefreshCell;\n  }\n  getEditCompDetails() {\n    return this.editCompDetails;\n  }\n  onCellEditorAttached(callback) {\n    this.onCellEditorAttachedFuncs.push(callback);\n  }\n  cellEditorAttached() {\n    this.onCellEditorAttachedFuncs.forEach((func) => func());\n    this.onCellEditorAttachedFuncs = [];\n  }\n};\n_CellCtrl.DOM_DATA_KEY_CELL_CTRL = \"cellCtrl\";\nvar CellCtrl = _CellCtrl;\n\n// community-modules/core/src/rendering/row/rowCtrl.ts\nvar instanceIdSequence5 = 0;\nvar _RowCtrl = class _RowCtrl extends BeanStub {\n  constructor(rowNode, beans, animateIn, useAnimationFrameForCreate, printLayout) {\n    super();\n    this.allRowGuis = [];\n    this.active = true;\n    this.centerCellCtrls = { list: [], map: {} };\n    this.leftCellCtrls = { list: [], map: {} };\n    this.rightCellCtrls = { list: [], map: {} };\n    this.slideInAnimation = {\n      left: false,\n      center: false,\n      right: false,\n      fullWidth: false\n    };\n    this.fadeInAnimation = {\n      left: false,\n      center: false,\n      right: false,\n      fullWidth: false\n    };\n    this.rowDragComps = [];\n    this.lastMouseDownOnDragger = false;\n    this.emptyStyle = {};\n    this.updateColumnListsPending = false;\n    this.rowId = null;\n    this.businessKeySanitised = null;\n    this.beans = beans;\n    this.gos = beans.gos;\n    this.rowNode = rowNode;\n    this.paginationPage = beans.paginationService?.getCurrentPage() ?? 0;\n    this.useAnimationFrameForCreate = useAnimationFrameForCreate;\n    this.printLayout = printLayout;\n    this.suppressRowTransform = this.gos.get(\"suppressRowTransform\");\n    this.instanceId = rowNode.id + \"-\" + instanceIdSequence5++;\n    this.rowId = _escapeString(rowNode.id);\n    this.initRowBusinessKey();\n    this.rowFocused = beans.focusService.isRowFocused(this.rowNode.rowIndex, this.rowNode.rowPinned);\n    this.rowLevel = beans.rowCssClassCalculator.calculateRowLevel(this.rowNode);\n    this.setRowType();\n    this.setAnimateFlags(animateIn);\n    this.rowStyles = this.processStylesFromGridOptions();\n    this.addListeners();\n  }\n  initRowBusinessKey() {\n    this.businessKeyForNodeFunc = this.gos.get(\"getBusinessKeyForNode\");\n    this.updateRowBusinessKey();\n  }\n  updateRowBusinessKey() {\n    if (typeof this.businessKeyForNodeFunc !== \"function\") {\n      return;\n    }\n    const businessKey = this.businessKeyForNodeFunc(this.rowNode);\n    this.businessKeySanitised = _escapeString(businessKey);\n  }\n  getRowId() {\n    return this.rowId;\n  }\n  getRowStyles() {\n    return this.rowStyles;\n  }\n  isSticky() {\n    return this.rowNode.sticky;\n  }\n  updateGui(containerType, gui) {\n    if (containerType === \"left\") {\n      this.leftGui = gui;\n    } else if (containerType === \"right\") {\n      this.rightGui = gui;\n    } else if (containerType === \"fullWidth\") {\n      this.fullWidthGui = gui;\n    } else {\n      this.centerGui = gui;\n    }\n  }\n  setComp(rowComp, element, containerType, compBean) {\n    compBean = setupCompBean(this, this.beans.context, compBean);\n    const gui = { rowComp, element, containerType, compBean };\n    this.allRowGuis.push(gui);\n    this.updateGui(containerType, gui);\n    this.initialiseRowComp(gui);\n    if (this.rowType !== \"FullWidthLoading\" && !this.rowNode.rowPinned) {\n      this.beans.rowRenderer.dispatchFirstDataRenderedEvent();\n    }\n  }\n  unsetComp(containerType) {\n    this.allRowGuis = this.allRowGuis.filter((rowGui) => rowGui.containerType !== containerType);\n    this.updateGui(containerType, void 0);\n  }\n  isCacheable() {\n    return this.rowType === \"FullWidthDetail\" && this.gos.get(\"keepDetailRows\");\n  }\n  setCached(cached) {\n    const displayValue = cached ? \"none\" : \"\";\n    this.allRowGuis.forEach((rg) => rg.element.style.display = displayValue);\n  }\n  initialiseRowComp(gui) {\n    const gos = this.gos;\n    this.onSuppressCellFocusChanged(this.beans.gos.get(\"suppressCellFocus\"));\n    this.listenOnDomOrder(gui);\n    if (this.beans.columnModel.wasAutoRowHeightEverActive()) {\n      this.rowNode.checkAutoHeights();\n    }\n    this.onRowHeightChanged(gui);\n    this.updateRowIndexes(gui);\n    this.setFocusedClasses(gui);\n    this.setStylesFromGridOptions(false, gui);\n    if (_isRowSelection(gos) && this.rowNode.selectable) {\n      this.onRowSelected(gui);\n    }\n    this.updateColumnLists(!this.useAnimationFrameForCreate);\n    const comp = gui.rowComp;\n    const initialRowClasses = this.getInitialRowClasses(gui.containerType);\n    initialRowClasses.forEach((name) => comp.addOrRemoveCssClass(name, true));\n    this.executeSlideAndFadeAnimations(gui);\n    if (this.rowNode.group) {\n      _setAriaExpanded(gui.element, this.rowNode.expanded == true);\n    }\n    this.setRowCompRowId(comp);\n    this.setRowCompRowBusinessKey(comp);\n    _setDomData(gos, gui.element, _RowCtrl.DOM_DATA_KEY_ROW_CTRL, this);\n    gui.compBean.addDestroyFunc(() => _setDomData(gos, gui.element, _RowCtrl.DOM_DATA_KEY_ROW_CTRL, null));\n    if (this.useAnimationFrameForCreate) {\n      this.beans.animationFrameService.createTask(\n        this.addHoverFunctionality.bind(this, gui),\n        this.rowNode.rowIndex,\n        \"createTasksP2\"\n      );\n    } else {\n      this.addHoverFunctionality(gui);\n    }\n    if (this.isFullWidth()) {\n      this.setupFullWidth(gui);\n    }\n    if (gos.get(\"rowDragEntireRow\")) {\n      this.addRowDraggerToRow(gui);\n    }\n    if (this.useAnimationFrameForCreate) {\n      this.beans.animationFrameService.addDestroyTask(() => {\n        if (!this.isAlive()) {\n          return;\n        }\n        gui.rowComp.addOrRemoveCssClass(\"ag-after-created\", true);\n      });\n    }\n    this.executeProcessRowPostCreateFunc();\n  }\n  setRowCompRowBusinessKey(comp) {\n    if (this.businessKeySanitised == null) {\n      return;\n    }\n    comp.setRowBusinessKey(this.businessKeySanitised);\n  }\n  getBusinessKey() {\n    return this.businessKeySanitised;\n  }\n  setRowCompRowId(comp) {\n    this.rowId = _escapeString(this.rowNode.id);\n    if (this.rowId == null) {\n      return;\n    }\n    comp.setRowId(this.rowId);\n  }\n  executeSlideAndFadeAnimations(gui) {\n    const { containerType } = gui;\n    const shouldSlide = this.slideInAnimation[containerType];\n    if (shouldSlide) {\n      _executeNextVMTurn(() => {\n        this.onTopChanged();\n      });\n      this.slideInAnimation[containerType] = false;\n    }\n    const shouldFade = this.fadeInAnimation[containerType];\n    if (shouldFade) {\n      _executeNextVMTurn(() => {\n        gui.rowComp.addOrRemoveCssClass(\"ag-opacity-zero\", false);\n      });\n      this.fadeInAnimation[containerType] = false;\n    }\n  }\n  addRowDraggerToRow(gui) {\n    if (_isCellSelectionEnabled(this.gos)) {\n      _warnOnce(\"Setting `rowDragEntireRow: true` in the gridOptions doesn't work with `cellSelection: true`\");\n      return;\n    }\n    const translate = this.beans.localeService.getLocaleTextFunc();\n    const rowDragComp = new RowDragComp(\n      () => `1 ${translate(\"rowDragRow\", \"row\")}`,\n      this.rowNode,\n      void 0,\n      gui.element,\n      void 0,\n      true\n    );\n    const rowDragBean = this.createBean(rowDragComp, this.beans.context);\n    this.rowDragComps.push(rowDragBean);\n    gui.compBean.addDestroyFunc(() => {\n      this.rowDragComps = this.rowDragComps.filter((r) => r !== rowDragBean);\n      this.destroyBean(rowDragBean, this.beans.context);\n    });\n  }\n  setupFullWidth(gui) {\n    const pinned = this.getPinnedForContainer(gui.containerType);\n    if (this.rowType == \"FullWidthDetail\") {\n      if (!this.gos.assertModuleRegistered(\n        \"@ag-grid-enterprise/master-detail\" /* MasterDetailModule */,\n        \"cell renderer 'agDetailCellRenderer' (for master detail)\"\n      )) {\n        return;\n      }\n    }\n    const compDetails = this.createFullWidthCompDetails(gui.element, pinned);\n    gui.rowComp.showFullWidth(compDetails);\n  }\n  isPrintLayout() {\n    return this.printLayout;\n  }\n  getFullWidthCellRenderers() {\n    if (this.gos.get(\"embedFullWidthRows\")) {\n      return this.allRowGuis.map((gui) => gui?.rowComp?.getFullWidthCellRenderer());\n    }\n    return [this.fullWidthGui?.rowComp?.getFullWidthCellRenderer()];\n  }\n  // use by autoWidthCalculator, as it clones the elements\n  getCellElement(column) {\n    const cellCtrl = this.getCellCtrl(column);\n    return cellCtrl ? cellCtrl.getGui() : null;\n  }\n  executeProcessRowPostCreateFunc() {\n    const func = this.gos.getCallback(\"processRowPostCreate\");\n    if (!func || !this.areAllContainersReady()) {\n      return;\n    }\n    const params = {\n      // areAllContainersReady asserts that centerGui is not null\n      eRow: this.centerGui.element,\n      ePinnedLeftRow: this.leftGui ? this.leftGui.element : void 0,\n      ePinnedRightRow: this.rightGui ? this.rightGui.element : void 0,\n      node: this.rowNode,\n      rowIndex: this.rowNode.rowIndex,\n      addRenderedRowListener: this.addEventListener.bind(this)\n    };\n    func(params);\n  }\n  areAllContainersReady() {\n    const isLeftReady = !!this.leftGui || !this.beans.visibleColsService.isPinningLeft();\n    const isCenterReady = !!this.centerGui;\n    const isRightReady = !!this.rightGui || !this.beans.visibleColsService.isPinningRight();\n    return isLeftReady && isCenterReady && isRightReady;\n  }\n  isNodeFullWidthCell() {\n    if (this.rowNode.detail) {\n      return true;\n    }\n    const isFullWidthCellFunc = this.beans.gos.getCallback(\"isFullWidthRow\");\n    return isFullWidthCellFunc ? isFullWidthCellFunc({ rowNode: this.rowNode }) : false;\n  }\n  setRowType() {\n    const isStub = this.rowNode.stub && !this.gos.get(\"suppressServerSideFullWidthLoadingRow\") && !this.gos.get(\"groupHideOpenParents\");\n    const isFullWidthCell = this.isNodeFullWidthCell();\n    const isDetailCell = this.gos.get(\"masterDetail\") && this.rowNode.detail;\n    const pivotMode = this.beans.columnModel.isPivotMode();\n    const isGroupRow = !!this.rowNode.group && !this.rowNode.footer;\n    const isFullWidthGroup = isGroupRow && _isGroupUseEntireRow(this.gos, pivotMode);\n    if (isStub) {\n      this.rowType = \"FullWidthLoading\";\n    } else if (isDetailCell) {\n      this.rowType = \"FullWidthDetail\";\n    } else if (isFullWidthCell) {\n      this.rowType = \"FullWidth\";\n    } else if (isFullWidthGroup) {\n      this.rowType = \"FullWidthGroup\";\n    } else {\n      this.rowType = \"Normal\";\n    }\n  }\n  updateColumnLists(suppressAnimationFrame = false, useFlushSync = false) {\n    if (this.isFullWidth()) {\n      return;\n    }\n    const noAnimation = suppressAnimationFrame || this.gos.get(\"suppressAnimationFrame\") || this.printLayout;\n    if (noAnimation) {\n      this.updateColumnListsImpl(useFlushSync);\n      return;\n    }\n    if (this.updateColumnListsPending) {\n      return;\n    }\n    this.beans.animationFrameService.createTask(\n      () => {\n        if (!this.active) {\n          return;\n        }\n        this.updateColumnListsImpl(true);\n      },\n      this.rowNode.rowIndex,\n      \"createTasksP1\"\n    );\n    this.updateColumnListsPending = true;\n  }\n  createCellCtrls(prev, cols, pinned = null) {\n    const res = {\n      list: [],\n      map: {}\n    };\n    const addCell = (colInstanceId, cellCtrl, index) => {\n      if (index != null) {\n        res.list.splice(index, 0, cellCtrl);\n      } else {\n        res.list.push(cellCtrl);\n      }\n      res.map[colInstanceId] = cellCtrl;\n    };\n    const colsFromPrev = [];\n    for (const col of cols) {\n      const colInstanceId = col.getInstanceId();\n      let cellCtrl = prev.map[colInstanceId];\n      if (!cellCtrl) {\n        cellCtrl = new CellCtrl(col, this.rowNode, this.beans, this);\n      }\n      addCell(colInstanceId, cellCtrl);\n    }\n    for (const prevCellCtrl of prev.list) {\n      const colInstanceId = prevCellCtrl.getColumn().getInstanceId();\n      const cellInResult = res.map[colInstanceId] != null;\n      if (cellInResult) {\n        continue;\n      }\n      const keepCell = !this.isCellEligibleToBeRemoved(prevCellCtrl, pinned);\n      if (keepCell) {\n        colsFromPrev.push([colInstanceId, prevCellCtrl]);\n      } else {\n        prevCellCtrl.destroy();\n      }\n    }\n    if (colsFromPrev.length) {\n      for (const [colInstanceId, cellCtrl] of colsFromPrev) {\n        const index = res.list.findIndex(\n          (ctrl) => ctrl.getColumn().getLeft() > cellCtrl.getColumn().getLeft()\n        );\n        const normalisedIndex = index === -1 ? void 0 : Math.max(index - 1, 0);\n        addCell(colInstanceId, cellCtrl, normalisedIndex);\n      }\n    }\n    return res;\n  }\n  updateColumnListsImpl(useFlushSync) {\n    this.updateColumnListsPending = false;\n    this.createAllCellCtrls();\n    this.setCellCtrls(useFlushSync);\n  }\n  setCellCtrls(useFlushSync) {\n    this.allRowGuis.forEach((item) => {\n      const cellControls = this.getCellCtrlsForContainer(item.containerType);\n      item.rowComp.setCellCtrls(cellControls, useFlushSync);\n    });\n  }\n  getCellCtrlsForContainer(containerType) {\n    switch (containerType) {\n      case \"left\":\n        return this.leftCellCtrls.list;\n      case \"right\":\n        return this.rightCellCtrls.list;\n      case \"fullWidth\":\n        return [];\n      case \"center\":\n        return this.centerCellCtrls.list;\n    }\n  }\n  createAllCellCtrls() {\n    const columnViewportService = this.beans.columnViewportService;\n    const presentedColsService = this.beans.visibleColsService;\n    if (this.printLayout) {\n      this.centerCellCtrls = this.createCellCtrls(this.centerCellCtrls, presentedColsService.getAllCols());\n      this.leftCellCtrls = { list: [], map: {} };\n      this.rightCellCtrls = { list: [], map: {} };\n    } else {\n      const centerCols = columnViewportService.getColsWithinViewport(this.rowNode);\n      this.centerCellCtrls = this.createCellCtrls(this.centerCellCtrls, centerCols);\n      const leftCols = presentedColsService.getLeftColsForRow(this.rowNode);\n      this.leftCellCtrls = this.createCellCtrls(this.leftCellCtrls, leftCols, \"left\");\n      const rightCols = presentedColsService.getRightColsForRow(this.rowNode);\n      this.rightCellCtrls = this.createCellCtrls(this.rightCellCtrls, rightCols, \"right\");\n    }\n  }\n  isCellEligibleToBeRemoved(cellCtrl, nextContainerPinned) {\n    const REMOVE_CELL = true;\n    const KEEP_CELL = false;\n    const column = cellCtrl.getColumn();\n    if (column.getPinned() != nextContainerPinned) {\n      return REMOVE_CELL;\n    }\n    const editing = cellCtrl.isEditing();\n    const focused = this.beans.focusService.isCellFocused(cellCtrl.getCellPosition());\n    const mightWantToKeepCell = editing || focused;\n    if (mightWantToKeepCell) {\n      const column2 = cellCtrl.getColumn();\n      const displayedColumns = this.beans.visibleColsService.getAllCols();\n      const cellStillDisplayed = displayedColumns.indexOf(column2) >= 0;\n      return cellStillDisplayed ? KEEP_CELL : REMOVE_CELL;\n    }\n    return REMOVE_CELL;\n  }\n  getDomOrder() {\n    const isEnsureDomOrder = this.gos.get(\"ensureDomOrder\");\n    return isEnsureDomOrder || _isDomLayout(this.gos, \"print\");\n  }\n  listenOnDomOrder(gui) {\n    const listener = () => {\n      gui.rowComp.setDomOrder(this.getDomOrder());\n    };\n    gui.compBean.addManagedPropertyListeners([\"domLayout\", \"ensureDomOrder\"], listener);\n  }\n  setAnimateFlags(animateIn) {\n    if (this.isSticky() || !animateIn) {\n      return;\n    }\n    const oldRowTopExists = _exists(this.rowNode.oldRowTop);\n    const pinningLeft = this.beans.visibleColsService.isPinningLeft();\n    const pinningRight = this.beans.visibleColsService.isPinningRight();\n    if (oldRowTopExists) {\n      if (this.isFullWidth() && !this.gos.get(\"embedFullWidthRows\")) {\n        this.slideInAnimation.fullWidth = true;\n        return;\n      }\n      this.slideInAnimation.center = true;\n      this.slideInAnimation.left = pinningLeft;\n      this.slideInAnimation.right = pinningRight;\n    } else {\n      if (this.isFullWidth() && !this.gos.get(\"embedFullWidthRows\")) {\n        this.fadeInAnimation.fullWidth = true;\n        return;\n      }\n      this.fadeInAnimation.center = true;\n      this.fadeInAnimation.left = pinningLeft;\n      this.fadeInAnimation.right = pinningRight;\n    }\n  }\n  isEditing() {\n    return this.editingRow;\n  }\n  isFullWidth() {\n    return this.rowType !== \"Normal\";\n  }\n  refreshFullWidth() {\n    const tryRefresh = (gui, pinned) => {\n      if (!gui) {\n        return true;\n      }\n      return gui.rowComp.refreshFullWidth(() => {\n        const compDetails = this.createFullWidthCompDetails(gui.element, pinned);\n        return compDetails.params;\n      });\n    };\n    const fullWidthSuccess = tryRefresh(this.fullWidthGui, null);\n    const centerSuccess = tryRefresh(this.centerGui, null);\n    const leftSuccess = tryRefresh(this.leftGui, \"left\");\n    const rightSuccess = tryRefresh(this.rightGui, \"right\");\n    const allFullWidthRowsRefreshed = fullWidthSuccess && centerSuccess && leftSuccess && rightSuccess;\n    return allFullWidthRowsRefreshed;\n  }\n  addListeners() {\n    this.addManagedListeners(this.rowNode, {\n      heightChanged: () => this.onRowHeightChanged(),\n      rowSelected: () => this.onRowSelected(),\n      rowIndexChanged: this.onRowIndexChanged.bind(this),\n      topChanged: this.onTopChanged.bind(this),\n      expandedChanged: this.updateExpandedCss.bind(this),\n      hasChildrenChanged: this.updateExpandedCss.bind(this)\n    });\n    if (this.rowNode.detail) {\n      this.addManagedListeners(this.rowNode.parent, { dataChanged: this.onRowNodeDataChanged.bind(this) });\n    }\n    this.addManagedListeners(this.rowNode, {\n      dataChanged: this.onRowNodeDataChanged.bind(this),\n      cellChanged: this.postProcessCss.bind(this),\n      rowHighlightChanged: this.onRowNodeHighlightChanged.bind(this),\n      draggingChanged: this.postProcessRowDragging.bind(this),\n      uiLevelChanged: this.onUiLevelChanged.bind(this)\n    });\n    this.addManagedListeners(this.beans.eventService, {\n      paginationPixelOffsetChanged: this.onPaginationPixelOffsetChanged.bind(this),\n      heightScaleChanged: this.onTopChanged.bind(this),\n      displayedColumnsChanged: this.onDisplayedColumnsChanged.bind(this),\n      virtualColumnsChanged: this.onVirtualColumnsChanged.bind(this),\n      cellFocused: this.onCellFocusChanged.bind(this),\n      cellFocusCleared: this.onCellFocusChanged.bind(this),\n      paginationChanged: this.onPaginationChanged.bind(this),\n      modelUpdated: this.refreshFirstAndLastRowStyles.bind(this),\n      columnMoved: () => this.updateColumnLists()\n    });\n    this.addDestroyFunc(() => {\n      this.rowDragComps = this.destroyBeans(this.rowDragComps, this.beans.context);\n      if (this.tooltipFeature) {\n        this.tooltipFeature = this.destroyBean(this.tooltipFeature, this.beans.context);\n      }\n    });\n    this.addManagedPropertyListeners(\n      [\"rowStyle\", \"getRowStyle\", \"rowClass\", \"getRowClass\", \"rowClassRules\"],\n      this.postProcessCss.bind(this)\n    );\n    this.addManagedPropertyListener(\"rowDragEntireRow\", () => {\n      const useRowDragEntireRow = this.gos.get(\"rowDragEntireRow\");\n      if (useRowDragEntireRow) {\n        this.allRowGuis.forEach((gui) => {\n          this.addRowDraggerToRow(gui);\n        });\n        return;\n      }\n      this.rowDragComps = this.destroyBeans(this.rowDragComps, this.beans.context);\n    });\n    this.addListenersForCellComps();\n  }\n  addListenersForCellComps() {\n    this.addManagedListeners(this.rowNode, {\n      rowIndexChanged: () => {\n        this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onRowIndexChanged());\n      },\n      cellChanged: (event) => {\n        this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onCellChanged(event));\n      }\n    });\n  }\n  onRowNodeDataChanged(event) {\n    const fullWidthChanged = this.isFullWidth() !== !!this.isNodeFullWidthCell();\n    if (fullWidthChanged) {\n      this.beans.rowRenderer.redrawRow(this.rowNode);\n      return;\n    }\n    if (this.isFullWidth()) {\n      const refresh = this.refreshFullWidth();\n      if (!refresh) {\n        this.beans.rowRenderer.redrawRow(this.rowNode);\n      }\n      return;\n    }\n    this.getAllCellCtrls().forEach(\n      (cellCtrl) => cellCtrl.refreshCell({\n        suppressFlash: !event.update,\n        newData: !event.update\n      })\n    );\n    this.allRowGuis.forEach((gui) => {\n      this.setRowCompRowId(gui.rowComp);\n      this.updateRowBusinessKey();\n      this.setRowCompRowBusinessKey(gui.rowComp);\n    });\n    this.onRowSelected();\n    this.postProcessCss();\n  }\n  postProcessCss() {\n    this.setStylesFromGridOptions(true);\n    this.postProcessClassesFromGridOptions();\n    this.postProcessRowClassRules();\n    this.postProcessRowDragging();\n  }\n  onRowNodeHighlightChanged() {\n    const highlighted = this.rowNode.highlighted;\n    this.allRowGuis.forEach((gui) => {\n      const aboveOn = highlighted === 0 /* Above */;\n      const belowOn = highlighted === 1 /* Below */;\n      gui.rowComp.addOrRemoveCssClass(\"ag-row-highlight-above\", aboveOn);\n      gui.rowComp.addOrRemoveCssClass(\"ag-row-highlight-below\", belowOn);\n    });\n  }\n  postProcessRowDragging() {\n    const dragging = this.rowNode.dragging;\n    this.allRowGuis.forEach((gui) => gui.rowComp.addOrRemoveCssClass(\"ag-row-dragging\", dragging));\n  }\n  updateExpandedCss() {\n    const expandable = this.rowNode.isExpandable();\n    const expanded = this.rowNode.expanded == true;\n    this.allRowGuis.forEach((gui) => {\n      gui.rowComp.addOrRemoveCssClass(\"ag-row-group\", expandable);\n      gui.rowComp.addOrRemoveCssClass(\"ag-row-group-expanded\", expandable && expanded);\n      gui.rowComp.addOrRemoveCssClass(\"ag-row-group-contracted\", expandable && !expanded);\n      _setAriaExpanded(gui.element, expandable && expanded);\n    });\n  }\n  onDisplayedColumnsChanged() {\n    this.updateColumnLists(true);\n    if (this.beans.columnModel.wasAutoRowHeightEverActive()) {\n      this.rowNode.checkAutoHeights();\n    }\n  }\n  onVirtualColumnsChanged() {\n    this.updateColumnLists(false, true);\n  }\n  getRowPosition() {\n    return {\n      rowPinned: _makeNull(this.rowNode.rowPinned),\n      rowIndex: this.rowNode.rowIndex\n    };\n  }\n  findFullWidthRowGui(target) {\n    return this.allRowGuis.find((c) => c.element.contains(target));\n  }\n  onKeyboardNavigate(keyboardEvent) {\n    const currentFullWidthComp = this.findFullWidthRowGui(keyboardEvent.target);\n    const currentFullWidthContainer = currentFullWidthComp ? currentFullWidthComp.element : null;\n    const isFullWidthContainerFocused = currentFullWidthContainer === keyboardEvent.target;\n    if (!isFullWidthContainerFocused) {\n      return;\n    }\n    const node = this.rowNode;\n    const lastFocusedCell = this.beans.focusService.getFocusedCell();\n    const cellPosition = {\n      rowIndex: node.rowIndex,\n      rowPinned: node.rowPinned,\n      column: lastFocusedCell?.column ?? this.getColumnForFullWidth(currentFullWidthComp)\n    };\n    this.beans.navigationService.navigateToNextCell(keyboardEvent, keyboardEvent.key, cellPosition, true);\n    keyboardEvent.preventDefault();\n  }\n  onTabKeyDown(keyboardEvent) {\n    if (keyboardEvent.defaultPrevented || _isStopPropagationForAgGrid(keyboardEvent)) {\n      return;\n    }\n    const currentFullWidthComp = this.allRowGuis.find(\n      (c) => c.element.contains(keyboardEvent.target)\n    );\n    const currentFullWidthContainer = currentFullWidthComp ? currentFullWidthComp.element : null;\n    const isFullWidthContainerFocused = currentFullWidthContainer === keyboardEvent.target;\n    const activeEl = _getActiveDomElement(this.gos);\n    let isDetailGridCellFocused = false;\n    if (currentFullWidthContainer && activeEl) {\n      isDetailGridCellFocused = currentFullWidthContainer.contains(activeEl) && activeEl.classList.contains(\"ag-cell\");\n    }\n    let nextEl = null;\n    if (!isFullWidthContainerFocused && !isDetailGridCellFocused) {\n      nextEl = this.beans.focusService.findNextFocusableElement(\n        currentFullWidthContainer,\n        false,\n        keyboardEvent.shiftKey\n      );\n    }\n    if (this.isFullWidth() && isFullWidthContainerFocused || !nextEl) {\n      this.beans.navigationService.onTabKeyDown(this, keyboardEvent);\n    }\n  }\n  getFullWidthElement() {\n    if (this.fullWidthGui) {\n      return this.fullWidthGui.element;\n    }\n    return null;\n  }\n  getRowYPosition() {\n    const displayedEl = this.allRowGuis.find((el) => _isVisible(el.element))?.element;\n    if (displayedEl) {\n      return displayedEl.getBoundingClientRect().top;\n    }\n    return 0;\n  }\n  onSuppressCellFocusChanged(suppressCellFocus) {\n    const tabIndex = this.isFullWidth() && suppressCellFocus ? void 0 : -1;\n    this.allRowGuis.forEach((gui) => {\n      _addOrRemoveAttribute(gui.element, \"tabindex\", tabIndex);\n    });\n  }\n  onFullWidthRowFocused(event) {\n    const node = this.rowNode;\n    const isFocused = !event ? false : this.isFullWidth() && event.rowIndex === node.rowIndex && event.rowPinned == node.rowPinned;\n    const element = this.fullWidthGui ? this.fullWidthGui.element : this.centerGui?.element;\n    if (!element) {\n      return;\n    }\n    element.classList.toggle(\"ag-full-width-focus\", isFocused);\n    if (isFocused && event?.forceBrowserFocus) {\n      element.focus({ preventScroll: true });\n    }\n  }\n  recreateCell(cellCtrl) {\n    this.centerCellCtrls = this.removeCellCtrl(this.centerCellCtrls, cellCtrl);\n    this.leftCellCtrls = this.removeCellCtrl(this.leftCellCtrls, cellCtrl);\n    this.rightCellCtrls = this.removeCellCtrl(this.rightCellCtrls, cellCtrl);\n    cellCtrl.destroy();\n    this.updateColumnLists();\n  }\n  removeCellCtrl(prev, cellCtrlToRemove) {\n    const res = {\n      list: [],\n      map: {}\n    };\n    prev.list.forEach((cellCtrl) => {\n      if (cellCtrl === cellCtrlToRemove) {\n        return;\n      }\n      res.list.push(cellCtrl);\n      res.map[cellCtrl.getColumn().getInstanceId()] = cellCtrl;\n    });\n    return res;\n  }\n  onMouseEvent(eventName, mouseEvent) {\n    switch (eventName) {\n      case \"dblclick\":\n        this.onRowDblClick(mouseEvent);\n        break;\n      case \"click\":\n        this.onRowClick(mouseEvent);\n        break;\n      case \"touchstart\":\n      case \"mousedown\":\n        this.onRowMouseDown(mouseEvent);\n        break;\n    }\n  }\n  createRowEvent(type, domEvent) {\n    return this.gos.addGridCommonParams({\n      type,\n      node: this.rowNode,\n      data: this.rowNode.data,\n      rowIndex: this.rowNode.rowIndex,\n      rowPinned: this.rowNode.rowPinned,\n      event: domEvent\n    });\n  }\n  createRowEventWithSource(type, domEvent) {\n    const event = this.createRowEvent(type, domEvent);\n    event.source = this;\n    return event;\n  }\n  onRowDblClick(mouseEvent) {\n    if (_isStopPropagationForAgGrid(mouseEvent)) {\n      return;\n    }\n    this.beans.eventService.dispatchEvent(this.createRowEventWithSource(\"rowDoubleClicked\", mouseEvent));\n  }\n  getColumnForFullWidth(fullWidthRowGui) {\n    const { visibleColsService } = this.beans;\n    switch (fullWidthRowGui?.containerType) {\n      case \"center\":\n        return visibleColsService.getCenterCols()[0];\n      case \"left\":\n        return visibleColsService.getLeftCols()[0];\n      case \"right\":\n        return visibleColsService.getRightCols()[0];\n      default:\n        return visibleColsService.getAllCols()[0];\n    }\n  }\n  onRowMouseDown(mouseEvent) {\n    this.lastMouseDownOnDragger = _isElementChildOfClass(mouseEvent.target, \"ag-row-drag\", 3);\n    if (!this.isFullWidth()) {\n      return;\n    }\n    const node = this.rowNode;\n    if (this.beans.rangeService) {\n      this.beans.rangeService.removeAllCellRanges();\n    }\n    const fullWidthRowGui = this.findFullWidthRowGui(mouseEvent.target);\n    const element = fullWidthRowGui?.element;\n    const target = mouseEvent.target;\n    let forceBrowserFocus = true;\n    if (element && element.contains(target) && _isFocusableFormField(target)) {\n      forceBrowserFocus = false;\n    }\n    this.beans.focusService.setFocusedCell({\n      rowIndex: node.rowIndex,\n      column: this.getColumnForFullWidth(fullWidthRowGui),\n      rowPinned: node.rowPinned,\n      forceBrowserFocus\n    });\n  }\n  onRowClick(mouseEvent) {\n    const stop = _isStopPropagationForAgGrid(mouseEvent) || this.lastMouseDownOnDragger;\n    if (stop) {\n      return;\n    }\n    const { gos } = this;\n    this.beans.eventService.dispatchEvent(this.createRowEventWithSource(\"rowClicked\", mouseEvent));\n    const isMultiKey = mouseEvent.ctrlKey || mouseEvent.metaKey;\n    const isShiftKey = mouseEvent.shiftKey;\n    const isSelected = this.rowNode.isSelected();\n    const groupSelectsChildren = _getGroupSelectsDescendants(gos);\n    const rowDeselectionWithCtrl = _getEnableDeselection(gos);\n    const rowClickSelection = _getEnableSelection(gos);\n    if (\n      // we do not allow selecting groups by clicking (as the click here expands the group), or if it's a detail row,\n      // so return if it's a group row\n      groupSelectsChildren && this.rowNode.group || this.isRowSelectionBlocked() || // if selecting and click selection disabled, do nothing\n      !rowClickSelection && !isSelected || // if deselecting and click deselection disabled, do nothing\n      !rowDeselectionWithCtrl && isSelected\n    ) {\n      return;\n    }\n    const multiSelectOnClick = _getEnableSelectionWithoutKeys(gos);\n    const source = \"rowClicked\";\n    if (isSelected) {\n      if (multiSelectOnClick) {\n        this.rowNode.setSelectedParams({ newValue: false, event: mouseEvent, source });\n      } else if (isMultiKey) {\n        if (rowDeselectionWithCtrl) {\n          this.rowNode.setSelectedParams({ newValue: false, event: mouseEvent, source });\n        }\n      } else if (rowClickSelection) {\n        this.rowNode.setSelectedParams({\n          newValue: true,\n          clearSelection: !isShiftKey,\n          rangeSelect: isShiftKey,\n          event: mouseEvent,\n          source\n        });\n      }\n    } else {\n      const clearSelection = multiSelectOnClick ? false : !isMultiKey;\n      this.rowNode.setSelectedParams({\n        newValue: true,\n        clearSelection,\n        rangeSelect: isShiftKey,\n        event: mouseEvent,\n        source\n      });\n    }\n  }\n  isRowSelectionBlocked() {\n    return !this.rowNode.selectable || !!this.rowNode.rowPinned || !_isRowSelection(this.gos);\n  }\n  setupDetailRowAutoHeight(eDetailGui) {\n    if (this.rowType !== \"FullWidthDetail\") {\n      return;\n    }\n    if (!this.gos.get(\"detailRowAutoHeight\")) {\n      return;\n    }\n    const checkRowSizeFunc = () => {\n      const clientHeight = eDetailGui.clientHeight;\n      if (clientHeight != null && clientHeight > 0) {\n        const updateRowHeightFunc = () => {\n          this.rowNode.setRowHeight(clientHeight);\n          if (_isClientSideRowModel(this.gos) || _isServerSideRowModel(this.gos)) {\n            this.beans.rowModel.onRowHeightChanged();\n          }\n        };\n        window.setTimeout(updateRowHeightFunc, 0);\n      }\n    };\n    const resizeObserverDestroyFunc = this.beans.resizeObserverService.observeResize(eDetailGui, checkRowSizeFunc);\n    this.addDestroyFunc(resizeObserverDestroyFunc);\n    checkRowSizeFunc();\n  }\n  createFullWidthCompDetails(eRow, pinned) {\n    const { gos, rowNode } = this;\n    const params = gos.addGridCommonParams({\n      fullWidth: true,\n      data: rowNode.data,\n      node: rowNode,\n      value: rowNode.key,\n      valueFormatted: rowNode.key,\n      // these need to be taken out, as part of 'afterAttached' now\n      eGridCell: eRow,\n      eParentOfValue: eRow,\n      pinned,\n      addRenderedRowListener: this.addEventListener.bind(this),\n      registerRowDragger: (rowDraggerElement, dragStartPixels, value, suppressVisibilityChange) => this.addFullWidthRowDragging(rowDraggerElement, dragStartPixels, value, suppressVisibilityChange),\n      setTooltip: (value, shouldDisplayTooltip) => this.refreshRowTooltip(value, shouldDisplayTooltip)\n    });\n    const compFactory = this.beans.userComponentFactory;\n    switch (this.rowType) {\n      case \"FullWidthDetail\":\n        return compFactory.getFullWidthDetailCellRendererDetails(params);\n      case \"FullWidthGroup\":\n        return compFactory.getFullWidthGroupCellRendererDetails(params);\n      case \"FullWidthLoading\":\n        return compFactory.getFullWidthLoadingCellRendererDetails(params);\n      default:\n        return compFactory.getFullWidthCellRendererDetails(params);\n    }\n  }\n  refreshRowTooltip(value, shouldDisplayTooltip) {\n    if (!this.fullWidthGui) {\n      return;\n    }\n    const tooltipParams = {\n      getGui: () => this.fullWidthGui.element,\n      getTooltipValue: () => value,\n      getLocation: () => \"fullWidthRow\",\n      shouldDisplayTooltip\n    };\n    if (this.tooltipFeature) {\n      this.destroyBean(this.tooltipFeature, this.beans.context);\n    }\n    this.tooltipFeature = this.createBean(new TooltipFeature(tooltipParams, this.beans));\n  }\n  addFullWidthRowDragging(rowDraggerElement, dragStartPixels, value = \"\", suppressVisibilityChange) {\n    if (!this.isFullWidth()) {\n      return;\n    }\n    const rowDragComp = new RowDragComp(\n      () => value,\n      this.rowNode,\n      void 0,\n      rowDraggerElement,\n      dragStartPixels,\n      suppressVisibilityChange\n    );\n    this.createBean(rowDragComp, this.beans.context);\n    this.addDestroyFunc(() => {\n      this.destroyBean(rowDragComp, this.beans.context);\n    });\n  }\n  onUiLevelChanged() {\n    const newLevel = this.beans.rowCssClassCalculator.calculateRowLevel(this.rowNode);\n    if (this.rowLevel != newLevel) {\n      const classToAdd = \"ag-row-level-\" + newLevel;\n      const classToRemove = \"ag-row-level-\" + this.rowLevel;\n      this.allRowGuis.forEach((gui) => {\n        gui.rowComp.addOrRemoveCssClass(classToAdd, true);\n        gui.rowComp.addOrRemoveCssClass(classToRemove, false);\n      });\n    }\n    this.rowLevel = newLevel;\n  }\n  isFirstRowOnPage() {\n    return this.rowNode.rowIndex === this.beans.pageBoundsService.getFirstRow();\n  }\n  isLastRowOnPage() {\n    return this.rowNode.rowIndex === this.beans.pageBoundsService.getLastRow();\n  }\n  refreshFirstAndLastRowStyles() {\n    const newFirst = this.isFirstRowOnPage();\n    const newLast = this.isLastRowOnPage();\n    if (this.firstRowOnPage !== newFirst) {\n      this.firstRowOnPage = newFirst;\n      this.allRowGuis.forEach((gui) => gui.rowComp.addOrRemoveCssClass(\"ag-row-first\", newFirst));\n    }\n    if (this.lastRowOnPage !== newLast) {\n      this.lastRowOnPage = newLast;\n      this.allRowGuis.forEach((gui) => gui.rowComp.addOrRemoveCssClass(\"ag-row-last\", newLast));\n    }\n  }\n  stopEditing(cancel = false) {\n    if (this.stoppingRowEdit) {\n      return;\n    }\n    this.beans.rowEditService?.stopEditing(this, cancel);\n  }\n  setInlineEditingCss() {\n    const editing = this.editingRow || this.getAllCellCtrls().some((cellCtrl) => cellCtrl.isEditing());\n    this.allRowGuis.forEach((gui) => {\n      gui.rowComp.addOrRemoveCssClass(\"ag-row-inline-editing\", editing);\n      gui.rowComp.addOrRemoveCssClass(\"ag-row-not-inline-editing\", !editing);\n    });\n  }\n  setEditingRow(value) {\n    this.editingRow = value;\n  }\n  startRowEditing(key = null, sourceRenderedCell = null, event = null) {\n    if (this.editingRow) {\n      return true;\n    }\n    return this.beans.rowEditService?.startEditing(this, key, sourceRenderedCell, event) ?? true;\n  }\n  getAllCellCtrls() {\n    if (this.leftCellCtrls.list.length === 0 && this.rightCellCtrls.list.length === 0) {\n      return this.centerCellCtrls.list;\n    }\n    const res = [...this.centerCellCtrls.list, ...this.leftCellCtrls.list, ...this.rightCellCtrls.list];\n    return res;\n  }\n  postProcessClassesFromGridOptions() {\n    const cssClasses = this.beans.rowCssClassCalculator.processClassesFromGridOptions(this.rowNode);\n    if (!cssClasses || !cssClasses.length) {\n      return;\n    }\n    cssClasses.forEach((classStr) => {\n      this.allRowGuis.forEach((c) => c.rowComp.addOrRemoveCssClass(classStr, true));\n    });\n  }\n  postProcessRowClassRules() {\n    this.beans.rowCssClassCalculator.processRowClassRules(\n      this.rowNode,\n      (className) => {\n        this.allRowGuis.forEach((gui) => gui.rowComp.addOrRemoveCssClass(className, true));\n      },\n      (className) => {\n        this.allRowGuis.forEach((gui) => gui.rowComp.addOrRemoveCssClass(className, false));\n      }\n    );\n  }\n  setStylesFromGridOptions(updateStyles, gui) {\n    if (updateStyles) {\n      this.rowStyles = this.processStylesFromGridOptions();\n    }\n    this.forEachGui(gui, (gui2) => gui2.rowComp.setUserStyles(this.rowStyles));\n  }\n  getPinnedForContainer(rowContainerType) {\n    if (rowContainerType === \"left\" || rowContainerType === \"right\") {\n      return rowContainerType;\n    }\n    return null;\n  }\n  getInitialRowClasses(rowContainerType) {\n    const pinned = this.getPinnedForContainer(rowContainerType);\n    const params = {\n      rowNode: this.rowNode,\n      rowFocused: this.rowFocused,\n      fadeRowIn: this.fadeInAnimation[rowContainerType],\n      rowIsEven: this.rowNode.rowIndex % 2 === 0,\n      rowLevel: this.rowLevel,\n      fullWidthRow: this.isFullWidth(),\n      firstRowOnPage: this.isFirstRowOnPage(),\n      lastRowOnPage: this.isLastRowOnPage(),\n      printLayout: this.printLayout,\n      expandable: this.rowNode.isExpandable(),\n      pinned\n    };\n    return this.beans.rowCssClassCalculator.getInitialRowClasses(params);\n  }\n  processStylesFromGridOptions() {\n    const rowStyle = this.gos.get(\"rowStyle\");\n    if (rowStyle && typeof rowStyle === \"function\") {\n      _warnOnce(\"rowStyle should be an object of key/value styles, not be a function, use getRowStyle() instead\");\n      return;\n    }\n    const rowStyleFunc = this.gos.getCallback(\"getRowStyle\");\n    let rowStyleFuncResult;\n    if (rowStyleFunc) {\n      const params = {\n        data: this.rowNode.data,\n        node: this.rowNode,\n        rowIndex: this.rowNode.rowIndex\n      };\n      rowStyleFuncResult = rowStyleFunc(params);\n    }\n    if (rowStyleFuncResult || rowStyle) {\n      return Object.assign({}, rowStyle, rowStyleFuncResult);\n    }\n    return this.emptyStyle;\n  }\n  onRowSelected(gui) {\n    const selected = !!this.rowNode.isSelected();\n    this.forEachGui(gui, (gui2) => {\n      gui2.rowComp.addOrRemoveCssClass(\"ag-row-selected\", selected);\n      _setAriaSelected(gui2.element, selected);\n      const hasFocus = gui2.element.contains(_getActiveDomElement(this.gos));\n      if (hasFocus && (gui2 === this.centerGui || gui2 === this.fullWidthGui)) {\n        this.announceDescription();\n      }\n    });\n  }\n  announceDescription() {\n    if (this.isRowSelectionBlocked()) {\n      return;\n    }\n    const selected = this.rowNode.isSelected();\n    if (selected && !_getEnableDeselection(this.gos)) {\n      return;\n    }\n    const translate = this.beans.localeService.getLocaleTextFunc();\n    const label = translate(\n      selected ? \"ariaRowDeselect\" : \"ariaRowSelect\",\n      `Press SPACE to ${selected ? \"deselect\" : \"select\"} this row.`\n    );\n    this.beans.ariaAnnouncementService.announceValue(label, \"rowSelection\");\n  }\n  addHoverFunctionality(eGui) {\n    if (!this.active) {\n      return;\n    }\n    const { element, compBean } = eGui;\n    const { rowNode, beans, gos } = this;\n    compBean.addManagedListeners(element, {\n      mouseenter: () => rowNode.onMouseEnter(),\n      mouseleave: () => rowNode.onMouseLeave()\n    });\n    compBean.addManagedListeners(rowNode, {\n      mouseEnter: () => {\n        if (!beans.dragService.isDragging() && !gos.get(\"suppressRowHoverHighlight\")) {\n          element.classList.add(\"ag-row-hover\");\n          rowNode.setHovered(true);\n        }\n      },\n      mouseLeave: () => {\n        element.classList.remove(\"ag-row-hover\");\n        rowNode.setHovered(false);\n      }\n    });\n  }\n  // for animation, we don't want to animate entry or exit to a very far away pixel,\n  // otherwise the row would move so fast, it would appear to disappear. so this method\n  // moves the row closer to the viewport if it is far away, so the row slide in / out\n  // at a speed the user can see.\n  roundRowTopToBounds(rowTop) {\n    const range = this.beans.ctrlsService.getGridBodyCtrl().getScrollFeature().getApproximateVScollPosition();\n    const minPixel = this.applyPaginationOffset(range.top, true) - 100;\n    const maxPixel = this.applyPaginationOffset(range.bottom, true) + 100;\n    return Math.min(Math.max(minPixel, rowTop), maxPixel);\n  }\n  getFrameworkOverrides() {\n    return this.beans.frameworkOverrides;\n  }\n  forEachGui(gui, callback) {\n    if (gui) {\n      callback(gui);\n    } else {\n      this.allRowGuis.forEach(callback);\n    }\n  }\n  onRowHeightChanged(gui) {\n    if (this.rowNode.rowHeight == null) {\n      return;\n    }\n    const rowHeight = this.rowNode.rowHeight;\n    const defaultRowHeight = this.beans.environment.getDefaultRowHeight();\n    const isHeightFromFunc = _isGetRowHeightFunction(this.gos);\n    const heightFromFunc = isHeightFromFunc ? _getRowHeightForNode(this.gos, this.rowNode).height : void 0;\n    const lineHeight = heightFromFunc ? `${Math.min(defaultRowHeight, heightFromFunc) - 2}px` : void 0;\n    this.forEachGui(gui, (gui2) => {\n      gui2.element.style.height = `${rowHeight}px`;\n      if (lineHeight) {\n        gui2.element.style.setProperty(\"--ag-line-height\", lineHeight);\n      }\n    });\n  }\n  addEventListener(eventType, listener) {\n    super.addEventListener(eventType, listener);\n  }\n  removeEventListener(eventType, listener) {\n    super.removeEventListener(eventType, listener);\n  }\n  // note - this is NOT called by context, as we don't wire / unwire the CellComp for performance reasons.\n  destroyFirstPass(suppressAnimation = false) {\n    this.active = false;\n    if (!suppressAnimation && _isAnimateRows(this.gos) && !this.isSticky()) {\n      const rowStillVisibleJustNotInViewport = this.rowNode.rowTop != null;\n      if (rowStillVisibleJustNotInViewport) {\n        const rowTop = this.roundRowTopToBounds(this.rowNode.rowTop);\n        this.setRowTop(rowTop);\n      } else {\n        this.allRowGuis.forEach((gui) => gui.rowComp.addOrRemoveCssClass(\"ag-opacity-zero\", true));\n      }\n    }\n    this.rowNode.setHovered(false);\n    const event = this.createRowEvent(\"virtualRowRemoved\");\n    this.dispatchLocalEvent(event);\n    this.beans.eventService.dispatchEvent(event);\n    super.destroy();\n  }\n  destroySecondPass() {\n    this.allRowGuis.length = 0;\n    this.stopEditing();\n    const destroyCellCtrls = (ctrls) => {\n      ctrls.list.forEach((c) => c.destroy());\n      return { list: [], map: {} };\n    };\n    this.centerCellCtrls = destroyCellCtrls(this.centerCellCtrls);\n    this.leftCellCtrls = destroyCellCtrls(this.leftCellCtrls);\n    this.rightCellCtrls = destroyCellCtrls(this.rightCellCtrls);\n  }\n  setFocusedClasses(gui) {\n    this.forEachGui(gui, (gui2) => {\n      gui2.rowComp.addOrRemoveCssClass(\"ag-row-focus\", this.rowFocused);\n      gui2.rowComp.addOrRemoveCssClass(\"ag-row-no-focus\", !this.rowFocused);\n    });\n  }\n  onCellFocusChanged() {\n    const rowFocused = this.beans.focusService.isRowFocused(this.rowNode.rowIndex, this.rowNode.rowPinned);\n    if (rowFocused !== this.rowFocused) {\n      this.rowFocused = rowFocused;\n      this.setFocusedClasses();\n    }\n    if (!rowFocused && this.editingRow) {\n      this.stopEditing(false);\n    }\n  }\n  onPaginationChanged() {\n    const currentPage = this.beans.paginationService?.getCurrentPage() ?? 0;\n    if (this.paginationPage !== currentPage) {\n      this.paginationPage = currentPage;\n      this.onTopChanged();\n    }\n    this.refreshFirstAndLastRowStyles();\n  }\n  onTopChanged() {\n    this.setRowTop(this.rowNode.rowTop);\n  }\n  onPaginationPixelOffsetChanged() {\n    this.onTopChanged();\n  }\n  // applies pagination offset, eg if on second page, and page height is 500px, then removes\n  // 500px from the top position, so a row with rowTop 600px is displayed at location 100px.\n  // reverse will take the offset away rather than add.\n  applyPaginationOffset(topPx, reverse = false) {\n    if (this.rowNode.isRowPinned() || this.rowNode.sticky) {\n      return topPx;\n    }\n    const pixelOffset = this.beans.pageBoundsService.getPixelOffset();\n    const multiplier = reverse ? 1 : -1;\n    return topPx + pixelOffset * multiplier;\n  }\n  setRowTop(pixels) {\n    if (this.printLayout) {\n      return;\n    }\n    if (_exists(pixels)) {\n      const afterPaginationPixels = this.applyPaginationOffset(pixels);\n      const skipScaling = this.rowNode.isRowPinned() || this.rowNode.sticky;\n      const afterScalingPixels = skipScaling ? afterPaginationPixels : this.beans.rowContainerHeightService.getRealPixelPosition(afterPaginationPixels);\n      const topPx = `${afterScalingPixels}px`;\n      this.setRowTopStyle(topPx);\n    }\n  }\n  // the top needs to be set into the DOM element when the element is created, not updated afterwards.\n  // otherwise the transition would not work, as it would be transitioning from zero (the unset value).\n  // for example, suppose a row that is outside the viewport, then user does a filter to remove other rows\n  // and this row now appears in the viewport, and the row moves up (ie it was under the viewport and not rendered,\n  // but now is in the viewport) then a new RowComp is created, however it should have it's position initialised\n  // to below the viewport, so the row will appear to animate up. if we didn't set the initial position at creation\n  // time, the row would animate down (ie from position zero).\n  getInitialRowTop(rowContainerType) {\n    return this.suppressRowTransform ? this.getInitialRowTopShared(rowContainerType) : void 0;\n  }\n  getInitialTransform(rowContainerType) {\n    return this.suppressRowTransform ? void 0 : `translateY(${this.getInitialRowTopShared(rowContainerType)})`;\n  }\n  getInitialRowTopShared(rowContainerType) {\n    if (this.printLayout) {\n      return \"\";\n    }\n    const rowNode = this.rowNode;\n    let rowTop;\n    if (this.isSticky()) {\n      rowTop = rowNode.stickyRowTop;\n    } else {\n      const pixels = this.slideInAnimation[rowContainerType] ? this.roundRowTopToBounds(rowNode.oldRowTop) : rowNode.rowTop;\n      const afterPaginationPixels = this.applyPaginationOffset(pixels);\n      rowTop = rowNode.isRowPinned() ? afterPaginationPixels : this.beans.rowContainerHeightService.getRealPixelPosition(afterPaginationPixels);\n    }\n    return rowTop + \"px\";\n  }\n  setRowTopStyle(topPx) {\n    this.allRowGuis.forEach(\n      (gui) => this.suppressRowTransform ? gui.rowComp.setTop(topPx) : gui.rowComp.setTransform(`translateY(${topPx})`)\n    );\n  }\n  getRowNode() {\n    return this.rowNode;\n  }\n  getCellCtrl(column) {\n    let res = null;\n    this.getAllCellCtrls().forEach((cellCtrl) => {\n      if (cellCtrl.getColumn() == column) {\n        res = cellCtrl;\n      }\n    });\n    if (res != null) {\n      return res;\n    }\n    this.getAllCellCtrls().forEach((cellCtrl) => {\n      if (cellCtrl.getColSpanningList().indexOf(column) >= 0) {\n        res = cellCtrl;\n      }\n    });\n    return res;\n  }\n  onRowIndexChanged() {\n    if (this.rowNode.rowIndex != null) {\n      this.onCellFocusChanged();\n      this.updateRowIndexes();\n      this.postProcessCss();\n    }\n  }\n  getRowIndex() {\n    return this.rowNode.getRowIndexString();\n  }\n  updateRowIndexes(gui) {\n    const rowIndexStr = this.rowNode.getRowIndexString();\n    if (rowIndexStr === null) {\n      return;\n    }\n    const headerRowCount = this.beans.headerNavigationService.getHeaderRowCount() + (this.beans.filterManager?.getHeaderRowCount() ?? 0);\n    const rowIsEven = this.rowNode.rowIndex % 2 === 0;\n    const ariaRowIndex = headerRowCount + this.rowNode.rowIndex + 1;\n    this.forEachGui(gui, (c) => {\n      c.rowComp.setRowIndex(rowIndexStr);\n      c.rowComp.addOrRemoveCssClass(\"ag-row-even\", rowIsEven);\n      c.rowComp.addOrRemoveCssClass(\"ag-row-odd\", !rowIsEven);\n      _setAriaRowIndex(c.element, ariaRowIndex);\n    });\n  }\n  setStoppingRowEdit(stoppingRowEdit) {\n    this.stoppingRowEdit = stoppingRowEdit;\n  }\n};\n_RowCtrl.DOM_DATA_KEY_ROW_CTRL = \"renderedRow\";\nvar RowCtrl = _RowCtrl;\n\n// community-modules/core/src/gridBodyComp/rowContainer/rowContainerEventsFeature.ts\nvar RowContainerEventsFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.mouseEventService = beans.mouseEventService;\n    this.valueService = beans.valueService;\n    this.menuService = beans.menuService;\n    this.ctrlsService = beans.ctrlsService;\n    this.navigationService = beans.navigationService;\n    this.focusService = beans.focusService;\n    this.undoRedoService = beans.undoRedoService;\n    this.visibleColsService = beans.visibleColsService;\n    this.rowModel = beans.rowModel;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.rangeService = beans.rangeService;\n    this.clipboardService = beans.clipboardService;\n  }\n  constructor(element) {\n    super();\n    this.element = element;\n  }\n  postConstruct() {\n    this.addKeyboardListeners();\n    this.addMouseListeners();\n    this.mockContextMenuForIPad();\n  }\n  addKeyboardListeners() {\n    const eventName = \"keydown\";\n    const listener = this.processKeyboardEvent.bind(this, eventName);\n    this.addManagedElementListeners(this.element, { [eventName]: listener });\n  }\n  addMouseListeners() {\n    const mouseDownEvent = _isEventSupported(\"touchstart\") ? \"touchstart\" : \"mousedown\";\n    const eventNames = [\"dblclick\", \"contextmenu\", \"mouseover\", \"mouseout\", \"click\", mouseDownEvent];\n    eventNames.forEach((eventName) => {\n      const listener = this.processMouseEvent.bind(this, eventName);\n      this.addManagedElementListeners(this.element, { [eventName]: listener });\n    });\n  }\n  processMouseEvent(eventName, mouseEvent) {\n    if (!this.mouseEventService.isEventFromThisGrid(mouseEvent) || _isStopPropagationForAgGrid(mouseEvent)) {\n      return;\n    }\n    const rowComp = this.getRowForEvent(mouseEvent);\n    const cellCtrl = this.mouseEventService.getRenderedCellForEvent(mouseEvent);\n    if (eventName === \"contextmenu\") {\n      this.handleContextMenuMouseEvent(mouseEvent, void 0, rowComp, cellCtrl);\n    } else {\n      if (cellCtrl) {\n        cellCtrl.onMouseEvent(eventName, mouseEvent);\n      }\n      if (rowComp) {\n        rowComp.onMouseEvent(eventName, mouseEvent);\n      }\n    }\n  }\n  mockContextMenuForIPad() {\n    if (!_isIOSUserAgent()) {\n      return;\n    }\n    const touchListener = new TouchListener(this.element);\n    const longTapListener = (event) => {\n      const rowComp = this.getRowForEvent(event.touchEvent);\n      const cellComp = this.mouseEventService.getRenderedCellForEvent(event.touchEvent);\n      this.handleContextMenuMouseEvent(void 0, event.touchEvent, rowComp, cellComp);\n    };\n    this.addManagedListeners(touchListener, { longTap: longTapListener });\n    this.addDestroyFunc(() => touchListener.destroy());\n  }\n  getRowForEvent(event) {\n    let sourceElement = event.target;\n    while (sourceElement) {\n      const rowCon = _getDomData(this.gos, sourceElement, RowCtrl.DOM_DATA_KEY_ROW_CTRL);\n      if (rowCon) {\n        return rowCon;\n      }\n      sourceElement = sourceElement.parentElement;\n    }\n    return null;\n  }\n  handleContextMenuMouseEvent(mouseEvent, touchEvent, rowComp, cellCtrl) {\n    const rowNode = rowComp ? rowComp.getRowNode() : null;\n    const column = cellCtrl ? cellCtrl.getColumn() : null;\n    let value = null;\n    if (column) {\n      const event = mouseEvent ? mouseEvent : touchEvent;\n      cellCtrl.dispatchCellContextMenuEvent(event ?? null);\n      value = this.valueService.getValue(column, rowNode);\n    }\n    const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n    const anchorToElement = cellCtrl ? cellCtrl.getGui() : gridBodyCon.getGridBodyElement();\n    this.menuService.showContextMenu({\n      mouseEvent,\n      touchEvent,\n      rowNode,\n      column,\n      value,\n      anchorToElement\n    });\n  }\n  getControlsForEventTarget(target) {\n    return {\n      cellCtrl: _getCtrlForEventTarget(this.gos, target, CellCtrl.DOM_DATA_KEY_CELL_CTRL),\n      rowCtrl: _getCtrlForEventTarget(this.gos, target, RowCtrl.DOM_DATA_KEY_ROW_CTRL)\n    };\n  }\n  processKeyboardEvent(eventName, keyboardEvent) {\n    const { cellCtrl, rowCtrl } = this.getControlsForEventTarget(keyboardEvent.target);\n    if (keyboardEvent.defaultPrevented) {\n      return;\n    }\n    if (cellCtrl) {\n      this.processCellKeyboardEvent(cellCtrl, eventName, keyboardEvent);\n    } else if (rowCtrl && rowCtrl.isFullWidth()) {\n      this.processFullWidthRowKeyboardEvent(rowCtrl, eventName, keyboardEvent);\n    }\n  }\n  processCellKeyboardEvent(cellCtrl, eventName, keyboardEvent) {\n    const rowNode = cellCtrl.getRowNode();\n    const column = cellCtrl.getColumn();\n    const editing = cellCtrl.isEditing();\n    const gridProcessingAllowed = !_isUserSuppressingKeyboardEvent(\n      this.gos,\n      keyboardEvent,\n      rowNode,\n      column,\n      editing\n    );\n    if (gridProcessingAllowed) {\n      if (eventName === \"keydown\") {\n        const wasScrollKey = !editing && this.navigationService.handlePageScrollingKey(keyboardEvent);\n        if (!wasScrollKey) {\n          cellCtrl.onKeyDown(keyboardEvent);\n        }\n        this.doGridOperations(keyboardEvent, cellCtrl.isEditing());\n        if (_isEventFromPrintableCharacter(keyboardEvent)) {\n          cellCtrl.processCharacter(keyboardEvent);\n        }\n      }\n    }\n    if (eventName === \"keydown\") {\n      this.eventService.dispatchEvent(cellCtrl.createEvent(keyboardEvent, \"cellKeyDown\"));\n    }\n  }\n  processFullWidthRowKeyboardEvent(rowComp, eventName, keyboardEvent) {\n    const rowNode = rowComp.getRowNode();\n    const focusedCell = this.focusService.getFocusedCell();\n    const column = focusedCell && focusedCell.column;\n    const gridProcessingAllowed = !_isUserSuppressingKeyboardEvent(this.gos, keyboardEvent, rowNode, column, false);\n    if (gridProcessingAllowed) {\n      const key = keyboardEvent.key;\n      if (eventName === \"keydown\") {\n        switch (key) {\n          case KeyCode.PAGE_HOME:\n          case KeyCode.PAGE_END:\n          case KeyCode.PAGE_UP:\n          case KeyCode.PAGE_DOWN:\n            this.navigationService.handlePageScrollingKey(keyboardEvent, true);\n            break;\n          case KeyCode.UP:\n          case KeyCode.DOWN:\n            rowComp.onKeyboardNavigate(keyboardEvent);\n            break;\n          case KeyCode.TAB:\n            rowComp.onTabKeyDown(keyboardEvent);\n            break;\n          default:\n        }\n      }\n    }\n    if (eventName === \"keydown\") {\n      this.eventService.dispatchEvent(rowComp.createRowEvent(\"cellKeyDown\", keyboardEvent));\n    }\n  }\n  doGridOperations(keyboardEvent, editing) {\n    if (!keyboardEvent.ctrlKey && !keyboardEvent.metaKey) {\n      return;\n    }\n    if (editing) {\n      return;\n    }\n    if (!this.mouseEventService.isEventFromThisGrid(keyboardEvent)) {\n      return;\n    }\n    const keyCode = _normaliseQwertyAzerty(keyboardEvent);\n    if (keyCode === KeyCode.A) {\n      return this.onCtrlAndA(keyboardEvent);\n    }\n    if (keyCode === KeyCode.C) {\n      return this.onCtrlAndC(keyboardEvent);\n    }\n    if (keyCode === KeyCode.D) {\n      return this.onCtrlAndD(keyboardEvent);\n    }\n    if (keyCode === KeyCode.V) {\n      return this.onCtrlAndV(keyboardEvent);\n    }\n    if (keyCode === KeyCode.X) {\n      return this.onCtrlAndX(keyboardEvent);\n    }\n    if (keyCode === KeyCode.Y) {\n      return this.onCtrlAndY();\n    }\n    if (keyCode === KeyCode.Z) {\n      return this.onCtrlAndZ(keyboardEvent);\n    }\n  }\n  onCtrlAndA(event) {\n    const { pinnedRowModel, rowModel, rangeService } = this;\n    if (rangeService && rowModel.isRowsToRender()) {\n      const [isEmptyPinnedTop, isEmptyPinnedBottom] = [\n        pinnedRowModel.isEmpty(\"top\"),\n        pinnedRowModel.isEmpty(\"bottom\")\n      ];\n      const floatingStart = isEmptyPinnedTop ? null : \"top\";\n      let floatingEnd;\n      let rowEnd;\n      if (isEmptyPinnedBottom) {\n        floatingEnd = null;\n        rowEnd = rowModel.getRowCount() - 1;\n      } else {\n        floatingEnd = \"bottom\";\n        rowEnd = pinnedRowModel.getPinnedBottomRowCount() - 1;\n      }\n      const allDisplayedColumns = this.visibleColsService.getAllCols();\n      if (_missingOrEmpty(allDisplayedColumns)) {\n        return;\n      }\n      rangeService.setCellRange({\n        rowStartIndex: 0,\n        rowStartPinned: floatingStart,\n        rowEndIndex: rowEnd,\n        rowEndPinned: floatingEnd,\n        columnStart: allDisplayedColumns[0],\n        columnEnd: _last(allDisplayedColumns)\n      });\n    }\n    event.preventDefault();\n  }\n  onCtrlAndC(event) {\n    if (!this.clipboardService || this.gos.get(\"enableCellTextSelection\")) {\n      return;\n    }\n    const { cellCtrl, rowCtrl } = this.getControlsForEventTarget(event.target);\n    if (cellCtrl?.isEditing() || rowCtrl?.isEditing()) {\n      return;\n    }\n    event.preventDefault();\n    this.clipboardService.copyToClipboard();\n  }\n  onCtrlAndX(event) {\n    if (!this.clipboardService || this.gos.get(\"enableCellTextSelection\") || this.gos.get(\"suppressCutToClipboard\")) {\n      return;\n    }\n    const { cellCtrl, rowCtrl } = this.getControlsForEventTarget(event.target);\n    if (cellCtrl?.isEditing() || rowCtrl?.isEditing()) {\n      return;\n    }\n    event.preventDefault();\n    this.clipboardService.cutToClipboard(void 0, \"ui\");\n  }\n  onCtrlAndV(event) {\n    const { cellCtrl, rowCtrl } = this.getControlsForEventTarget(event.target);\n    if (cellCtrl?.isEditing() || rowCtrl?.isEditing()) {\n      return;\n    }\n    if (this.clipboardService && !this.gos.get(\"suppressClipboardPaste\")) {\n      this.clipboardService.pasteFromClipboard();\n    }\n  }\n  onCtrlAndD(event) {\n    if (this.clipboardService && !this.gos.get(\"suppressClipboardPaste\")) {\n      this.clipboardService.copyRangeDown();\n    }\n    event.preventDefault();\n  }\n  onCtrlAndZ(event) {\n    if (!this.gos.get(\"undoRedoCellEditing\") || !this.undoRedoService) {\n      return;\n    }\n    event.preventDefault();\n    if (event.shiftKey) {\n      this.undoRedoService.redo(\"ui\");\n    } else {\n      this.undoRedoService.undo(\"ui\");\n    }\n  }\n  onCtrlAndY() {\n    this.undoRedoService?.redo(\"ui\");\n  }\n};\n\n// community-modules/core/src/gridBodyComp/rowContainer/setPinnedLeftWidthFeature.ts\nvar SetPinnedLeftWidthFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.pinnedWidthService = beans.pinnedWidthService;\n  }\n  constructor(element) {\n    super();\n    this.element = element;\n  }\n  postConstruct() {\n    this.addManagedEventListeners({ leftPinnedWidthChanged: this.onPinnedLeftWidthChanged.bind(this) });\n  }\n  onPinnedLeftWidthChanged() {\n    const leftWidth = this.pinnedWidthService.getPinnedLeftWidth();\n    const displayed = leftWidth > 0;\n    _setDisplayed(this.element, displayed);\n    _setFixedWidth(this.element, leftWidth);\n  }\n  getWidth() {\n    return this.pinnedWidthService.getPinnedLeftWidth();\n  }\n};\n\n// community-modules/core/src/gridBodyComp/rowContainer/setPinnedRightWidthFeature.ts\nvar SetPinnedRightWidthFeature = class extends BeanStub {\n  wireBeans(beans) {\n    this.pinnedWidthService = beans.pinnedWidthService;\n  }\n  constructor(element) {\n    super();\n    this.element = element;\n  }\n  postConstruct() {\n    this.addManagedEventListeners({\n      rightPinnedWidthChanged: this.onPinnedRightWidthChanged.bind(this)\n    });\n  }\n  onPinnedRightWidthChanged() {\n    const rightWidth = this.pinnedWidthService.getPinnedRightWidth();\n    const displayed = rightWidth > 0;\n    _setDisplayed(this.element, displayed);\n    _setFixedWidth(this.element, rightWidth);\n  }\n  getWidth() {\n    return this.pinnedWidthService.getPinnedRightWidth();\n  }\n};\n\n// community-modules/core/src/gridBodyComp/rowContainer/rowContainerCtrl.ts\nvar getTopRowCtrls = (r) => r.getTopRowCtrls();\nvar getStickyTopRowCtrls = (r) => r.getStickyTopRowCtrls();\nvar getStickyBottomRowCtrls = (r) => r.getStickyBottomRowCtrls();\nvar getBottomRowCtrls = (r) => r.getBottomRowCtrls();\nvar getCentreRowCtrls = (r) => r.getCentreRowCtrls();\nvar ContainerCssClasses = {\n  center: {\n    type: \"center\",\n    container: \"ag-center-cols-container\",\n    viewport: \"ag-center-cols-viewport\",\n    getRowCtrls: getCentreRowCtrls\n  },\n  left: {\n    type: \"left\",\n    container: \"ag-pinned-left-cols-container\",\n    pinnedType: \"left\",\n    getRowCtrls: getCentreRowCtrls\n  },\n  right: {\n    type: \"right\",\n    container: \"ag-pinned-right-cols-container\",\n    pinnedType: \"right\",\n    getRowCtrls: getCentreRowCtrls\n  },\n  fullWidth: {\n    type: \"fullWidth\",\n    container: \"ag-full-width-container\",\n    fullWidth: true,\n    getRowCtrls: getCentreRowCtrls\n  },\n  topCenter: {\n    type: \"center\",\n    container: \"ag-floating-top-container\",\n    viewport: \"ag-floating-top-viewport\",\n    getRowCtrls: getTopRowCtrls\n  },\n  topLeft: {\n    type: \"left\",\n    container: \"ag-pinned-left-floating-top\",\n    pinnedType: \"left\",\n    getRowCtrls: getTopRowCtrls\n  },\n  topRight: {\n    type: \"right\",\n    container: \"ag-pinned-right-floating-top\",\n    pinnedType: \"right\",\n    getRowCtrls: getTopRowCtrls\n  },\n  topFullWidth: {\n    type: \"fullWidth\",\n    container: \"ag-floating-top-full-width-container\",\n    fullWidth: true,\n    getRowCtrls: getTopRowCtrls\n  },\n  stickyTopCenter: {\n    type: \"center\",\n    container: \"ag-sticky-top-container\",\n    viewport: \"ag-sticky-top-viewport\",\n    getRowCtrls: getStickyTopRowCtrls\n  },\n  stickyTopLeft: {\n    type: \"left\",\n    container: \"ag-pinned-left-sticky-top\",\n    pinnedType: \"left\",\n    getRowCtrls: getStickyTopRowCtrls\n  },\n  stickyTopRight: {\n    type: \"right\",\n    container: \"ag-pinned-right-sticky-top\",\n    pinnedType: \"right\",\n    getRowCtrls: getStickyTopRowCtrls\n  },\n  stickyTopFullWidth: {\n    type: \"fullWidth\",\n    container: \"ag-sticky-top-full-width-container\",\n    fullWidth: true,\n    getRowCtrls: getStickyTopRowCtrls\n  },\n  stickyBottomCenter: {\n    type: \"center\",\n    container: \"ag-sticky-bottom-container\",\n    viewport: \"ag-sticky-bottom-viewport\",\n    getRowCtrls: getStickyBottomRowCtrls\n  },\n  stickyBottomLeft: {\n    type: \"left\",\n    container: \"ag-pinned-left-sticky-bottom\",\n    pinnedType: \"left\",\n    getRowCtrls: getStickyBottomRowCtrls\n  },\n  stickyBottomRight: {\n    type: \"right\",\n    container: \"ag-pinned-right-sticky-bottom\",\n    pinnedType: \"right\",\n    getRowCtrls: getStickyBottomRowCtrls\n  },\n  stickyBottomFullWidth: {\n    type: \"fullWidth\",\n    container: \"ag-sticky-bottom-full-width-container\",\n    fullWidth: true,\n    getRowCtrls: getStickyBottomRowCtrls\n  },\n  bottomCenter: {\n    type: \"center\",\n    container: \"ag-floating-bottom-container\",\n    viewport: \"ag-floating-bottom-viewport\",\n    getRowCtrls: getBottomRowCtrls\n  },\n  bottomLeft: {\n    type: \"left\",\n    container: \"ag-pinned-left-floating-bottom\",\n    pinnedType: \"left\",\n    getRowCtrls: getBottomRowCtrls\n  },\n  bottomRight: {\n    type: \"right\",\n    container: \"ag-pinned-right-floating-bottom\",\n    pinnedType: \"right\",\n    getRowCtrls: getBottomRowCtrls\n  },\n  bottomFullWidth: {\n    type: \"fullWidth\",\n    container: \"ag-floating-bottom-full-width-container\",\n    fullWidth: true,\n    getRowCtrls: getBottomRowCtrls\n  }\n};\nfunction _getRowContainerOptions(name) {\n  return ContainerCssClasses[name];\n}\nvar allTopNoFW = [\"topCenter\", \"topLeft\", \"topRight\"];\nvar allBottomNoFW = [\"bottomCenter\", \"bottomLeft\", \"bottomRight\"];\nvar allMiddleNoFW = [\"center\", \"left\", \"right\"];\nvar allMiddle = [\"center\", \"left\", \"right\", \"fullWidth\"];\nvar allCenter = [\"stickyTopCenter\", \"stickyBottomCenter\", \"center\", \"topCenter\", \"bottomCenter\"];\nvar allLeft = [\"left\", \"bottomLeft\", \"topLeft\", \"stickyTopLeft\", \"stickyBottomLeft\"];\nvar allRight = [\"right\", \"bottomRight\", \"topRight\", \"stickyTopRight\", \"stickyBottomRight\"];\nvar allStickyTopNoFW = [\"stickyTopCenter\", \"stickyTopLeft\", \"stickyTopRight\"];\nvar allStickyBottomNoFW = [\"stickyBottomCenter\", \"stickyBottomLeft\", \"stickyBottomRight\"];\nvar allStickyContainers = [\n  ...allStickyTopNoFW,\n  \"stickyTopFullWidth\",\n  ...allStickyBottomNoFW,\n  \"stickyBottomFullWidth\"\n];\nvar allNoFW = [\n  ...allTopNoFW,\n  ...allBottomNoFW,\n  ...allMiddleNoFW,\n  ...allStickyTopNoFW,\n  ...allStickyBottomNoFW\n];\nvar RowContainerCtrl = class extends BeanStub {\n  constructor(name) {\n    super();\n    this.visible = true;\n    // Maintaining a constant reference enables optimization in React.\n    this.EMPTY_CTRLS = [];\n    this.name = name;\n    this.options = _getRowContainerOptions(name);\n  }\n  wireBeans(beans) {\n    this.dragService = beans.dragService;\n    this.ctrlsService = beans.ctrlsService;\n    this.columnViewportService = beans.columnViewportService;\n    this.resizeObserverService = beans.resizeObserverService;\n    this.rowRenderer = beans.rowRenderer;\n  }\n  postConstruct() {\n    this.enableRtl = this.gos.get(\"enableRtl\");\n    this.forContainers([\"center\"], () => {\n      this.viewportSizeFeature = this.createManagedBean(new ViewportSizeFeature(this));\n      this.addManagedEventListeners({\n        stickyTopOffsetChanged: this.onStickyTopOffsetChanged.bind(this)\n      });\n    });\n  }\n  onStickyTopOffsetChanged(event) {\n    this.comp.setOffsetTop(`${event.offset}px`);\n  }\n  registerWithCtrlsService() {\n    if (this.options.fullWidth)\n      return;\n    this.ctrlsService.register(this.name, this);\n  }\n  forContainers(names, callback) {\n    if (names.indexOf(this.name) >= 0) {\n      callback();\n    }\n  }\n  getContainerElement() {\n    return this.eContainer;\n  }\n  getViewportSizeFeature() {\n    return this.viewportSizeFeature;\n  }\n  setComp(view, eContainer, eViewport) {\n    this.comp = view;\n    this.eContainer = eContainer;\n    this.eViewport = eViewport;\n    this.createManagedBean(new RowContainerEventsFeature(this.eContainer));\n    this.addPreventScrollWhileDragging();\n    this.listenOnDomOrder();\n    const pinnedWidthChanged = () => this.onPinnedWidthChanged();\n    this.forContainers(allLeft, () => {\n      this.pinnedWidthFeature = this.createManagedBean(new SetPinnedLeftWidthFeature(this.eContainer));\n      this.addManagedEventListeners({ leftPinnedWidthChanged: pinnedWidthChanged });\n    });\n    this.forContainers(allRight, () => {\n      this.pinnedWidthFeature = this.createManagedBean(new SetPinnedRightWidthFeature(this.eContainer));\n      this.addManagedEventListeners({ rightPinnedWidthChanged: pinnedWidthChanged });\n    });\n    this.forContainers(\n      allMiddle,\n      () => this.createManagedBean(\n        new SetHeightFeature(this.eContainer, this.name === \"center\" ? eViewport : void 0)\n      )\n    );\n    this.forContainers(allNoFW, () => this.createManagedBean(new DragListenerFeature(this.eContainer)));\n    this.forContainers(\n      allCenter,\n      () => this.createManagedBean(new CenterWidthFeature((width) => this.comp.setContainerWidth(`${width}px`)))\n    );\n    this.visible = this.isContainerVisible();\n    this.addListeners();\n    this.registerWithCtrlsService();\n  }\n  onScrollCallback(fn) {\n    this.addManagedElementListeners(this.getViewportElement(), { scroll: fn });\n  }\n  addListeners() {\n    this.addManagedEventListeners({\n      displayedColumnsChanged: this.onDisplayedColumnsChanged.bind(this),\n      displayedColumnsWidthChanged: this.onDisplayedColumnsWidthChanged.bind(this),\n      displayedRowsChanged: (params) => this.onDisplayedRowsChanged(params.afterScroll)\n    });\n    this.onDisplayedColumnsChanged();\n    this.onDisplayedColumnsWidthChanged();\n    this.onDisplayedRowsChanged();\n  }\n  listenOnDomOrder() {\n    const isStickContainer = allStickyContainers.indexOf(this.name) >= 0;\n    if (isStickContainer) {\n      this.comp.setDomOrder(true);\n      return;\n    }\n    const listener = () => {\n      const isEnsureDomOrder = this.gos.get(\"ensureDomOrder\");\n      const isPrintLayout = _isDomLayout(this.gos, \"print\");\n      this.comp.setDomOrder(isEnsureDomOrder || isPrintLayout);\n    };\n    this.addManagedPropertyListener(\"domLayout\", listener);\n    listener();\n  }\n  onDisplayedColumnsChanged() {\n    this.forContainers([\"center\"], () => this.onHorizontalViewportChanged());\n  }\n  onDisplayedColumnsWidthChanged() {\n    this.forContainers([\"center\"], () => this.onHorizontalViewportChanged());\n  }\n  // this methods prevents the grid views from being scrolled while the dragService is being used\n  // eg. the view should not scroll up and down while dragging rows using the rowDragComp.\n  addPreventScrollWhileDragging() {\n    const preventScroll = (e) => {\n      if (this.dragService.isDragging()) {\n        if (e.cancelable) {\n          e.preventDefault();\n        }\n      }\n    };\n    this.eContainer.addEventListener(\"touchmove\", preventScroll, { passive: false });\n    this.addDestroyFunc(() => this.eContainer.removeEventListener(\"touchmove\", preventScroll));\n  }\n  // this gets called whenever a change in the viewport, so we can inform column controller it has to work\n  // out the virtual columns again. gets called from following locations:\n  // + ensureColVisible, scroll, init, layoutChanged, displayedColumnsChanged\n  onHorizontalViewportChanged(afterScroll = false) {\n    const scrollWidth = this.getCenterWidth();\n    const scrollPosition = this.getCenterViewportScrollLeft();\n    this.columnViewportService.setScrollPosition(scrollWidth, scrollPosition, afterScroll);\n  }\n  hasHorizontalScrollGap() {\n    return this.eContainer.clientWidth - this.eViewport.clientWidth < 0;\n  }\n  hasVerticalScrollGap() {\n    return this.eContainer.clientHeight - this.eViewport.clientHeight < 0;\n  }\n  getCenterWidth() {\n    return _getInnerWidth(this.eViewport);\n  }\n  getCenterViewportScrollLeft() {\n    return _getScrollLeft(this.eViewport, this.enableRtl);\n  }\n  registerViewportResizeListener(listener) {\n    const unsubscribeFromResize = this.resizeObserverService.observeResize(this.eViewport, listener);\n    this.addDestroyFunc(() => unsubscribeFromResize());\n  }\n  isViewportInTheDOMTree() {\n    return _isInDOM(this.eViewport);\n  }\n  getViewportScrollLeft() {\n    return _getScrollLeft(this.eViewport, this.enableRtl);\n  }\n  isHorizontalScrollShowing() {\n    const isAlwaysShowHorizontalScroll = this.gos.get(\"alwaysShowHorizontalScroll\");\n    return isAlwaysShowHorizontalScroll || _isHorizontalScrollShowing(this.eViewport);\n  }\n  getViewportElement() {\n    return this.eViewport;\n  }\n  setHorizontalScroll(offset) {\n    this.comp.setHorizontalScroll(offset);\n  }\n  getHScrollPosition() {\n    const res = {\n      left: this.eViewport.scrollLeft,\n      right: this.eViewport.scrollLeft + this.eViewport.offsetWidth\n    };\n    return res;\n  }\n  setCenterViewportScrollLeft(value) {\n    _setScrollLeft(this.eViewport, value, this.enableRtl);\n  }\n  isContainerVisible() {\n    const pinned = this.options.pinnedType != null;\n    return !pinned || !!this.pinnedWidthFeature && this.pinnedWidthFeature.getWidth() > 0;\n  }\n  onPinnedWidthChanged() {\n    const visible = this.isContainerVisible();\n    if (this.visible != visible) {\n      this.visible = visible;\n      this.onDisplayedRowsChanged();\n    }\n  }\n  onDisplayedRowsChanged(afterScroll = false) {\n    const rows = this.options.getRowCtrls(this.rowRenderer);\n    if (!this.visible || rows.length === 0) {\n      this.comp.setRowCtrls({ rowCtrls: this.EMPTY_CTRLS });\n      return;\n    }\n    const printLayout = _isDomLayout(this.gos, \"print\");\n    const embedFullWidthRows = this.gos.get(\"embedFullWidthRows\");\n    const embedFW = embedFullWidthRows || printLayout;\n    const rowsThisContainer = rows.filter((rowCtrl) => {\n      const fullWidthRow = rowCtrl.isFullWidth();\n      const match = this.options.fullWidth ? !embedFW && fullWidthRow : embedFW || !fullWidthRow;\n      return match;\n    });\n    this.comp.setRowCtrls({ rowCtrls: rowsThisContainer, useFlushSync: afterScroll });\n  }\n};\n\n// community-modules/core/src/gridBodyComp/gridBodyCtrl.ts\nvar CSS_CLASS_FORCE_VERTICAL_SCROLL = \"ag-force-vertical-scroll\";\nvar CSS_CLASS_CELL_SELECTABLE = \"ag-selectable\";\nvar CSS_CLASS_COLUMN_MOVING = \"ag-column-moving\";\nvar GridBodyCtrl = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.stickyTopHeight = 0;\n    this.stickyBottomHeight = 0;\n  }\n  wireBeans(beans) {\n    this.animationFrameService = beans.animationFrameService;\n    this.rowContainerHeightService = beans.rowContainerHeightService;\n    this.ctrlsService = beans.ctrlsService;\n    this.columnModel = beans.columnModel;\n    this.columnSizeService = beans.columnSizeService;\n    this.scrollVisibleService = beans.scrollVisibleService;\n    this.menuService = beans.menuService;\n    this.headerNavigationService = beans.headerNavigationService;\n    this.dragAndDropService = beans.dragAndDropService;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.rowRenderer = beans.rowRenderer;\n    this.popupService = beans.popupService;\n    this.mouseEventService = beans.mouseEventService;\n    this.rowModel = beans.rowModel;\n    this.filterManager = beans.filterManager;\n    this.environment = beans.environment;\n  }\n  getScrollFeature() {\n    return this.bodyScrollFeature;\n  }\n  getBodyViewportElement() {\n    return this.eBodyViewport;\n  }\n  setComp(comp, eGridBody, eBodyViewport, eTop, eBottom, eStickyTop, eStickyBottom) {\n    this.comp = comp;\n    this.eGridBody = eGridBody;\n    this.eBodyViewport = eBodyViewport;\n    this.eTop = eTop;\n    this.eBottom = eBottom;\n    this.eStickyTop = eStickyTop;\n    this.eStickyBottom = eStickyBottom;\n    this.eCenterColsViewport = eBodyViewport.querySelector(\n      `.${_getRowContainerOptions(\"center\").viewport}`\n    );\n    this.eFullWidthContainer = eBodyViewport.querySelector(\n      `.${_getRowContainerOptions(\"fullWidth\").container}`\n    );\n    this.eStickyTopFullWidthContainer = eStickyTop.querySelector(\n      `.${_getRowContainerOptions(\"stickyTopFullWidth\").container}`\n    );\n    this.eStickyBottomFullWidthContainer = eStickyBottom.querySelector(\n      `.${_getRowContainerOptions(\"stickyBottomFullWidth\").container}`\n    );\n    this.setCellTextSelection(this.gos.get(\"enableCellTextSelection\"));\n    this.addManagedPropertyListener(\n      \"enableCellTextSelection\",\n      (props) => this.setCellTextSelection(props.currentValue)\n    );\n    this.createManagedBean(new LayoutFeature(this.comp));\n    this.bodyScrollFeature = this.createManagedBean(new GridBodyScrollFeature(this.eBodyViewport));\n    this.addRowDragListener();\n    this.setupRowAnimationCssClass();\n    this.addEventListeners();\n    this.addFocusListeners([eTop, eBodyViewport, eBottom, eStickyTop, eStickyBottom]);\n    this.onGridColumnsChanged();\n    this.addBodyViewportListener();\n    this.setFloatingHeights();\n    this.disableBrowserDragging();\n    this.addStopEditingWhenGridLosesFocus();\n    this.updateScrollingClasses();\n    this.filterManager?.setupAdvancedFilterHeaderComp(eTop);\n    this.ctrlsService.register(\"gridBodyCtrl\", this);\n  }\n  getComp() {\n    return this.comp;\n  }\n  addEventListeners() {\n    const setFloatingHeights = this.setFloatingHeights.bind(this);\n    this.addManagedEventListeners({\n      gridColumnsChanged: this.onGridColumnsChanged.bind(this),\n      scrollVisibilityChanged: this.onScrollVisibilityChanged.bind(this),\n      scrollGapChanged: this.onScrollGapChanged.bind(this),\n      pinnedRowDataChanged: setFloatingHeights,\n      pinnedHeightChanged: setFloatingHeights,\n      headerHeightChanged: this.onHeaderHeightChanged.bind(this)\n    });\n  }\n  addFocusListeners(elements) {\n    elements.forEach((element) => {\n      this.addManagedElementListeners(element, {\n        focusin: (e) => {\n          const { target } = e;\n          const isFocusedElementNested = _isElementChildOfClass(target, \"ag-root\", element);\n          element.classList.toggle(\"ag-has-focus\", !isFocusedElementNested);\n        },\n        focusout: (e) => {\n          const { target, relatedTarget } = e;\n          const gridContainRelatedTarget = element.contains(relatedTarget);\n          const isNestedRelatedTarget = _isElementChildOfClass(\n            relatedTarget,\n            \"ag-root\",\n            element\n          );\n          const isNestedTarget = _isElementChildOfClass(target, \"ag-root\", element);\n          if (isNestedTarget) {\n            return;\n          }\n          if (!gridContainRelatedTarget || isNestedRelatedTarget) {\n            element.classList.remove(\"ag-has-focus\");\n          }\n        }\n      });\n    });\n  }\n  // used by ColumnAnimationService\n  setColumnMovingCss(moving) {\n    this.comp.setColumnMovingCss(CSS_CLASS_COLUMN_MOVING, moving);\n  }\n  setCellTextSelection(selectable = false) {\n    this.comp.setCellSelectableCss(CSS_CLASS_CELL_SELECTABLE, selectable);\n  }\n  onScrollVisibilityChanged() {\n    const visible = this.scrollVisibleService.isVerticalScrollShowing();\n    this.setVerticalScrollPaddingVisible(visible);\n    this.setStickyWidth(visible);\n    this.setStickyBottomOffsetBottom();\n    const scrollbarWidth = visible ? this.scrollVisibleService.getScrollbarWidth() || 0 : 0;\n    const pad = _isInvisibleScrollbar() ? 16 : 0;\n    const width = `calc(100% + ${scrollbarWidth + pad}px)`;\n    this.animationFrameService.requestAnimationFrame(() => this.comp.setBodyViewportWidth(width));\n    this.updateScrollingClasses();\n  }\n  onScrollGapChanged() {\n    this.updateScrollingClasses();\n  }\n  updateScrollingClasses() {\n    this.eGridBody.classList.toggle(\n      \"ag-body-vertical-content-no-gap\",\n      !this.scrollVisibleService.hasVerticalScrollGap()\n    );\n    this.eGridBody.classList.toggle(\n      \"ag-body-horizontal-content-no-gap\",\n      !this.scrollVisibleService.hasHorizontalScrollGap()\n    );\n  }\n  onGridColumnsChanged() {\n    const columns = this.columnModel.getCols();\n    this.comp.setColumnCount(columns.length);\n  }\n  // if we do not do this, then the user can select a pic in the grid (eg an image in a custom cell renderer)\n  // and then that will start the browser native drag n' drop, which messes up with our own drag and drop.\n  disableBrowserDragging() {\n    this.addManagedElementListeners(this.eGridBody, {\n      dragstart: (event) => {\n        if (event.target instanceof HTMLImageElement) {\n          event.preventDefault();\n          return false;\n        }\n      }\n    });\n  }\n  addStopEditingWhenGridLosesFocus() {\n    if (!this.gos.get(\"stopEditingWhenCellsLoseFocus\")) {\n      return;\n    }\n    const focusOutListener = (event) => {\n      const elementWithFocus = event.relatedTarget;\n      if (_getTabIndex(elementWithFocus) === null) {\n        this.rowRenderer.stopEditing();\n        return;\n      }\n      let clickInsideGrid = (\n        // see if click came from inside the viewports\n        viewports.some((viewport) => viewport.contains(elementWithFocus)) && // and also that it's not from a detail grid\n        this.mouseEventService.isElementInThisGrid(elementWithFocus)\n      );\n      if (!clickInsideGrid) {\n        const popupService = this.popupService;\n        clickInsideGrid = popupService.getActivePopups().some((popup) => popup.contains(elementWithFocus)) || popupService.isElementWithinCustomPopup(elementWithFocus);\n      }\n      if (!clickInsideGrid) {\n        this.rowRenderer.stopEditing();\n      }\n    };\n    const viewports = [this.eBodyViewport, this.eBottom, this.eTop, this.eStickyTop, this.eStickyBottom];\n    viewports.forEach((viewport) => this.addManagedElementListeners(viewport, { focusout: focusOutListener }));\n  }\n  updateRowCount() {\n    const headerCount = this.headerNavigationService.getHeaderRowCount() + (this.filterManager?.getHeaderRowCount() ?? 0);\n    const rowCount = this.rowModel.isLastRowIndexKnown() ? this.rowModel.getRowCount() : -1;\n    const total = rowCount === -1 ? -1 : headerCount + rowCount;\n    this.comp.setRowCount(total);\n  }\n  registerBodyViewportResizeListener(listener) {\n    this.comp.registerBodyViewportResizeListener(listener);\n  }\n  setVerticalScrollPaddingVisible(visible) {\n    const overflowY = visible ? \"scroll\" : \"hidden\";\n    this.comp.setPinnedTopBottomOverflowY(overflowY);\n  }\n  isVerticalScrollShowing() {\n    const show = this.gos.get(\"alwaysShowVerticalScroll\");\n    const cssClass = show ? CSS_CLASS_FORCE_VERTICAL_SCROLL : null;\n    const allowVerticalScroll = _isDomLayout(this.gos, \"normal\");\n    this.comp.setAlwaysVerticalScrollClass(cssClass, show);\n    return show || allowVerticalScroll && _isVerticalScrollShowing(this.eBodyViewport);\n  }\n  setupRowAnimationCssClass() {\n    let initialSizeMeasurementComplete = this.environment.hasMeasuredSizes();\n    const updateAnimationClass = () => {\n      const animateRows = initialSizeMeasurementComplete && _isAnimateRows(this.gos) && !this.rowContainerHeightService.isStretching();\n      const animateRowsCssClass = animateRows ? \"ag-row-animation\" : \"ag-row-no-animation\";\n      this.comp.setRowAnimationCssOnBodyViewport(animateRowsCssClass, animateRows);\n    };\n    updateAnimationClass();\n    this.addManagedEventListeners({ heightScaleChanged: updateAnimationClass });\n    this.addManagedPropertyListener(\"animateRows\", updateAnimationClass);\n    this.addManagedEventListeners({\n      gridStylesChanged: () => {\n        if (!initialSizeMeasurementComplete && this.environment.hasMeasuredSizes()) {\n          initialSizeMeasurementComplete = true;\n          updateAnimationClass();\n        }\n      }\n    });\n  }\n  getGridBodyElement() {\n    return this.eGridBody;\n  }\n  addBodyViewportListener() {\n    const listener = this.onBodyViewportContextMenu.bind(this);\n    this.addManagedElementListeners(this.eBodyViewport, { contextmenu: listener });\n    this.mockContextMenuForIPad(listener);\n    this.addManagedElementListeners(this.eBodyViewport, { wheel: this.onBodyViewportWheel.bind(this) });\n    this.addManagedElementListeners(this.eStickyTop, { wheel: this.onStickyWheel.bind(this) });\n    this.addManagedElementListeners(this.eStickyBottom, { wheel: this.onStickyWheel.bind(this) });\n    this.addFullWidthContainerWheelListener();\n  }\n  addFullWidthContainerWheelListener() {\n    this.addManagedElementListeners(this.eFullWidthContainer, {\n      wheel: (e) => this.onFullWidthContainerWheel(e)\n    });\n  }\n  onFullWidthContainerWheel(e) {\n    const { deltaX, deltaY, shiftKey } = e;\n    const isHorizontalScroll = shiftKey || Math.abs(deltaX) > Math.abs(deltaY);\n    if (isHorizontalScroll && this.mouseEventService.isEventFromThisGrid(e)) {\n      this.scrollGridBodyToMatchEvent(e);\n    }\n  }\n  onStickyWheel(e) {\n    const { deltaX, deltaY, shiftKey } = e;\n    const isHorizontalScroll = shiftKey || Math.abs(deltaX) > Math.abs(deltaY);\n    const target = e.target;\n    if (!isHorizontalScroll) {\n      e.preventDefault();\n      this.scrollVertically(deltaY);\n    } else if (this.eStickyTopFullWidthContainer.contains(target) || this.eStickyBottomFullWidthContainer.contains(target)) {\n      this.scrollGridBodyToMatchEvent(e);\n    }\n  }\n  scrollGridBodyToMatchEvent(e) {\n    const { deltaX, deltaY } = e;\n    e.preventDefault();\n    this.eCenterColsViewport.scrollBy({ left: deltaX || deltaY });\n  }\n  onBodyViewportContextMenu(mouseEvent, touch, touchEvent) {\n    if (!mouseEvent && !touchEvent) {\n      return;\n    }\n    if (this.gos.get(\"preventDefaultOnContextMenu\")) {\n      const event = mouseEvent || touchEvent;\n      event.preventDefault();\n    }\n    const { target } = mouseEvent || touch;\n    if (target === this.eBodyViewport || target === this.ctrlsService.get(\"center\").getViewportElement()) {\n      this.menuService.showContextMenu({\n        mouseEvent,\n        touchEvent,\n        value: null,\n        anchorToElement: this.eGridBody\n      });\n    }\n  }\n  mockContextMenuForIPad(listener) {\n    if (!_isIOSUserAgent()) {\n      return;\n    }\n    const touchListener = new TouchListener(this.eBodyViewport);\n    const longTapListener = (event) => {\n      listener(void 0, event.touchStart, event.touchEvent);\n    };\n    this.addManagedListeners(touchListener, { longTap: longTapListener });\n    this.addDestroyFunc(() => touchListener.destroy());\n  }\n  onBodyViewportWheel(e) {\n    if (!this.gos.get(\"suppressScrollWhenPopupsAreOpen\")) {\n      return;\n    }\n    if (this.popupService.hasAnchoredPopup()) {\n      e.preventDefault();\n    }\n  }\n  getGui() {\n    return this.eGridBody;\n  }\n  // called by rowDragFeature\n  scrollVertically(pixels) {\n    const oldScrollPosition = this.eBodyViewport.scrollTop;\n    this.bodyScrollFeature.setVerticalScrollPosition(oldScrollPosition + pixels);\n    return this.eBodyViewport.scrollTop - oldScrollPosition;\n  }\n  addRowDragListener() {\n    this.rowDragFeature = this.createManagedBean(new RowDragFeature(this.eBodyViewport));\n    this.dragAndDropService.addDropTarget(this.rowDragFeature);\n    this.addDestroyFunc(() => this.dragAndDropService.removeDropTarget(this.rowDragFeature));\n  }\n  getRowDragFeature() {\n    return this.rowDragFeature;\n  }\n  setFloatingHeights() {\n    const { pinnedRowModel } = this;\n    const floatingTopHeight = pinnedRowModel.getPinnedTopTotalHeight();\n    const floatingBottomHeight = pinnedRowModel.getPinnedBottomTotalHeight();\n    this.comp.setTopHeight(floatingTopHeight);\n    this.comp.setBottomHeight(floatingBottomHeight);\n    this.comp.setTopDisplay(floatingTopHeight ? \"inherit\" : \"none\");\n    this.comp.setBottomDisplay(floatingBottomHeight ? \"inherit\" : \"none\");\n    this.setStickyTopOffsetTop();\n    this.setStickyBottomOffsetBottom();\n  }\n  setStickyTopHeight(height = 0) {\n    this.comp.setStickyTopHeight(`${height}px`);\n    this.stickyTopHeight = height;\n  }\n  getStickyTopHeight() {\n    return this.stickyTopHeight;\n  }\n  setStickyBottomHeight(height = 0) {\n    this.comp.setStickyBottomHeight(`${height}px`);\n    this.stickyBottomHeight = height;\n  }\n  getStickyBottomHeight() {\n    return this.stickyBottomHeight;\n  }\n  setStickyWidth(vScrollVisible) {\n    if (!vScrollVisible) {\n      this.comp.setStickyTopWidth(\"100%\");\n      this.comp.setStickyBottomWidth(\"100%\");\n    } else {\n      const scrollbarWidth = this.scrollVisibleService.getScrollbarWidth();\n      this.comp.setStickyTopWidth(`calc(100% - ${scrollbarWidth}px)`);\n      this.comp.setStickyBottomWidth(`calc(100% - ${scrollbarWidth}px)`);\n    }\n  }\n  onHeaderHeightChanged() {\n    this.setStickyTopOffsetTop();\n  }\n  setStickyTopOffsetTop() {\n    const headerCtrl = this.ctrlsService.get(\"gridHeaderCtrl\");\n    const headerHeight = headerCtrl.getHeaderHeight() + (this.filterManager?.getHeaderHeight() ?? 0);\n    const pinnedTopHeight = this.pinnedRowModel.getPinnedTopTotalHeight();\n    let height = 0;\n    if (headerHeight > 0) {\n      height += headerHeight;\n    }\n    if (pinnedTopHeight > 0) {\n      height += pinnedTopHeight;\n    }\n    if (height > 0) {\n      height += 1;\n    }\n    this.comp.setStickyTopTop(`${height}px`);\n  }\n  setStickyBottomOffsetBottom() {\n    const pinnedBottomHeight = this.pinnedRowModel.getPinnedBottomTotalHeight();\n    const hScrollShowing = this.scrollVisibleService.isHorizontalScrollShowing();\n    const scrollbarWidth = hScrollShowing ? this.scrollVisibleService.getScrollbarWidth() || 0 : 0;\n    const height = pinnedBottomHeight + scrollbarWidth;\n    this.comp.setStickyBottomBottom(`${height}px`);\n  }\n  // method will call itself if no available width. this covers if the grid\n  // isn't visible, but is just about to be visible.\n  sizeColumnsToFit(params, nextTimeout) {\n    const removeScrollWidth = this.isVerticalScrollShowing();\n    const scrollWidthToRemove = removeScrollWidth ? this.scrollVisibleService.getScrollbarWidth() : 0;\n    const bodyViewportWidth = _getInnerWidth(this.eGridBody);\n    const availableWidth = bodyViewportWidth - scrollWidthToRemove;\n    if (availableWidth > 0) {\n      this.columnSizeService.sizeColumnsToFit(availableWidth, \"sizeColumnsToFit\", false, params);\n      return;\n    }\n    if (nextTimeout === void 0) {\n      window.setTimeout(() => {\n        this.sizeColumnsToFit(params, 100);\n      }, 0);\n    } else if (nextTimeout === 100) {\n      window.setTimeout(() => {\n        this.sizeColumnsToFit(params, 500);\n      }, 100);\n    } else if (nextTimeout === 500) {\n      window.setTimeout(() => {\n        this.sizeColumnsToFit(params, -1);\n      }, 500);\n    } else {\n      _warnOnce(\n        \"tried to call sizeColumnsToFit() but the grid is coming back with zero width, maybe the grid is not visible yet on the screen?\"\n      );\n    }\n  }\n  // + rangeService\n  addScrollEventListener(listener) {\n    this.eBodyViewport.addEventListener(\"scroll\", listener, { passive: true });\n  }\n  // + focusService\n  removeScrollEventListener(listener) {\n    this.eBodyViewport.removeEventListener(\"scroll\", listener);\n  }\n};\n\n// community-modules/core/src/rendering/cell/cellComp.ts\nvar CellComp = class extends Component {\n  constructor(beans, cellCtrl, printLayout, eRow, editingRow) {\n    super();\n    // every time we go into edit mode, or back again, this gets incremented.\n    // it's the components way of dealing with the async nature of framework components,\n    // so if a framework component takes a while to be created, we know if the object\n    // is still relevant when creating is finished. eg we could click edit / un-edit 20\n    // times before the first React edit component comes back - we should discard\n    // the first 19.\n    this.rendererVersion = 0;\n    this.editorVersion = 0;\n    this.beans = beans;\n    this.column = cellCtrl.getColumn();\n    this.rowNode = cellCtrl.getRowNode();\n    this.rowCtrl = cellCtrl.getRowCtrl();\n    this.eRow = eRow;\n    this.cellCtrl = cellCtrl;\n    const cellDiv = document.createElement(\"div\");\n    cellDiv.setAttribute(\"comp-id\", `${this.getCompId()}`);\n    this.setTemplateFromElement(cellDiv);\n    const eGui = this.getGui();\n    this.forceWrapper = cellCtrl.isForceWrapper();\n    this.refreshWrapper(false);\n    _setAriaRole(eGui, cellCtrl.getCellAriaRole());\n    eGui.setAttribute(\"col-id\", cellCtrl.colIdSanitised);\n    const compProxy = {\n      addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n      setUserStyles: (styles) => _addStylesToElement(eGui, styles),\n      getFocusableElement: () => this.getFocusableElement(),\n      setIncludeSelection: (include) => this.includeSelection = include,\n      setIncludeRowDrag: (include) => this.includeRowDrag = include,\n      setIncludeDndSource: (include) => this.includeDndSource = include,\n      setRenderDetails: (compDetails, valueToDisplay, force) => this.setRenderDetails(compDetails, valueToDisplay, force),\n      setEditDetails: (compDetails, popup, position) => this.setEditDetails(compDetails, popup, position),\n      getCellEditor: () => this.cellEditor || null,\n      getCellRenderer: () => this.cellRenderer || null,\n      getParentOfValue: () => this.getParentOfValue()\n    };\n    cellCtrl.setComp(compProxy, this.getGui(), this.eCellWrapper, printLayout, editingRow, void 0);\n  }\n  getParentOfValue() {\n    if (this.eCellValue) {\n      return this.eCellValue;\n    }\n    if (this.eCellWrapper) {\n      return this.eCellWrapper;\n    }\n    return this.getGui();\n  }\n  setRenderDetails(compDetails, valueToDisplay, forceNewCellRendererInstance) {\n    const isInlineEditing = this.cellEditor && !this.cellEditorPopupWrapper;\n    if (isInlineEditing) {\n      return;\n    }\n    this.firstRender = this.firstRender == null;\n    const controlWrapperChanged = this.refreshWrapper(false);\n    this.refreshEditStyles(false);\n    if (compDetails) {\n      const neverRefresh = forceNewCellRendererInstance || controlWrapperChanged;\n      const cellRendererRefreshSuccessful = neverRefresh ? false : this.refreshCellRenderer(compDetails);\n      if (!cellRendererRefreshSuccessful) {\n        this.destroyRenderer();\n        this.createCellRendererInstance(compDetails);\n      }\n    } else {\n      this.destroyRenderer();\n      this.insertValueWithoutCellRenderer(valueToDisplay);\n    }\n  }\n  setEditDetails(compDetails, popup, position) {\n    if (compDetails) {\n      this.createCellEditorInstance(compDetails, popup, position);\n    } else {\n      this.destroyEditor();\n    }\n  }\n  removeControls() {\n    this.checkboxSelectionComp = this.beans.context.destroyBean(this.checkboxSelectionComp);\n    this.dndSourceComp = this.beans.context.destroyBean(this.dndSourceComp);\n    this.rowDraggingComp = this.beans.context.destroyBean(this.rowDraggingComp);\n  }\n  // returns true if wrapper was changed\n  refreshWrapper(editing) {\n    const providingControls = this.includeRowDrag || this.includeDndSource || this.includeSelection;\n    const usingWrapper = providingControls || this.forceWrapper;\n    const putWrapperIn = usingWrapper && this.eCellWrapper == null;\n    if (putWrapperIn) {\n      const wrapperDiv = document.createElement(\"div\");\n      wrapperDiv.setAttribute(\"role\", \"presentation\");\n      wrapperDiv.setAttribute(\"class\", \"ag-cell-wrapper\");\n      this.eCellWrapper = wrapperDiv;\n      this.getGui().appendChild(this.eCellWrapper);\n    }\n    const takeWrapperOut = !usingWrapper && this.eCellWrapper != null;\n    if (takeWrapperOut) {\n      _removeFromParent(this.eCellWrapper);\n      this.eCellWrapper = void 0;\n    }\n    this.addOrRemoveCssClass(\"ag-cell-value\", !usingWrapper);\n    const usingCellValue = !editing && usingWrapper;\n    const putCellValueIn = usingCellValue && this.eCellValue == null;\n    if (putCellValueIn) {\n      const cellSpan = document.createElement(\"span\");\n      cellSpan.setAttribute(\"role\", \"presentation\");\n      cellSpan.setAttribute(\"class\", \"ag-cell-value\");\n      this.eCellValue = cellSpan;\n      this.eCellWrapper.appendChild(this.eCellValue);\n    }\n    const takeCellValueOut = !usingCellValue && this.eCellValue != null;\n    if (takeCellValueOut) {\n      _removeFromParent(this.eCellValue);\n      this.eCellValue = void 0;\n    }\n    const templateChanged = putWrapperIn || takeWrapperOut || putCellValueIn || takeCellValueOut;\n    if (templateChanged) {\n      this.removeControls();\n    }\n    if (!editing) {\n      if (providingControls) {\n        this.addControls();\n      }\n    }\n    return templateChanged;\n  }\n  addControls() {\n    if (this.includeRowDrag) {\n      if (this.rowDraggingComp == null) {\n        this.rowDraggingComp = this.cellCtrl.createRowDragComp();\n        if (this.rowDraggingComp) {\n          this.eCellWrapper.insertBefore(this.rowDraggingComp.getGui(), this.eCellValue);\n        }\n      }\n    }\n    if (this.includeDndSource) {\n      if (this.dndSourceComp == null) {\n        this.dndSourceComp = this.cellCtrl.createDndSource();\n        this.eCellWrapper.insertBefore(this.dndSourceComp.getGui(), this.eCellValue);\n      }\n    }\n    if (this.includeSelection) {\n      if (this.checkboxSelectionComp == null) {\n        this.checkboxSelectionComp = this.cellCtrl.createSelectionCheckbox();\n        this.eCellWrapper.insertBefore(this.checkboxSelectionComp.getGui(), this.eCellValue);\n      }\n    }\n  }\n  createCellEditorInstance(compDetails, popup, position) {\n    const versionCopy = this.editorVersion;\n    const cellEditorPromise = compDetails.newAgStackInstance();\n    if (cellEditorPromise == null) {\n      return;\n    }\n    const { params } = compDetails;\n    cellEditorPromise.then((c) => this.afterCellEditorCreated(versionCopy, c, params, popup, position));\n    const cellEditorAsync = _missing(this.cellEditor);\n    if (cellEditorAsync && params.cellStartedEdit) {\n      this.cellCtrl.focusCell(true);\n    }\n  }\n  insertValueWithoutCellRenderer(valueToDisplay) {\n    const eParent = this.getParentOfValue();\n    _clearElement(eParent);\n    const escapedValue = valueToDisplay != null ? _escapeString(valueToDisplay, true) : null;\n    if (escapedValue != null) {\n      eParent.textContent = escapedValue;\n    }\n  }\n  destroyEditorAndRenderer() {\n    this.destroyRenderer();\n    this.destroyEditor();\n  }\n  destroyRenderer() {\n    const { context } = this.beans;\n    this.cellRenderer = context.destroyBean(this.cellRenderer);\n    _removeFromParent(this.cellRendererGui);\n    this.cellRendererGui = null;\n    this.rendererVersion++;\n  }\n  destroyEditor() {\n    const { context } = this.beans;\n    if (this.hideEditorPopup) {\n      this.hideEditorPopup();\n    }\n    this.hideEditorPopup = void 0;\n    this.cellEditor = context.destroyBean(this.cellEditor);\n    this.cellEditorPopupWrapper = context.destroyBean(this.cellEditorPopupWrapper);\n    _removeFromParent(this.cellEditorGui);\n    this.cellEditorGui = null;\n    this.editorVersion++;\n  }\n  refreshCellRenderer(compClassAndParams) {\n    if (this.cellRenderer == null || this.cellRenderer.refresh == null) {\n      return false;\n    }\n    if (this.cellRendererClass !== compClassAndParams.componentClass) {\n      return false;\n    }\n    const result = this.cellRenderer.refresh(compClassAndParams.params);\n    return result === true || result === void 0;\n  }\n  createCellRendererInstance(compDetails) {\n    const suppressAnimationFrame = this.beans.gos.get(\"suppressAnimationFrame\");\n    const useTaskService = !suppressAnimationFrame;\n    const displayComponentVersionCopy = this.rendererVersion;\n    const { componentClass } = compDetails;\n    const createCellRendererFunc = () => {\n      const staleTask = this.rendererVersion !== displayComponentVersionCopy || !this.isAlive();\n      if (staleTask) {\n        return;\n      }\n      const componentPromise = compDetails.newAgStackInstance();\n      const callback = this.afterCellRendererCreated.bind(this, displayComponentVersionCopy, componentClass);\n      if (componentPromise) {\n        componentPromise.then(callback);\n      }\n    };\n    if (useTaskService && this.firstRender) {\n      this.beans.animationFrameService.createTask(\n        createCellRendererFunc,\n        this.rowNode.rowIndex,\n        \"createTasksP2\"\n      );\n    } else {\n      createCellRendererFunc();\n    }\n  }\n  getCtrl() {\n    return this.cellCtrl;\n  }\n  getRowCtrl() {\n    return this.rowCtrl;\n  }\n  getCellRenderer() {\n    return this.cellRenderer;\n  }\n  getCellEditor() {\n    return this.cellEditor;\n  }\n  afterCellRendererCreated(cellRendererVersion, cellRendererClass, cellRenderer) {\n    const staleTask = !this.isAlive() || cellRendererVersion !== this.rendererVersion;\n    if (staleTask) {\n      this.beans.context.destroyBean(cellRenderer);\n      return;\n    }\n    this.cellRenderer = cellRenderer;\n    this.cellRendererClass = cellRendererClass;\n    this.cellRendererGui = this.cellRenderer.getGui();\n    if (this.cellRendererGui != null) {\n      const eParent = this.getParentOfValue();\n      _clearElement(eParent);\n      eParent.appendChild(this.cellRendererGui);\n    }\n  }\n  afterCellEditorCreated(requestVersion, cellEditor, params, popup, position) {\n    const staleComp = requestVersion !== this.editorVersion;\n    if (staleComp) {\n      this.beans.context.destroyBean(cellEditor);\n      return;\n    }\n    const editingCancelledByUserComp = cellEditor.isCancelBeforeStart && cellEditor.isCancelBeforeStart();\n    if (editingCancelledByUserComp) {\n      this.beans.context.destroyBean(cellEditor);\n      this.cellCtrl.stopEditing(true);\n      return;\n    }\n    if (!cellEditor.getGui) {\n      _warnOnce(`cellEditor for column ${this.column.getId()} is missing getGui() method`);\n      this.beans.context.destroyBean(cellEditor);\n      return;\n    }\n    this.cellEditor = cellEditor;\n    this.cellEditorGui = cellEditor.getGui();\n    const cellEditorInPopup = popup || cellEditor.isPopup !== void 0 && cellEditor.isPopup();\n    if (cellEditorInPopup) {\n      this.addPopupCellEditor(params, position);\n    } else {\n      this.addInCellEditor();\n    }\n    this.refreshEditStyles(true, cellEditorInPopup);\n    if (cellEditor.afterGuiAttached) {\n      cellEditor.afterGuiAttached();\n    }\n    this.cellCtrl.cellEditorAttached();\n  }\n  refreshEditStyles(editing, isPopup) {\n    this.addOrRemoveCssClass(\"ag-cell-inline-editing\", editing && !isPopup);\n    this.addOrRemoveCssClass(\"ag-cell-popup-editing\", editing && !!isPopup);\n    this.addOrRemoveCssClass(\"ag-cell-not-inline-editing\", !editing || !!isPopup);\n    this.rowCtrl?.setInlineEditingCss();\n  }\n  addInCellEditor() {\n    const eGui = this.getGui();\n    if (eGui.contains(_getActiveDomElement(this.beans.gos))) {\n      eGui.focus();\n    }\n    this.destroyRenderer();\n    this.refreshWrapper(true);\n    this.clearParentOfValue();\n    if (this.cellEditorGui) {\n      const eParent = this.getParentOfValue();\n      eParent.appendChild(this.cellEditorGui);\n    }\n  }\n  addPopupCellEditor(params, position) {\n    if (this.beans.gos.get(\"editType\") === \"fullRow\") {\n      _warnOnce(\n        \"popup cellEditor does not work with fullRowEdit - you cannot use them both - either turn off fullRowEdit, or stop using popup editors.\"\n      );\n    }\n    const cellEditor = this.cellEditor;\n    this.cellEditorPopupWrapper = this.beans.context.createBean(\n      this.beans.editService.createPopupEditorWrapper(params)\n    );\n    const ePopupGui = this.cellEditorPopupWrapper.getGui();\n    if (this.cellEditorGui) {\n      ePopupGui.appendChild(this.cellEditorGui);\n    }\n    const popupService = this.beans.popupService;\n    const useModelPopup = this.beans.gos.get(\"stopEditingWhenCellsLoseFocus\");\n    const positionToUse = position != null ? position : cellEditor.getPopupPosition?.() ?? \"over\";\n    const isRtl = this.beans.gos.get(\"enableRtl\");\n    const positionParams = {\n      ePopup: ePopupGui,\n      column: this.column,\n      rowNode: this.rowNode,\n      type: \"popupCellEditor\",\n      eventSource: this.getGui(),\n      position: positionToUse,\n      alignSide: isRtl ? \"right\" : \"left\",\n      keepWithinBounds: true\n    };\n    const positionCallback = popupService.positionPopupByComponent.bind(popupService, positionParams);\n    const translate = this.beans.localeService.getLocaleTextFunc();\n    const addPopupRes = popupService.addPopup({\n      modal: useModelPopup,\n      eChild: ePopupGui,\n      closeOnEsc: true,\n      closedCallback: () => {\n        this.cellCtrl.onPopupEditorClosed();\n      },\n      anchorToElement: this.getGui(),\n      positionCallback,\n      ariaLabel: translate(\"ariaLabelCellEditor\", \"Cell Editor\")\n    });\n    if (addPopupRes) {\n      this.hideEditorPopup = addPopupRes.hideFunc;\n    }\n  }\n  detach() {\n    this.eRow.removeChild(this.getGui());\n  }\n  // if the row is also getting destroyed, then we don't need to remove from dom,\n  // as the row will also get removed, so no need to take out the cells from the row\n  // if the row is going (removing is an expensive operation, so only need to remove\n  // the top part)\n  //\n  // note - this is NOT called by context, as we don't wire / unwire the CellComp for performance reasons.\n  destroy() {\n    this.cellCtrl.stopEditing();\n    this.destroyEditorAndRenderer();\n    this.removeControls();\n    super.destroy();\n  }\n  clearParentOfValue() {\n    const eGui = this.getGui();\n    if (eGui.contains(_getActiveDomElement(this.beans.gos)) && _browserSupportsPreventScroll()) {\n      eGui.focus({ preventScroll: true });\n    }\n    _clearElement(this.getParentOfValue());\n  }\n};\n\n// community-modules/core/src/rendering/row/rowComp.ts\nvar RowComp = class extends Component {\n  constructor(ctrl, beans, containerType) {\n    super();\n    this.cellComps = {};\n    this.beans = beans;\n    this.rowCtrl = ctrl;\n    const rowDiv = document.createElement(\"div\");\n    rowDiv.setAttribute(\"comp-id\", `${this.getCompId()}`);\n    this.setInitialStyle(rowDiv, containerType);\n    this.setTemplateFromElement(rowDiv);\n    const eGui = this.getGui();\n    const style = eGui.style;\n    this.domOrder = this.rowCtrl.getDomOrder();\n    _setAriaRole(eGui, \"row\");\n    const compProxy = {\n      setDomOrder: (domOrder) => this.domOrder = domOrder,\n      setCellCtrls: (cellCtrls) => this.setCellCtrls(cellCtrls),\n      showFullWidth: (compDetails) => this.showFullWidth(compDetails),\n      getFullWidthCellRenderer: () => this.fullWidthCellRenderer,\n      addOrRemoveCssClass: (name, on) => this.addOrRemoveCssClass(name, on),\n      setUserStyles: (styles) => _addStylesToElement(eGui, styles),\n      setTop: (top) => style.top = top,\n      setTransform: (transform) => style.transform = transform,\n      setRowIndex: (rowIndex) => eGui.setAttribute(\"row-index\", rowIndex),\n      setRowId: (rowId) => eGui.setAttribute(\"row-id\", rowId),\n      setRowBusinessKey: (businessKey) => eGui.setAttribute(\"row-business-key\", businessKey),\n      refreshFullWidth: (getUpdatedParams) => this.fullWidthCellRenderer?.refresh?.(getUpdatedParams()) ?? false\n    };\n    ctrl.setComp(compProxy, this.getGui(), containerType, void 0);\n    this.addDestroyFunc(() => {\n      ctrl.unsetComp(containerType);\n    });\n  }\n  setInitialStyle(container, containerType) {\n    const transform = this.rowCtrl.getInitialTransform(containerType);\n    if (transform) {\n      container.style.setProperty(\"transform\", transform);\n    } else {\n      const top = this.rowCtrl.getInitialRowTop(containerType);\n      if (top) {\n        container.style.setProperty(\"top\", top);\n      }\n    }\n  }\n  showFullWidth(compDetails) {\n    const callback = (cellRenderer) => {\n      if (this.isAlive()) {\n        const eGui = cellRenderer.getGui();\n        this.getGui().appendChild(eGui);\n        this.rowCtrl.setupDetailRowAutoHeight(eGui);\n        this.setFullWidthRowComp(cellRenderer);\n      } else {\n        this.beans.context.destroyBean(cellRenderer);\n      }\n    };\n    const res = compDetails.newAgStackInstance();\n    if (res == null) {\n      return;\n    }\n    res.then(callback);\n  }\n  setCellCtrls(cellCtrls) {\n    const cellsToRemove = Object.assign({}, this.cellComps);\n    cellCtrls.forEach((cellCtrl) => {\n      const key = cellCtrl.instanceId;\n      const existingCellComp = this.cellComps[key];\n      if (existingCellComp == null) {\n        this.newCellComp(cellCtrl);\n      } else {\n        cellsToRemove[key] = null;\n      }\n    });\n    const cellCompsToRemove = _getAllValuesInObject(cellsToRemove).filter((cellComp) => cellComp != null);\n    this.destroyCells(cellCompsToRemove);\n    this.ensureDomOrder(cellCtrls);\n  }\n  ensureDomOrder(cellCtrls) {\n    if (!this.domOrder) {\n      return;\n    }\n    const elementsInOrder = [];\n    cellCtrls.forEach((cellCtrl) => {\n      const cellComp = this.cellComps[cellCtrl.instanceId];\n      if (cellComp) {\n        elementsInOrder.push(cellComp.getGui());\n      }\n    });\n    _setDomChildOrder(this.getGui(), elementsInOrder);\n  }\n  newCellComp(cellCtrl) {\n    const cellComp = new CellComp(\n      this.beans,\n      cellCtrl,\n      this.rowCtrl.isPrintLayout(),\n      this.getGui(),\n      this.rowCtrl.isEditing()\n    );\n    this.cellComps[cellCtrl.instanceId] = cellComp;\n    this.getGui().appendChild(cellComp.getGui());\n  }\n  destroy() {\n    super.destroy();\n    this.destroyAllCells();\n  }\n  destroyAllCells() {\n    const cellsToDestroy = _getAllValuesInObject(this.cellComps).filter((cp) => cp != null);\n    this.destroyCells(cellsToDestroy);\n  }\n  setFullWidthRowComp(fullWidthRowComponent) {\n    if (this.fullWidthCellRenderer) {\n      _errorOnce(\"should not be setting fullWidthRowComponent twice\");\n    }\n    this.fullWidthCellRenderer = fullWidthRowComponent;\n    this.addDestroyFunc(() => {\n      this.fullWidthCellRenderer = this.beans.context.destroyBean(this.fullWidthCellRenderer);\n    });\n  }\n  destroyCells(cellComps) {\n    cellComps.forEach((cellComp) => {\n      if (!cellComp) {\n        return;\n      }\n      const instanceId = cellComp.getCtrl().instanceId;\n      if (this.cellComps[instanceId] !== cellComp) {\n        return;\n      }\n      cellComp.detach();\n      cellComp.destroy();\n      this.cellComps[instanceId] = null;\n    });\n  }\n};\n\n// community-modules/core/src/gridBodyComp/rowContainer/rowContainerComp.ts\nfunction templateFactory(options) {\n  let res;\n  if (options.type === \"center\") {\n    res = /* html */\n    `<div class=\"${options.viewport}\" data-ref=\"eViewport\" role=\"presentation\">\n                <div class=\"${options.container}\" data-ref=\"eContainer\" role=\"rowgroup\"></div>\n            </div>`;\n  } else {\n    res = /* html */\n    `<div class=\"${options.container}\" data-ref=\"eContainer\" role=\"rowgroup\"></div>`;\n  }\n  return res;\n}\nvar RowContainerComp = class extends Component {\n  constructor() {\n    super();\n    this.eViewport = RefPlaceholder;\n    this.eContainer = RefPlaceholder;\n    this.rowComps = {};\n    this.name = Component.elementGettingCreated.getAttribute(\"name\");\n    this.options = _getRowContainerOptions(this.name);\n    this.setTemplate(templateFactory(this.options));\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n  }\n  postConstruct() {\n    const compProxy = {\n      setHorizontalScroll: (offset) => this.eViewport.scrollLeft = offset,\n      setViewportHeight: (height) => this.eViewport.style.height = height,\n      setRowCtrls: ({ rowCtrls }) => this.setRowCtrls(rowCtrls),\n      setDomOrder: (domOrder) => {\n        this.domOrder = domOrder;\n      },\n      setContainerWidth: (width) => this.eContainer.style.width = width,\n      setOffsetTop: (offset) => this.eContainer.style.transform = `translateY(${offset})`\n    };\n    const ctrl = this.createManagedBean(new RowContainerCtrl(this.name));\n    ctrl.setComp(compProxy, this.eContainer, this.eViewport);\n  }\n  destroy() {\n    this.setRowCtrls([]);\n    super.destroy();\n    this.lastPlacedElement = null;\n  }\n  setRowCtrls(rowCtrls) {\n    const { rowComps, beans, options } = this;\n    const oldRows = { ...rowComps };\n    this.rowComps = {};\n    this.lastPlacedElement = null;\n    const orderedRows = [];\n    for (const rowCtrl of rowCtrls) {\n      const instanceId = rowCtrl.instanceId;\n      const existingRowComp = oldRows[instanceId];\n      let rowComp;\n      if (existingRowComp) {\n        rowComp = existingRowComp;\n        delete oldRows[instanceId];\n      } else {\n        if (!rowCtrl.getRowNode().displayed) {\n          continue;\n        }\n        rowComp = new RowComp(rowCtrl, beans, options.type);\n      }\n      this.rowComps[instanceId] = rowComp;\n      orderedRows.push([rowComp, !existingRowComp]);\n    }\n    this.removeOldRows(Object.values(oldRows));\n    this.addRowNodes(orderedRows);\n  }\n  addRowNodes(rows) {\n    const { domOrder, eContainer } = this;\n    for (const [rowComp, isNew] of rows) {\n      const eGui = rowComp.getGui();\n      if (!domOrder) {\n        if (isNew) {\n          eContainer.appendChild(eGui);\n        }\n      } else {\n        this.ensureDomOrder(eGui);\n      }\n    }\n  }\n  removeOldRows(rowComps) {\n    const { eContainer } = this;\n    for (const oldRowComp of rowComps) {\n      eContainer.removeChild(oldRowComp.getGui());\n      oldRowComp.destroy();\n    }\n  }\n  ensureDomOrder(eRow) {\n    if (!this.domOrder) {\n      return;\n    }\n    _ensureDomOrder(this.eContainer, eRow, this.lastPlacedElement);\n    this.lastPlacedElement = eRow;\n  }\n};\nvar RowContainerSelector = {\n  selector: \"AG-ROW-CONTAINER\",\n  component: RowContainerComp\n};\n\n// community-modules/core/src/gridBodyComp/gridBodyComp.ts\nfunction makeRowContainers(names) {\n  return names.map((name) => `<ag-row-container name=\"${name}\"></ag-row-container>`).join(\"\");\n}\nvar GRID_BODY_TEMPLATE = (\n  /* html */\n  `<div class=\"ag-root ag-unselectable\" role=\"treegrid\">\n        <ag-header-root></ag-header-root>\n        <div class=\"ag-floating-top\" data-ref=\"eTop\" role=\"presentation\">\n            ${makeRowContainers([\"topLeft\", \"topCenter\", \"topRight\", \"topFullWidth\"])}\n        </div>\n        <div class=\"ag-body\" data-ref=\"eBody\" role=\"presentation\">\n            <div class=\"ag-body-viewport\" data-ref=\"eBodyViewport\" role=\"presentation\">\n            ${makeRowContainers([\"left\", \"center\", \"right\", \"fullWidth\"])}\n            </div>\n            <ag-fake-vertical-scroll></ag-fake-vertical-scroll>\n        </div>\n        <div class=\"ag-sticky-top\" data-ref=\"eStickyTop\" role=\"presentation\">\n            ${makeRowContainers([\"stickyTopLeft\", \"stickyTopCenter\", \"stickyTopRight\", \"stickyTopFullWidth\"])}\n        </div>\n        <div class=\"ag-sticky-bottom\" data-ref=\"eStickyBottom\" role=\"presentation\">\n            ${makeRowContainers([\"stickyBottomLeft\", \"stickyBottomCenter\", \"stickyBottomRight\", \"stickyBottomFullWidth\"])}\n        </div>\n        <div class=\"ag-floating-bottom\" data-ref=\"eBottom\" role=\"presentation\">\n            ${makeRowContainers([\"bottomLeft\", \"bottomCenter\", \"bottomRight\", \"bottomFullWidth\"])}\n        </div>\n        <ag-fake-horizontal-scroll></ag-fake-horizontal-scroll>\n        <ag-overlay-wrapper></ag-overlay-wrapper>\n    </div>`\n);\nvar GridBodyComp = class extends Component {\n  constructor() {\n    super(GRID_BODY_TEMPLATE, [\n      OverlayWrapperSelector,\n      FakeHScrollSelector,\n      FakeVScrollSelector,\n      GridHeaderSelector,\n      RowContainerSelector\n    ]);\n    this.eBodyViewport = RefPlaceholder;\n    this.eStickyTop = RefPlaceholder;\n    this.eStickyBottom = RefPlaceholder;\n    this.eTop = RefPlaceholder;\n    this.eBottom = RefPlaceholder;\n    this.eBody = RefPlaceholder;\n  }\n  wireBeans(beans) {\n    this.resizeObserverService = beans.resizeObserverService;\n    this.rangeService = beans.rangeService;\n  }\n  postConstruct() {\n    const setHeight = (height, element) => {\n      const heightString = `${height}px`;\n      element.style.minHeight = heightString;\n      element.style.height = heightString;\n    };\n    const compProxy = {\n      setRowAnimationCssOnBodyViewport: (cssClass, animate) => this.setRowAnimationCssOnBodyViewport(cssClass, animate),\n      setColumnCount: (count) => _setAriaColCount(this.getGui(), count),\n      setRowCount: (count) => _setAriaRowCount(this.getGui(), count),\n      setTopHeight: (height) => setHeight(height, this.eTop),\n      setBottomHeight: (height) => setHeight(height, this.eBottom),\n      setTopDisplay: (display) => this.eTop.style.display = display,\n      setBottomDisplay: (display) => this.eBottom.style.display = display,\n      setStickyTopHeight: (height) => this.eStickyTop.style.height = height,\n      setStickyTopTop: (top) => this.eStickyTop.style.top = top,\n      setStickyTopWidth: (width) => this.eStickyTop.style.width = width,\n      setStickyBottomHeight: (height) => {\n        this.eStickyBottom.style.height = height;\n        this.eStickyBottom.classList.toggle(\"ag-hidden\", height === \"0px\");\n      },\n      setStickyBottomBottom: (bottom) => this.eStickyBottom.style.bottom = bottom,\n      setStickyBottomWidth: (width) => this.eStickyBottom.style.width = width,\n      setColumnMovingCss: (cssClass, flag) => this.addOrRemoveCssClass(cssClass, flag),\n      updateLayoutClasses: (cssClass, params) => {\n        const classLists = [this.eBodyViewport.classList, this.eBody.classList];\n        classLists.forEach((classList) => {\n          classList.toggle(\"ag-layout-auto-height\" /* AUTO_HEIGHT */, params.autoHeight);\n          classList.toggle(\"ag-layout-normal\" /* NORMAL */, params.normal);\n          classList.toggle(\"ag-layout-print\" /* PRINT */, params.print);\n        });\n        this.addOrRemoveCssClass(\"ag-layout-auto-height\" /* AUTO_HEIGHT */, params.autoHeight);\n        this.addOrRemoveCssClass(\"ag-layout-normal\" /* NORMAL */, params.normal);\n        this.addOrRemoveCssClass(\"ag-layout-print\" /* PRINT */, params.print);\n      },\n      setAlwaysVerticalScrollClass: (cssClass, on) => this.eBodyViewport.classList.toggle(CSS_CLASS_FORCE_VERTICAL_SCROLL, on),\n      registerBodyViewportResizeListener: (listener) => {\n        const unsubscribeFromResize = this.resizeObserverService.observeResize(this.eBodyViewport, listener);\n        this.addDestroyFunc(() => unsubscribeFromResize());\n      },\n      setPinnedTopBottomOverflowY: (overflow) => this.eTop.style.overflowY = this.eBottom.style.overflowY = overflow,\n      setCellSelectableCss: (cssClass, selectable) => {\n        [this.eTop, this.eBodyViewport, this.eBottom].forEach(\n          (ct) => ct.classList.toggle(cssClass, selectable)\n        );\n      },\n      setBodyViewportWidth: (width) => this.eBodyViewport.style.width = width\n    };\n    this.ctrl = this.createManagedBean(new GridBodyCtrl());\n    this.ctrl.setComp(\n      compProxy,\n      this.getGui(),\n      this.eBodyViewport,\n      this.eTop,\n      this.eBottom,\n      this.eStickyTop,\n      this.eStickyBottom\n    );\n    if (this.rangeService && _isCellSelectionEnabled(this.gos) || _isMultiRowSelection(this.gos)) {\n      _setAriaMultiSelectable(this.getGui(), true);\n    }\n  }\n  setRowAnimationCssOnBodyViewport(cssClass, animateRows) {\n    const bodyViewportClassList = this.eBodyViewport.classList;\n    bodyViewportClassList.toggle(\"ag-row-animation\", animateRows);\n    bodyViewportClassList.toggle(\"ag-row-no-animation\", !animateRows);\n  }\n  getFloatingTopBottom() {\n    return [this.eTop, this.eBottom];\n  }\n};\nvar GridBodySelector = {\n  selector: \"AG-GRID-BODY\",\n  component: GridBodyComp\n};\n\n// community-modules/core/src/gridBodyComp/scrollVisibleService.ts\nvar ScrollVisibleService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"scrollVisibleService\";\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.columnAnimationService = beans.columnAnimationService;\n  }\n  postConstruct() {\n    this.getScrollbarWidth();\n    this.addManagedEventListeners({\n      displayedColumnsChanged: this.onDisplayedColumnsChanged.bind(this),\n      displayedColumnsWidthChanged: this.onDisplayedColumnsWidthChanged.bind(this)\n    });\n  }\n  onDisplayedColumnsChanged() {\n    this.updateScrollVisible();\n  }\n  onDisplayedColumnsWidthChanged() {\n    this.updateScrollVisible();\n  }\n  onCentreViewportResized() {\n    this.updateScrollGap();\n  }\n  updateScrollVisible() {\n    if (this.columnAnimationService.isActive()) {\n      this.columnAnimationService.executeLaterVMTurn(() => {\n        this.columnAnimationService.executeLaterVMTurn(() => this.updateScrollVisibleImpl());\n      });\n    } else {\n      this.updateScrollVisibleImpl();\n    }\n  }\n  updateScrollVisibleImpl() {\n    const centerRowCtrl = this.ctrlsService.get(\"center\");\n    if (!centerRowCtrl || this.columnAnimationService.isActive()) {\n      return;\n    }\n    const params = {\n      horizontalScrollShowing: centerRowCtrl.isHorizontalScrollShowing(),\n      verticalScrollShowing: this.isVerticalScrollShowing()\n    };\n    this.setScrollsVisible(params);\n    this.updateScrollGap();\n  }\n  updateScrollGap() {\n    const centerRowCtrl = this.ctrlsService.get(\"center\");\n    const horizontalGap = centerRowCtrl.hasHorizontalScrollGap();\n    const verticalGap = centerRowCtrl.hasVerticalScrollGap();\n    const atLeastOneDifferent = this.horizontalScrollGap !== horizontalGap || this.verticalScrollGap !== verticalGap;\n    if (atLeastOneDifferent) {\n      this.horizontalScrollGap = horizontalGap;\n      this.verticalScrollGap = verticalGap;\n      this.eventService.dispatchEvent({\n        type: \"scrollGapChanged\"\n      });\n    }\n  }\n  setScrollsVisible(params) {\n    const atLeastOneDifferent = this.horizontalScrollShowing !== params.horizontalScrollShowing || this.verticalScrollShowing !== params.verticalScrollShowing;\n    if (atLeastOneDifferent) {\n      this.horizontalScrollShowing = params.horizontalScrollShowing;\n      this.verticalScrollShowing = params.verticalScrollShowing;\n      this.eventService.dispatchEvent({\n        type: \"scrollVisibilityChanged\"\n      });\n    }\n  }\n  // used by pagination service - to know page height\n  isHorizontalScrollShowing() {\n    return this.horizontalScrollShowing;\n  }\n  // used by header container\n  isVerticalScrollShowing() {\n    return this.verticalScrollShowing;\n  }\n  hasHorizontalScrollGap() {\n    return this.horizontalScrollGap;\n  }\n  hasVerticalScrollGap() {\n    return this.verticalScrollGap;\n  }\n  // the user might be using some non-standard scrollbar, eg a scrollbar that has zero\n  // width and overlays (like the Safari scrollbar, but presented in Chrome). so we\n  // allow the user to provide the scroll width before we work it out.\n  getScrollbarWidth() {\n    if (this.scrollbarWidth == null) {\n      const gridOptionsScrollbarWidth = this.gos.get(\"scrollbarWidth\");\n      const useGridOptions = typeof gridOptionsScrollbarWidth === \"number\" && gridOptionsScrollbarWidth >= 0;\n      const scrollbarWidth = useGridOptions ? gridOptionsScrollbarWidth : _getScrollbarWidth();\n      if (scrollbarWidth != null) {\n        this.scrollbarWidth = scrollbarWidth;\n        this.eventService.dispatchEvent({\n          type: \"scrollbarWidthChanged\"\n        });\n      }\n    }\n    return this.scrollbarWidth;\n  }\n};\n\n// community-modules/core/src/gridBodyComp/mouseEventService.ts\nvar GRID_DOM_KEY = \"__ag_grid_instance\";\nvar _MouseEventService = class _MouseEventService extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"mouseEventService\";\n    this.gridInstanceId = _MouseEventService.gridInstanceSequence.next();\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n  }\n  // we put the instance id onto the main DOM element. this is used for events, when grids are inside grids,\n  // so the grid can work out if the even came from this grid or a grid inside this one. see the ctrl+v logic\n  // for where this is used.\n  stampTopLevelGridCompWithGridInstance(eGridDiv) {\n    eGridDiv[GRID_DOM_KEY] = this.gridInstanceId;\n  }\n  getRenderedCellForEvent(event) {\n    return _getCtrlForEventTarget(this.gos, event.target, CellCtrl.DOM_DATA_KEY_CELL_CTRL);\n  }\n  // walks the path of the event, and returns true if this grid is the first one that it finds. if doing\n  // master / detail grids, and a child grid is found, then it returns false. this stops things like copy/paste\n  // getting executed on many grids at the same time.\n  isEventFromThisGrid(event) {\n    const res = this.isElementInThisGrid(event.target);\n    return res;\n  }\n  isElementInThisGrid(element) {\n    let pointer = element;\n    while (pointer) {\n      const instanceId = pointer[GRID_DOM_KEY];\n      if (_exists(instanceId)) {\n        const eventFromThisGrid = instanceId === this.gridInstanceId;\n        return eventFromThisGrid;\n      }\n      pointer = pointer.parentElement;\n    }\n    return false;\n  }\n  getCellPositionForEvent(event) {\n    const cellComp = this.getRenderedCellForEvent(event);\n    return cellComp ? cellComp.getCellPosition() : null;\n  }\n  getNormalisedPosition(event) {\n    const gridPanelHasScrolls = _isDomLayout(this.gos, \"normal\");\n    const e = event;\n    let x;\n    let y;\n    if (e.clientX != null || e.clientY != null) {\n      x = e.clientX;\n      y = e.clientY;\n    } else {\n      x = e.x;\n      y = e.y;\n    }\n    if (gridPanelHasScrolls) {\n      const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n      const vRange = gridBodyCon.getScrollFeature().getVScrollPosition();\n      const hRange = gridBodyCon.getScrollFeature().getHScrollPosition();\n      x += hRange.left;\n      y += vRange.top;\n    }\n    return { x, y };\n  }\n};\n_MouseEventService.gridInstanceSequence = new NumberSequence();\nvar MouseEventService = _MouseEventService;\n\n// community-modules/core/src/gridBodyComp/navigationService.ts\nvar NavigationService = class extends BeanStub {\n  constructor() {\n    super();\n    this.beanName = \"navigationService\";\n    this.onPageDown = _throttle(this.onPageDown, 100);\n    this.onPageUp = _throttle(this.onPageUp, 100);\n  }\n  wireBeans(beans) {\n    this.mouseEventService = beans.mouseEventService;\n    this.pageBoundsService = beans.pageBoundsService;\n    this.focusService = beans.focusService;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.rowModel = beans.rowModel;\n    this.ctrlsService = beans.ctrlsService;\n    this.rowRenderer = beans.rowRenderer;\n    this.headerNavigationService = beans.headerNavigationService;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.cellNavigationService = beans.cellNavigationService;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.scrollVisibleService = beans.scrollVisibleService;\n    this.rangeService = beans.rangeService;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridBodyCon = p.gridBodyCtrl;\n    });\n  }\n  handlePageScrollingKey(event, fromFullWidth = false) {\n    const key = event.key;\n    const alt = event.altKey;\n    const ctrl = event.ctrlKey || event.metaKey;\n    const rangeServiceShouldHandleShift = !!this.rangeService && event.shiftKey;\n    const currentCell = this.mouseEventService.getCellPositionForEvent(event);\n    let processed = false;\n    switch (key) {\n      case KeyCode.PAGE_HOME:\n      case KeyCode.PAGE_END:\n        if (!ctrl && !alt) {\n          this.onHomeOrEndKey(key);\n          processed = true;\n        }\n        break;\n      case KeyCode.LEFT:\n      case KeyCode.RIGHT:\n      case KeyCode.UP:\n      case KeyCode.DOWN:\n        if (!currentCell) {\n          return false;\n        }\n        if (ctrl && !alt && !rangeServiceShouldHandleShift) {\n          this.onCtrlUpDownLeftRight(key, currentCell);\n          processed = true;\n        }\n        break;\n      case KeyCode.PAGE_DOWN:\n      case KeyCode.PAGE_UP:\n        if (!ctrl && !alt) {\n          processed = this.handlePageUpDown(key, currentCell, fromFullWidth);\n        }\n        break;\n    }\n    if (processed) {\n      event.preventDefault();\n    }\n    return processed;\n  }\n  handlePageUpDown(key, currentCell, fromFullWidth) {\n    if (fromFullWidth) {\n      currentCell = this.focusService.getFocusedCell();\n    }\n    if (!currentCell) {\n      return false;\n    }\n    if (key === KeyCode.PAGE_UP) {\n      this.onPageUp(currentCell);\n    } else {\n      this.onPageDown(currentCell);\n    }\n    return true;\n  }\n  navigateTo(navigateParams) {\n    const { scrollIndex, scrollType, scrollColumn, focusIndex, focusColumn } = navigateParams;\n    if (_exists(scrollColumn) && !scrollColumn.isPinned()) {\n      this.gridBodyCon.getScrollFeature().ensureColumnVisible(scrollColumn);\n    }\n    if (_exists(scrollIndex)) {\n      this.gridBodyCon.getScrollFeature().ensureIndexVisible(scrollIndex, scrollType);\n    }\n    if (!navigateParams.isAsync) {\n      this.gridBodyCon.getScrollFeature().ensureIndexVisible(focusIndex);\n    }\n    this.focusService.setFocusedCell({\n      rowIndex: focusIndex,\n      column: focusColumn,\n      rowPinned: null,\n      forceBrowserFocus: true\n    });\n    this.rangeService?.setRangeToCell({ rowIndex: focusIndex, rowPinned: null, column: focusColumn });\n  }\n  // this method is throttled, see the `constructor`\n  onPageDown(gridCell) {\n    const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n    const scrollPosition = gridBodyCon.getScrollFeature().getVScrollPosition();\n    const pixelsInOnePage = this.getViewportHeight();\n    const pagingPixelOffset = this.pageBoundsService.getPixelOffset();\n    const currentPageBottomPixel = scrollPosition.top + pixelsInOnePage;\n    const currentPageBottomRow = this.rowModel.getRowIndexAtPixel(currentPageBottomPixel + pagingPixelOffset);\n    if (this.columnModel.isAutoRowHeightActive()) {\n      this.navigateToNextPageWithAutoHeight(gridCell, currentPageBottomRow);\n    } else {\n      this.navigateToNextPage(gridCell, currentPageBottomRow);\n    }\n  }\n  // this method is throttled, see the `constructor`\n  onPageUp(gridCell) {\n    const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n    const scrollPosition = gridBodyCon.getScrollFeature().getVScrollPosition();\n    const pagingPixelOffset = this.pageBoundsService.getPixelOffset();\n    const currentPageTopPixel = scrollPosition.top;\n    const currentPageTopRow = this.rowModel.getRowIndexAtPixel(currentPageTopPixel + pagingPixelOffset);\n    if (this.columnModel.isAutoRowHeightActive()) {\n      this.navigateToNextPageWithAutoHeight(gridCell, currentPageTopRow, true);\n    } else {\n      this.navigateToNextPage(gridCell, currentPageTopRow, true);\n    }\n  }\n  navigateToNextPage(gridCell, scrollIndex, up = false) {\n    const pixelsInOnePage = this.getViewportHeight();\n    const firstRow = this.pageBoundsService.getFirstRow();\n    const lastRow = this.pageBoundsService.getLastRow();\n    const pagingPixelOffset = this.pageBoundsService.getPixelOffset();\n    const currentRowNode = this.rowModel.getRow(gridCell.rowIndex);\n    const rowPixelDiff = up ? (\n      // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n      currentRowNode?.rowHeight - pixelsInOnePage - pagingPixelOffset\n    ) : pixelsInOnePage - pagingPixelOffset;\n    const nextCellPixel = currentRowNode?.rowTop + rowPixelDiff;\n    let focusIndex = this.rowModel.getRowIndexAtPixel(nextCellPixel + pagingPixelOffset);\n    if (focusIndex === gridCell.rowIndex) {\n      const diff = up ? -1 : 1;\n      scrollIndex = focusIndex = gridCell.rowIndex + diff;\n    }\n    let scrollType;\n    if (up) {\n      scrollType = \"bottom\";\n      if (focusIndex < firstRow) {\n        focusIndex = firstRow;\n      }\n      if (scrollIndex < firstRow) {\n        scrollIndex = firstRow;\n      }\n    } else {\n      scrollType = \"top\";\n      if (focusIndex > lastRow) {\n        focusIndex = lastRow;\n      }\n      if (scrollIndex > lastRow) {\n        scrollIndex = lastRow;\n      }\n    }\n    if (this.isRowTallerThanView(focusIndex)) {\n      scrollIndex = focusIndex;\n      scrollType = \"top\";\n    }\n    this.navigateTo({\n      scrollIndex,\n      scrollType,\n      scrollColumn: null,\n      focusIndex,\n      focusColumn: gridCell.column\n    });\n  }\n  navigateToNextPageWithAutoHeight(gridCell, scrollIndex, up = false) {\n    this.navigateTo({\n      scrollIndex,\n      scrollType: up ? \"bottom\" : \"top\",\n      scrollColumn: null,\n      focusIndex: scrollIndex,\n      focusColumn: gridCell.column\n    });\n    setTimeout(() => {\n      const focusIndex = this.getNextFocusIndexForAutoHeight(gridCell, up);\n      this.navigateTo({\n        scrollIndex,\n        scrollType: up ? \"bottom\" : \"top\",\n        scrollColumn: null,\n        focusIndex,\n        focusColumn: gridCell.column,\n        isAsync: true\n      });\n    }, 50);\n  }\n  getNextFocusIndexForAutoHeight(gridCell, up = false) {\n    const step = up ? -1 : 1;\n    const pixelsInOnePage = this.getViewportHeight();\n    const lastRowIndex = this.pageBoundsService.getLastRow();\n    let pixelSum = 0;\n    let currentIndex = gridCell.rowIndex;\n    while (currentIndex >= 0 && currentIndex <= lastRowIndex) {\n      const currentCell = this.rowModel.getRow(currentIndex);\n      if (currentCell) {\n        const currentCellHeight = currentCell.rowHeight ?? 0;\n        if (pixelSum + currentCellHeight > pixelsInOnePage) {\n          break;\n        }\n        pixelSum += currentCellHeight;\n      }\n      currentIndex += step;\n    }\n    return Math.max(0, Math.min(currentIndex, lastRowIndex));\n  }\n  getViewportHeight() {\n    const scrollPosition = this.ctrlsService.getGridBodyCtrl().getScrollFeature().getVScrollPosition();\n    const scrollbarWidth = this.scrollVisibleService.getScrollbarWidth();\n    let pixelsInOnePage = scrollPosition.bottom - scrollPosition.top;\n    if (this.ctrlsService.get(\"center\").isHorizontalScrollShowing()) {\n      pixelsInOnePage -= scrollbarWidth;\n    }\n    return pixelsInOnePage;\n  }\n  isRowTallerThanView(rowIndex) {\n    const rowNode = this.rowModel.getRow(rowIndex);\n    if (!rowNode) {\n      return false;\n    }\n    const rowHeight = rowNode.rowHeight;\n    if (typeof rowHeight !== \"number\") {\n      return false;\n    }\n    return rowHeight > this.getViewportHeight();\n  }\n  onCtrlUpDownLeftRight(key, gridCell) {\n    const cellToFocus = this.cellNavigationService.getNextCellToFocus(key, gridCell, true);\n    const { rowIndex } = cellToFocus;\n    const column = cellToFocus.column;\n    this.navigateTo({\n      scrollIndex: rowIndex,\n      scrollType: null,\n      scrollColumn: column,\n      focusIndex: rowIndex,\n      focusColumn: column\n    });\n  }\n  // home brings focus to top left cell, end brings focus to bottom right, grid scrolled to bring\n  // same cell into view (which means either scroll all the way up, or all the way down).\n  onHomeOrEndKey(key) {\n    const homeKey = key === KeyCode.PAGE_HOME;\n    const allColumns = this.visibleColsService.getAllCols();\n    const columnToSelect = homeKey ? allColumns[0] : _last(allColumns);\n    const scrollIndex = homeKey ? this.pageBoundsService.getFirstRow() : this.pageBoundsService.getLastRow();\n    this.navigateTo({\n      scrollIndex,\n      scrollType: null,\n      scrollColumn: columnToSelect,\n      focusIndex: scrollIndex,\n      focusColumn: columnToSelect\n    });\n  }\n  // result of keyboard event\n  onTabKeyDown(previous, keyboardEvent) {\n    const backwards = keyboardEvent.shiftKey;\n    const movedToNextCell = this.tabToNextCellCommon(previous, backwards, keyboardEvent);\n    if (movedToNextCell !== false) {\n      if (movedToNextCell) {\n        keyboardEvent.preventDefault();\n      } else if (movedToNextCell === null) {\n        this.focusService.allowFocusForNextGridCoreContainer(backwards);\n      }\n      return;\n    }\n    if (backwards) {\n      const { rowIndex, rowPinned } = previous.getRowPosition();\n      const firstRow = rowPinned ? rowIndex === 0 : rowIndex === this.pageBoundsService.getFirstRow();\n      if (firstRow) {\n        if (this.gos.get(\"headerHeight\") === 0 || this.focusService.isHeaderFocusSuppressed()) {\n          this.focusService.focusNextGridCoreContainer(true, true);\n        } else {\n          keyboardEvent.preventDefault();\n          this.focusService.focusPreviousFromFirstCell(keyboardEvent);\n        }\n      }\n    } else {\n      if (previous instanceof CellCtrl) {\n        previous.focusCell(true);\n      }\n      if (!backwards && this.focusService.focusOverlay(false) || this.focusService.focusNextGridCoreContainer(backwards)) {\n        keyboardEvent.preventDefault();\n      }\n    }\n  }\n  // comes from API\n  tabToNextCell(backwards, event) {\n    const focusedCell = this.focusService.getFocusedCell();\n    if (!focusedCell) {\n      return false;\n    }\n    let cellOrRow = this.getCellByPosition(focusedCell);\n    if (!cellOrRow) {\n      cellOrRow = this.rowRenderer.getRowByPosition(focusedCell);\n      if (!cellOrRow || !cellOrRow.isFullWidth()) {\n        return false;\n      }\n    }\n    return !!this.tabToNextCellCommon(cellOrRow, backwards, event);\n  }\n  tabToNextCellCommon(previous, backwards, event) {\n    let editing = previous.isEditing();\n    if (!editing && previous instanceof CellCtrl) {\n      const cell = previous;\n      const row = cell.getRowCtrl();\n      if (row) {\n        editing = row.isEditing();\n      }\n    }\n    let res;\n    if (editing) {\n      if (this.gos.get(\"editType\") === \"fullRow\") {\n        res = this.moveToNextEditingRow(previous, backwards, event);\n      } else {\n        res = this.moveToNextEditingCell(previous, backwards, event);\n      }\n    } else {\n      res = this.moveToNextCellNotEditing(previous, backwards);\n    }\n    if (res === null) {\n      return res;\n    }\n    return res || !!this.focusService.getFocusedHeader();\n  }\n  // returns null if no navigation should be performed\n  moveToNextEditingCell(previousCell, backwards, event = null) {\n    const previousPos = previousCell.getCellPosition();\n    previousCell.getGui().focus();\n    previousCell.stopEditing();\n    const nextCell = this.findNextCellToFocusOn(previousPos, backwards, true);\n    if (nextCell === false) {\n      return null;\n    }\n    if (nextCell == null) {\n      return false;\n    }\n    nextCell.startEditing(null, true, event);\n    nextCell.focusCell(false);\n    return true;\n  }\n  // returns null if no navigation should be performed\n  moveToNextEditingRow(previousCell, backwards, event = null) {\n    const previousPos = previousCell.getCellPosition();\n    const nextCell = this.findNextCellToFocusOn(previousPos, backwards, true);\n    if (nextCell === false) {\n      return null;\n    }\n    if (nextCell == null) {\n      return false;\n    }\n    const nextPos = nextCell.getCellPosition();\n    const previousEditable = this.isCellEditable(previousPos);\n    const nextEditable = this.isCellEditable(nextPos);\n    const rowsMatch = nextPos && previousPos.rowIndex === nextPos.rowIndex && previousPos.rowPinned === nextPos.rowPinned;\n    if (previousEditable) {\n      previousCell.setFocusOutOnEditor();\n    }\n    if (!rowsMatch) {\n      const pRow = previousCell.getRowCtrl();\n      pRow.stopEditing();\n      const nRow = nextCell.getRowCtrl();\n      nRow.startRowEditing(void 0, void 0, event);\n    }\n    if (nextEditable) {\n      nextCell.setFocusInOnEditor();\n      nextCell.focusCell();\n    } else {\n      nextCell.focusCell(true);\n    }\n    return true;\n  }\n  // returns null if no navigation should be performed\n  moveToNextCellNotEditing(previousCell, backwards) {\n    const displayedColumns = this.visibleColsService.getAllCols();\n    let cellPos;\n    if (previousCell instanceof RowCtrl) {\n      cellPos = {\n        ...previousCell.getRowPosition(),\n        column: backwards ? displayedColumns[0] : _last(displayedColumns)\n      };\n    } else {\n      cellPos = previousCell.getCellPosition();\n    }\n    const nextCell = this.findNextCellToFocusOn(cellPos, backwards, false);\n    if (nextCell === false) {\n      return null;\n    }\n    if (nextCell instanceof CellCtrl) {\n      nextCell.focusCell(true);\n    } else if (nextCell) {\n      return this.tryToFocusFullWidthRow(nextCell.getRowPosition(), backwards);\n    }\n    return _exists(nextCell);\n  }\n  /**\n   * called by the cell, when tab is pressed while editing.\n   * @return: RenderedCell when navigation successful, false if navigation should not be performed, otherwise null\n   */\n  findNextCellToFocusOn(previousPosition, backwards, startEditing) {\n    let nextPosition = previousPosition;\n    while (true) {\n      if (previousPosition !== nextPosition) {\n        previousPosition = nextPosition;\n      }\n      if (!backwards) {\n        nextPosition = this.getLastCellOfColSpan(nextPosition);\n      }\n      nextPosition = this.cellNavigationService.getNextTabbedCell(nextPosition, backwards);\n      const userFunc = this.gos.getCallback(\"tabToNextCell\");\n      if (_exists(userFunc)) {\n        const params = {\n          backwards,\n          editing: startEditing,\n          previousCellPosition: previousPosition,\n          nextCellPosition: nextPosition ? nextPosition : null\n        };\n        const userResult = userFunc(params);\n        if (userResult === true || userResult === null) {\n          if (userResult === null) {\n            _warnOnce(\n              \"Returning `null` from tabToNextCell is deprecated. Return `true` to stay on the current cell, or `false` to let the browser handle the tab behaviour.\"\n            );\n          }\n          nextPosition = previousPosition;\n        } else if (userResult === false) {\n          return false;\n        } else {\n          nextPosition = {\n            rowIndex: userResult.rowIndex,\n            column: userResult.column,\n            rowPinned: userResult.rowPinned\n          };\n        }\n      }\n      if (!nextPosition) {\n        return null;\n      }\n      if (nextPosition.rowIndex < 0) {\n        const headerLen = this.headerNavigationService.getHeaderRowCount();\n        this.focusService.focusHeaderPosition({\n          headerPosition: {\n            headerRowIndex: headerLen + nextPosition.rowIndex,\n            column: nextPosition.column\n          },\n          fromCell: true\n        });\n        return null;\n      }\n      const fullRowEdit = this.gos.get(\"editType\") === \"fullRow\";\n      if (startEditing && !fullRowEdit) {\n        const cellIsEditable = this.isCellEditable(nextPosition);\n        if (!cellIsEditable) {\n          continue;\n        }\n      }\n      this.ensureCellVisible(nextPosition);\n      const nextCell = this.getCellByPosition(nextPosition);\n      if (!nextCell) {\n        const row = this.rowRenderer.getRowByPosition(nextPosition);\n        if (!row || !row.isFullWidth() || startEditing) {\n          continue;\n        }\n        return row;\n      }\n      if (nextCell.isSuppressNavigable()) {\n        continue;\n      }\n      this.rangeService?.setRangeToCell(nextPosition);\n      return nextCell;\n    }\n  }\n  isCellEditable(cell) {\n    const rowNode = this.lookupRowNodeForCell(cell);\n    if (rowNode) {\n      return cell.column.isCellEditable(rowNode);\n    }\n    return false;\n  }\n  getCellByPosition(cellPosition) {\n    const rowCtrl = this.rowRenderer.getRowByPosition(cellPosition);\n    if (!rowCtrl) {\n      return null;\n    }\n    return rowCtrl.getCellCtrl(cellPosition.column);\n  }\n  lookupRowNodeForCell(cell) {\n    if (cell.rowPinned === \"top\") {\n      return this.pinnedRowModel.getPinnedTopRow(cell.rowIndex);\n    }\n    if (cell.rowPinned === \"bottom\") {\n      return this.pinnedRowModel.getPinnedBottomRow(cell.rowIndex);\n    }\n    return this.rowModel.getRow(cell.rowIndex);\n  }\n  // we use index for rows, but column object for columns, as the next column (by index) might not\n  // be visible (header grouping) so it's not reliable, so using the column object instead.\n  navigateToNextCell(event, key, currentCell, allowUserOverride) {\n    let nextCell = currentCell;\n    let hitEdgeOfGrid = false;\n    while (nextCell && (nextCell === currentCell || !this.isValidNavigateCell(nextCell))) {\n      if (this.gos.get(\"enableRtl\")) {\n        if (key === KeyCode.LEFT) {\n          nextCell = this.getLastCellOfColSpan(nextCell);\n        }\n      } else if (key === KeyCode.RIGHT) {\n        nextCell = this.getLastCellOfColSpan(nextCell);\n      }\n      nextCell = this.cellNavigationService.getNextCellToFocus(key, nextCell);\n      hitEdgeOfGrid = _missing(nextCell);\n    }\n    if (hitEdgeOfGrid && event && event.key === KeyCode.UP) {\n      nextCell = {\n        rowIndex: -1,\n        rowPinned: null,\n        column: currentCell.column\n      };\n    }\n    if (allowUserOverride) {\n      const userFunc = this.gos.getCallback(\"navigateToNextCell\");\n      if (_exists(userFunc)) {\n        const params = {\n          key,\n          previousCellPosition: currentCell,\n          nextCellPosition: nextCell ? nextCell : null,\n          event\n        };\n        const userCell = userFunc(params);\n        if (_exists(userCell)) {\n          nextCell = {\n            rowPinned: userCell.rowPinned,\n            rowIndex: userCell.rowIndex,\n            column: userCell.column\n          };\n        } else {\n          nextCell = null;\n        }\n      }\n    }\n    if (!nextCell) {\n      return;\n    }\n    if (nextCell.rowIndex < 0) {\n      const headerLen = this.headerNavigationService.getHeaderRowCount();\n      this.focusService.focusHeaderPosition({\n        headerPosition: { headerRowIndex: headerLen + nextCell.rowIndex, column: currentCell.column },\n        event: event || void 0,\n        fromCell: true\n      });\n      return;\n    }\n    const normalisedPosition = this.getNormalisedPosition(nextCell);\n    if (normalisedPosition) {\n      this.focusPosition(normalisedPosition);\n    } else {\n      this.tryToFocusFullWidthRow(nextCell);\n    }\n  }\n  getNormalisedPosition(cellPosition) {\n    this.ensureCellVisible(cellPosition);\n    const cellCtrl = this.getCellByPosition(cellPosition);\n    if (!cellCtrl) {\n      return null;\n    }\n    cellPosition = cellCtrl.getCellPosition();\n    this.ensureCellVisible(cellPosition);\n    return cellPosition;\n  }\n  tryToFocusFullWidthRow(position, backwards) {\n    const displayedColumns = this.visibleColsService.getAllCols();\n    const rowComp = this.rowRenderer.getRowByPosition(position);\n    if (!rowComp || !rowComp.isFullWidth()) {\n      return false;\n    }\n    const currentCellFocused = this.focusService.getFocusedCell();\n    const cellPosition = {\n      rowIndex: position.rowIndex,\n      rowPinned: position.rowPinned,\n      column: position.column || (backwards ? _last(displayedColumns) : displayedColumns[0])\n    };\n    this.focusPosition(cellPosition);\n    const fromBelow = backwards == null ? currentCellFocused != null && this.rowPositionUtils.before(cellPosition, currentCellFocused) : backwards;\n    this.eventService.dispatchEvent({\n      type: \"fullWidthRowFocused\",\n      rowIndex: cellPosition.rowIndex,\n      rowPinned: cellPosition.rowPinned,\n      column: cellPosition.column,\n      isFullWidthCell: true,\n      fromBelow\n    });\n    return true;\n  }\n  focusPosition(cellPosition) {\n    this.focusService.setFocusedCell({\n      rowIndex: cellPosition.rowIndex,\n      column: cellPosition.column,\n      rowPinned: cellPosition.rowPinned,\n      forceBrowserFocus: true\n    });\n    this.rangeService?.setRangeToCell(cellPosition);\n  }\n  isValidNavigateCell(cell) {\n    const rowNode = this.rowPositionUtils.getRowNode(cell);\n    return !!rowNode;\n  }\n  getLastCellOfColSpan(cell) {\n    const cellCtrl = this.getCellByPosition(cell);\n    if (!cellCtrl) {\n      return cell;\n    }\n    const colSpanningList = cellCtrl.getColSpanningList();\n    if (colSpanningList.length === 1) {\n      return cell;\n    }\n    return {\n      rowIndex: cell.rowIndex,\n      column: _last(colSpanningList),\n      rowPinned: cell.rowPinned\n    };\n  }\n  ensureCellVisible(gridCell) {\n    const isGroupStickyEnabled = _isGroupRowsSticky(this.gos);\n    const rowNode = this.rowModel.getRow(gridCell.rowIndex);\n    const skipScrollToRow = isGroupStickyEnabled && rowNode?.sticky;\n    if (!skipScrollToRow && _missing(gridCell.rowPinned)) {\n      this.gridBodyCon.getScrollFeature().ensureIndexVisible(gridCell.rowIndex);\n    }\n    if (!gridCell.column.isPinned()) {\n      this.gridBodyCon.getScrollFeature().ensureColumnVisible(gridCell.column);\n    }\n  }\n};\n\n// community-modules/core/src/headerRendering/common/horizontalResizeService.ts\nvar HorizontalResizeService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"horizontalResizeService\";\n  }\n  wireBeans(beans) {\n    this.dragService = beans.dragService;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  addResizeBar(params) {\n    const dragSource = {\n      dragStartPixels: params.dragStartPixels || 0,\n      eElement: params.eResizeBar,\n      onDragStart: this.onDragStart.bind(this, params),\n      onDragStop: this.onDragStop.bind(this, params),\n      onDragging: this.onDragging.bind(this, params),\n      onDragCancel: this.onDragStop.bind(this, params),\n      includeTouch: true,\n      stopPropagationForTouch: true\n    };\n    this.dragService.addDragSource(dragSource);\n    const finishedWithResizeFunc = () => this.dragService.removeDragSource(dragSource);\n    return finishedWithResizeFunc;\n  }\n  onDragStart(params, mouseEvent) {\n    this.dragStartX = mouseEvent.clientX;\n    this.setResizeIcons();\n    const shiftKey = mouseEvent instanceof MouseEvent && mouseEvent.shiftKey === true;\n    params.onResizeStart(shiftKey);\n  }\n  setResizeIcons() {\n    const ctrl = this.ctrlsService.get(\"gridCtrl\");\n    ctrl.setResizeCursor(true);\n    ctrl.disableUserSelect(true);\n  }\n  onDragStop(params) {\n    params.onResizeEnd(this.resizeAmount);\n    this.resetIcons();\n  }\n  resetIcons() {\n    const ctrl = this.ctrlsService.get(\"gridCtrl\");\n    ctrl.setResizeCursor(false);\n    ctrl.disableUserSelect(false);\n  }\n  onDragging(params, mouseEvent) {\n    this.resizeAmount = mouseEvent.clientX - this.dragStartX;\n    params.onResizing(this.resizeAmount);\n  }\n};\n\n// community-modules/core/src/headerRendering/cells/column/standardMenu.ts\nvar StandardMenuFactory = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"filterMenuFactory\";\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n    this.focusService = beans.focusService;\n    this.ctrlsService = beans.ctrlsService;\n    this.menuService = beans.menuService;\n  }\n  hideActiveMenu() {\n    if (this.hidePopup) {\n      this.hidePopup();\n    }\n  }\n  showMenuAfterMouseEvent(column, mouseEvent, containerType) {\n    this.showPopup(\n      column,\n      (eMenu) => {\n        this.popupService.positionPopupUnderMouseEvent({\n          column,\n          type: containerType,\n          mouseEvent,\n          ePopup: eMenu\n        });\n      },\n      containerType,\n      mouseEvent.target,\n      this.menuService.isLegacyMenuEnabled()\n    );\n  }\n  showMenuAfterButtonClick(column, eventSource, containerType) {\n    let multiplier = -1;\n    let alignSide = \"left\";\n    const isLegacyMenuEnabled = this.menuService.isLegacyMenuEnabled();\n    if (!isLegacyMenuEnabled && this.gos.get(\"enableRtl\")) {\n      multiplier = 1;\n      alignSide = \"right\";\n    }\n    const nudgeX = isLegacyMenuEnabled ? void 0 : 4 * multiplier;\n    const nudgeY = isLegacyMenuEnabled ? void 0 : 4;\n    this.showPopup(\n      column,\n      (eMenu) => {\n        this.popupService.positionPopupByComponent({\n          type: containerType,\n          eventSource,\n          ePopup: eMenu,\n          nudgeX,\n          nudgeY,\n          alignSide,\n          keepWithinBounds: true,\n          position: \"under\",\n          column\n        });\n      },\n      containerType,\n      eventSource,\n      isLegacyMenuEnabled\n    );\n  }\n  showPopup(column, positionCallback, containerType, eventSource, isLegacyMenuEnabled) {\n    const comp = column ? this.createBean(new FilterWrapperComp(column, \"COLUMN_MENU\")) : void 0;\n    this.activeMenu = comp;\n    if (!comp?.hasFilter() || !column) {\n      throw new Error(\"AG Grid - unable to show popup filter, filter instantiation failed\");\n    }\n    const eMenu = document.createElement(\"div\");\n    _setAriaRole(eMenu, \"presentation\");\n    eMenu.classList.add(\"ag-menu\");\n    if (!isLegacyMenuEnabled) {\n      eMenu.classList.add(\"ag-filter-menu\");\n    }\n    [this.tabListener] = this.addManagedElementListeners(eMenu, {\n      keydown: (e) => this.trapFocusWithin(e, eMenu)\n    });\n    eMenu.appendChild(comp?.getGui());\n    let hidePopup;\n    const afterGuiDetached = () => comp?.afterGuiDetached();\n    const anchorToElement = this.menuService.isColumnMenuAnchoringEnabled() ? eventSource ?? this.ctrlsService.getGridBodyCtrl().getGui() : void 0;\n    const closedCallback = (e) => {\n      column.setMenuVisible(false, \"contextMenu\");\n      const isKeyboardEvent = e instanceof KeyboardEvent;\n      if (this.tabListener) {\n        this.tabListener = this.tabListener();\n      }\n      if (isKeyboardEvent && eventSource && _isVisible(eventSource)) {\n        const focusableEl = this.focusService.findTabbableParent(eventSource);\n        if (focusableEl) {\n          focusableEl.focus();\n        }\n      }\n      afterGuiDetached();\n      this.destroyBean(this.activeMenu);\n      this.dispatchVisibleChangedEvent(false, containerType, column);\n    };\n    const translate = this.localeService.getLocaleTextFunc();\n    const ariaLabel = isLegacyMenuEnabled && containerType !== \"columnFilter\" ? translate(\"ariaLabelColumnMenu\", \"Column Menu\") : translate(\"ariaLabelColumnFilter\", \"Column Filter\");\n    const addPopupRes = this.popupService.addPopup({\n      modal: true,\n      eChild: eMenu,\n      closeOnEsc: true,\n      closedCallback,\n      positionCallback: () => positionCallback(eMenu),\n      anchorToElement,\n      ariaLabel\n    });\n    if (addPopupRes) {\n      this.hidePopup = hidePopup = addPopupRes.hideFunc;\n    }\n    comp.afterInit().then(() => {\n      positionCallback(eMenu);\n      comp.afterGuiAttached({ container: containerType, hidePopup });\n    });\n    column.setMenuVisible(true, \"contextMenu\");\n    this.dispatchVisibleChangedEvent(true, containerType, column);\n  }\n  trapFocusWithin(e, menu) {\n    if (e.key !== KeyCode.TAB || e.defaultPrevented || this.focusService.findNextFocusableElement(menu, false, e.shiftKey)) {\n      return;\n    }\n    e.preventDefault();\n    this.focusService.focusInto(menu, e.shiftKey);\n  }\n  dispatchVisibleChangedEvent(visible, containerType, column) {\n    this.eventService.dispatchEvent({\n      type: \"columnMenuVisibleChanged\",\n      visible,\n      switchingTab: false,\n      key: containerType,\n      column: column ?? null,\n      columnGroup: null\n    });\n  }\n  isMenuEnabled(column) {\n    return column.isFilterAllowed() && (column.getColDef().menuTabs ?? [\"filterMenuTab\"]).includes(\"filterMenuTab\");\n  }\n  showMenuAfterContextMenuEvent() {\n  }\n  destroy() {\n    this.destroyBean(this.activeMenu);\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/misc/resizeObserverService.ts\nvar ResizeObserverService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"resizeObserverService\";\n  }\n  observeResize(element, callback) {\n    const win = _getWindow(this.gos);\n    const ResizeObserverImpl = win.ResizeObserver;\n    const resizeObserver = ResizeObserverImpl ? new ResizeObserverImpl(callback) : null;\n    resizeObserver?.observe(element);\n    return () => resizeObserver?.disconnect();\n  }\n};\n\n// community-modules/core/src/misc/animationFrameService.ts\nvar AnimationFrameService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"animationFrameService\";\n    // p1 and p2 are create tasks are to do with row and cell creation.\n    // for them we want to execute according to row order, so we use\n    // TaskItem so we know what index the item is for.\n    this.createTasksP1 = { list: [], sorted: false };\n    // eg drawing back-ground of rows\n    this.createTasksP2 = { list: [], sorted: false };\n    // eg cell renderers, adding hover functionality\n    // destroy tasks are to do with row removal. they are done after row creation as the user will need to see new\n    // rows first (as blank is scrolled into view), when we remove the old rows (no longer in view) is not as\n    // important.\n    this.destroyTasks = [];\n    this.ticking = false;\n    // we need to know direction of scroll, to build up rows in the direction of\n    // the scroll. eg if user scrolls down, we extend the rows by building down.\n    this.scrollGoingDown = true;\n    this.lastPage = 0;\n    this.lastScrollTop = 0;\n    this.taskCount = 0;\n    this.cancelledTasks = /* @__PURE__ */ new Set();\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.paginationService = beans.paginationService;\n  }\n  setScrollTop(scrollTop) {\n    const isPaginationActive = this.gos.get(\"pagination\");\n    this.scrollGoingDown = scrollTop >= this.lastScrollTop;\n    if (isPaginationActive && scrollTop === 0) {\n      const currentPage = this.paginationService?.getCurrentPage() ?? 0;\n      if (currentPage !== this.lastPage) {\n        this.lastPage = currentPage;\n        this.scrollGoingDown = true;\n      }\n    }\n    this.lastScrollTop = scrollTop;\n  }\n  postConstruct() {\n    this.useAnimationFrame = !this.gos.get(\"suppressAnimationFrame\");\n  }\n  isOn() {\n    return this.useAnimationFrame;\n  }\n  // this method is for our AG Grid sanity only - if animation frames are turned off,\n  // then no place in the code should be looking to add any work to be done in animation\n  // frames. this stops bugs - where some code is asking for a frame to be executed\n  // when it should not.\n  verifyAnimationFrameOn(methodName) {\n    if (this.useAnimationFrame === false) {\n      _warnOnce(`AnimationFrameService.${methodName} called but animation frames are off`);\n    }\n  }\n  createTask(task, index, list) {\n    this.verifyAnimationFrameOn(list);\n    const taskItem = { task, index, createOrder: ++this.taskCount };\n    this.addTaskToList(this[list], taskItem);\n    this.schedule();\n  }\n  cancelTask(task) {\n    this.cancelledTasks.add(task);\n  }\n  addTaskToList(taskList, task) {\n    taskList.list.push(task);\n    taskList.sorted = false;\n  }\n  sortTaskList(taskList) {\n    if (taskList.sorted) {\n      return;\n    }\n    const sortDirection = this.scrollGoingDown ? 1 : -1;\n    taskList.list.sort(\n      (a, b) => a.index !== b.index ? sortDirection * (b.index - a.index) : b.createOrder - a.createOrder\n    );\n    taskList.sorted = true;\n  }\n  addDestroyTask(task) {\n    this.verifyAnimationFrameOn(\"createTasksP3\");\n    this.destroyTasks.push(task);\n    this.schedule();\n  }\n  executeFrame(millis) {\n    this.verifyAnimationFrameOn(\"executeFrame\");\n    const p1TaskList = this.createTasksP1;\n    const p1Tasks = p1TaskList.list;\n    const p2TaskList = this.createTasksP2;\n    const p2Tasks = p2TaskList.list;\n    const destroyTasks = this.destroyTasks;\n    const frameStart = (/* @__PURE__ */ new Date()).getTime();\n    let duration = (/* @__PURE__ */ new Date()).getTime() - frameStart;\n    const noMaxMillis = millis <= 0;\n    const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n    while (noMaxMillis || duration < millis) {\n      const gridBodyDidSomething = gridBodyCon.getScrollFeature().scrollGridIfNeeded();\n      if (!gridBodyDidSomething) {\n        let task;\n        if (p1Tasks.length) {\n          this.sortTaskList(p1TaskList);\n          task = p1Tasks.pop().task;\n        } else if (p2Tasks.length) {\n          this.sortTaskList(p2TaskList);\n          task = p2Tasks.pop().task;\n        } else if (destroyTasks.length) {\n          task = destroyTasks.pop();\n        } else {\n          this.cancelledTasks.clear();\n          break;\n        }\n        if (!this.cancelledTasks.has(task)) {\n          task();\n        }\n      }\n      duration = (/* @__PURE__ */ new Date()).getTime() - frameStart;\n    }\n    if (p1Tasks.length || p2Tasks.length || destroyTasks.length) {\n      this.requestFrame();\n    } else {\n      this.stopTicking();\n    }\n  }\n  stopTicking() {\n    this.ticking = false;\n  }\n  flushAllFrames() {\n    if (!this.useAnimationFrame) {\n      return;\n    }\n    this.executeFrame(-1);\n  }\n  schedule() {\n    if (!this.useAnimationFrame) {\n      return;\n    }\n    if (!this.ticking) {\n      this.ticking = true;\n      this.requestFrame();\n    }\n  }\n  requestFrame() {\n    const callback = this.executeFrame.bind(this, 60);\n    this.requestAnimationFrame(callback);\n  }\n  requestAnimationFrame(callback) {\n    const win = _getWindow(this.gos);\n    if (win.requestAnimationFrame) {\n      win.requestAnimationFrame(callback);\n    } else if (win.webkitRequestAnimationFrame) {\n      win.webkitRequestAnimationFrame(callback);\n    } else {\n      win.setTimeout(callback, 0);\n    }\n  }\n  isQueueEmpty() {\n    return !this.ticking;\n  }\n  // a debounce utility used for parts of the app involved with rendering.\n  // the advantage over normal debounce is the client can call flushAllFrames()\n  // to make sure all rendering is complete. we don't wait any milliseconds,\n  // as this is intended to batch calls in one VM turn.\n  debounce(func) {\n    let pending = false;\n    return () => {\n      if (!this.isOn()) {\n        window.setTimeout(func, 0);\n        return;\n      }\n      if (pending) {\n        return;\n      }\n      pending = true;\n      this.addDestroyTask(() => {\n        pending = false;\n        func();\n      });\n    };\n  }\n};\n\n// community-modules/core/src/interfaces/iClientSideRowModel.ts\nvar ClientSideRowModelSteps = /* @__PURE__ */ ((ClientSideRowModelSteps2) => {\n  ClientSideRowModelSteps2[\"EVERYTHING\"] = \"group\";\n  ClientSideRowModelSteps2[\"FILTER\"] = \"filter\";\n  ClientSideRowModelSteps2[\"SORT\"] = \"sort\";\n  ClientSideRowModelSteps2[\"MAP\"] = \"map\";\n  ClientSideRowModelSteps2[\"AGGREGATE\"] = \"aggregate\";\n  ClientSideRowModelSteps2[\"FILTER_AGGREGATES\"] = \"filter_aggregates\";\n  ClientSideRowModelSteps2[\"PIVOT\"] = \"pivot\";\n  ClientSideRowModelSteps2[\"NOTHING\"] = \"nothing\";\n  return ClientSideRowModelSteps2;\n})(ClientSideRowModelSteps || {});\n\n// community-modules/core/src/misc/expansionService.ts\nvar ExpansionService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"expansionService\";\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.isClientSideRowModel = _isClientSideRowModel(this.gos);\n  }\n  expandRows(rowIds) {\n    if (!this.isClientSideRowModel) {\n      return;\n    }\n    const rowIdSet = new Set(rowIds);\n    this.rowModel.forEachNode((node) => {\n      if (node.id && rowIdSet.has(node.id)) {\n        node.expanded = true;\n      }\n    });\n    this.onGroupExpandedOrCollapsed();\n  }\n  getExpandedRows() {\n    const expandedRows = [];\n    this.rowModel.forEachNode(({ expanded, id }) => {\n      if (expanded && id) {\n        expandedRows.push(id);\n      }\n    });\n    return expandedRows;\n  }\n  expandAll(value) {\n    if (!this.isClientSideRowModel) {\n      return;\n    }\n    this.rowModel.expandOrCollapseAll(value);\n  }\n  setRowNodeExpanded(rowNode, expanded, expandParents, forceSync) {\n    if (rowNode) {\n      if (expandParents && rowNode.parent && rowNode.parent.level !== -1) {\n        this.setRowNodeExpanded(rowNode.parent, expanded, expandParents, forceSync);\n      }\n      rowNode.setExpanded(expanded, void 0, forceSync);\n    }\n  }\n  onGroupExpandedOrCollapsed() {\n    if (!this.isClientSideRowModel) {\n      return;\n    }\n    this.rowModel.refreshModel({ step: \"map\" /* MAP */ });\n  }\n};\n\n// community-modules/core/src/misc/menuService.ts\nvar MenuService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"menuService\";\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.filterMenuFactory = beans.filterMenuFactory;\n    this.ctrlsService = beans.ctrlsService;\n    this.animationFrameService = beans.animationFrameService;\n    this.filterManager = beans.filterManager;\n    this.rowRenderer = beans.rowRenderer;\n    this.columnChooserFactory = beans.columnChooserFactory;\n    this.contextMenuFactory = beans.contextMenuFactory;\n    this.enterpriseMenuFactory = beans.enterpriseMenuFactory;\n  }\n  postConstruct() {\n    this.activeMenuFactory = this.enterpriseMenuFactory ?? this.filterMenuFactory;\n  }\n  showColumnMenu(params) {\n    this.showColumnMenuCommon(this.activeMenuFactory, params, \"columnMenu\");\n  }\n  showFilterMenu(params) {\n    const menuFactory = this.enterpriseMenuFactory && this.isLegacyMenuEnabled() ? this.enterpriseMenuFactory : this.filterMenuFactory;\n    this.showColumnMenuCommon(menuFactory, params, params.containerType, true);\n  }\n  showHeaderContextMenu(column, mouseEvent, touchEvent) {\n    this.activeMenuFactory.showMenuAfterContextMenuEvent(column, mouseEvent, touchEvent);\n  }\n  getContextMenuPosition(rowNode, column) {\n    const rowCtrl = this.getRowCtrl(rowNode);\n    const eGui = this.getCellGui(rowCtrl, column);\n    if (!eGui) {\n      if (rowCtrl) {\n        return { x: 0, y: rowCtrl.getRowYPosition() };\n      }\n      return { x: 0, y: 0 };\n    }\n    const rect = eGui.getBoundingClientRect();\n    return {\n      x: rect.x + rect.width / 2,\n      y: rect.y + rect.height / 2\n    };\n  }\n  showContextMenu(params) {\n    const rowNode = params.rowNode;\n    const column = params.column;\n    let { anchorToElement, value } = params;\n    if (rowNode && column && value == null) {\n      value = this.valueService.getValueForDisplay(column, rowNode);\n    }\n    if (anchorToElement == null) {\n      anchorToElement = this.getContextMenuAnchorElement(rowNode, column);\n    }\n    this.contextMenuFactory?.onContextMenu(\n      params.mouseEvent ?? null,\n      params.touchEvent ?? null,\n      rowNode ?? null,\n      column ?? null,\n      value,\n      anchorToElement\n    );\n  }\n  showColumnChooser(params) {\n    this.columnChooserFactory?.showColumnChooser(params);\n  }\n  hidePopupMenu() {\n    this.contextMenuFactory?.hideActiveMenu();\n    this.activeMenuFactory.hideActiveMenu();\n  }\n  hideColumnChooser() {\n    this.columnChooserFactory?.hideActiveColumnChooser();\n  }\n  isColumnMenuInHeaderEnabled(column) {\n    const { suppressMenu, suppressHeaderMenuButton } = column.getColDef();\n    const isSuppressMenuButton = suppressHeaderMenuButton ?? suppressMenu;\n    return !isSuppressMenuButton && this.activeMenuFactory.isMenuEnabled(column) && (this.isLegacyMenuEnabled() || !!this.enterpriseMenuFactory);\n  }\n  isFilterMenuInHeaderEnabled(column) {\n    return !column.getColDef().suppressHeaderFilterButton && !!this.filterManager?.isFilterAllowed(column);\n  }\n  isHeaderContextMenuEnabled(column) {\n    const colDef = column && isColumn(column) ? column.getColDef() : column?.getColGroupDef();\n    return !colDef?.suppressHeaderContextMenu && this.getColumnMenuType() === \"new\";\n  }\n  isHeaderMenuButtonAlwaysShowEnabled() {\n    return this.isSuppressMenuHide();\n  }\n  isHeaderMenuButtonEnabled() {\n    const menuHides = !this.isSuppressMenuHide();\n    const onIpadAndMenuHides = _isIOSUserAgent() && menuHides;\n    return !onIpadAndMenuHides;\n  }\n  isHeaderFilterButtonEnabled(column) {\n    return this.isFilterMenuInHeaderEnabled(column) && !this.isLegacyMenuEnabled() && !this.isFloatingFilterButtonDisplayed(column);\n  }\n  isFilterMenuItemEnabled(column) {\n    return !!this.filterManager?.isFilterAllowed(column) && !this.isLegacyMenuEnabled() && !this.isFilterMenuInHeaderEnabled(column) && !this.isFloatingFilterButtonDisplayed(column);\n  }\n  isColumnMenuAnchoringEnabled() {\n    return !this.isLegacyMenuEnabled();\n  }\n  areAdditionalColumnMenuItemsEnabled() {\n    return this.getColumnMenuType() === \"new\";\n  }\n  isLegacyMenuEnabled() {\n    return this.getColumnMenuType() === \"legacy\";\n  }\n  isFloatingFilterButtonEnabled(column) {\n    const colDef = column.getColDef();\n    const legacySuppressFilterButton = colDef.floatingFilterComponentParams?.suppressFilterButton;\n    if (legacySuppressFilterButton != null) {\n      _warnOnce(\n        `As of v31.1, 'colDef.floatingFilterComponentParams.suppressFilterButton' is deprecated. Use 'colDef.suppressFloatingFilterButton' instead.`\n      );\n    }\n    return colDef.suppressFloatingFilterButton == null ? !legacySuppressFilterButton : !colDef.suppressFloatingFilterButton;\n  }\n  getColumnMenuType() {\n    return this.gos.get(\"columnMenu\");\n  }\n  isFloatingFilterButtonDisplayed(column) {\n    return !!column.getColDef().floatingFilter && this.isFloatingFilterButtonEnabled(column);\n  }\n  isSuppressMenuHide() {\n    const suppressMenuHide = this.gos.get(\"suppressMenuHide\");\n    if (this.isLegacyMenuEnabled()) {\n      return this.gos.exists(\"suppressMenuHide\") ? suppressMenuHide : false;\n    }\n    return suppressMenuHide;\n  }\n  showColumnMenuCommon(menuFactory, params, containerType, filtersOnly) {\n    const { positionBy } = params;\n    const column = params.column;\n    if (positionBy === \"button\") {\n      const { buttonElement } = params;\n      menuFactory.showMenuAfterButtonClick(column, buttonElement, containerType, filtersOnly);\n    } else if (positionBy === \"mouse\") {\n      const { mouseEvent } = params;\n      menuFactory.showMenuAfterMouseEvent(column, mouseEvent, containerType, filtersOnly);\n    } else if (column) {\n      this.ctrlsService.getGridBodyCtrl().getScrollFeature().ensureColumnVisible(column, \"auto\");\n      this.animationFrameService.requestAnimationFrame(() => {\n        const headerCellCtrl = this.ctrlsService.getHeaderRowContainerCtrl(column.getPinned())?.getHeaderCtrlForColumn(column);\n        if (headerCellCtrl) {\n          menuFactory.showMenuAfterButtonClick(\n            column,\n            headerCellCtrl.getAnchorElementForMenu(filtersOnly),\n            containerType,\n            true\n          );\n        }\n      });\n    }\n  }\n  getRowCtrl(rowNode) {\n    const { rowIndex, rowPinned } = rowNode || {};\n    if (rowIndex == null) {\n      return;\n    }\n    return this.rowRenderer.getRowByPosition({ rowIndex, rowPinned }) || void 0;\n  }\n  getCellGui(rowCtrl, column) {\n    if (!rowCtrl || !column) {\n      return;\n    }\n    const cellCtrl = rowCtrl.getCellCtrl(column);\n    return cellCtrl?.getGui() || void 0;\n  }\n  getContextMenuAnchorElement(rowNode, column) {\n    const gridBodyEl = this.ctrlsService.getGridBodyCtrl().getGridBodyElement();\n    const rowCtrl = this.getRowCtrl(rowNode);\n    if (!rowCtrl) {\n      return gridBodyEl;\n    }\n    const cellGui = this.getCellGui(rowCtrl, column);\n    if (cellGui) {\n      return cellGui;\n    }\n    if (rowCtrl.isFullWidth()) {\n      return rowCtrl.getFullWidthElement();\n    }\n    return gridBodyEl;\n  }\n};\n\n// community-modules/core/src/widgets/agInputTextArea.ts\nvar AgInputTextArea = class extends AgAbstractInputField {\n  constructor(config) {\n    super(config, \"ag-text-area\", null, \"textarea\");\n  }\n  setValue(value, silent) {\n    const ret = super.setValue(value, silent);\n    this.eInput.value = value;\n    return ret;\n  }\n  setCols(cols) {\n    this.eInput.cols = cols;\n    return this;\n  }\n  setRows(rows) {\n    this.eInput.rows = rows;\n    return this;\n  }\n};\nvar AgInputTextAreaSelector = {\n  selector: \"AG-INPUT-TEXT-AREA\",\n  component: AgInputTextArea\n};\n\n// community-modules/core/src/edit/cellEditors/largeTextCellEditor.ts\nvar LargeTextCellEditor = class extends PopupComponent {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-large-text\">\n        <ag-input-text-area data-ref=\"eTextArea\" class=\"ag-large-text-input\"></ag-input-text-area>\n        </div>`,\n      [AgInputTextAreaSelector]\n    );\n    this.eTextArea = RefPlaceholder;\n  }\n  init(params) {\n    this.params = params;\n    this.focusAfterAttached = params.cellStartedEdit;\n    this.eTextArea.setMaxLength(params.maxLength || 200).setCols(params.cols || 60).setRows(params.rows || 10);\n    if (_exists(params.value, true)) {\n      this.eTextArea.setValue(params.value.toString(), true);\n    }\n    this.addGuiEventListener(\"keydown\", this.onKeyDown.bind(this));\n    this.activateTabIndex();\n  }\n  onKeyDown(event) {\n    const key = event.key;\n    if (key === KeyCode.LEFT || key === KeyCode.UP || key === KeyCode.RIGHT || key === KeyCode.DOWN || event.shiftKey && key === KeyCode.ENTER) {\n      event.stopPropagation();\n    }\n  }\n  afterGuiAttached() {\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eTextArea.setInputAriaLabel(translate(\"ariaInputEditor\", \"Input Editor\"));\n    if (this.focusAfterAttached) {\n      this.eTextArea.getFocusableElement().focus();\n    }\n  }\n  getValue() {\n    const value = this.eTextArea.getValue();\n    if (!_exists(value) && !_exists(this.params.value)) {\n      return this.params.value;\n    }\n    return this.params.parseValue(value);\n  }\n};\n\n// community-modules/core/src/edit/cellEditors/popupEditorWrapper.ts\nvar PopupEditorWrapper = class extends PopupComponent {\n  constructor(params) {\n    super(\n      /* html */\n      `<div class=\"ag-popup-editor\" tabindex=\"-1\"/>`\n    );\n    this.params = params;\n  }\n  postConstruct() {\n    _setDomData(this.gos, this.getGui(), \"popupEditorWrapper\", true);\n    this.addKeyDownListener();\n  }\n  addKeyDownListener() {\n    const eGui = this.getGui();\n    const params = this.params;\n    const listener = (event) => {\n      if (!_isUserSuppressingKeyboardEvent(this.gos, event, params.node, params.column, true)) {\n        params.onKeyDown(event);\n      }\n    };\n    this.addManagedElementListeners(eGui, { keydown: listener });\n  }\n};\n\n// community-modules/core/src/edit/cellEditors/selectCellEditor.ts\nvar SelectCellEditor = class extends PopupComponent {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-cell-edit-wrapper\">\n                <ag-select class=\"ag-cell-editor\" data-ref=\"eSelect\"></ag-select>\n            </div>`,\n      [AgSelectSelector]\n    );\n    this.eSelect = RefPlaceholder;\n    this.startedByEnter = false;\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n  }\n  init(params) {\n    this.focusAfterAttached = params.cellStartedEdit;\n    const { eSelect, valueService, gos } = this;\n    const { values, value, eventKey } = params;\n    if (_missing(values)) {\n      _warnOnce(\"no values found for select cellEditor\");\n      return;\n    }\n    this.startedByEnter = eventKey != null ? eventKey === KeyCode.ENTER : false;\n    let hasValue = false;\n    values.forEach((currentValue) => {\n      const option = { value: currentValue };\n      const valueFormatted = valueService.formatValue(params.column, null, currentValue);\n      const valueFormattedExits = valueFormatted !== null && valueFormatted !== void 0;\n      option.text = valueFormattedExits ? valueFormatted : currentValue;\n      eSelect.addOption(option);\n      hasValue = hasValue || value === currentValue;\n    });\n    if (hasValue) {\n      eSelect.setValue(params.value, true);\n    } else if (params.values.length) {\n      eSelect.setValue(params.values[0], true);\n    }\n    const { valueListGap, valueListMaxWidth, valueListMaxHeight } = params;\n    if (valueListGap != null) {\n      eSelect.setPickerGap(valueListGap);\n    }\n    if (valueListMaxHeight != null) {\n      eSelect.setPickerMaxHeight(valueListMaxHeight);\n    }\n    if (valueListMaxWidth != null) {\n      eSelect.setPickerMaxWidth(valueListMaxWidth);\n    }\n    if (gos.get(\"editType\") !== \"fullRow\") {\n      this.addManagedListeners(this.eSelect, { selectedItem: () => params.stopEditing() });\n    }\n  }\n  afterGuiAttached() {\n    if (this.focusAfterAttached) {\n      this.eSelect.getFocusableElement().focus();\n    }\n    if (this.startedByEnter) {\n      setTimeout(() => {\n        if (this.isAlive()) {\n          this.eSelect.showPicker();\n        }\n      });\n    }\n  }\n  focusIn() {\n    this.eSelect.getFocusableElement().focus();\n  }\n  getValue() {\n    return this.eSelect.getValue();\n  }\n  isPopup() {\n    return false;\n  }\n};\n\n// community-modules/core/src/edit/cellEditors/simpleCellEditor.ts\nvar SimpleCellEditor = class extends PopupComponent {\n  constructor(cellEditorInput) {\n    super(\n      /* html */\n      `\n            <div class=\"ag-cell-edit-wrapper\">\n                ${cellEditorInput.getTemplate()}\n            </div>`,\n      cellEditorInput.getAgComponents()\n    );\n    this.cellEditorInput = cellEditorInput;\n    this.eInput = RefPlaceholder;\n  }\n  init(params) {\n    this.params = params;\n    const { cellStartedEdit, eventKey, suppressPreventDefault } = params;\n    const eInput = this.eInput;\n    this.cellEditorInput.init(eInput, params);\n    let startValue;\n    let shouldSetStartValue = true;\n    if (cellStartedEdit) {\n      this.focusAfterAttached = true;\n      if (eventKey === KeyCode.BACKSPACE || eventKey === KeyCode.DELETE) {\n        startValue = \"\";\n      } else if (eventKey && eventKey.length === 1) {\n        if (suppressPreventDefault) {\n          shouldSetStartValue = false;\n        } else {\n          startValue = eventKey;\n        }\n      } else {\n        startValue = this.cellEditorInput.getStartValue();\n        if (eventKey !== KeyCode.F2) {\n          this.highlightAllOnFocus = true;\n        }\n      }\n    } else {\n      this.focusAfterAttached = false;\n      startValue = this.cellEditorInput.getStartValue();\n    }\n    if (shouldSetStartValue && startValue != null) {\n      eInput.setStartValue(startValue);\n    }\n    this.addManagedElementListeners(eInput.getGui(), {\n      keydown: (event) => {\n        const { key } = event;\n        if (key === KeyCode.PAGE_UP || key === KeyCode.PAGE_DOWN) {\n          event.preventDefault();\n        }\n      }\n    });\n  }\n  afterGuiAttached() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const eInput = this.eInput;\n    eInput.setInputAriaLabel(translate(\"ariaInputEditor\", \"Input Editor\"));\n    if (!this.focusAfterAttached) {\n      return;\n    }\n    if (!_isBrowserSafari()) {\n      eInput.getFocusableElement().focus();\n    }\n    const inputEl = eInput.getInputElement();\n    if (this.highlightAllOnFocus) {\n      inputEl.select();\n    } else {\n      this.cellEditorInput.setCaret?.();\n    }\n  }\n  // gets called when tabbing through cells and in full row edit mode\n  focusIn() {\n    const eInput = this.eInput;\n    const focusEl = eInput.getFocusableElement();\n    const inputEl = eInput.getInputElement();\n    focusEl.focus();\n    inputEl.select();\n  }\n  getValue() {\n    return this.cellEditorInput.getValue();\n  }\n  isPopup() {\n    return false;\n  }\n};\n\n// community-modules/core/src/edit/cellEditors/textCellEditor.ts\nvar TextCellEditorInput = class {\n  getTemplate() {\n    return (\n      /* html */\n      `<ag-input-text-field class=\"ag-cell-editor\" data-ref=\"eInput\"></ag-input-text-field>`\n    );\n  }\n  getAgComponents() {\n    return [AgInputTextFieldSelector];\n  }\n  init(eInput, params) {\n    this.eInput = eInput;\n    this.params = params;\n    if (params.maxLength != null) {\n      eInput.setMaxLength(params.maxLength);\n    }\n  }\n  getValue() {\n    const value = this.eInput.getValue();\n    if (!_exists(value) && !_exists(this.params.value)) {\n      return this.params.value;\n    }\n    return this.params.parseValue(value);\n  }\n  getStartValue() {\n    const formatValue = this.params.useFormatter || this.params.column.getColDef().refData;\n    return formatValue ? this.params.formatValue(this.params.value) : this.params.value;\n  }\n  setCaret() {\n    const value = this.eInput.getValue();\n    const len = _exists(value) && value.length || 0;\n    if (len) {\n      this.eInput.getInputElement().setSelectionRange(len, len);\n    }\n  }\n};\nvar TextCellEditor = class extends SimpleCellEditor {\n  constructor() {\n    super(new TextCellEditorInput());\n  }\n};\n\n// community-modules/core/src/edit/cellEditors/numberCellEditor.ts\nvar NumberCellEditorInput = class {\n  getTemplate() {\n    return (\n      /* html */\n      `<ag-input-number-field class=\"ag-cell-editor\" data-ref=\"eInput\"></ag-input-number-field>`\n    );\n  }\n  getAgComponents() {\n    return [AgInputNumberFieldSelector];\n  }\n  init(eInput, params) {\n    this.eInput = eInput;\n    this.params = params;\n    if (params.max != null) {\n      eInput.setMax(params.max);\n    }\n    if (params.min != null) {\n      eInput.setMin(params.min);\n    }\n    if (params.precision != null) {\n      eInput.setPrecision(params.precision);\n    }\n    if (params.step != null) {\n      eInput.setStep(params.step);\n    }\n    const inputEl = eInput.getInputElement();\n    if (params.preventStepping) {\n      eInput.addManagedElementListeners(inputEl, { keydown: this.preventStepping });\n    } else if (params.showStepperButtons) {\n      inputEl.classList.add(\"ag-number-field-input-stepper\");\n    }\n  }\n  preventStepping(e) {\n    if (e.key === KeyCode.UP || e.key === KeyCode.DOWN) {\n      e.preventDefault();\n    }\n  }\n  getValue() {\n    const value = this.eInput.getValue();\n    if (!_exists(value) && !_exists(this.params.value)) {\n      return this.params.value;\n    }\n    let parsedValue = this.params.parseValue(value);\n    if (parsedValue == null) {\n      return parsedValue;\n    }\n    if (typeof parsedValue === \"string\") {\n      if (parsedValue === \"\") {\n        return null;\n      }\n      parsedValue = Number(parsedValue);\n    }\n    return isNaN(parsedValue) ? null : parsedValue;\n  }\n  getStartValue() {\n    return this.params.value;\n  }\n  setCaret() {\n    if (_isBrowserSafari()) {\n      this.eInput.getInputElement().focus({ preventScroll: true });\n    }\n  }\n};\nvar NumberCellEditor = class extends SimpleCellEditor {\n  constructor() {\n    super(new NumberCellEditorInput());\n  }\n};\n\n// community-modules/core/src/widgets/agInputDateField.ts\nvar AgInputDateField = class extends AgInputTextField {\n  constructor(config) {\n    super(config, \"ag-date-field\", \"date\");\n  }\n  postConstruct() {\n    super.postConstruct();\n    const usingSafari = _isBrowserSafari();\n    this.addManagedListeners(this.eInput, {\n      wheel: this.onWheel.bind(this),\n      mousedown: () => {\n        if (this.isDisabled() || usingSafari) {\n          return;\n        }\n        this.eInput.focus();\n      }\n    });\n    this.eInput.step = \"any\";\n  }\n  onWheel(e) {\n    if (_getActiveDomElement(this.gos) === this.eInput) {\n      e.preventDefault();\n    }\n  }\n  setMin(minDate) {\n    const min = minDate instanceof Date ? _serialiseDate(minDate ?? null, false) ?? void 0 : minDate;\n    if (this.min === min) {\n      return this;\n    }\n    this.min = min;\n    _addOrRemoveAttribute(this.eInput, \"min\", min);\n    return this;\n  }\n  setMax(maxDate) {\n    const max = maxDate instanceof Date ? _serialiseDate(maxDate ?? null, false) ?? void 0 : maxDate;\n    if (this.max === max) {\n      return this;\n    }\n    this.max = max;\n    _addOrRemoveAttribute(this.eInput, \"max\", max);\n    return this;\n  }\n  setStep(step) {\n    if (this.step === step) {\n      return this;\n    }\n    this.step = step;\n    _addOrRemoveAttribute(this.eInput, \"step\", step);\n    return this;\n  }\n  getDate() {\n    if (!this.eInput.validity.valid) {\n      return void 0;\n    }\n    return _parseDateTimeFromString(this.getValue()) ?? void 0;\n  }\n  setDate(date, silent) {\n    this.setValue(_serialiseDate(date ?? null, false), silent);\n  }\n};\nvar AgInputDateFieldSelector = {\n  selector: \"AG-INPUT-DATE-FIELD\",\n  component: AgInputDateField\n};\n\n// community-modules/core/src/edit/cellEditors/dateCellEditor.ts\nvar DateCellEditorInput = class {\n  getTemplate() {\n    return (\n      /* html */\n      `<ag-input-date-field class=\"ag-cell-editor\" data-ref=\"eInput\"></ag-input-date-field>`\n    );\n  }\n  getAgComponents() {\n    return [AgInputDateFieldSelector];\n  }\n  init(eInput, params) {\n    this.eInput = eInput;\n    this.params = params;\n    if (params.min != null) {\n      eInput.setMin(params.min);\n    }\n    if (params.max != null) {\n      eInput.setMax(params.max);\n    }\n    if (params.step != null) {\n      eInput.setStep(params.step);\n    }\n  }\n  getValue() {\n    const value = this.eInput.getDate();\n    if (!_exists(value) && !_exists(this.params.value)) {\n      return this.params.value;\n    }\n    return value ?? null;\n  }\n  getStartValue() {\n    const { value } = this.params;\n    if (!(value instanceof Date)) {\n      return void 0;\n    }\n    return _serialiseDate(value, false);\n  }\n};\nvar DateCellEditor = class extends SimpleCellEditor {\n  constructor() {\n    super(new DateCellEditorInput());\n  }\n};\n\n// community-modules/core/src/edit/cellEditors/dateStringCellEditor.ts\nvar DateStringCellEditorInput = class {\n  constructor(getDataTypeService) {\n    this.getDataTypeService = getDataTypeService;\n  }\n  getTemplate() {\n    return (\n      /* html */\n      `<ag-input-date-field class=\"ag-cell-editor\" data-ref=\"eInput\"></ag-input-date-field>`\n    );\n  }\n  getAgComponents() {\n    return [AgInputDateFieldSelector];\n  }\n  init(eInput, params) {\n    this.eInput = eInput;\n    this.params = params;\n    if (params.min != null) {\n      eInput.setMin(params.min);\n    }\n    if (params.max != null) {\n      eInput.setMax(params.max);\n    }\n    if (params.step != null) {\n      eInput.setStep(params.step);\n    }\n  }\n  getValue() {\n    const value = this.formatDate(this.eInput.getDate());\n    if (!_exists(value) && !_exists(this.params.value)) {\n      return this.params.value;\n    }\n    return this.params.parseValue(value ?? \"\");\n  }\n  getStartValue() {\n    return _serialiseDate(this.parseDate(this.params.value ?? void 0) ?? null, false);\n  }\n  parseDate(value) {\n    const dataTypeService = this.getDataTypeService();\n    return dataTypeService ? dataTypeService.getDateParserFunction(this.params.column)(value) : _parseDateTimeFromString(value) ?? void 0;\n  }\n  formatDate(value) {\n    const dataTypeService = this.getDataTypeService();\n    return dataTypeService ? dataTypeService.getDateFormatterFunction(this.params.column)(value) : _serialiseDate(value ?? null, false) ?? void 0;\n  }\n};\nvar DateStringCellEditor = class extends SimpleCellEditor {\n  wireBeans(beans) {\n    this.dataTypeService = beans.dataTypeService;\n  }\n  constructor() {\n    super(new DateStringCellEditorInput(() => this.dataTypeService));\n  }\n};\n\n// community-modules/core/src/edit/cellEditors/checkboxCellEditor.ts\nvar CheckboxCellEditor = class extends PopupComponent {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-cell-wrapper ag-cell-edit-wrapper ag-checkbox-edit\">\n                <ag-checkbox role=\"presentation\" data-ref=\"eCheckbox\"></ag-checkbox>\n            </div>`,\n      [AgCheckboxSelector]\n    );\n    this.eCheckbox = RefPlaceholder;\n  }\n  init(params) {\n    this.params = params;\n    const isSelected = params.value ?? void 0;\n    this.eCheckbox.setValue(isSelected);\n    const inputEl = this.eCheckbox.getInputElement();\n    inputEl.setAttribute(\"tabindex\", \"-1\");\n    this.setAriaLabel(isSelected);\n    this.addManagedListeners(this.eCheckbox, {\n      fieldValueChanged: (event) => this.setAriaLabel(event.selected)\n    });\n  }\n  getValue() {\n    return this.eCheckbox.getValue();\n  }\n  focusIn() {\n    this.eCheckbox.getFocusableElement().focus();\n  }\n  afterGuiAttached() {\n    if (this.params.cellStartedEdit) {\n      this.focusIn();\n    }\n  }\n  isPopup() {\n    return false;\n  }\n  setAriaLabel(isSelected) {\n    const translate = this.localeService.getLocaleTextFunc();\n    const stateName = _getAriaCheckboxStateName(translate, isSelected);\n    const ariaLabel = translate(\"ariaToggleCellValue\", \"Press SPACE to toggle cell value\");\n    this.eCheckbox.setInputAriaLabel(`${ariaLabel} (${stateName})`);\n  }\n};\n\n// community-modules/core/src/undoRedo/undoRedoStack.ts\nvar UndoRedoAction = class {\n  constructor(cellValueChanges) {\n    this.cellValueChanges = cellValueChanges;\n  }\n};\nvar RangeUndoRedoAction = class extends UndoRedoAction {\n  constructor(cellValueChanges, initialRange, finalRange, ranges) {\n    super(cellValueChanges);\n    this.initialRange = initialRange;\n    this.finalRange = finalRange;\n    this.ranges = ranges;\n  }\n};\nvar DEFAULT_STACK_SIZE = 10;\nvar UndoRedoStack = class {\n  constructor(maxStackSize) {\n    this.actionStack = [];\n    this.maxStackSize = maxStackSize ? maxStackSize : DEFAULT_STACK_SIZE;\n    this.actionStack = new Array(this.maxStackSize);\n  }\n  pop() {\n    return this.actionStack.pop();\n  }\n  push(item) {\n    const shouldAddActions = item.cellValueChanges && item.cellValueChanges.length > 0;\n    if (!shouldAddActions) {\n      return;\n    }\n    if (this.actionStack.length === this.maxStackSize) {\n      this.actionStack.shift();\n    }\n    this.actionStack.push(item);\n  }\n  clear() {\n    this.actionStack = [];\n  }\n  getCurrentStackSize() {\n    return this.actionStack.length;\n  }\n};\n\n// community-modules/core/src/undoRedo/undoRedoService.ts\nvar UndoRedoService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"undoRedoService\";\n    this.cellValueChanges = [];\n    this.activeCellEdit = null;\n    this.activeRowEdit = null;\n    this.isPasting = false;\n    this.isRangeInAction = false;\n    this.onCellValueChanged = (event) => {\n      const eventCell = { column: event.column, rowIndex: event.rowIndex, rowPinned: event.rowPinned };\n      const isCellEditing = this.activeCellEdit !== null && this.cellPositionUtils.equals(this.activeCellEdit, eventCell);\n      const isRowEditing = this.activeRowEdit !== null && this.rowPositionUtils.sameRow(this.activeRowEdit, eventCell);\n      const shouldCaptureAction = isCellEditing || isRowEditing || this.isPasting || this.isRangeInAction;\n      if (!shouldCaptureAction) {\n        return;\n      }\n      const { rowPinned, rowIndex, column, oldValue, value } = event;\n      const cellValueChange = {\n        rowPinned,\n        rowIndex,\n        columnId: column.getColId(),\n        newValue: value,\n        oldValue\n      };\n      this.cellValueChanges.push(cellValueChange);\n    };\n    this.clearStacks = () => {\n      this.undoStack.clear();\n      this.redoStack.clear();\n    };\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.ctrlsService = beans.ctrlsService;\n    this.cellPositionUtils = beans.cellPositionUtils;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.columnModel = beans.columnModel;\n    this.rangeService = beans.rangeService;\n  }\n  postConstruct() {\n    if (!this.gos.get(\"undoRedoCellEditing\")) {\n      return;\n    }\n    const undoRedoLimit = this.gos.get(\"undoRedoCellEditingLimit\");\n    if (undoRedoLimit <= 0) {\n      return;\n    }\n    this.undoStack = new UndoRedoStack(undoRedoLimit);\n    this.redoStack = new UndoRedoStack(undoRedoLimit);\n    this.addListeners();\n    const listener = this.clearStacks.bind(this);\n    this.addManagedEventListeners({\n      cellValueChanged: this.onCellValueChanged.bind(this),\n      // undo / redo is restricted to actual editing so we clear the stacks when other operations are\n      // performed that change the order of the row / cols.\n      modelUpdated: (e) => {\n        if (!e.keepUndoRedoStack) {\n          this.clearStacks();\n        }\n      },\n      columnPivotModeChanged: listener,\n      newColumnsLoaded: listener,\n      columnGroupOpened: listener,\n      columnRowGroupChanged: listener,\n      columnMoved: listener,\n      columnPinned: listener,\n      columnVisible: listener,\n      rowDragEnd: listener\n    });\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridBodyCtrl = p.gridBodyCtrl;\n    });\n  }\n  getCurrentUndoStackSize() {\n    return this.undoStack ? this.undoStack.getCurrentStackSize() : 0;\n  }\n  getCurrentRedoStackSize() {\n    return this.redoStack ? this.redoStack.getCurrentStackSize() : 0;\n  }\n  undo(source) {\n    this.eventService.dispatchEvent({\n      type: \"undoStarted\",\n      source\n    });\n    const operationPerformed = this.undoRedo(this.undoStack, this.redoStack, \"initialRange\", \"oldValue\", \"undo\");\n    this.eventService.dispatchEvent({\n      type: \"undoEnded\",\n      source,\n      operationPerformed\n    });\n  }\n  redo(source) {\n    this.eventService.dispatchEvent({\n      type: \"redoStarted\",\n      source\n    });\n    const operationPerformed = this.undoRedo(this.redoStack, this.undoStack, \"finalRange\", \"newValue\", \"redo\");\n    this.eventService.dispatchEvent({\n      type: \"redoEnded\",\n      source,\n      operationPerformed\n    });\n  }\n  undoRedo(undoRedoStack, opposingUndoRedoStack, rangeProperty, cellValueChangeProperty, source) {\n    if (!undoRedoStack) {\n      return false;\n    }\n    const undoRedoAction = undoRedoStack.pop();\n    if (!undoRedoAction || !undoRedoAction.cellValueChanges) {\n      return false;\n    }\n    this.processAction(\n      undoRedoAction,\n      (cellValueChange) => cellValueChange[cellValueChangeProperty],\n      source\n    );\n    if (undoRedoAction instanceof RangeUndoRedoAction) {\n      this.processRange(this.rangeService, undoRedoAction.ranges || [undoRedoAction[rangeProperty]]);\n    } else {\n      this.processCell(undoRedoAction.cellValueChanges);\n    }\n    opposingUndoRedoStack.push(undoRedoAction);\n    return true;\n  }\n  processAction(action, valueExtractor, source) {\n    action.cellValueChanges.forEach((cellValueChange) => {\n      const { rowIndex, rowPinned, columnId } = cellValueChange;\n      const rowPosition = { rowIndex, rowPinned };\n      const currentRow = this.rowPositionUtils.getRowNode(rowPosition);\n      if (!currentRow.displayed) {\n        return;\n      }\n      currentRow.setDataValue(columnId, valueExtractor(cellValueChange), source);\n    });\n  }\n  processRange(rangeService, ranges) {\n    let lastFocusedCell;\n    rangeService.removeAllCellRanges(true);\n    ranges.forEach((range, idx) => {\n      if (!range) {\n        return;\n      }\n      const startRow = range.startRow;\n      const endRow = range.endRow;\n      if (idx === ranges.length - 1) {\n        lastFocusedCell = {\n          rowPinned: startRow.rowPinned,\n          rowIndex: startRow.rowIndex,\n          columnId: range.startColumn.getColId()\n        };\n        this.setLastFocusedCell(lastFocusedCell);\n      }\n      const cellRangeParams = {\n        rowStartIndex: startRow.rowIndex,\n        rowStartPinned: startRow.rowPinned,\n        rowEndIndex: endRow.rowIndex,\n        rowEndPinned: endRow.rowPinned,\n        columnStart: range.startColumn,\n        columns: range.columns\n      };\n      rangeService.addCellRange(cellRangeParams);\n    });\n  }\n  processCell(cellValueChanges) {\n    const cellValueChange = cellValueChanges[0];\n    const { rowIndex, rowPinned } = cellValueChange;\n    const rowPosition = { rowIndex, rowPinned };\n    const row = this.rowPositionUtils.getRowNode(rowPosition);\n    const lastFocusedCell = {\n      rowPinned: cellValueChange.rowPinned,\n      rowIndex: row.rowIndex,\n      columnId: cellValueChange.columnId\n    };\n    this.setLastFocusedCell(lastFocusedCell, this.rangeService);\n  }\n  setLastFocusedCell(lastFocusedCell, rangeService) {\n    const { rowIndex, columnId, rowPinned } = lastFocusedCell;\n    const scrollFeature = this.gridBodyCtrl.getScrollFeature();\n    const column = this.columnModel.getCol(columnId);\n    if (!column) {\n      return;\n    }\n    scrollFeature.ensureIndexVisible(rowIndex);\n    scrollFeature.ensureColumnVisible(column);\n    const cellPosition = { rowIndex, column, rowPinned };\n    this.focusService.setFocusedCell({ ...cellPosition, forceBrowserFocus: true });\n    rangeService?.setRangeToCell(cellPosition);\n  }\n  addListeners() {\n    this.addManagedEventListeners({\n      rowEditingStarted: (e) => {\n        this.activeRowEdit = { rowIndex: e.rowIndex, rowPinned: e.rowPinned };\n      },\n      rowEditingStopped: () => {\n        const action = new UndoRedoAction(this.cellValueChanges);\n        this.pushActionsToUndoStack(action);\n        this.activeRowEdit = null;\n      },\n      cellEditingStarted: (e) => {\n        this.activeCellEdit = { column: e.column, rowIndex: e.rowIndex, rowPinned: e.rowPinned };\n      },\n      cellEditingStopped: (e) => {\n        this.activeCellEdit = null;\n        const shouldPushAction = e.valueChanged && !this.activeRowEdit && !this.isPasting && !this.isRangeInAction;\n        if (shouldPushAction) {\n          const action = new UndoRedoAction(this.cellValueChanges);\n          this.pushActionsToUndoStack(action);\n        }\n      },\n      pasteStart: () => {\n        this.isPasting = true;\n      },\n      pasteEnd: () => {\n        const action = new UndoRedoAction(this.cellValueChanges);\n        this.pushActionsToUndoStack(action);\n        this.isPasting = false;\n      },\n      fillStart: () => {\n        this.isRangeInAction = true;\n      },\n      fillEnd: (event) => {\n        const action = new RangeUndoRedoAction(this.cellValueChanges, event.initialRange, event.finalRange);\n        this.pushActionsToUndoStack(action);\n        this.isRangeInAction = false;\n      },\n      keyShortcutChangedCellStart: () => {\n        this.isRangeInAction = true;\n      },\n      keyShortcutChangedCellEnd: () => {\n        let action;\n        if (this.rangeService && _isCellSelectionEnabled(this.gos)) {\n          action = new RangeUndoRedoAction(this.cellValueChanges, void 0, void 0, [\n            ...this.rangeService.getCellRanges()\n          ]);\n        } else {\n          action = new UndoRedoAction(this.cellValueChanges);\n        }\n        this.pushActionsToUndoStack(action);\n        this.isRangeInAction = false;\n      }\n    });\n  }\n  pushActionsToUndoStack(action) {\n    this.undoStack.push(action);\n    this.cellValueChanges = [];\n    this.redoStack.clear();\n  }\n};\n\n// community-modules/core/src/api/scrollApi.ts\nfunction getVerticalPixelRange(beans) {\n  return beans.ctrlsService.getGridBodyCtrl().getScrollFeature().getVScrollPosition();\n}\nfunction getHorizontalPixelRange(beans) {\n  return beans.ctrlsService.getGridBodyCtrl().getScrollFeature().getHScrollPosition();\n}\nfunction ensureColumnVisible(beans, key, position = \"auto\") {\n  beans.frameworkOverrides.wrapIncoming(\n    () => beans.ctrlsService.getGridBodyCtrl().getScrollFeature().ensureColumnVisible(key, position),\n    \"ensureVisible\"\n  );\n}\nfunction ensureIndexVisible(beans, index, position) {\n  beans.frameworkOverrides.wrapIncoming(\n    () => beans.ctrlsService.getGridBodyCtrl().getScrollFeature().ensureIndexVisible(index, position),\n    \"ensureVisible\"\n  );\n}\nfunction ensureNodeVisible(beans, nodeSelector, position = null) {\n  beans.frameworkOverrides.wrapIncoming(\n    () => beans.ctrlsService.getGridBodyCtrl().getScrollFeature().ensureNodeVisible(nodeSelector, position),\n    \"ensureVisible\"\n  );\n}\n\n// community-modules/core/src/edit/editApi.ts\nfunction undoCellEditing(beans) {\n  beans.undoRedoService?.undo(\"api\");\n}\nfunction redoCellEditing(beans) {\n  beans.undoRedoService?.redo(\"api\");\n}\nfunction getCellEditorInstances(beans, params = {}) {\n  const res = beans.rowRenderer.getCellEditorInstances(params);\n  const unwrapped = res.map(_unwrapUserComp);\n  return unwrapped;\n}\nfunction getEditingCells(beans) {\n  return beans.rowRenderer.getEditingCells();\n}\nfunction stopEditing(beans, cancel = false) {\n  beans.rowRenderer.stopEditing(cancel);\n}\nfunction startEditingCell(beans, params) {\n  const column = beans.columnModel.getCol(params.colKey);\n  if (!column) {\n    _warnOnce(`no column found for ${params.colKey}`);\n    return;\n  }\n  const cellPosition = {\n    rowIndex: params.rowIndex,\n    rowPinned: params.rowPinned || null,\n    column\n  };\n  const notPinned = params.rowPinned == null;\n  if (notPinned) {\n    ensureIndexVisible(beans, params.rowIndex);\n  }\n  ensureColumnVisible(beans, params.colKey);\n  const cell = beans.navigationService.getCellByPosition(cellPosition);\n  if (!cell) {\n    return;\n  }\n  const { focusService, gos } = beans;\n  const isFocusWithinCell = () => {\n    const activeElement = _getActiveDomElement(gos);\n    const eCell = cell.getGui();\n    return activeElement !== eCell && !!eCell?.contains(activeElement);\n  };\n  const forceBrowserFocus = gos.get(\"stopEditingWhenCellsLoseFocus\") && isFocusWithinCell();\n  if (forceBrowserFocus || !focusService.isCellFocused(cellPosition)) {\n    focusService.setFocusedCell({\n      ...cellPosition,\n      forceBrowserFocus,\n      preventScrollOnBrowserFocus: true\n    });\n  }\n  cell.startRowOrCellEdit(params.key);\n}\nfunction getCurrentUndoSize(beans) {\n  return beans.undoRedoService?.getCurrentUndoStackSize() ?? 0;\n}\nfunction getCurrentRedoSize(beans) {\n  return beans.undoRedoService?.getCurrentRedoStackSize() ?? 0;\n}\n\n// community-modules/core/src/edit/editService.ts\nvar EditService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"editService\";\n  }\n  wireBeans(beans) {\n    this.navigationService = beans.navigationService;\n    this.userComponentFactory = beans.userComponentFactory;\n    this.valueService = beans.valueService;\n  }\n  startEditing(cellCtrl, key = null, cellStartedEdit = false, event = null) {\n    const editorParams = this.createCellEditorParams(cellCtrl, key, cellStartedEdit);\n    const colDef = cellCtrl.getColumn().getColDef();\n    const compDetails = this.userComponentFactory.getCellEditorDetails(colDef, editorParams);\n    const popup = compDetails?.popupFromSelector != null ? compDetails.popupFromSelector : !!colDef.cellEditorPopup;\n    const position = compDetails?.popupPositionFromSelector != null ? compDetails.popupPositionFromSelector : colDef.cellEditorPopupPosition;\n    cellCtrl.setEditing(true, compDetails);\n    cellCtrl.getComp().setEditDetails(compDetails, popup, position, this.gos.get(\"reactiveCustomComponents\"));\n    this.eventService.dispatchEvent(cellCtrl.createEvent(event, \"cellEditingStarted\"));\n    return !compDetails?.params?.suppressPreventDefault;\n  }\n  stopEditing(cellCtrl, cancel) {\n    const cellComp = cellCtrl.getComp();\n    const { newValue, newValueExists } = this.takeValueFromCellEditor(cancel, cellComp);\n    const rowNode = cellCtrl.getRowNode();\n    const column = cellCtrl.getColumn();\n    const oldValue = this.valueService.getValueForDisplay(column, rowNode);\n    let valueChanged = false;\n    if (newValueExists) {\n      valueChanged = this.saveNewValue(cellCtrl, oldValue, newValue, rowNode, column);\n    }\n    cellCtrl.setEditing(false, void 0);\n    cellComp.setEditDetails();\n    cellCtrl.updateAndFormatValue(false);\n    cellCtrl.refreshCell({ forceRefresh: true, suppressFlash: true });\n    this.eventService.dispatchEvent({\n      ...cellCtrl.createEvent(null, \"cellEditingStopped\"),\n      oldValue,\n      newValue,\n      valueChanged\n    });\n    return valueChanged;\n  }\n  handleColDefChanged(cellCtrl) {\n    const cellEditor = cellCtrl.getCellEditor();\n    if (cellEditor?.refresh) {\n      const { eventKey, cellStartedEdit } = cellCtrl.getEditCompDetails().params;\n      const editorParams = this.createCellEditorParams(cellCtrl, eventKey, cellStartedEdit);\n      const colDef = cellCtrl.getColumn().getColDef();\n      const compDetails = this.userComponentFactory.getCellEditorDetails(colDef, editorParams);\n      cellEditor.refresh(compDetails.params);\n    }\n  }\n  setFocusOutOnEditor(cellCtrl) {\n    const cellEditor = cellCtrl.getComp().getCellEditor();\n    if (cellEditor && cellEditor.focusOut) {\n      cellEditor.focusOut();\n    }\n  }\n  setFocusInOnEditor(cellCtrl) {\n    const cellComp = cellCtrl.getComp();\n    const cellEditor = cellComp.getCellEditor();\n    if (cellEditor?.focusIn) {\n      cellEditor.focusIn();\n    } else {\n      cellCtrl.focusCell(true);\n      cellCtrl.onCellEditorAttached(() => cellComp.getCellEditor()?.focusIn?.());\n    }\n  }\n  stopEditingAndFocus(cellCtrl, suppressNavigateAfterEdit = false, shiftKey = false) {\n    cellCtrl.stopRowOrCellEdit();\n    cellCtrl.focusCell(true);\n    if (!suppressNavigateAfterEdit) {\n      this.navigateAfterEdit(shiftKey, cellCtrl.getCellPosition());\n    }\n  }\n  createPopupEditorWrapper(params) {\n    return new PopupEditorWrapper(params);\n  }\n  takeValueFromCellEditor(cancel, cellComp) {\n    const noValueResult = { newValueExists: false };\n    if (cancel) {\n      return noValueResult;\n    }\n    const cellEditor = cellComp.getCellEditor();\n    if (!cellEditor) {\n      return noValueResult;\n    }\n    const userWantsToCancel = cellEditor.isCancelAfterEnd && cellEditor.isCancelAfterEnd();\n    if (userWantsToCancel) {\n      return noValueResult;\n    }\n    const newValue = cellEditor.getValue();\n    return {\n      newValue,\n      newValueExists: true\n    };\n  }\n  /**\n   * @returns `True` if the value changes, otherwise `False`.\n   */\n  saveNewValue(cellCtrl, oldValue, newValue, rowNode, column) {\n    if (newValue === oldValue) {\n      return false;\n    }\n    cellCtrl.setSuppressRefreshCell(true);\n    const valueChanged = rowNode.setDataValue(column, newValue, \"edit\");\n    cellCtrl.setSuppressRefreshCell(false);\n    return valueChanged;\n  }\n  createCellEditorParams(cellCtrl, key, cellStartedEdit) {\n    const column = cellCtrl.getColumn();\n    const rowNode = cellCtrl.getRowNode();\n    return this.gos.addGridCommonParams({\n      value: this.valueService.getValueForDisplay(column, rowNode),\n      eventKey: key,\n      column,\n      colDef: column.getColDef(),\n      rowIndex: cellCtrl.getCellPosition().rowIndex,\n      node: rowNode,\n      data: rowNode.data,\n      cellStartedEdit,\n      onKeyDown: cellCtrl.onKeyDown.bind(cellCtrl),\n      stopEditing: cellCtrl.stopEditingAndFocus.bind(cellCtrl),\n      eGridCell: cellCtrl.getGui(),\n      parseValue: (newValue) => this.valueService.parseValue(column, rowNode, newValue, cellCtrl.getValue()),\n      formatValue: cellCtrl.formatValue.bind(cellCtrl)\n    });\n  }\n  navigateAfterEdit(shiftKey, cellPosition) {\n    const enterNavigatesVerticallyAfterEdit = this.gos.get(\"enterNavigatesVerticallyAfterEdit\");\n    if (enterNavigatesVerticallyAfterEdit) {\n      const key = shiftKey ? KeyCode.UP : KeyCode.DOWN;\n      this.navigationService.navigateToNextCell(null, key, cellPosition, false);\n    }\n  }\n};\n\n// community-modules/core/src/edit/rowEditService.ts\nvar RowEditService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowEditService\";\n  }\n  startEditing(rowCtrl, key = null, sourceRenderedCell = null, event = null) {\n    let preventDefault = true;\n    const atLeastOneEditing = rowCtrl.getAllCellCtrls().reduce((prev, cellCtrl) => {\n      const cellStartedEdit = cellCtrl === sourceRenderedCell;\n      if (cellStartedEdit) {\n        preventDefault = cellCtrl.startEditing(key, cellStartedEdit, event);\n      } else {\n        cellCtrl.startEditing(null, cellStartedEdit, event);\n      }\n      if (prev) {\n        return true;\n      }\n      return cellCtrl.isEditing();\n    }, false);\n    if (atLeastOneEditing) {\n      this.setEditing(rowCtrl, true);\n    }\n    return preventDefault;\n  }\n  stopEditing(rowCtrl, cancel = false) {\n    const cellControls = rowCtrl.getAllCellCtrls();\n    const isRowEdit = rowCtrl.isEditing();\n    rowCtrl.setStoppingRowEdit(true);\n    let fireRowEditEvent = false;\n    for (const ctrl of cellControls) {\n      const valueChanged = ctrl.stopEditing(cancel);\n      if (isRowEdit && !cancel && !fireRowEditEvent && valueChanged) {\n        fireRowEditEvent = true;\n      }\n    }\n    if (fireRowEditEvent) {\n      this.eventService.dispatchEvent(rowCtrl.createRowEvent(\"rowValueChanged\"));\n    }\n    if (isRowEdit) {\n      this.setEditing(rowCtrl, false);\n    }\n    rowCtrl.setStoppingRowEdit(false);\n  }\n  setEditing(rowCtrl, value) {\n    rowCtrl.setEditingRow(value);\n    rowCtrl.forEachGui(void 0, (gui) => gui.rowComp.addOrRemoveCssClass(\"ag-row-editing\", value));\n    const event = value ? rowCtrl.createRowEvent(\"rowEditingStarted\") : rowCtrl.createRowEvent(\"rowEditingStopped\");\n    this.eventService.dispatchEvent(event);\n  }\n};\n\n// community-modules/core/src/edit/editModule.ts\nvar EditCoreModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/edit-core\",\n  beans: [EditService]\n});\nvar EditApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/edit-api\",\n  apiFunctions: {\n    undoCellEditing,\n    redoCellEditing,\n    getCellEditorInstances,\n    getEditingCells,\n    stopEditing,\n    startEditingCell,\n    getCurrentUndoSize,\n    getCurrentRedoSize\n  },\n  dependantModules: [EditCoreModule]\n});\nvar UndoRedoEditModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/undo-redo-edit\",\n  beans: [UndoRedoService],\n  dependantModules: [EditCoreModule]\n});\nvar FullRowEditModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/full-row-edit\",\n  beans: [RowEditService],\n  dependantModules: [EditCoreModule]\n});\nvar DefaultEditorModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/default-editor\",\n  userComponents: [{ name: \"agCellEditor\", classImp: TextCellEditor }],\n  dependantModules: [EditCoreModule]\n});\nvar DataTypeEditorsModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/data-type-editors\",\n  userComponents: [\n    { name: \"agTextCellEditor\", classImp: TextCellEditor },\n    {\n      name: \"agNumberCellEditor\",\n      classImp: NumberCellEditor,\n      params: {\n        suppressPreventDefault: true\n      }\n    },\n    { name: \"agDateCellEditor\", classImp: DateCellEditor },\n    { name: \"agDateStringCellEditor\", classImp: DateStringCellEditor },\n    { name: \"agCheckboxCellEditor\", classImp: CheckboxCellEditor }\n  ],\n  dependantModules: [DefaultEditorModule]\n});\nvar SelectEditorModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/select-editor\",\n  userComponents: [{ name: \"agSelectCellEditor\", classImp: SelectCellEditor }],\n  dependantModules: [EditCoreModule]\n});\nvar LargeTextEditorModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/large-text-editor\",\n  userComponents: [{ name: \"agLargeTextCellEditor\", classImp: LargeTextCellEditor }],\n  dependantModules: [EditCoreModule]\n});\nvar AllCommunityEditorsModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/all-editors\",\n  dependantModules: [DefaultEditorModule, DataTypeEditorsModule, SelectEditorModule, LargeTextEditorModule]\n});\nvar EditModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/editing\",\n  dependantModules: [EditCoreModule, UndoRedoEditModule, FullRowEditModule, AllCommunityEditorsModule, EditApiModule]\n});\n\n// community-modules/core/src/rendering/autoWidthCalculator.ts\nvar AutoWidthCalculator = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"autoWidthCalculator\";\n  }\n  wireBeans(beans) {\n    this.rowRenderer = beans.rowRenderer;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      this.centerRowContainerCtrl = p.center;\n    });\n  }\n  // this is the trick: we create a dummy container and clone all the cells\n  // into the dummy, then check the dummy's width. then destroy the dummy\n  // as we don't need it any more.\n  // drawback: only the cells visible on the screen are considered\n  getPreferredWidthForColumn(column, skipHeader) {\n    const eHeaderCell = this.getHeaderCellForColumn(column);\n    if (!eHeaderCell) {\n      return -1;\n    }\n    const elements = this.rowRenderer.getAllCellsForColumn(column);\n    if (!skipHeader) {\n      elements.push(eHeaderCell);\n    }\n    return this.addElementsToContainerAndGetWidth(elements);\n  }\n  getPreferredWidthForColumnGroup(columnGroup) {\n    const eHeaderCell = this.getHeaderCellForColumn(columnGroup);\n    if (!eHeaderCell) {\n      return -1;\n    }\n    return this.addElementsToContainerAndGetWidth([eHeaderCell]);\n  }\n  addElementsToContainerAndGetWidth(elements) {\n    const eDummyContainer = document.createElement(\"form\");\n    eDummyContainer.style.position = \"fixed\";\n    const eBodyContainer = this.centerRowContainerCtrl.getContainerElement();\n    elements.forEach((el) => this.cloneItemIntoDummy(el, eDummyContainer));\n    eBodyContainer.appendChild(eDummyContainer);\n    const dummyContainerWidth = eDummyContainer.offsetWidth;\n    eBodyContainer.removeChild(eDummyContainer);\n    const autoSizePadding = this.getAutoSizePadding();\n    return dummyContainerWidth + autoSizePadding;\n  }\n  getAutoSizePadding() {\n    return this.gos.get(\"autoSizePadding\");\n  }\n  getHeaderCellForColumn(column) {\n    let element = null;\n    this.ctrlsService.getHeaderRowContainerCtrls().forEach((container) => {\n      const res = container.getHtmlElementForColumnHeader(column);\n      if (res != null) {\n        element = res;\n      }\n    });\n    return element;\n  }\n  cloneItemIntoDummy(eCell, eDummyContainer) {\n    const eCellClone = eCell.cloneNode(true);\n    eCellClone.style.width = \"\";\n    eCellClone.style.position = \"static\";\n    eCellClone.style.left = \"\";\n    const eCloneParent = document.createElement(\"div\");\n    const eCloneParentClassList = eCloneParent.classList;\n    const isHeader = [\"ag-header-cell\", \"ag-header-group-cell\"].some((cls) => eCellClone.classList.contains(cls));\n    if (isHeader) {\n      eCloneParentClassList.add(\"ag-header\", \"ag-header-row\");\n      eCloneParent.style.position = \"static\";\n    } else {\n      eCloneParentClassList.add(\"ag-row\");\n    }\n    let pointer = eCell.parentElement;\n    while (pointer) {\n      const isRow = [\"ag-header-row\", \"ag-row\"].some((cls) => pointer.classList.contains(cls));\n      if (isRow) {\n        for (let i = 0; i < pointer.classList.length; i++) {\n          const item = pointer.classList[i];\n          if (item != \"ag-row-position-absolute\") {\n            eCloneParentClassList.add(item);\n          }\n        }\n        break;\n      }\n      pointer = pointer.parentElement;\n    }\n    eCloneParent.appendChild(eCellClone);\n    eDummyContainer.appendChild(eCloneParent);\n  }\n};\n\n// community-modules/core/src/rendering/features/stickyRowFeature.ts\nvar StickyRowFeature = class extends BeanStub {\n  constructor(createRowCon, destroyRowCtrls) {\n    super();\n    this.createRowCon = createRowCon;\n    this.destroyRowCtrls = destroyRowCtrls;\n    this.stickyTopRowCtrls = [];\n    this.stickyBottomRowCtrls = [];\n    // sticky rows pulls in extra rows from other pages which impacts row position\n    this.extraTopHeight = 0;\n    this.extraBottomHeight = 0;\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.rowRenderer = beans.rowRenderer;\n    this.ctrlsService = beans.ctrlsService;\n    this.pageBoundsService = beans.pageBoundsService;\n  }\n  postConstruct() {\n    this.isClientSide = _isClientSideRowModel(this.gos);\n    this.ctrlsService.whenReady(this, (params) => {\n      this.gridBodyCtrl = params.gridBodyCtrl;\n    });\n    this.resetStickyContainers();\n  }\n  getStickyTopRowCtrls() {\n    return this.stickyTopRowCtrls;\n  }\n  getStickyBottomRowCtrls() {\n    return this.stickyBottomRowCtrls;\n  }\n  setOffsetTop(offset) {\n    if (this.extraTopHeight === offset) {\n      return;\n    }\n    this.extraTopHeight = offset;\n    this.eventService.dispatchEvent({\n      type: \"stickyTopOffsetChanged\",\n      offset\n    });\n  }\n  setOffsetBottom(offset) {\n    if (this.extraBottomHeight === offset) {\n      return;\n    }\n    this.extraBottomHeight = offset;\n  }\n  resetOffsets() {\n    this.setOffsetBottom(0);\n    this.setOffsetTop(0);\n  }\n  getExtraTopHeight() {\n    return this.extraTopHeight;\n  }\n  getExtraBottomHeight() {\n    return this.extraBottomHeight;\n  }\n  /**\n   * Get the last pixel of the group, this pixel is used to push the sticky node up out of the viewport.\n   */\n  getLastPixelOfGroup(row) {\n    return this.isClientSide ? this.getClientSideLastPixelOfGroup(row) : this.getServerSideLastPixelOfGroup(row);\n  }\n  /**\n   * Get the first pixel of the group, this pixel is used to push the sticky node down out of the viewport\n   */\n  getFirstPixelOfGroup(row) {\n    if (row.footer) {\n      return row.sibling.rowTop + row.sibling.rowHeight - 1;\n    }\n    if (row.hasChildren()) {\n      return row.rowTop - 1;\n    }\n    return 0;\n  }\n  getServerSideLastPixelOfGroup(row) {\n    if (this.isClientSide) {\n      throw new Error(\"This func should only be called in server side row model.\");\n    }\n    if (row.isExpandable() || row.footer) {\n      if (row.master) {\n        return row.detailNode.rowTop + row.detailNode.rowHeight;\n      }\n      const noOrContiguousSiblings = !row.sibling || Math.abs(row.sibling.rowIndex - row.rowIndex) === 1;\n      if (noOrContiguousSiblings) {\n        let storeBounds = row.childStore?.getStoreBounds();\n        if (row.footer) {\n          storeBounds = row.sibling.childStore?.getStoreBounds();\n        }\n        return (storeBounds?.heightPx ?? 0) + (storeBounds?.topPx ?? 0);\n      }\n      if (row.footer) {\n        return row.rowTop + row.rowHeight;\n      }\n      return row.sibling.rowTop + row.sibling.rowHeight;\n    }\n    return Number.MAX_SAFE_INTEGER;\n  }\n  getClientSideLastPixelOfGroup(row) {\n    if (!this.isClientSide) {\n      throw new Error(\"This func should only be called in client side row model.\");\n    }\n    if (row.isExpandable() || row.footer) {\n      const grandTotalAtTop = row.footer && row.rowIndex === 0;\n      if (grandTotalAtTop) {\n        return Number.MAX_SAFE_INTEGER;\n      }\n      const noOrContiguousSiblings = !row.sibling || Math.abs(row.sibling.rowIndex - row.rowIndex) === 1;\n      if (noOrContiguousSiblings) {\n        let lastAncestor = row.footer ? row.sibling : row;\n        while (lastAncestor.isExpandable() && lastAncestor.expanded) {\n          if (lastAncestor.master) {\n            lastAncestor = lastAncestor.detailNode;\n          } else if (lastAncestor.childrenAfterSort) {\n            if (lastAncestor.childrenAfterSort.length === 0) {\n              break;\n            }\n            lastAncestor = _last(lastAncestor.childrenAfterSort);\n          }\n        }\n        return lastAncestor.rowTop + lastAncestor.rowHeight;\n      }\n      if (row.footer) {\n        return row.rowTop + row.rowHeight;\n      }\n      return row.sibling.rowTop + row.sibling.rowHeight;\n    }\n    return Number.MAX_SAFE_INTEGER;\n  }\n  updateStickyRows(container) {\n    const isTop = container === \"top\";\n    let newStickyContainerHeight = 0;\n    if (!this.canRowsBeSticky()) {\n      return this.refreshNodesAndContainerHeight(container, /* @__PURE__ */ new Set(), newStickyContainerHeight);\n    }\n    const pixelAtContainerBoundary = isTop ? this.rowRenderer.getFirstVisibleVerticalPixel() - this.extraTopHeight : this.rowRenderer.getLastVisibleVerticalPixel() - this.extraTopHeight;\n    const newStickyRows = /* @__PURE__ */ new Set();\n    const addStickyRow = (stickyRow) => {\n      newStickyRows.add(stickyRow);\n      if (isTop) {\n        const lastChildBottom = this.getLastPixelOfGroup(stickyRow);\n        const stickRowBottom = pixelAtContainerBoundary + newStickyContainerHeight + stickyRow.rowHeight;\n        if (lastChildBottom < stickRowBottom) {\n          stickyRow.stickyRowTop = newStickyContainerHeight + (lastChildBottom - stickRowBottom);\n        } else {\n          stickyRow.stickyRowTop = newStickyContainerHeight;\n        }\n      } else {\n        const lastChildBottom = this.getFirstPixelOfGroup(stickyRow);\n        const stickRowTop = pixelAtContainerBoundary - (newStickyContainerHeight + stickyRow.rowHeight);\n        if (lastChildBottom > stickRowTop) {\n          stickyRow.stickyRowTop = newStickyContainerHeight - (lastChildBottom - stickRowTop);\n        } else {\n          stickyRow.stickyRowTop = newStickyContainerHeight;\n        }\n      }\n      newStickyContainerHeight = 0;\n      newStickyRows.forEach((rowNode) => {\n        const thisRowLastPx = rowNode.stickyRowTop + rowNode.rowHeight;\n        if (newStickyContainerHeight < thisRowLastPx) {\n          newStickyContainerHeight = thisRowLastPx;\n        }\n      });\n    };\n    const suppressFootersSticky = this.areFooterRowsStickySuppressed();\n    const suppressGroupsSticky = this.gos.get(\"suppressGroupRowsSticky\");\n    const isRowSticky = (row) => {\n      if (!row.displayed) {\n        return false;\n      }\n      if (row.footer) {\n        if (suppressFootersSticky === true) {\n          return false;\n        }\n        if (suppressFootersSticky === \"grand\" && row.level === -1) {\n          return false;\n        }\n        if (suppressFootersSticky === \"group\" && row.level > -1) {\n          return false;\n        }\n        const isFooterFirstRowInGroup = row.sibling.rowIndex ? row.sibling.rowIndex + 1 === row.rowIndex : false;\n        if (container === \"bottom\" && isFooterFirstRowInGroup) {\n          return false;\n        }\n        const alreadySticking = newStickyRows.has(row);\n        return !alreadySticking;\n      }\n      if (row.isExpandable()) {\n        if (suppressGroupsSticky === true) {\n          return false;\n        }\n        if (container === \"bottom\") {\n          return false;\n        }\n        const alreadySticking = newStickyRows.has(row);\n        return !alreadySticking && row.expanded;\n      }\n      return false;\n    };\n    for (let i = 0; i < 100; i++) {\n      let firstPixelAfterStickyRows = pixelAtContainerBoundary + newStickyContainerHeight;\n      if (!isTop) {\n        firstPixelAfterStickyRows = pixelAtContainerBoundary - newStickyContainerHeight;\n      }\n      const firstIndex = this.rowModel.getRowIndexAtPixel(firstPixelAfterStickyRows);\n      const firstRow = this.rowModel.getRow(firstIndex);\n      if (firstRow == null) {\n        break;\n      }\n      const ancestors = this.getStickyAncestors(firstRow);\n      const firstMissingParent = ancestors.find(\n        (parent) => (isTop ? parent.rowIndex < firstIndex : parent.rowIndex > firstIndex) && isRowSticky(parent)\n      );\n      if (firstMissingParent) {\n        addStickyRow(firstMissingParent);\n        continue;\n      }\n      const isFirstRowOutsideViewport = isTop ? firstRow.rowTop < firstPixelAfterStickyRows : firstRow.rowTop + firstRow.rowHeight > firstPixelAfterStickyRows;\n      if (isFirstRowOutsideViewport && isRowSticky(firstRow)) {\n        addStickyRow(firstRow);\n        continue;\n      }\n      break;\n    }\n    if (!isTop) {\n      newStickyRows.forEach((rowNode) => {\n        rowNode.stickyRowTop = newStickyContainerHeight - (rowNode.stickyRowTop + rowNode.rowHeight);\n      });\n    }\n    return this.refreshNodesAndContainerHeight(container, newStickyRows, newStickyContainerHeight);\n  }\n  areFooterRowsStickySuppressed() {\n    const suppressFootersSticky = this.gos.get(\"suppressStickyTotalRow\");\n    if (suppressFootersSticky === true) {\n      return true;\n    }\n    const suppressGroupRows = !!this.gos.get(\"groupIncludeFooter\") || suppressFootersSticky === \"group\";\n    const suppressGrandRows = !!this.gos.get(\"groupIncludeTotalFooter\") || suppressFootersSticky === \"grand\";\n    if (suppressGroupRows && suppressGrandRows) {\n      return true;\n    }\n    if (suppressGrandRows) {\n      return \"grand\";\n    }\n    if (suppressGroupRows) {\n      return \"group\";\n    }\n    return false;\n  }\n  canRowsBeSticky() {\n    const isStickyEnabled = _isGroupRowsSticky(this.gos);\n    const suppressFootersSticky = this.areFooterRowsStickySuppressed();\n    const suppressGroupsSticky = this.gos.get(\"suppressGroupRowsSticky\");\n    return isStickyEnabled && (!suppressFootersSticky || !suppressGroupsSticky);\n  }\n  getStickyAncestors(rowNode) {\n    const ancestors = [];\n    let p = rowNode.footer ? rowNode.sibling : rowNode.parent;\n    while (p) {\n      if (p.sibling) {\n        ancestors.push(p.sibling);\n      }\n      ancestors.push(p);\n      p = p.parent;\n    }\n    return ancestors.reverse();\n  }\n  checkStickyRows() {\n    const hasTopUpdated = this.updateStickyRows(\"top\");\n    const hasBottomUpdated = this.updateStickyRows(\"bottom\");\n    return hasTopUpdated || hasBottomUpdated;\n  }\n  destroyStickyCtrls() {\n    this.resetStickyContainers();\n  }\n  resetStickyContainers() {\n    this.refreshNodesAndContainerHeight(\"top\", /* @__PURE__ */ new Set(), 0);\n    this.refreshNodesAndContainerHeight(\"bottom\", /* @__PURE__ */ new Set(), 0);\n  }\n  refreshStickyNode(stickRowNode) {\n    const allStickyNodes = /* @__PURE__ */ new Set();\n    if (this.stickyTopRowCtrls.some((ctrl) => ctrl.getRowNode() === stickRowNode)) {\n      for (let i = 0; i < this.stickyTopRowCtrls.length; i++) {\n        const currentNode = this.stickyTopRowCtrls[i].getRowNode();\n        if (currentNode !== stickRowNode) {\n          allStickyNodes.add(currentNode);\n        }\n      }\n      if (this.refreshNodesAndContainerHeight(\"top\", allStickyNodes, this.topContainerHeight)) {\n        this.checkStickyRows();\n      }\n      return;\n    }\n    for (let i = 0; i < this.stickyBottomRowCtrls.length; i++) {\n      const currentNode = this.stickyBottomRowCtrls[i].getRowNode();\n      if (currentNode !== stickRowNode) {\n        allStickyNodes.add(currentNode);\n      }\n    }\n    if (this.refreshNodesAndContainerHeight(\"bottom\", allStickyNodes, this.bottomContainerHeight)) {\n      this.checkStickyRows();\n    }\n  }\n  /**\n   * Destroy old ctrls and create new ctrls where necessary.\n   */\n  refreshNodesAndContainerHeight(container, newStickyNodes, height) {\n    const isTop = container === \"top\";\n    const previousCtrls = isTop ? this.stickyTopRowCtrls : this.stickyBottomRowCtrls;\n    const removedCtrlsMap = {};\n    const remainingCtrls = [];\n    for (let i = 0; i < previousCtrls.length; i++) {\n      const node = previousCtrls[i].getRowNode();\n      const hasBeenRemoved = !newStickyNodes.has(node);\n      if (hasBeenRemoved) {\n        removedCtrlsMap[node.id] = previousCtrls[i];\n        node.sticky = false;\n        continue;\n      }\n      remainingCtrls.push(previousCtrls[i]);\n    }\n    const existingNodes = /* @__PURE__ */ new Set();\n    for (let i = 0; i < remainingCtrls.length; i++) {\n      existingNodes.add(remainingCtrls[i].getRowNode());\n    }\n    const newCtrls = [];\n    newStickyNodes.forEach((node) => {\n      if (existingNodes.has(node)) {\n        return;\n      }\n      node.sticky = true;\n      newCtrls.push(this.createRowCon(node, false, false));\n    });\n    let hasSomethingChanged = !!newCtrls.length || remainingCtrls.length !== previousCtrls.length;\n    if (isTop) {\n      if (this.topContainerHeight !== height) {\n        this.topContainerHeight = height;\n        this.gridBodyCtrl.setStickyTopHeight(height);\n        hasSomethingChanged = true;\n      }\n    } else {\n      if (this.bottomContainerHeight !== height) {\n        this.bottomContainerHeight = height;\n        this.gridBodyCtrl.setStickyBottomHeight(height);\n        hasSomethingChanged = true;\n      }\n    }\n    this.destroyRowCtrls(removedCtrlsMap, false);\n    const newCtrlsList = [...remainingCtrls, ...newCtrls];\n    newCtrlsList.sort((a, b) => b.getRowNode().rowIndex - a.getRowNode().rowIndex);\n    if (!isTop) {\n      newCtrlsList.reverse();\n    }\n    newCtrlsList.forEach((ctrl) => ctrl.setRowTop(ctrl.getRowNode().stickyRowTop));\n    let extraHeight = 0;\n    if (isTop) {\n      newStickyNodes.forEach((node) => {\n        if (node.rowIndex < this.pageBoundsService.getFirstRow()) {\n          extraHeight += node.rowHeight;\n        }\n      });\n      if (extraHeight > this.topContainerHeight) {\n        extraHeight = this.topContainerHeight;\n      }\n      this.setOffsetTop(extraHeight);\n    } else {\n      newStickyNodes.forEach((node) => {\n        if (node.rowIndex > this.pageBoundsService.getLastRow()) {\n          extraHeight += node.rowHeight;\n        }\n      });\n      if (extraHeight > this.bottomContainerHeight) {\n        extraHeight = this.bottomContainerHeight;\n      }\n      this.setOffsetBottom(extraHeight);\n    }\n    if (!hasSomethingChanged) {\n      return false;\n    }\n    if (isTop) {\n      this.stickyTopRowCtrls = newCtrlsList;\n    } else {\n      this.stickyBottomRowCtrls = newCtrlsList;\n    }\n    return true;\n  }\n  ensureRowHeightsValid() {\n    let anyChange = false;\n    const updateRowHeight = (ctrl) => {\n      const rowNode = ctrl.getRowNode();\n      if (rowNode.rowHeightEstimated) {\n        const rowHeight = _getRowHeightForNode(this.gos, rowNode);\n        rowNode.setRowHeight(rowHeight.height);\n        anyChange = true;\n      }\n    };\n    this.stickyTopRowCtrls.forEach(updateRowHeight);\n    this.stickyBottomRowCtrls.forEach(updateRowHeight);\n    return anyChange;\n  }\n};\n\n// community-modules/core/src/rendering/rowRenderer.ts\nvar RowRenderer = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowRenderer\";\n    this.destroyFuncsForColumnListeners = [];\n    // map of row ids to row objects. keeps track of which elements\n    // are rendered for which rows in the dom.\n    this.rowCtrlsByRowIndex = {};\n    this.zombieRowCtrls = {};\n    this.allRowCtrls = [];\n    this.topRowCtrls = [];\n    this.bottomRowCtrls = [];\n    // we only allow one refresh at a time, otherwise the internal memory structure here\n    // will get messed up. this can happen if the user has a cellRenderer, and inside the\n    // renderer they call an API method that results in another pass of the refresh,\n    // then it will be trying to draw rows in the middle of a refresh.\n    this.refreshInProgress = false;\n    this.dataFirstRenderedFired = false;\n    this.setupRangeSelectionListeners = () => {\n      const onCellSelectionChanged = () => {\n        this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onCellSelectionChanged());\n      };\n      const onColumnMovedPinnedVisible = () => {\n        this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.updateRangeBordersIfRangeCount());\n      };\n      const addCellSelectionListeners = () => {\n        this.eventService.addEventListener(\"cellSelectionChanged\", onCellSelectionChanged);\n        this.eventService.addEventListener(\"columnMoved\", onColumnMovedPinnedVisible);\n        this.eventService.addEventListener(\"columnPinned\", onColumnMovedPinnedVisible);\n        this.eventService.addEventListener(\"columnVisible\", onColumnMovedPinnedVisible);\n      };\n      const removeCellSelectionListeners = () => {\n        this.eventService.removeEventListener(\"cellSelectionChanged\", onCellSelectionChanged);\n        this.eventService.removeEventListener(\"columnMoved\", onColumnMovedPinnedVisible);\n        this.eventService.removeEventListener(\"columnPinned\", onColumnMovedPinnedVisible);\n        this.eventService.removeEventListener(\"columnVisible\", onColumnMovedPinnedVisible);\n      };\n      this.addDestroyFunc(() => removeCellSelectionListeners());\n      this.addManagedPropertyListeners([\"enableRangeSelection\", \"cellSelection\"], () => {\n        const isEnabled = _isCellSelectionEnabled(this.gos);\n        if (isEnabled) {\n          addCellSelectionListeners();\n        } else {\n          removeCellSelectionListeners();\n        }\n      });\n      const cellSelectionEnabled = _isCellSelectionEnabled(this.gos);\n      if (cellSelectionEnabled) {\n        addCellSelectionListeners();\n      }\n    };\n  }\n  wireBeans(beans) {\n    this.animationFrameService = beans.animationFrameService;\n    this.paginationService = beans.paginationService;\n    this.pageBoundsService = beans.pageBoundsService;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.rowModel = beans.rowModel;\n    this.focusService = beans.focusService;\n    this.beans = beans;\n    this.rowContainerHeightService = beans.rowContainerHeightService;\n    this.ctrlsService = beans.ctrlsService;\n    this.environment = beans.environment;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridBodyCtrl = p.gridBodyCtrl;\n      this.initialise();\n    });\n  }\n  initialise() {\n    this.addManagedEventListeners({\n      paginationChanged: this.onPageLoaded.bind(this),\n      pinnedRowDataChanged: this.onPinnedRowDataChanged.bind(this),\n      displayedColumnsChanged: this.onDisplayedColumnsChanged.bind(this),\n      bodyScroll: this.onBodyScroll.bind(this),\n      bodyHeightChanged: this.redraw.bind(this, {})\n    });\n    this.addManagedPropertyListeners([\"domLayout\", \"embedFullWidthRows\"], () => this.onDomLayoutChanged());\n    this.addManagedPropertyListeners([\"suppressMaxRenderedRowRestriction\", \"rowBuffer\"], () => this.redraw());\n    this.addManagedPropertyListener(\"suppressCellFocus\", (e) => this.onSuppressCellFocusChanged(e.currentValue));\n    this.addManagedPropertyListeners(\n      [\n        \"groupSuppressBlankHeader\",\n        \"getBusinessKeyForNode\",\n        \"fullWidthCellRenderer\",\n        \"fullWidthCellRendererParams\",\n        \"suppressStickyTotalRow\",\n        \"groupRowRenderer\",\n        \"groupRowRendererParams\",\n        // maybe only needs to refresh FW rows...\n        \"loadingCellRenderer\",\n        \"loadingCellRendererParams\",\n        \"detailCellRenderer\",\n        \"detailCellRendererParams\",\n        \"enableRangeSelection\",\n        \"enableCellTextSelection\",\n        \"rowSelection\"\n      ],\n      () => this.redrawRows()\n    );\n    if (_isGroupRowsSticky(this.gos)) {\n      if (_isClientSideRowModel(this.gos) || _isServerSideRowModel(this.gos)) {\n        this.stickyRowFeature = this.createManagedBean(\n          new StickyRowFeature(this.createRowCon.bind(this), this.destroyRowCtrls.bind(this))\n        );\n      }\n    }\n    this.registerCellEventListeners();\n    this.initialiseCache();\n    this.printLayout = _isDomLayout(this.gos, \"print\");\n    this.embedFullWidthRows = this.printLayout || this.gos.get(\"embedFullWidthRows\");\n    this.redrawAfterModelUpdate();\n  }\n  initialiseCache() {\n    if (this.gos.get(\"keepDetailRows\")) {\n      const countProp = this.getKeepDetailRowsCount();\n      const count = countProp != null ? countProp : 3;\n      this.cachedRowCtrls = new RowCtrlCache(count);\n    }\n  }\n  getKeepDetailRowsCount() {\n    return this.gos.get(\"keepDetailRowsCount\");\n  }\n  getStickyTopRowCtrls() {\n    if (!this.stickyRowFeature) {\n      return [];\n    }\n    return this.stickyRowFeature.getStickyTopRowCtrls();\n  }\n  getStickyBottomRowCtrls() {\n    if (!this.stickyRowFeature) {\n      return [];\n    }\n    return this.stickyRowFeature.getStickyBottomRowCtrls();\n  }\n  updateAllRowCtrls() {\n    const liveList = _getAllValuesInObject(this.rowCtrlsByRowIndex);\n    const zombieList = _getAllValuesInObject(this.zombieRowCtrls);\n    const cachedList = this.cachedRowCtrls ? this.cachedRowCtrls.getEntries() : [];\n    if (zombieList.length > 0 || cachedList.length > 0) {\n      this.allRowCtrls = [...liveList, ...zombieList, ...cachedList];\n    } else {\n      this.allRowCtrls = liveList;\n    }\n  }\n  onCellFocusChanged(event) {\n    this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onCellFocused(event));\n    this.getFullWidthRowCtrls().forEach((rowCtrl) => rowCtrl.onFullWidthRowFocused(event));\n  }\n  onSuppressCellFocusChanged(suppressCellFocus) {\n    this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onSuppressCellFocusChanged(suppressCellFocus));\n    this.getFullWidthRowCtrls().forEach((rowCtrl) => rowCtrl.onSuppressCellFocusChanged(suppressCellFocus));\n  }\n  // in a clean design, each cell would register for each of these events. however when scrolling, all the cells\n  // registering and de-registering for events is a performance bottleneck. so we register here once and inform\n  // all active cells.\n  registerCellEventListeners() {\n    this.addManagedEventListeners({\n      cellFocused: (event) => {\n        this.onCellFocusChanged(event);\n      },\n      cellFocusCleared: () => this.onCellFocusChanged(),\n      flashCells: (event) => {\n        this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onFlashCells(event));\n      },\n      columnHoverChanged: () => {\n        this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onColumnHover());\n      },\n      displayedColumnsChanged: () => {\n        this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onDisplayedColumnsChanged());\n      },\n      displayedColumnsWidthChanged: () => {\n        if (this.printLayout) {\n          this.getAllCellCtrls().forEach((cellCtrl) => cellCtrl.onLeftChanged());\n        }\n      }\n    });\n    this.setupRangeSelectionListeners();\n    this.refreshListenersToColumnsForCellComps();\n    this.addManagedEventListeners({\n      gridColumnsChanged: this.refreshListenersToColumnsForCellComps.bind(this)\n    });\n    this.addDestroyFunc(this.removeGridColumnListeners.bind(this));\n  }\n  // executes all functions in destroyFuncsForColumnListeners and then clears the list\n  removeGridColumnListeners() {\n    this.destroyFuncsForColumnListeners.forEach((func) => func());\n    this.destroyFuncsForColumnListeners.length = 0;\n  }\n  // this function adds listeners onto all the grid columns, which are the column that we could have cellComps for.\n  // when the grid columns change, we add listeners again. in an ideal design, each CellComp would just register to\n  // the column it belongs to on creation, however this was a bottleneck with the number of cells, so do it here\n  // once instead.\n  refreshListenersToColumnsForCellComps() {\n    this.removeGridColumnListeners();\n    const cols = this.columnModel.getCols();\n    cols.forEach((col) => {\n      const forEachCellWithThisCol = (callback) => {\n        this.getAllCellCtrls().forEach((cellCtrl) => {\n          if (cellCtrl.getColumn() === col) {\n            callback(cellCtrl);\n          }\n        });\n      };\n      const leftChangedListener = () => {\n        forEachCellWithThisCol((cellCtrl) => cellCtrl.onLeftChanged());\n      };\n      const widthChangedListener = () => {\n        forEachCellWithThisCol((cellCtrl) => cellCtrl.onWidthChanged());\n      };\n      const firstRightPinnedChangedListener = () => {\n        forEachCellWithThisCol((cellCtrl) => cellCtrl.onFirstRightPinnedChanged());\n      };\n      const lastLeftPinnedChangedListener = () => {\n        forEachCellWithThisCol((cellCtrl) => cellCtrl.onLastLeftPinnedChanged());\n      };\n      const colDefChangedListener = () => {\n        forEachCellWithThisCol((cellCtrl) => cellCtrl.onColDefChanged());\n      };\n      col.addEventListener(\"leftChanged\", leftChangedListener);\n      col.addEventListener(\"widthChanged\", widthChangedListener);\n      col.addEventListener(\"firstRightPinnedChanged\", firstRightPinnedChangedListener);\n      col.addEventListener(\"lastLeftPinnedChanged\", lastLeftPinnedChangedListener);\n      col.addEventListener(\"colDefChanged\", colDefChangedListener);\n      this.destroyFuncsForColumnListeners.push(() => {\n        col.removeEventListener(\"leftChanged\", leftChangedListener);\n        col.removeEventListener(\"widthChanged\", widthChangedListener);\n        col.removeEventListener(\"firstRightPinnedChanged\", firstRightPinnedChangedListener);\n        col.removeEventListener(\"lastLeftPinnedChanged\", lastLeftPinnedChangedListener);\n        col.removeEventListener(\"colDefChanged\", colDefChangedListener);\n      });\n    });\n  }\n  onDomLayoutChanged() {\n    const printLayout = _isDomLayout(this.gos, \"print\");\n    const embedFullWidthRows = printLayout || this.gos.get(\"embedFullWidthRows\");\n    const destroyRows = embedFullWidthRows !== this.embedFullWidthRows || this.printLayout !== printLayout;\n    this.printLayout = printLayout;\n    this.embedFullWidthRows = embedFullWidthRows;\n    if (destroyRows) {\n      this.redrawAfterModelUpdate({ domLayoutChanged: true });\n    }\n  }\n  // for row models that have datasources, when we update the datasource, we need to force the rowRenderer\n  // to redraw all rows. otherwise the old rows from the old datasource will stay displayed.\n  datasourceChanged() {\n    this.firstRenderedRow = 0;\n    this.lastRenderedRow = -1;\n    const rowIndexesToRemove = Object.keys(this.rowCtrlsByRowIndex);\n    this.removeRowCtrls(rowIndexesToRemove);\n  }\n  onPageLoaded(event) {\n    const params = {\n      recycleRows: event.keepRenderedRows,\n      animate: event.animate,\n      newData: event.newData,\n      newPage: event.newPage,\n      // because this is a model updated event (not pinned rows), we\n      // can skip updating the pinned rows. this is needed so that if user\n      // is doing transaction updates, the pinned rows are not getting constantly\n      // trashed - or editing cells in pinned rows are not refreshed and put into read mode\n      onlyBody: true\n    };\n    this.redrawAfterModelUpdate(params);\n  }\n  getAllCellsForColumn(column) {\n    const res = [];\n    this.getAllRowCtrls().forEach((rowCtrl) => {\n      const eCell = rowCtrl.getCellElement(column);\n      if (eCell) {\n        res.push(eCell);\n      }\n    });\n    return res;\n  }\n  refreshFloatingRowComps() {\n    this.refreshFloatingRows(this.topRowCtrls, \"top\");\n    this.refreshFloatingRows(this.bottomRowCtrls, \"bottom\");\n  }\n  getTopRowCtrls() {\n    return this.topRowCtrls;\n  }\n  getCentreRowCtrls() {\n    return this.allRowCtrls;\n  }\n  getBottomRowCtrls() {\n    return this.bottomRowCtrls;\n  }\n  /**\n   * Determines which row controllers need to be destroyed and re-created vs which ones can\n   * be re-used.\n   *\n   * This is operation is to pinned/floating rows as `this.recycleRows` is to normal/body rows.\n   *\n   * All `RowCtrl` instances in `rowCtrls` that don't correspond to `RowNode` instances in `rowNodes` are destroyed.\n   * All `RowNode` instances in `rowNodes` that don't correspond to `RowCtrl` instances in `rowCtrls` are created.\n   * All instances in `rowCtrls` must be in the same order as their corresponding nodes in `rowNodes`.\n   *\n   * @param rowCtrls The list of existing row controllers\n   * @param rowNodes The canonical list of row nodes that should have associated controllers\n   */\n  refreshFloatingRows(rowCtrls, floating) {\n    const { pinnedRowModel, beans, printLayout } = this;\n    const rowCtrlMap = Object.fromEntries(rowCtrls.map((ctrl) => [ctrl.getRowNode().id, ctrl]));\n    pinnedRowModel.forEachPinnedRow(floating, (node, i) => {\n      const rowCtrl = rowCtrls[i];\n      const rowCtrlDoesNotExist = rowCtrl && pinnedRowModel.getPinnedRowById(rowCtrl.getRowNode().id, floating) === void 0;\n      if (rowCtrlDoesNotExist) {\n        rowCtrl.destroyFirstPass();\n        rowCtrl.destroySecondPass();\n      }\n      if (node.id in rowCtrlMap) {\n        rowCtrls[i] = rowCtrlMap[node.id];\n        delete rowCtrlMap[node.id];\n      } else {\n        rowCtrls[i] = new RowCtrl(node, beans, false, false, printLayout);\n      }\n    });\n    const rowNodeCount = floating === \"top\" ? pinnedRowModel.getPinnedTopRowCount() : pinnedRowModel.getPinnedBottomRowCount();\n    rowCtrls.length = rowNodeCount;\n  }\n  onPinnedRowDataChanged() {\n    const params = {\n      recycleRows: true\n    };\n    this.redrawAfterModelUpdate(params);\n  }\n  redrawRow(rowNode, suppressEvent = false) {\n    if (rowNode.sticky) {\n      this.stickyRowFeature.refreshStickyNode(rowNode);\n    } else if (this.cachedRowCtrls?.has(rowNode)) {\n      this.cachedRowCtrls.removeRow(rowNode);\n      return;\n    } else {\n      const destroyAndRecreateCtrl = (dataStruct) => {\n        const ctrl = dataStruct[rowNode.rowIndex];\n        if (!ctrl) {\n          return;\n        }\n        if (ctrl.getRowNode() !== rowNode) {\n          return;\n        }\n        ctrl.destroyFirstPass();\n        ctrl.destroySecondPass();\n        dataStruct[rowNode.rowIndex] = this.createRowCon(rowNode, false, false);\n      };\n      switch (rowNode.rowPinned) {\n        case \"top\":\n          destroyAndRecreateCtrl(this.topRowCtrls);\n          break;\n        case \"bottom\":\n          destroyAndRecreateCtrl(this.bottomRowCtrls);\n          break;\n        default:\n          destroyAndRecreateCtrl(this.rowCtrlsByRowIndex);\n          this.updateAllRowCtrls();\n      }\n    }\n    if (!suppressEvent) {\n      this.dispatchDisplayedRowsChanged(false);\n    }\n  }\n  redrawRows(rowNodes) {\n    const partialRefresh = rowNodes != null;\n    if (partialRefresh) {\n      rowNodes?.forEach((node) => this.redrawRow(node, true));\n      this.dispatchDisplayedRowsChanged(false);\n      return;\n    }\n    this.redrawAfterModelUpdate();\n  }\n  getCellToRestoreFocusToAfterRefresh(params) {\n    const focusedCell = params?.suppressKeepFocus ? null : this.focusService.getFocusCellToUseAfterRefresh();\n    if (focusedCell == null) {\n      return null;\n    }\n    const activeElement = _getActiveDomElement(this.gos);\n    const cellDomData = _getDomData(this.gos, activeElement, CellCtrl.DOM_DATA_KEY_CELL_CTRL);\n    const rowDomData = _getDomData(this.gos, activeElement, RowCtrl.DOM_DATA_KEY_ROW_CTRL);\n    const gridElementFocused = cellDomData || rowDomData;\n    return gridElementFocused ? focusedCell : null;\n  }\n  // gets called from:\n  // +) initialisation (in registerGridComp) params = null\n  // +) onDomLayoutChanged, params = null\n  // +) onPageLoaded, recycleRows, animate, newData, newPage from event, onlyBody=true\n  // +) onPinnedRowDataChanged, recycleRows = true\n  // +) redrawRows (from Grid API), recycleRows = true/false\n  redrawAfterModelUpdate(params = {}) {\n    this.getLockOnRefresh();\n    const focusedCell = this.getCellToRestoreFocusToAfterRefresh(params);\n    this.updateContainerHeights();\n    this.scrollToTopIfNewData(params);\n    const recycleRows = !params.domLayoutChanged && !!params.recycleRows;\n    const animate = params.animate && _isAnimateRows(this.gos);\n    const rowsToRecycle = recycleRows ? this.getRowsToRecycle() : null;\n    if (!recycleRows) {\n      this.removeAllRowComps();\n    }\n    this.workOutFirstAndLastRowsToRender();\n    if (this.stickyRowFeature) {\n      this.stickyRowFeature.checkStickyRows();\n      const extraHeight = this.stickyRowFeature.getExtraTopHeight() + this.stickyRowFeature.getExtraBottomHeight();\n      if (extraHeight) {\n        this.updateContainerHeights(extraHeight);\n      }\n    }\n    this.recycleRows(rowsToRecycle, animate);\n    this.gridBodyCtrl.updateRowCount();\n    if (!params.onlyBody) {\n      this.refreshFloatingRowComps();\n    }\n    this.dispatchDisplayedRowsChanged();\n    if (focusedCell != null) {\n      this.restoreFocusedCell(focusedCell);\n    }\n    this.releaseLockOnRefresh();\n  }\n  scrollToTopIfNewData(params) {\n    const scrollToTop = params.newData || params.newPage;\n    const suppressScrollToTop = this.gos.get(\"suppressScrollOnNewData\");\n    if (scrollToTop && !suppressScrollToTop) {\n      this.gridBodyCtrl.getScrollFeature().scrollToTop();\n      this.stickyRowFeature?.resetOffsets();\n    }\n  }\n  updateContainerHeights(additionalHeight = 0) {\n    if (this.printLayout) {\n      this.rowContainerHeightService.setModelHeight(null);\n      return;\n    }\n    let containerHeight = this.pageBoundsService.getCurrentPageHeight();\n    if (containerHeight === 0) {\n      containerHeight = 1;\n    }\n    this.rowContainerHeightService.setModelHeight(containerHeight + additionalHeight);\n  }\n  getLockOnRefresh() {\n    if (this.refreshInProgress) {\n      throw new Error(\n        \"AG Grid: cannot get grid to draw rows when it is in the middle of drawing rows. Your code probably called a grid API method while the grid was in the render stage. To overcome this, put the API call into a timeout, e.g. instead of api.redrawRows(), call setTimeout(function() { api.redrawRows(); }, 0). To see what part of your code that caused the refresh check this stacktrace.\"\n      );\n    }\n    this.refreshInProgress = true;\n    this.frameworkOverrides.getLockOnRefresh?.();\n  }\n  releaseLockOnRefresh() {\n    this.refreshInProgress = false;\n    this.frameworkOverrides.releaseLockOnRefresh?.();\n  }\n  isRefreshInProgress() {\n    return this.refreshInProgress;\n  }\n  // sets the focus to the provided cell, if the cell is provided. this way, the user can call refresh without\n  // worry about the focus been lost. this is important when the user is using keyboard navigation to do edits\n  // and the cellEditor is calling 'refresh' to get other cells to update (as other cells might depend on the\n  // edited cell).\n  restoreFocusedCell(cellPosition) {\n    if (!cellPosition) {\n      return;\n    }\n    this.focusService.restoreFocusedCell(cellPosition, () => {\n      this.onCellFocusChanged(\n        this.gos.addGridCommonParams({\n          rowIndex: cellPosition.rowIndex,\n          column: cellPosition.column,\n          rowPinned: cellPosition.rowPinned,\n          forceBrowserFocus: true,\n          preventScrollOnBrowserFocus: true,\n          type: \"cellFocused\"\n        })\n      );\n    });\n  }\n  stopEditing(cancel = false) {\n    this.getAllRowCtrls().forEach((rowCtrl) => {\n      rowCtrl.stopEditing(cancel);\n    });\n  }\n  getAllCellCtrls() {\n    const res = [];\n    const rowCtrls = this.getAllRowCtrls();\n    const rowCtrlsLength = rowCtrls.length;\n    for (let i = 0; i < rowCtrlsLength; i++) {\n      const cellCtrls = rowCtrls[i].getAllCellCtrls();\n      const cellCtrlsLength = cellCtrls.length;\n      for (let j = 0; j < cellCtrlsLength; j++) {\n        res.push(cellCtrls[j]);\n      }\n    }\n    return res;\n  }\n  getAllRowCtrls() {\n    const stickyTopRowCtrls = this.stickyRowFeature && this.stickyRowFeature.getStickyTopRowCtrls() || [];\n    const stickyBottomRowCtrls = this.stickyRowFeature && this.stickyRowFeature.getStickyBottomRowCtrls() || [];\n    const res = [...this.topRowCtrls, ...this.bottomRowCtrls, ...stickyTopRowCtrls, ...stickyBottomRowCtrls];\n    for (const key in this.rowCtrlsByRowIndex) {\n      res.push(this.rowCtrlsByRowIndex[key]);\n    }\n    return res;\n  }\n  addRenderedRowListener(eventName, rowIndex, callback) {\n    const rowComp = this.rowCtrlsByRowIndex[rowIndex];\n    if (rowComp) {\n      rowComp.addEventListener(eventName, callback);\n    }\n  }\n  flashCells(params = {}) {\n    this.getCellCtrls(params.rowNodes, params.columns).forEach(\n      (cellCtrl) => cellCtrl.flashCell(params)\n    );\n  }\n  refreshCells(params = {}) {\n    const refreshCellParams = {\n      forceRefresh: params.force,\n      newData: false,\n      suppressFlash: params.suppressFlash\n    };\n    for (const cellCtrl of this.getCellCtrls(params.rowNodes, params.columns)) {\n      cellCtrl.refreshOrDestroyCell(refreshCellParams);\n    }\n    this.refreshFullWidth(params.rowNodes);\n  }\n  refreshFullWidth(rowNodes) {\n    if (!rowNodes) {\n      return;\n    }\n    let cellFocused = null;\n    if (this.stickyRowFeature && _browserSupportsPreventScroll()) {\n      cellFocused = this.getCellToRestoreFocusToAfterRefresh() || null;\n    }\n    for (const rowCtrl of this.getRowCtrls(rowNodes)) {\n      if (!rowCtrl.isFullWidth()) {\n        continue;\n      }\n      const refreshed = rowCtrl.refreshFullWidth();\n      if (!refreshed) {\n        this.redrawRow(rowCtrl.getRowNode(), true);\n      }\n    }\n    this.dispatchDisplayedRowsChanged(false);\n    if (cellFocused) {\n      this.restoreFocusedCell(cellFocused);\n    }\n  }\n  getCellRendererInstances(params) {\n    const cellRenderers = this.getCellCtrls(params.rowNodes, params.columns).map((cellCtrl) => cellCtrl.getCellRenderer()).filter((renderer) => renderer != null);\n    if (params.columns?.length) {\n      return cellRenderers;\n    }\n    const fullWidthRenderers = [];\n    const rowIdMap = this.mapRowNodes(params.rowNodes);\n    this.getAllRowCtrls().forEach((rowCtrl) => {\n      if (rowIdMap && !this.isRowInMap(rowCtrl.getRowNode(), rowIdMap)) {\n        return;\n      }\n      if (!rowCtrl.isFullWidth()) {\n        return;\n      }\n      const renderers = rowCtrl.getFullWidthCellRenderers();\n      for (let i = 0; i < renderers.length; i++) {\n        const renderer = renderers[i];\n        if (renderer != null) {\n          fullWidthRenderers.push(renderer);\n        }\n      }\n    });\n    return [...fullWidthRenderers, ...cellRenderers];\n  }\n  getCellEditorInstances(params) {\n    const res = [];\n    this.getCellCtrls(params.rowNodes, params.columns).forEach((cellCtrl) => {\n      const cellEditor = cellCtrl.getCellEditor();\n      if (cellEditor) {\n        res.push(cellEditor);\n      }\n    });\n    return res;\n  }\n  getEditingCells() {\n    const res = [];\n    this.getAllCellCtrls().forEach((cellCtrl) => {\n      if (cellCtrl.isEditing()) {\n        const cellPosition = cellCtrl.getCellPosition();\n        res.push(cellPosition);\n      }\n    });\n    return res;\n  }\n  mapRowNodes(rowNodes) {\n    if (!rowNodes) {\n      return;\n    }\n    const res = {\n      top: {},\n      bottom: {},\n      normal: {}\n    };\n    rowNodes.forEach((rowNode) => {\n      const id = rowNode.id;\n      switch (rowNode.rowPinned) {\n        case \"top\":\n          res.top[id] = rowNode;\n          break;\n        case \"bottom\":\n          res.bottom[id] = rowNode;\n          break;\n        default:\n          res.normal[id] = rowNode;\n          break;\n      }\n    });\n    return res;\n  }\n  isRowInMap(rowNode, rowIdsMap) {\n    const id = rowNode.id;\n    const floating = rowNode.rowPinned;\n    switch (floating) {\n      case \"top\":\n        return rowIdsMap.top[id] != null;\n      case \"bottom\":\n        return rowIdsMap.bottom[id] != null;\n      default:\n        return rowIdsMap.normal[id] != null;\n    }\n  }\n  /**\n   * @param rowNodes if provided, returns the RowCtrls for the provided rowNodes. otherwise returns all RowCtrls.\n   */\n  getRowCtrls(rowNodes) {\n    const rowIdsMap = this.mapRowNodes(rowNodes);\n    const allRowCtrls = this.getAllRowCtrls();\n    if (!rowNodes || !rowIdsMap) {\n      return allRowCtrls;\n    }\n    return allRowCtrls.filter((rowCtrl) => {\n      const rowNode = rowCtrl.getRowNode();\n      return this.isRowInMap(rowNode, rowIdsMap);\n    });\n  }\n  // returns CellCtrl's that match the provided rowNodes and columns. eg if one row node\n  // and two columns provided, that identifies 4 cells, so 4 CellCtrl's returned.\n  getCellCtrls(rowNodes, columns) {\n    let colIdsMap;\n    if (_exists(columns)) {\n      colIdsMap = {};\n      columns.forEach((colKey) => {\n        const column = this.columnModel.getCol(colKey);\n        if (_exists(column)) {\n          colIdsMap[column.getId()] = true;\n        }\n      });\n    }\n    const res = [];\n    this.getRowCtrls(rowNodes).forEach((rowCtrl) => {\n      rowCtrl.getAllCellCtrls().forEach((cellCtrl) => {\n        const colId = cellCtrl.getColumn().getId();\n        const excludeColFromRefresh = colIdsMap && !colIdsMap[colId];\n        if (excludeColFromRefresh) {\n          return;\n        }\n        res.push(cellCtrl);\n      });\n    });\n    return res;\n  }\n  destroy() {\n    this.removeAllRowComps(true);\n    super.destroy();\n  }\n  removeAllRowComps(suppressAnimation = false) {\n    const rowIndexesToRemove = Object.keys(this.rowCtrlsByRowIndex);\n    this.removeRowCtrls(rowIndexesToRemove, suppressAnimation);\n    if (this.stickyRowFeature) {\n      this.stickyRowFeature.destroyStickyCtrls();\n    }\n  }\n  getRowsToRecycle() {\n    const stubNodeIndexes = [];\n    _iterateObject(this.rowCtrlsByRowIndex, (index, rowCtrl) => {\n      const stubNode = rowCtrl.getRowNode().id == null;\n      if (stubNode) {\n        stubNodeIndexes.push(index);\n      }\n    });\n    this.removeRowCtrls(stubNodeIndexes);\n    const ctrlsByIdMap = {};\n    _iterateObject(this.rowCtrlsByRowIndex, (_, rowCtrl) => {\n      const rowNode = rowCtrl.getRowNode();\n      ctrlsByIdMap[rowNode.id] = rowCtrl;\n    });\n    this.rowCtrlsByRowIndex = {};\n    return ctrlsByIdMap;\n  }\n  // takes array of row indexes\n  removeRowCtrls(rowsToRemove, suppressAnimation = false) {\n    rowsToRemove.forEach((indexToRemove) => {\n      const rowCtrl = this.rowCtrlsByRowIndex[indexToRemove];\n      if (rowCtrl) {\n        rowCtrl.destroyFirstPass(suppressAnimation);\n        rowCtrl.destroySecondPass();\n      }\n      delete this.rowCtrlsByRowIndex[indexToRemove];\n    });\n  }\n  onBodyScroll(e) {\n    if (e.direction !== \"vertical\") {\n      return;\n    }\n    this.redraw({ afterScroll: true });\n  }\n  // gets called when rows don't change, but viewport does, so after:\n  // 1) height of grid body changes, ie number of displayed rows has changed\n  // 2) grid scrolled to new position\n  // 3) ensure index visible (which is a scroll)\n  redraw(params = {}) {\n    const { afterScroll } = params;\n    let cellFocused;\n    if (this.stickyRowFeature && _browserSupportsPreventScroll()) {\n      cellFocused = this.getCellToRestoreFocusToAfterRefresh() || void 0;\n    }\n    const oldFirstRow = this.firstRenderedRow;\n    const oldLastRow = this.lastRenderedRow;\n    this.workOutFirstAndLastRowsToRender();\n    let hasStickyRowChanges = false;\n    if (this.stickyRowFeature) {\n      hasStickyRowChanges = this.stickyRowFeature.checkStickyRows();\n      const extraHeight = this.stickyRowFeature.getExtraTopHeight() + this.stickyRowFeature.getExtraBottomHeight();\n      if (extraHeight) {\n        this.updateContainerHeights(extraHeight);\n      }\n    }\n    const rangeChanged = this.firstRenderedRow !== oldFirstRow || this.lastRenderedRow !== oldLastRow;\n    if (afterScroll && !hasStickyRowChanges && !rangeChanged) {\n      return;\n    }\n    this.getLockOnRefresh();\n    this.recycleRows(null, false, afterScroll);\n    this.releaseLockOnRefresh();\n    this.dispatchDisplayedRowsChanged(afterScroll && !hasStickyRowChanges);\n    if (cellFocused != null) {\n      const newFocusedCell = this.getCellToRestoreFocusToAfterRefresh();\n      if (cellFocused != null && newFocusedCell == null) {\n        this.animationFrameService.flushAllFrames();\n        this.restoreFocusedCell(cellFocused);\n      }\n    }\n  }\n  removeRowCompsNotToDraw(indexesToDraw, suppressAnimation) {\n    const indexesToDrawMap = {};\n    indexesToDraw.forEach((index) => indexesToDrawMap[index] = true);\n    const existingIndexes = Object.keys(this.rowCtrlsByRowIndex);\n    const indexesNotToDraw = existingIndexes.filter((index) => !indexesToDrawMap[index]);\n    this.removeRowCtrls(indexesNotToDraw, suppressAnimation);\n  }\n  calculateIndexesToDraw(rowsToRecycle) {\n    const indexesToDraw = _createArrayOfNumbers(this.firstRenderedRow, this.lastRenderedRow);\n    const checkRowToDraw = (indexStr, rowComp) => {\n      const index = rowComp.getRowNode().rowIndex;\n      if (index == null) {\n        return;\n      }\n      if (index < this.firstRenderedRow || index > this.lastRenderedRow) {\n        if (this.doNotUnVirtualiseRow(rowComp)) {\n          indexesToDraw.push(index);\n        }\n      }\n    };\n    _iterateObject(this.rowCtrlsByRowIndex, checkRowToDraw);\n    _iterateObject(rowsToRecycle, checkRowToDraw);\n    indexesToDraw.sort((a, b) => a - b);\n    const ret = [];\n    for (let i = 0; i < indexesToDraw.length; i++) {\n      const currRow = indexesToDraw[i];\n      const rowNode = this.rowModel.getRow(currRow);\n      if (rowNode && !rowNode.sticky) {\n        ret.push(currRow);\n      }\n    }\n    return ret;\n  }\n  recycleRows(rowsToRecycle, animate = false, afterScroll = false) {\n    const indexesToDraw = this.calculateIndexesToDraw(rowsToRecycle);\n    if (this.printLayout || afterScroll) {\n      animate = false;\n    }\n    this.removeRowCompsNotToDraw(indexesToDraw, !animate);\n    const rowCtrls = [];\n    indexesToDraw.forEach((rowIndex) => {\n      const rowCtrl = this.createOrUpdateRowCtrl(rowIndex, rowsToRecycle, animate, afterScroll);\n      if (_exists(rowCtrl)) {\n        rowCtrls.push(rowCtrl);\n      }\n    });\n    if (rowsToRecycle) {\n      const useAnimationFrame = afterScroll && !this.gos.get(\"suppressAnimationFrame\") && !this.printLayout;\n      if (useAnimationFrame) {\n        this.beans.animationFrameService.addDestroyTask(() => {\n          this.destroyRowCtrls(rowsToRecycle, animate);\n          this.updateAllRowCtrls();\n          this.dispatchDisplayedRowsChanged();\n        });\n      } else {\n        this.destroyRowCtrls(rowsToRecycle, animate);\n      }\n    }\n    this.updateAllRowCtrls();\n  }\n  dispatchDisplayedRowsChanged(afterScroll = false) {\n    this.eventService.dispatchEvent({\n      type: \"displayedRowsChanged\",\n      afterScroll\n    });\n  }\n  onDisplayedColumnsChanged() {\n    const pinningLeft = this.visibleColsService.isPinningLeft();\n    const pinningRight = this.visibleColsService.isPinningRight();\n    const atLeastOneChanged = this.pinningLeft !== pinningLeft || pinningRight !== this.pinningRight;\n    if (atLeastOneChanged) {\n      this.pinningLeft = pinningLeft;\n      this.pinningRight = pinningRight;\n      if (this.embedFullWidthRows) {\n        this.redrawFullWidthEmbeddedRows();\n      }\n    }\n  }\n  // when embedding, what gets showed in each section depends on what is pinned. eg if embedding group expand / collapse,\n  // then it should go into the pinned left area if pinning left, or the center area if not pinning.\n  redrawFullWidthEmbeddedRows() {\n    const rowsToRemove = [];\n    this.getFullWidthRowCtrls().forEach((fullWidthCtrl) => {\n      const rowIndex = fullWidthCtrl.getRowNode().rowIndex;\n      rowsToRemove.push(rowIndex.toString());\n    });\n    this.refreshFloatingRowComps();\n    this.removeRowCtrls(rowsToRemove);\n    this.redraw({ afterScroll: true });\n  }\n  getFullWidthRowCtrls(rowNodes) {\n    const rowNodesMap = this.mapRowNodes(rowNodes);\n    return this.getAllRowCtrls().filter((rowCtrl) => {\n      if (!rowCtrl.isFullWidth()) {\n        return false;\n      }\n      const rowNode = rowCtrl.getRowNode();\n      if (rowNodesMap != null && !this.isRowInMap(rowNode, rowNodesMap)) {\n        return false;\n      }\n      return true;\n    });\n  }\n  createOrUpdateRowCtrl(rowIndex, rowsToRecycle, animate, afterScroll) {\n    let rowNode;\n    let rowCtrl = this.rowCtrlsByRowIndex[rowIndex];\n    if (!rowCtrl) {\n      rowNode = this.rowModel.getRow(rowIndex);\n      if (_exists(rowNode) && _exists(rowsToRecycle) && rowsToRecycle[rowNode.id] && rowNode.alreadyRendered) {\n        rowCtrl = rowsToRecycle[rowNode.id];\n        rowsToRecycle[rowNode.id] = null;\n      }\n    }\n    const creatingNewRowCtrl = !rowCtrl;\n    if (creatingNewRowCtrl) {\n      if (!rowNode) {\n        rowNode = this.rowModel.getRow(rowIndex);\n      }\n      if (_exists(rowNode)) {\n        rowCtrl = this.createRowCon(rowNode, animate, afterScroll);\n      } else {\n        return;\n      }\n    }\n    if (rowNode) {\n      rowNode.alreadyRendered = true;\n    }\n    this.rowCtrlsByRowIndex[rowIndex] = rowCtrl;\n    return rowCtrl;\n  }\n  destroyRowCtrls(rowCtrlsMap, animate) {\n    const executeInAWhileFuncs = [];\n    _iterateObject(rowCtrlsMap, (nodeId, rowCtrl) => {\n      if (!rowCtrl) {\n        return;\n      }\n      if (this.cachedRowCtrls && rowCtrl.isCacheable()) {\n        this.cachedRowCtrls.addRow(rowCtrl);\n        return;\n      }\n      rowCtrl.destroyFirstPass(!animate);\n      if (animate) {\n        const instanceId = rowCtrl.instanceId;\n        this.zombieRowCtrls[instanceId] = rowCtrl;\n        executeInAWhileFuncs.push(() => {\n          rowCtrl.destroySecondPass();\n          delete this.zombieRowCtrls[instanceId];\n        });\n      } else {\n        rowCtrl.destroySecondPass();\n      }\n    });\n    if (animate) {\n      executeInAWhileFuncs.push(() => {\n        this.updateAllRowCtrls();\n        this.dispatchDisplayedRowsChanged();\n      });\n      _executeInAWhile(executeInAWhileFuncs);\n    }\n  }\n  getRowBuffer() {\n    return this.gos.get(\"rowBuffer\");\n  }\n  getRowBufferInPixels() {\n    const rowsToBuffer = this.getRowBuffer();\n    const defaultRowHeight = _getRowHeightAsNumber(this.gos);\n    return rowsToBuffer * defaultRowHeight;\n  }\n  workOutFirstAndLastRowsToRender() {\n    this.rowContainerHeightService.updateOffset();\n    let newFirst;\n    let newLast;\n    if (!this.rowModel.isRowsToRender()) {\n      newFirst = 0;\n      newLast = -1;\n    } else if (this.printLayout) {\n      this.environment.refreshRowHeightVariable();\n      newFirst = this.pageBoundsService.getFirstRow();\n      newLast = this.pageBoundsService.getLastRow();\n    } else {\n      const bufferPixels = this.getRowBufferInPixels();\n      const gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n      const suppressRowVirtualisation = this.gos.get(\"suppressRowVirtualisation\");\n      let rowHeightsChanged = false;\n      let firstPixel;\n      let lastPixel;\n      do {\n        const paginationOffset = this.pageBoundsService.getPixelOffset();\n        const { pageFirstPixel, pageLastPixel } = this.pageBoundsService.getCurrentPagePixelRange();\n        const divStretchOffset = this.rowContainerHeightService.getDivStretchOffset();\n        const bodyVRange = gridBodyCtrl.getScrollFeature().getVScrollPosition();\n        const bodyTopPixel = bodyVRange.top;\n        const bodyBottomPixel = bodyVRange.bottom;\n        if (suppressRowVirtualisation) {\n          firstPixel = pageFirstPixel + divStretchOffset;\n          lastPixel = pageLastPixel + divStretchOffset;\n        } else {\n          firstPixel = Math.max(bodyTopPixel + paginationOffset - bufferPixels, pageFirstPixel) + divStretchOffset;\n          lastPixel = Math.min(bodyBottomPixel + paginationOffset + bufferPixels, pageLastPixel) + divStretchOffset;\n        }\n        this.firstVisibleVPixel = Math.max(bodyTopPixel + paginationOffset, pageFirstPixel) + divStretchOffset;\n        this.lastVisibleVPixel = Math.min(bodyBottomPixel + paginationOffset, pageLastPixel) + divStretchOffset;\n        rowHeightsChanged = this.ensureAllRowsInRangeHaveHeightsCalculated(firstPixel, lastPixel);\n      } while (rowHeightsChanged);\n      let firstRowIndex = this.rowModel.getRowIndexAtPixel(firstPixel);\n      let lastRowIndex = this.rowModel.getRowIndexAtPixel(lastPixel);\n      const pageFirstRow = this.pageBoundsService.getFirstRow();\n      const pageLastRow = this.pageBoundsService.getLastRow();\n      if (firstRowIndex < pageFirstRow) {\n        firstRowIndex = pageFirstRow;\n      }\n      if (lastRowIndex > pageLastRow) {\n        lastRowIndex = pageLastRow;\n      }\n      newFirst = firstRowIndex;\n      newLast = lastRowIndex;\n    }\n    const rowLayoutNormal = _isDomLayout(this.gos, \"normal\");\n    const suppressRowCountRestriction = this.gos.get(\"suppressMaxRenderedRowRestriction\");\n    const rowBufferMaxSize = Math.max(this.getRowBuffer(), 500);\n    if (rowLayoutNormal && !suppressRowCountRestriction) {\n      if (newLast - newFirst > rowBufferMaxSize) {\n        newLast = newFirst + rowBufferMaxSize;\n      }\n    }\n    const firstDiffers = newFirst !== this.firstRenderedRow;\n    const lastDiffers = newLast !== this.lastRenderedRow;\n    if (firstDiffers || lastDiffers) {\n      this.firstRenderedRow = newFirst;\n      this.lastRenderedRow = newLast;\n      this.eventService.dispatchEvent({\n        type: \"viewportChanged\",\n        firstRow: newFirst,\n        lastRow: newLast\n      });\n    }\n  }\n  /**\n   * This event will only be fired once, and is queued until after the browser next renders.\n   * This allows us to fire an event during the start of the render cycle, when we first see data being rendered\n   * but not execute the event until all of the data has finished being rendered to the dom.\n   */\n  dispatchFirstDataRenderedEvent() {\n    if (this.dataFirstRenderedFired) {\n      return;\n    }\n    this.dataFirstRenderedFired = true;\n    window.requestAnimationFrame(() => {\n      this.beans.eventService.dispatchEvent({\n        type: \"firstDataRendered\",\n        firstRow: this.firstRenderedRow,\n        lastRow: this.lastRenderedRow\n      });\n    });\n  }\n  ensureAllRowsInRangeHaveHeightsCalculated(topPixel, bottomPixel) {\n    const pinnedRowHeightsChanged = this.pinnedRowModel?.ensureRowHeightsValid();\n    const stickyHeightsChanged = this.stickyRowFeature?.ensureRowHeightsValid();\n    const rowModelHeightsChanged = this.rowModel.ensureRowHeightsValid(\n      topPixel,\n      bottomPixel,\n      this.pageBoundsService.getFirstRow(),\n      this.pageBoundsService.getLastRow()\n    );\n    if (rowModelHeightsChanged || stickyHeightsChanged) {\n      this.eventService.dispatchEvent({\n        type: \"recalculateRowBounds\"\n      });\n    }\n    if (stickyHeightsChanged || rowModelHeightsChanged || pinnedRowHeightsChanged) {\n      this.updateContainerHeights();\n      return true;\n    }\n    return false;\n  }\n  getFirstVisibleVerticalPixel() {\n    return this.firstVisibleVPixel;\n  }\n  getLastVisibleVerticalPixel() {\n    return this.lastVisibleVPixel;\n  }\n  getFirstVirtualRenderedRow() {\n    return this.firstRenderedRow;\n  }\n  getLastVirtualRenderedRow() {\n    return this.lastRenderedRow;\n  }\n  // check that none of the rows to remove are editing or focused as:\n  // a) if editing, we want to keep them, otherwise the user will loose the context of the edit,\n  //    eg user starts editing, enters some text, then scrolls down and then up, next time row rendered\n  //    the edit is reset - so we want to keep it rendered.\n  // b) if focused, we want ot keep keyboard focus, so if user ctrl+c, it goes to clipboard,\n  //    otherwise the user can range select and drag (with focus cell going out of the viewport)\n  //    and then ctrl+c, nothing will happen if cell is removed from dom.\n  // c) if detail record of master detail, as users complained that the context of detail rows\n  //    was getting lost when detail row out of view. eg user expands to show detail row,\n  //    then manipulates the detail panel (eg sorts the detail grid), then context is lost\n  //    after detail panel is scrolled out of / into view.\n  doNotUnVirtualiseRow(rowComp) {\n    const REMOVE_ROW = false;\n    const KEEP_ROW = true;\n    const rowNode = rowComp.getRowNode();\n    const rowHasFocus = this.focusService.isRowNodeFocused(rowNode);\n    const rowIsEditing = rowComp.isEditing();\n    const rowIsDetail = rowNode.detail;\n    const mightWantToKeepRow = rowHasFocus || rowIsEditing || rowIsDetail;\n    if (!mightWantToKeepRow) {\n      return REMOVE_ROW;\n    }\n    const rowNodePresent = this.isRowPresent(rowNode);\n    return rowNodePresent ? KEEP_ROW : REMOVE_ROW;\n  }\n  isRowPresent(rowNode) {\n    if (!this.rowModel.isRowPresent(rowNode)) {\n      return false;\n    }\n    return this.paginationService ? this.paginationService.isRowPresent(rowNode) : true;\n  }\n  createRowCon(rowNode, animate, afterScroll) {\n    const rowCtrlFromCache = this.cachedRowCtrls ? this.cachedRowCtrls.getRow(rowNode) : null;\n    if (rowCtrlFromCache) {\n      return rowCtrlFromCache;\n    }\n    const suppressAnimationFrame = this.gos.get(\"suppressAnimationFrame\");\n    const useAnimationFrameForCreate = afterScroll && !suppressAnimationFrame && !this.printLayout;\n    const res = new RowCtrl(rowNode, this.beans, animate, useAnimationFrameForCreate, this.printLayout);\n    return res;\n  }\n  getRenderedNodes() {\n    const renderedRows = this.rowCtrlsByRowIndex;\n    return Object.values(renderedRows).map((rowCtrl) => rowCtrl.getRowNode());\n  }\n  getRowByPosition(rowPosition) {\n    let rowCtrl;\n    const { rowIndex } = rowPosition;\n    switch (rowPosition.rowPinned) {\n      case \"top\":\n        rowCtrl = this.topRowCtrls[rowIndex];\n        break;\n      case \"bottom\":\n        rowCtrl = this.bottomRowCtrls[rowIndex];\n        break;\n      default:\n        rowCtrl = this.rowCtrlsByRowIndex[rowIndex];\n        if (!rowCtrl) {\n          rowCtrl = this.getStickyTopRowCtrls().find((ctrl) => ctrl.getRowNode().rowIndex === rowIndex) || null;\n          if (!rowCtrl) {\n            rowCtrl = this.getStickyBottomRowCtrls().find((ctrl) => ctrl.getRowNode().rowIndex === rowIndex) || null;\n          }\n        }\n        break;\n    }\n    return rowCtrl;\n  }\n  // returns true if any row between startIndex and endIndex is rendered. used by\n  // SSRM or IRM, as they don't want to purge visible blocks from cache.\n  isRangeInRenderedViewport(startIndex, endIndex) {\n    const parentClosed = startIndex == null || endIndex == null;\n    if (parentClosed) {\n      return false;\n    }\n    const blockAfterViewport = startIndex > this.lastRenderedRow;\n    const blockBeforeViewport = endIndex < this.firstRenderedRow;\n    const blockInsideViewport = !blockBeforeViewport && !blockAfterViewport;\n    return blockInsideViewport;\n  }\n};\nvar RowCtrlCache = class {\n  constructor(maxCount) {\n    // map for fast access\n    this.entriesMap = {};\n    // list for keeping order\n    this.entriesList = [];\n    this.maxCount = maxCount;\n  }\n  addRow(rowCtrl) {\n    this.entriesMap[rowCtrl.getRowNode().id] = rowCtrl;\n    this.entriesList.push(rowCtrl);\n    rowCtrl.setCached(true);\n    if (this.entriesList.length > this.maxCount) {\n      const rowCtrlToDestroy = this.entriesList[0];\n      rowCtrlToDestroy.destroyFirstPass();\n      rowCtrlToDestroy.destroySecondPass();\n      this.removeFromCache(rowCtrlToDestroy);\n    }\n  }\n  getRow(rowNode) {\n    if (rowNode == null || rowNode.id == null) {\n      return null;\n    }\n    const res = this.entriesMap[rowNode.id];\n    if (!res) {\n      return null;\n    }\n    this.removeFromCache(res);\n    res.setCached(false);\n    const rowNodeMismatch = res.getRowNode() != rowNode;\n    return rowNodeMismatch ? null : res;\n  }\n  has(rowNode) {\n    return this.entriesMap[rowNode.id] != null;\n  }\n  removeRow(rowNode) {\n    const rowNodeId = rowNode.id;\n    const ctrl = this.entriesMap[rowNodeId];\n    delete this.entriesMap[rowNodeId];\n    _removeFromArray(this.entriesList, ctrl);\n  }\n  removeFromCache(rowCtrl) {\n    const rowNodeId = rowCtrl.getRowNode().id;\n    delete this.entriesMap[rowNodeId];\n    _removeFromArray(this.entriesList, rowCtrl);\n  }\n  getEntries() {\n    return this.entriesList;\n  }\n};\n\n// community-modules/core/src/pinnedRowModel/pinnedRowModel.ts\nvar PinnedRowModel = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"pinnedRowModel\";\n    this.nextId = 0;\n    this.pinnedTopRows = new OrderedCache();\n    this.pinnedBottomRows = new OrderedCache();\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n  }\n  postConstruct() {\n    this.setPinnedRowData(this.gos.get(\"pinnedTopRowData\"), \"top\");\n    this.setPinnedRowData(this.gos.get(\"pinnedBottomRowData\"), \"bottom\");\n    this.addManagedPropertyListener(\"pinnedTopRowData\", (e) => this.setPinnedRowData(e.currentValue, \"top\"));\n    this.addManagedPropertyListener(\"pinnedBottomRowData\", (e) => this.setPinnedRowData(e.currentValue, \"bottom\"));\n    this.addManagedEventListeners({ gridStylesChanged: this.onGridStylesChanges.bind(this) });\n  }\n  isEmpty(floating) {\n    const rows = floating === \"top\" ? this.pinnedTopRows : this.pinnedBottomRows;\n    return rows.isEmpty();\n  }\n  isRowsToRender(floating) {\n    return !this.isEmpty(floating);\n  }\n  onGridStylesChanges(e) {\n    if (e.rowHeightChanged) {\n      const estimateRowHeight = (rowNode) => {\n        rowNode.setRowHeight(rowNode.rowHeight, true);\n      };\n      this.pinnedBottomRows.forEach(estimateRowHeight);\n      this.pinnedTopRows.forEach(estimateRowHeight);\n    }\n  }\n  ensureRowHeightsValid() {\n    let anyChange = false;\n    let rowTop = 0;\n    const updateRowHeight = (rowNode) => {\n      if (rowNode.rowHeightEstimated) {\n        const rowHeight = _getRowHeightForNode(this.gos, rowNode);\n        rowNode.setRowTop(rowTop);\n        rowNode.setRowHeight(rowHeight.height);\n        rowTop += rowHeight.height;\n        anyChange = true;\n      }\n    };\n    this.pinnedBottomRows?.forEach(updateRowHeight);\n    rowTop = 0;\n    this.pinnedTopRows?.forEach(updateRowHeight);\n    this.eventService.dispatchEvent({\n      type: \"pinnedHeightChanged\"\n    });\n    return anyChange;\n  }\n  setPinnedRowData(rowData, floating) {\n    this.updateNodesFromRowData(rowData, floating);\n    this.eventService.dispatchEvent({\n      type: \"pinnedRowDataChanged\"\n    });\n  }\n  /**\n   * Updates existing RowNode instances and creates new ones if necessary\n   *\n   * Setting data as `undefined` will clear row nodes\n   */\n  updateNodesFromRowData(allData, floating) {\n    const nodes = floating === \"top\" ? this.pinnedTopRows : this.pinnedBottomRows;\n    if (allData === void 0) {\n      nodes.clear();\n      return;\n    }\n    const getRowId = _getRowIdCallback(this.gos);\n    const idPrefix = floating === \"top\" ? RowNode.ID_PREFIX_TOP_PINNED : RowNode.ID_PREFIX_BOTTOM_PINNED;\n    const nodesToRemove = nodes.getIds();\n    const newOrder = [];\n    const dataIds = /* @__PURE__ */ new Set();\n    let nextRowTop = 0;\n    let i = -1;\n    for (const data of allData) {\n      const id = getRowId?.({ data, level: 0, rowPinned: floating }) ?? idPrefix + this.nextId++;\n      if (dataIds.has(id)) {\n        _warnOnce(\n          \"Duplicate ID\",\n          id,\n          \"found for pinned row with data\",\n          data,\n          \"When `getRowId` is defined, it must return unique IDs for all pinned rows. Use the `rowPinned` parameter.\"\n        );\n        continue;\n      }\n      i++;\n      dataIds.add(id);\n      newOrder.push(id);\n      const existingNode = nodes.getById(id);\n      if (existingNode !== void 0) {\n        if (existingNode.data !== data) {\n          existingNode.setData(data);\n        }\n        nextRowTop += this.setRowTopAndRowIndex(existingNode, nextRowTop, i);\n        nodesToRemove.delete(id);\n      } else {\n        const rowNode = new RowNode(this.beans);\n        rowNode.id = id;\n        rowNode.data = data;\n        rowNode.rowPinned = floating;\n        nextRowTop += this.setRowTopAndRowIndex(rowNode, nextRowTop, i);\n        nodes.push(rowNode);\n      }\n    }\n    nodesToRemove.forEach((id) => {\n      nodes.getById(id)?.clearRowTopAndRowIndex();\n    });\n    nodes.removeAllById(nodesToRemove);\n    nodes.setOrder(newOrder);\n  }\n  setRowTopAndRowIndex(rowNode, rowTop, rowIndex) {\n    rowNode.setRowTop(rowTop);\n    rowNode.setRowHeight(_getRowHeightForNode(this.gos, rowNode).height);\n    rowNode.setRowIndex(rowIndex);\n    return rowNode.rowHeight;\n  }\n  getPinnedTopTotalHeight() {\n    return this.getTotalHeight(this.pinnedTopRows);\n  }\n  getPinnedBottomTotalHeight() {\n    return this.getTotalHeight(this.pinnedBottomRows);\n  }\n  getPinnedTopRowCount() {\n    return this.pinnedTopRows.getSize();\n  }\n  getPinnedBottomRowCount() {\n    return this.pinnedBottomRows.getSize();\n  }\n  getPinnedTopRow(index) {\n    return this.pinnedTopRows.getByIndex(index);\n  }\n  getPinnedBottomRow(index) {\n    return this.pinnedBottomRows.getByIndex(index);\n  }\n  getPinnedRowById(id, floating) {\n    return floating === \"top\" ? this.pinnedTopRows.getById(id) : this.pinnedBottomRows.getById(id);\n  }\n  forEachPinnedRow(floating, callback) {\n    return floating === \"top\" ? this.pinnedTopRows.forEach(callback) : this.pinnedBottomRows.forEach(callback);\n  }\n  getTotalHeight(rowNodes) {\n    const size = rowNodes.getSize();\n    if (size === 0) {\n      return 0;\n    }\n    const node = rowNodes.getByIndex(size - 1);\n    if (node === void 0) {\n      return 0;\n    }\n    return node.rowTop + node.rowHeight;\n  }\n};\nvar OrderedCache = class {\n  constructor() {\n    this.cache = {};\n    this.ordering = [];\n  }\n  getById(id) {\n    return this.cache[id];\n  }\n  getByIndex(i) {\n    const id = this.ordering[i];\n    return this.cache[id];\n  }\n  push(item) {\n    this.cache[item.id] = item;\n    this.ordering.push(item.id);\n  }\n  removeAllById(ids) {\n    for (const id of ids) {\n      delete this.cache[id];\n    }\n    this.ordering = this.ordering.filter((id) => !ids.has(id));\n  }\n  setOrder(orderedIds) {\n    this.ordering = orderedIds;\n  }\n  forEach(callback) {\n    this.ordering.forEach((id, index) => {\n      const node = this.cache[id];\n      node && callback(node, index);\n    });\n  }\n  clear() {\n    this.ordering.length = 0;\n    this.cache = {};\n  }\n  isEmpty() {\n    return this.ordering.length === 0;\n  }\n  getSize() {\n    return this.ordering.length;\n  }\n  getIds() {\n    return new Set(this.ordering);\n  }\n};\n\n// community-modules/core/src/interfaces/serverSideTransaction.ts\nvar ServerSideTransactionResultStatus = /* @__PURE__ */ ((ServerSideTransactionResultStatus2) => {\n  ServerSideTransactionResultStatus2[\"Applied\"] = \"Applied\";\n  ServerSideTransactionResultStatus2[\"StoreNotFound\"] = \"StoreNotFound\";\n  ServerSideTransactionResultStatus2[\"StoreLoading\"] = \"StoreLoading\";\n  ServerSideTransactionResultStatus2[\"StoreWaitingToLoad\"] = \"StoreWaitingToLoad\";\n  ServerSideTransactionResultStatus2[\"StoreLoadingFailed\"] = \"StoreLoadingFailed\";\n  ServerSideTransactionResultStatus2[\"StoreWrongType\"] = \"StoreWrongType\";\n  ServerSideTransactionResultStatus2[\"Cancelled\"] = \"Cancelled\";\n  ServerSideTransactionResultStatus2[\"StoreNotStarted\"] = \"StoreNotStarted\";\n  return ServerSideTransactionResultStatus2;\n})(ServerSideTransactionResultStatus || {});\n\n// community-modules/core/src/rowNodeCache/rowNodeBlock.ts\nvar RowNodeBlock = class extends BeanStub {\n  constructor(id) {\n    super();\n    this.state = \"needsLoading\";\n    this.version = 0;\n    this.id = id;\n  }\n  getId() {\n    return this.id;\n  }\n  load() {\n    this.state = \"loading\";\n    this.loadFromDatasource();\n  }\n  getVersion() {\n    return this.version;\n  }\n  setStateWaitingToLoad() {\n    this.version++;\n    this.state = \"needsLoading\";\n  }\n  getState() {\n    return this.state;\n  }\n  pageLoadFailed(version) {\n    const requestMostRecentAndLive = this.isRequestMostRecentAndLive(version);\n    if (requestMostRecentAndLive) {\n      this.state = \"failed\";\n      this.processServerFail();\n    }\n    this.dispatchLoadCompleted(false);\n  }\n  success(version, params) {\n    this.successCommon(version, params);\n  }\n  pageLoaded(version, rows, lastRow) {\n    this.successCommon(version, { rowData: rows, rowCount: lastRow });\n  }\n  isRequestMostRecentAndLive(version) {\n    const thisIsMostRecentRequest = version === this.version;\n    const weAreNotDestroyed = this.isAlive();\n    return thisIsMostRecentRequest && weAreNotDestroyed;\n  }\n  successCommon(version, params) {\n    this.dispatchLoadCompleted();\n    const requestMostRecentAndLive = this.isRequestMostRecentAndLive(version);\n    if (requestMostRecentAndLive) {\n      this.state = \"loaded\";\n      this.processServerResult(params);\n    }\n  }\n  dispatchLoadCompleted(success = true) {\n    const event = {\n      type: \"loadComplete\",\n      success,\n      block: this\n    };\n    this.dispatchLocalEvent(event);\n  }\n};\n\n// community-modules/core/src/rowNodeCache/rowNodeBlockLoader.ts\nvar RowNodeBlockLoader = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowNodeBlockLoader\";\n    this.activeBlockLoadsCount = 0;\n    this.blocks = [];\n    this.active = true;\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.maxConcurrentRequests = this.getMaxConcurrentDatasourceRequests();\n    const blockLoadDebounceMillis = this.gos.get(\"blockLoadDebounceMillis\");\n    if (blockLoadDebounceMillis && blockLoadDebounceMillis > 0) {\n      this.checkBlockToLoadDebounce = _debounce(\n        this.performCheckBlocksToLoad.bind(this),\n        blockLoadDebounceMillis\n      );\n    }\n  }\n  getMaxConcurrentDatasourceRequests() {\n    const res = this.gos.get(\"maxConcurrentDatasourceRequests\");\n    if (res == null) {\n      return 2;\n    }\n    if (res <= 0) {\n      return;\n    }\n    return res;\n  }\n  addBlock(block) {\n    this.blocks.push(block);\n    block.addEventListener(\"loadComplete\", this.loadComplete.bind(this));\n    this.checkBlockToLoad();\n  }\n  removeBlock(block) {\n    _removeFromArray(this.blocks, block);\n  }\n  destroy() {\n    super.destroy();\n    this.active = false;\n  }\n  loadComplete() {\n    this.activeBlockLoadsCount--;\n    this.checkBlockToLoad();\n    this.dispatchLocalEvent({ type: \"blockLoaded\" });\n    if (this.activeBlockLoadsCount == 0) {\n      this.dispatchLocalEvent({ type: \"blockLoaderFinished\" });\n    }\n  }\n  checkBlockToLoad() {\n    if (this.checkBlockToLoadDebounce) {\n      this.checkBlockToLoadDebounce();\n    } else {\n      this.performCheckBlocksToLoad();\n    }\n  }\n  performCheckBlocksToLoad() {\n    if (!this.active) {\n      return;\n    }\n    this.printCacheStatus();\n    if (this.maxConcurrentRequests != null && this.activeBlockLoadsCount >= this.maxConcurrentRequests) {\n      if (this.gos.get(\"debug\")) {\n        _log(`RowNodeBlockLoader - checkBlockToLoad: max loads exceeded`);\n      }\n      return;\n    }\n    const loadAvailability = this.getAvailableLoadingCount();\n    const blocksToLoad = this.blocks.filter((block) => block.getState() === \"needsLoading\").slice(0, loadAvailability);\n    this.registerLoads(blocksToLoad.length);\n    blocksToLoad.forEach((block) => block.load());\n    this.printCacheStatus();\n  }\n  getBlockState() {\n    if (_isServerSideRowModel(this.gos)) {\n      const ssrm = this.rowModel;\n      return ssrm.getBlockStates();\n    }\n    const result = {};\n    this.blocks.forEach((block) => {\n      const { id, state } = block.getBlockStateJson();\n      result[id] = state;\n    });\n    return result;\n  }\n  printCacheStatus() {\n    if (this.gos.get(\"debug\")) {\n      _log(\n        `RowNodeBlockLoader - printCacheStatus: activePageLoadsCount = ${this.activeBlockLoadsCount}, blocks = ${JSON.stringify(this.getBlockState())}`\n      );\n    }\n  }\n  isLoading() {\n    return this.activeBlockLoadsCount > 0;\n  }\n  registerLoads(count) {\n    this.activeBlockLoadsCount += count;\n  }\n  getAvailableLoadingCount() {\n    return this.maxConcurrentRequests !== void 0 ? this.maxConcurrentRequests - this.activeBlockLoadsCount : void 0;\n  }\n};\n\n// community-modules/core/src/rowNodeCache/rowNodeBlockModule.ts\nvar RowNodeBlockModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/row-node-block\",\n  beans: [RowNodeBlockLoader]\n});\n\n// community-modules/core/src/selection/rowRangeSelectionContext.ts\nvar RowRangeSelectionContext = class {\n  constructor() {\n    this.root = null;\n    /**\n     * Note that the \"end\" `RowNode` may come before or after the \"root\" `RowNode` in the\n     * actual grid.\n     */\n    this.end = null;\n    this.cachedRange = [];\n  }\n  init(rowModel) {\n    this.rowModel = rowModel;\n  }\n  reset() {\n    this.root = null;\n    this.end = null;\n    this.cachedRange.length = 0;\n  }\n  setRoot(node) {\n    this.root = node;\n    this.end = null;\n    this.cachedRange.length = 0;\n  }\n  setEndRange(end) {\n    this.end = end;\n    this.cachedRange.length = 0;\n  }\n  getRange() {\n    if (this.cachedRange.length === 0) {\n      const root = this.getRoot();\n      const end = this.getEnd();\n      if (root == null || end == null) {\n        return this.cachedRange;\n      }\n      this.cachedRange = this.rowModel.getNodesInRangeForSelection(root, end);\n    }\n    return this.cachedRange;\n  }\n  isInRange(node) {\n    if (this.root === null) {\n      return false;\n    }\n    return this.getRange().some((nodeInRange) => nodeInRange.id === node.id);\n  }\n  getRoot() {\n    if (this.root && this.root?.key === null) {\n      this.root = this.rowModel.getRowNode(this.root.id) ?? null;\n    }\n    return this.root;\n  }\n  getEnd() {\n    if (this.end && this.end?.key === null) {\n      this.end = this.rowModel.getRowNode(this.end.id) ?? null;\n    }\n    return this.end;\n  }\n  /**\n   * Truncates the range to the given node (assumed to be within the current range).\n   * Returns nodes that remain in the current range and those that should be removed\n   *\n   * @param node - Node at which to truncate the range\n   * @returns Object of nodes to either keep or discard (i.e. deselect) from the range\n   */\n  truncate(node) {\n    const range = this.getRange();\n    if (range.length === 0) {\n      return { keep: [], discard: [] };\n    }\n    const discardAfter = range[0].id === this.root.id;\n    const idx = range.findIndex((rowNode) => rowNode.id === node.id);\n    if (idx > -1) {\n      const above = range.slice(0, idx);\n      const below = range.slice(idx + 1);\n      this.setEndRange(node);\n      return discardAfter ? { keep: above, discard: below } : { keep: below, discard: above };\n    } else {\n      return { keep: range, discard: [] };\n    }\n  }\n  /**\n   * Extends the range to the given node. Returns nodes that remain in the current range\n   * and those that should be removed.\n   *\n   * @param node - Node marking the new end of the range\n   * @returns Object of nodes to either keep or discard (i.e. deselect) from the range\n   */\n  extend(node, groupSelectsChildren = false) {\n    const root = this.getRoot();\n    if (root == null) {\n      const keep = this.getRange().slice();\n      if (groupSelectsChildren) {\n        node.depthFirstSearch((node2) => !node2.group && keep.push(node2));\n      }\n      keep.push(node);\n      this.setRoot(node);\n      return { keep, discard: [] };\n    }\n    const newRange = this.rowModel.getNodesInRangeForSelection(root, node);\n    if (newRange.find((newRangeNode) => newRangeNode.id === this.end?.id)) {\n      this.setEndRange(node);\n      return { keep: this.getRange(), discard: [] };\n    } else {\n      const discard = this.getRange().slice();\n      this.setEndRange(node);\n      return { keep: this.getRange(), discard };\n    }\n  }\n};\n\n// community-modules/core/src/styling/stylingService.ts\nvar StylingService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"stylingService\";\n  }\n  wireBeans(beans) {\n    this.expressionService = beans.expressionService;\n  }\n  processAllCellClasses(colDef, params, onApplicableClass, onNotApplicableClass) {\n    this.processClassRules(void 0, colDef.cellClassRules, params, onApplicableClass, onNotApplicableClass);\n    this.processStaticCellClasses(colDef, params, onApplicableClass);\n  }\n  processClassRules(previousClassRules, classRules, params, onApplicableClass, onNotApplicableClass) {\n    if (classRules == null && previousClassRules == null) {\n      return;\n    }\n    const classesToApply = {};\n    const classesToRemove = {};\n    const forEachSingleClass = (className, callback) => {\n      className.split(\" \").forEach((singleClass) => {\n        if (singleClass.trim() == \"\")\n          return;\n        callback(singleClass);\n      });\n    };\n    if (classRules) {\n      const classNames = Object.keys(classRules);\n      for (let i = 0; i < classNames.length; i++) {\n        const className = classNames[i];\n        const rule = classRules[className];\n        let resultOfRule;\n        if (typeof rule === \"string\") {\n          resultOfRule = this.expressionService.evaluate(rule, params);\n        } else if (typeof rule === \"function\") {\n          resultOfRule = rule(params);\n        }\n        forEachSingleClass(className, (singleClass) => {\n          resultOfRule ? classesToApply[singleClass] = true : classesToRemove[singleClass] = true;\n        });\n      }\n    }\n    if (previousClassRules && onNotApplicableClass) {\n      Object.keys(previousClassRules).forEach(\n        (className) => forEachSingleClass(className, (singleClass) => {\n          if (!classesToApply[singleClass]) {\n            classesToRemove[singleClass] = true;\n          }\n        })\n      );\n    }\n    if (onNotApplicableClass) {\n      Object.keys(classesToRemove).forEach(onNotApplicableClass);\n    }\n    Object.keys(classesToApply).forEach(onApplicableClass);\n  }\n  getStaticCellClasses(colDef, params) {\n    const { cellClass } = colDef;\n    if (!cellClass) {\n      return [];\n    }\n    let classOrClasses;\n    if (typeof cellClass === \"function\") {\n      const cellClassFunc = cellClass;\n      classOrClasses = cellClassFunc(params);\n    } else {\n      classOrClasses = cellClass;\n    }\n    if (typeof classOrClasses === \"string\") {\n      classOrClasses = [classOrClasses];\n    }\n    return classOrClasses || [];\n  }\n  processStaticCellClasses(colDef, params, onApplicableClass) {\n    const classOrClasses = this.getStaticCellClasses(colDef, params);\n    classOrClasses.forEach((cssClassItem) => {\n      onApplicableClass(cssClassItem);\n    });\n  }\n};\n\n// community-modules/core/src/widgets/agToggleButton.ts\nvar AgToggleButton = class extends AgCheckbox {\n  constructor(config) {\n    super(config, \"ag-toggle-button\");\n  }\n  setValue(value, silent) {\n    super.setValue(value, silent);\n    this.addOrRemoveCssClass(\"ag-selected\", this.getValue());\n    return this;\n  }\n};\nvar AgToggleButtonSelector = {\n  selector: \"AG-TOGGLE-BUTTON\",\n  component: AgToggleButton\n};\n\n// community-modules/core/src/widgets/tabGuardCtrl.ts\nvar TabGuardClassNames = /* @__PURE__ */ ((TabGuardClassNames2) => {\n  TabGuardClassNames2[\"TAB_GUARD\"] = \"ag-tab-guard\";\n  TabGuardClassNames2[\"TAB_GUARD_TOP\"] = \"ag-tab-guard-top\";\n  TabGuardClassNames2[\"TAB_GUARD_BOTTOM\"] = \"ag-tab-guard-bottom\";\n  return TabGuardClassNames2;\n})(TabGuardClassNames || {});\nvar TabGuardCtrl = class extends BeanStub {\n  constructor(params) {\n    super();\n    this.skipTabGuardFocus = false;\n    this.forcingFocusOut = false;\n    // Used when `isFocusableContainer` enabled\n    this.allowFocus = false;\n    const {\n      comp,\n      eTopGuard,\n      eBottomGuard,\n      focusTrapActive,\n      forceFocusOutWhenTabGuardsAreEmpty,\n      isFocusableContainer,\n      focusInnerElement,\n      onFocusIn,\n      onFocusOut,\n      shouldStopEventPropagation,\n      onTabKeyDown,\n      handleKeyDown,\n      eFocusableElement\n    } = params;\n    this.comp = comp;\n    this.eTopGuard = eTopGuard;\n    this.eBottomGuard = eBottomGuard;\n    this.providedFocusInnerElement = focusInnerElement;\n    this.eFocusableElement = eFocusableElement;\n    this.focusTrapActive = !!focusTrapActive;\n    this.forceFocusOutWhenTabGuardsAreEmpty = !!forceFocusOutWhenTabGuardsAreEmpty;\n    this.isFocusableContainer = !!isFocusableContainer;\n    this.providedFocusIn = onFocusIn;\n    this.providedFocusOut = onFocusOut;\n    this.providedShouldStopEventPropagation = shouldStopEventPropagation;\n    this.providedOnTabKeyDown = onTabKeyDown;\n    this.providedHandleKeyDown = handleKeyDown;\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    this.createManagedBean(\n      new ManagedFocusFeature(this.eFocusableElement, {\n        shouldStopEventPropagation: () => this.shouldStopEventPropagation(),\n        onTabKeyDown: (e) => this.onTabKeyDown(e),\n        handleKeyDown: (e) => this.handleKeyDown(e),\n        onFocusIn: (e) => this.onFocusIn(e),\n        onFocusOut: (e) => this.onFocusOut(e)\n      })\n    );\n    this.activateTabGuards();\n    [this.eTopGuard, this.eBottomGuard].forEach(\n      (guard) => this.addManagedElementListeners(guard, { focus: this.onFocus.bind(this) })\n    );\n  }\n  handleKeyDown(e) {\n    if (this.providedHandleKeyDown) {\n      this.providedHandleKeyDown(e);\n    }\n  }\n  tabGuardsAreActive() {\n    return !!this.eTopGuard && this.eTopGuard.hasAttribute(\"tabIndex\");\n  }\n  shouldStopEventPropagation() {\n    if (this.providedShouldStopEventPropagation) {\n      return this.providedShouldStopEventPropagation();\n    }\n    return false;\n  }\n  activateTabGuards() {\n    if (this.forcingFocusOut) {\n      return;\n    }\n    const tabIndex = this.gos.get(\"tabIndex\");\n    this.comp.setTabIndex(tabIndex.toString());\n  }\n  deactivateTabGuards() {\n    this.comp.setTabIndex();\n  }\n  onFocus(e) {\n    if (this.isFocusableContainer && !this.eFocusableElement.contains(e.relatedTarget)) {\n      if (!this.allowFocus) {\n        this.findNextElementOutsideAndFocus(e.target === this.eBottomGuard);\n        return;\n      }\n    }\n    if (this.skipTabGuardFocus) {\n      this.skipTabGuardFocus = false;\n      return;\n    }\n    if (this.forceFocusOutWhenTabGuardsAreEmpty) {\n      const isEmpty = this.focusService.findFocusableElements(this.eFocusableElement, \".ag-tab-guard\").length === 0;\n      if (isEmpty) {\n        this.findNextElementOutsideAndFocus(e.target === this.eBottomGuard);\n        return;\n      }\n    }\n    if (this.isFocusableContainer && this.eFocusableElement.contains(e.relatedTarget)) {\n      return;\n    }\n    const fromBottom = e.target === this.eBottomGuard;\n    if (this.providedFocusInnerElement) {\n      this.providedFocusInnerElement(fromBottom);\n    } else {\n      this.focusInnerElement(fromBottom);\n    }\n  }\n  findNextElementOutsideAndFocus(up) {\n    const eDocument = _getDocument(this.gos);\n    const focusableEls = this.focusService.findFocusableElements(eDocument.body, null, true);\n    const index = focusableEls.indexOf(up ? this.eTopGuard : this.eBottomGuard);\n    if (index === -1) {\n      return;\n    }\n    let start;\n    let end;\n    if (up) {\n      start = 0;\n      end = index;\n    } else {\n      start = index + 1;\n      end = focusableEls.length;\n    }\n    const focusableRange = focusableEls.slice(start, end);\n    const targetTabIndex = this.gos.get(\"tabIndex\");\n    focusableRange.sort((a, b) => {\n      const indexA = parseInt(a.getAttribute(\"tabindex\") || \"0\");\n      const indexB = parseInt(b.getAttribute(\"tabindex\") || \"0\");\n      if (indexB === targetTabIndex) {\n        return 1;\n      }\n      if (indexA === targetTabIndex) {\n        return -1;\n      }\n      if (indexA === 0) {\n        return 1;\n      }\n      if (indexB === 0) {\n        return -1;\n      }\n      return indexA - indexB;\n    });\n    focusableRange[up ? focusableRange.length - 1 : 0]?.focus();\n  }\n  onFocusIn(e) {\n    if (this.focusTrapActive || this.forcingFocusOut) {\n      return;\n    }\n    if (this.providedFocusIn) {\n      this.providedFocusIn(e);\n    }\n    if (!this.isFocusableContainer) {\n      this.deactivateTabGuards();\n    }\n  }\n  onFocusOut(e) {\n    if (this.focusTrapActive) {\n      return;\n    }\n    if (this.providedFocusOut) {\n      this.providedFocusOut(e);\n    }\n    if (!this.eFocusableElement.contains(e.relatedTarget)) {\n      this.activateTabGuards();\n    }\n  }\n  onTabKeyDown(e) {\n    if (this.providedOnTabKeyDown) {\n      this.providedOnTabKeyDown(e);\n      return;\n    }\n    if (this.focusTrapActive) {\n      return;\n    }\n    if (e.defaultPrevented) {\n      return;\n    }\n    const tabGuardsAreActive = this.tabGuardsAreActive();\n    if (tabGuardsAreActive) {\n      this.deactivateTabGuards();\n    }\n    const nextRoot = this.getNextFocusableElement(e.shiftKey);\n    if (tabGuardsAreActive) {\n      setTimeout(() => this.activateTabGuards(), 0);\n    }\n    if (!nextRoot) {\n      return;\n    }\n    nextRoot.focus();\n    e.preventDefault();\n  }\n  focusInnerElement(fromBottom = false) {\n    const focusable = this.focusService.findFocusableElements(this.eFocusableElement);\n    if (this.tabGuardsAreActive()) {\n      focusable.splice(0, 1);\n      focusable.splice(focusable.length - 1, 1);\n    }\n    if (!focusable.length) {\n      return;\n    }\n    focusable[fromBottom ? focusable.length - 1 : 0].focus({ preventScroll: true });\n  }\n  getNextFocusableElement(backwards) {\n    return this.focusService.findNextFocusableElement(this.eFocusableElement, false, backwards);\n  }\n  forceFocusOutOfContainer(up = false) {\n    if (this.forcingFocusOut) {\n      return;\n    }\n    const tabGuardToFocus = up ? this.eTopGuard : this.eBottomGuard;\n    this.activateTabGuards();\n    this.skipTabGuardFocus = true;\n    this.forcingFocusOut = true;\n    tabGuardToFocus.focus();\n    window.setTimeout(() => {\n      this.forcingFocusOut = false;\n      this.activateTabGuards();\n    });\n  }\n  isTabGuard(element, bottom) {\n    return element === this.eTopGuard && !bottom || element === this.eBottomGuard && (bottom ?? true);\n  }\n  setAllowFocus(allowFocus) {\n    this.allowFocus = allowFocus;\n  }\n};\n\n// community-modules/core/src/widgets/tabGuardFeature.ts\nvar TabGuardFeature = class extends BeanStub {\n  constructor(comp) {\n    super();\n    this.comp = comp;\n  }\n  initialiseTabGuard(params) {\n    this.eTopGuard = this.createTabGuard(\"top\");\n    this.eBottomGuard = this.createTabGuard(\"bottom\");\n    this.eFocusableElement = this.comp.getFocusableElement();\n    const { eTopGuard, eBottomGuard, eFocusableElement } = this;\n    const tabGuards = [eTopGuard, eBottomGuard];\n    const compProxy = {\n      setTabIndex: (tabIndex) => {\n        tabGuards.forEach(\n          (tabGuard) => tabIndex != null ? tabGuard.setAttribute(\"tabindex\", tabIndex) : tabGuard.removeAttribute(\"tabindex\")\n        );\n      }\n    };\n    this.addTabGuards(eTopGuard, eBottomGuard);\n    const {\n      focusTrapActive = false,\n      onFocusIn,\n      onFocusOut,\n      focusInnerElement,\n      handleKeyDown,\n      onTabKeyDown,\n      shouldStopEventPropagation,\n      forceFocusOutWhenTabGuardsAreEmpty,\n      isFocusableContainer\n    } = params;\n    this.tabGuardCtrl = this.createManagedBean(\n      new TabGuardCtrl({\n        comp: compProxy,\n        focusTrapActive,\n        eTopGuard,\n        eBottomGuard,\n        eFocusableElement,\n        onFocusIn,\n        onFocusOut,\n        focusInnerElement,\n        handleKeyDown,\n        onTabKeyDown,\n        shouldStopEventPropagation,\n        forceFocusOutWhenTabGuardsAreEmpty,\n        isFocusableContainer\n      })\n    );\n  }\n  getTabGuardCtrl() {\n    return this.tabGuardCtrl;\n  }\n  createTabGuard(side) {\n    const tabGuard = _getDocument(this.gos).createElement(\"div\");\n    const cls = side === \"top\" ? \"ag-tab-guard-top\" /* TAB_GUARD_TOP */ : \"ag-tab-guard-bottom\" /* TAB_GUARD_BOTTOM */;\n    tabGuard.classList.add(\"ag-tab-guard\" /* TAB_GUARD */, cls);\n    _setAriaRole(tabGuard, \"presentation\");\n    return tabGuard;\n  }\n  addTabGuards(topTabGuard, bottomTabGuard) {\n    this.eFocusableElement.insertAdjacentElement(\"afterbegin\", topTabGuard);\n    this.eFocusableElement.insertAdjacentElement(\"beforeend\", bottomTabGuard);\n  }\n  removeAllChildrenExceptTabGuards() {\n    const tabGuards = [this.eTopGuard, this.eBottomGuard];\n    _clearElement(this.comp.getFocusableElement());\n    this.addTabGuards(...tabGuards);\n  }\n  forceFocusOutOfContainer(up = false) {\n    this.tabGuardCtrl.forceFocusOutOfContainer(up);\n  }\n  appendChild(appendChild, newChild, container) {\n    if (!_isNodeOrElement(newChild)) {\n      newChild = newChild.getGui();\n    }\n    const { eBottomGuard: bottomTabGuard } = this;\n    if (bottomTabGuard) {\n      bottomTabGuard.insertAdjacentElement(\"beforebegin\", newChild);\n    } else {\n      appendChild(newChild, container);\n    }\n  }\n};\n\n// community-modules/core/src/widgets/tabGuardComp.ts\nvar TabGuardComp = class extends Component {\n  initialiseTabGuard(params) {\n    this.tabGuardFeature = this.createManagedBean(new TabGuardFeature(this));\n    this.tabGuardFeature.initialiseTabGuard(params);\n  }\n  forceFocusOutOfContainer(up = false) {\n    this.tabGuardFeature.forceFocusOutOfContainer(up);\n  }\n  appendChild(newChild, container) {\n    this.tabGuardFeature.appendChild(super.appendChild.bind(this), newChild, container);\n  }\n};\n\n// community-modules/core/src/widgets/popupService.ts\nvar instanceIdSeq = 0;\nvar WAIT_FOR_POPUP_CONTENT_RESIZE = 200;\nvar PopupService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"popupService\";\n    this.popupList = [];\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.resizeObserverService = beans.resizeObserverService;\n    this.environment = beans.environment;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridCtrl = p.gridCtrl;\n    });\n    this.addManagedEventListeners({ gridStylesChanged: this.handleThemeChange.bind(this) });\n  }\n  getPopupParent() {\n    const ePopupParent = this.gos.get(\"popupParent\");\n    if (ePopupParent) {\n      return ePopupParent;\n    }\n    return this.gridCtrl.getGui();\n  }\n  positionPopupForMenu(params) {\n    const { eventSource, ePopup } = params;\n    const popupIdx = this.getPopupIndex(ePopup);\n    if (popupIdx !== -1) {\n      const popup = this.popupList[popupIdx];\n      popup.alignedToElement = eventSource;\n    }\n    const sourceRect = eventSource.getBoundingClientRect();\n    const parentRect = this.getParentRect();\n    const y = this.keepXYWithinBounds(ePopup, sourceRect.top - parentRect.top, 0 /* vertical */);\n    const minWidth = ePopup.clientWidth > 0 ? ePopup.clientWidth : 200;\n    ePopup.style.minWidth = `${minWidth}px`;\n    const widthOfParent = parentRect.right - parentRect.left;\n    const maxX = widthOfParent - minWidth;\n    let x;\n    if (this.gos.get(\"enableRtl\")) {\n      x = xLeftPosition();\n      if (x < 0) {\n        x = xRightPosition();\n        this.setAlignedStyles(ePopup, \"left\");\n      }\n      if (x > maxX) {\n        x = 0;\n        this.setAlignedStyles(ePopup, \"right\");\n      }\n    } else {\n      x = xRightPosition();\n      if (x > maxX) {\n        x = xLeftPosition();\n        this.setAlignedStyles(ePopup, \"right\");\n      }\n      if (x < 0) {\n        x = 0;\n        this.setAlignedStyles(ePopup, \"left\");\n      }\n    }\n    ePopup.style.left = `${x}px`;\n    ePopup.style.top = `${y}px`;\n    function xRightPosition() {\n      return sourceRect.right - parentRect.left - 2;\n    }\n    function xLeftPosition() {\n      return sourceRect.left - parentRect.left - minWidth;\n    }\n  }\n  positionPopupUnderMouseEvent(params) {\n    const { ePopup, nudgeX, nudgeY, skipObserver } = params;\n    this.positionPopup({\n      ePopup,\n      nudgeX,\n      nudgeY,\n      keepWithinBounds: true,\n      skipObserver,\n      updatePosition: () => this.calculatePointerAlign(params.mouseEvent),\n      postProcessCallback: () => this.callPostProcessPopup(\n        params.type,\n        params.ePopup,\n        null,\n        params.mouseEvent,\n        params.column,\n        params.rowNode\n      )\n    });\n  }\n  calculatePointerAlign(e) {\n    const parentRect = this.getParentRect();\n    return {\n      x: e.clientX - parentRect.left,\n      y: e.clientY - parentRect.top\n    };\n  }\n  positionPopupByComponent(params) {\n    const {\n      ePopup,\n      nudgeX,\n      nudgeY,\n      keepWithinBounds,\n      eventSource,\n      alignSide = \"left\",\n      position = \"over\",\n      column,\n      rowNode,\n      type\n    } = params;\n    const sourceRect = eventSource.getBoundingClientRect();\n    const parentRect = this.getParentRect();\n    const popupIdx = this.getPopupIndex(ePopup);\n    if (popupIdx !== -1) {\n      const popup = this.popupList[popupIdx];\n      popup.alignedToElement = eventSource;\n    }\n    const updatePosition = () => {\n      let x = sourceRect.left - parentRect.left;\n      if (alignSide === \"right\") {\n        x -= ePopup.offsetWidth - sourceRect.width;\n      }\n      let y;\n      if (position === \"over\") {\n        y = sourceRect.top - parentRect.top;\n        this.setAlignedStyles(ePopup, \"over\");\n      } else {\n        this.setAlignedStyles(ePopup, \"under\");\n        const alignSide2 = this.shouldRenderUnderOrAbove(ePopup, sourceRect, parentRect, params.nudgeY || 0);\n        if (alignSide2 === \"under\") {\n          y = sourceRect.top - parentRect.top + sourceRect.height;\n        } else {\n          y = sourceRect.top - ePopup.offsetHeight - (nudgeY || 0) * 2 - parentRect.top;\n        }\n      }\n      return { x, y };\n    };\n    this.positionPopup({\n      ePopup,\n      nudgeX,\n      nudgeY,\n      keepWithinBounds,\n      updatePosition,\n      postProcessCallback: () => this.callPostProcessPopup(type, ePopup, eventSource, null, column, rowNode)\n    });\n  }\n  shouldRenderUnderOrAbove(ePopup, targetCompRect, parentRect, nudgeY) {\n    const spaceAvailableUnder = parentRect.bottom - targetCompRect.bottom;\n    const spaceAvailableAbove = targetCompRect.top - parentRect.top;\n    const spaceRequired = ePopup.offsetHeight + nudgeY;\n    if (spaceAvailableUnder > spaceRequired) {\n      return \"under\";\n    }\n    if (spaceAvailableAbove > spaceRequired || spaceAvailableAbove > spaceAvailableUnder) {\n      return \"above\";\n    }\n    return \"under\";\n  }\n  setAlignedStyles(ePopup, positioned) {\n    const popupIdx = this.getPopupIndex(ePopup);\n    if (popupIdx === -1) {\n      return;\n    }\n    const popup = this.popupList[popupIdx];\n    const { alignedToElement } = popup;\n    if (!alignedToElement) {\n      return;\n    }\n    const positions = [\"right\", \"left\", \"over\", \"above\", \"under\"];\n    positions.forEach((position) => {\n      alignedToElement.classList.remove(`ag-has-popup-positioned-${position}`);\n      ePopup.classList.remove(`ag-popup-positioned-${position}`);\n    });\n    if (!positioned) {\n      return;\n    }\n    alignedToElement.classList.add(`ag-has-popup-positioned-${positioned}`);\n    ePopup.classList.add(`ag-popup-positioned-${positioned}`);\n  }\n  callPostProcessPopup(type, ePopup, eventSource, mouseEvent, column, rowNode) {\n    const callback = this.gos.getCallback(\"postProcessPopup\");\n    if (callback) {\n      const params = {\n        column,\n        rowNode,\n        ePopup,\n        type,\n        eventSource,\n        mouseEvent\n      };\n      callback(params);\n    }\n  }\n  positionPopup(params) {\n    const { ePopup, keepWithinBounds, nudgeX, nudgeY, skipObserver, updatePosition } = params;\n    const lastSize = { width: 0, height: 0 };\n    const updatePopupPosition = (fromResizeObserver = false) => {\n      let { x, y } = updatePosition();\n      if (fromResizeObserver && ePopup.clientWidth === lastSize.width && ePopup.clientHeight === lastSize.height) {\n        return;\n      }\n      lastSize.width = ePopup.clientWidth;\n      lastSize.height = ePopup.clientHeight;\n      if (nudgeX) {\n        x += nudgeX;\n      }\n      if (nudgeY) {\n        y += nudgeY;\n      }\n      if (keepWithinBounds) {\n        x = this.keepXYWithinBounds(ePopup, x, 1 /* horizontal */);\n        y = this.keepXYWithinBounds(ePopup, y, 0 /* vertical */);\n      }\n      ePopup.style.left = `${x}px`;\n      ePopup.style.top = `${y}px`;\n      if (params.postProcessCallback) {\n        params.postProcessCallback();\n      }\n    };\n    updatePopupPosition();\n    if (!skipObserver) {\n      const resizeObserverDestroyFunc = this.resizeObserverService.observeResize(\n        ePopup,\n        () => updatePopupPosition(true)\n      );\n      setTimeout(() => resizeObserverDestroyFunc(), WAIT_FOR_POPUP_CONTENT_RESIZE);\n    }\n  }\n  getActivePopups() {\n    return this.popupList.map((popup) => popup.element);\n  }\n  getPopupList() {\n    return this.popupList;\n  }\n  getParentRect() {\n    const eDocument = _getDocument(this.gos);\n    let popupParent = this.getPopupParent();\n    if (popupParent === eDocument.body) {\n      popupParent = eDocument.documentElement;\n    } else if (getComputedStyle(popupParent).position === \"static\") {\n      popupParent = popupParent.offsetParent;\n    }\n    return _getElementRectWithOffset(popupParent);\n  }\n  keepXYWithinBounds(ePopup, position, direction) {\n    const isVertical = direction === 0 /* vertical */;\n    const sizeProperty = isVertical ? \"clientHeight\" : \"clientWidth\";\n    const anchorProperty = isVertical ? \"top\" : \"left\";\n    const offsetProperty = isVertical ? \"height\" : \"width\";\n    const scrollPositionProperty = isVertical ? \"scrollTop\" : \"scrollLeft\";\n    const eDocument = _getDocument(this.gos);\n    const docElement = eDocument.documentElement;\n    const popupParent = this.getPopupParent();\n    const popupRect = ePopup.getBoundingClientRect();\n    const parentRect = popupParent.getBoundingClientRect();\n    const documentRect = eDocument.documentElement.getBoundingClientRect();\n    const isBody = popupParent === eDocument.body;\n    const offsetSize = Math.ceil(popupRect[offsetProperty]);\n    const getSize = isVertical ? _getAbsoluteHeight : _getAbsoluteWidth;\n    let sizeOfParent = isBody ? getSize(docElement) + docElement[scrollPositionProperty] : popupParent[sizeProperty];\n    if (isBody) {\n      sizeOfParent -= Math.abs(documentRect[anchorProperty] - parentRect[anchorProperty]);\n    }\n    const max = sizeOfParent - offsetSize;\n    return Math.min(Math.max(position, 0), Math.abs(max));\n  }\n  addPopup(params) {\n    const eDocument = _getDocument(this.gos);\n    const { eChild, ariaLabel, alwaysOnTop, positionCallback, anchorToElement } = params;\n    if (!eDocument) {\n      _warnOnce(\"could not find the document, document is empty\");\n      return { hideFunc: () => {\n      } };\n    }\n    const pos = this.getPopupIndex(eChild);\n    if (pos !== -1) {\n      const popup = this.popupList[pos];\n      return { hideFunc: popup.hideFunc };\n    }\n    this.initialisePopupPosition(eChild);\n    const wrapperEl = this.createPopupWrapper(eChild, ariaLabel, !!alwaysOnTop);\n    const removeListeners = this.addEventListenersToPopup({ ...params, wrapperEl });\n    if (positionCallback) {\n      positionCallback();\n    }\n    this.addPopupToPopupList(eChild, wrapperEl, removeListeners, anchorToElement);\n    return {\n      hideFunc: removeListeners\n    };\n  }\n  initialisePopupPosition(element) {\n    const ePopupParent = this.getPopupParent();\n    const ePopupParentRect = ePopupParent.getBoundingClientRect();\n    if (!_exists(element.style.top)) {\n      element.style.top = `${ePopupParentRect.top * -1}px`;\n    }\n    if (!_exists(element.style.left)) {\n      element.style.left = `${ePopupParentRect.left * -1}px`;\n    }\n  }\n  createPopupWrapper(element, ariaLabel, alwaysOnTop) {\n    const ePopupParent = this.getPopupParent();\n    const eWrapper = document.createElement(\"div\");\n    this.environment.applyThemeClasses(eWrapper);\n    eWrapper.classList.add(\"ag-popup\");\n    element.classList.add(this.gos.get(\"enableRtl\") ? \"ag-rtl\" : \"ag-ltr\", \"ag-popup-child\");\n    if (!element.hasAttribute(\"role\")) {\n      _setAriaRole(element, \"dialog\");\n    }\n    _setAriaLabel(element, ariaLabel);\n    eWrapper.appendChild(element);\n    ePopupParent.appendChild(eWrapper);\n    if (alwaysOnTop) {\n      this.setAlwaysOnTop(element, true);\n    } else {\n      this.bringPopupToFront(element);\n    }\n    return eWrapper;\n  }\n  handleThemeChange(e) {\n    if (e.themeChanged) {\n      for (const popup of this.popupList) {\n        this.environment.applyThemeClasses(popup.wrapper);\n      }\n    }\n  }\n  addEventListenersToPopup(params) {\n    const eDocument = _getDocument(this.gos);\n    const ePopupParent = this.getPopupParent();\n    const { wrapperEl, eChild: popupEl, closedCallback, afterGuiAttached, closeOnEsc, modal } = params;\n    let popupHidden = false;\n    const hidePopupOnKeyboardEvent = (event) => {\n      if (!wrapperEl.contains(_getActiveDomElement(this.gos))) {\n        return;\n      }\n      const key = event.key;\n      if (key === KeyCode.ESCAPE && !_isStopPropagationForAgGrid(event)) {\n        removeListeners({ keyboardEvent: event });\n      }\n    };\n    const hidePopupOnMouseEvent = (event) => removeListeners({ mouseEvent: event });\n    const hidePopupOnTouchEvent = (event) => removeListeners({ touchEvent: event });\n    const removeListeners = (popupParams = {}) => {\n      const { mouseEvent, touchEvent, keyboardEvent, forceHide } = popupParams;\n      if (!forceHide && // we don't hide popup if the event was on the child, or any\n      // children of this child\n      (this.isEventFromCurrentPopup({ mouseEvent, touchEvent }, popupEl) || // this method should only be called once. the client can have different\n      // paths, each one wanting to close, so this method may be called multiple times.\n      popupHidden)) {\n        return;\n      }\n      popupHidden = true;\n      ePopupParent.removeChild(wrapperEl);\n      eDocument.removeEventListener(\"keydown\", hidePopupOnKeyboardEvent);\n      eDocument.removeEventListener(\"mousedown\", hidePopupOnMouseEvent);\n      eDocument.removeEventListener(\"touchstart\", hidePopupOnTouchEvent);\n      eDocument.removeEventListener(\"contextmenu\", hidePopupOnMouseEvent);\n      this.eventService.removeEventListener(\"dragStarted\", hidePopupOnMouseEvent);\n      if (closedCallback) {\n        closedCallback(mouseEvent || touchEvent || keyboardEvent);\n      }\n      this.removePopupFromPopupList(popupEl);\n    };\n    if (afterGuiAttached) {\n      afterGuiAttached({ hidePopup: removeListeners });\n    }\n    window.setTimeout(() => {\n      if (closeOnEsc) {\n        eDocument.addEventListener(\"keydown\", hidePopupOnKeyboardEvent);\n      }\n      if (modal) {\n        eDocument.addEventListener(\"mousedown\", hidePopupOnMouseEvent);\n        this.eventService.addEventListener(\"dragStarted\", hidePopupOnMouseEvent);\n        eDocument.addEventListener(\"touchstart\", hidePopupOnTouchEvent);\n        eDocument.addEventListener(\"contextmenu\", hidePopupOnMouseEvent);\n      }\n    }, 0);\n    return removeListeners;\n  }\n  addPopupToPopupList(element, wrapperEl, removeListeners, anchorToElement) {\n    this.popupList.push({\n      element,\n      wrapper: wrapperEl,\n      hideFunc: removeListeners,\n      instanceId: instanceIdSeq++,\n      isAnchored: !!anchorToElement\n    });\n    if (anchorToElement) {\n      this.setPopupPositionRelatedToElement(element, anchorToElement);\n    }\n  }\n  getPopupIndex(el) {\n    return this.popupList.findIndex((p) => p.element === el);\n  }\n  setPopupPositionRelatedToElement(popupEl, relativeElement) {\n    const popupIndex = this.getPopupIndex(popupEl);\n    if (popupIndex === -1) {\n      return;\n    }\n    const popup = this.popupList[popupIndex];\n    if (popup.stopAnchoringPromise) {\n      popup.stopAnchoringPromise.then((destroyFunc) => destroyFunc && destroyFunc());\n    }\n    popup.stopAnchoringPromise = void 0;\n    popup.isAnchored = false;\n    if (!relativeElement) {\n      return;\n    }\n    const destroyPositionTracker = this.keepPopupPositionedRelativeTo({\n      element: relativeElement,\n      ePopup: popupEl,\n      hidePopup: popup.hideFunc\n    });\n    popup.stopAnchoringPromise = destroyPositionTracker;\n    popup.isAnchored = true;\n    return destroyPositionTracker;\n  }\n  removePopupFromPopupList(element) {\n    this.setAlignedStyles(element, null);\n    this.setPopupPositionRelatedToElement(element, null);\n    this.popupList = this.popupList.filter((p) => p.element !== element);\n  }\n  keepPopupPositionedRelativeTo(params) {\n    const eParent = this.getPopupParent();\n    const parentRect = eParent.getBoundingClientRect();\n    const { element, ePopup } = params;\n    const sourceRect = element.getBoundingClientRect();\n    const extractFromPixelValue = (pxSize) => parseInt(pxSize.substring(0, pxSize.length - 1), 10);\n    const createPosition = (prop, direction) => {\n      const initialDiff = parentRect[prop] - sourceRect[prop];\n      const initial = extractFromPixelValue(ePopup.style[prop]);\n      return {\n        initialDiff,\n        lastDiff: initialDiff,\n        initial,\n        last: initial,\n        direction\n      };\n    };\n    const topPosition = createPosition(\"top\", 0 /* vertical */);\n    const leftPosition = createPosition(\"left\", 1 /* horizontal */);\n    const fwOverrides = this.getFrameworkOverrides();\n    return new AgPromise((resolve) => {\n      fwOverrides.wrapIncoming(() => {\n        fwOverrides.setInterval(() => {\n          const pRect = eParent.getBoundingClientRect();\n          const sRect = element.getBoundingClientRect();\n          const elementNotInDom = sRect.top == 0 && sRect.left == 0 && sRect.height == 0 && sRect.width == 0;\n          if (elementNotInDom) {\n            params.hidePopup();\n            return;\n          }\n          const calculateNewPosition = (position, prop) => {\n            const current = extractFromPixelValue(ePopup.style[prop]);\n            if (position.last !== current) {\n              position.initial = current;\n              position.last = current;\n            }\n            const currentDiff = pRect[prop] - sRect[prop];\n            if (currentDiff != position.lastDiff) {\n              const newValue = this.keepXYWithinBounds(\n                ePopup,\n                position.initial + position.initialDiff - currentDiff,\n                position.direction\n              );\n              ePopup.style[prop] = `${newValue}px`;\n              position.last = newValue;\n            }\n            position.lastDiff = currentDiff;\n          };\n          calculateNewPosition(topPosition, \"top\");\n          calculateNewPosition(leftPosition, \"left\");\n        }, 200).then((intervalId) => {\n          const result = () => {\n            if (intervalId != null) {\n              window.clearInterval(intervalId);\n            }\n          };\n          resolve(result);\n        });\n      }, \"popupPositioning\");\n    });\n  }\n  hasAnchoredPopup() {\n    return this.popupList.some((popup) => popup.isAnchored);\n  }\n  isEventFromCurrentPopup(params, target) {\n    const { mouseEvent, touchEvent } = params;\n    const event = mouseEvent ? mouseEvent : touchEvent;\n    if (!event) {\n      return false;\n    }\n    const indexOfThisChild = this.getPopupIndex(target);\n    if (indexOfThisChild === -1) {\n      return false;\n    }\n    for (let i = indexOfThisChild; i < this.popupList.length; i++) {\n      const popup = this.popupList[i];\n      if (_isElementInEventPath(popup.element, event)) {\n        return true;\n      }\n    }\n    return this.isElementWithinCustomPopup(event.target);\n  }\n  isElementWithinCustomPopup(el) {\n    const eDocument = _getDocument(this.gos);\n    while (el && el !== eDocument.body) {\n      if (el.classList.contains(\"ag-custom-component-popup\") || el.parentElement === null) {\n        return true;\n      }\n      el = el.parentElement;\n    }\n    return false;\n  }\n  getWrapper(ePopup) {\n    while (!ePopup.classList.contains(\"ag-popup\") && ePopup.parentElement) {\n      ePopup = ePopup.parentElement;\n    }\n    return ePopup.classList.contains(\"ag-popup\") ? ePopup : null;\n  }\n  setAlwaysOnTop(ePopup, alwaysOnTop) {\n    const eWrapper = this.getWrapper(ePopup);\n    if (!eWrapper) {\n      return;\n    }\n    eWrapper.classList.toggle(\"ag-always-on-top\", !!alwaysOnTop);\n    if (alwaysOnTop) {\n      this.bringPopupToFront(eWrapper);\n    }\n  }\n  /** @return true if moved */\n  bringPopupToFront(ePopup) {\n    const parent = this.getPopupParent();\n    const popupList = Array.prototype.slice.call(parent.querySelectorAll(\".ag-popup\"));\n    const popupLen = popupList.length;\n    const eWrapper = this.getWrapper(ePopup);\n    if (!eWrapper || popupLen <= 1 || !parent.contains(ePopup)) {\n      return;\n    }\n    const standardPopupList = [];\n    const alwaysOnTopList = [];\n    for (const popup of popupList) {\n      if (popup === eWrapper) {\n        continue;\n      }\n      if (popup.classList.contains(\"ag-always-on-top\")) {\n        alwaysOnTopList.push(popup);\n      } else {\n        standardPopupList.push(popup);\n      }\n    }\n    const innerElsScrollMap = [];\n    const onTopLength = alwaysOnTopList.length;\n    const isPopupAlwaysOnTop = eWrapper.classList.contains(\"ag-always-on-top\");\n    const shouldBeLast = isPopupAlwaysOnTop || !onTopLength;\n    const targetList = shouldBeLast ? [...standardPopupList, ...alwaysOnTopList, eWrapper] : [...standardPopupList, eWrapper, ...alwaysOnTopList];\n    for (let i = 0; i <= popupLen; i++) {\n      const currentPopup = targetList[i];\n      if (popupList[i] === targetList[i] || currentPopup === eWrapper) {\n        continue;\n      }\n      const innerEls = currentPopup.querySelectorAll(\"div\");\n      innerEls.forEach((el) => {\n        if (el.scrollTop !== 0) {\n          innerElsScrollMap.push([el, el.scrollTop]);\n        }\n      });\n      if (i === 0) {\n        parent.insertAdjacentElement(\"afterbegin\", currentPopup);\n      } else {\n        targetList[i - 1].insertAdjacentElement(\"afterend\", currentPopup);\n      }\n    }\n    while (innerElsScrollMap.length) {\n      const currentEl = innerElsScrollMap.pop();\n      currentEl[0].scrollTop = currentEl[1];\n    }\n  }\n};\n\n// community-modules/core/src/vanillaFrameworkOverrides.ts\nvar PASSIVE_EVENTS2 = [\"touchstart\", \"touchend\", \"touchmove\", \"touchcancel\"];\nvar VanillaFrameworkOverrides = class {\n  constructor(frameworkName = \"javascript\") {\n    this.frameworkName = frameworkName;\n    this.renderingEngine = \"vanilla\";\n    this.wrapIncoming = (callback) => callback();\n    this.wrapOutgoing = (callback) => callback();\n  }\n  setInterval(action, timeout) {\n    return new AgPromise((resolve) => {\n      resolve(window.setInterval(action, timeout));\n    });\n  }\n  // for Vanilla JS, we just add the event to the element\n  addEventListener(element, type, listener, useCapture) {\n    const isPassive = _includes(PASSIVE_EVENTS2, type);\n    element.addEventListener(type, listener, { capture: !!useCapture, passive: isPassive });\n  }\n  get shouldWrapOutgoing() {\n    return false;\n  }\n  frameworkComponent(name) {\n    return null;\n  }\n  isFrameworkComponent(comp) {\n    return false;\n  }\n  getDocLink(path) {\n    const framework = this.frameworkName === \"solid\" ? \"react\" : this.frameworkName;\n    return `https://www.ag-grid.com/${framework}-data-grid${path ? `/${path}` : \"\"}`;\n  }\n};\n\n// community-modules/core/src/cellNavigationService.ts\nvar CellNavigationService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"cellNavigationService\";\n  }\n  wireBeans(beans) {\n    this.visibleColsService = beans.visibleColsService;\n    this.rowModel = beans.rowModel;\n    this.rowRenderer = beans.rowRenderer;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.paginationService = beans.paginationService;\n    this.pageBoundsService = beans.pageBoundsService;\n  }\n  // returns null if no cell to focus on, ie at the end of the grid\n  getNextCellToFocus(key, focusedCell, ctrlPressed = false) {\n    if (ctrlPressed) {\n      return this.getNextCellToFocusWithCtrlPressed(key, focusedCell);\n    }\n    return this.getNextCellToFocusWithoutCtrlPressed(key, focusedCell);\n  }\n  getNextCellToFocusWithCtrlPressed(key, focusedCell) {\n    const upKey = key === KeyCode.UP;\n    const downKey = key === KeyCode.DOWN;\n    const leftKey = key === KeyCode.LEFT;\n    let column;\n    let rowIndex;\n    if (upKey || downKey) {\n      rowIndex = upKey ? this.pageBoundsService.getFirstRow() : this.pageBoundsService.getLastRow();\n      column = focusedCell.column;\n    } else {\n      const allColumns = this.visibleColsService.getAllCols();\n      const isRtl = this.gos.get(\"enableRtl\");\n      rowIndex = focusedCell.rowIndex;\n      column = leftKey !== isRtl ? allColumns[0] : _last(allColumns);\n    }\n    return {\n      rowIndex,\n      rowPinned: null,\n      column\n    };\n  }\n  getNextCellToFocusWithoutCtrlPressed(key, focusedCell) {\n    let pointer = focusedCell;\n    let finished = false;\n    while (!finished) {\n      switch (key) {\n        case KeyCode.UP:\n          pointer = this.getCellAbove(pointer);\n          break;\n        case KeyCode.DOWN:\n          pointer = this.getCellBelow(pointer);\n          break;\n        case KeyCode.RIGHT:\n          if (this.gos.get(\"enableRtl\")) {\n            pointer = this.getCellToLeft(pointer);\n          } else {\n            pointer = this.getCellToRight(pointer);\n          }\n          break;\n        case KeyCode.LEFT:\n          if (this.gos.get(\"enableRtl\")) {\n            pointer = this.getCellToRight(pointer);\n          } else {\n            pointer = this.getCellToLeft(pointer);\n          }\n          break;\n        default:\n          pointer = null;\n          _warnOnce(\"unknown key for navigation \", key);\n          break;\n      }\n      if (pointer) {\n        finished = this.isCellGoodToFocusOn(pointer);\n      } else {\n        finished = true;\n      }\n    }\n    return pointer;\n  }\n  isCellGoodToFocusOn(gridCell) {\n    const column = gridCell.column;\n    let rowNode;\n    switch (gridCell.rowPinned) {\n      case \"top\":\n        rowNode = this.pinnedRowModel.getPinnedTopRow(gridCell.rowIndex);\n        break;\n      case \"bottom\":\n        rowNode = this.pinnedRowModel.getPinnedBottomRow(gridCell.rowIndex);\n        break;\n      default:\n        rowNode = this.rowModel.getRow(gridCell.rowIndex);\n        break;\n    }\n    if (!rowNode) {\n      return false;\n    }\n    const suppressNavigable = column.isSuppressNavigable(rowNode);\n    return !suppressNavigable;\n  }\n  getCellToLeft(lastCell) {\n    if (!lastCell) {\n      return null;\n    }\n    const colToLeft = this.visibleColsService.getColBefore(lastCell.column);\n    if (!colToLeft) {\n      return null;\n    }\n    return {\n      rowIndex: lastCell.rowIndex,\n      column: colToLeft,\n      rowPinned: lastCell.rowPinned\n    };\n  }\n  getCellToRight(lastCell) {\n    if (!lastCell) {\n      return null;\n    }\n    const colToRight = this.visibleColsService.getColAfter(lastCell.column);\n    if (!colToRight) {\n      return null;\n    }\n    return {\n      rowIndex: lastCell.rowIndex,\n      column: colToRight,\n      rowPinned: lastCell.rowPinned\n    };\n  }\n  getRowBelow(rowPosition) {\n    const index = rowPosition.rowIndex;\n    const pinned = rowPosition.rowPinned;\n    let ignoreSticky = false;\n    if (this.isLastRowInContainer(rowPosition)) {\n      switch (pinned) {\n        case \"bottom\":\n          return null;\n        case \"top\":\n          if (this.rowModel.isRowsToRender()) {\n            return { rowIndex: this.pageBoundsService.getFirstRow(), rowPinned: null };\n          }\n          if (this.pinnedRowModel.isRowsToRender(\"bottom\")) {\n            return { rowIndex: 0, rowPinned: \"bottom\" };\n          }\n          return null;\n        default:\n          if (this.pinnedRowModel.isRowsToRender(\"bottom\")) {\n            return { rowIndex: 0, rowPinned: \"bottom\" };\n          }\n          return null;\n      }\n    } else if (pinned) {\n      ignoreSticky = true;\n    }\n    const rowNode = this.rowModel.getRow(rowPosition.rowIndex);\n    const nextStickyPosition = ignoreSticky ? void 0 : this.getNextStickyPosition(rowNode);\n    if (nextStickyPosition) {\n      return nextStickyPosition;\n    }\n    return { rowIndex: index + 1, rowPinned: pinned };\n  }\n  getNextStickyPosition(rowNode, up) {\n    if (!_isGroupRowsSticky(this.gos) || !rowNode || !rowNode.sticky) {\n      return;\n    }\n    const isTopCtrls = this.rowRenderer.getStickyTopRowCtrls().some((ctrl) => ctrl.getRowNode().rowIndex === rowNode.rowIndex);\n    let stickyRowCtrls = [];\n    if (isTopCtrls) {\n      stickyRowCtrls = [...this.rowRenderer.getStickyTopRowCtrls()].sort(\n        (a, b) => a.getRowNode().rowIndex - b.getRowNode().rowIndex\n      );\n    } else {\n      stickyRowCtrls = [...this.rowRenderer.getStickyBottomRowCtrls()].sort(\n        (a, b) => b.getRowNode().rowIndex - a.getRowNode().rowIndex\n      );\n    }\n    const diff = up ? -1 : 1;\n    const idx = stickyRowCtrls.findIndex((ctrl) => ctrl.getRowNode().rowIndex === rowNode.rowIndex);\n    const nextCtrl = stickyRowCtrls[idx + diff];\n    if (nextCtrl) {\n      return { rowIndex: nextCtrl.getRowNode().rowIndex, rowPinned: null };\n    }\n  }\n  getCellBelow(lastCell) {\n    if (!lastCell) {\n      return null;\n    }\n    const rowBelow = this.getRowBelow(lastCell);\n    if (rowBelow) {\n      return {\n        rowIndex: rowBelow.rowIndex,\n        column: lastCell.column,\n        rowPinned: rowBelow.rowPinned\n      };\n    }\n    return null;\n  }\n  isLastRowInContainer(rowPosition) {\n    const pinned = rowPosition.rowPinned;\n    const index = rowPosition.rowIndex;\n    if (pinned === \"top\") {\n      const lastTopIndex = this.pinnedRowModel.getPinnedTopRowCount() - 1;\n      return lastTopIndex <= index;\n    }\n    if (pinned === \"bottom\") {\n      const lastBottomIndex = this.pinnedRowModel.getPinnedBottomRowCount() - 1;\n      return lastBottomIndex <= index;\n    }\n    const lastBodyIndex = this.pageBoundsService.getLastRow();\n    return lastBodyIndex <= index;\n  }\n  getRowAbove(rowPosition) {\n    const index = rowPosition.rowIndex;\n    const pinned = rowPosition.rowPinned;\n    const isFirstRow = pinned ? index === 0 : index === this.pageBoundsService.getFirstRow();\n    let ignoreSticky = false;\n    if (isFirstRow) {\n      if (pinned === \"top\") {\n        return null;\n      }\n      if (!pinned) {\n        if (this.pinnedRowModel.isRowsToRender(\"top\")) {\n          return this.getLastFloatingTopRow();\n        }\n        return null;\n      }\n      if (this.rowModel.isRowsToRender()) {\n        return this.getLastBodyCell();\n      }\n      if (this.pinnedRowModel.isRowsToRender(\"top\")) {\n        return this.getLastFloatingTopRow();\n      }\n      return null;\n    } else if (pinned) {\n      ignoreSticky = true;\n    }\n    const rowNode = this.rowModel.getRow(rowPosition.rowIndex);\n    const nextStickyPosition = ignoreSticky ? void 0 : this.getNextStickyPosition(rowNode, true);\n    if (nextStickyPosition) {\n      return nextStickyPosition;\n    }\n    return { rowIndex: index - 1, rowPinned: pinned };\n  }\n  getCellAbove(lastCell) {\n    if (!lastCell) {\n      return null;\n    }\n    const rowAbove = this.getRowAbove({ rowIndex: lastCell.rowIndex, rowPinned: lastCell.rowPinned });\n    if (rowAbove) {\n      return {\n        rowIndex: rowAbove.rowIndex,\n        column: lastCell.column,\n        rowPinned: rowAbove.rowPinned\n      };\n    }\n    return null;\n  }\n  getLastBodyCell() {\n    const lastBodyRow = this.pageBoundsService.getLastRow();\n    return { rowIndex: lastBodyRow, rowPinned: null };\n  }\n  getLastFloatingTopRow() {\n    const lastFloatingRow = this.pinnedRowModel.getPinnedTopRowCount() - 1;\n    return { rowIndex: lastFloatingRow, rowPinned: \"top\" };\n  }\n  getNextTabbedCell(gridCell, backwards) {\n    if (backwards) {\n      return this.getNextTabbedCellBackwards(gridCell);\n    }\n    return this.getNextTabbedCellForwards(gridCell);\n  }\n  getNextTabbedCellForwards(gridCell) {\n    const displayedColumns = this.visibleColsService.getAllCols();\n    let newRowIndex = gridCell.rowIndex;\n    let newFloating = gridCell.rowPinned;\n    let newColumn = this.visibleColsService.getColAfter(gridCell.column);\n    if (!newColumn) {\n      newColumn = displayedColumns[0];\n      const rowBelow = this.getRowBelow(gridCell);\n      if (_missing(rowBelow)) {\n        return null;\n      }\n      if (!rowBelow.rowPinned && !(this.paginationService?.isRowInPage(rowBelow) ?? true)) {\n        return null;\n      }\n      newRowIndex = rowBelow ? rowBelow.rowIndex : null;\n      newFloating = rowBelow ? rowBelow.rowPinned : null;\n    }\n    return { rowIndex: newRowIndex, column: newColumn, rowPinned: newFloating };\n  }\n  getNextTabbedCellBackwards(gridCell) {\n    const displayedColumns = this.visibleColsService.getAllCols();\n    let newRowIndex = gridCell.rowIndex;\n    let newFloating = gridCell.rowPinned;\n    let newColumn = this.visibleColsService.getColBefore(gridCell.column);\n    if (!newColumn) {\n      newColumn = _last(displayedColumns);\n      const rowAbove = this.getRowAbove({ rowIndex: gridCell.rowIndex, rowPinned: gridCell.rowPinned });\n      if (_missing(rowAbove)) {\n        return null;\n      }\n      if (!rowAbove.rowPinned && !(this.paginationService?.isRowInPage(rowAbove) ?? true)) {\n        return null;\n      }\n      newRowIndex = rowAbove ? rowAbove.rowIndex : null;\n      newFloating = rowAbove ? rowAbove.rowPinned : null;\n    }\n    return { rowIndex: newRowIndex, column: newColumn, rowPinned: newFloating };\n  }\n};\n\n// community-modules/core/src/api/gridApiFunctions.ts\nvar mod = (moduleName, input) => {\n  for (const key in input) {\n    input[key] = moduleName;\n  }\n  return input;\n};\nvar gridApiFunctionsMap = {\n  ...mod(\"@ag-grid-community/core\" /* CommunityCoreModule */, {\n    dispatchEvent: 0,\n    destroy: 0,\n    getGridId: 0,\n    getGridOption: 0,\n    isDestroyed: 0,\n    setGridOption: 0,\n    updateGridOptions: 0,\n    getState: 0,\n    setNodesSelected: 0,\n    selectAll: 0,\n    deselectAll: 0,\n    selectAllFiltered: 0,\n    deselectAllFiltered: 0,\n    selectAllOnCurrentPage: 0,\n    deselectAllOnCurrentPage: 0,\n    getSelectedNodes: 0,\n    getSelectedRows: 0,\n    redrawRows: 0,\n    setRowNodeExpanded: 0,\n    getRowNode: 0,\n    addRenderedRowListener: 0,\n    getRenderedNodes: 0,\n    forEachNode: 0,\n    getFirstDisplayedRow: 0,\n    getFirstDisplayedRowIndex: 0,\n    getLastDisplayedRow: 0,\n    getLastDisplayedRowIndex: 0,\n    getDisplayedRowAtIndex: 0,\n    getDisplayedRowCount: 0,\n    getModel: 0,\n    getVerticalPixelRange: 0,\n    getHorizontalPixelRange: 0,\n    ensureColumnVisible: 0,\n    ensureIndexVisible: 0,\n    ensureNodeVisible: 0,\n    getFocusedCell: 0,\n    clearFocusedCell: 0,\n    setFocusedCell: 0,\n    tabToNextCell: 0,\n    tabToPreviousCell: 0,\n    setFocusedHeader: 0,\n    addEventListener: 0,\n    addGlobalListener: 0,\n    removeEventListener: 0,\n    removeGlobalListener: 0,\n    expireValueCache: 0,\n    getValue: 0,\n    getCellValue: 0,\n    showColumnMenuAfterButtonClick: 0,\n    showColumnMenuAfterMouseClick: 0,\n    showColumnMenu: 0,\n    hidePopupMenu: 0,\n    onSortChanged: 0,\n    getPinnedTopRowCount: 0,\n    getPinnedBottomRowCount: 0,\n    getPinnedTopRow: 0,\n    getPinnedBottomRow: 0,\n    showLoadingOverlay: 0,\n    showNoRowsOverlay: 0,\n    hideOverlay: 0,\n    setGridAriaProperty: 0,\n    refreshCells: 0,\n    flashCells: 0,\n    refreshHeader: 0,\n    isAnimationFrameQueueEmpty: 0,\n    flushAllAnimationFrames: 0,\n    getSizesForCurrentTheme: 0,\n    getCellRendererInstances: 0,\n    addRowDropZone: 0,\n    removeRowDropZone: 0,\n    getRowDropZoneParams: 0,\n    getColumnDef: 0,\n    getColumnDefs: 0,\n    sizeColumnsToFit: 0,\n    setColumnGroupOpened: 0,\n    getColumnGroup: 0,\n    getProvidedColumnGroup: 0,\n    getDisplayNameForColumn: 0,\n    getDisplayNameForColumnGroup: 0,\n    getColumn: 0,\n    getColumns: 0,\n    applyColumnState: 0,\n    getColumnState: 0,\n    resetColumnState: 0,\n    getColumnGroupState: 0,\n    setColumnGroupState: 0,\n    resetColumnGroupState: 0,\n    isPinning: 0,\n    isPinningLeft: 0,\n    isPinningRight: 0,\n    getDisplayedColAfter: 0,\n    getDisplayedColBefore: 0,\n    setColumnVisible: 0,\n    setColumnsVisible: 0,\n    setColumnPinned: 0,\n    setColumnsPinned: 0,\n    getAllGridColumns: 0,\n    getDisplayedLeftColumns: 0,\n    getDisplayedCenterColumns: 0,\n    getDisplayedRightColumns: 0,\n    getAllDisplayedColumns: 0,\n    getAllDisplayedVirtualColumns: 0,\n    moveColumn: 0,\n    moveColumnByIndex: 0,\n    moveColumns: 0,\n    setColumnWidth: 0,\n    setColumnWidths: 0,\n    getLeftDisplayedColumnGroups: 0,\n    getCenterDisplayedColumnGroups: 0,\n    getRightDisplayedColumnGroups: 0,\n    getAllDisplayedColumnGroups: 0,\n    autoSizeColumn: 0,\n    autoSizeColumns: 0,\n    autoSizeAllColumns: 0,\n    undoCellEditing: 0,\n    redoCellEditing: 0,\n    getCellEditorInstances: 0,\n    getEditingCells: 0,\n    stopEditing: 0,\n    startEditingCell: 0,\n    getCurrentUndoSize: 0,\n    getCurrentRedoSize: 0,\n    isAnyFilterPresent: 0,\n    onFilterChanged: 0,\n    isColumnFilterPresent: 0,\n    getFilterInstance: 0,\n    getColumnFilterInstance: 0,\n    destroyFilter: 0,\n    setFilterModel: 0,\n    getFilterModel: 0,\n    getColumnFilterModel: 0,\n    setColumnFilterModel: 0,\n    showColumnFilter: 0,\n    isQuickFilterPresent: 0,\n    getQuickFilter: 0,\n    resetQuickFilter: 0,\n    paginationIsLastPageFound: 0,\n    paginationGetPageSize: 0,\n    paginationGetCurrentPage: 0,\n    paginationGetTotalPages: 0,\n    paginationGetRowCount: 0,\n    paginationGoToNextPage: 0,\n    paginationGoToPreviousPage: 0,\n    paginationGoToFirstPage: 0,\n    paginationGoToLastPage: 0,\n    paginationGoToPage: 0,\n    // These may need updating to say which of multiple possible modules they could be missing from.\n    expandAll: 0,\n    collapseAll: 0,\n    onRowHeightChanged: 0,\n    setRowCount: 0,\n    getCacheBlockState: 0,\n    isLastRowIndexKnown: 0\n  }),\n  ...mod(\"@ag-grid-community/client-side-row-model\" /* ClientSideRowModelModule */, {\n    onGroupExpandedOrCollapsed: 0,\n    refreshClientSideRowModel: 0,\n    isRowDataEmpty: 0,\n    forEachLeafNode: 0,\n    forEachNodeAfterFilter: 0,\n    forEachNodeAfterFilterAndSort: 0,\n    resetRowHeights: 0,\n    applyTransaction: 0,\n    applyTransactionAsync: 0,\n    flushAsyncTransactions: 0,\n    getBestCostNodeSelection: 0\n  }),\n  ...mod(\"@ag-grid-community/csv-export\" /* CsvExportModule */, {\n    getDataAsCsv: 0,\n    exportDataAsCsv: 0\n  }),\n  ...mod(\"@ag-grid-community/infinite-row-model\" /* InfiniteRowModelModule */, {\n    refreshInfiniteCache: 0,\n    purgeInfiniteCache: 0,\n    getInfiniteRowCount: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/advanced-filter\" /* AdvancedFilterModule */, {\n    getAdvancedFilterModel: 0,\n    setAdvancedFilterModel: 0,\n    showAdvancedFilterBuilder: 0,\n    hideAdvancedFilterBuilder: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/charts\" /* GridChartsModule */, {\n    getChartModels: 0,\n    getChartRef: 0,\n    getChartImageDataURL: 0,\n    downloadChart: 0,\n    openChartToolPanel: 0,\n    closeChartToolPanel: 0,\n    createRangeChart: 0,\n    createPivotChart: 0,\n    createCrossFilterChart: 0,\n    updateChart: 0,\n    restoreChart: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/clipboard\" /* ClipboardModule */, {\n    copyToClipboard: 0,\n    cutToClipboard: 0,\n    copySelectedRowsToClipboard: 0,\n    copySelectedRangeToClipboard: 0,\n    copySelectedRangeDown: 0,\n    pasteFromClipboard: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/excel-export\" /* ExcelExportModule */, {\n    getDataAsExcel: 0,\n    exportDataAsExcel: 0,\n    getSheetDataForExcel: 0,\n    getMultipleSheetsAsExcel: 0,\n    exportMultipleSheetsAsExcel: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/master-detail\" /* MasterDetailModule */, {\n    addDetailGridInfo: 0,\n    removeDetailGridInfo: 0,\n    getDetailGridInfo: 0,\n    forEachDetailGridInfo: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/menu\" /* MenuModule */, {\n    showContextMenu: 0,\n    showColumnChooser: 0,\n    hideColumnChooser: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/range-selection\" /* RangeSelectionModule */, {\n    getCellRanges: 0,\n    addCellRange: 0,\n    clearRangeSelection: 0,\n    clearCellSelection: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */, {\n    addAggFunc: 0,\n    addAggFuncs: 0,\n    clearAggFuncs: 0,\n    setColumnAggFunc: 0,\n    isPivotMode: 0,\n    getPivotResultColumn: 0,\n    setValueColumns: 0,\n    getValueColumns: 0,\n    removeValueColumn: 0,\n    removeValueColumns: 0,\n    addValueColumn: 0,\n    addValueColumns: 0,\n    setRowGroupColumns: 0,\n    removeRowGroupColumn: 0,\n    removeRowGroupColumns: 0,\n    addRowGroupColumn: 0,\n    addRowGroupColumns: 0,\n    getRowGroupColumns: 0,\n    moveRowGroupColumn: 0,\n    setPivotColumns: 0,\n    removePivotColumn: 0,\n    removePivotColumns: 0,\n    addPivotColumn: 0,\n    addPivotColumns: 0,\n    getPivotColumns: 0,\n    setPivotResultColumns: 0,\n    getPivotResultColumns: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/server-side-row-model\" /* ServerSideRowModelModule */, {\n    getServerSideSelectionState: 0,\n    setServerSideSelectionState: 0,\n    applyServerSideTransaction: 0,\n    applyServerSideTransactionAsync: 0,\n    applyServerSideRowData: 0,\n    retryServerSideLoads: 0,\n    flushServerSideAsyncTransactions: 0,\n    refreshServerSide: 0,\n    getServerSideGroupLevelState: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/side-bar\" /* SideBarModule */, {\n    isSideBarVisible: 0,\n    setSideBarVisible: 0,\n    setSideBarPosition: 0,\n    openToolPanel: 0,\n    closeToolPanel: 0,\n    getOpenedToolPanel: 0,\n    refreshToolPanel: 0,\n    isToolPanelShowing: 0,\n    getToolPanelInstance: 0,\n    getSideBar: 0\n  }),\n  ...mod(\"@ag-grid-enterprise/status-bar\" /* StatusBarModule */, {\n    getStatusPanel: 0\n  })\n};\n\n// community-modules/core/src/api/apiFunctionService.ts\nvar defaultFns = {\n  isDestroyed: () => true,\n  destroy() {\n  },\n  preConstruct() {\n  },\n  postConstruct() {\n  },\n  preWireBeans() {\n  },\n  wireBeans() {\n  }\n};\nvar dispatchEvent = (beans, event) => beans.eventService.dispatchEvent(event);\nvar GridApiClass = class {\n};\nReflect.defineProperty(GridApiClass, \"name\", { value: \"GridApi\" });\nvar ApiFunctionService = class extends BeanStub {\n  constructor() {\n    super();\n    this.beanName = \"apiFunctionService\";\n    this.api = new GridApiClass();\n    this.fns = {\n      ...defaultFns,\n      // dispatchEvent is used by frameworks, also used by aligned grids to identify a grid api instance\n      dispatchEvent\n    };\n    this.beans = null;\n    this.preDestroyLink = \"\";\n    const { api } = this;\n    for (const key in gridApiFunctionsMap) {\n      api[key] = this.makeApi(key)[key];\n    }\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n  }\n  postConstruct() {\n    this.preDestroyLink = this.frameworkOverrides.getDocLink(\"grid-lifecycle/#grid-pre-destroyed\");\n  }\n  addFunction(functionName, func) {\n    const { fns, beans } = this;\n    if (fns !== defaultFns) {\n      fns[functionName] = beans?.validationService?.validateApiFunction(functionName, func) ?? func;\n    }\n  }\n  makeApi(apiName) {\n    return {\n      [apiName]: (...args) => {\n        const {\n          beans,\n          fns: { [apiName]: fn }\n        } = this;\n        return fn ? fn(beans, ...args) : this.apiNotFound(apiName);\n      }\n    };\n  }\n  apiNotFound(fnName) {\n    const { beans, gos, preDestroyLink } = this;\n    if (!beans) {\n      _warnOnce(\n        `Grid API function ${fnName}() cannot be called as the grid has been destroyed.\nEither clear local references to the grid api, when it is destroyed, or check gridApi.isDestroyed() to avoid calling methods against a destroyed grid.\nTo run logic when the grid is about to be destroyed use the gridPreDestroy event. See: ${preDestroyLink}`\n      );\n    } else {\n      const module = gridApiFunctionsMap[fnName];\n      if (gos.assertModuleRegistered(module, `api.${fnName}`)) {\n        _warnOnce(`API function '${fnName}' not registered to module '${module}'`);\n      }\n    }\n  }\n  destroy() {\n    super.destroy();\n    this.fns = defaultFns;\n    this.beans = null;\n  }\n};\n\n// community-modules/core/src/api/apiUtils.ts\nfunction createGridApi(context) {\n  return {\n    beanName: \"gridApi\",\n    bean: context.getBean(\"apiFunctionService\").api\n  };\n}\n\n// community-modules/core/src/columns/columnDefFactory.ts\nvar ColumnDefFactory = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnDefFactory\";\n  }\n  buildColumnDefs(cols, rowGroupColumns, pivotColumns) {\n    const res = [];\n    const colGroupDefs = {};\n    cols.forEach((col) => {\n      const colDef = this.createDefFromColumn(col, rowGroupColumns, pivotColumns);\n      let addToResult = true;\n      let childDef = colDef;\n      let pointer = col.getOriginalParent();\n      let lastPointer = null;\n      while (pointer) {\n        let parentDef = null;\n        if (pointer.isPadding()) {\n          pointer = pointer.getOriginalParent();\n          continue;\n        }\n        const existingParentDef = colGroupDefs[pointer.getGroupId()];\n        if (existingParentDef) {\n          existingParentDef.children.push(childDef);\n          addToResult = false;\n          break;\n        }\n        parentDef = this.createDefFromGroup(pointer);\n        if (parentDef) {\n          parentDef.children = [childDef];\n          colGroupDefs[parentDef.groupId] = parentDef;\n          childDef = parentDef;\n          pointer = pointer.getOriginalParent();\n        }\n        if (pointer != null && lastPointer === pointer) {\n          addToResult = false;\n          break;\n        }\n        lastPointer = pointer;\n      }\n      if (addToResult) {\n        res.push(childDef);\n      }\n    });\n    return res;\n  }\n  createDefFromGroup(group) {\n    const defCloned = _deepCloneDefinition(group.getColGroupDef(), [\"children\"]);\n    if (defCloned) {\n      defCloned.groupId = group.getGroupId();\n    }\n    return defCloned;\n  }\n  createDefFromColumn(col, rowGroupColumns, pivotColumns) {\n    const colDefCloned = _deepCloneDefinition(col.getColDef());\n    colDefCloned.colId = col.getColId();\n    colDefCloned.width = col.getActualWidth();\n    colDefCloned.rowGroup = col.isRowGroupActive();\n    colDefCloned.rowGroupIndex = col.isRowGroupActive() ? rowGroupColumns.indexOf(col) : null;\n    colDefCloned.pivot = col.isPivotActive();\n    colDefCloned.pivotIndex = col.isPivotActive() ? pivotColumns.indexOf(col) : null;\n    colDefCloned.aggFunc = col.isValueActive() ? col.getAggFunc() : null;\n    colDefCloned.hide = col.isVisible() ? void 0 : true;\n    colDefCloned.pinned = col.isPinned() ? col.getPinned() : null;\n    colDefCloned.sort = col.getSort() ? col.getSort() : null;\n    colDefCloned.sortIndex = col.getSortIndex() != null ? col.getSortIndex() : null;\n    return colDefCloned;\n  }\n};\n\n// community-modules/core/src/columns/columnEventDispatcher.ts\nvar ColumnEventDispatcher = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnEventDispatcher\";\n  }\n  visibleCols(source) {\n    this.eventService.dispatchEvent({\n      type: \"displayedColumnsChanged\",\n      source\n    });\n  }\n  gridColumns() {\n    this.eventService.dispatchEvent({\n      type: \"gridColumnsChanged\"\n    });\n  }\n  headerHeight(col) {\n    this.eventService.dispatchEvent({\n      type: \"columnHeaderHeightChanged\",\n      column: col,\n      columns: [col],\n      source: \"autosizeColumnHeaderHeight\"\n    });\n  }\n  groupHeaderHeight(col) {\n    this.eventService.dispatchEvent({\n      type: \"columnGroupHeaderHeightChanged\",\n      columnGroup: col,\n      source: \"autosizeColumnGroupHeaderHeight\"\n    });\n  }\n  groupOpened(impactedGroups) {\n    this.eventService.dispatchEvent({\n      type: \"columnGroupOpened\",\n      columnGroup: impactedGroups.length === 1 ? impactedGroups[0] : void 0,\n      columnGroups: impactedGroups\n    });\n  }\n  rowGroupChanged(impactedColumns, source) {\n    this.eventService.dispatchEvent({\n      type: \"columnRowGroupChanged\",\n      columns: impactedColumns,\n      column: impactedColumns.length === 1 ? impactedColumns[0] : null,\n      source\n    });\n  }\n  genericColumnEvent(eventType, masterList, source) {\n    this.eventService.dispatchEvent({\n      type: eventType,\n      columns: masterList,\n      column: masterList.length === 1 ? masterList[0] : null,\n      source\n    });\n  }\n  pivotModeChanged() {\n    this.eventService.dispatchEvent({\n      type: \"columnPivotModeChanged\"\n    });\n  }\n  virtualColumnsChanged(afterScroll) {\n    this.eventService.dispatchEvent({\n      type: \"virtualColumnsChanged\",\n      afterScroll\n    });\n  }\n  newColumnsLoaded(source) {\n    this.eventService.dispatchEvent({\n      type: \"newColumnsLoaded\",\n      source\n    });\n  }\n  /** @deprecated v32.2 */\n  everythingChanged(source) {\n    this.eventService.dispatchEvent({\n      type: \"columnEverythingChanged\",\n      source\n    });\n  }\n  columnMoved(params) {\n    const { movedColumns, source, toIndex, finished } = params;\n    this.eventService.dispatchEvent({\n      type: \"columnMoved\",\n      columns: movedColumns,\n      column: movedColumns && movedColumns.length === 1 ? movedColumns[0] : null,\n      toIndex,\n      finished,\n      source\n    });\n  }\n  columnPinned(changedColumns, source) {\n    if (!changedColumns.length) {\n      return;\n    }\n    const column = changedColumns.length === 1 ? changedColumns[0] : null;\n    const pinned = this.getCommonValue(changedColumns, (col) => col.getPinned());\n    this.eventService.dispatchEvent({\n      type: \"columnPinned\",\n      // mistake in typing, 'undefined' should be allowed, as 'null' means 'not pinned'\n      pinned: pinned != null ? pinned : null,\n      columns: changedColumns,\n      column,\n      source\n    });\n  }\n  columnVisible(changedColumns, source) {\n    if (!changedColumns.length) {\n      return;\n    }\n    const column = changedColumns.length === 1 ? changedColumns[0] : null;\n    const visible = this.getCommonValue(changedColumns, (col) => col.isVisible());\n    this.eventService.dispatchEvent({\n      type: \"columnVisible\",\n      visible,\n      columns: changedColumns,\n      column,\n      source\n    });\n  }\n  getCommonValue(cols, valueGetter) {\n    if (!cols || cols.length == 0) {\n      return void 0;\n    }\n    const firstValue = valueGetter(cols[0]);\n    for (let i = 1; i < cols.length; i++) {\n      if (firstValue !== valueGetter(cols[i])) {\n        return void 0;\n      }\n    }\n    return firstValue;\n  }\n  columnChanged(type, columns, source) {\n    this.eventService.dispatchEvent({\n      type,\n      columns,\n      column: columns && columns.length == 1 ? columns[0] : null,\n      source\n    });\n  }\n  columnResized(columns, finished, source, flexColumns = null) {\n    if (columns && columns.length) {\n      this.eventService.dispatchEvent({\n        type: \"columnResized\",\n        columns,\n        column: columns.length === 1 ? columns[0] : null,\n        flexColumns,\n        finished,\n        source\n      });\n    }\n  }\n};\n\n// community-modules/core/src/columns/columnGetStateService.ts\nvar ColumnGetStateService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnGetStateService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n  }\n  getColumnState() {\n    const primaryCols = this.columnModel.getColDefCols();\n    if (_missing(primaryCols) || !this.columnModel.isAlive()) {\n      return [];\n    }\n    const colsForState = this.columnModel.getAllCols();\n    const res = colsForState.map((col) => this.createStateItemFromColumn(col));\n    this.orderColumnStateList(res);\n    return res;\n  }\n  createStateItemFromColumn(column) {\n    const rowGorupColumns = this.funcColsService.getRowGroupColumns();\n    const pivotColumns = this.funcColsService.getPivotColumns();\n    const rowGroupIndex = column.isRowGroupActive() ? rowGorupColumns.indexOf(column) : null;\n    const pivotIndex = column.isPivotActive() ? pivotColumns.indexOf(column) : null;\n    const aggFunc = column.isValueActive() ? column.getAggFunc() : null;\n    const sort = column.getSort() != null ? column.getSort() : null;\n    const sortIndex = column.getSortIndex() != null ? column.getSortIndex() : null;\n    const flex = column.getFlex() != null && column.getFlex() > 0 ? column.getFlex() : null;\n    const res = {\n      colId: column.getColId(),\n      width: column.getActualWidth(),\n      hide: !column.isVisible(),\n      pinned: column.getPinned(),\n      sort,\n      sortIndex,\n      aggFunc,\n      rowGroup: column.isRowGroupActive(),\n      rowGroupIndex,\n      pivot: column.isPivotActive(),\n      pivotIndex,\n      flex\n    };\n    return res;\n  }\n  orderColumnStateList(columnStateList) {\n    const gridColumns = this.columnModel.getCols();\n    const colIdToGridIndexMap = new Map(gridColumns.map((col, index) => [col.getColId(), index]));\n    columnStateList.sort((itemA, itemB) => {\n      const posA = colIdToGridIndexMap.has(itemA.colId) ? colIdToGridIndexMap.get(itemA.colId) : -1;\n      const posB = colIdToGridIndexMap.has(itemB.colId) ? colIdToGridIndexMap.get(itemB.colId) : -1;\n      return posA - posB;\n    });\n  }\n};\n\n// community-modules/core/src/columns/columnGroupStateService.ts\nvar ColumnGroupStateService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnGroupStateService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnAnimationService = beans.columnAnimationService;\n    this.eventDispatcher = beans.columnEventDispatcher;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  getColumnGroupState() {\n    const columnGroupState = [];\n    const gridBalancedTree = this.columnModel.getColTree();\n    depthFirstOriginalTreeSearch(null, gridBalancedTree, (node) => {\n      if (isProvidedColumnGroup(node)) {\n        columnGroupState.push({\n          groupId: node.getGroupId(),\n          open: node.isExpanded()\n        });\n      }\n    });\n    return columnGroupState;\n  }\n  resetColumnGroupState(source) {\n    const primaryColumnTree = this.columnModel.getColDefColTree();\n    if (!primaryColumnTree) {\n      return;\n    }\n    const stateItems = [];\n    depthFirstOriginalTreeSearch(null, primaryColumnTree, (child) => {\n      if (isProvidedColumnGroup(child)) {\n        const colGroupDef = child.getColGroupDef();\n        const groupState = {\n          groupId: child.getGroupId(),\n          open: !colGroupDef ? void 0 : colGroupDef.openByDefault\n        };\n        stateItems.push(groupState);\n      }\n    });\n    this.setColumnGroupState(stateItems, source);\n  }\n  setColumnGroupState(stateItems, source) {\n    const gridBalancedTree = this.columnModel.getColTree();\n    if (!gridBalancedTree) {\n      return;\n    }\n    this.columnAnimationService.start();\n    const impactedGroups = [];\n    stateItems.forEach((stateItem) => {\n      const groupKey = stateItem.groupId;\n      const newValue = stateItem.open;\n      const providedColumnGroup = this.columnModel.getProvidedColGroup(groupKey);\n      if (!providedColumnGroup) {\n        return;\n      }\n      if (providedColumnGroup.isExpanded() === newValue) {\n        return;\n      }\n      providedColumnGroup.setExpanded(newValue);\n      impactedGroups.push(providedColumnGroup);\n    });\n    this.visibleColsService.refresh(source, true);\n    if (impactedGroups.length) {\n      this.eventDispatcher.groupOpened(impactedGroups);\n    }\n    this.columnAnimationService.finish();\n  }\n};\n\n// community-modules/core/src/columns/columnViewportService.ts\nvar ColumnViewportService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnViewportService\";\n    // cols in center that are in the viewport\n    this.colsWithinViewport = [];\n    // same as colsWithinViewport, except we always include columns with headerAutoHeight\n    this.headerColsWithinViewport = [];\n    // A hash key to keep track of changes in viewport columns\n    this.colsWithinViewportHash = \"\";\n    // all columns & groups to be rendered, index by row.\n    // used by header rows to get all items to render for that row.\n    this.rowsOfHeadersToRenderLeft = {};\n    this.rowsOfHeadersToRenderRight = {};\n    this.rowsOfHeadersToRenderCenter = {};\n  }\n  wireBeans(beans) {\n    this.visibleColsService = beans.visibleColsService;\n    this.columnModel = beans.columnModel;\n    this.eventDispatcher = beans.columnEventDispatcher;\n  }\n  postConstruct() {\n    this.suppressColumnVirtualisation = this.gos.get(\"suppressColumnVirtualisation\");\n  }\n  setScrollPosition(scrollWidth, scrollPosition, afterScroll = false) {\n    const bodyWidthDirty = this.visibleColsService.isBodyWidthDirty();\n    const noChange = scrollWidth === this.scrollWidth && scrollPosition === this.scrollPosition && !bodyWidthDirty;\n    if (noChange) {\n      return;\n    }\n    this.scrollWidth = scrollWidth;\n    this.scrollPosition = scrollPosition;\n    this.visibleColsService.setBodyWidthDirty();\n    if (this.gos.get(\"enableRtl\")) {\n      const bodyWidth = this.visibleColsService.getBodyContainerWidth();\n      this.viewportLeft = bodyWidth - this.scrollPosition - this.scrollWidth;\n      this.viewportRight = bodyWidth - this.scrollPosition;\n    } else {\n      this.viewportLeft = this.scrollPosition;\n      this.viewportRight = this.scrollWidth + this.scrollPosition;\n    }\n    if (this.columnModel.isReady()) {\n      this.checkViewportColumns(afterScroll);\n    }\n  }\n  getHeadersToRender(type, dept) {\n    let result;\n    switch (type) {\n      case \"left\":\n        result = this.rowsOfHeadersToRenderLeft[dept];\n        break;\n      case \"right\":\n        result = this.rowsOfHeadersToRenderRight[dept];\n        break;\n      default:\n        result = this.rowsOfHeadersToRenderCenter[dept];\n        break;\n    }\n    return result || [];\n  }\n  extractViewportColumns() {\n    const displayedColumnsCenter = this.visibleColsService.getCenterCols();\n    if (this.isColumnVirtualisationSuppressed()) {\n      this.colsWithinViewport = displayedColumnsCenter;\n      this.headerColsWithinViewport = displayedColumnsCenter;\n    } else {\n      this.colsWithinViewport = displayedColumnsCenter.filter(this.isColumnInRowViewport.bind(this));\n      this.headerColsWithinViewport = displayedColumnsCenter.filter(this.isColumnInHeaderViewport.bind(this));\n    }\n  }\n  isColumnVirtualisationSuppressed() {\n    return this.suppressColumnVirtualisation || this.viewportRight === 0;\n  }\n  clear() {\n    this.rowsOfHeadersToRenderLeft = {};\n    this.rowsOfHeadersToRenderRight = {};\n    this.rowsOfHeadersToRenderCenter = {};\n    this.colsWithinViewportHash = \"\";\n  }\n  isColumnInHeaderViewport(col) {\n    if (col.isAutoHeaderHeight() || this.isAnyParentAutoHeaderHeight(col)) {\n      return true;\n    }\n    return this.isColumnInRowViewport(col);\n  }\n  isAnyParentAutoHeaderHeight(col) {\n    while (col) {\n      if (col.isAutoHeaderHeight()) {\n        return true;\n      }\n      col = col.getParent();\n    }\n    return false;\n  }\n  isColumnInRowViewport(col) {\n    if (col.isAutoHeight()) {\n      return true;\n    }\n    const columnLeft = col.getLeft() || 0;\n    const columnRight = columnLeft + col.getActualWidth();\n    const leftBounds = this.viewportLeft - 200;\n    const rightBounds = this.viewportRight + 200;\n    const columnToMuchLeft = columnLeft < leftBounds && columnRight < leftBounds;\n    const columnToMuchRight = columnLeft > rightBounds && columnRight > rightBounds;\n    return !columnToMuchLeft && !columnToMuchRight;\n  }\n  // used by Grid API only\n  getViewportColumns() {\n    const leftCols = this.visibleColsService.getLeftCols();\n    const rightCols = this.visibleColsService.getRightCols();\n    const res = this.colsWithinViewport.concat(leftCols).concat(rightCols);\n    return res;\n  }\n  // + rowRenderer\n  // if we are not column spanning, this just returns back the virtual centre columns,\n  // however if we are column spanning, then different rows can have different virtual\n  // columns, so we have to work out the list for each individual row.\n  getColsWithinViewport(rowNode) {\n    if (!this.columnModel.isColSpanActive()) {\n      return this.colsWithinViewport;\n    }\n    const emptySpaceBeforeColumn = (col) => {\n      const left = col.getLeft();\n      return _exists(left) && left > this.viewportLeft;\n    };\n    const inViewportCallback = this.isColumnVirtualisationSuppressed() ? void 0 : this.isColumnInRowViewport.bind(this);\n    const displayedColumnsCenter = this.visibleColsService.getColsCenter();\n    return this.visibleColsService.getColsForRow(\n      rowNode,\n      displayedColumnsCenter,\n      inViewportCallback,\n      emptySpaceBeforeColumn\n    );\n  }\n  // checks what columns are currently displayed due to column virtualisation. dispatches an event\n  // if the list of columns has changed.\n  // + setColumnWidth(), setViewportPosition(), setColumnDefs(), sizeColumnsToFit()\n  checkViewportColumns(afterScroll = false) {\n    const viewportColumnsChanged = this.extractViewport();\n    if (viewportColumnsChanged) {\n      this.eventDispatcher.virtualColumnsChanged(afterScroll);\n    }\n  }\n  calculateHeaderRows() {\n    this.rowsOfHeadersToRenderLeft = {};\n    this.rowsOfHeadersToRenderRight = {};\n    this.rowsOfHeadersToRenderCenter = {};\n    const renderedColIds = {};\n    const renderedColsLeft = this.visibleColsService.getLeftCols();\n    const renderedColsRight = this.visibleColsService.getRightCols();\n    const allRenderedCols = this.headerColsWithinViewport.concat(renderedColsLeft).concat(renderedColsRight);\n    allRenderedCols.forEach((col) => renderedColIds[col.getId()] = true);\n    const testGroup = (children, result, dept) => {\n      let returnValue = false;\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        let addThisItem = false;\n        if (isColumn(child)) {\n          addThisItem = renderedColIds[child.getId()] === true;\n        } else {\n          const columnGroup = child;\n          const displayedChildren = columnGroup.getDisplayedChildren();\n          if (displayedChildren) {\n            addThisItem = testGroup(displayedChildren, result, dept + 1);\n          }\n        }\n        if (addThisItem) {\n          returnValue = true;\n          if (!result[dept]) {\n            result[dept] = [];\n          }\n          result[dept].push(child);\n        }\n      }\n      return returnValue;\n    };\n    testGroup(this.visibleColsService.getTreeLeft(), this.rowsOfHeadersToRenderLeft, 0);\n    testGroup(this.visibleColsService.getTreeRight(), this.rowsOfHeadersToRenderRight, 0);\n    testGroup(this.visibleColsService.getTreeCenter(), this.rowsOfHeadersToRenderCenter, 0);\n  }\n  extractViewport() {\n    const hashColumn = (c) => `${c.getId()}-${c.getPinned() || \"normal\"}`;\n    this.extractViewportColumns();\n    const newHash = this.getViewportColumns().map(hashColumn).join(\"#\");\n    const changed = this.colsWithinViewportHash !== newHash;\n    if (changed) {\n      this.colsWithinViewportHash = newHash;\n      this.calculateHeaderRows();\n    }\n    return changed;\n  }\n};\n\n// community-modules/core/src/components/framework/agComponentUtils.ts\nvar AgComponentUtils = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"agComponentUtils\";\n  }\n  wireBeans(beans) {\n    this.componentMetadataProvider = beans.componentMetadataProvider;\n  }\n  adaptFunction(propertyName, jsCompFunc) {\n    const metadata = this.componentMetadataProvider.retrieve(propertyName);\n    if (metadata && metadata.functionAdapter) {\n      return metadata.functionAdapter(jsCompFunc);\n    }\n    return null;\n  }\n  adaptCellRendererFunction(callback) {\n    class Adapter {\n      refresh() {\n        return false;\n      }\n      getGui() {\n        return this.eGui;\n      }\n      init(params) {\n        const callbackResult = callback(params);\n        const type = typeof callbackResult;\n        if (type === \"string\" || type === \"number\" || type === \"boolean\") {\n          this.eGui = _loadTemplate(\"<span>\" + callbackResult + \"</span>\");\n          return;\n        }\n        if (callbackResult == null) {\n          this.eGui = _loadTemplate(\"<span></span>\");\n          return;\n        }\n        this.eGui = callbackResult;\n      }\n    }\n    return Adapter;\n  }\n  doesImplementIComponent(candidate) {\n    if (!candidate) {\n      return false;\n    }\n    return candidate.prototype && \"getGui\" in candidate.prototype;\n  }\n};\n\n// community-modules/core/src/components/framework/componentMetadataProvider.ts\nvar ComponentMetadataProvider = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"componentMetadataProvider\";\n  }\n  wireBeans(beans) {\n    this.agComponentUtils = beans.agComponentUtils;\n  }\n  postConstruct() {\n    this.componentMetaData = {\n      dateComponent: {\n        mandatoryMethodList: [\"getDate\", \"setDate\"],\n        optionalMethodList: [\n          \"afterGuiAttached\",\n          \"setInputPlaceholder\",\n          \"setInputAriaLabel\",\n          \"setDisabled\",\n          \"onParamsUpdated\",\n          \"refresh\"\n        ]\n      },\n      detailCellRenderer: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"refresh\"],\n        functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n      },\n      dragAndDropImageComponent: {\n        mandatoryMethodList: [\"setIcon\", \"setLabel\"],\n        optionalMethodList: []\n      },\n      headerComponent: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"refresh\"]\n      },\n      headerGroupComponent: {\n        mandatoryMethodList: [],\n        optionalMethodList: []\n      },\n      loadingCellRenderer: {\n        mandatoryMethodList: [],\n        optionalMethodList: [],\n        functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n      },\n      loadingOverlayComponent: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"refresh\"]\n      },\n      noRowsOverlayComponent: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"refresh\"]\n      },\n      floatingFilterComponent: {\n        mandatoryMethodList: [\"onParentModelChanged\"],\n        optionalMethodList: [\"afterGuiAttached\", \"onParamsUpdated\", \"refresh\"]\n      },\n      cellRenderer: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"refresh\", \"afterGuiAttached\"],\n        functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n      },\n      cellEditor: {\n        mandatoryMethodList: [\"getValue\"],\n        optionalMethodList: [\n          \"isPopup\",\n          \"isCancelBeforeStart\",\n          \"isCancelAfterEnd\",\n          \"getPopupPosition\",\n          \"focusIn\",\n          \"focusOut\",\n          \"afterGuiAttached\",\n          \"refresh\"\n        ]\n      },\n      innerRenderer: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"afterGuiAttached\"],\n        functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n      },\n      fullWidthCellRenderer: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"refresh\", \"afterGuiAttached\"],\n        functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n      },\n      groupRowRenderer: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"afterGuiAttached\"],\n        functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n      },\n      filter: {\n        mandatoryMethodList: [\"isFilterActive\", \"doesFilterPass\", \"getModel\", \"setModel\"],\n        optionalMethodList: [\n          \"afterGuiAttached\",\n          \"afterGuiDetached\",\n          \"onNewRowsLoaded\",\n          \"getModelAsString\",\n          \"onFloatingFilterChanged\",\n          \"onAnyFilterChanged\",\n          \"refresh\"\n        ]\n      },\n      statusPanel: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"refresh\"]\n      },\n      toolPanel: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"refresh\", \"getState\"]\n      },\n      tooltipComponent: {\n        mandatoryMethodList: [],\n        optionalMethodList: []\n      },\n      menuItem: {\n        mandatoryMethodList: [],\n        optionalMethodList: [\"setActive\", \"select\", \"setExpanded\", \"configureDefaults\"]\n      }\n    };\n  }\n  retrieve(name) {\n    return this.componentMetaData[name];\n  }\n};\n\n// community-modules/core/src/context/gridBeanComparator.ts\nvar orderedCoreBeans = [\n  // core beans only\n  \"rowPositionUtils\",\n  \"cellPositionUtils\",\n  \"headerPositionUtils\",\n  \"paginationAutoPageSizeService\",\n  \"apiFunctionService\",\n  \"gridApi\",\n  \"userComponentRegistry\",\n  \"agComponentUtils\",\n  \"componentMetadataProvider\",\n  \"resizeObserverService\",\n  \"userComponentFactory\",\n  \"rowContainerHeightService\",\n  \"horizontalResizeService\",\n  \"localeService\",\n  \"validationService\",\n  \"pinnedRowModel\",\n  \"dragService\",\n  \"visibleColsService\",\n  \"eventService\",\n  \"gos\",\n  \"popupService\",\n  \"selectionService\",\n  \"columnFilterService\",\n  \"quickFilterService\",\n  \"filterManager\",\n  \"columnModel\",\n  \"headerNavigationService\",\n  \"pageBoundsService\",\n  \"paginationService\",\n  \"pageBoundsListener\",\n  \"rowRenderer\",\n  \"expressionService\",\n  \"columnFactory\",\n  \"alignedGridsService\",\n  \"navigationService\",\n  \"valueCache\",\n  \"valueService\",\n  \"loggerFactory\",\n  \"autoWidthCalculator\",\n  \"filterMenuFactory\",\n  \"dragAndDropService\",\n  \"focusService\",\n  \"mouseEventService\",\n  \"environment\",\n  \"cellNavigationService\",\n  \"stylingService\",\n  \"scrollVisibleService\",\n  \"sortController\",\n  \"columnHoverService\",\n  \"columnAnimationService\",\n  \"selectableService\",\n  \"autoColService\",\n  \"controlsColService\",\n  \"changeDetectionService\",\n  \"animationFrameService\",\n  \"undoRedoService\",\n  \"columnDefFactory\",\n  \"rowCssClassCalculator\",\n  \"rowNodeBlockLoader\",\n  \"rowNodeSorter\",\n  \"ctrlsService\",\n  \"pinnedWidthService\",\n  \"rowNodeEventThrottle\",\n  \"ctrlsFactory\",\n  \"dataTypeService\",\n  \"syncService\",\n  \"overlayService\",\n  \"stateService\",\n  \"expansionService\",\n  \"apiEventService\",\n  \"ariaAnnouncementService\",\n  \"menuService\",\n  \"columnApplyStateService\",\n  \"columnEventDispatcher\",\n  \"columnMoveService\",\n  \"columnAutosizeService\",\n  \"columnGetStateService\",\n  \"columnGroupStateService\",\n  \"columnSizeService\",\n  \"funcColsService\",\n  \"columnNameService\",\n  \"columnViewportService\",\n  \"pivotResultColsService\",\n  \"showRowGroupColsService\"\n];\nvar beanNamePosition = Object.fromEntries(\n  orderedCoreBeans.map((beanName, index) => [beanName, index])\n);\nfunction gridBeanInitComparator(bean1, bean2) {\n  const index1 = (bean1.beanName ? beanNamePosition[bean1.beanName] : void 0) ?? Number.MAX_SAFE_INTEGER;\n  const index2 = (bean2.beanName ? beanNamePosition[bean2.beanName] : void 0) ?? Number.MAX_SAFE_INTEGER;\n  return index1 - index2;\n}\nfunction gridBeanDestroyComparator(bean1, bean2) {\n  return bean1?.beanName === \"gridDestroyService\" ? -1 : 0;\n}\n\n// community-modules/core/src/ctrlsFactory.ts\nvar CtrlsFactory = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ctrlsFactory\";\n    this.registry = {};\n  }\n  register(meta) {\n    this.registry[meta.name] = meta.classImp;\n  }\n  getInstance(name, ...args) {\n    const ControllerClass = this.registry[name];\n    if (ControllerClass == null) {\n      return void 0;\n    }\n    return new ControllerClass(...args);\n  }\n};\n\n// community-modules/core/src/ctrlsService.ts\nvar CtrlsService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ctrlsService\";\n    this.params = {\n      gridCtrl: void 0,\n      gridBodyCtrl: void 0,\n      center: void 0,\n      left: void 0,\n      right: void 0,\n      bottomCenter: void 0,\n      bottomLeft: void 0,\n      bottomRight: void 0,\n      topCenter: void 0,\n      topLeft: void 0,\n      topRight: void 0,\n      stickyTopCenter: void 0,\n      stickyTopLeft: void 0,\n      stickyTopRight: void 0,\n      stickyBottomCenter: void 0,\n      stickyBottomLeft: void 0,\n      stickyBottomRight: void 0,\n      fakeHScrollComp: void 0,\n      fakeVScrollComp: void 0,\n      gridHeaderCtrl: void 0,\n      centerHeader: void 0,\n      leftHeader: void 0,\n      rightHeader: void 0\n    };\n    this.ready = false;\n    this.readyCallbacks = [];\n    this.runReadyCallbacksAsync = false;\n  }\n  wireBeans(beans) {\n    this.runReadyCallbacksAsync = beans.frameworkOverrides.runWhenReadyAsync?.() ?? false;\n  }\n  postConstruct() {\n    this.addEventListener(\n      \"ready\",\n      () => {\n        this.updateReady();\n        if (this.ready) {\n          this.readyCallbacks.forEach((c) => c(this.params));\n          this.readyCallbacks.length = 0;\n        }\n      },\n      this.runReadyCallbacksAsync\n    );\n  }\n  updateReady() {\n    this.ready = Object.values(this.params).every((ctrl) => {\n      return ctrl?.isAlive() ?? false;\n    });\n  }\n  whenReady(caller, callback) {\n    if (this.ready) {\n      callback(this.params);\n    } else {\n      this.readyCallbacks.push(callback);\n    }\n    caller.addDestroyFunc(() => {\n      const index = this.readyCallbacks.indexOf(callback);\n      if (index >= 0) {\n        this.readyCallbacks.splice(index, 1);\n      }\n    });\n  }\n  register(ctrlType, ctrl) {\n    this.params[ctrlType] = ctrl;\n    this.updateReady();\n    if (this.ready) {\n      this.dispatchLocalEvent({ type: \"ready\" });\n    }\n    ctrl.addDestroyFunc(() => {\n      this.updateReady();\n    });\n  }\n  get(ctrlType) {\n    return this.params[ctrlType];\n  }\n  getGridBodyCtrl() {\n    return this.params.gridBodyCtrl;\n  }\n  getHeaderRowContainerCtrls() {\n    const { leftHeader, centerHeader, rightHeader } = this.params;\n    return [leftHeader, rightHeader, centerHeader];\n  }\n  getHeaderRowContainerCtrl(pinned) {\n    const params = this.params;\n    switch (pinned) {\n      case \"left\":\n        return params.leftHeader;\n      case \"right\":\n        return params.rightHeader;\n      default:\n        return params.centerHeader;\n    }\n  }\n};\n\n// community-modules/core/src/entities/cellPositionUtils.ts\nvar CellPositionUtils = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"cellPositionUtils\";\n  }\n  createId(cellPosition) {\n    const { rowIndex, rowPinned, column } = cellPosition;\n    return this.createIdFromValues({ rowIndex, column, rowPinned });\n  }\n  createIdFromValues(cellPosition) {\n    const { rowIndex, rowPinned, column } = cellPosition;\n    return `${rowIndex}.${rowPinned == null ? \"null\" : rowPinned}.${column.getId()}`;\n  }\n  equals(cellA, cellB) {\n    const colsMatch = cellA.column === cellB.column;\n    const floatingMatch = cellA.rowPinned === cellB.rowPinned;\n    const indexMatch = cellA.rowIndex === cellB.rowIndex;\n    return colsMatch && floatingMatch && indexMatch;\n  }\n};\n\n// community-modules/core/src/entities/rowNodeEventThrottle.ts\nvar RowNodeEventThrottle = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowNodeEventThrottle\";\n    this.events = [];\n  }\n  wireBeans(beans) {\n    this.animationFrameService = beans.animationFrameService;\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    if (_isClientSideRowModel(this.gos)) {\n      this.clientSideRowModel = this.rowModel;\n    }\n  }\n  // because the user can call rowNode.setExpanded() many times in one VM turn,\n  // we throttle the calls to ClientSideRowModel using animationFrameService. this means for 100\n  // row nodes getting expanded, we only update the CSRM once, and then we fire all events after\n  // CSRM has updated.\n  //\n  // if we did not do this, then the user could call setExpanded on 100+ rows, causing the grid\n  // to re-render 100+ times, which would be a performance lag.\n  //\n  // we use animationFrameService\n  // rather than debounce() so this will get done if anyone flushes the animationFrameService\n  // (eg user calls api.ensureRowVisible(), which in turn flushes ).\n  dispatchExpanded(event, forceSync) {\n    if (this.clientSideRowModel == null) {\n      this.eventService.dispatchEvent(event);\n      return;\n    }\n    this.events.push(event);\n    const func = () => {\n      if (this.clientSideRowModel) {\n        this.clientSideRowModel.onRowGroupOpened();\n      }\n      this.events.forEach((e) => this.eventService.dispatchEvent(e));\n      this.events = [];\n    };\n    if (forceSync) {\n      func();\n    } else {\n      if (this.dispatchExpandedDebounced == null) {\n        this.dispatchExpandedDebounced = this.animationFrameService.debounce(func);\n      }\n      this.dispatchExpandedDebounced();\n    }\n  }\n};\n\n// community-modules/core/src/entities/rowPositionUtils.ts\nvar RowPositionUtils = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowPositionUtils\";\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.pageBoundsService = beans.pageBoundsService;\n  }\n  getFirstRow() {\n    let rowIndex = 0;\n    let rowPinned;\n    if (this.pinnedRowModel.getPinnedTopRowCount()) {\n      rowPinned = \"top\";\n    } else if (this.rowModel.getRowCount()) {\n      rowPinned = null;\n      rowIndex = this.pageBoundsService.getFirstRow();\n    } else if (this.pinnedRowModel.getPinnedBottomRowCount()) {\n      rowPinned = \"bottom\";\n    }\n    return rowPinned === void 0 ? null : { rowIndex, rowPinned };\n  }\n  getLastRow() {\n    let rowIndex;\n    let rowPinned = null;\n    const pinnedBottomCount = this.pinnedRowModel.getPinnedBottomRowCount();\n    const pinnedTopCount = this.pinnedRowModel.getPinnedTopRowCount();\n    if (pinnedBottomCount) {\n      rowPinned = \"bottom\";\n      rowIndex = pinnedBottomCount - 1;\n    } else if (this.rowModel.getRowCount()) {\n      rowPinned = null;\n      rowIndex = this.pageBoundsService.getLastRow();\n    } else if (pinnedTopCount) {\n      rowPinned = \"top\";\n      rowIndex = pinnedTopCount - 1;\n    }\n    return rowIndex === void 0 ? null : { rowIndex, rowPinned };\n  }\n  getRowNode(gridRow) {\n    switch (gridRow.rowPinned) {\n      case \"top\":\n        return this.pinnedRowModel.getPinnedTopRow(gridRow.rowIndex);\n      case \"bottom\":\n        return this.pinnedRowModel.getPinnedBottomRow(gridRow.rowIndex);\n      default:\n        return this.rowModel.getRow(gridRow.rowIndex);\n    }\n  }\n  sameRow(rowA, rowB) {\n    if (!rowA && !rowB) {\n      return true;\n    }\n    if (rowA && !rowB || !rowA && rowB) {\n      return false;\n    }\n    return rowA.rowIndex === rowB.rowIndex && rowA.rowPinned == rowB.rowPinned;\n  }\n  // tests if this row selection is before the other row selection\n  before(rowA, rowB) {\n    switch (rowA.rowPinned) {\n      case \"top\":\n        if (rowB.rowPinned !== \"top\") {\n          return true;\n        }\n        break;\n      case \"bottom\":\n        if (rowB.rowPinned !== \"bottom\") {\n          return false;\n        }\n        break;\n      default:\n        if (_exists(rowB.rowPinned)) {\n          return rowB.rowPinned !== \"top\";\n        }\n        break;\n    }\n    return rowA.rowIndex < rowB.rowIndex;\n  }\n};\n\n// community-modules/core/src/environment.ts\nvar ROW_HEIGHT = {\n  cssName: \"--ag-row-height\",\n  changeKey: \"rowHeightChanged\",\n  defaultValue: 42\n};\nvar HEADER_HEIGHT = {\n  cssName: \"--ag-header-height\",\n  changeKey: \"headerHeightChanged\",\n  defaultValue: 48\n};\nvar LIST_ITEM_HEIGHT = {\n  cssName: \"--ag-list-item-height\",\n  changeKey: \"listItemHeightChanged\",\n  defaultValue: 24\n};\nvar Environment = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"environment\";\n    this.sizeEls = /* @__PURE__ */ new Map();\n    this.lastKnownValues = /* @__PURE__ */ new Map();\n    this.ancestorThemeClasses = [];\n    this.sizesMeasured = false;\n    this.gridTheme = null;\n  }\n  wireBeans(beans) {\n    this.resizeObserverService = beans.resizeObserverService;\n    this.eGridDiv = beans.eGridDiv;\n  }\n  postConstruct() {\n    this.addManagedPropertyListener(\"theme\", () => this.handleThemeGridOptionChange());\n    this.handleThemeGridOptionChange();\n    this.addDestroyFunc(() => this.stopUsingTheme());\n    this.addManagedPropertyListener(\"rowHeight\", () => this.refreshRowHeightVariable());\n    this.ancestorThemeClasses = this.readAncestorThemeClasses();\n    this.setUpThemeClassObservers();\n    this.getSizeEl(ROW_HEIGHT);\n    this.getSizeEl(HEADER_HEIGHT);\n    this.getSizeEl(LIST_ITEM_HEIGHT);\n  }\n  getDefaultRowHeight() {\n    return this.getCSSVariablePixelValue(ROW_HEIGHT);\n  }\n  getDefaultHeaderHeight() {\n    return this.getCSSVariablePixelValue(HEADER_HEIGHT);\n  }\n  getDefaultColumnMinWidth() {\n    return Math.min(36, this.getDefaultRowHeight());\n  }\n  getDefaultListItemHeight() {\n    return this.getCSSVariablePixelValue(LIST_ITEM_HEIGHT);\n  }\n  hasMeasuredSizes() {\n    return this.sizesMeasured;\n  }\n  getGridThemeClass() {\n    return this.gridTheme?.getCssClass() || null;\n  }\n  getThemeClasses() {\n    return this.gridTheme ? [this.gridTheme.getCssClass()] : this.ancestorThemeClasses;\n  }\n  applyThemeClasses(el) {\n    const themeClasses = this.getThemeClasses();\n    for (const className of Array.from(el.classList)) {\n      if (className.startsWith(\"ag-theme-\") && !themeClasses.includes(className)) {\n        el.classList.remove(className);\n      }\n    }\n    el.classList.add(...themeClasses);\n  }\n  refreshRowHeightVariable() {\n    const oldRowHeight = this.eGridDiv.style.getPropertyValue(\"--ag-line-height\").trim();\n    const height = this.gos.get(\"rowHeight\");\n    if (height == null || isNaN(height) || !isFinite(height)) {\n      if (oldRowHeight !== null) {\n        this.eGridDiv.style.setProperty(\"--ag-line-height\", null);\n      }\n      return -1;\n    }\n    const newRowHeight = `${height}px`;\n    if (oldRowHeight != newRowHeight) {\n      this.eGridDiv.style.setProperty(\"--ag-line-height\", newRowHeight);\n      return height;\n    }\n    return oldRowHeight != \"\" ? parseFloat(oldRowHeight) : -1;\n  }\n  getCSSVariablePixelValue(variable) {\n    const cached = this.lastKnownValues.get(variable);\n    if (cached != null) {\n      return cached;\n    }\n    const measurement = this.measureSizeEl(variable);\n    if (measurement === \"detached\" || measurement === \"no-styles\") {\n      return variable.defaultValue;\n    }\n    this.lastKnownValues.set(variable, measurement);\n    return measurement;\n  }\n  measureSizeEl(variable) {\n    const sizeEl = this.getSizeEl(variable);\n    if (sizeEl.offsetParent == null) {\n      return \"detached\";\n    }\n    const newSize = sizeEl.offsetWidth;\n    if (newSize === NO_VALUE_SENTINEL)\n      return \"no-styles\";\n    this.sizesMeasured = true;\n    return newSize;\n  }\n  getSizeEl(variable) {\n    let sizeEl = this.sizeEls.get(variable);\n    if (sizeEl) {\n      return sizeEl;\n    }\n    let container = this.eMeasurementContainer;\n    if (!container) {\n      container = this.eMeasurementContainer = document.createElement(\"div\");\n      container.className = \"ag-measurement-container\";\n      if (this.gos.get(\"theme\")) {\n        this.applyThemeClasses(container);\n      }\n      this.eGridDiv.appendChild(container);\n    }\n    sizeEl = document.createElement(\"div\");\n    sizeEl.style.width = `var(${variable.cssName}, ${NO_VALUE_SENTINEL}px)`;\n    container.appendChild(sizeEl);\n    this.sizeEls.set(variable, sizeEl);\n    let lastMeasurement = this.measureSizeEl(variable);\n    if (lastMeasurement === \"no-styles\") {\n      _warnOnce(\n        `no value for ${variable.cssName}. This usually means that the grid has been initialised before styles have been loaded. The default value of ${variable.defaultValue} will be used and updated when styles load.`\n      );\n    }\n    const unsubscribe = this.resizeObserverService.observeResize(sizeEl, () => {\n      const newMeasurement = this.measureSizeEl(variable);\n      if (newMeasurement === \"detached\" || newMeasurement === \"no-styles\") {\n        return;\n      }\n      this.lastKnownValues.set(variable, newMeasurement);\n      if (newMeasurement !== lastMeasurement) {\n        lastMeasurement = newMeasurement;\n        this.fireGridStylesChangedEvent(variable.changeKey);\n      }\n    });\n    this.addDestroyFunc(() => unsubscribe());\n    return sizeEl;\n  }\n  fireGridStylesChangedEvent(change) {\n    this.eventService.dispatchEvent({\n      type: \"gridStylesChanged\",\n      [change]: true\n    });\n  }\n  setUpThemeClassObservers() {\n    const observer = new MutationObserver(() => {\n      const newThemeClasses = this.readAncestorThemeClasses();\n      if (!arraysEqual(newThemeClasses, this.ancestorThemeClasses)) {\n        this.ancestorThemeClasses = newThemeClasses;\n        this.fireGridStylesChangedEvent(\"themeChanged\");\n      }\n    });\n    let node = this.eGridDiv;\n    while (node) {\n      observer.observe(node || this.eGridDiv, {\n        attributes: true,\n        attributeFilter: [\"class\"]\n      });\n      node = node.parentElement;\n    }\n    this.addDestroyFunc(() => observer.disconnect());\n  }\n  readAncestorThemeClasses() {\n    let el = this.eGridDiv;\n    const allThemeClasses = [];\n    while (el) {\n      const themeClasses = Array.from(el.classList).filter((c) => c.startsWith(\"ag-theme-\"));\n      for (const themeClass of themeClasses) {\n        if (!allThemeClasses.includes(themeClass)) {\n          allThemeClasses.unshift(themeClass);\n        }\n      }\n      el = el.parentElement;\n    }\n    return Object.freeze(allThemeClasses);\n  }\n  handleThemeGridOptionChange() {\n    const { gos, eMeasurementContainer, gridTheme: oldGridTheme } = this;\n    const newGridTheme = gos.get(\"theme\") || null;\n    if (newGridTheme !== oldGridTheme) {\n      oldGridTheme?.stopUse();\n      this.gridTheme = newGridTheme;\n      newGridTheme?.startUse({\n        loadThemeGoogleFonts: gos.get(\"loadThemeGoogleFonts\"),\n        container: this.eGridDiv\n      });\n      if (eMeasurementContainer) {\n        this.applyThemeClasses(eMeasurementContainer);\n      }\n      this.fireGridStylesChangedEvent(\"themeChanged\");\n    }\n  }\n  stopUsingTheme() {\n    this.gridTheme?.stopUse();\n    this.gridTheme = null;\n  }\n};\nvar arraysEqual = (a, b) => a.length === b.length && a.findIndex((_, i) => a[i] !== b[i]) === -1;\nvar NO_VALUE_SENTINEL = 15538;\n\n// community-modules/core/src/eventService.ts\nvar EventService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"eventService\";\n    this.globalEventService = new LocalEventService();\n  }\n  wireBeans(beans) {\n    this.globalEventListener = beans.globalEventListener;\n    this.globalSyncEventListener = beans.globalSyncEventListener;\n  }\n  postConstruct() {\n    if (this.globalEventListener) {\n      const async = _useAsyncEvents(this.gos);\n      this.addGlobalListener(this.globalEventListener, async);\n    }\n    if (this.globalSyncEventListener) {\n      this.addGlobalListener(this.globalSyncEventListener, false);\n    }\n  }\n  addEventListener(eventType, listener, async) {\n    this.globalEventService.addEventListener(eventType, listener, async);\n  }\n  removeEventListener(eventType, listener, async) {\n    this.globalEventService.removeEventListener(eventType, listener, async);\n  }\n  addGlobalListener(listener, async = false) {\n    this.globalEventService.addGlobalListener(listener, async);\n  }\n  removeGlobalListener(listener, async = false) {\n    this.globalEventService.removeGlobalListener(listener, async);\n  }\n  /** @deprecated DO NOT FIRE LOCAL EVENTS OFF THE EVENT SERVICE */\n  dispatchLocalEvent() {\n  }\n  dispatchEvent(event) {\n    this.globalEventService.dispatchEvent(this.gos.addGridCommonParams(event));\n  }\n  dispatchEventOnce(event) {\n    this.globalEventService.dispatchEventOnce(this.gos.addGridCommonParams(event));\n  }\n};\n\n// community-modules/core/src/focusService.ts\nvar _FocusService = class _FocusService extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"focusService\";\n  }\n  wireBeans(beans) {\n    this.eGridDiv = beans.eGridDiv;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.headerNavigationService = beans.headerNavigationService;\n    this.headerPositionUtils = beans.headerPositionUtils;\n    this.rowRenderer = beans.rowRenderer;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.cellPositionUtils = beans.cellPositionUtils;\n    this.navigationService = beans.navigationService;\n    this.ctrlsService = beans.ctrlsService;\n    this.filterManager = beans.filterManager;\n    this.rangeService = beans.rangeService;\n    this.advancedFilterService = beans.advancedFilterService;\n    this.overlayService = beans.overlayService;\n  }\n  static addKeyboardModeEvents(doc) {\n    if (this.instanceCount > 0) {\n      return;\n    }\n    doc.addEventListener(\"keydown\", _FocusService.toggleKeyboardMode);\n    doc.addEventListener(\"mousedown\", _FocusService.toggleKeyboardMode);\n  }\n  static removeKeyboardModeEvents(doc) {\n    if (this.instanceCount > 0)\n      return;\n    doc.removeEventListener(\"keydown\", _FocusService.toggleKeyboardMode);\n    doc.removeEventListener(\"mousedown\", _FocusService.toggleKeyboardMode);\n  }\n  static toggleKeyboardMode(event) {\n    const isKeyboardActive = _FocusService.keyboardModeActive;\n    const isKeyboardEvent = event.type === \"keydown\";\n    if (isKeyboardEvent) {\n      if (event.ctrlKey || event.metaKey || event.altKey) {\n        return;\n      }\n    }\n    if (isKeyboardActive === isKeyboardEvent) {\n      return;\n    }\n    _FocusService.keyboardModeActive = isKeyboardEvent;\n  }\n  postConstruct() {\n    const clearFocusedCellListener = this.clearFocusedCell.bind(this);\n    this.addManagedEventListeners({\n      columnPivotModeChanged: clearFocusedCellListener,\n      newColumnsLoaded: this.onColumnEverythingChanged.bind(this),\n      columnGroupOpened: clearFocusedCellListener,\n      columnRowGroupChanged: clearFocusedCellListener\n    });\n    this.registerKeyboardFocusEvents();\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridCtrl = p.gridCtrl;\n    });\n  }\n  registerKeyboardFocusEvents() {\n    const eDocument = _getDocument(this.gos);\n    _FocusService.addKeyboardModeEvents(eDocument);\n    _FocusService.instanceCount++;\n    this.addDestroyFunc(() => {\n      _FocusService.instanceCount--;\n      _FocusService.removeKeyboardModeEvents(eDocument);\n    });\n  }\n  onColumnEverythingChanged() {\n    if (!this.focusedCellPosition) {\n      return;\n    }\n    const col = this.focusedCellPosition.column;\n    const colFromColumnModel = this.columnModel.getCol(col.getId());\n    if (col !== colFromColumnModel) {\n      this.clearFocusedCell();\n    }\n  }\n  isKeyboardMode() {\n    return _FocusService.keyboardModeActive;\n  }\n  // we check if the browser is focusing something, and if it is, and\n  // it's the cell we think is focused, then return the cell. so this\n  // methods returns the cell if a) we think it has focus and b) the\n  // browser thinks it has focus. this then returns nothing if we\n  // first focus a cell, then second click outside the grid, as then the\n  // grid cell will still be focused as far as the grid is concerned,\n  // however the browser focus will have moved somewhere else.\n  getFocusCellToUseAfterRefresh() {\n    if (this.gos.get(\"suppressFocusAfterRefresh\") || !this.focusedCellPosition) {\n      return null;\n    }\n    if (this.isDomDataMissingInHierarchy(_getActiveDomElement(this.gos), RowCtrl.DOM_DATA_KEY_ROW_CTRL)) {\n      return null;\n    }\n    return this.focusedCellPosition;\n  }\n  getFocusHeaderToUseAfterRefresh() {\n    if (this.gos.get(\"suppressFocusAfterRefresh\") || !this.focusedHeaderPosition) {\n      return null;\n    }\n    if (this.isDomDataMissingInHierarchy(\n      _getActiveDomElement(this.gos),\n      AbstractHeaderCellCtrl.DOM_DATA_KEY_HEADER_CTRL\n    )) {\n      return null;\n    }\n    return this.focusedHeaderPosition;\n  }\n  isDomDataMissingInHierarchy(eBrowserCell, key) {\n    let ePointer = eBrowserCell;\n    while (ePointer) {\n      const data = _getDomData(this.gos, ePointer, key);\n      if (data) {\n        return false;\n      }\n      ePointer = ePointer.parentNode;\n    }\n    return true;\n  }\n  getFocusedCell() {\n    return this.focusedCellPosition;\n  }\n  shouldRestoreFocus(cell) {\n    if (this.isCellRestoreFocused(cell)) {\n      setTimeout(() => {\n        this.restoredFocusedCellPosition = null;\n      }, 0);\n      return true;\n    }\n    return false;\n  }\n  clearRestoreFocus() {\n    this.restoredFocusedCellPosition = null;\n    this.awaitRestoreFocusedCell = false;\n  }\n  restoreFocusedCell(cellPosition, setFocusCallback) {\n    this.awaitRestoreFocusedCell = true;\n    setTimeout(() => {\n      if (!this.awaitRestoreFocusedCell) {\n        return;\n      }\n      this.setRestoreFocusedCell(cellPosition);\n      setFocusCallback();\n    });\n  }\n  isCellRestoreFocused(cellPosition) {\n    if (this.restoredFocusedCellPosition == null) {\n      return false;\n    }\n    return this.cellPositionUtils.equals(cellPosition, this.restoredFocusedCellPosition);\n  }\n  setRestoreFocusedCell(cellPosition) {\n    if (this.getFrameworkOverrides().renderingEngine === \"react\") {\n      this.restoredFocusedCellPosition = cellPosition;\n    }\n  }\n  getFocusEventParams(focusedCellPosition) {\n    const { rowIndex, rowPinned, column } = focusedCellPosition;\n    const params = {\n      rowIndex,\n      rowPinned,\n      column,\n      isFullWidthCell: false\n    };\n    const rowCtrl = this.rowRenderer.getRowByPosition({ rowIndex, rowPinned });\n    if (rowCtrl) {\n      params.isFullWidthCell = rowCtrl.isFullWidth();\n    }\n    return params;\n  }\n  clearFocusedCell() {\n    this.restoredFocusedCellPosition = null;\n    if (this.focusedCellPosition == null) {\n      return;\n    }\n    const focusEventParams = this.getFocusEventParams(this.focusedCellPosition);\n    this.focusedCellPosition = null;\n    this.eventService.dispatchEvent({\n      type: \"cellFocusCleared\",\n      ...focusEventParams\n    });\n  }\n  setFocusedCell(params) {\n    const { column, rowIndex, rowPinned, forceBrowserFocus = false, preventScrollOnBrowserFocus = false } = params;\n    const gridColumn = this.columnModel.getCol(column);\n    if (!gridColumn) {\n      this.focusedCellPosition = null;\n      return;\n    }\n    this.focusedCellPosition = {\n      rowIndex,\n      rowPinned: _makeNull(rowPinned),\n      column: gridColumn\n    };\n    this.eventService.dispatchEvent({\n      type: \"cellFocused\",\n      ...this.getFocusEventParams(this.focusedCellPosition),\n      forceBrowserFocus,\n      preventScrollOnBrowserFocus\n    });\n  }\n  isCellFocused(cellPosition) {\n    if (this.focusedCellPosition == null) {\n      return false;\n    }\n    return this.cellPositionUtils.equals(cellPosition, this.focusedCellPosition);\n  }\n  isRowNodeFocused(rowNode) {\n    return this.isRowFocused(rowNode.rowIndex, rowNode.rowPinned);\n  }\n  isHeaderWrapperFocused(headerCtrl) {\n    if (this.focusedHeaderPosition == null) {\n      return false;\n    }\n    const column = headerCtrl.getColumnGroupChild();\n    const headerRowIndex = headerCtrl.getRowIndex();\n    const pinned = headerCtrl.getPinned();\n    const { column: focusedColumn, headerRowIndex: focusedHeaderRowIndex } = this.focusedHeaderPosition;\n    return column === focusedColumn && headerRowIndex === focusedHeaderRowIndex && pinned == focusedColumn.getPinned();\n  }\n  clearFocusedHeader() {\n    this.focusedHeaderPosition = null;\n  }\n  getFocusedHeader() {\n    return this.focusedHeaderPosition;\n  }\n  setFocusedHeader(headerRowIndex, column) {\n    this.focusedHeaderPosition = { headerRowIndex, column };\n  }\n  isHeaderFocusSuppressed() {\n    return this.gos.get(\"suppressHeaderFocus\") || this.overlayService.isExclusive();\n  }\n  isCellFocusSuppressed() {\n    return this.gos.get(\"suppressCellFocus\") || this.overlayService.isExclusive();\n  }\n  focusHeaderPosition(params) {\n    if (this.isHeaderFocusSuppressed()) {\n      return false;\n    }\n    const { direction, fromTab, allowUserOverride, event, fromCell, rowWithoutSpanValue } = params;\n    let { headerPosition } = params;\n    if (fromCell && this.filterManager?.isAdvancedFilterHeaderActive()) {\n      return this.focusAdvancedFilter(headerPosition);\n    }\n    if (allowUserOverride) {\n      const currentPosition = this.getFocusedHeader();\n      const headerRowCount = this.headerNavigationService.getHeaderRowCount();\n      if (fromTab) {\n        const userFunc = this.gos.getCallback(\"tabToNextHeader\");\n        if (userFunc) {\n          headerPosition = this.getHeaderPositionFromUserFunc({\n            userFunc,\n            direction,\n            currentPosition,\n            headerPosition,\n            headerRowCount\n          });\n        }\n      } else {\n        const userFunc = this.gos.getCallback(\"navigateToNextHeader\");\n        if (userFunc && event) {\n          const params2 = {\n            key: event.key,\n            previousHeaderPosition: currentPosition,\n            nextHeaderPosition: headerPosition,\n            headerRowCount,\n            event\n          };\n          headerPosition = userFunc(params2);\n        }\n      }\n    }\n    if (!headerPosition) {\n      return false;\n    }\n    return this.focusProvidedHeaderPosition({\n      headerPosition,\n      direction,\n      event,\n      fromCell,\n      rowWithoutSpanValue\n    });\n  }\n  focusHeaderPositionFromUserFunc(params) {\n    if (this.isHeaderFocusSuppressed()) {\n      return false;\n    }\n    const { userFunc, headerPosition, direction, event } = params;\n    const currentPosition = this.getFocusedHeader();\n    const headerRowCount = this.headerNavigationService.getHeaderRowCount();\n    const newHeaderPosition = this.getHeaderPositionFromUserFunc({\n      userFunc,\n      direction,\n      currentPosition,\n      headerPosition,\n      headerRowCount\n    });\n    return !!newHeaderPosition && this.focusProvidedHeaderPosition({\n      headerPosition: newHeaderPosition,\n      direction,\n      event\n    });\n  }\n  getHeaderPositionFromUserFunc(params) {\n    const { userFunc, direction, currentPosition, headerPosition, headerRowCount } = params;\n    const userFuncParams = {\n      backwards: direction === \"Before\",\n      previousHeaderPosition: currentPosition,\n      nextHeaderPosition: headerPosition,\n      headerRowCount\n    };\n    const userResult = userFunc(userFuncParams);\n    if (userResult === true || userResult === null) {\n      if (userResult === null) {\n        _warnOnce(\n          \"Since v31.3 Returning `null` from tabToNextHeader is deprecated. Return `true` to stay on the current header, or `false` to let the browser handle the tab behaviour.\"\n        );\n      }\n      return currentPosition;\n    }\n    if (userResult === false) {\n      return null;\n    }\n    return userResult;\n  }\n  focusProvidedHeaderPosition(params) {\n    const { headerPosition, direction, fromCell, rowWithoutSpanValue, event } = params;\n    const { column, headerRowIndex } = headerPosition;\n    if (headerRowIndex === -1) {\n      if (this.filterManager?.isAdvancedFilterHeaderActive()) {\n        return this.focusAdvancedFilter(headerPosition);\n      }\n      return this.focusGridView(column);\n    }\n    this.headerNavigationService.scrollToColumn(column, direction);\n    const headerRowContainerCtrl = this.ctrlsService.getHeaderRowContainerCtrl(column.getPinned());\n    const focusSuccess = headerRowContainerCtrl?.focusHeader(headerPosition.headerRowIndex, column, event) || false;\n    if (focusSuccess && (rowWithoutSpanValue != null || fromCell)) {\n      this.headerNavigationService.setCurrentHeaderRowWithoutSpan(rowWithoutSpanValue ?? -1);\n    }\n    return focusSuccess;\n  }\n  focusFirstHeader() {\n    if (this.overlayService.isExclusive() && this.focusOverlay()) {\n      return true;\n    }\n    let firstColumn = this.visibleColsService.getAllCols()[0];\n    if (!firstColumn) {\n      return false;\n    }\n    if (firstColumn.getParent()) {\n      firstColumn = this.visibleColsService.getColGroupAtLevel(firstColumn, 0);\n    }\n    const headerPosition = this.headerPositionUtils.getHeaderIndexToFocus(firstColumn, 0);\n    return this.focusHeaderPosition({\n      headerPosition,\n      rowWithoutSpanValue: 0\n    });\n  }\n  focusLastHeader(event) {\n    if (this.overlayService.isExclusive() && this.focusOverlay(true)) {\n      return true;\n    }\n    const headerRowIndex = this.headerNavigationService.getHeaderRowCount() - 1;\n    const column = _last(this.visibleColsService.getAllCols());\n    return this.focusHeaderPosition({\n      headerPosition: { headerRowIndex, column },\n      rowWithoutSpanValue: -1,\n      event\n    });\n  }\n  focusPreviousFromFirstCell(event) {\n    if (this.filterManager?.isAdvancedFilterHeaderActive()) {\n      return this.focusAdvancedFilter(null);\n    }\n    return this.focusLastHeader(event);\n  }\n  isAnyCellFocused() {\n    return !!this.focusedCellPosition;\n  }\n  isRowFocused(rowIndex, rowPinnedType) {\n    if (this.focusedCellPosition == null) {\n      return false;\n    }\n    return this.focusedCellPosition.rowIndex === rowIndex && this.focusedCellPosition.rowPinned === _makeNull(rowPinnedType);\n  }\n  findFocusableElements(rootNode, exclude, onlyUnmanaged = false) {\n    const focusableString = FOCUSABLE_SELECTOR;\n    let excludeString = FOCUSABLE_EXCLUDE;\n    if (exclude) {\n      excludeString += \", \" + exclude;\n    }\n    if (onlyUnmanaged) {\n      excludeString += ', [tabindex=\"-1\"]';\n    }\n    const nodes = Array.prototype.slice.apply(rootNode.querySelectorAll(focusableString)).filter((node) => {\n      return _isVisible(node);\n    });\n    const excludeNodes = Array.prototype.slice.apply(rootNode.querySelectorAll(excludeString));\n    if (!excludeNodes.length) {\n      return nodes;\n    }\n    const diff = (a, b) => a.filter((element) => b.indexOf(element) === -1);\n    return diff(nodes, excludeNodes);\n  }\n  focusInto(rootNode, up = false, onlyUnmanaged = false) {\n    const focusableElements = this.findFocusableElements(rootNode, null, onlyUnmanaged);\n    const toFocus = up ? _last(focusableElements) : focusableElements[0];\n    if (toFocus) {\n      toFocus.focus({ preventScroll: true });\n      return true;\n    }\n    return false;\n  }\n  findFocusableElementBeforeTabGuard(rootNode, referenceElement) {\n    if (!referenceElement) {\n      return null;\n    }\n    const focusableElements = this.findFocusableElements(rootNode);\n    const referenceIndex = focusableElements.indexOf(referenceElement);\n    if (referenceIndex === -1) {\n      return null;\n    }\n    let lastTabGuardIndex = -1;\n    for (let i = referenceIndex - 1; i >= 0; i--) {\n      if (focusableElements[i].classList.contains(\"ag-tab-guard-top\" /* TAB_GUARD_TOP */)) {\n        lastTabGuardIndex = i;\n        break;\n      }\n    }\n    if (lastTabGuardIndex <= 0) {\n      return null;\n    }\n    return focusableElements[lastTabGuardIndex - 1];\n  }\n  findNextFocusableElement(rootNode = this.eGridDiv, onlyManaged, backwards) {\n    const focusable = this.findFocusableElements(rootNode, onlyManaged ? ':not([tabindex=\"-1\"])' : null);\n    const activeEl = _getActiveDomElement(this.gos);\n    let currentIndex;\n    if (onlyManaged) {\n      currentIndex = focusable.findIndex((el) => el.contains(activeEl));\n    } else {\n      currentIndex = focusable.indexOf(activeEl);\n    }\n    const nextIndex = currentIndex + (backwards ? -1 : 1);\n    if (nextIndex < 0 || nextIndex >= focusable.length) {\n      return null;\n    }\n    return focusable[nextIndex];\n  }\n  isTargetUnderManagedComponent(rootNode, target) {\n    if (!target) {\n      return false;\n    }\n    const managedContainers = rootNode.querySelectorAll(`.${ManagedFocusFeature.FOCUS_MANAGED_CLASS}`);\n    if (!managedContainers.length) {\n      return false;\n    }\n    for (let i = 0; i < managedContainers.length; i++) {\n      if (managedContainers[i].contains(target)) {\n        return true;\n      }\n    }\n    return false;\n  }\n  findTabbableParent(node, limit = 5) {\n    let counter = 0;\n    while (node && _getTabIndex(node) === null && ++counter <= limit) {\n      node = node.parentElement;\n    }\n    if (_getTabIndex(node) === null) {\n      return null;\n    }\n    return node;\n  }\n  focusOverlay(backwards) {\n    const overlayGui = this.overlayService.isVisible() && this.overlayService.getOverlayWrapper()?.getGui();\n    return !!overlayGui && this.focusInto(overlayGui, backwards);\n  }\n  focusGridViewFailed(backwards, canFocusOverlay) {\n    const overlayFocused = canFocusOverlay && this.focusOverlay(backwards);\n    return overlayFocused || backwards && this.focusLastHeader();\n  }\n  focusGridView(column, backwards = false, canFocusOverlay = true) {\n    if (this.overlayService.isExclusive()) {\n      return canFocusOverlay && this.focusOverlay(backwards);\n    }\n    if (this.isCellFocusSuppressed()) {\n      if (backwards) {\n        if (!this.isHeaderFocusSuppressed()) {\n          return this.focusLastHeader();\n        }\n      }\n      if (canFocusOverlay && this.focusOverlay(backwards)) {\n        return true;\n      }\n      return this.focusNextGridCoreContainer(false);\n    }\n    const nextRow = backwards ? this.rowPositionUtils.getLastRow() : this.rowPositionUtils.getFirstRow();\n    if (nextRow) {\n      const { rowIndex, rowPinned } = nextRow;\n      column ?? (column = this.getFocusedHeader()?.column);\n      if (column && rowIndex !== void 0 && rowIndex !== null) {\n        this.navigationService.ensureCellVisible({ rowIndex, column, rowPinned });\n        if (backwards) {\n          const rowCtrl = this.rowRenderer.getRowByPosition(nextRow);\n          if (rowCtrl?.isFullWidth() && this.navigationService.tryToFocusFullWidthRow(nextRow, backwards)) {\n            return true;\n          }\n        }\n        this.setFocusedCell({\n          rowIndex,\n          column,\n          rowPinned: _makeNull(rowPinned),\n          forceBrowserFocus: true\n        });\n        this.rangeService?.setRangeToCell({ rowIndex, rowPinned, column });\n        return true;\n      }\n    }\n    if (canFocusOverlay && this.focusOverlay(backwards)) {\n      return true;\n    }\n    if (backwards && this.focusLastHeader()) {\n      return true;\n    }\n    return false;\n  }\n  /** Returns true if an element inside the grid has focus */\n  isGridFocused() {\n    const activeEl = _getActiveDomElement(this.gos);\n    return !!activeEl && this.eGridDiv.contains(activeEl);\n  }\n  focusNextGridCoreContainer(backwards, forceOut = false) {\n    if (!forceOut && this.gridCtrl.focusNextInnerContainer(backwards)) {\n      return true;\n    }\n    if (forceOut || !backwards && !this.gridCtrl.isDetailGrid()) {\n      this.gridCtrl.forceFocusOutOfContainer(backwards);\n    }\n    return false;\n  }\n  focusAdvancedFilter(position) {\n    this.advancedFilterFocusColumn = position?.column;\n    return this.advancedFilterService?.getCtrl().focusHeaderComp() ?? false;\n  }\n  focusNextFromAdvancedFilter(backwards, forceFirstColumn) {\n    const column = (forceFirstColumn ? void 0 : this.advancedFilterFocusColumn) ?? this.visibleColsService.getAllCols()?.[0];\n    if (backwards) {\n      return this.focusHeaderPosition({\n        headerPosition: {\n          column,\n          headerRowIndex: this.headerNavigationService.getHeaderRowCount() - 1\n        }\n      });\n    } else {\n      return this.focusGridView(column);\n    }\n  }\n  clearAdvancedFilterColumn() {\n    this.advancedFilterFocusColumn = void 0;\n  }\n  addFocusableContainer(container) {\n    this.gridCtrl.addFocusableContainer(container);\n  }\n  removeFocusableContainer(container) {\n    this.gridCtrl.removeFocusableContainer(container);\n  }\n  focusGridInnerElement(fromBottom) {\n    return this.gridCtrl.focusInnerElement(fromBottom);\n  }\n  allowFocusForNextGridCoreContainer(up) {\n    this.gridCtrl.allowFocusForNextCoreContainer(up);\n  }\n};\n_FocusService.keyboardModeActive = false;\n_FocusService.instanceCount = 0;\nvar FocusService = _FocusService;\n\n// community-modules/core/src/gridBodyComp/pinnedWidthService.ts\nvar PinnedWidthService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"pinnedWidthService\";\n  }\n  wireBeans(beans) {\n    this.visibleColsService = beans.visibleColsService;\n  }\n  postConstruct() {\n    const listener = this.checkContainerWidths.bind(this);\n    this.addManagedEventListeners({\n      displayedColumnsChanged: listener,\n      displayedColumnsWidthChanged: listener\n    });\n    this.addManagedPropertyListener(\"domLayout\", listener);\n  }\n  checkContainerWidths() {\n    const printLayout = _isDomLayout(this.gos, \"print\");\n    const newLeftWidth = printLayout ? 0 : this.visibleColsService.getColsLeftWidth();\n    const newRightWidth = printLayout ? 0 : this.visibleColsService.getDisplayedColumnsRightWidth();\n    if (newLeftWidth != this.leftWidth) {\n      this.leftWidth = newLeftWidth;\n      this.eventService.dispatchEvent({ type: \"leftPinnedWidthChanged\" });\n    }\n    if (newRightWidth != this.rightWidth) {\n      this.rightWidth = newRightWidth;\n      this.eventService.dispatchEvent({ type: \"rightPinnedWidthChanged\" });\n    }\n  }\n  getPinnedRightWidth() {\n    return this.rightWidth;\n  }\n  getPinnedLeftWidth() {\n    return this.leftWidth;\n  }\n};\n\n// community-modules/core/src/gridComp/gridCtrl.ts\nvar GridCtrl = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.additionalFocusableContainers = /* @__PURE__ */ new Set();\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n    this.focusService = beans.focusService;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  setComp(view, eGridDiv, eGui) {\n    this.view = view;\n    this.eGridHostDiv = eGridDiv;\n    this.eGui = eGui;\n    this.eGui.setAttribute(\"grid-id\", this.beans.context.getGridId());\n    const { dragAndDropService, mouseEventService, ctrlsService, resizeObserverService } = this.beans;\n    const dropTarget = {\n      getContainer: () => this.eGui,\n      isInterestedIn: (type) => type === 1 /* HeaderCell */ || type === 0 /* ToolPanel */,\n      getIconName: () => \"notAllowed\"\n    };\n    dragAndDropService.addDropTarget(dropTarget);\n    this.addDestroyFunc(() => dragAndDropService.removeDropTarget(dropTarget));\n    mouseEventService.stampTopLevelGridCompWithGridInstance(eGridDiv);\n    this.createManagedBean(new LayoutFeature(this.view));\n    this.view.setRtlClass(this.gos.get(\"enableRtl\") ? \"ag-rtl\" : \"ag-ltr\");\n    this.updateGridThemeClass();\n    this.addManagedEventListeners({ gridStylesChanged: this.handleThemeChange.bind(this) });\n    const unsubscribeFromResize = resizeObserverService.observeResize(\n      this.eGridHostDiv,\n      this.onGridSizeChanged.bind(this)\n    );\n    this.addDestroyFunc(() => unsubscribeFromResize());\n    ctrlsService.register(\"gridCtrl\", this);\n  }\n  isDetailGrid() {\n    const el = this.focusService.findTabbableParent(this.getGui());\n    return el?.getAttribute(\"row-id\")?.startsWith(\"detail\") || false;\n  }\n  getOptionalSelectors() {\n    const beans = this.beans;\n    return {\n      paginationSelector: beans.paginationService?.getPaginationSelector(),\n      gridHeaderDropZonesSelector: beans.columnDropZonesService?.getDropZoneSelector(),\n      sideBarSelector: beans.sideBarService?.getSideBarSelector(),\n      statusBarSelector: beans.statusBarService?.getStatusPanelSelector(),\n      watermarkSelector: beans.licenseManager?.getWatermarkSelector()\n    };\n  }\n  onGridSizeChanged() {\n    this.eventService.dispatchEvent({\n      type: \"gridSizeChanged\",\n      clientWidth: this.eGridHostDiv.clientWidth,\n      clientHeight: this.eGridHostDiv.clientHeight\n    });\n  }\n  destroyGridUi() {\n    this.view.destroyGridUi();\n  }\n  getGui() {\n    return this.eGui;\n  }\n  setResizeCursor(on) {\n    this.view.setCursor(on ? \"ew-resize\" : null);\n  }\n  disableUserSelect(on) {\n    this.view.setUserSelect(on ? \"none\" : null);\n  }\n  focusNextInnerContainer(backwards) {\n    const focusableContainers = this.getFocusableContainers();\n    const { indexWithFocus, nextIndex } = this.getNextFocusableIndex(focusableContainers, backwards);\n    if (nextIndex < 0 || nextIndex >= focusableContainers.length) {\n      return false;\n    }\n    if (nextIndex === 0) {\n      if (indexWithFocus > 0) {\n        const allColumns = this.visibleColsService.getAllCols();\n        const lastColumn = _last(allColumns);\n        if (this.focusService.focusGridView(lastColumn, true)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    return this.focusContainer(focusableContainers[nextIndex], backwards);\n  }\n  focusInnerElement(fromBottom) {\n    const userCallbackFunction = this.gos.getCallback(\"focusGridInnerElement\");\n    if (userCallbackFunction && userCallbackFunction({ fromBottom: !!fromBottom })) {\n      return true;\n    }\n    const focusableContainers = this.getFocusableContainers();\n    const allColumns = this.visibleColsService.getAllCols();\n    if (fromBottom) {\n      if (focusableContainers.length > 1) {\n        return this.focusContainer(_last(focusableContainers), true);\n      }\n      const lastColumn = _last(allColumns);\n      if (this.focusService.focusGridView(lastColumn, true)) {\n        return true;\n      }\n    }\n    if (this.gos.get(\"headerHeight\") === 0 || this.focusService.isHeaderFocusSuppressed()) {\n      if (this.focusService.focusGridView(allColumns[0])) {\n        return true;\n      }\n      for (let i = 1; i < focusableContainers.length; i++) {\n        if (this.focusService.focusInto(focusableContainers[i].getGui())) {\n          return true;\n        }\n      }\n      return false;\n    }\n    return this.focusService.focusFirstHeader();\n  }\n  forceFocusOutOfContainer(up = false) {\n    this.view.forceFocusOutOfContainer(up);\n  }\n  addFocusableContainer(container) {\n    this.additionalFocusableContainers.add(container);\n  }\n  removeFocusableContainer(container) {\n    this.additionalFocusableContainers.delete(container);\n  }\n  allowFocusForNextCoreContainer(up) {\n    const coreContainers = this.view.getFocusableContainers();\n    const { nextIndex, indexWithFocus } = this.getNextFocusableIndex(coreContainers, up);\n    if (indexWithFocus === -1 || nextIndex < 0 || nextIndex >= coreContainers.length) {\n      return;\n    }\n    const comp = coreContainers[nextIndex];\n    comp.setAllowFocus?.(true);\n    setTimeout(() => {\n      comp.setAllowFocus?.(false);\n    });\n  }\n  getNextFocusableIndex(focusableContainers, backwards) {\n    const activeEl = _getActiveDomElement(this.gos);\n    const indexWithFocus = focusableContainers.findIndex((container) => container.getGui().contains(activeEl));\n    const nextIndex = indexWithFocus + (backwards ? -1 : 1);\n    return {\n      indexWithFocus,\n      nextIndex\n    };\n  }\n  focusContainer(comp, up) {\n    comp.setAllowFocus?.(true);\n    const result = this.focusService.focusInto(comp.getGui(), up);\n    comp.setAllowFocus?.(false);\n    return result;\n  }\n  getFocusableContainers() {\n    return [...this.view.getFocusableContainers(), ...this.additionalFocusableContainers];\n  }\n  updateGridThemeClass() {\n    const gridThemeClass = this.beans.environment.getGridThemeClass();\n    if (gridThemeClass) {\n      this.view.setGridThemeClass(gridThemeClass);\n    }\n  }\n  handleThemeChange(e) {\n    if (e.themeChanged) {\n      this.updateGridThemeClass();\n    }\n  }\n  destroy() {\n    this.additionalFocusableContainers.clear();\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/gridComp/gridComp.ts\nvar GridComp = class extends TabGuardComp {\n  constructor(eGridDiv) {\n    super();\n    this.gridBody = RefPlaceholder;\n    this.sideBar = RefPlaceholder;\n    this.pagination = RefPlaceholder;\n    this.rootWrapperBody = RefPlaceholder;\n    this.eGridDiv = eGridDiv;\n  }\n  postConstruct() {\n    const compProxy = {\n      destroyGridUi: () => this.destroyBean(this),\n      setRtlClass: (cssClass) => this.addCssClass(cssClass),\n      setGridThemeClass: (cssClass) => this.addCssClass(cssClass),\n      forceFocusOutOfContainer: this.forceFocusOutOfContainer.bind(this),\n      updateLayoutClasses: this.updateLayoutClasses.bind(this),\n      getFocusableContainers: this.getFocusableContainers.bind(this),\n      setUserSelect: (value) => {\n        this.getGui().style.userSelect = value != null ? value : \"\";\n        this.getGui().style.webkitUserSelect = value != null ? value : \"\";\n      },\n      setCursor: (value) => {\n        this.getGui().style.cursor = value != null ? value : \"\";\n      }\n    };\n    const ctrl = this.createManagedBean(new GridCtrl());\n    const comps = ctrl.getOptionalSelectors();\n    const template = this.createTemplate(comps);\n    const requiredComps = [GridBodySelector, ...Object.values(comps).filter((c) => !!c)];\n    this.setTemplate(template, requiredComps);\n    ctrl.setComp(compProxy, this.eGridDiv, this.getGui());\n    this.insertGridIntoDom();\n    this.initialiseTabGuard({\n      // we want to override the default behaviour to do nothing for onTabKeyDown\n      onTabKeyDown: () => void 0,\n      focusInnerElement: (fromBottom) => ctrl.focusInnerElement(fromBottom),\n      forceFocusOutWhenTabGuardsAreEmpty: true\n    });\n  }\n  insertGridIntoDom() {\n    const eGui = this.getGui();\n    this.eGridDiv.appendChild(eGui);\n    this.addDestroyFunc(() => {\n      this.eGridDiv.removeChild(eGui);\n      if (this.gos.get(\"debug\")) {\n        _log(\"Grid removed from DOM\");\n      }\n    });\n  }\n  updateLayoutClasses(cssClass, params) {\n    const eRootWrapperBodyClassList = this.rootWrapperBody.classList;\n    eRootWrapperBodyClassList.toggle(\"ag-layout-auto-height\" /* AUTO_HEIGHT */, params.autoHeight);\n    eRootWrapperBodyClassList.toggle(\"ag-layout-normal\" /* NORMAL */, params.normal);\n    eRootWrapperBodyClassList.toggle(\"ag-layout-print\" /* PRINT */, params.print);\n    this.addOrRemoveCssClass(\"ag-layout-auto-height\" /* AUTO_HEIGHT */, params.autoHeight);\n    this.addOrRemoveCssClass(\"ag-layout-normal\" /* NORMAL */, params.normal);\n    this.addOrRemoveCssClass(\"ag-layout-print\" /* PRINT */, params.print);\n  }\n  createTemplate(params) {\n    const dropZones = params.gridHeaderDropZonesSelector ? \"<ag-grid-header-drop-zones></ag-grid-header-drop-zones>\" : \"\";\n    const sideBar = params.sideBarSelector ? '<ag-side-bar data-ref=\"sideBar\"></ag-side-bar>' : \"\";\n    const statusBar = params.statusBarSelector ? \"<ag-status-bar></ag-status-bar>\" : \"\";\n    const watermark = params.watermarkSelector ? \"<ag-watermark></ag-watermark>\" : \"\";\n    const pagination = params.paginationSelector ? '<ag-pagination data-ref=\"pagination\"></ag-pagination>' : \"\";\n    const template = (\n      /* html */\n      `<div class=\"ag-root-wrapper\" role=\"presentation\">\n                ${dropZones}\n                <div class=\"ag-root-wrapper-body\" data-ref=\"rootWrapperBody\" role=\"presentation\">\n                    <ag-grid-body data-ref=\"gridBody\"></ag-grid-body>\n                    ${sideBar}\n                </div>\n                ${statusBar}\n                ${pagination}\n                ${watermark}\n            </div>`\n    );\n    return template;\n  }\n  getFocusableElement() {\n    return this.rootWrapperBody;\n  }\n  forceFocusOutOfContainer(up = false) {\n    if (!up && this.pagination?.isDisplayed()) {\n      this.pagination.forceFocusOutOfContainer(up);\n      return;\n    }\n    super.forceFocusOutOfContainer(up);\n  }\n  getFocusableContainers() {\n    const focusableContainers = [this.gridBody];\n    [this.sideBar, this.pagination].forEach((comp) => {\n      if (comp) {\n        focusableContainers.push(comp);\n      }\n    });\n    return focusableContainers.filter((el) => _isVisible(el.getGui()));\n  }\n};\n\n// community-modules/core/src/alignedGridsService.ts\nvar AlignedGridsService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"alignedGridsService\";\n    // flag to mark if we are consuming. to avoid cyclic events (ie other grid firing back to master\n    // while processing a master event) we mark this if consuming an event, and if we are, then\n    // we don't fire back any events.\n    this.consuming = false;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnSizeService = beans.columnSizeService;\n    this.ctrlsService = beans.ctrlsService;\n    this.columnApplyStateService = beans.columnApplyStateService;\n  }\n  getAlignedGridApis() {\n    let alignedGrids = this.gos.get(\"alignedGrids\") ?? [];\n    const isCallbackConfig = typeof alignedGrids === \"function\";\n    if (typeof alignedGrids === \"function\") {\n      alignedGrids = alignedGrids();\n    }\n    const seeUrl = () => `See ${this.getFrameworkOverrides().getDocLink(\"aligned-grids\")}`;\n    const apis = alignedGrids.map((alignedGrid) => {\n      if (!alignedGrid) {\n        _errorOnce(`alignedGrids contains an undefined option.`);\n        if (!isCallbackConfig) {\n          _errorOnce(`You may want to configure via a callback to avoid setup race conditions:\n                     \"alignedGrids: () => [linkedGrid]\"`);\n        }\n        _errorOnce(seeUrl());\n        return;\n      }\n      if (this.isGridApi(alignedGrid)) {\n        return alignedGrid;\n      }\n      const refOrComp = alignedGrid;\n      if (\"current\" in refOrComp) {\n        return refOrComp.current?.api;\n      }\n      if (!refOrComp.api) {\n        _errorOnce(\n          `alignedGrids - No api found on the linked grid. If you are passing gridOptions to alignedGrids since v31 this is no longer valid. ${seeUrl()}`\n        );\n      }\n      return refOrComp.api;\n    }).filter((api) => !!api && !api.isDestroyed());\n    return apis;\n  }\n  isGridApi(ref) {\n    return !!ref && !!ref.dispatchEvent;\n  }\n  postConstruct() {\n    const fireColumnEvent = this.fireColumnEvent.bind(this);\n    this.addManagedEventListeners({\n      columnMoved: fireColumnEvent,\n      columnVisible: fireColumnEvent,\n      columnPinned: fireColumnEvent,\n      columnGroupOpened: fireColumnEvent,\n      columnResized: fireColumnEvent,\n      bodyScroll: this.fireScrollEvent.bind(this),\n      alignedGridColumn: ({ event }) => this.onColumnEvent(event),\n      alignedGridScroll: ({ event }) => this.onScrollEvent(event)\n    });\n  }\n  // common logic across all the fire methods\n  fireEvent(event) {\n    if (this.consuming) {\n      return;\n    }\n    this.getAlignedGridApis().forEach((api) => {\n      if (api.isDestroyed()) {\n        return;\n      }\n      api.dispatchEvent(event);\n    });\n  }\n  // common logic across all consume methods. very little common logic, however extracting\n  // guarantees consistency across the methods.\n  onEvent(callback) {\n    this.consuming = true;\n    callback();\n    this.consuming = false;\n  }\n  fireColumnEvent(columnEvent) {\n    this.fireEvent({\n      type: \"alignedGridColumn\",\n      event: columnEvent\n    });\n  }\n  fireScrollEvent(scrollEvent) {\n    if (scrollEvent.direction !== \"horizontal\") {\n      return;\n    }\n    this.fireEvent({\n      type: \"alignedGridScroll\",\n      event: scrollEvent\n    });\n  }\n  onScrollEvent(event) {\n    this.onEvent(() => {\n      const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n      gridBodyCon.getScrollFeature().setHorizontalScrollPosition(event.left, true);\n    });\n  }\n  extractDataFromEvent(event, func) {\n    const result = [];\n    if (event.columns) {\n      event.columns.forEach((column) => {\n        result.push(func(column));\n      });\n    } else if (event.column) {\n      result.push(func(event.column));\n    }\n    return result;\n  }\n  getMasterColumns(event) {\n    return this.extractDataFromEvent(event, (col) => col);\n  }\n  getColumnIds(event) {\n    return this.extractDataFromEvent(event, (col) => col.getColId());\n  }\n  onColumnEvent(event) {\n    this.onEvent(() => {\n      switch (event.type) {\n        case \"columnMoved\":\n        case \"columnVisible\":\n        case \"columnPinned\":\n        case \"columnResized\": {\n          this.processColumnEvent(event);\n          break;\n        }\n        case \"columnGroupOpened\": {\n          this.processGroupOpenedEvent(event);\n          break;\n        }\n        case \"columnPivotChanged\":\n          _warnOnce(\n            \"pivoting is not supported with aligned grids. You can only use one of these features at a time in a grid.\"\n          );\n          break;\n      }\n    });\n  }\n  processGroupOpenedEvent(groupOpenedEvent) {\n    const { columnModel } = this;\n    groupOpenedEvent.columnGroups.forEach((masterGroup) => {\n      let otherColumnGroup = null;\n      if (masterGroup) {\n        otherColumnGroup = columnModel.getProvidedColGroup(masterGroup.getGroupId());\n      }\n      if (masterGroup && !otherColumnGroup) {\n        return;\n      }\n      columnModel.setColumnGroupOpened(otherColumnGroup, masterGroup.isExpanded(), \"alignedGridChanged\");\n    });\n  }\n  processColumnEvent(colEvent) {\n    const masterColumn = colEvent.column;\n    let otherColumn = null;\n    if (masterColumn) {\n      otherColumn = this.columnModel.getColDefCol(masterColumn.getColId());\n    }\n    if (masterColumn && !otherColumn) {\n      return;\n    }\n    const masterColumns = this.getMasterColumns(colEvent);\n    const { columnApplyStateService, columnSizeService, ctrlsService } = this;\n    switch (colEvent.type) {\n      case \"columnMoved\":\n        {\n          const srcColState = colEvent.api.getColumnState();\n          const destColState = srcColState.map((s) => ({ colId: s.colId }));\n          columnApplyStateService.applyColumnState(\n            { state: destColState, applyOrder: true },\n            \"alignedGridChanged\"\n          );\n        }\n        break;\n      case \"columnVisible\":\n        {\n          const srcColState = colEvent.api.getColumnState();\n          const destColState = srcColState.map((s) => ({ colId: s.colId, hide: s.hide }));\n          columnApplyStateService.applyColumnState({ state: destColState }, \"alignedGridChanged\");\n        }\n        break;\n      case \"columnPinned\":\n        {\n          const srcColState = colEvent.api.getColumnState();\n          const destColState = srcColState.map((s) => ({ colId: s.colId, pinned: s.pinned }));\n          columnApplyStateService.applyColumnState({ state: destColState }, \"alignedGridChanged\");\n        }\n        break;\n      case \"columnResized\": {\n        const resizedEvent = colEvent;\n        const columnWidths = {};\n        masterColumns.forEach((column) => {\n          columnWidths[column.getId()] = { key: column.getColId(), newWidth: column.getActualWidth() };\n        });\n        resizedEvent.flexColumns?.forEach((col) => {\n          if (columnWidths[col.getId()]) {\n            delete columnWidths[col.getId()];\n          }\n        });\n        columnSizeService.setColumnWidths(\n          Object.values(columnWidths),\n          false,\n          resizedEvent.finished,\n          \"alignedGridChanged\"\n        );\n        break;\n      }\n    }\n    const gridBodyCon = ctrlsService.getGridBodyCtrl();\n    const isVerticalScrollShowing = gridBodyCon.isVerticalScrollShowing();\n    this.getAlignedGridApis().forEach((api) => {\n      api.setGridOption(\"alwaysShowVerticalScroll\", isVerticalScrollShowing);\n    });\n  }\n};\n\n// community-modules/core/src/alignedGridsModule.ts\nvar AlignedGridsModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/aligned-grid\",\n  beans: [AlignedGridsService]\n});\n\n// community-modules/core/src/columns/columnApi.ts\nfunction getColumnDef(beans, key) {\n  const column = beans.columnModel.getColDefCol(key);\n  if (column) {\n    return column.getColDef();\n  }\n  return null;\n}\nfunction getColumnDefs(beans) {\n  return beans.columnModel.getColumnDefs();\n}\nfunction sizeColumnsToFit(beans, paramsOrGridWidth) {\n  if (typeof paramsOrGridWidth === \"number\") {\n    beans.columnSizeService.sizeColumnsToFit(paramsOrGridWidth, \"api\");\n  } else {\n    beans.ctrlsService.getGridBodyCtrl().sizeColumnsToFit(paramsOrGridWidth);\n  }\n}\nfunction setColumnGroupOpened(beans, group, newValue) {\n  beans.columnModel.setColumnGroupOpened(group, newValue, \"api\");\n}\nfunction getColumnGroup(beans, name, instanceId) {\n  return beans.visibleColsService.getColumnGroup(name, instanceId);\n}\nfunction getProvidedColumnGroup(beans, name) {\n  return beans.columnModel.getProvidedColGroup(name);\n}\nfunction getDisplayNameForColumn(beans, column, location) {\n  return beans.columnNameService.getDisplayNameForColumn(column, location) || \"\";\n}\nfunction getDisplayNameForColumnGroup(beans, columnGroup, location) {\n  return beans.columnNameService.getDisplayNameForColumnGroup(columnGroup, location) || \"\";\n}\nfunction getColumn(beans, key) {\n  return beans.columnModel.getColDefCol(key);\n}\nfunction getColumns(beans) {\n  return beans.columnModel.getColDefCols();\n}\nfunction applyColumnState(beans, params) {\n  return beans.columnApplyStateService.applyColumnState(params, \"api\");\n}\nfunction getColumnState(beans) {\n  return beans.columnGetStateService.getColumnState();\n}\nfunction resetColumnState(beans) {\n  beans.columnApplyStateService.resetColumnState(\"api\");\n}\nfunction getColumnGroupState(beans) {\n  return beans.columnGroupStateService.getColumnGroupState();\n}\nfunction setColumnGroupState(beans, stateItems) {\n  beans.columnGroupStateService.setColumnGroupState(stateItems, \"api\");\n}\nfunction resetColumnGroupState(beans) {\n  beans.columnGroupStateService.resetColumnGroupState(\"api\");\n}\nfunction isPinning(beans) {\n  return beans.visibleColsService.isPinningLeft() || beans.visibleColsService.isPinningRight();\n}\nfunction isPinningLeft(beans) {\n  return beans.visibleColsService.isPinningLeft();\n}\nfunction isPinningRight(beans) {\n  return beans.visibleColsService.isPinningRight();\n}\nfunction getDisplayedColAfter(beans, col) {\n  return beans.visibleColsService.getColAfter(col);\n}\nfunction getDisplayedColBefore(beans, col) {\n  return beans.visibleColsService.getColBefore(col);\n}\nfunction setColumnVisible(beans, key, visible) {\n  beans.columnModel.setColsVisible([key], visible, \"api\");\n}\nfunction setColumnsVisible(beans, keys, visible) {\n  beans.columnModel.setColsVisible(keys, visible, \"api\");\n}\nfunction setColumnPinned(beans, key, pinned) {\n  beans.columnModel.setColsPinned([key], pinned, \"api\");\n}\nfunction setColumnsPinned(beans, keys, pinned) {\n  beans.columnModel.setColsPinned(keys, pinned, \"api\");\n}\nfunction getAllGridColumns(beans) {\n  return beans.columnModel.getCols();\n}\nfunction getDisplayedLeftColumns(beans) {\n  return beans.visibleColsService.getLeftCols();\n}\nfunction getDisplayedCenterColumns(beans) {\n  return beans.visibleColsService.getCenterCols();\n}\nfunction getDisplayedRightColumns(beans) {\n  return beans.visibleColsService.getRightCols();\n}\nfunction getAllDisplayedColumns(beans) {\n  return beans.visibleColsService.getAllCols();\n}\nfunction getAllDisplayedVirtualColumns(beans) {\n  return beans.columnViewportService.getViewportColumns();\n}\nfunction moveColumn(beans, key, toIndex) {\n  beans.columnMoveService.moveColumns([key], toIndex, \"api\");\n}\nfunction moveColumnByIndex(beans, fromIndex, toIndex) {\n  beans.columnMoveService.moveColumnByIndex(fromIndex, toIndex, \"api\");\n}\nfunction moveColumns(beans, columnsToMoveKeys, toIndex) {\n  beans.columnMoveService.moveColumns(columnsToMoveKeys, toIndex, \"api\");\n}\nfunction setColumnWidth(beans, key, newWidth, finished = true, source = \"api\") {\n  beans.columnSizeService.setColumnWidths([{ key, newWidth }], false, finished, source);\n}\nfunction setColumnWidths(beans, columnWidths, finished = true, source = \"api\") {\n  beans.columnSizeService.setColumnWidths(columnWidths, false, finished, source);\n}\nfunction getLeftDisplayedColumnGroups(beans) {\n  return beans.visibleColsService.getTreeLeft();\n}\nfunction getCenterDisplayedColumnGroups(beans) {\n  return beans.visibleColsService.getTreeCenter();\n}\nfunction getRightDisplayedColumnGroups(beans) {\n  return beans.visibleColsService.getTreeRight();\n}\nfunction getAllDisplayedColumnGroups(beans) {\n  return beans.visibleColsService.getAllTrees();\n}\nfunction autoSizeColumn(beans, key, skipHeader) {\n  return beans.columnAutosizeService.autoSizeCols({ colKeys: [key], skipHeader, source: \"api\" });\n}\nfunction autoSizeColumns(beans, keys, skipHeader) {\n  beans.columnAutosizeService.autoSizeCols({ colKeys: keys, skipHeader, source: \"api\" });\n}\nfunction autoSizeAllColumns(beans, skipHeader) {\n  beans.columnAutosizeService.autoSizeAllColumns(\"api\", skipHeader);\n}\n\n// community-modules/core/src/columns/dataTypeService.ts\nvar DataTypeService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"dataTypeService\";\n    this.dataTypeDefinitions = {};\n    this.isWaitingForRowData = false;\n    this.isColumnTypeOverrideInDataTypeDefinitions = false;\n    // keep track of any column state updates whilst waiting for data types to be inferred\n    this.columnStateUpdatesPendingInference = {};\n    this.columnStateUpdateListenerDestroyFuncs = [];\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n    this.valueService = beans.valueService;\n    this.columnApplyStateService = beans.columnApplyStateService;\n    this.filterManager = beans.filterManager;\n  }\n  postConstruct() {\n    this.groupHideOpenParents = this.gos.get(\"groupHideOpenParents\");\n    this.addManagedPropertyListener(\"groupHideOpenParents\", () => {\n      this.groupHideOpenParents = this.gos.get(\"groupHideOpenParents\");\n    });\n    this.processDataTypeDefinitions();\n    this.addManagedPropertyListener(\"dataTypeDefinitions\", (event) => {\n      this.processDataTypeDefinitions();\n      this.columnModel.recreateColumnDefs(convertSourceType(event.source));\n    });\n  }\n  processDataTypeDefinitions() {\n    const defaultDataTypes = this.getDefaultDataTypes();\n    this.dataTypeDefinitions = {};\n    this.formatValueFuncs = {};\n    const generateFormatValueFunc = (dataTypeDefinition) => {\n      return (params) => {\n        const { column, node, value } = params;\n        let valueFormatter = column.getColDef().valueFormatter;\n        if (valueFormatter === dataTypeDefinition.groupSafeValueFormatter) {\n          valueFormatter = dataTypeDefinition.valueFormatter;\n        }\n        return this.valueService.formatValue(column, node, value, valueFormatter);\n      };\n    };\n    Object.entries(defaultDataTypes).forEach(([cellDataType, dataTypeDefinition]) => {\n      const mergedDataTypeDefinition = {\n        ...dataTypeDefinition,\n        groupSafeValueFormatter: this.createGroupSafeValueFormatter(dataTypeDefinition)\n      };\n      this.dataTypeDefinitions[cellDataType] = mergedDataTypeDefinition;\n      this.formatValueFuncs[cellDataType] = generateFormatValueFunc(mergedDataTypeDefinition);\n    });\n    const dataTypeDefinitions = this.gos.get(\"dataTypeDefinitions\") ?? {};\n    this.dataTypeMatchers = {};\n    Object.entries(dataTypeDefinitions).forEach(([cellDataType, dataTypeDefinition]) => {\n      const mergedDataTypeDefinition = this.processDataTypeDefinition(\n        dataTypeDefinition,\n        dataTypeDefinitions,\n        [cellDataType],\n        defaultDataTypes\n      );\n      if (mergedDataTypeDefinition) {\n        this.dataTypeDefinitions[cellDataType] = mergedDataTypeDefinition;\n        if (dataTypeDefinition.dataTypeMatcher) {\n          this.dataTypeMatchers[cellDataType] = dataTypeDefinition.dataTypeMatcher;\n        }\n        this.formatValueFuncs[cellDataType] = generateFormatValueFunc(mergedDataTypeDefinition);\n      }\n    });\n    this.checkObjectValueHandlers(defaultDataTypes);\n    [\"dateString\", \"text\", \"number\", \"boolean\", \"date\"].forEach((cellDataType) => {\n      const overriddenDataTypeMatcher = this.dataTypeMatchers[cellDataType];\n      if (overriddenDataTypeMatcher) {\n        delete this.dataTypeMatchers[cellDataType];\n      }\n      this.dataTypeMatchers[cellDataType] = overriddenDataTypeMatcher ?? defaultDataTypes[cellDataType].dataTypeMatcher;\n    });\n  }\n  mergeDataTypeDefinitions(parentDataTypeDefinition, childDataTypeDefinition) {\n    const mergedDataTypeDefinition = {\n      ...parentDataTypeDefinition,\n      ...childDataTypeDefinition\n    };\n    if (parentDataTypeDefinition.columnTypes && childDataTypeDefinition.columnTypes && childDataTypeDefinition.appendColumnTypes) {\n      mergedDataTypeDefinition.columnTypes = [\n        ...convertColumnTypes(parentDataTypeDefinition.columnTypes),\n        ...convertColumnTypes(childDataTypeDefinition.columnTypes)\n      ];\n    }\n    return mergedDataTypeDefinition;\n  }\n  processDataTypeDefinition(dataTypeDefinition, dataTypeDefinitions, alreadyProcessedDataTypes, defaultDataTypes) {\n    let mergedDataTypeDefinition;\n    const extendsCellDataType = dataTypeDefinition.extendsDataType;\n    if (dataTypeDefinition.columnTypes) {\n      this.isColumnTypeOverrideInDataTypeDefinitions = true;\n    }\n    if (dataTypeDefinition.extendsDataType === dataTypeDefinition.baseDataType) {\n      let baseDataTypeDefinition = defaultDataTypes[extendsCellDataType];\n      const overriddenBaseDataTypeDefinition = dataTypeDefinitions[extendsCellDataType];\n      if (baseDataTypeDefinition && overriddenBaseDataTypeDefinition) {\n        baseDataTypeDefinition = overriddenBaseDataTypeDefinition;\n      }\n      if (!this.validateDataTypeDefinition(dataTypeDefinition, baseDataTypeDefinition, extendsCellDataType)) {\n        return void 0;\n      }\n      mergedDataTypeDefinition = this.mergeDataTypeDefinitions(baseDataTypeDefinition, dataTypeDefinition);\n    } else {\n      if (alreadyProcessedDataTypes.includes(extendsCellDataType)) {\n        _warnOnce(\n          'Data type definition hierarchies (via the \"extendsDataType\" property) cannot contain circular references.'\n        );\n        return void 0;\n      }\n      const extendedDataTypeDefinition = dataTypeDefinitions[extendsCellDataType];\n      if (!this.validateDataTypeDefinition(dataTypeDefinition, extendedDataTypeDefinition, extendsCellDataType)) {\n        return void 0;\n      }\n      const mergedExtendedDataTypeDefinition = this.processDataTypeDefinition(\n        extendedDataTypeDefinition,\n        dataTypeDefinitions,\n        [...alreadyProcessedDataTypes, extendsCellDataType],\n        defaultDataTypes\n      );\n      if (!mergedExtendedDataTypeDefinition) {\n        return void 0;\n      }\n      mergedDataTypeDefinition = this.mergeDataTypeDefinitions(\n        mergedExtendedDataTypeDefinition,\n        dataTypeDefinition\n      );\n    }\n    return {\n      ...mergedDataTypeDefinition,\n      groupSafeValueFormatter: this.createGroupSafeValueFormatter(mergedDataTypeDefinition)\n    };\n  }\n  validateDataTypeDefinition(dataTypeDefinition, parentDataTypeDefinition, parentCellDataType) {\n    if (!parentDataTypeDefinition) {\n      _warnOnce(`The data type definition ${parentCellDataType} does not exist.`);\n      return false;\n    }\n    if (parentDataTypeDefinition.baseDataType !== dataTypeDefinition.baseDataType) {\n      _warnOnce('The \"baseDataType\" property of a data type definition must match that of its parent.');\n      return false;\n    }\n    return true;\n  }\n  createGroupSafeValueFormatter(dataTypeDefinition) {\n    if (!dataTypeDefinition.valueFormatter) {\n      return void 0;\n    }\n    return (params) => {\n      if (params.node?.group) {\n        const aggFunc = (params.colDef.pivotValueColumn ?? params.column).getAggFunc();\n        if (aggFunc) {\n          if (aggFunc === \"first\" || aggFunc === \"last\") {\n            return dataTypeDefinition.valueFormatter(params);\n          }\n          if (dataTypeDefinition.baseDataType === \"number\" && aggFunc !== \"count\") {\n            if (typeof params.value === \"number\") {\n              return dataTypeDefinition.valueFormatter(params);\n            }\n            if (typeof params.value === \"object\") {\n              if (!params.value) {\n                return void 0;\n              }\n              if (\"toNumber\" in params.value) {\n                return dataTypeDefinition.valueFormatter({\n                  ...params,\n                  value: params.value.toNumber()\n                });\n              }\n              if (\"value\" in params.value) {\n                return dataTypeDefinition.valueFormatter({\n                  ...params,\n                  value: params.value.value\n                });\n              }\n            }\n          }\n          return void 0;\n        }\n        if ((this.gos.get(\"suppressGroupMaintainValueType\") || this.gos.get(\"groupDisplayType\") === \"groupRows\") && !this.gos.get(\"treeData\")) {\n          return void 0;\n        }\n      } else if (this.groupHideOpenParents && params.column.isRowGroupActive()) {\n        if (typeof params.value === \"string\" && !dataTypeDefinition.dataTypeMatcher?.(params.value)) {\n          return void 0;\n        }\n      }\n      return dataTypeDefinition.valueFormatter(params);\n    };\n  }\n  updateColDefAndGetColumnType(colDef, userColDef, colId) {\n    let { cellDataType } = userColDef;\n    const { field } = userColDef;\n    if (cellDataType === void 0) {\n      cellDataType = colDef.cellDataType;\n    }\n    if (cellDataType == null || cellDataType === true) {\n      cellDataType = this.canInferCellDataType(colDef, userColDef) ? this.inferCellDataType(field, colId) : false;\n    }\n    if (!cellDataType) {\n      colDef.cellDataType = false;\n      return void 0;\n    }\n    const dataTypeDefinition = this.dataTypeDefinitions[cellDataType];\n    if (!dataTypeDefinition) {\n      _warnOnce(`Missing data type definition - \"${cellDataType}\"`);\n      return void 0;\n    }\n    colDef.cellDataType = cellDataType;\n    if (dataTypeDefinition.groupSafeValueFormatter) {\n      colDef.valueFormatter = dataTypeDefinition.groupSafeValueFormatter;\n    }\n    if (dataTypeDefinition.valueParser) {\n      colDef.valueParser = dataTypeDefinition.valueParser;\n    }\n    if (!dataTypeDefinition.suppressDefaultProperties) {\n      this.setColDefPropertiesForBaseDataType(colDef, cellDataType, dataTypeDefinition, colId);\n    }\n    return dataTypeDefinition.columnTypes;\n  }\n  addColumnListeners(column) {\n    if (!this.isWaitingForRowData) {\n      return;\n    }\n    const columnStateUpdates = this.columnStateUpdatesPendingInference[column.getColId()];\n    if (!columnStateUpdates) {\n      return;\n    }\n    const columnListener = (event) => {\n      columnStateUpdates.add(event.key);\n    };\n    column.addEventListener(\"columnStateUpdated\", columnListener);\n    this.columnStateUpdateListenerDestroyFuncs.push(\n      () => column.removeEventListener(\"columnStateUpdated\", columnListener)\n    );\n  }\n  canInferCellDataType(colDef, userColDef) {\n    if (!_isClientSideRowModel(this.gos)) {\n      return false;\n    }\n    const propsToCheckForInference = { cellRenderer: true, valueGetter: true, valueParser: true, refData: true };\n    if (this.doColDefPropsPreventInference(userColDef, propsToCheckForInference)) {\n      return false;\n    }\n    const columnTypes = userColDef.type === null ? colDef.type : userColDef.type;\n    if (columnTypes) {\n      const columnTypeDefs = this.gos.get(\"columnTypes\") ?? {};\n      const hasPropsPreventingInference = convertColumnTypes(columnTypes).some((columnType) => {\n        const columnTypeDef = columnTypeDefs[columnType.trim()];\n        return columnTypeDef && this.doColDefPropsPreventInference(columnTypeDef, propsToCheckForInference);\n      });\n      if (hasPropsPreventingInference) {\n        return false;\n      }\n    }\n    return !this.doColDefPropsPreventInference(colDef, propsToCheckForInference);\n  }\n  doColDefPropsPreventInference(colDef, propsToCheckForInference) {\n    return [\n      [\"cellRenderer\", \"agSparklineCellRenderer\"],\n      [\"valueGetter\", void 0],\n      [\"valueParser\", void 0],\n      [\"refData\", void 0]\n    ].some(\n      ([prop, comparisonValue]) => this.doesColDefPropPreventInference(colDef, propsToCheckForInference, prop, comparisonValue)\n    );\n  }\n  doesColDefPropPreventInference(colDef, checkProps, prop, comparisonValue) {\n    if (!checkProps[prop]) {\n      return false;\n    }\n    const value = colDef[prop];\n    if (value === null) {\n      checkProps[prop] = false;\n      return false;\n    } else {\n      return comparisonValue === void 0 ? !!value : value === comparisonValue;\n    }\n  }\n  inferCellDataType(field, colId) {\n    if (!field) {\n      return void 0;\n    }\n    let value;\n    const initialData = this.getInitialData();\n    if (initialData) {\n      const fieldContainsDots = field.indexOf(\".\") >= 0 && !this.gos.get(\"suppressFieldDotNotation\");\n      value = _getValueUsingField(initialData, field, fieldContainsDots);\n    } else {\n      this.initWaitForRowData(colId);\n    }\n    if (value == null) {\n      return void 0;\n    }\n    const [cellDataType] = Object.entries(this.dataTypeMatchers).find(\n      ([_cellDataType, dataTypeMatcher]) => dataTypeMatcher(value)\n    ) ?? [\"object\"];\n    return cellDataType;\n  }\n  getInitialData() {\n    const rowData = this.gos.get(\"rowData\");\n    if (rowData?.length) {\n      return rowData[0];\n    } else if (this.initialData) {\n      return this.initialData;\n    } else {\n      const rowNodes = this.rowModel.getRootNode().allLeafChildren;\n      if (rowNodes?.length) {\n        return rowNodes[0].data;\n      }\n    }\n    return null;\n  }\n  initWaitForRowData(colId) {\n    this.columnStateUpdatesPendingInference[colId] = /* @__PURE__ */ new Set();\n    if (this.isWaitingForRowData) {\n      return;\n    }\n    this.isWaitingForRowData = true;\n    const columnTypeOverridesExist = this.isColumnTypeOverrideInDataTypeDefinitions;\n    if (columnTypeOverridesExist) {\n      this.columnModel.queueResizeOperations();\n    }\n    const [destroyFunc] = this.addManagedEventListeners({\n      rowDataUpdateStarted: (event) => {\n        const { firstRowData } = event;\n        if (!firstRowData) {\n          return;\n        }\n        destroyFunc?.();\n        this.isWaitingForRowData = false;\n        this.processColumnsPendingInference(firstRowData, columnTypeOverridesExist);\n        this.columnStateUpdatesPendingInference = {};\n        if (columnTypeOverridesExist) {\n          this.columnModel.processResizeOperations();\n        }\n        this.eventService.dispatchEvent({\n          type: \"dataTypesInferred\"\n        });\n      }\n    });\n  }\n  isPendingInference() {\n    return this.isWaitingForRowData;\n  }\n  processColumnsPendingInference(firstRowData, columnTypeOverridesExist) {\n    this.initialData = firstRowData;\n    const state = [];\n    this.destroyColumnStateUpdateListeners();\n    const newRowGroupColumnStateWithoutIndex = {};\n    const newPivotColumnStateWithoutIndex = {};\n    Object.entries(this.columnStateUpdatesPendingInference).forEach(([colId, columnStateUpdates]) => {\n      const column = this.columnModel.getCol(colId);\n      if (!column) {\n        return;\n      }\n      const oldColDef = column.getColDef();\n      if (!this.columnModel.resetColDefIntoCol(column, \"cellDataTypeInferred\")) {\n        return;\n      }\n      const newColDef = column.getColDef();\n      if (columnTypeOverridesExist && newColDef.type && newColDef.type !== oldColDef.type) {\n        const updatedColumnState = this.getUpdatedColumnState(column, columnStateUpdates);\n        if (updatedColumnState.rowGroup && updatedColumnState.rowGroupIndex == null) {\n          newRowGroupColumnStateWithoutIndex[colId] = updatedColumnState;\n        }\n        if (updatedColumnState.pivot && updatedColumnState.pivotIndex == null) {\n          newPivotColumnStateWithoutIndex[colId] = updatedColumnState;\n        }\n        state.push(updatedColumnState);\n      }\n    });\n    if (columnTypeOverridesExist) {\n      state.push(\n        ...this.funcColsService.generateColumnStateForRowGroupAndPivotIndexes(\n          newRowGroupColumnStateWithoutIndex,\n          newPivotColumnStateWithoutIndex\n        )\n      );\n    }\n    if (state.length) {\n      this.columnApplyStateService.applyColumnState({ state }, \"cellDataTypeInferred\");\n    }\n    this.initialData = null;\n  }\n  getUpdatedColumnState(column, columnStateUpdates) {\n    const columnState = this.columnApplyStateService.getColumnStateFromColDef(column);\n    columnStateUpdates.forEach((key) => {\n      delete columnState[key];\n      if (key === \"rowGroup\") {\n        delete columnState.rowGroupIndex;\n      } else if (key === \"pivot\") {\n        delete columnState.pivotIndex;\n      }\n    });\n    return columnState;\n  }\n  checkObjectValueHandlers(defaultDataTypes) {\n    const resolvedObjectDataTypeDefinition = this.dataTypeDefinitions.object;\n    const defaultObjectDataTypeDefinition = defaultDataTypes.object;\n    this.hasObjectValueParser = resolvedObjectDataTypeDefinition.valueParser !== defaultObjectDataTypeDefinition.valueParser;\n    this.hasObjectValueFormatter = resolvedObjectDataTypeDefinition.valueFormatter !== defaultObjectDataTypeDefinition.valueFormatter;\n  }\n  getDateStringTypeDefinition(column) {\n    if (!column) {\n      return this.dataTypeDefinitions.dateString;\n    }\n    return this.getDataTypeDefinition(column) ?? this.dataTypeDefinitions.dateString;\n  }\n  getDateParserFunction(column) {\n    return this.getDateStringTypeDefinition(column).dateParser;\n  }\n  getDateFormatterFunction(column) {\n    return this.getDateStringTypeDefinition(column).dateFormatter;\n  }\n  getDataTypeDefinition(column) {\n    const colDef = column.getColDef();\n    if (!colDef.cellDataType) {\n      return void 0;\n    }\n    return this.dataTypeDefinitions[colDef.cellDataType];\n  }\n  getBaseDataType(column) {\n    return this.getDataTypeDefinition(column)?.baseDataType;\n  }\n  checkType(column, value) {\n    if (value == null) {\n      return true;\n    }\n    const dataTypeMatcher = this.getDataTypeDefinition(column)?.dataTypeMatcher;\n    if (!dataTypeMatcher) {\n      return true;\n    }\n    return dataTypeMatcher(value);\n  }\n  validateColDef(colDef) {\n    const warning = (property) => _warnOnce(\n      `Cell data type is \"object\" but no Value ${property} has been provided. Please either provide an object data type definition with a Value ${property}, or set \"colDef.value${property}\"`\n    );\n    if (colDef.cellDataType === \"object\") {\n      if (colDef.valueFormatter === this.dataTypeDefinitions.object.groupSafeValueFormatter && !this.hasObjectValueFormatter) {\n        warning(\"Formatter\");\n      }\n      if (colDef.editable && colDef.valueParser === this.dataTypeDefinitions.object.valueParser && !this.hasObjectValueParser) {\n        warning(\"Parser\");\n      }\n    }\n  }\n  getFormatValue(cellDataType) {\n    return this.formatValueFuncs[cellDataType];\n  }\n  setColDefPropertiesForBaseDataType(colDef, cellDataType, dataTypeDefinition, colId) {\n    const formatValue = this.formatValueFuncs[cellDataType];\n    switch (dataTypeDefinition.baseDataType) {\n      case \"number\": {\n        colDef.cellEditor = \"agNumberCellEditor\";\n        break;\n      }\n      case \"boolean\": {\n        colDef.cellEditor = \"agCheckboxCellEditor\";\n        colDef.cellRenderer = \"agCheckboxCellRenderer\";\n        colDef.suppressKeyboardEvent = (params) => !!params.colDef.editable && params.event.key === KeyCode.SPACE;\n        break;\n      }\n      case \"date\": {\n        colDef.cellEditor = \"agDateCellEditor\";\n        colDef.keyCreator = formatValue;\n        break;\n      }\n      case \"dateString\": {\n        colDef.cellEditor = \"agDateStringCellEditor\";\n        colDef.keyCreator = formatValue;\n        break;\n      }\n      case \"object\": {\n        colDef.cellEditorParams = {\n          useFormatter: true\n        };\n        colDef.comparator = (a, b) => {\n          const column = this.columnModel.getColDefCol(colId);\n          const colDef2 = column?.getColDef();\n          if (!column || !colDef2) {\n            return 0;\n          }\n          const valA = a == null ? \"\" : formatValue({ column, node: null, value: a });\n          const valB = b == null ? \"\" : formatValue({ column, node: null, value: b });\n          if (valA === valB)\n            return 0;\n          return valA > valB ? 1 : -1;\n        };\n        colDef.keyCreator = formatValue;\n        break;\n      }\n    }\n    this.filterManager?.setColDefPropertiesForDataType(colDef, dataTypeDefinition, formatValue);\n  }\n  getDefaultDataTypes() {\n    const defaultDateFormatMatcher = (value) => !!value.match(\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\");\n    const translate = this.localeService.getLocaleTextFunc();\n    return {\n      number: {\n        baseDataType: \"number\",\n        // can be empty space with legacy copy\n        valueParser: (params) => params.newValue?.trim?.() === \"\" ? null : Number(params.newValue),\n        valueFormatter: (params) => {\n          if (params.value == null) {\n            return \"\";\n          }\n          if (typeof params.value !== \"number\" || isNaN(params.value)) {\n            return translate(\"invalidNumber\", \"Invalid Number\");\n          }\n          return String(params.value);\n        },\n        dataTypeMatcher: (value) => typeof value === \"number\"\n      },\n      text: {\n        baseDataType: \"text\",\n        valueParser: (params) => params.newValue === \"\" ? null : _toStringOrNull(params.newValue),\n        dataTypeMatcher: (value) => typeof value === \"string\"\n      },\n      boolean: {\n        baseDataType: \"boolean\",\n        valueParser: (params) => {\n          if (params.newValue == null) {\n            return params.newValue;\n          }\n          return params.newValue?.trim?.() === \"\" ? null : String(params.newValue).toLowerCase() === \"true\";\n        },\n        valueFormatter: (params) => params.value == null ? \"\" : String(params.value),\n        dataTypeMatcher: (value) => typeof value === \"boolean\"\n      },\n      date: {\n        baseDataType: \"date\",\n        valueParser: (params) => _parseDateTimeFromString(params.newValue == null ? null : String(params.newValue)),\n        valueFormatter: (params) => {\n          if (params.value == null) {\n            return \"\";\n          }\n          if (!(params.value instanceof Date) || isNaN(params.value.getTime())) {\n            return translate(\"invalidDate\", \"Invalid Date\");\n          }\n          return _serialiseDate(params.value, false) ?? \"\";\n        },\n        dataTypeMatcher: (value) => value instanceof Date\n      },\n      dateString: {\n        baseDataType: \"dateString\",\n        dateParser: (value) => _parseDateTimeFromString(value) ?? void 0,\n        dateFormatter: (value) => _serialiseDate(value ?? null, false) ?? void 0,\n        valueParser: (params) => defaultDateFormatMatcher(String(params.newValue)) ? params.newValue : null,\n        valueFormatter: (params) => defaultDateFormatMatcher(String(params.value)) ? params.value : \"\",\n        dataTypeMatcher: (value) => typeof value === \"string\" && defaultDateFormatMatcher(value)\n      },\n      object: {\n        baseDataType: \"object\",\n        valueParser: () => null,\n        valueFormatter: (params) => _toStringOrNull(params.value) ?? \"\"\n      }\n    };\n  }\n  destroyColumnStateUpdateListeners() {\n    this.columnStateUpdateListenerDestroyFuncs.forEach((destroyFunc) => destroyFunc());\n    this.columnStateUpdateListenerDestroyFuncs = [];\n  }\n  destroy() {\n    this.dataTypeDefinitions = {};\n    this.dataTypeMatchers = {};\n    this.formatValueFuncs = {};\n    this.columnStateUpdatesPendingInference = {};\n    this.destroyColumnStateUpdateListeners();\n    super.destroy();\n  }\n};\n\n// community-modules/core/src/columns/columnModule.ts\nvar DataTypeModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/data-type\",\n  beans: [DataTypeService]\n});\nvar ColumnApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/column-api\",\n  apiFunctions: {\n    getColumnDef,\n    getColumnDefs,\n    sizeColumnsToFit,\n    setColumnGroupOpened,\n    getColumnGroup,\n    getProvidedColumnGroup,\n    getDisplayNameForColumn,\n    getDisplayNameForColumnGroup,\n    getColumn,\n    getColumns,\n    applyColumnState,\n    getColumnState,\n    resetColumnState,\n    getColumnGroupState,\n    setColumnGroupState,\n    resetColumnGroupState,\n    isPinning,\n    isPinningLeft,\n    isPinningRight,\n    getDisplayedColAfter,\n    getDisplayedColBefore,\n    setColumnVisible,\n    setColumnsVisible,\n    setColumnPinned,\n    setColumnsPinned,\n    getAllGridColumns,\n    getDisplayedLeftColumns,\n    getDisplayedCenterColumns,\n    getDisplayedRightColumns,\n    getAllDisplayedColumns,\n    getAllDisplayedVirtualColumns,\n    moveColumn,\n    moveColumnByIndex,\n    moveColumns,\n    setColumnWidth,\n    setColumnWidths,\n    getLeftDisplayedColumnGroups,\n    getCenterDisplayedColumnGroups,\n    getRightDisplayedColumnGroups,\n    getAllDisplayedColumnGroups,\n    autoSizeColumn,\n    autoSizeColumns,\n    autoSizeAllColumns\n  }\n});\n\n// community-modules/core/src/dragAndDrop/dragApi.ts\nfunction addRowDropZone(beans, params) {\n  beans.ctrlsService.getGridBodyCtrl().getRowDragFeature().addRowDropZone(params);\n}\nfunction removeRowDropZone(beans, params) {\n  const activeDropTarget = beans.dragAndDropService.findExternalZone(params);\n  if (activeDropTarget) {\n    beans.dragAndDropService.removeDropTarget(activeDropTarget);\n  }\n}\nfunction getRowDropZoneParams(beans, events) {\n  return beans.ctrlsService.getGridBodyCtrl().getRowDragFeature().getRowDropZone(events);\n}\n\n// community-modules/core/src/dragAndDrop/dragModule.ts\nvar DragApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/drag-api\",\n  apiFunctions: {\n    addRowDropZone,\n    removeRowDropZone,\n    getRowDropZoneParams\n  }\n});\n\n// community-modules/core/src/pinnedRowModel/pinnedRowApi.ts\nfunction getPinnedTopRowCount(beans) {\n  return beans.pinnedRowModel.getPinnedTopRowCount();\n}\nfunction getPinnedBottomRowCount(beans) {\n  return beans.pinnedRowModel.getPinnedBottomRowCount();\n}\nfunction getPinnedTopRow(beans, index) {\n  return beans.pinnedRowModel.getPinnedTopRow(index);\n}\nfunction getPinnedBottomRow(beans, index) {\n  return beans.pinnedRowModel.getPinnedBottomRow(index);\n}\n\n// community-modules/core/src/pinnedRowModel/pinnedRowModule.ts\nvar PinnedRowApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/pinned-row-api\",\n  apiFunctions: {\n    getPinnedTopRowCount,\n    getPinnedBottomRowCount,\n    getPinnedTopRow,\n    getPinnedBottomRow\n  }\n});\n\n// community-modules/core/src/rendering/overlays/overlayApi.ts\nfunction showLoadingOverlay(beans) {\n  beans.overlayService.showLoadingOverlay();\n}\nfunction showNoRowsOverlay(beans) {\n  beans.overlayService.showNoRowsOverlay();\n}\nfunction hideOverlay(beans) {\n  beans.overlayService.hideOverlay();\n}\n\n// community-modules/core/src/rendering/overlays/overlayModule.ts\nvar OverlayApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/overlay-api\",\n  apiFunctions: {\n    showLoadingOverlay,\n    showNoRowsOverlay,\n    hideOverlay\n  }\n});\n\n// community-modules/core/src/rendering/renderApi.ts\nfunction setGridAriaProperty(beans, property, value) {\n  if (!property) {\n    return;\n  }\n  const eGrid = beans.ctrlsService.getGridBodyCtrl().getGui();\n  const ariaProperty = `aria-${property}`;\n  if (value === null) {\n    eGrid.removeAttribute(ariaProperty);\n  } else {\n    eGrid.setAttribute(ariaProperty, value);\n  }\n}\nfunction refreshCells(beans, params = {}) {\n  beans.frameworkOverrides.wrapIncoming(() => beans.rowRenderer.refreshCells(params));\n}\nfunction flashCells(beans, params = {}) {\n  const warning = (prop) => _warnOnce(\n    `Since v31.1 api.flashCells parameter '${prop}Delay' is deprecated. Please use '${prop}Duration' instead.`\n  );\n  if (_exists(params.fadeDelay)) {\n    warning(\"fade\");\n  }\n  if (_exists(params.flashDelay)) {\n    warning(\"flash\");\n  }\n  beans.frameworkOverrides.wrapIncoming(() => beans.rowRenderer.flashCells(params));\n}\nfunction refreshHeader(beans) {\n  beans.frameworkOverrides.wrapIncoming(\n    () => beans.ctrlsService.getHeaderRowContainerCtrls().forEach((c) => c.refresh())\n  );\n}\nfunction isAnimationFrameQueueEmpty(beans) {\n  return beans.animationFrameService.isQueueEmpty();\n}\nfunction flushAllAnimationFrames(beans) {\n  beans.animationFrameService.flushAllFrames();\n}\nfunction getSizesForCurrentTheme(beans) {\n  return {\n    rowHeight: _getRowHeightAsNumber(beans.gos),\n    headerHeight: beans.columnModel.getHeaderHeight()\n  };\n}\nfunction getCellRendererInstances(beans, params = {}) {\n  const res = beans.rowRenderer.getCellRendererInstances(params);\n  const unwrapped = res.map(_unwrapUserComp);\n  return unwrapped;\n}\n\n// community-modules/core/src/rendering/renderModule.ts\nvar RenderApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/render-api\",\n  apiFunctions: {\n    setGridAriaProperty,\n    refreshCells,\n    flashCells,\n    refreshHeader,\n    isAnimationFrameQueueEmpty,\n    flushAllAnimationFrames,\n    getSizesForCurrentTheme,\n    getCellRendererInstances\n  }\n});\n\n// community-modules/core/src/api/cellApi.ts\nfunction expireValueCache(beans) {\n  beans.valueCache.expire();\n}\nfunction getValue(beans, colKey, rowNode) {\n  return getCellValue(beans, { colKey, rowNode });\n}\nfunction getCellValue(beans, params) {\n  const { colKey, rowNode, useFormatter } = params;\n  const column = beans.columnModel.getColDefCol(colKey) ?? beans.columnModel.getCol(colKey);\n  if (_missing(column)) {\n    return null;\n  }\n  const value = beans.valueService.getValueForDisplay(column, rowNode);\n  if (useFormatter) {\n    const formattedValue = beans.valueService.formatValue(column, rowNode, value);\n    return formattedValue ?? _escapeString(value, true);\n  }\n  return value;\n}\n\n// community-modules/core/src/api/coreApi.ts\nfunction getGridId(beans) {\n  return beans.context.getGridId();\n}\nfunction destroy(beans) {\n  beans.gridDestroyService.destroy();\n}\nfunction isDestroyed(beans) {\n  return beans.gridDestroyService.isDestroyCalled();\n}\nfunction getGridOption(beans, key) {\n  return beans.gos.get(key);\n}\nfunction setGridOption(beans, key, value) {\n  updateGridOptions(beans, { [key]: value });\n}\nfunction updateGridOptions(beans, options) {\n  beans.gos.updateGridOptions({ options });\n}\n\n// community-modules/core/src/api/eventApi.ts\nfunction addEventListener(beans, eventType, listener) {\n  beans.apiEventService.addEventListener(eventType, listener);\n}\nfunction removeEventListener(beans, eventType, listener) {\n  beans.apiEventService.removeEventListener(eventType, listener);\n}\nfunction addGlobalListener(beans, listener) {\n  beans.apiEventService.addGlobalListener(listener);\n}\nfunction removeGlobalListener(beans, listener) {\n  beans.apiEventService.removeGlobalListener(listener);\n}\n\n// community-modules/core/src/api/keyboardNavigationApi.ts\nfunction getFocusedCell(beans) {\n  return beans.focusService.getFocusedCell();\n}\nfunction clearFocusedCell(beans) {\n  return beans.focusService.clearFocusedCell();\n}\nfunction setFocusedCell(beans, rowIndex, colKey, rowPinned) {\n  beans.focusService.setFocusedCell({ rowIndex, column: colKey, rowPinned, forceBrowserFocus: true });\n}\nfunction tabToNextCell(beans, event) {\n  return beans.navigationService.tabToNextCell(false, event);\n}\nfunction tabToPreviousCell(beans, event) {\n  return beans.navigationService.tabToNextCell(true, event);\n}\nfunction setFocusedHeader(beans, colKey, floatingFilter = false) {\n  const headerPosition = beans.headerNavigationService.getHeaderPositionForColumn(colKey, floatingFilter);\n  if (!headerPosition) {\n    return;\n  }\n  beans.focusService.focusHeaderPosition({ headerPosition });\n}\n\n// community-modules/core/src/api/menuApi.ts\nfunction showColumnMenuAfterButtonClick(beans, colKey, buttonElement) {\n  const column = beans.columnModel.getCol(colKey);\n  beans.menuService.showColumnMenu({\n    column,\n    buttonElement,\n    positionBy: \"button\"\n  });\n}\nfunction showColumnMenuAfterMouseClick(beans, colKey, mouseEvent) {\n  let column = beans.columnModel.getCol(colKey);\n  if (!column) {\n    column = beans.columnModel.getColDefCol(colKey);\n  }\n  if (!column) {\n    _errorOnce(`column '${colKey}' not found`);\n    return;\n  }\n  beans.menuService.showColumnMenu({\n    column,\n    mouseEvent,\n    positionBy: \"mouse\"\n  });\n}\nfunction showColumnMenu(beans, colKey) {\n  const column = beans.columnModel.getCol(colKey);\n  if (!column) {\n    _errorOnce(`column '${colKey}' not found`);\n    return;\n  }\n  beans.menuService.showColumnMenu({\n    column,\n    positionBy: \"auto\"\n  });\n}\nfunction hidePopupMenu(beans) {\n  beans.menuService.hidePopupMenu();\n}\n\n// community-modules/core/src/api/rowApi.ts\nfunction redrawRows(beans, params = {}) {\n  const rowNodes = params ? params.rowNodes : void 0;\n  beans.frameworkOverrides.wrapIncoming(() => beans.rowRenderer.redrawRows(rowNodes));\n}\nfunction setRowNodeExpanded(beans, rowNode, expanded, expandParents, forceSync) {\n  beans.expansionService.setRowNodeExpanded(rowNode, expanded, expandParents, forceSync);\n}\nfunction getRowNode(beans, id) {\n  return beans.rowModel.getRowNode(id);\n}\nfunction addRenderedRowListener(beans, eventName, rowIndex, callback) {\n  beans.rowRenderer.addRenderedRowListener(eventName, rowIndex, callback);\n}\nfunction getRenderedNodes(beans) {\n  return beans.rowRenderer.getRenderedNodes();\n}\nfunction forEachNode(beans, callback, includeFooterNodes) {\n  beans.rowModel.forEachNode(callback, includeFooterNodes);\n}\nfunction getFirstDisplayedRow(beans) {\n  return getFirstDisplayedRowIndex(beans);\n}\nfunction getFirstDisplayedRowIndex(beans) {\n  return beans.rowRenderer.getFirstVirtualRenderedRow();\n}\nfunction getLastDisplayedRow(beans) {\n  return getLastDisplayedRowIndex(beans);\n}\nfunction getLastDisplayedRowIndex(beans) {\n  return beans.rowRenderer.getLastVirtualRenderedRow();\n}\nfunction getDisplayedRowAtIndex(beans, index) {\n  return beans.rowModel.getRow(index);\n}\nfunction getDisplayedRowCount(beans) {\n  return beans.rowModel.getRowCount();\n}\nfunction getModel(beans) {\n  return beans.rowModel;\n}\n\n// community-modules/core/src/api/rowSelectionApi.ts\nfunction setNodesSelected(beans, params) {\n  const allNodesValid = params.nodes.every((node) => {\n    if (node.rowPinned) {\n      _warnOnce(\"cannot select pinned rows\");\n      return false;\n    }\n    if (node.id === void 0) {\n      _warnOnce(\"cannot select node until id for node is known\");\n      return false;\n    }\n    return true;\n  });\n  if (!allNodesValid) {\n    return;\n  }\n  const { nodes, source, newValue } = params;\n  const nodesAsRowNode = nodes;\n  beans.selectionService.setNodesSelected({ nodes: nodesAsRowNode, source: source ?? \"api\", newValue });\n}\nfunction selectAll(beans, source = \"apiSelectAll\") {\n  beans.selectionService.selectAllRowNodes({ source });\n}\nfunction deselectAll(beans, source = \"apiSelectAll\") {\n  beans.selectionService.deselectAllRowNodes({ source });\n}\nfunction selectAllFiltered(beans, source = \"apiSelectAllFiltered\") {\n  beans.selectionService.selectAllRowNodes({ source, justFiltered: true });\n}\nfunction deselectAllFiltered(beans, source = \"apiSelectAllFiltered\") {\n  beans.selectionService.deselectAllRowNodes({ source, justFiltered: true });\n}\nfunction selectAllOnCurrentPage(beans, source = \"apiSelectAllCurrentPage\") {\n  beans.selectionService.selectAllRowNodes({ source, justCurrentPage: true });\n}\nfunction deselectAllOnCurrentPage(beans, source = \"apiSelectAllCurrentPage\") {\n  beans.selectionService.deselectAllRowNodes({ source, justCurrentPage: true });\n}\nfunction getSelectedNodes(beans) {\n  return beans.selectionService.getSelectedNodes();\n}\nfunction getSelectedRows(beans) {\n  return beans.selectionService.getSelectedRows();\n}\n\n// community-modules/core/src/api/sortApi.ts\nfunction onSortChanged(beans) {\n  beans.sortController.onSortChanged(\"api\");\n}\n\n// community-modules/core/src/api/apiModule.ts\nvar CoreApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/core-api\",\n  apiFunctions: {\n    getGridId,\n    destroy,\n    isDestroyed,\n    getGridOption,\n    setGridOption,\n    updateGridOptions\n  }\n});\nvar RowSelectionApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/row-selection-api\",\n  apiFunctions: {\n    setNodesSelected,\n    selectAll,\n    deselectAll,\n    selectAllFiltered,\n    deselectAllFiltered,\n    selectAllOnCurrentPage,\n    deselectAllOnCurrentPage,\n    getSelectedNodes,\n    getSelectedRows\n  }\n});\nvar RowApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/row-api\",\n  apiFunctions: {\n    redrawRows,\n    setRowNodeExpanded,\n    getRowNode,\n    addRenderedRowListener,\n    getRenderedNodes,\n    forEachNode,\n    getFirstDisplayedRow,\n    getFirstDisplayedRowIndex,\n    getLastDisplayedRow,\n    getLastDisplayedRowIndex,\n    getDisplayedRowAtIndex,\n    getDisplayedRowCount,\n    getModel\n  }\n});\nvar ScrollApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/scroll-api\",\n  apiFunctions: {\n    getVerticalPixelRange,\n    getHorizontalPixelRange,\n    ensureColumnVisible,\n    ensureIndexVisible,\n    ensureNodeVisible\n  }\n});\nvar KeyboardNavigationApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/keyboard-navigation-api\",\n  apiFunctions: {\n    getFocusedCell,\n    clearFocusedCell,\n    setFocusedCell,\n    setFocusedHeader,\n    tabToNextCell,\n    tabToPreviousCell\n  }\n});\nvar EventApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/event-api\",\n  apiFunctions: {\n    addEventListener,\n    addGlobalListener,\n    removeEventListener,\n    removeGlobalListener\n  }\n});\nvar CellApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/cell-api\",\n  apiFunctions: {\n    expireValueCache,\n    getValue,\n    getCellValue\n  }\n});\nvar CommunityMenuApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/menu-api\",\n  apiFunctions: {\n    showColumnMenuAfterButtonClick,\n    showColumnMenuAfterMouseClick,\n    showColumnMenu,\n    hidePopupMenu\n  }\n});\nvar SortApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/sort-api\",\n  apiFunctions: {\n    onSortChanged\n  }\n});\nvar CommunityApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/api\",\n  dependantModules: [\n    CoreApiModule,\n    PinnedRowApiModule,\n    RowSelectionApiModule,\n    ColumnApiModule,\n    RowApiModule,\n    DragApiModule,\n    ScrollApiModule,\n    OverlayApiModule,\n    KeyboardNavigationApiModule,\n    EventApiModule,\n    RenderApiModule,\n    CellApiModule,\n    CommunityMenuApiModule,\n    SortApiModule\n  ]\n});\n\n// community-modules/core/src/misc/state/stateApi.ts\nfunction getState(beans) {\n  return beans.stateService?.getState() ?? {};\n}\n\n// community-modules/core/src/misc/state/stateModelMigration.ts\nfunction migrateGridStateModel(state) {\n  state = { ...state };\n  if (!state.version) {\n    state.version = \"32.1.0\";\n  }\n  switch (state.version) {\n    case \"32.1.0\":\n      state = migrateV32_1(state);\n  }\n  return state;\n}\nfunction migrateV32_1(state) {\n  state.cellSelection = jsonGet(state, \"rangeSelection\");\n  return state;\n}\nfunction jsonGet(json, key) {\n  if (json && typeof json === \"object\") {\n    return json[key];\n  }\n}\n\n// community-modules/core/src/misc/state/stateService.ts\nvar StateService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"stateService\";\n    this.suppressEvents = true;\n    this.queuedUpdateSources = /* @__PURE__ */ new Set();\n    this.dispatchStateUpdateEventDebounced = _debounce(() => this.dispatchQueuedStateUpdateEvents(), 0);\n    // If user is doing a manual expand all node by node, we don't want to process one at a time.\n    // EVENT_ROW_GROUP_OPENED is already async, so no impact of making the state async here.\n    this.onRowGroupOpenedDebounced = _debounce(\n      () => this.updateCachedState(\"rowGroupExpansion\", this.getRowGroupExpansionState()),\n      0\n    );\n    // similar to row expansion, want to debounce. However, selection is synchronous, so need to mark as stale in case `getState` is called.\n    this.onRowSelectedDebounced = _debounce(() => {\n      this.staleStateKeys.delete(\"rowSelection\");\n      this.updateCachedState(\"rowSelection\", this.getRowSelectionState());\n    }, 0);\n    this.staleStateKeys = /* @__PURE__ */ new Set();\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.ctrlsService = beans.ctrlsService;\n    this.pivotResultColsService = beans.pivotResultColsService;\n    this.focusService = beans.focusService;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.columnGroupStateService = beans.columnGroupStateService;\n    this.columnGetStateService = beans.columnGetStateService;\n    this.paginationService = beans.paginationService;\n    this.selectionService = beans.selectionService;\n    this.expansionService = beans.expansionService;\n    this.columnAnimationService = beans.columnAnimationService;\n    this.columnApplyStateService = beans.columnApplyStateService;\n    this.sideBarService = beans.sideBarService;\n    this.rangeService = beans.rangeService;\n  }\n  postConstruct() {\n    this.isClientSideRowModel = _isClientSideRowModel(this.gos);\n    this.cachedState = this.getInitialState();\n    this.setCachedStateValue(\"version\", VERSION);\n    this.ctrlsService.whenReady(\n      this,\n      () => this.suppressEventsAndDispatchInitEvent(() => this.setupStateOnGridReady())\n    );\n    const [newColumnsLoadedDestroyFunc, rowCountReadyDestroyFunc, firstDataRenderedDestroyFunc] = this.addManagedEventListeners({\n      newColumnsLoaded: ({ source }) => {\n        if (source === \"gridInitializing\") {\n          newColumnsLoadedDestroyFunc();\n          this.suppressEventsAndDispatchInitEvent(() => this.setupStateOnColumnsInitialised());\n        }\n      },\n      rowCountReady: () => {\n        rowCountReadyDestroyFunc?.();\n        this.suppressEventsAndDispatchInitEvent(() => this.setupStateOnRowCountReady());\n      },\n      firstDataRendered: () => {\n        firstDataRenderedDestroyFunc?.();\n        this.suppressEventsAndDispatchInitEvent(() => this.setupStateOnFirstDataRendered());\n      }\n    });\n  }\n  getInitialState() {\n    return migrateGridStateModel(this.gos.get(\"initialState\") ?? {});\n  }\n  getState() {\n    if (this.staleStateKeys.size) {\n      this.refreshStaleState();\n    }\n    return this.cachedState;\n  }\n  setupStateOnGridReady() {\n    this.updateCachedState(\"sideBar\", this.getSideBarState());\n    const stateUpdater = () => this.updateCachedState(\"sideBar\", this.getSideBarState());\n    this.addManagedEventListeners({\n      toolPanelVisibleChanged: stateUpdater,\n      sideBarUpdated: stateUpdater\n    });\n  }\n  setupStateOnColumnsInitialised() {\n    const initialState = this.getInitialState();\n    this.setColumnState(initialState);\n    this.setColumnGroupState(initialState);\n    this.updateColumnState([\n      \"aggregation\",\n      \"columnOrder\",\n      \"columnPinning\",\n      \"columnSizing\",\n      \"columnVisibility\",\n      \"pivot\",\n      \"pivot\",\n      \"rowGroup\",\n      \"sort\"\n    ]);\n    this.updateCachedState(\"columnGroup\", this.getColumnGroupState());\n    const onUpdate = (state) => () => this.updateColumnState([state]);\n    this.addManagedEventListeners({\n      columnValueChanged: onUpdate(\"aggregation\"),\n      columnMoved: onUpdate(\"columnOrder\"),\n      columnPinned: onUpdate(\"columnPinning\"),\n      columnResized: onUpdate(\"columnSizing\"),\n      columnVisible: onUpdate(\"columnVisibility\"),\n      columnPivotChanged: onUpdate(\"pivot\"),\n      columnPivotModeChanged: onUpdate(\"pivot\"),\n      columnRowGroupChanged: onUpdate(\"rowGroup\"),\n      sortChanged: onUpdate(\"sort\"),\n      newColumnsLoaded: () => this.updateColumnState([\n        \"aggregation\",\n        \"columnOrder\",\n        \"columnPinning\",\n        \"columnSizing\",\n        \"columnVisibility\",\n        \"pivot\",\n        \"rowGroup\",\n        \"sort\"\n      ]),\n      columnGroupOpened: () => this.updateCachedState(\"columnGroup\", this.getColumnGroupState())\n    });\n  }\n  setupStateOnRowCountReady() {\n    const {\n      filter: filterState,\n      rowGroupExpansion: rowGroupExpansionState,\n      rowSelection: rowSelectionState,\n      pagination: paginationState\n    } = this.getInitialState();\n    const advancedFilterModel = this.gos.get(\"advancedFilterModel\");\n    if (filterState || advancedFilterModel) {\n      this.setFilterState(filterState, advancedFilterModel);\n    }\n    if (rowGroupExpansionState) {\n      this.setRowGroupExpansionState(rowGroupExpansionState);\n    }\n    if (rowSelectionState) {\n      this.setRowSelectionState(rowSelectionState);\n    }\n    if (paginationState) {\n      this.setPaginationState(paginationState);\n    }\n    this.updateCachedState(\"filter\", this.getFilterState());\n    this.updateCachedState(\"rowGroupExpansion\", this.getRowGroupExpansionState());\n    this.updateCachedState(\"rowSelection\", this.getRowSelectionState());\n    this.updateCachedState(\"pagination\", this.getPaginationState());\n    const updateRowGroupExpansionState = () => this.updateCachedState(\"rowGroupExpansion\", this.getRowGroupExpansionState());\n    this.addManagedEventListeners({\n      filterChanged: () => this.updateCachedState(\"filter\", this.getFilterState()),\n      rowGroupOpened: () => this.onRowGroupOpenedDebounced(),\n      expandOrCollapseAll: updateRowGroupExpansionState,\n      // `groupDefaultExpanded` updates expansion state without an expansion event\n      columnRowGroupChanged: updateRowGroupExpansionState,\n      rowDataUpdated: () => {\n        if (this.gos.get(\"groupDefaultExpanded\") !== 0) {\n          setTimeout(() => {\n            updateRowGroupExpansionState();\n          });\n        }\n      },\n      selectionChanged: () => {\n        this.staleStateKeys.add(\"rowSelection\");\n        this.onRowSelectedDebounced();\n      },\n      paginationChanged: (event) => {\n        if (event.newPage || event.newPageSize) {\n          this.updateCachedState(\"pagination\", this.getPaginationState());\n        }\n      }\n    });\n  }\n  setupStateOnFirstDataRendered() {\n    const {\n      scroll: scrollState,\n      cellSelection: cellSelectionState,\n      focusedCell: focusedCellState,\n      columnOrder: columnOrderState\n    } = this.getInitialState();\n    if (focusedCellState) {\n      this.setFocusedCellState(focusedCellState);\n    }\n    if (cellSelectionState) {\n      this.setCellSelectionState(cellSelectionState);\n    }\n    if (scrollState) {\n      this.setScrollState(scrollState);\n    }\n    this.setColumnPivotState(!!columnOrderState?.orderedColIds);\n    this.updateCachedState(\"sideBar\", this.getSideBarState());\n    this.updateCachedState(\"focusedCell\", this.getFocusedCellState());\n    const cellSelection = this.getRangeSelectionState();\n    this.updateCachedState(\"rangeSelection\", cellSelection);\n    this.updateCachedState(\"cellSelection\", cellSelection);\n    this.updateCachedState(\"scroll\", this.getScrollState());\n    this.addManagedEventListeners({\n      cellFocused: () => this.updateCachedState(\"focusedCell\", this.getFocusedCellState()),\n      cellSelectionChanged: (event) => {\n        if (event.finished) {\n          const cellSelection2 = this.getRangeSelectionState();\n          this.updateCachedState(\"rangeSelection\", cellSelection2);\n          this.updateCachedState(\"cellSelection\", cellSelection2);\n        }\n      },\n      bodyScrollEnd: () => this.updateCachedState(\"scroll\", this.getScrollState())\n    });\n  }\n  getColumnState() {\n    const pivotMode = this.columnModel.isPivotMode();\n    const sortColumns = [];\n    const groupColIds = [];\n    const aggregationColumns = [];\n    const pivotColIds = [];\n    const leftColIds = [];\n    const rightColIds = [];\n    const hiddenColIds = [];\n    const columnSizes = [];\n    const columns = [];\n    let defaultSortIndex = 0;\n    const columnState = this.columnGetStateService.getColumnState();\n    for (let i = 0; i < columnState.length; i++) {\n      const {\n        colId,\n        sort,\n        sortIndex,\n        rowGroup,\n        rowGroupIndex,\n        aggFunc,\n        pivot,\n        pivotIndex,\n        pinned,\n        hide,\n        width,\n        flex\n      } = columnState[i];\n      columns.push(colId);\n      if (sort) {\n        sortColumns[sortIndex ?? defaultSortIndex++] = { colId, sort };\n      }\n      if (rowGroup) {\n        groupColIds[rowGroupIndex ?? 0] = colId;\n      }\n      if (typeof aggFunc === \"string\") {\n        aggregationColumns.push({ colId, aggFunc });\n      }\n      if (pivot) {\n        pivotColIds[pivotIndex ?? 0] = colId;\n      }\n      if (pinned) {\n        (pinned === \"right\" ? rightColIds : leftColIds).push(colId);\n      }\n      if (hide) {\n        hiddenColIds.push(colId);\n      }\n      if (flex || width) {\n        columnSizes.push({ colId, flex: flex ?? void 0, width });\n      }\n    }\n    return {\n      sort: sortColumns.length ? { sortModel: sortColumns } : void 0,\n      rowGroup: groupColIds.length ? { groupColIds } : void 0,\n      aggregation: aggregationColumns.length ? { aggregationModel: aggregationColumns } : void 0,\n      pivot: pivotColIds.length || pivotMode ? { pivotMode, pivotColIds } : void 0,\n      columnPinning: leftColIds.length || rightColIds.length ? { leftColIds, rightColIds } : void 0,\n      columnVisibility: hiddenColIds.length ? { hiddenColIds } : void 0,\n      columnSizing: columnSizes.length ? { columnSizingModel: columnSizes } : void 0,\n      columnOrder: columns.length ? { orderedColIds: columns } : void 0\n    };\n  }\n  setColumnState(initialState) {\n    const {\n      sort: sortState,\n      rowGroup: groupState,\n      aggregation: aggregationState,\n      pivot: pivotState,\n      columnPinning: columnPinningState,\n      columnVisibility: columnVisibilityState,\n      columnSizing: columnSizingState,\n      columnOrder: columnOrderState,\n      partialColumnState\n    } = initialState;\n    const columnStateMap = {};\n    const getColumnState2 = (colId) => {\n      let columnState = columnStateMap[colId];\n      if (columnState) {\n        return columnState;\n      }\n      columnState = { colId };\n      columnStateMap[colId] = columnState;\n      return columnState;\n    };\n    const defaultState = partialColumnState ? {} : {\n      sort: null,\n      sortIndex: null,\n      rowGroup: null,\n      rowGroupIndex: null,\n      aggFunc: null,\n      pivot: null,\n      pivotIndex: null,\n      pinned: null,\n      hide: null,\n      flex: null\n    };\n    if (sortState) {\n      sortState.sortModel.forEach(({ colId, sort }, sortIndex) => {\n        const columnState = getColumnState2(colId);\n        columnState.sort = sort;\n        columnState.sortIndex = sortIndex;\n      });\n      defaultState.sort = null;\n      defaultState.sortIndex = null;\n    }\n    if (groupState) {\n      groupState.groupColIds.forEach((colId, rowGroupIndex) => {\n        const columnState = getColumnState2(colId);\n        columnState.rowGroup = true;\n        columnState.rowGroupIndex = rowGroupIndex;\n      });\n      defaultState.rowGroup = null;\n      defaultState.rowGroupIndex = null;\n    }\n    if (aggregationState) {\n      aggregationState.aggregationModel.forEach(({ colId, aggFunc }) => {\n        getColumnState2(colId).aggFunc = aggFunc;\n      });\n      defaultState.aggFunc = null;\n    }\n    if (pivotState) {\n      pivotState.pivotColIds.forEach((colId, pivotIndex) => {\n        const columnState = getColumnState2(colId);\n        columnState.pivot = true;\n        columnState.pivotIndex = pivotIndex;\n      });\n      this.gos.updateGridOptions({\n        options: { pivotMode: pivotState.pivotMode },\n        source: \"gridInitializing\"\n      });\n      defaultState.pivot = null;\n      defaultState.pivotIndex = null;\n    }\n    if (columnPinningState) {\n      columnPinningState.leftColIds.forEach((colId) => {\n        getColumnState2(colId).pinned = \"left\";\n      });\n      columnPinningState.rightColIds.forEach((colId) => {\n        getColumnState2(colId).pinned = \"right\";\n      });\n      defaultState.pinned = null;\n    }\n    if (columnVisibilityState) {\n      columnVisibilityState.hiddenColIds.forEach((colId) => {\n        getColumnState2(colId).hide = true;\n      });\n      defaultState.hide = null;\n    }\n    if (columnSizingState) {\n      columnSizingState.columnSizingModel.forEach(({ colId, flex, width }) => {\n        const columnState = getColumnState2(colId);\n        columnState.flex = flex ?? null;\n        columnState.width = width;\n      });\n      defaultState.flex = null;\n    }\n    const columns = columnOrderState?.orderedColIds;\n    const applyOrder = !!columns?.length;\n    const columnStates = applyOrder ? columns.map((colId) => getColumnState2(colId)) : Object.values(columnStateMap);\n    if (columnStates.length) {\n      this.columnStates = columnStates;\n      this.columnApplyStateService.applyColumnState(\n        {\n          state: columnStates,\n          applyOrder,\n          defaultState\n        },\n        \"gridInitializing\"\n      );\n    }\n  }\n  setColumnPivotState(applyOrder) {\n    const columnStates = this.columnStates;\n    this.columnStates = void 0;\n    const columnGroupStates = this.columnGroupStates;\n    this.columnGroupStates = void 0;\n    if (!this.pivotResultColsService.isPivotResultColsPresent()) {\n      return;\n    }\n    if (columnStates) {\n      const secondaryColumnStates = [];\n      for (const columnState of columnStates) {\n        if (this.pivotResultColsService.getPivotResultCol(columnState.colId)) {\n          secondaryColumnStates.push(columnState);\n        }\n      }\n      this.columnApplyStateService.applyColumnState(\n        {\n          state: secondaryColumnStates,\n          applyOrder\n        },\n        \"gridInitializing\"\n      );\n    }\n    if (columnGroupStates) {\n      this.columnGroupStateService.setColumnGroupState(columnGroupStates, \"gridInitializing\");\n    }\n  }\n  getColumnGroupState() {\n    const columnGroupState = this.columnGroupStateService.getColumnGroupState();\n    const openColumnGroups = [];\n    columnGroupState.forEach(({ groupId, open }) => {\n      if (open) {\n        openColumnGroups.push(groupId);\n      }\n    });\n    return openColumnGroups.length ? { openColumnGroupIds: openColumnGroups } : void 0;\n  }\n  setColumnGroupState(initialState) {\n    if (!Object.prototype.hasOwnProperty.call(initialState, \"columnGroup\")) {\n      return;\n    }\n    const openColumnGroups = new Set(initialState.columnGroup?.openColumnGroupIds);\n    const existingColumnGroupState = this.columnGroupStateService.getColumnGroupState();\n    const stateItems = existingColumnGroupState.map(({ groupId }) => {\n      const open = openColumnGroups.has(groupId);\n      if (open) {\n        openColumnGroups.delete(groupId);\n      }\n      return {\n        groupId,\n        open\n      };\n    });\n    openColumnGroups.forEach((groupId) => {\n      stateItems.push({\n        groupId,\n        open: true\n      });\n    });\n    if (stateItems.length) {\n      this.columnGroupStates = stateItems;\n    }\n    this.columnGroupStateService.setColumnGroupState(stateItems, \"gridInitializing\");\n  }\n  getFilterState() {\n    let filterModel = this.filterManager?.getFilterModel();\n    if (filterModel && Object.keys(filterModel).length === 0) {\n      filterModel = void 0;\n    }\n    const advancedFilterModel = this.filterManager?.getAdvancedFilterModel() ?? void 0;\n    return filterModel || advancedFilterModel ? { filterModel, advancedFilterModel } : void 0;\n  }\n  setFilterState(filterState, gridOptionAdvancedFilterModel) {\n    const { filterModel, advancedFilterModel } = filterState ?? {\n      advancedFilterModel: gridOptionAdvancedFilterModel\n    };\n    if (filterModel) {\n      this.filterManager?.setFilterModel(filterModel, \"columnFilter\");\n    }\n    if (advancedFilterModel) {\n      this.filterManager?.setAdvancedFilterModel(advancedFilterModel);\n    }\n  }\n  getRangeSelectionState() {\n    const cellRanges = this.rangeService?.getCellRanges().map((cellRange) => {\n      const { id, type, startRow, endRow, columns, startColumn } = cellRange;\n      return {\n        id,\n        type,\n        startRow,\n        endRow,\n        colIds: columns.map((column) => column.getColId()),\n        startColId: startColumn.getColId()\n      };\n    });\n    return cellRanges?.length ? { cellRanges } : void 0;\n  }\n  setCellSelectionState(cellSelectionState) {\n    const { gos, rangeService, columnModel, visibleColsService } = this;\n    if (!_isCellSelectionEnabled(gos) || !rangeService) {\n      return;\n    }\n    const cellRanges = [];\n    cellSelectionState.cellRanges.forEach((cellRange) => {\n      const columns = [];\n      cellRange.colIds.forEach((colId) => {\n        const column = columnModel.getCol(colId);\n        if (column) {\n          columns.push(column);\n        }\n      });\n      if (!columns.length) {\n        return;\n      }\n      let startColumn = columnModel.getCol(cellRange.startColId);\n      if (!startColumn) {\n        const allColumns = visibleColsService.getAllCols();\n        const columnSet = new Set(columns);\n        startColumn = allColumns.find((column) => columnSet.has(column));\n      }\n      cellRanges.push({\n        ...cellRange,\n        columns,\n        startColumn\n      });\n    });\n    if (_isUsingNewCellSelectionAPI(gos) && _getSuppressMultiRanges(gos) && cellRanges.length > 1) {\n      return _warnOnce(\"cannot add multiple ranges when `cellSelection.suppressMultiRanges = true`\");\n    }\n    rangeService.setCellRanges(cellRanges);\n  }\n  getScrollState() {\n    if (!this.isClientSideRowModel) {\n      return void 0;\n    }\n    const scrollFeature = this.ctrlsService.getGridBodyCtrl()?.getScrollFeature();\n    const { left } = scrollFeature?.getHScrollPosition() ?? { left: 0 };\n    const { top } = scrollFeature?.getVScrollPosition() ?? { top: 0 };\n    return top || left ? {\n      top,\n      left\n    } : void 0;\n  }\n  setScrollState(scrollState) {\n    if (!this.isClientSideRowModel) {\n      return;\n    }\n    const { top, left } = scrollState;\n    this.ctrlsService.getGridBodyCtrl()?.getScrollFeature().setScrollPosition(top, left);\n  }\n  getSideBarState() {\n    return this.sideBarService?.getSideBarComp()?.getState();\n  }\n  getFocusedCellState() {\n    if (!this.isClientSideRowModel) {\n      return void 0;\n    }\n    const focusedCell = this.focusService.getFocusedCell();\n    if (focusedCell) {\n      const { column, rowIndex, rowPinned } = focusedCell;\n      return {\n        colId: column.getColId(),\n        rowIndex,\n        rowPinned\n      };\n    }\n    return void 0;\n  }\n  setFocusedCellState(focusedCellState) {\n    if (!this.isClientSideRowModel) {\n      return;\n    }\n    const { colId, rowIndex, rowPinned } = focusedCellState;\n    this.focusService.setFocusedCell({\n      column: this.columnModel.getCol(colId),\n      rowIndex,\n      rowPinned,\n      forceBrowserFocus: true,\n      preventScrollOnBrowserFocus: true\n    });\n  }\n  getPaginationState() {\n    if (!this.paginationService) {\n      return void 0;\n    }\n    const page = this.paginationService.getCurrentPage();\n    const pageSize = !this.gos.get(\"paginationAutoPageSize\") ? this.paginationService.getPageSize() : void 0;\n    if (!page && !pageSize) {\n      return;\n    }\n    return { page, pageSize };\n  }\n  setPaginationState(paginationState) {\n    if (!this.paginationService) {\n      return;\n    }\n    if (paginationState.pageSize && !this.gos.get(\"paginationAutoPageSize\")) {\n      this.paginationService.setPageSize(paginationState.pageSize, \"initialState\");\n    }\n    if (typeof paginationState.page === \"number\") {\n      this.paginationService.setPage(paginationState.page);\n    }\n  }\n  getRowSelectionState() {\n    const selectionState = this.selectionService.getSelectionState();\n    const noSelections = !selectionState || !Array.isArray(selectionState) && (selectionState.selectAll === false || selectionState.selectAllChildren === false) && !selectionState?.toggledNodes?.length;\n    return noSelections ? void 0 : selectionState;\n  }\n  setRowSelectionState(rowSelectionState) {\n    this.selectionService.setSelectionState(rowSelectionState, \"gridInitializing\");\n  }\n  getRowGroupExpansionState() {\n    const expandedRowGroups = this.expansionService.getExpandedRows();\n    return expandedRowGroups.length ? {\n      expandedRowGroupIds: expandedRowGroups\n    } : void 0;\n  }\n  setRowGroupExpansionState(rowGroupExpansionState) {\n    this.expansionService.expandRows(rowGroupExpansionState.expandedRowGroupIds);\n  }\n  updateColumnState(features) {\n    const newColumnState = this.getColumnState();\n    let hasChanged = false;\n    Object.entries(newColumnState).forEach(([key, value]) => {\n      if (!_jsonEquals(value, this.cachedState[key])) {\n        hasChanged = true;\n      }\n    });\n    this.cachedState = {\n      ...this.cachedState,\n      ...newColumnState\n    };\n    if (hasChanged) {\n      this.dispatchStateUpdateEvent(features);\n    }\n  }\n  updateCachedState(key, value) {\n    const existingValue = this.cachedState[key];\n    this.setCachedStateValue(key, value);\n    if (!_jsonEquals(value, existingValue)) {\n      this.dispatchStateUpdateEvent([key]);\n    }\n  }\n  setCachedStateValue(key, value) {\n    this.cachedState = {\n      ...this.cachedState,\n      [key]: value\n    };\n  }\n  refreshStaleState() {\n    this.staleStateKeys.forEach((key) => {\n      switch (key) {\n        case \"rowSelection\":\n          this.setCachedStateValue(key, this.getRowSelectionState());\n          break;\n      }\n    });\n    this.staleStateKeys.clear();\n  }\n  dispatchStateUpdateEvent(sources) {\n    if (this.suppressEvents) {\n      return;\n    }\n    sources.forEach((source) => this.queuedUpdateSources.add(source));\n    this.dispatchStateUpdateEventDebounced();\n  }\n  dispatchQueuedStateUpdateEvents() {\n    const sources = Array.from(this.queuedUpdateSources);\n    this.queuedUpdateSources.clear();\n    this.eventService.dispatchEvent({\n      type: \"stateUpdated\",\n      sources,\n      state: this.cachedState\n    });\n  }\n  suppressEventsAndDispatchInitEvent(updateFunc) {\n    this.suppressEvents = true;\n    this.columnAnimationService.setSuppressAnimation(true);\n    updateFunc();\n    setTimeout(() => {\n      this.suppressEvents = false;\n      this.queuedUpdateSources.clear();\n      if (!this.isAlive()) {\n        return;\n      }\n      this.columnAnimationService.setSuppressAnimation(false);\n      this.dispatchStateUpdateEvent([\"gridInitializing\"]);\n    });\n  }\n};\n\n// community-modules/core/src/misc/state/stateModule.ts\nvar StateCoreModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/state-core\",\n  beans: [StateService]\n});\nvar StateApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/state-api\",\n  apiFunctions: {\n    getState\n  },\n  dependantModules: [StateCoreModule]\n});\nvar StateModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/state\",\n  dependantModules: [StateCoreModule, StateApiModule]\n});\n\n// community-modules/core/src/pagination/paginationApi.ts\nfunction paginationIsLastPageFound(beans) {\n  return beans.rowModel.isLastRowIndexKnown();\n}\nfunction paginationGetPageSize(beans) {\n  return beans.paginationService?.getPageSize() ?? 100;\n}\nfunction paginationGetCurrentPage(beans) {\n  return beans.paginationService?.getCurrentPage() ?? 0;\n}\nfunction paginationGetTotalPages(beans) {\n  return beans.paginationService?.getTotalPages() ?? 1;\n}\nfunction paginationGetRowCount(beans) {\n  return beans.paginationService ? beans.paginationService.getMasterRowCount() : beans.rowModel.getRowCount();\n}\nfunction paginationGoToNextPage(beans) {\n  beans.paginationService?.goToNextPage();\n}\nfunction paginationGoToPreviousPage(beans) {\n  beans.paginationService?.goToPreviousPage();\n}\nfunction paginationGoToFirstPage(beans) {\n  beans.paginationService?.goToFirstPage();\n}\nfunction paginationGoToLastPage(beans) {\n  beans.paginationService?.goToLastPage();\n}\nfunction paginationGoToPage(beans, page) {\n  beans.paginationService?.goToPage(page);\n}\n\n// community-modules/core/src/pagination/paginationAutoPageSizeService.ts\nvar PaginationAutoPageSizeService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"paginationAutoPageSizeService\";\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.paginationService = beans.paginationService;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => {\n      this.centerRowsCtrl = p.center;\n      const listener = this.checkPageSize.bind(this);\n      this.addManagedEventListeners({\n        bodyHeightChanged: listener,\n        scrollVisibilityChanged: listener\n      });\n      this.addManagedPropertyListener(\"paginationAutoPageSize\", this.onPaginationAutoSizeChanged.bind(this));\n      this.checkPageSize();\n    });\n  }\n  notActive() {\n    return !this.gos.get(\"paginationAutoPageSize\") || this.centerRowsCtrl == null;\n  }\n  onPaginationAutoSizeChanged() {\n    if (this.notActive()) {\n      this.paginationService.unsetAutoCalculatedPageSize();\n    } else {\n      this.checkPageSize();\n    }\n  }\n  checkPageSize() {\n    if (this.notActive()) {\n      return;\n    }\n    const bodyHeight = this.centerRowsCtrl.getViewportSizeFeature().getBodyHeight();\n    if (bodyHeight > 0) {\n      const update = () => {\n        const rowHeight = Math.max(_getRowHeightAsNumber(this.gos), 1);\n        const newPageSize = Math.floor(bodyHeight / rowHeight);\n        this.paginationService.setPageSize(newPageSize, \"autoCalculated\");\n      };\n      if (!this.isBodyRendered) {\n        update();\n        this.isBodyRendered = true;\n      } else {\n        _debounce(() => update(), 50)();\n      }\n    } else {\n      this.isBodyRendered = false;\n    }\n  }\n};\n\n// community-modules/core/src/utils/focus.ts\nfunction _addFocusableContainerListener(comp, eGui, focusService) {\n  comp.addManagedElementListeners(eGui, {\n    keydown: (e) => {\n      if (!e.defaultPrevented && e.key === KeyCode.TAB) {\n        const backwards = e.shiftKey;\n        if (!focusService.findNextFocusableElement(eGui, false, backwards)) {\n          if (focusService.focusNextGridCoreContainer(backwards)) {\n            e.preventDefault();\n          }\n        }\n      }\n    }\n  });\n}\n\n// community-modules/core/src/pagination/pageSizeSelector/pageSizeSelectorComp.ts\nvar paginationPageSizeSelector = \"paginationPageSizeSelector\";\nvar PageSizeSelectorComp = class extends Component {\n  constructor() {\n    super(\n      /* html */\n      `<span class=\"ag-paging-page-size\"></span>`\n    );\n    this.hasEmptyOption = false;\n    this.handlePageSizeItemSelected = () => {\n      if (!this.selectPageSizeComp) {\n        return;\n      }\n      const newValue = this.selectPageSizeComp.getValue();\n      if (!newValue) {\n        return;\n      }\n      const paginationPageSize = Number(newValue);\n      if (isNaN(paginationPageSize) || paginationPageSize < 1 || paginationPageSize === this.paginationService.getPageSize()) {\n        return;\n      }\n      this.paginationService.setPageSize(paginationPageSize, \"pageSizeSelector\");\n      if (this.hasEmptyOption) {\n        this.toggleSelectDisplay(true);\n      }\n      this.selectPageSizeComp.getFocusableElement().focus();\n    };\n  }\n  wireBeans(beans) {\n    this.paginationService = beans.paginationService;\n  }\n  postConstruct() {\n    this.addManagedPropertyListener(paginationPageSizeSelector, () => {\n      this.onPageSizeSelectorValuesChange();\n    });\n    this.addManagedEventListeners({ paginationChanged: (event) => this.handlePaginationChanged(event) });\n  }\n  handlePaginationChanged(paginationChangedEvent) {\n    if (!this.selectPageSizeComp || !paginationChangedEvent?.newPageSize) {\n      return;\n    }\n    const paginationPageSize = this.paginationService.getPageSize();\n    if (this.getPageSizeSelectorValues().includes(paginationPageSize)) {\n      this.selectPageSizeComp.setValue(paginationPageSize.toString());\n    } else {\n      if (this.hasEmptyOption) {\n        this.selectPageSizeComp.setValue(\"\");\n      } else {\n        this.toggleSelectDisplay(true);\n      }\n    }\n  }\n  toggleSelectDisplay(show) {\n    if (this.selectPageSizeComp && !show) {\n      this.reset();\n    }\n    if (!show) {\n      return;\n    }\n    this.reloadPageSizesSelector();\n    if (!this.selectPageSizeComp) {\n      return;\n    }\n  }\n  reset() {\n    _clearElement(this.getGui());\n    if (!this.selectPageSizeComp) {\n      return;\n    }\n    this.selectPageSizeComp = this.destroyBean(this.selectPageSizeComp);\n  }\n  onPageSizeSelectorValuesChange() {\n    if (!this.selectPageSizeComp) {\n      return;\n    }\n    if (this.shouldShowPageSizeSelector()) {\n      this.reloadPageSizesSelector();\n    }\n  }\n  shouldShowPageSizeSelector() {\n    return this.gos.get(\"pagination\") && !this.gos.get(\"suppressPaginationPanel\") && !this.gos.get(\"paginationAutoPageSize\") && this.gos.get(paginationPageSizeSelector) !== false;\n  }\n  reloadPageSizesSelector() {\n    const pageSizeOptions = this.getPageSizeSelectorValues();\n    const paginationPageSizeOption = this.paginationService.getPageSize();\n    const shouldAddAndSelectEmptyOption = !paginationPageSizeOption || !pageSizeOptions.includes(paginationPageSizeOption);\n    if (shouldAddAndSelectEmptyOption) {\n      const pageSizeSet = this.gos.exists(\"paginationPageSize\");\n      const pageSizesSet = this.gos.get(paginationPageSizeSelector) !== true;\n      _warnOnce(\n        `'paginationPageSize=${paginationPageSizeOption}'${pageSizeSet ? \"\" : \" (default value)\"}, but ${paginationPageSizeOption} is not included in${pageSizesSet ? \"\" : \" the default\"} paginationPageSizeSelector=[${pageSizeOptions.join(\", \")}].`\n      );\n      if (!pageSizesSet) {\n        _warnOnce(\n          `Either set '${paginationPageSizeSelector}' to an array that includes ${paginationPageSizeOption} or to 'false' to disable the page size selector.`\n        );\n      }\n      pageSizeOptions.unshift(\"\");\n    }\n    const value = String(shouldAddAndSelectEmptyOption ? \"\" : paginationPageSizeOption);\n    if (this.selectPageSizeComp) {\n      if (!_areEqual(this.pageSizeOptions, pageSizeOptions)) {\n        this.selectPageSizeComp.clearOptions().addOptions(this.createPageSizeSelectOptions(pageSizeOptions));\n        this.pageSizeOptions = pageSizeOptions;\n      }\n      this.selectPageSizeComp.setValue(value, true);\n    } else {\n      this.createPageSizeSelectorComp(pageSizeOptions, value);\n    }\n    this.hasEmptyOption = shouldAddAndSelectEmptyOption;\n  }\n  createPageSizeSelectOptions(pageSizeOptions) {\n    return pageSizeOptions.map((value) => ({\n      value: String(value)\n    }));\n  }\n  createPageSizeSelectorComp(pageSizeOptions, value) {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const localisedLabel = localeTextFunc(\"pageSizeSelectorLabel\", \"Page Size:\");\n    const localisedAriaLabel = localeTextFunc(\"ariaPageSizeSelectorLabel\", \"Page Size\");\n    this.selectPageSizeComp = this.createManagedBean(new AgSelect()).addOptions(this.createPageSizeSelectOptions(pageSizeOptions)).setValue(value).setAriaLabel(localisedAriaLabel).setLabel(localisedLabel).onValueChange(() => this.handlePageSizeItemSelected());\n    this.appendChild(this.selectPageSizeComp);\n  }\n  getPageSizeSelectorValues() {\n    const defaultValues = [20, 50, 100];\n    const paginationPageSizeSelectorValues = this.gos.get(paginationPageSizeSelector);\n    if (!Array.isArray(paginationPageSizeSelectorValues) || _missingOrEmpty(paginationPageSizeSelectorValues)) {\n      return defaultValues;\n    }\n    return [...paginationPageSizeSelectorValues].sort((a, b) => a - b);\n  }\n  destroy() {\n    this.toggleSelectDisplay(false);\n    super.destroy();\n  }\n};\nvar PageSizeSelectorSelector = {\n  selector: \"AG-PAGE-SIZE-SELECTOR\",\n  component: PageSizeSelectorComp\n};\n\n// community-modules/core/src/pagination/paginationComp.ts\nvar PaginationComp = class extends TabGuardComp {\n  constructor() {\n    super();\n    this.btFirst = RefPlaceholder;\n    this.btPrevious = RefPlaceholder;\n    this.btNext = RefPlaceholder;\n    this.btLast = RefPlaceholder;\n    this.lbRecordCount = RefPlaceholder;\n    this.lbFirstRowOnPage = RefPlaceholder;\n    this.lbLastRowOnPage = RefPlaceholder;\n    this.lbCurrent = RefPlaceholder;\n    this.lbTotal = RefPlaceholder;\n    this.pageSizeComp = RefPlaceholder;\n    this.previousAndFirstButtonsDisabled = false;\n    this.nextButtonDisabled = false;\n    this.lastButtonDisabled = false;\n    this.areListenersSetup = false;\n    this.allowFocusInnerElement = false;\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.paginationService = beans.paginationService;\n    this.focusService = beans.focusService;\n    this.ariaAnnouncementService = beans.ariaAnnouncementService;\n  }\n  postConstruct() {\n    const isRtl = this.gos.get(\"enableRtl\");\n    this.setTemplate(this.getTemplate(), [PageSizeSelectorSelector]);\n    const { btFirst, btPrevious, btNext, btLast } = this;\n    this.activateTabIndex([btFirst, btPrevious, btNext, btLast]);\n    btFirst.insertAdjacentElement(\"afterbegin\", _createIconNoSpan(isRtl ? \"last\" : \"first\", this.gos));\n    btPrevious.insertAdjacentElement(\"afterbegin\", _createIconNoSpan(isRtl ? \"next\" : \"previous\", this.gos));\n    btNext.insertAdjacentElement(\"afterbegin\", _createIconNoSpan(isRtl ? \"previous\" : \"next\", this.gos));\n    btLast.insertAdjacentElement(\"afterbegin\", _createIconNoSpan(isRtl ? \"first\" : \"last\", this.gos));\n    this.addManagedPropertyListener(\"pagination\", this.onPaginationChanged.bind(this));\n    this.addManagedPropertyListener(\"suppressPaginationPanel\", this.onPaginationChanged.bind(this));\n    this.addManagedPropertyListeners(\n      [\"paginationPageSizeSelector\", \"paginationAutoPageSize\", \"suppressPaginationPanel\"],\n      () => this.onPageSizeRelatedOptionsChange()\n    );\n    this.pageSizeComp.toggleSelectDisplay(this.pageSizeComp.shouldShowPageSizeSelector());\n    this.initialiseTabGuard({\n      // prevent tab guard default logic\n      onTabKeyDown: () => {\n      },\n      focusInnerElement: (fromBottom) => {\n        if (this.allowFocusInnerElement) {\n          this.tabGuardFeature.getTabGuardCtrl().focusInnerElement(fromBottom);\n        } else {\n          this.focusService.focusGridInnerElement(fromBottom);\n        }\n      },\n      forceFocusOutWhenTabGuardsAreEmpty: true\n    });\n    this.onPaginationChanged();\n  }\n  setAllowFocus(allowFocus) {\n    this.allowFocusInnerElement = allowFocus;\n  }\n  onPaginationChanged() {\n    const isPaging = this.gos.get(\"pagination\");\n    const paginationPanelEnabled = isPaging && !this.gos.get(\"suppressPaginationPanel\");\n    this.setDisplayed(paginationPanelEnabled);\n    if (!paginationPanelEnabled) {\n      return;\n    }\n    this.setupListeners();\n    this.enableOrDisableButtons();\n    this.updateLabels();\n    this.onPageSizeRelatedOptionsChange();\n  }\n  onPageSizeRelatedOptionsChange() {\n    this.pageSizeComp.toggleSelectDisplay(this.pageSizeComp.shouldShowPageSizeSelector());\n  }\n  setupListeners() {\n    if (!this.areListenersSetup) {\n      this.addManagedEventListeners({ paginationChanged: this.onPaginationChanged.bind(this) });\n      [\n        { el: this.btFirst, fn: this.onBtFirst.bind(this) },\n        { el: this.btPrevious, fn: this.onBtPrevious.bind(this) },\n        { el: this.btNext, fn: this.onBtNext.bind(this) },\n        { el: this.btLast, fn: this.onBtLast.bind(this) }\n      ].forEach((item) => {\n        const { el, fn } = item;\n        this.addManagedListeners(el, {\n          click: fn,\n          keydown: (e) => {\n            if (e.key === KeyCode.ENTER || e.key === KeyCode.SPACE) {\n              e.preventDefault();\n              fn();\n            }\n          }\n        });\n      });\n      _addFocusableContainerListener(this, this.getGui(), this.focusService);\n      this.areListenersSetup = true;\n    }\n  }\n  onBtFirst() {\n    if (!this.previousAndFirstButtonsDisabled) {\n      this.paginationService.goToFirstPage();\n    }\n  }\n  formatNumber(value) {\n    const userFunc = this.gos.getCallback(\"paginationNumberFormatter\");\n    if (userFunc) {\n      const params = { value };\n      return userFunc(params);\n    }\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const thousandSeparator = localeTextFunc(\"thousandSeparator\", \",\");\n    const decimalSeparator = localeTextFunc(\"decimalSeparator\", \".\");\n    return _formatNumberCommas(value, thousandSeparator, decimalSeparator);\n  }\n  getTemplate() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const strPage = localeTextFunc(\"page\", \"Page\");\n    const strTo = localeTextFunc(\"to\", \"to\");\n    const strOf = localeTextFunc(\"of\", \"of\");\n    const strFirst = localeTextFunc(\"firstPage\", \"First Page\");\n    const strPrevious = localeTextFunc(\"previousPage\", \"Previous Page\");\n    const strNext = localeTextFunc(\"nextPage\", \"Next Page\");\n    const strLast = localeTextFunc(\"lastPage\", \"Last Page\");\n    const compId = this.getCompId();\n    return (\n      /* html */\n      `<div class=\"ag-paging-panel ag-unselectable\" id=\"ag-${compId}\">\n                <ag-page-size-selector data-ref=\"pageSizeComp\"></ag-page-size-selector>\n                <span class=\"ag-paging-row-summary-panel\">\n                    <span id=\"ag-${compId}-first-row\" data-ref=\"lbFirstRowOnPage\" class=\"ag-paging-row-summary-panel-number\"></span>\n                    <span id=\"ag-${compId}-to\">${strTo}</span>\n                    <span id=\"ag-${compId}-last-row\" data-ref=\"lbLastRowOnPage\" class=\"ag-paging-row-summary-panel-number\"></span>\n                    <span id=\"ag-${compId}-of\">${strOf}</span>\n                    <span id=\"ag-${compId}-row-count\" data-ref=\"lbRecordCount\" class=\"ag-paging-row-summary-panel-number\"></span>\n                </span>\n                <span class=\"ag-paging-page-summary-panel\" role=\"presentation\">\n                    <div data-ref=\"btFirst\" class=\"ag-button ag-paging-button\" role=\"button\" aria-label=\"${strFirst}\"></div>\n                    <div data-ref=\"btPrevious\" class=\"ag-button ag-paging-button\" role=\"button\" aria-label=\"${strPrevious}\"></div>\n                    <span class=\"ag-paging-description\">\n                        <span id=\"ag-${compId}-start-page\">${strPage}</span>\n                        <span id=\"ag-${compId}-start-page-number\" data-ref=\"lbCurrent\" class=\"ag-paging-number\"></span>\n                        <span id=\"ag-${compId}-of-page\">${strOf}</span>\n                        <span id=\"ag-${compId}-of-page-number\" data-ref=\"lbTotal\" class=\"ag-paging-number\"></span>\n                    </span>\n                    <div data-ref=\"btNext\" class=\"ag-button ag-paging-button\" role=\"button\" aria-label=\"${strNext}\"></div>\n                    <div data-ref=\"btLast\" class=\"ag-button ag-paging-button\" role=\"button\" aria-label=\"${strLast}\"></div>\n                </span>\n            </div>`\n    );\n  }\n  onBtNext() {\n    if (!this.nextButtonDisabled) {\n      this.paginationService.goToNextPage();\n    }\n  }\n  onBtPrevious() {\n    if (!this.previousAndFirstButtonsDisabled) {\n      this.paginationService.goToPreviousPage();\n    }\n  }\n  onBtLast() {\n    if (!this.lastButtonDisabled) {\n      this.paginationService.goToLastPage();\n    }\n  }\n  enableOrDisableButtons() {\n    const currentPage = this.paginationService.getCurrentPage();\n    const maxRowFound = this.rowModel.isLastRowIndexKnown();\n    const totalPages = this.paginationService.getTotalPages();\n    this.previousAndFirstButtonsDisabled = currentPage === 0;\n    this.toggleButtonDisabled(this.btFirst, this.previousAndFirstButtonsDisabled);\n    this.toggleButtonDisabled(this.btPrevious, this.previousAndFirstButtonsDisabled);\n    const zeroPagesToDisplay = this.isZeroPagesToDisplay();\n    const onLastPage = currentPage === totalPages - 1;\n    this.nextButtonDisabled = onLastPage || zeroPagesToDisplay;\n    this.lastButtonDisabled = !maxRowFound || zeroPagesToDisplay || currentPage === totalPages - 1;\n    this.toggleButtonDisabled(this.btNext, this.nextButtonDisabled);\n    this.toggleButtonDisabled(this.btLast, this.lastButtonDisabled);\n  }\n  toggleButtonDisabled(button, disabled) {\n    _setAriaDisabled(button, disabled);\n    button.classList.toggle(\"ag-disabled\", disabled);\n  }\n  isZeroPagesToDisplay() {\n    const maxRowFound = this.rowModel.isLastRowIndexKnown();\n    const totalPages = this.paginationService.getTotalPages();\n    return maxRowFound && totalPages === 0;\n  }\n  updateLabels() {\n    const lastPageFound = this.rowModel.isLastRowIndexKnown();\n    const totalPages = this.paginationService.getTotalPages();\n    const masterRowCount = this.paginationService.getMasterRowCount();\n    const rowCount = lastPageFound ? masterRowCount : null;\n    if (rowCount === 1) {\n      const firstRow = this.rowModel.getRow(0);\n      const hiddenGroupRow = firstRow && firstRow.group && !(firstRow.groupData || firstRow.aggData);\n      if (hiddenGroupRow) {\n        this.setTotalLabelsToZero();\n        return;\n      }\n    }\n    const currentPage = this.paginationService.getCurrentPage();\n    const pageSize = this.paginationService.getPageSize();\n    let startRow;\n    let endRow;\n    if (this.isZeroPagesToDisplay()) {\n      startRow = endRow = 0;\n    } else {\n      startRow = pageSize * currentPage + 1;\n      endRow = startRow + pageSize - 1;\n      if (lastPageFound && endRow > rowCount) {\n        endRow = rowCount;\n      }\n    }\n    const theoreticalEndRow = startRow + pageSize - 1;\n    const isLoadingPageSize = !lastPageFound && masterRowCount < theoreticalEndRow;\n    const lbFirstRowOnPage = this.formatNumber(startRow);\n    this.lbFirstRowOnPage.textContent = lbFirstRowOnPage;\n    let lbLastRowOnPage;\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    if (isLoadingPageSize) {\n      lbLastRowOnPage = localeTextFunc(\"pageLastRowUnknown\", \"?\");\n    } else {\n      lbLastRowOnPage = this.formatNumber(endRow);\n    }\n    this.lbLastRowOnPage.textContent = lbLastRowOnPage;\n    const pagesExist = totalPages > 0;\n    const toDisplay = pagesExist ? currentPage + 1 : 0;\n    const lbCurrent = this.formatNumber(toDisplay);\n    this.lbCurrent.textContent = lbCurrent;\n    let lbTotal;\n    let lbRecordCount;\n    if (lastPageFound) {\n      lbTotal = this.formatNumber(totalPages);\n      lbRecordCount = this.formatNumber(rowCount);\n    } else {\n      const moreText = localeTextFunc(\"more\", \"more\");\n      lbTotal = moreText;\n      lbRecordCount = moreText;\n    }\n    this.lbTotal.textContent = lbTotal;\n    this.lbRecordCount.textContent = lbRecordCount;\n    this.announceAriaStatus(lbFirstRowOnPage, lbLastRowOnPage, lbRecordCount, lbCurrent, lbTotal);\n  }\n  announceAriaStatus(lbFirstRowOnPage, lbLastRowOnPage, lbRecordCount, lbCurrent, lbTotal) {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const strPage = localeTextFunc(\"page\", \"Page\");\n    const strTo = localeTextFunc(\"to\", \"to\");\n    const strOf = localeTextFunc(\"of\", \"of\");\n    const ariaRowStatus = `${lbFirstRowOnPage} ${strTo} ${lbLastRowOnPage} ${strOf} ${lbRecordCount}`;\n    const ariaPageStatus = `${strPage} ${lbCurrent} ${strOf} ${lbTotal}`;\n    if (ariaRowStatus !== this.ariaRowStatus) {\n      this.ariaRowStatus = ariaRowStatus;\n      this.ariaAnnouncementService.announceValue(ariaRowStatus, \"paginationRow\");\n    }\n    if (ariaPageStatus !== this.ariaPageStatus) {\n      this.ariaPageStatus = ariaPageStatus;\n      this.ariaAnnouncementService.announceValue(ariaPageStatus, \"paginationPage\");\n    }\n  }\n  setTotalLabelsToZero() {\n    const strZero = this.formatNumber(0);\n    this.lbFirstRowOnPage.textContent = strZero;\n    this.lbCurrent.textContent = strZero;\n    this.lbLastRowOnPage.textContent = strZero;\n    this.lbTotal.textContent = strZero;\n    this.lbRecordCount.textContent = strZero;\n    this.announceAriaStatus(strZero, strZero, strZero, strZero, strZero);\n  }\n};\nvar PaginationSelector = {\n  selector: \"AG-PAGINATION\",\n  component: PaginationComp\n};\n\n// community-modules/core/src/pagination/paginationService.ts\nvar PaginationService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"paginationService\";\n    this.currentPage = 0;\n    this.topDisplayedRowIndex = 0;\n    this.bottomDisplayedRowIndex = 0;\n    this.masterRowCount = 0;\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.pageBoundsService = beans.pageBoundsService;\n  }\n  postConstruct() {\n    this.active = this.gos.get(\"pagination\");\n    this.pageSizeFromGridOptions = this.gos.get(\"paginationPageSize\");\n    this.paginateChildRows = this.isPaginateChildRows();\n    this.addManagedPropertyListener(\"pagination\", this.onPaginationGridOptionChanged.bind(this));\n    this.addManagedPropertyListener(\"paginationPageSize\", this.onPageSizeGridOptionChanged.bind(this));\n  }\n  getPaginationSelector() {\n    return PaginationSelector;\n  }\n  isPaginateChildRows() {\n    const shouldPaginate = this.gos.get(\"groupRemoveSingleChildren\") || this.gos.get(\"groupRemoveLowestSingleChildren\");\n    if (shouldPaginate) {\n      return true;\n    }\n    return this.gos.get(\"paginateChildRows\");\n  }\n  onPaginationGridOptionChanged() {\n    this.active = this.gos.get(\"pagination\");\n    this.calculatePages();\n    this.dispatchPaginationChangedEvent({ keepRenderedRows: true });\n  }\n  onPageSizeGridOptionChanged() {\n    this.setPageSize(this.gos.get(\"paginationPageSize\"), \"gridOptions\");\n  }\n  goToPage(page) {\n    if (!this.active || this.currentPage === page || typeof this.currentPage !== \"number\") {\n      return;\n    }\n    this.currentPage = page;\n    this.calculatePages();\n    this.dispatchPaginationChangedEvent({ newPage: true });\n  }\n  isRowPresent(rowNode) {\n    const nodeIsInPage = rowNode.rowIndex >= this.topDisplayedRowIndex && rowNode.rowIndex <= this.bottomDisplayedRowIndex;\n    return nodeIsInPage;\n  }\n  getPageForIndex(index) {\n    return Math.floor(index / this.pageSize);\n  }\n  goToPageWithIndex(index) {\n    if (!this.active) {\n      return;\n    }\n    const pageNumber = this.getPageForIndex(index);\n    this.goToPage(pageNumber);\n  }\n  isRowInPage(row) {\n    if (!this.active) {\n      return true;\n    }\n    const rowPage = this.getPageForIndex(row.rowIndex);\n    return rowPage === this.currentPage;\n  }\n  getCurrentPage() {\n    return this.currentPage;\n  }\n  goToNextPage() {\n    this.goToPage(this.currentPage + 1);\n  }\n  goToPreviousPage() {\n    this.goToPage(this.currentPage - 1);\n  }\n  goToFirstPage() {\n    this.goToPage(0);\n  }\n  goToLastPage() {\n    const rowCount = this.rowModel.getRowCount();\n    const lastPage = Math.floor(rowCount / this.pageSize);\n    this.goToPage(lastPage);\n  }\n  getPageSize() {\n    return this.pageSize;\n  }\n  getTotalPages() {\n    return this.totalPages;\n  }\n  /** This is only for state setting before data has been loaded */\n  setPage(page) {\n    this.currentPage = page;\n  }\n  get pageSize() {\n    if (_exists(this.pageSizeAutoCalculated) && this.gos.get(\"paginationAutoPageSize\")) {\n      return this.pageSizeAutoCalculated;\n    }\n    if (_exists(this.pageSizeFromPageSizeSelector)) {\n      return this.pageSizeFromPageSizeSelector;\n    }\n    if (_exists(this.pageSizeFromInitialState)) {\n      return this.pageSizeFromInitialState;\n    }\n    if (_exists(this.pageSizeFromGridOptions)) {\n      return this.pageSizeFromGridOptions;\n    }\n    return this.defaultPageSize;\n  }\n  calculatePages() {\n    if (this.active) {\n      if (this.paginateChildRows) {\n        this.calculatePagesAllRows();\n      } else {\n        this.calculatePagesMasterRowsOnly();\n      }\n    } else {\n      this.calculatedPagesNotActive();\n    }\n    this.pageBoundsService.calculateBounds(this.topDisplayedRowIndex, this.bottomDisplayedRowIndex);\n  }\n  unsetAutoCalculatedPageSize() {\n    if (this.pageSizeAutoCalculated === void 0) {\n      return;\n    }\n    const oldPageSize = this.pageSizeAutoCalculated;\n    this.pageSizeAutoCalculated = void 0;\n    if (this.pageSize === oldPageSize) {\n      return;\n    }\n    this.calculatePages();\n    this.dispatchPaginationChangedEvent({ newPageSize: true });\n  }\n  setPageSize(size, source) {\n    const currentSize = this.pageSize;\n    switch (source) {\n      case \"autoCalculated\":\n        this.pageSizeAutoCalculated = size;\n        break;\n      case \"pageSizeSelector\":\n        this.pageSizeFromPageSizeSelector = size;\n        if (this.currentPage !== 0) {\n          this.goToFirstPage();\n        }\n        break;\n      case \"initialState\":\n        this.pageSizeFromInitialState = size;\n        break;\n      case \"gridOptions\":\n        this.pageSizeFromGridOptions = size;\n        this.pageSizeFromInitialState = void 0;\n        this.pageSizeFromPageSizeSelector = void 0;\n        if (this.currentPage !== 0) {\n          this.goToFirstPage();\n        }\n        break;\n    }\n    if (currentSize !== this.pageSize) {\n      this.calculatePages();\n      this.dispatchPaginationChangedEvent({ newPageSize: true, keepRenderedRows: true });\n    }\n  }\n  setZeroRows() {\n    this.masterRowCount = 0;\n    this.topDisplayedRowIndex = 0;\n    this.bottomDisplayedRowIndex = -1;\n    this.currentPage = 0;\n    this.totalPages = 0;\n  }\n  adjustCurrentPageIfInvalid() {\n    if (this.currentPage >= this.totalPages) {\n      this.currentPage = this.totalPages - 1;\n    }\n    if (!isFinite(this.currentPage) || isNaN(this.currentPage) || this.currentPage < 0) {\n      this.currentPage = 0;\n    }\n  }\n  calculatePagesMasterRowsOnly() {\n    this.masterRowCount = this.rowModel.getTopLevelRowCount();\n    if (this.masterRowCount <= 0) {\n      this.setZeroRows();\n      return;\n    }\n    const masterLastRowIndex = this.masterRowCount - 1;\n    this.totalPages = Math.floor(masterLastRowIndex / this.pageSize) + 1;\n    this.adjustCurrentPageIfInvalid();\n    const masterPageStartIndex = this.pageSize * this.currentPage;\n    let masterPageEndIndex = this.pageSize * (this.currentPage + 1) - 1;\n    if (masterPageEndIndex > masterLastRowIndex) {\n      masterPageEndIndex = masterLastRowIndex;\n    }\n    this.topDisplayedRowIndex = this.rowModel.getTopLevelRowDisplayedIndex(masterPageStartIndex);\n    if (masterPageEndIndex === masterLastRowIndex) {\n      this.bottomDisplayedRowIndex = this.rowModel.getRowCount() - 1;\n    } else {\n      const firstIndexNotToShow = this.rowModel.getTopLevelRowDisplayedIndex(masterPageEndIndex + 1);\n      this.bottomDisplayedRowIndex = firstIndexNotToShow - 1;\n    }\n  }\n  getMasterRowCount() {\n    return this.masterRowCount;\n  }\n  calculatePagesAllRows() {\n    this.masterRowCount = this.rowModel.getRowCount();\n    if (this.masterRowCount === 0) {\n      this.setZeroRows();\n      return;\n    }\n    const maxRowIndex = this.masterRowCount - 1;\n    this.totalPages = Math.floor(maxRowIndex / this.pageSize) + 1;\n    this.adjustCurrentPageIfInvalid();\n    this.topDisplayedRowIndex = this.pageSize * this.currentPage;\n    this.bottomDisplayedRowIndex = this.pageSize * (this.currentPage + 1) - 1;\n    if (this.bottomDisplayedRowIndex > maxRowIndex) {\n      this.bottomDisplayedRowIndex = maxRowIndex;\n    }\n  }\n  calculatedPagesNotActive() {\n    this.setPageSize(void 0, \"autoCalculated\");\n    this.totalPages = 1;\n    this.currentPage = 0;\n    this.topDisplayedRowIndex = 0;\n    this.bottomDisplayedRowIndex = this.rowModel.getRowCount() - 1;\n  }\n  dispatchPaginationChangedEvent(params) {\n    const { keepRenderedRows = false, newPage = false, newPageSize = false } = params;\n    this.eventService.dispatchEvent({\n      type: \"paginationChanged\",\n      animate: false,\n      newData: false,\n      newPage,\n      newPageSize,\n      keepRenderedRows\n    });\n  }\n};\n\n// community-modules/core/src/pagination/paginationModule.ts\nvar PaginationCoreModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/pagination-core\",\n  beans: [PaginationService, PaginationAutoPageSizeService]\n});\nvar PaginationApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/pagination-api\",\n  dependantModules: [PaginationCoreModule],\n  apiFunctions: {\n    paginationIsLastPageFound,\n    paginationGetPageSize,\n    paginationGetCurrentPage,\n    paginationGetTotalPages,\n    paginationGetRowCount,\n    paginationGoToNextPage,\n    paginationGoToPreviousPage,\n    paginationGoToFirstPage,\n    paginationGoToLastPage,\n    paginationGoToPage\n  }\n});\nvar PaginationModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/pagination\",\n  dependantModules: [PaginationCoreModule, PaginationApiModule]\n});\n\n// community-modules/core/src/validation/apiFunctionValidator.ts\nvar clientSide = \"clientSide\";\nvar serverSide = \"serverSide\";\nvar infinite = \"infinite\";\nvar functionRowModels = {\n  onGroupExpandedOrCollapsed: [clientSide],\n  refreshClientSideRowModel: [clientSide],\n  isRowDataEmpty: [clientSide],\n  forEachLeafNode: [clientSide],\n  forEachNodeAfterFilter: [clientSide],\n  forEachNodeAfterFilterAndSort: [clientSide],\n  resetRowHeights: [clientSide],\n  applyTransaction: [clientSide],\n  applyTransactionAsync: [clientSide],\n  flushAsyncTransactions: [clientSide],\n  getBestCostNodeSelection: [clientSide],\n  getServerSideSelectionState: [serverSide],\n  setServerSideSelectionState: [serverSide],\n  applyServerSideTransaction: [serverSide],\n  applyServerSideTransactionAsync: [serverSide],\n  applyServerSideRowData: [serverSide],\n  retryServerSideLoads: [serverSide],\n  flushServerSideAsyncTransactions: [serverSide],\n  refreshServerSide: [serverSide],\n  getServerSideGroupLevelState: [serverSide],\n  refreshInfiniteCache: [infinite],\n  purgeInfiniteCache: [infinite],\n  getInfiniteRowCount: [infinite],\n  isLastRowIndexKnown: [infinite, serverSide],\n  expandAll: [clientSide, serverSide],\n  collapseAll: [clientSide, serverSide],\n  onRowHeightChanged: [clientSide, serverSide],\n  setRowCount: [infinite, serverSide],\n  getCacheBlockState: [infinite, serverSide]\n};\nvar deprecatedFunctions = {\n  getValue: {\n    version: \"v31.3\",\n    new: \"getCellValue\"\n  },\n  getFirstDisplayedRow: {\n    version: \"v31.1\",\n    new: \"getFirstDisplayedRowIndex\"\n  },\n  getLastDisplayedRow: {\n    version: \"v31.1\",\n    new: \"getLastDisplayedRowIndex\"\n  },\n  getModel: {\n    version: \"v31.1\",\n    message: \"Please use the appropriate grid API methods instead.\"\n  },\n  setColumnVisible: {\n    version: \"v31.1\",\n    old: \"setColumnVisible(key,visible)\",\n    new: \"setColumnsVisible([key],visible)\"\n  },\n  setColumnPinned: {\n    version: \"v31.1\",\n    old: \"setColumnPinned(key,pinned)\",\n    new: \"setColumnsPinned([key],pinned)\"\n  },\n  moveColumn: {\n    version: \"v31.1\",\n    old: \"moveColumn(key, toIndex)\",\n    new: \"moveColumns([key], toIndex)\"\n  },\n  setColumnWidth: {\n    version: \"v31.1\",\n    old: \"setColumnWidth(col, width)\",\n    new: \"setColumnWidths([{key: col, newWidth: width}])\"\n  },\n  autoSizeColumn: {\n    version: \"v31.1\",\n    old: \"autoSizeColumn(key, skipHeader)\",\n    new: \"autoSizeColumns([key], skipHeader)\"\n  },\n  addAggFunc: {\n    version: \"v31.1\",\n    old: \"addAggFunc(key, func)\",\n    new: \"addAggFuncs({ key: func })\"\n  },\n  removeValueColumn: {\n    version: \"v31.1\",\n    old: \"removeValueColumn(colKey)\",\n    new: \"removeValueColumns([colKey])\"\n  },\n  addValueColumn: {\n    version: \"v31.1\",\n    old: \"addValueColumn(colKey)\",\n    new: \"addValueColumns([colKey])\"\n  },\n  removeRowGroupColumn: {\n    version: \"v31.1\",\n    old: \"removeRowGroupColumn(colKey)\",\n    new: \"removeRowGroupColumns([colKey])\"\n  },\n  addRowGroupColumn: {\n    version: \"v31.1\",\n    old: \"addRowGroupColumn(colKey)\",\n    new: \"addRowGroupColumns([colKey])\"\n  },\n  removePivotColumn: {\n    version: \"v31.1\",\n    old: \"removePivotColumn(colKey)\",\n    new: \"removePivotColumns([colKey])\"\n  },\n  addPivotColumn: {\n    version: \"v31.1\",\n    old: \"addPivotColumn(colKey)\",\n    new: \"addPivotColumns([colKey])\"\n  },\n  showColumnMenuAfterButtonClick: {\n    version: \"v31.1\",\n    message: `Use 'IHeaderParams.showColumnMenu' within a header component, or 'api.showColumnMenu' elsewhere.`\n  },\n  showColumnMenuAfterMouseClick: {\n    version: \"v31.1\",\n    message: `Use 'IHeaderParams.showColumnMenuAfterMouseClick' within a header component, or 'api.showColumnMenu' elsewhere.`\n  },\n  getFilterInstance: {\n    version: \"v31.1\",\n    message: `'getFilterInstance' is deprecated. To get/set individual filter models, use 'getColumnFilterModel' or 'setColumnFilterModel' instead. To get hold of the filter instance, use 'getColumnFilterInstance' which returns the instance asynchronously.`\n  },\n  showLoadingOverlay: {\n    version: \"v32\",\n    message: '`showLoadingOverlay` is deprecated. Use the grid option \"loading\"=true instead or setGridOption(\"loading\", true).'\n  },\n  clearRangeSelection: {\n    version: \"v32.2\",\n    message: \"Use `clearCellSelection` instead.\"\n  },\n  getInfiniteRowCount: {\n    version: \"v32.2\",\n    old: \"getInfiniteRowCount()\",\n    new: \"getDisplayedRowCount()\"\n  }\n};\nfunction validateApiFunction(functionName, apiFunction, beans) {\n  const deprecation = deprecatedFunctions[functionName];\n  if (deprecation) {\n    const { version, new: replacement, old, message } = deprecation;\n    const apiMethod = old ?? functionName;\n    return (...args) => {\n      const replacementMessage = replacement ? `Please use ${replacement} instead. ` : \"\";\n      _warnOnce(`Since ${version} api.${apiMethod} is deprecated. ${replacementMessage}${message ?? \"\"}`);\n      return apiFunction.apply(apiFunction, args);\n    };\n  }\n  const rowModels = functionRowModels[functionName];\n  if (rowModels) {\n    return (...args) => {\n      const rowModel = beans.rowModel.getType();\n      if (!rowModels.includes(rowModel)) {\n        _errorOnce(\n          `api.${functionName} can only be called when gridOptions.rowModelType is ${rowModels.join(\" or \")}`\n        );\n        return void 0;\n      }\n      return apiFunction.apply(apiFunction, args);\n    };\n  }\n  return apiFunction;\n}\n\n// community-modules/core/src/validation/rules/colDefValidations.ts\nvar COLUMN_DEFINITION_DEPRECATIONS = {\n  columnsMenuParams: { version: \"31.1\", message: \"Use `columnChooserParams` instead.\" },\n  suppressMenu: { version: \"31.1\", message: \"Use `suppressHeaderMenuButton` instead.\" },\n  suppressCellFlash: { version: \"31.2\", message: \"Use `enableCellChangeFlash={false}` in the ColDef\" },\n  checkboxSelection: { version: \"32.2\", message: \"Use `rowSelection.checkboxes` in `GridOptions` instead.\" },\n  headerCheckboxSelection: {\n    version: \"32.2\",\n    message: \"Use `rowSelection.headerCheckbox = true` in `GridOptions` instead.\"\n  },\n  headerCheckboxSelectionFilteredOnly: {\n    version: \"32.2\",\n    message: 'Use `rowSelection.selectAll = \"filtered\"` in `GridOptions` instead.'\n  },\n  headerCheckboxSelectionCurrentPageOnly: {\n    version: \"32.2\",\n    message: 'Use `rowSelection.selectAll = \"currentPage\"` in `GridOptions` instead.'\n  },\n  showDisabledCheckboxes: {\n    version: \"32.2\",\n    message: \"Use `rowSelection.hideDisabledCheckboxes = true` in `GridOptions` instead.\"\n  }\n};\nvar CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE = (_options, gridOptions) => {\n  const rowModel = gridOptions.rowModelType ?? \"clientSide\";\n  if (rowModel === \"clientSide\" || rowModel === \"serverSide\") {\n    return { module: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */ };\n  }\n  return null;\n};\nvar COLUMN_DEFINITION_VALIDATIONS = {\n  // supported on all row models, but need module for client side.\n  enableRowGroup: CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE,\n  rowGroup: CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE,\n  rowGroupIndex: CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE,\n  enablePivot: CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE,\n  enableValue: CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE,\n  pivot: CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE,\n  pivotIndex: CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE,\n  aggFunc: CSRM_SSRM_REQUIRES_ROW_GROUP_MODULE,\n  cellEditor: (options) => {\n    if (options.cellEditor === \"agRichSelect\" || options.cellEditor === \"agRichSelectCellEditor\") {\n      return { module: \"@ag-grid-enterprise/rich-select\" /* RichSelectModule */ };\n    }\n    return null;\n  },\n  menuTabs: (options) => {\n    const enterpriseMenuTabs = [\"columnsMenuTab\", \"generalMenuTab\"];\n    if (options.menuTabs?.some((tab) => enterpriseMenuTabs.includes(tab))) {\n      return {\n        module: \"@ag-grid-enterprise/menu\" /* MenuModule */\n      };\n    }\n    return null;\n  },\n  columnsMenuParams: {\n    module: [\"@ag-grid-enterprise/menu\" /* MenuModule */, \"@ag-grid-enterprise/column-tool-panel\" /* ColumnsToolPanelModule */]\n  },\n  columnChooserParams: {\n    module: [\"@ag-grid-enterprise/menu\" /* MenuModule */, \"@ag-grid-enterprise/column-tool-panel\" /* ColumnsToolPanelModule */]\n  },\n  headerCheckboxSelection: {\n    supportedRowModels: [\"clientSide\", \"serverSide\"],\n    validate: (_options, { rowSelection }) => rowSelection === \"multiple\" ? null : \"headerCheckboxSelection is only supported with rowSelection=multiple\"\n  },\n  headerCheckboxSelectionFilteredOnly: {\n    supportedRowModels: [\"clientSide\"],\n    validate: (_options, { rowSelection }) => rowSelection === \"multiple\" ? null : \"headerCheckboxSelectionFilteredOnly is only supported with rowSelection=multiple\"\n  },\n  headerCheckboxSelectionCurrentPageOnly: {\n    supportedRowModels: [\"clientSide\"],\n    validate: (_options, { rowSelection }) => rowSelection === \"multiple\" ? null : \"headerCheckboxSelectionCurrentPageOnly is only supported with rowSelection=multiple\"\n  },\n  children: () => COL_DEF_VALIDATORS\n};\nvar colDefPropertyMap = {\n  headerName: void 0,\n  columnGroupShow: void 0,\n  headerClass: void 0,\n  toolPanelClass: void 0,\n  headerValueGetter: void 0,\n  pivotKeys: void 0,\n  groupId: void 0,\n  colId: void 0,\n  sort: void 0,\n  initialSort: void 0,\n  field: void 0,\n  type: void 0,\n  cellDataType: void 0,\n  tooltipComponent: void 0,\n  tooltipField: void 0,\n  headerTooltip: void 0,\n  cellClass: void 0,\n  showRowGroup: void 0,\n  filter: void 0,\n  initialAggFunc: void 0,\n  defaultAggFunc: void 0,\n  aggFunc: void 0,\n  pinned: void 0,\n  initialPinned: void 0,\n  chartDataType: void 0,\n  cellAriaRole: void 0,\n  cellEditorPopupPosition: void 0,\n  headerGroupComponent: void 0,\n  headerGroupComponentParams: void 0,\n  cellStyle: void 0,\n  cellRenderer: void 0,\n  cellRendererParams: void 0,\n  cellEditor: void 0,\n  cellEditorParams: void 0,\n  filterParams: void 0,\n  pivotValueColumn: void 0,\n  headerComponent: void 0,\n  headerComponentParams: void 0,\n  floatingFilterComponent: void 0,\n  floatingFilterComponentParams: void 0,\n  tooltipComponentParams: void 0,\n  refData: void 0,\n  columnsMenuParams: void 0,\n  columnChooserParams: void 0,\n  children: void 0,\n  sortingOrder: void 0,\n  allowedAggFuncs: void 0,\n  menuTabs: void 0,\n  pivotTotalColumnIds: void 0,\n  cellClassRules: void 0,\n  icons: void 0,\n  sortIndex: void 0,\n  initialSortIndex: void 0,\n  flex: void 0,\n  initialFlex: void 0,\n  width: void 0,\n  initialWidth: void 0,\n  minWidth: void 0,\n  maxWidth: void 0,\n  rowGroupIndex: void 0,\n  initialRowGroupIndex: void 0,\n  pivotIndex: void 0,\n  initialPivotIndex: void 0,\n  suppressCellFlash: void 0,\n  suppressColumnsToolPanel: void 0,\n  suppressFiltersToolPanel: void 0,\n  openByDefault: void 0,\n  marryChildren: void 0,\n  suppressStickyLabel: void 0,\n  hide: void 0,\n  initialHide: void 0,\n  rowGroup: void 0,\n  initialRowGroup: void 0,\n  pivot: void 0,\n  initialPivot: void 0,\n  checkboxSelection: void 0,\n  showDisabledCheckboxes: void 0,\n  headerCheckboxSelection: void 0,\n  headerCheckboxSelectionFilteredOnly: void 0,\n  headerCheckboxSelectionCurrentPageOnly: void 0,\n  suppressMenu: void 0,\n  suppressHeaderMenuButton: void 0,\n  suppressMovable: void 0,\n  lockPosition: void 0,\n  lockVisible: void 0,\n  lockPinned: void 0,\n  unSortIcon: void 0,\n  suppressSizeToFit: void 0,\n  suppressAutoSize: void 0,\n  enableRowGroup: void 0,\n  enablePivot: void 0,\n  enableValue: void 0,\n  editable: void 0,\n  suppressPaste: void 0,\n  suppressNavigable: void 0,\n  enableCellChangeFlash: void 0,\n  rowDrag: void 0,\n  dndSource: void 0,\n  autoHeight: void 0,\n  wrapText: void 0,\n  sortable: void 0,\n  resizable: void 0,\n  singleClickEdit: void 0,\n  floatingFilter: void 0,\n  cellEditorPopup: void 0,\n  suppressFillHandle: void 0,\n  wrapHeaderText: void 0,\n  autoHeaderHeight: void 0,\n  dndSourceOnRowDrag: void 0,\n  valueGetter: void 0,\n  valueSetter: void 0,\n  filterValueGetter: void 0,\n  keyCreator: void 0,\n  valueFormatter: void 0,\n  valueParser: void 0,\n  comparator: void 0,\n  equals: void 0,\n  pivotComparator: void 0,\n  suppressKeyboardEvent: void 0,\n  suppressHeaderKeyboardEvent: void 0,\n  colSpan: void 0,\n  rowSpan: void 0,\n  getQuickFilterText: void 0,\n  onCellValueChanged: void 0,\n  onCellClicked: void 0,\n  onCellDoubleClicked: void 0,\n  onCellContextMenu: void 0,\n  rowDragText: void 0,\n  tooltipValueGetter: void 0,\n  cellRendererSelector: void 0,\n  cellEditorSelector: void 0,\n  suppressSpanHeaderHeight: void 0,\n  useValueFormatterForExport: void 0,\n  useValueParserForImport: void 0,\n  mainMenuItems: void 0,\n  contextMenuItems: void 0,\n  suppressFloatingFilterButton: void 0,\n  suppressHeaderFilterButton: void 0,\n  suppressHeaderContextMenu: void 0,\n  loadingCellRenderer: void 0,\n  loadingCellRendererParams: void 0,\n  loadingCellRendererSelector: void 0,\n  context: void 0\n};\nvar ALL_PROPERTIES = Object.keys(colDefPropertyMap);\nvar COL_DEF_VALIDATORS = {\n  objectName: \"colDef\",\n  allProperties: ALL_PROPERTIES,\n  docsUrl: \"column-properties/\",\n  deprecations: COLUMN_DEFINITION_DEPRECATIONS,\n  validations: COLUMN_DEFINITION_VALIDATIONS\n};\n\n// community-modules/core/src/validation/rules/gridOptionsValidations.ts\nvar GRID_OPTION_DEPRECATIONS = () => ({\n  advancedFilterModel: { version: \"31\", message: \"Use `initialState.filter.advancedFilterModel` instead.\" },\n  suppressAsyncEvents: { version: \"31\", message: \"Events should be handled asynchronously.\" },\n  cellFadeDelay: { version: \"31.1\", renamed: \"cellFadeDuration\" },\n  cellFlashDelay: { version: \"31.1\", renamed: \"cellFlashDuration\" },\n  suppressServerSideInfiniteScroll: { version: \"31.1\" },\n  serverSideSortOnServer: { version: \"31.1\" },\n  serverSideFilterOnServer: { version: \"31.1\" },\n  enableCellChangeFlash: {\n    version: \"31.2\",\n    message: \"Use `enableCellChangeFlash` in the `ColDef` or `defaultColDef` for all columns.\"\n  },\n  groupIncludeFooter: { version: \"31.3\", message: \"Use `groupTotalRow` instead.\" },\n  groupIncludeTotalFooter: { version: \"31.3\", message: \"Use `grandTotalRow` instead.\" },\n  suppressLoadingOverlay: { version: \"32\", message: \"Use `loading`=false instead.\" },\n  enableFillHandle: { version: \"32.2\", message: \"Use `cellSelection.handle` instead.\" },\n  enableRangeHandle: { version: \"32.2\", message: \"Use `cellSelection.handle` instead.\" },\n  enableRangeSelection: { version: \"32.2\", message: \"Use `cellSelection = true` instead.\" },\n  suppressMultiRangeSelection: {\n    version: \"32.2\",\n    message: \"Use `cellSelection.suppressMultiRanges` instead.\"\n  },\n  suppressClearOnFillReduction: {\n    version: \"32.2\",\n    message: \"Use `cellSelection.handle.suppressClearOnFillReduction` instead.\"\n  },\n  fillHandleDirection: { version: \"32.2\", message: \"Use `cellSelection.handle.direction` instead.\" },\n  fillOperation: { version: \"32.2\", message: \"Use `cellSelection.handle.setFillValue` instead.\" },\n  suppressRowClickSelection: {\n    version: \"32.2\",\n    message: \"Use `rowSelection.enableClickSelection` instead.\"\n  },\n  suppressRowDeselection: { version: \"32.2\", message: \"Use `rowSelection.enableClickSelection` instead.\" },\n  rowMultiSelectWithClick: {\n    version: \"32.2\",\n    message: \"Use `rowSelection.enableSelectionWithoutKeys` instead.\"\n  },\n  groupSelectsChildren: {\n    version: \"32.2\",\n    message: 'Use `rowSelection.groupSelects = \"descendants\"` instead.'\n  },\n  groupSelectsFiltered: {\n    version: \"32.2\",\n    message: 'Use `rowSelection.groupSelects = \"filteredDescendants\"` instead.'\n  },\n  isRowSelectable: { version: \"32.2\", message: \"Use `selectionOptions.isRowSelectable` instead.\" },\n  suppressCopySingleCellRanges: { version: \"32.2\", message: \"Use `rowSelection.copySelectedRows` instead.\" },\n  suppressCopyRowsToClipboard: { version: \"32.2\", message: \"Use `rowSelection.copySelectedRows` instead.\" },\n  onRangeSelectionChanged: { version: \"32.2\", message: \"Use `onCellSelectionChanged` instead.\" },\n  onRangeDeleteStart: { version: \"32.2\", message: \"Use `onCellSelectionDeleteStart` instead.\" },\n  onRangeDeleteEnd: { version: \"32.2\", message: \"Use `onCellSelectionDeleteEnd` instead.\" },\n  suppressBrowserResizeObserver: {\n    version: \"32.2\",\n    message: \"The grid always uses the browser's ResizeObserver, this grid option has no effect.\"\n  },\n  onColumnEverythingChanged: {\n    version: \"32.2\",\n    message: \"Either use `onDisplayedColumnsChanged` which is fired at the same time, or use one of the more specific column events.\"\n  }\n});\nvar GRID_OPTION_DEFAULTS = {\n  suppressContextMenu: false,\n  preventDefaultOnContextMenu: false,\n  allowContextMenuWithControlKey: false,\n  suppressMenuHide: true,\n  enableBrowserTooltips: false,\n  tooltipTrigger: \"hover\",\n  tooltipShowDelay: 2e3,\n  tooltipHideDelay: 1e4,\n  tooltipMouseTrack: false,\n  tooltipShowMode: \"standard\",\n  tooltipInteraction: false,\n  copyHeadersToClipboard: false,\n  copyGroupHeadersToClipboard: false,\n  clipboardDelimiter: \"\t\",\n  suppressCopyRowsToClipboard: false,\n  suppressCopySingleCellRanges: false,\n  suppressLastEmptyLineOnPaste: false,\n  suppressClipboardPaste: false,\n  suppressClipboardApi: false,\n  suppressCutToClipboard: false,\n  maintainColumnOrder: false,\n  enableStrictPivotColumnOrder: false,\n  suppressFieldDotNotation: false,\n  allowDragFromColumnsToolPanel: false,\n  suppressMovableColumns: false,\n  suppressColumnMoveAnimation: false,\n  suppressMoveWhenColumnDragging: false,\n  suppressDragLeaveHidesColumns: false,\n  suppressRowGroupHidesColumns: false,\n  suppressAutoSize: false,\n  autoSizePadding: 20,\n  skipHeaderOnAutoSize: false,\n  singleClickEdit: false,\n  suppressClickEdit: false,\n  readOnlyEdit: false,\n  stopEditingWhenCellsLoseFocus: false,\n  enterNavigatesVertically: false,\n  enterNavigatesVerticallyAfterEdit: false,\n  enableCellEditingOnBackspace: false,\n  undoRedoCellEditing: false,\n  undoRedoCellEditingLimit: 10,\n  suppressCsvExport: false,\n  suppressExcelExport: false,\n  cacheQuickFilter: false,\n  includeHiddenColumnsInQuickFilter: false,\n  excludeChildrenWhenTreeDataFiltering: false,\n  enableAdvancedFilter: false,\n  includeHiddenColumnsInAdvancedFilter: false,\n  enableCharts: false,\n  masterDetail: false,\n  keepDetailRows: false,\n  keepDetailRowsCount: 10,\n  detailRowAutoHeight: false,\n  tabIndex: 0,\n  rowBuffer: 10,\n  valueCache: false,\n  valueCacheNeverExpires: false,\n  enableCellExpressions: false,\n  suppressTouch: false,\n  suppressFocusAfterRefresh: false,\n  suppressAsyncEvents: false,\n  suppressBrowserResizeObserver: false,\n  suppressPropertyNamesCheck: false,\n  suppressChangeDetection: false,\n  debug: false,\n  suppressLoadingOverlay: false,\n  suppressNoRowsOverlay: false,\n  pagination: false,\n  paginationPageSize: 100,\n  paginationPageSizeSelector: true,\n  paginationAutoPageSize: false,\n  paginateChildRows: false,\n  suppressPaginationPanel: false,\n  pivotMode: false,\n  pivotPanelShow: \"never\",\n  pivotDefaultExpanded: 0,\n  pivotSuppressAutoColumn: false,\n  suppressExpandablePivotGroups: false,\n  functionsReadOnly: false,\n  suppressAggFuncInHeader: false,\n  alwaysAggregateAtRootLevel: false,\n  aggregateOnlyChangedColumns: false,\n  suppressAggFilteredOnly: false,\n  removePivotHeaderRowWhenSingleValueColumn: false,\n  animateRows: true,\n  enableCellChangeFlash: false,\n  cellFlashDelay: 500,\n  cellFlashDuration: 500,\n  cellFadeDelay: 1e3,\n  cellFadeDuration: 1e3,\n  allowShowChangeAfterFilter: false,\n  domLayout: \"normal\",\n  ensureDomOrder: false,\n  enableRtl: false,\n  suppressColumnVirtualisation: false,\n  suppressMaxRenderedRowRestriction: false,\n  suppressRowVirtualisation: false,\n  rowDragManaged: false,\n  suppressRowDrag: false,\n  suppressMoveWhenRowDragging: false,\n  rowDragEntireRow: false,\n  rowDragMultiRow: false,\n  embedFullWidthRows: false,\n  groupDisplayType: \"singleColumn\",\n  groupDefaultExpanded: 0,\n  groupMaintainOrder: false,\n  groupSelectsChildren: false,\n  groupIncludeTotalFooter: false,\n  groupSuppressBlankHeader: false,\n  groupSelectsFiltered: false,\n  showOpenedGroup: false,\n  groupRemoveSingleChildren: false,\n  groupRemoveLowestSingleChildren: false,\n  groupHideOpenParents: false,\n  groupAllowUnbalanced: false,\n  rowGroupPanelShow: \"never\",\n  suppressMakeColumnVisibleAfterUnGroup: false,\n  treeData: false,\n  rowGroupPanelSuppressSort: false,\n  suppressGroupRowsSticky: false,\n  rowModelType: \"clientSide\",\n  asyncTransactionWaitMillis: 50,\n  suppressModelUpdateAfterUpdateTransaction: false,\n  cacheOverflowSize: 1,\n  infiniteInitialRowCount: 1,\n  serverSideInitialRowCount: 1,\n  suppressServerSideInfiniteScroll: false,\n  cacheBlockSize: 100,\n  maxBlocksInCache: -1,\n  maxConcurrentDatasourceRequests: 2,\n  blockLoadDebounceMillis: 0,\n  purgeClosedRowNodes: false,\n  serverSideSortAllLevels: false,\n  serverSideOnlyRefreshFilteredGroups: false,\n  serverSideSortOnServer: false,\n  serverSideFilterOnServer: false,\n  serverSidePivotResultFieldSeparator: \"_\",\n  viewportRowModelPageSize: 5,\n  viewportRowModelBufferSize: 5,\n  alwaysShowHorizontalScroll: false,\n  alwaysShowVerticalScroll: false,\n  debounceVerticalScrollbar: false,\n  suppressHorizontalScroll: false,\n  suppressScrollOnNewData: false,\n  suppressScrollWhenPopupsAreOpen: false,\n  suppressAnimationFrame: false,\n  suppressMiddleClickScrolls: false,\n  suppressPreventDefaultOnMouseWheel: false,\n  rowMultiSelectWithClick: false,\n  suppressRowDeselection: false,\n  suppressRowClickSelection: false,\n  suppressCellFocus: false,\n  suppressHeaderFocus: false,\n  suppressMultiRangeSelection: false,\n  enableCellTextSelection: false,\n  enableRangeSelection: false,\n  enableRangeHandle: false,\n  enableFillHandle: false,\n  fillHandleDirection: \"xy\",\n  suppressClearOnFillReduction: false,\n  accentedSort: false,\n  unSortIcon: false,\n  suppressMultiSort: false,\n  alwaysMultiSort: false,\n  suppressMaintainUnsortedOrder: false,\n  suppressRowHoverHighlight: false,\n  suppressRowTransform: false,\n  columnHoverHighlight: false,\n  deltaSort: false,\n  enableGroupEdit: false,\n  suppressGroupMaintainValueType: false,\n  groupLockGroupColumns: 0,\n  serverSideEnableClientSideSort: false,\n  suppressServerSideFullWidthLoadingRow: false,\n  pivotMaxGeneratedColumns: -1,\n  columnMenu: \"new\",\n  reactiveCustomComponents: true,\n  suppressSetFilterByDefault: false\n};\nvar GRID_OPTION_VALIDATIONS = () => ({\n  sideBar: { module: \"@ag-grid-enterprise/side-bar\" /* SideBarModule */ },\n  statusBar: { module: \"@ag-grid-enterprise/status-bar\" /* StatusBarModule */ },\n  enableCharts: { module: \"@ag-grid-enterprise/charts\" /* GridChartsModule */ },\n  getMainMenuItems: { module: \"@ag-grid-enterprise/menu\" /* MenuModule */ },\n  getContextMenuItems: { module: \"@ag-grid-enterprise/menu\" /* MenuModule */ },\n  allowContextMenuWithControlKey: { module: \"@ag-grid-enterprise/menu\" /* MenuModule */ },\n  enableAdvancedFilter: { module: \"@ag-grid-enterprise/advanced-filter\" /* AdvancedFilterModule */ },\n  treeData: {\n    supportedRowModels: [\"clientSide\", \"serverSide\"],\n    module: \"@ag-grid-enterprise/row-grouping\" /* RowGroupingModule */,\n    validate: (options) => {\n      const rowModel = options.rowModelType ?? \"clientSide\";\n      switch (rowModel) {\n        case \"clientSide\": {\n          const csrmWarning = `treeData requires 'getDataPath' in the ${rowModel} row model.`;\n          return options.getDataPath ? null : csrmWarning;\n        }\n        case \"serverSide\": {\n          const ssrmWarning = `treeData requires 'isServerSideGroup' and 'getServerSideGroupKey' in the ${rowModel} row model.`;\n          return options.isServerSideGroup && options.getServerSideGroupKey ? null : ssrmWarning;\n        }\n      }\n      return null;\n    }\n  },\n  masterDetail: { module: \"@ag-grid-enterprise/master-detail\" /* MasterDetailModule */ },\n  enableRangeSelection: { module: \"@ag-grid-enterprise/range-selection\" /* RangeSelectionModule */ },\n  enableRangeHandle: {\n    dependencies: {\n      enableRangeSelection: [true]\n    }\n  },\n  enableFillHandle: {\n    dependencies: {\n      enableRangeSelection: [true]\n    }\n  },\n  groupDefaultExpanded: {\n    supportedRowModels: [\"clientSide\"]\n  },\n  groupIncludeFooter: {\n    supportedRowModels: [\"clientSide\", \"serverSide\"],\n    validate: (options) => {\n      const rowModel = options.rowModelType ?? \"clientSide\";\n      switch (rowModel) {\n        case \"clientSide\":\n          return null;\n        case \"serverSide\": {\n          const warning = \"groupIncludeFooter is not supported alongside suppressServerSideInfiniteScroll\";\n          return options.suppressServerSideInfiniteScroll ? warning : null;\n        }\n      }\n      return null;\n    }\n  },\n  groupHideOpenParents: {\n    supportedRowModels: [\"clientSide\", \"serverSide\"],\n    dependencies: {\n      groupTotalRow: [void 0, \"bottom\"]\n    }\n  },\n  groupIncludeTotalFooter: {\n    supportedRowModels: [\"clientSide\"]\n  },\n  groupRemoveSingleChildren: {\n    dependencies: {\n      groupHideOpenParents: [void 0, false],\n      groupRemoveLowestSingleChildren: [void 0, false]\n    }\n  },\n  groupRemoveLowestSingleChildren: {\n    dependencies: {\n      groupHideOpenParents: [void 0, false],\n      groupRemoveSingleChildren: [void 0, false]\n    }\n  },\n  groupSelectsChildren: {\n    dependencies: {\n      rowSelection: [\"multiple\"]\n    }\n  },\n  viewportDatasource: {\n    supportedRowModels: [\"viewport\"],\n    module: \"@ag-grid-enterprise/viewport-row-model\" /* ViewportRowModelModule */\n  },\n  serverSideDatasource: {\n    supportedRowModels: [\"serverSide\"],\n    module: \"@ag-grid-enterprise/server-side-row-model\" /* ServerSideRowModelModule */\n  },\n  cacheBlockSize: {\n    supportedRowModels: [\"serverSide\", \"infinite\"]\n  },\n  datasource: {\n    supportedRowModels: [\"infinite\"],\n    module: \"@ag-grid-community/infinite-row-model\" /* InfiniteRowModelModule */\n  },\n  rowData: {\n    supportedRowModels: [\"clientSide\"],\n    module: \"@ag-grid-community/client-side-row-model\" /* ClientSideRowModelModule */\n  },\n  paginationPageSizeSelector: {\n    validate: (options) => {\n      const values = options.paginationPageSizeSelector;\n      if (typeof values === \"boolean\" || values == null) {\n        return null;\n      }\n      if (!values.length) {\n        return `'paginationPageSizeSelector' cannot be an empty array.\n                    If you want to hide the page size selector, set paginationPageSizeSelector to false.`;\n      }\n      return null;\n    }\n  },\n  rowSelection: {\n    validate({ rowSelection }) {\n      if (rowSelection && typeof rowSelection === \"string\") {\n        return 'As of version 32.2.1, using `rowSelection` with the values \"single\" or \"multiple\" has been deprecated. Use the object value instead.';\n      }\n      if (rowSelection && typeof rowSelection !== \"object\") {\n        return \"Expected `RowSelectionOptions` object for the `rowSelection` property.\";\n      }\n      return null;\n    }\n  },\n  cellSelection: {\n    module: \"@ag-grid-enterprise/range-selection\" /* RangeSelectionModule */\n  },\n  columnDefs: () => COL_DEF_VALIDATORS,\n  defaultColDef: () => COL_DEF_VALIDATORS,\n  defaultColGroupDef: () => COL_DEF_VALIDATORS,\n  autoGroupColumnDef: () => COL_DEF_VALIDATORS,\n  selectionColumnDef: () => COL_DEF_VALIDATORS\n});\nvar GRID_OPTIONS_VALIDATORS = () => ({\n  objectName: \"gridOptions\",\n  allProperties: [...PropertyKeys.ALL_PROPERTIES, ...ComponentUtil.EVENT_CALLBACKS],\n  propertyExceptions: [\"api\"],\n  docsUrl: \"grid-options/\",\n  deprecations: GRID_OPTION_DEPRECATIONS(),\n  validations: GRID_OPTION_VALIDATIONS()\n});\n\n// community-modules/core/src/validation/validationService.ts\nvar ValidationService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"validationService\";\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n    this.gridOptions = beans.gridOptions;\n  }\n  postConstruct() {\n    this.processGridOptions(this.gridOptions);\n  }\n  processGridOptions(options) {\n    this.processOptions(options, GRID_OPTIONS_VALIDATORS());\n  }\n  validateApiFunction(functionName, apiFunction) {\n    return validateApiFunction(functionName, apiFunction, this.beans);\n  }\n  processOptions(options, validator) {\n    const { validations, deprecations, allProperties, propertyExceptions, objectName, docsUrl } = validator;\n    if (allProperties && this.gridOptions.suppressPropertyNamesCheck !== true) {\n      this.checkProperties(\n        options,\n        [...propertyExceptions ?? [], ...Object.keys(deprecations)],\n        allProperties,\n        objectName,\n        docsUrl\n      );\n    }\n    const warnings = /* @__PURE__ */ new Set();\n    const optionKeys = Object.keys(options);\n    optionKeys.forEach((key) => {\n      const deprecation = deprecations[key];\n      if (deprecation) {\n        if (\"renamed\" in deprecation) {\n          const { renamed, version } = deprecation;\n          warnings.add(\n            `As of v${version}, ${String(key)} is deprecated. Please use ${String(renamed)} instead.`\n          );\n          options[renamed] = options[key];\n        } else {\n          const { message, version } = deprecation;\n          warnings.add(`As of v${version}, ${String(key)} is deprecated. ${message ?? \"\"}`);\n        }\n      }\n      const value = options[key];\n      if (value == null || value === false) {\n        return;\n      }\n      const rulesOrGetter = validations[key];\n      let rules;\n      if (!rulesOrGetter) {\n        return;\n      } else if (typeof rulesOrGetter === \"function\") {\n        const fromGetter = rulesOrGetter(options, this.gridOptions);\n        if (!fromGetter) {\n          return;\n        }\n        if (\"objectName\" in fromGetter) {\n          const value2 = options[key];\n          if (Array.isArray(value2)) {\n            value2.forEach((item) => {\n              this.processOptions(item, fromGetter);\n            });\n            return;\n          }\n          this.processOptions(options[key], fromGetter);\n          return;\n        }\n        rules = fromGetter;\n      } else {\n        rules = rulesOrGetter;\n      }\n      const { module, dependencies, validate, supportedRowModels } = rules;\n      if (supportedRowModels) {\n        const rowModel = this.gridOptions.rowModelType ?? \"clientSide\";\n        if (!supportedRowModels.includes(rowModel)) {\n          warnings.add(`${String(key)} is not supported with the '${rowModel}' row model.`);\n          return;\n        }\n      }\n      if (module) {\n        const modules = Array.isArray(module) ? module : [module];\n        let allRegistered = true;\n        modules.forEach((m) => {\n          if (!this.gos.assertModuleRegistered(m, String(key))) {\n            allRegistered = false;\n            warnings.add(`${String(key)} is only available when ${m} is loaded.`);\n          }\n        });\n        if (!allRegistered) {\n          return;\n        }\n      }\n      if (dependencies) {\n        const warning = this.checkForRequiredDependencies(key, dependencies, options);\n        if (warning) {\n          warnings.add(warning);\n          return;\n        }\n      }\n      if (validate) {\n        const warning = validate(options, this.gridOptions);\n        if (warning) {\n          warnings.add(warning);\n          return;\n        }\n      }\n    });\n    if (warnings.size > 0) {\n      warnings.forEach((warning) => {\n        _warnOnce(warning);\n      });\n    }\n  }\n  checkForRequiredDependencies(key, validator, options) {\n    const optionEntries = Object.entries(validator);\n    const failed = optionEntries.find(([key2, value]) => {\n      const gridOptionValue = options[key2];\n      return !value.includes(gridOptionValue);\n    });\n    if (!failed) {\n      return null;\n    }\n    const [failedKey, possibleOptions] = failed;\n    if (possibleOptions.length > 1) {\n      return `'${String(key)}' requires '${failedKey}' to be one of [${possibleOptions.join(\", \")}].`;\n    }\n    return `'${String(key)}' requires '${failedKey}' to be ${possibleOptions[0]}.`;\n  }\n  checkProperties(object, exceptions, validProperties, containerName, docsUrl) {\n    const VUE_FRAMEWORK_PROPS = [\"__ob__\", \"__v_skip\", \"__metadata__\"];\n    const invalidProperties = _fuzzyCheckStrings(\n      Object.getOwnPropertyNames(object),\n      [...VUE_FRAMEWORK_PROPS, ...exceptions, ...validProperties],\n      validProperties\n    );\n    _iterateObject(invalidProperties, (key, value) => {\n      let message = `invalid ${containerName} property '${key}' did you mean any of these: ${value.slice(0, 8).join(\", \")}.`;\n      if (validProperties.includes(\"context\")) {\n        message += `\nIf you are trying to annotate ${containerName} with application data, use the '${containerName}.context' property instead.`;\n      }\n      _warnOnce(message);\n    });\n    if (Object.keys(invalidProperties).length > 0 && docsUrl) {\n      const url = this.getFrameworkOverrides().getDocLink(docsUrl);\n      _warnOnce(`to see all the valid ${containerName} properties please check: ${url}`);\n    }\n  }\n};\nfunction _fuzzyCheckStrings(inputValues, validValues, allSuggestions) {\n  const fuzzyMatches = {};\n  const invalidInputs = inputValues.filter(\n    (inputValue) => !validValues.some((validValue) => validValue === inputValue)\n  );\n  if (invalidInputs.length > 0) {\n    invalidInputs.forEach(\n      (invalidInput) => fuzzyMatches[invalidInput] = _fuzzySuggestions({ inputValue: invalidInput, allSuggestions }).values\n    );\n  }\n  return fuzzyMatches;\n}\n\n// community-modules/core/src/gridCoreModule.ts\nvar GridCoreModule = {\n  version: VERSION,\n  moduleName: \"@ag-grid-community/core\" /* CommunityCoreModule */\n};\nvar ValidationsModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/core-validations\",\n  beans: [ValidationService]\n});\nvar CommunityFeaturesModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/core-community-features\",\n  dependantModules: [\n    GridCoreModule,\n    ValidationsModule,\n    EditModule,\n    FilterModule,\n    StateModule,\n    DataTypeModule,\n    AlignedGridsModule,\n    PaginationModule,\n    CommunityApiModule\n  ]\n});\n\n// community-modules/core/src/gridDestroyService.ts\nvar GridDestroyService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"gridDestroyService\";\n    this.destroyCalled = false;\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n  }\n  destroy() {\n    if (this.destroyCalled) {\n      return;\n    }\n    this.eventService.dispatchEvent({\n      type: \"gridPreDestroyed\",\n      state: this.beans.stateService?.getState() ?? {}\n    });\n    this.destroyCalled = true;\n    this.beans.ctrlsService.get(\"gridCtrl\")?.destroyGridUi();\n    this.beans.context.destroy();\n    super.destroy();\n  }\n  isDestroyCalled() {\n    return this.destroyCalled;\n  }\n};\n\n// community-modules/core/src/events.ts\nvar ALWAYS_SYNC_GLOBAL_EVENTS = /* @__PURE__ */ new Set([\"gridPreDestroyed\", \"fillStart\", \"pasteStart\"]);\nvar isSelectionUIEvent = (source) => {\n  return source === \"checkboxSelected\" || source === \"rowClicked\" || source === \"spaceKey\" || source === \"uiSelectAll\" || source === \"uiSelectAllCurrentPage\" || source === \"uiSelectAllFiltered\";\n};\n\n// community-modules/core/src/gridOptionsService.ts\nvar PROPERTY_COERCIONS = new Map([\n  ...PropertyKeys.BOOLEAN_PROPERTIES.map((key) => [key, toBoolean]),\n  ...PropertyKeys.NUMBER_PROPERTIES.map((key) => [key, toNumber]),\n  [\"groupAggFiltering\", (val) => typeof val === \"function\" ? val : toBoolean(val)],\n  [\"pageSize\", toConstrainedNum(1)],\n  [\"autoSizePadding\", toConstrainedNum(0)],\n  [\"keepDetailRowsCount\", toConstrainedNum(1)],\n  [\"rowBuffer\", toConstrainedNum(0)],\n  [\"infiniteInitialRowCount\", toConstrainedNum(1)],\n  [\"cacheOverflowSize\", toConstrainedNum(1)],\n  [\"cacheBlockSize\", toConstrainedNum(1)],\n  [\"serverSideInitialRowCount\", toConstrainedNum(1)],\n  [\"viewportRowModelPageSize\", toConstrainedNum(1)],\n  [\"viewportRowModelBufferSize\", toConstrainedNum(0)]\n]);\nfunction getCoercedValue(key, value) {\n  const coerceFunc = PROPERTY_COERCIONS.get(key);\n  if (!coerceFunc) {\n    return value;\n  }\n  return coerceFunc(value);\n}\nfunction getCoercedGridOptions(gridOptions) {\n  const newGo = {};\n  Object.entries(gridOptions).forEach(([key, value]) => {\n    const coercedValue = getCoercedValue(key, value);\n    newGo[key] = coercedValue;\n  });\n  return newGo;\n}\nvar _GridOptionsService = class _GridOptionsService extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"gos\";\n    // Used to hold user events until the grid is ready\n    // Required to support React 19 StrictMode. See IFrameworkOverrides.runWhenReadyAsync but also is likely a good idea that onGridReady is the first event fired.\n    this.gridReadyFired = false;\n    this.queueEvents = [];\n    this.domDataKey = \"__AG_\" + Math.random().toString();\n    this.propertyEventService = new LocalEventService();\n    // responsible for calling the onXXX functions on gridOptions\n    // It forces events defined in GridOptionsService.alwaysSyncGlobalEvents to be fired synchronously.\n    // This is required for events such as GridPreDestroyed.\n    // Other events can be fired asynchronously or synchronously depending on config.\n    this.globalEventHandlerFactory = (restrictToSyncOnly) => {\n      return (eventName, event) => {\n        if (!this.isAlive()) {\n          return;\n        }\n        const alwaysSync = ALWAYS_SYNC_GLOBAL_EVENTS.has(eventName);\n        if (alwaysSync && !restrictToSyncOnly || !alwaysSync && restrictToSyncOnly) {\n          return;\n        }\n        const fireEvent = (name, e) => {\n          const eventHandler = this.gridOptions[ComponentUtil.getCallbackForEvent(name)];\n          if (typeof eventHandler === \"function\") {\n            this.frameworkOverrides.wrapOutgoing(() => eventHandler(e));\n          }\n        };\n        if (this.gridReadyFired) {\n          fireEvent(eventName, event);\n        } else {\n          if (eventName === \"gridReady\") {\n            fireEvent(eventName, event);\n            this.gridReadyFired = true;\n            for (const q of this.queueEvents) {\n              fireEvent(q.eventName, q.event);\n            }\n            this.queueEvents = [];\n          } else {\n            this.queueEvents.push({ eventName, event });\n          }\n        }\n      };\n    };\n  }\n  wireBeans(beans) {\n    this.gridOptions = beans.gridOptions;\n    this.eGridDiv = beans.eGridDiv;\n    this.validationService = beans.validationService;\n    this.environment = beans.environment;\n    this.api = beans.gridApi;\n    this.gridId = beans.context.getGridId();\n  }\n  // This is quicker then having code call gridOptionsService.get('context')\n  get gridOptionsContext() {\n    return this.gridOptions[\"context\"];\n  }\n  postConstruct() {\n    const async = !this.get(\"suppressAsyncEvents\");\n    this.eventService.addGlobalListener(this.globalEventHandlerFactory().bind(this), async);\n    this.eventService.addGlobalListener(this.globalEventHandlerFactory(true).bind(this), false);\n    this.propertyEventService.setFrameworkOverrides(this.frameworkOverrides);\n    this.addManagedEventListeners({\n      gridOptionsChanged: ({ options }) => {\n        this.updateGridOptions({ options, force: true, source: \"gridOptionsUpdated\" });\n      }\n    });\n  }\n  destroy() {\n    super.destroy();\n    this.queueEvents = [];\n  }\n  /**\n   * Get the raw value of the GridOptions property provided.\n   * @param property\n   */\n  get(property) {\n    return this.gridOptions[property] ?? GRID_OPTION_DEFAULTS[property];\n  }\n  /**\n   * Get the GridOption callback but wrapped so that the common params of api and context are automatically applied to the params.\n   * @param property GridOption callback properties based on the fact that this property has a callback with params extending AgGridCommon\n   */\n  getCallback(property) {\n    return this.mergeGridCommonParams(this.gridOptions[property]);\n  }\n  /**\n   * Returns `true` if a value has been specified for this GridOption.\n   * @param property GridOption property\n   */\n  exists(property) {\n    return _exists(this.gridOptions[property]);\n  }\n  /**\n   * Wrap the user callback and attach the api and context to the params object on the way through.\n   * @param callback User provided callback\n   * @returns Wrapped callback where the params object not require api and context\n   */\n  mergeGridCommonParams(callback) {\n    if (callback) {\n      const wrapped = (callbackParams) => {\n        const mergedParams = callbackParams;\n        mergedParams.api = this.api;\n        mergedParams.context = this.gridOptionsContext;\n        return callback(mergedParams);\n      };\n      return wrapped;\n    }\n    return callback;\n  }\n  updateGridOptions({\n    options,\n    force,\n    source = \"api\"\n  }) {\n    const changeSet = { id: _GridOptionsService.changeSetId++, properties: [] };\n    const events = [];\n    Object.entries(options).forEach(([key, value]) => {\n      if (source === \"api\" && INITIAL_GRID_OPTION_KEYS[key]) {\n        _warnOnce(`${key} is an initial property and cannot be updated.`);\n      }\n      const coercedValue = getCoercedValue(key, value);\n      const shouldForce = force || typeof coercedValue === \"object\" && source === \"api\";\n      const previousValue = this.gridOptions[key];\n      if (shouldForce || previousValue !== coercedValue) {\n        this.gridOptions[key] = coercedValue;\n        const event = {\n          type: key,\n          currentValue: coercedValue,\n          previousValue,\n          changeSet,\n          source\n        };\n        events.push(event);\n      }\n    });\n    this.validationService?.processGridOptions(this.gridOptions);\n    changeSet.properties = events.map((event) => event.type);\n    events.forEach((event) => {\n      if (this.gridOptions.debug) {\n        _log(`Updated property ${event.type} from`, event.previousValue, ` to `, event.currentValue);\n      }\n      this.propertyEventService.dispatchEvent(event);\n    });\n  }\n  addPropertyEventListener(key, listener) {\n    this.propertyEventService.addEventListener(key, listener);\n  }\n  removePropertyEventListener(key, listener) {\n    this.propertyEventService.removeEventListener(key, listener);\n  }\n  getDomDataKey() {\n    return this.domDataKey;\n  }\n  getGridCommonParams() {\n    return {\n      api: this.api,\n      context: this.gridOptionsContext\n    };\n  }\n  addGridCommonParams(params) {\n    const updatedParams = params;\n    updatedParams.api = this.api;\n    updatedParams.context = this.gridOptionsContext;\n    return updatedParams;\n  }\n  assertModuleRegistered(moduleName, reason) {\n    return ModuleRegistry.__assertRegistered(moduleName, reason, this.gridId);\n  }\n  isModuleRegistered(moduleName) {\n    return ModuleRegistry.__isRegistered(moduleName, this.gridId);\n  }\n};\n_GridOptionsService.changeSetId = 0;\nvar GridOptionsService = _GridOptionsService;\n\n// community-modules/core/src/headerRendering/common/headerPosition.ts\nvar HeaderPositionUtils = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"headerPositionUtils\";\n  }\n  wireBeans(beans) {\n    this.visibleColsService = beans.visibleColsService;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  findHeader(focusedHeader, direction) {\n    let nextColumn;\n    let getColMethod;\n    if (isColumnGroup(focusedHeader.column)) {\n      nextColumn = this.visibleColsService.getGroupAtDirection(focusedHeader.column, direction);\n    } else {\n      getColMethod = `getCol${direction}`;\n      nextColumn = this.visibleColsService[getColMethod](focusedHeader.column);\n    }\n    if (!nextColumn) {\n      return;\n    }\n    const { headerRowIndex } = focusedHeader;\n    if (this.getHeaderRowType(headerRowIndex) !== \"filter\" /* FLOATING_FILTER */) {\n      const columnsInPath = [nextColumn];\n      while (nextColumn.getParent()) {\n        nextColumn = nextColumn.getParent();\n        columnsInPath.push(nextColumn);\n      }\n      nextColumn = columnsInPath[columnsInPath.length - 1 - headerRowIndex];\n    }\n    const { column, headerRowIndex: indexToFocus } = this.getHeaderIndexToFocus(nextColumn, headerRowIndex);\n    return {\n      column,\n      headerRowIndex: indexToFocus\n    };\n  }\n  getHeaderIndexToFocus(column, currentIndex) {\n    let nextColumn;\n    if (isColumnGroup(column) && this.isAnyChildSpanningHeaderHeight(column) && column.isPadding()) {\n      const targetColumn = column;\n      nextColumn = targetColumn.getLeafColumns()[0];\n      let col = nextColumn;\n      while (col !== targetColumn) {\n        currentIndex++;\n        col = col.getParent();\n      }\n    }\n    return {\n      column: nextColumn || column,\n      headerRowIndex: currentIndex\n    };\n  }\n  isAnyChildSpanningHeaderHeight(columnGroup) {\n    if (!columnGroup) {\n      return false;\n    }\n    return columnGroup.getLeafColumns().some((col) => col.isSpanHeaderHeight());\n  }\n  getColumnVisibleParent(currentColumn, currentIndex) {\n    const currentRowType = this.getHeaderRowType(currentIndex);\n    const isFloatingFilter = currentRowType === \"filter\" /* FLOATING_FILTER */;\n    const isColumn2 = currentRowType === \"column\" /* COLUMN */;\n    let nextFocusColumn = isFloatingFilter ? currentColumn : currentColumn.getParent();\n    let nextRow = currentIndex - 1;\n    let headerRowIndexWithoutSpan = nextRow;\n    if (isColumn2 && this.isAnyChildSpanningHeaderHeight(currentColumn.getParent())) {\n      while (nextFocusColumn && nextFocusColumn.isPadding()) {\n        nextFocusColumn = nextFocusColumn.getParent();\n        nextRow--;\n      }\n      headerRowIndexWithoutSpan = nextRow;\n      if (nextRow < 0) {\n        nextFocusColumn = currentColumn;\n        nextRow = currentIndex;\n        headerRowIndexWithoutSpan = void 0;\n      }\n    }\n    return { column: nextFocusColumn, headerRowIndex: nextRow, headerRowIndexWithoutSpan };\n  }\n  getColumnVisibleChild(column, currentIndex, direction = \"After\") {\n    const currentRowType = this.getHeaderRowType(currentIndex);\n    let nextFocusColumn = column;\n    let nextRow = currentIndex + 1;\n    const headerRowIndexWithoutSpan = nextRow;\n    if (currentRowType === \"group\" /* COLUMN_GROUP */) {\n      const leafColumns = column.getDisplayedLeafColumns();\n      const leafColumn = direction === \"After\" ? leafColumns[0] : _last(leafColumns);\n      const columnsInTheWay = [];\n      let currentColumn = leafColumn;\n      while (currentColumn.getParent() !== column) {\n        currentColumn = currentColumn.getParent();\n        columnsInTheWay.push(currentColumn);\n      }\n      nextFocusColumn = leafColumn;\n      if (leafColumn.isSpanHeaderHeight()) {\n        for (let i = columnsInTheWay.length - 1; i >= 0; i--) {\n          const colToFocus = columnsInTheWay[i];\n          if (!colToFocus.isPadding()) {\n            nextFocusColumn = colToFocus;\n            break;\n          }\n          nextRow++;\n        }\n      } else {\n        nextFocusColumn = _last(columnsInTheWay);\n        if (!nextFocusColumn) {\n          nextFocusColumn = leafColumn;\n        }\n      }\n    }\n    return { column: nextFocusColumn, headerRowIndex: nextRow, headerRowIndexWithoutSpan };\n  }\n  getHeaderRowType(rowIndex) {\n    const centerHeaderContainer = this.ctrlsService.getHeaderRowContainerCtrl();\n    if (centerHeaderContainer) {\n      return centerHeaderContainer.getRowType(rowIndex);\n    }\n  }\n  findColAtEdgeForHeaderRow(level, position) {\n    const displayedColumns = this.visibleColsService.getAllCols();\n    const column = displayedColumns[position === \"start\" ? 0 : displayedColumns.length - 1];\n    if (!column) {\n      return;\n    }\n    const childContainer = this.ctrlsService.getHeaderRowContainerCtrl(column.getPinned());\n    const type = childContainer?.getRowType(level);\n    if (type == \"group\" /* COLUMN_GROUP */) {\n      const columnGroup = this.visibleColsService.getColGroupAtLevel(column, level);\n      return {\n        headerRowIndex: level,\n        column: columnGroup\n      };\n    }\n    return {\n      // if type==null, means the header level didn't exist\n      headerRowIndex: type == null ? -1 : level,\n      column\n    };\n  }\n};\n\n// community-modules/core/src/localeService.ts\nvar LocaleService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"localeService\";\n  }\n  getLocaleTextFunc() {\n    const getLocaleText = this.gos.getCallback(\"getLocaleText\");\n    if (getLocaleText) {\n      return (key, defaultValue, variableValues) => {\n        const params = {\n          key,\n          defaultValue,\n          variableValues\n        };\n        return getLocaleText(params);\n      };\n    }\n    const localeText = this.gos.get(\"localeText\");\n    return (key, defaultValue, variableValues) => {\n      let localisedText = localeText && localeText[key];\n      if (localisedText && variableValues && variableValues.length) {\n        let found = 0;\n        while (true) {\n          if (found >= variableValues.length) {\n            break;\n          }\n          const idx = localisedText.indexOf(\"${variable}\");\n          if (idx === -1) {\n            break;\n          }\n          localisedText = localisedText.replace(\"${variable}\", variableValues[found++]);\n        }\n      }\n      return localisedText ?? defaultValue;\n    };\n  }\n};\n\n// community-modules/core/src/misc/apiEventService.ts\nvar ApiEventService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"apiEventService\";\n    this.syncEventListeners = /* @__PURE__ */ new Map();\n    this.asyncEventListeners = /* @__PURE__ */ new Map();\n    this.syncGlobalEventListeners = /* @__PURE__ */ new Set();\n    this.globalEventListenerPairs = /* @__PURE__ */ new Map();\n  }\n  postConstruct() {\n    this.frameworkEventWrappingService = new FrameworkEventListenerService(this.getFrameworkOverrides());\n  }\n  addEventListener(eventType, userListener) {\n    const listener = this.frameworkEventWrappingService.wrap(eventType, userListener);\n    const async = _useAsyncEvents(this.gos) && !ALWAYS_SYNC_GLOBAL_EVENTS.has(eventType);\n    const listeners = async ? this.asyncEventListeners : this.syncEventListeners;\n    if (!listeners.has(eventType)) {\n      listeners.set(eventType, /* @__PURE__ */ new Set());\n    }\n    listeners.get(eventType).add(listener);\n    this.eventService.addEventListener(eventType, listener, async);\n  }\n  removeEventListener(eventType, userListener) {\n    const listener = this.frameworkEventWrappingService.unwrap(eventType, userListener);\n    const asyncListeners = this.asyncEventListeners.get(eventType);\n    const hasAsync = !!asyncListeners?.delete(listener);\n    if (!hasAsync) {\n      this.syncEventListeners.get(eventType)?.delete(listener);\n    }\n    this.eventService.removeEventListener(eventType, listener, hasAsync);\n  }\n  addGlobalListener(userListener) {\n    const listener = this.frameworkEventWrappingService.wrapGlobal(userListener);\n    const async = _useAsyncEvents(this.gos);\n    if (async) {\n      const syncListener = (eventType, event) => {\n        if (ALWAYS_SYNC_GLOBAL_EVENTS.has(eventType)) {\n          listener(eventType, event);\n        }\n      };\n      const asyncListener = (eventType, event) => {\n        if (!ALWAYS_SYNC_GLOBAL_EVENTS.has(eventType)) {\n          listener(eventType, event);\n        }\n      };\n      this.globalEventListenerPairs.set(userListener, { syncListener, asyncListener });\n      this.eventService.addGlobalListener(syncListener, false);\n      this.eventService.addGlobalListener(asyncListener, true);\n    } else {\n      this.syncGlobalEventListeners.add(listener);\n      this.eventService.addGlobalListener(listener, false);\n    }\n  }\n  removeGlobalListener(userListener) {\n    const listener = this.frameworkEventWrappingService.unwrapGlobal(userListener);\n    const hasAsync = this.globalEventListenerPairs.has(listener);\n    if (hasAsync) {\n      const { syncListener, asyncListener } = this.globalEventListenerPairs.get(listener);\n      this.eventService.removeGlobalListener(syncListener, false);\n      this.eventService.removeGlobalListener(asyncListener, true);\n      this.globalEventListenerPairs.delete(userListener);\n    } else {\n      this.syncGlobalEventListeners.delete(listener);\n      this.eventService.removeGlobalListener(listener, false);\n    }\n  }\n  destroyEventListeners(map, async) {\n    map.forEach((listeners, eventType) => {\n      listeners.forEach((listener) => this.eventService.removeEventListener(eventType, listener, async));\n      listeners.clear();\n    });\n    map.clear();\n  }\n  destroyGlobalListeners(set, async) {\n    set.forEach((listener) => this.eventService.removeGlobalListener(listener, async));\n    set.clear();\n  }\n  destroy() {\n    super.destroy();\n    this.destroyEventListeners(this.syncEventListeners, false);\n    this.destroyEventListeners(this.asyncEventListeners, true);\n    this.destroyGlobalListeners(this.syncGlobalEventListeners, false);\n    this.globalEventListenerPairs.forEach(({ syncListener, asyncListener }) => {\n      this.eventService.removeGlobalListener(syncListener, false);\n      this.eventService.removeGlobalListener(asyncListener, true);\n    });\n    this.globalEventListenerPairs.clear();\n  }\n};\n\n// community-modules/core/src/pagination/pageBoundsListener.ts\nvar PageBoundsListener = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"pageBoundsListener\";\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.paginationService = beans.paginationService;\n    this.pageBoundsService = beans.pageBoundsService;\n  }\n  postConstruct() {\n    this.addManagedEventListeners({\n      modelUpdated: this.onModelUpdated.bind(this),\n      recalculateRowBounds: this.calculatePages.bind(this)\n    });\n    this.onModelUpdated();\n  }\n  onModelUpdated(modelUpdatedEvent) {\n    this.calculatePages();\n    this.eventService.dispatchEvent({\n      type: \"paginationChanged\",\n      animate: modelUpdatedEvent?.animate ?? false,\n      newData: modelUpdatedEvent?.newData ?? false,\n      newPage: modelUpdatedEvent?.newPage ?? false,\n      newPageSize: modelUpdatedEvent?.newPageSize ?? false,\n      keepRenderedRows: modelUpdatedEvent?.keepRenderedRows ?? false\n    });\n  }\n  calculatePages() {\n    if (this.paginationService) {\n      this.paginationService.calculatePages();\n    } else {\n      this.pageBoundsService.calculateBounds(0, this.rowModel.getRowCount() - 1);\n    }\n  }\n};\n\n// community-modules/core/src/pagination/pageBoundsService.ts\nvar PageBoundsService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"pageBoundsService\";\n    this.pixelOffset = 0;\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  getFirstRow() {\n    return this.topRowBounds ? this.topRowBounds.rowIndex : -1;\n  }\n  getLastRow() {\n    return this.bottomRowBounds ? this.bottomRowBounds.rowIndex : -1;\n  }\n  getCurrentPageHeight() {\n    if (_missing(this.topRowBounds) || _missing(this.bottomRowBounds)) {\n      return 0;\n    }\n    return Math.max(this.bottomRowBounds.rowTop + this.bottomRowBounds.rowHeight - this.topRowBounds.rowTop, 0);\n  }\n  getCurrentPagePixelRange() {\n    const pageFirstPixel = this.topRowBounds ? this.topRowBounds.rowTop : 0;\n    const pageLastPixel = this.bottomRowBounds ? this.bottomRowBounds.rowTop + this.bottomRowBounds.rowHeight : 0;\n    return { pageFirstPixel, pageLastPixel };\n  }\n  calculateBounds(topDisplayedRowIndex, bottomDisplayedRowIndex) {\n    this.topRowBounds = this.rowModel.getRowBounds(topDisplayedRowIndex);\n    if (this.topRowBounds) {\n      this.topRowBounds.rowIndex = topDisplayedRowIndex;\n    }\n    this.bottomRowBounds = this.rowModel.getRowBounds(bottomDisplayedRowIndex);\n    if (this.bottomRowBounds) {\n      this.bottomRowBounds.rowIndex = bottomDisplayedRowIndex;\n    }\n    this.calculatePixelOffset();\n  }\n  getPixelOffset() {\n    return this.pixelOffset;\n  }\n  calculatePixelOffset() {\n    const value = _exists(this.topRowBounds) ? this.topRowBounds.rowTop : 0;\n    if (this.pixelOffset === value) {\n      return;\n    }\n    this.pixelOffset = value;\n    this.eventService.dispatchEvent({ type: \"paginationPixelOffsetChanged\" });\n  }\n};\n\n// community-modules/core/src/rendering/ariaAnnouncementService.ts\nvar AriaAnnouncementService = class extends BeanStub {\n  constructor() {\n    super();\n    this.beanName = \"ariaAnnouncementService\";\n    this.descriptionContainer = null;\n    this.pendingAnnouncements = /* @__PURE__ */ new Map();\n    this.updateAnnouncement = _debounce(this.updateAnnouncement.bind(this), 200);\n  }\n  wireBeans(beans) {\n    this.eGridDiv = beans.eGridDiv;\n  }\n  postConstruct() {\n    const eDocument = _getDocument(this.gos);\n    const div = this.descriptionContainer = eDocument.createElement(\"div\");\n    div.classList.add(\"ag-aria-description-container\");\n    _setAriaLive(div, \"polite\");\n    _setAriaRelevant(div, \"additions text\");\n    _setAriaAtomic(div, true);\n    this.eGridDiv.appendChild(div);\n  }\n  /**\n   * @param key used for debouncing calls\n   */\n  announceValue(value, key) {\n    this.pendingAnnouncements.set(key, value);\n    this.updateAnnouncement();\n  }\n  updateAnnouncement() {\n    if (!this.descriptionContainer) {\n      return;\n    }\n    const value = Array.from(this.pendingAnnouncements.values()).join(\". \");\n    this.pendingAnnouncements.clear();\n    this.descriptionContainer.textContent = \"\";\n    setTimeout(() => {\n      if (this.isAlive() && this.descriptionContainer) {\n        this.descriptionContainer.textContent = value;\n      }\n    }, 50);\n  }\n  destroy() {\n    super.destroy();\n    const { descriptionContainer } = this;\n    if (descriptionContainer) {\n      _clearElement(descriptionContainer);\n      if (descriptionContainer.parentElement) {\n        descriptionContainer.parentElement.removeChild(descriptionContainer);\n      }\n    }\n    this.descriptionContainer = null;\n    this.eGridDiv = null;\n    this.pendingAnnouncements.clear();\n  }\n};\n\n// community-modules/core/src/rendering/columnAnimationService.ts\nvar ColumnAnimationService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnAnimationService\";\n    this.executeNextFuncs = [];\n    this.executeLaterFuncs = [];\n    this.active = false;\n    // activeNext starts with active but it is reset earlier after the nextFuncs are cleared\n    // to prevent calls made to executeNextVMTurn from queuing functions after executeNextFuncs has already been flushed,\n    this.activeNext = false;\n    this.suppressAnimation = false;\n    this.animationThreadCount = 0;\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n  }\n  postConstruct() {\n    this.ctrlsService.whenReady(this, (p) => this.gridBodyCtrl = p.gridBodyCtrl);\n  }\n  isActive() {\n    return this.active && !this.suppressAnimation;\n  }\n  setSuppressAnimation(suppress) {\n    this.suppressAnimation = suppress;\n  }\n  start() {\n    if (this.active) {\n      return;\n    }\n    if (this.gos.get(\"suppressColumnMoveAnimation\")) {\n      return;\n    }\n    if (this.gos.get(\"enableRtl\")) {\n      return;\n    }\n    this.ensureAnimationCssClassPresent();\n    this.active = true;\n    this.activeNext = true;\n  }\n  finish() {\n    if (!this.active) {\n      return;\n    }\n    this.flush(\n      () => this.activeNext = false,\n      () => this.active = false\n    );\n  }\n  executeNextVMTurn(func) {\n    if (this.activeNext) {\n      this.executeNextFuncs.push(func);\n    } else {\n      func();\n    }\n  }\n  executeLaterVMTurn(func) {\n    if (this.active) {\n      this.executeLaterFuncs.push(func);\n    } else {\n      func();\n    }\n  }\n  ensureAnimationCssClassPresent() {\n    this.animationThreadCount++;\n    const animationThreadCountCopy = this.animationThreadCount;\n    this.gridBodyCtrl.setColumnMovingCss(true);\n    this.executeLaterFuncs.push(() => {\n      if (this.animationThreadCount === animationThreadCountCopy) {\n        this.gridBodyCtrl.setColumnMovingCss(false);\n      }\n    });\n  }\n  flush(callbackNext, callbackLater) {\n    if (this.executeNextFuncs.length === 0 && this.executeLaterFuncs.length === 0) {\n      callbackNext();\n      callbackLater();\n      return;\n    }\n    const runFuncs = (queue) => {\n      while (queue.length) {\n        const func = queue.pop();\n        if (func) {\n          func();\n        }\n      }\n    };\n    this.getFrameworkOverrides().wrapIncoming(() => {\n      window.setTimeout(() => {\n        callbackNext();\n        runFuncs(this.executeNextFuncs);\n      }, 0);\n      window.setTimeout(() => {\n        callbackLater();\n        runFuncs(this.executeLaterFuncs);\n      }, 200);\n    });\n  }\n};\n\n// community-modules/core/src/rendering/columnHoverService.ts\nvar ColumnHoverService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnHoverService\";\n  }\n  setMouseOver(columns) {\n    this.updateState(columns);\n  }\n  clearMouseOver() {\n    this.updateState(null);\n  }\n  isHovered(column) {\n    return !!this.selectedColumns && this.selectedColumns.indexOf(column) >= 0;\n  }\n  updateState(columns) {\n    this.selectedColumns = columns;\n    this.eventService.dispatchEvent({\n      type: \"columnHoverChanged\"\n    });\n  }\n};\n\n// community-modules/core/src/rendering/overlays/overlayService.ts\nvar OverlayService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"overlayService\";\n    this.state = 0 /* Hidden */;\n    this.showInitialOverlay = true;\n    this.wrapperPadding = 0;\n  }\n  wireBeans(beans) {\n    this.userComponentFactory = beans.userComponentFactory;\n    this.rowModel = beans.rowModel;\n    this.columnModel = beans.columnModel;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  postConstruct() {\n    this.isClientSide = _isClientSideRowModel(this.gos);\n    const updateOverlayVisibility = () => this.updateOverlayVisibility();\n    this.addManagedEventListeners({\n      newColumnsLoaded: updateOverlayVisibility,\n      rowDataUpdated: updateOverlayVisibility,\n      gridSizeChanged: this.onGridSizeChanged.bind(this),\n      rowCountReady: () => {\n        this.showInitialOverlay = false;\n        this.updateOverlayVisibility();\n      }\n    });\n    this.addManagedPropertyListener(\"loading\", updateOverlayVisibility);\n  }\n  setOverlayWrapperComp(overlayWrapperComp) {\n    this.overlayWrapperComp = overlayWrapperComp;\n    this.updateOverlayVisibility();\n  }\n  /** Returns true if the overlay is visible. */\n  isVisible() {\n    return this.state !== 0 /* Hidden */ && !!this.overlayWrapperComp;\n  }\n  /** Returns true if the overlay is visible and is exclusive (popup over the grid) */\n  isExclusive() {\n    return this.state === 1 /* Loading */ && !!this.overlayWrapperComp;\n  }\n  /** Gets the overlay wrapper component */\n  getOverlayWrapper() {\n    return this.overlayWrapperComp;\n  }\n  showLoadingOverlay() {\n    this.showInitialOverlay = false;\n    const loading = this.gos.get(\"loading\");\n    if (!loading && (loading !== void 0 || this.gos.get(\"suppressLoadingOverlay\"))) {\n      return;\n    }\n    this.doShowLoadingOverlay();\n  }\n  showNoRowsOverlay() {\n    this.showInitialOverlay = false;\n    if (this.gos.get(\"loading\") || this.gos.get(\"suppressNoRowsOverlay\")) {\n      return;\n    }\n    this.doShowNoRowsOverlay();\n  }\n  hideOverlay() {\n    this.showInitialOverlay = false;\n    if (this.gos.get(\"loading\")) {\n      _warnOnce(\n        \"Since v32, `api.hideOverlay()` does not hide the loading overlay when `loading=true`. Set `loading=false` instead.\"\n      );\n      return;\n    }\n    this.doHideOverlay();\n  }\n  updateOverlayVisibility() {\n    if (!this.overlayWrapperComp) {\n      this.state = 0 /* Hidden */;\n      return;\n    }\n    let loading = this.gos.get(\"loading\");\n    if (this.showInitialOverlay && loading === void 0 && !this.gos.get(\"suppressLoadingOverlay\")) {\n      loading = !this.gos.get(\"columnDefs\") || !this.columnModel.isReady() || !this.gos.get(\"rowData\") && this.isClientSide;\n    }\n    if (loading) {\n      if (this.state !== 1 /* Loading */) {\n        this.doShowLoadingOverlay();\n      }\n    } else {\n      this.showInitialOverlay = false;\n      if (this.rowModel.isEmpty() && !this.gos.get(\"suppressNoRowsOverlay\") && this.isClientSide) {\n        if (this.state !== 2 /* NoRows */) {\n          this.doShowNoRowsOverlay();\n        }\n      } else if (this.state !== 0 /* Hidden */) {\n        this.doHideOverlay();\n      }\n    }\n  }\n  doShowLoadingOverlay() {\n    if (!this.overlayWrapperComp) {\n      return;\n    }\n    this.state = 1 /* Loading */;\n    this.showOverlay(\n      this.userComponentFactory.getLoadingOverlayCompDetails({}),\n      \"ag-overlay-loading-wrapper\",\n      \"loadingOverlayComponentParams\"\n    );\n    this.updateExclusive();\n  }\n  doShowNoRowsOverlay() {\n    if (!this.overlayWrapperComp) {\n      return;\n    }\n    this.state = 2 /* NoRows */;\n    this.showOverlay(\n      this.userComponentFactory.getNoRowsOverlayCompDetails({}),\n      \"ag-overlay-no-rows-wrapper\",\n      \"noRowsOverlayComponentParams\"\n    );\n    this.updateExclusive();\n  }\n  doHideOverlay() {\n    if (!this.overlayWrapperComp) {\n      return;\n    }\n    this.state = 0 /* Hidden */;\n    this.overlayWrapperComp.hideOverlay();\n    this.updateExclusive();\n  }\n  showOverlay(compDetails, wrapperCssClass, gridOption) {\n    const promise = compDetails.newAgStackInstance();\n    this.overlayWrapperComp?.showOverlay(promise, wrapperCssClass, this.isExclusive(), gridOption);\n    this.refreshWrapperPadding();\n  }\n  updateExclusive() {\n    const wasExclusive = this.exclusive;\n    this.exclusive = this.isExclusive();\n    if (this.exclusive !== wasExclusive) {\n      this.eventService.dispatchEvent({\n        type: \"overlayExclusiveChanged\"\n      });\n    }\n  }\n  onGridSizeChanged() {\n    this.refreshWrapperPadding();\n  }\n  refreshWrapperPadding() {\n    if (!this.overlayWrapperComp) {\n      return;\n    }\n    let newPadding = 0;\n    if (this.state === 2 /* NoRows */) {\n      const headerCtrl = this.ctrlsService.get(\"gridHeaderCtrl\");\n      const headerHeight = headerCtrl?.getHeaderHeight() || 0;\n      newPadding = headerHeight;\n    } else if (this.wrapperPadding !== 0) {\n      newPadding = 0;\n    }\n    if (this.wrapperPadding === newPadding) {\n      return;\n    }\n    this.wrapperPadding = newPadding;\n    this.overlayWrapperComp.updateOverlayWrapperPaddingTop(newPadding);\n  }\n};\n\n// community-modules/core/src/rendering/row/rowCssClassCalculator.ts\nvar RowCssClassCalculator = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowCssClassCalculator\";\n  }\n  wireBeans(beans) {\n    this.stylingService = beans.stylingService;\n  }\n  getInitialRowClasses(params) {\n    const classes = [];\n    if (_exists(params.extraCssClass)) {\n      classes.push(params.extraCssClass);\n    }\n    classes.push(\"ag-row\");\n    classes.push(params.rowFocused ? \"ag-row-focus\" : \"ag-row-no-focus\");\n    if (params.fadeRowIn) {\n      classes.push(\"ag-opacity-zero\");\n    }\n    classes.push(params.rowIsEven ? \"ag-row-even\" : \"ag-row-odd\");\n    if (params.rowNode.isRowPinned()) {\n      classes.push(\"ag-row-pinned\");\n    }\n    if (params.rowNode.isSelected()) {\n      classes.push(\"ag-row-selected\");\n    }\n    if (params.rowNode.footer) {\n      classes.push(\"ag-row-footer\");\n    }\n    classes.push(\"ag-row-level-\" + params.rowLevel);\n    if (params.rowNode.stub) {\n      classes.push(\"ag-row-loading\");\n    }\n    if (params.fullWidthRow) {\n      classes.push(\"ag-full-width-row\");\n    }\n    if (params.expandable) {\n      classes.push(\"ag-row-group\");\n      classes.push(params.rowNode.expanded ? \"ag-row-group-expanded\" : \"ag-row-group-contracted\");\n    }\n    if (params.rowNode.dragging) {\n      classes.push(\"ag-row-dragging\");\n    }\n    _pushAll(classes, this.processClassesFromGridOptions(params.rowNode));\n    _pushAll(classes, this.preProcessRowClassRules(params.rowNode));\n    classes.push(params.printLayout ? \"ag-row-position-relative\" : \"ag-row-position-absolute\");\n    if (params.firstRowOnPage) {\n      classes.push(\"ag-row-first\");\n    }\n    if (params.lastRowOnPage) {\n      classes.push(\"ag-row-last\");\n    }\n    if (params.fullWidthRow) {\n      if (params.pinned === \"left\") {\n        classes.push(\"ag-cell-last-left-pinned\");\n      }\n      if (params.pinned === \"right\") {\n        classes.push(\"ag-cell-first-right-pinned\");\n      }\n    }\n    return classes;\n  }\n  processClassesFromGridOptions(rowNode) {\n    const res = [];\n    const process = (rowCls) => {\n      if (typeof rowCls === \"string\") {\n        res.push(rowCls);\n      } else if (Array.isArray(rowCls)) {\n        rowCls.forEach((e) => res.push(e));\n      }\n    };\n    const rowClass = this.gos.get(\"rowClass\");\n    if (rowClass) {\n      if (typeof rowClass === \"function\") {\n        _warnOnce(\"rowClass should not be a function, please use getRowClass instead\");\n        return [];\n      }\n      process(rowClass);\n    }\n    const rowClassFunc = this.gos.getCallback(\"getRowClass\");\n    if (rowClassFunc) {\n      const params = {\n        data: rowNode.data,\n        node: rowNode,\n        rowIndex: rowNode.rowIndex\n      };\n      const rowClassFuncResult = rowClassFunc(params);\n      process(rowClassFuncResult);\n    }\n    return res;\n  }\n  preProcessRowClassRules(rowNode) {\n    const res = [];\n    this.processRowClassRules(\n      rowNode,\n      (className) => {\n        res.push(className);\n      },\n      () => {\n      }\n    );\n    return res;\n  }\n  processRowClassRules(rowNode, onApplicableClass, onNotApplicableClass) {\n    const rowClassParams = this.gos.addGridCommonParams({\n      data: rowNode.data,\n      node: rowNode,\n      rowIndex: rowNode.rowIndex\n    });\n    this.stylingService.processClassRules(\n      void 0,\n      this.gos.get(\"rowClassRules\"),\n      rowClassParams,\n      onApplicableClass,\n      onNotApplicableClass\n    );\n  }\n  calculateRowLevel(rowNode) {\n    if (rowNode.group) {\n      return rowNode.level;\n    }\n    return rowNode.parent ? rowNode.parent.level + 1 : 0;\n  }\n};\n\n// community-modules/core/src/rendering/rowContainerHeightService.ts\nvar RowContainerHeightService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowContainerHeightService\";\n    // the scrollY position\n    this.scrollY = 0;\n    // how tall the body is\n    this.uiBodyHeight = 0;\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n  }\n  postConstruct() {\n    this.addManagedEventListeners({ bodyHeightChanged: this.updateOffset.bind(this) });\n    this.maxDivHeight = _getMaxDivHeight();\n    if (this.gos.get(\"debug\")) {\n      _log(\"RowContainerHeightService - maxDivHeight = \" + this.maxDivHeight);\n    }\n  }\n  isStretching() {\n    return this.stretching;\n  }\n  getDivStretchOffset() {\n    return this.divStretchOffset;\n  }\n  updateOffset() {\n    if (!this.stretching) {\n      return;\n    }\n    const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n    const newScrollY = gridBodyCon.getScrollFeature().getVScrollPosition().top;\n    const newBodyHeight = this.getUiBodyHeight();\n    const atLeastOneChanged = newScrollY !== this.scrollY || newBodyHeight !== this.uiBodyHeight;\n    if (atLeastOneChanged) {\n      this.scrollY = newScrollY;\n      this.uiBodyHeight = newBodyHeight;\n      this.calculateOffset();\n    }\n  }\n  calculateOffset() {\n    this.setUiContainerHeight(this.maxDivHeight);\n    this.pixelsToShave = this.modelHeight - this.uiContainerHeight;\n    this.maxScrollY = this.uiContainerHeight - this.uiBodyHeight;\n    const scrollPercent = this.scrollY / this.maxScrollY;\n    const divStretchOffset = scrollPercent * this.pixelsToShave;\n    if (this.gos.get(\"debug\")) {\n      _log(\n        `RowContainerHeightService - Div Stretch Offset = ${divStretchOffset} (${this.pixelsToShave} * ${scrollPercent})`\n      );\n    }\n    this.setDivStretchOffset(divStretchOffset);\n  }\n  setUiContainerHeight(height) {\n    if (height !== this.uiContainerHeight) {\n      this.uiContainerHeight = height;\n      this.eventService.dispatchEvent({ type: \"rowContainerHeightChanged\" });\n    }\n  }\n  clearOffset() {\n    this.setUiContainerHeight(this.modelHeight);\n    this.pixelsToShave = 0;\n    this.setDivStretchOffset(0);\n  }\n  setDivStretchOffset(newOffset) {\n    const newOffsetFloor = typeof newOffset === \"number\" ? Math.floor(newOffset) : null;\n    if (this.divStretchOffset === newOffsetFloor) {\n      return;\n    }\n    this.divStretchOffset = newOffsetFloor;\n    this.eventService.dispatchEvent({ type: \"heightScaleChanged\" });\n  }\n  setModelHeight(modelHeight) {\n    this.modelHeight = modelHeight;\n    this.stretching = modelHeight != null && // null happens when in print layout\n    this.maxDivHeight > 0 && modelHeight > this.maxDivHeight;\n    if (this.stretching) {\n      this.calculateOffset();\n    } else {\n      this.clearOffset();\n    }\n  }\n  getUiContainerHeight() {\n    return this.uiContainerHeight;\n  }\n  getRealPixelPosition(modelPixel) {\n    return modelPixel - this.divStretchOffset;\n  }\n  getUiBodyHeight() {\n    const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n    const pos = gridBodyCon.getScrollFeature().getVScrollPosition();\n    return pos.bottom - pos.top;\n  }\n  getScrollPositionForPixel(rowTop) {\n    if (this.pixelsToShave <= 0) {\n      return rowTop;\n    }\n    const modelMaxScroll = this.modelHeight - this.getUiBodyHeight();\n    const scrollPercent = rowTop / modelMaxScroll;\n    const scrollPixel = this.maxScrollY * scrollPercent;\n    return scrollPixel;\n  }\n};\n\n// community-modules/core/src/rowNodes/rowNodeSorter.ts\nvar RowNodeSorter = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowNodeSorter\";\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.columnModel = beans.columnModel;\n    this.showRowGroupColsService = beans.showRowGroupColsService;\n  }\n  postConstruct() {\n    this.isAccentedSort = this.gos.get(\"accentedSort\");\n    this.primaryColumnsSortGroups = _isColumnsSortingCoupledToGroup(this.gos);\n    this.addManagedPropertyListener(\n      \"accentedSort\",\n      (propChange) => this.isAccentedSort = propChange.currentValue\n    );\n    this.addManagedPropertyListener(\n      \"autoGroupColumnDef\",\n      () => this.primaryColumnsSortGroups = _isColumnsSortingCoupledToGroup(this.gos)\n    );\n  }\n  doFullSort(rowNodes, sortOptions) {\n    const mapper = (rowNode, pos) => ({ currentPos: pos, rowNode });\n    const sortedRowNodes = rowNodes.map(mapper);\n    sortedRowNodes.sort(this.compareRowNodes.bind(this, sortOptions));\n    return sortedRowNodes.map((item) => item.rowNode);\n  }\n  compareRowNodes(sortOptions, sortedNodeA, sortedNodeB) {\n    const nodeA = sortedNodeA.rowNode;\n    const nodeB = sortedNodeB.rowNode;\n    for (let i = 0, len = sortOptions.length; i < len; i++) {\n      const sortOption = sortOptions[i];\n      const isDescending = sortOption.sort === \"desc\";\n      const valueA = this.getValue(nodeA, sortOption.column);\n      const valueB = this.getValue(nodeB, sortOption.column);\n      let comparatorResult;\n      const providedComparator = this.getComparator(sortOption, nodeA);\n      if (providedComparator) {\n        comparatorResult = providedComparator(valueA, valueB, nodeA, nodeB, isDescending);\n      } else {\n        comparatorResult = _defaultComparator(valueA, valueB, this.isAccentedSort);\n      }\n      const validResult = !isNaN(comparatorResult);\n      if (validResult && comparatorResult !== 0) {\n        return sortOption.sort === \"asc\" ? comparatorResult : comparatorResult * -1;\n      }\n    }\n    return sortedNodeA.currentPos - sortedNodeB.currentPos;\n  }\n  getComparator(sortOption, rowNode) {\n    const column = sortOption.column;\n    const comparatorOnCol = column.getColDef().comparator;\n    if (comparatorOnCol != null) {\n      return comparatorOnCol;\n    }\n    if (!column.getColDef().showRowGroup) {\n      return;\n    }\n    const groupLeafField = !rowNode.group && column.getColDef().field;\n    if (!groupLeafField) {\n      return;\n    }\n    const primaryColumn = this.columnModel.getColDefCol(groupLeafField);\n    if (!primaryColumn) {\n      return;\n    }\n    return primaryColumn.getColDef().comparator;\n  }\n  getValue(node, column) {\n    if (!this.primaryColumnsSortGroups) {\n      return this.valueService.getValue(column, node, false, false);\n    }\n    const isNodeGroupedAtLevel = node.rowGroupColumn === column;\n    if (isNodeGroupedAtLevel) {\n      const isGroupRows = _isGroupUseEntireRow(this.gos, this.columnModel.isPivotActive());\n      if (isGroupRows) {\n        const leafChild = node.allLeafChildren?.[0];\n        if (leafChild) {\n          return this.valueService.getValue(column, leafChild, false, false);\n        }\n        return void 0;\n      }\n      const displayCol = this.showRowGroupColsService?.getShowRowGroupCol(column.getId());\n      if (!displayCol) {\n        return void 0;\n      }\n      return node.groupData?.[displayCol.getId()];\n    }\n    if (node.group && column.getColDef().showRowGroup) {\n      return void 0;\n    }\n    return this.valueService.getValue(column, node, false, false);\n  }\n};\n\n// community-modules/core/src/utils/changedPath.ts\nvar ChangedPath = class {\n  constructor(keepingColumns, rootNode) {\n    // whether changed path is active of not. it is active when a) doing\n    // a transaction update or b) doing change detection. if we are doing\n    // a CSRM refresh for other reasons (after sort or filter, or user calling\n    // setRowData() without delta mode) then we are not active. we are also\n    // marked as not active if secondary columns change in pivot (as this impacts\n    // aggregations)\n    this.active = true;\n    // for each node in the change path, we also store which columns need\n    // to be re-aggregated.\n    this.nodeIdsToColumns = {};\n    // for quick lookup, all items in the change path are mapped by nodeId\n    this.mapToItems = {};\n    this.keepingColumns = keepingColumns;\n    this.pathRoot = {\n      rowNode: rootNode,\n      children: null\n    };\n    this.mapToItems[rootNode.id] = this.pathRoot;\n  }\n  // can be set inactive by:\n  // a) ClientSideRowModel, if no transactions or\n  // b) PivotService, if secondary columns changed\n  setInactive() {\n    this.active = false;\n  }\n  isActive() {\n    return this.active;\n  }\n  depthFirstSearchChangedPath(pathItem, callback) {\n    if (pathItem.children) {\n      for (let i = 0; i < pathItem.children.length; i++) {\n        this.depthFirstSearchChangedPath(pathItem.children[i], callback);\n      }\n    }\n    callback(pathItem.rowNode);\n  }\n  depthFirstSearchEverything(rowNode, callback, traverseEverything) {\n    if (rowNode.childrenAfterGroup) {\n      for (let i = 0; i < rowNode.childrenAfterGroup.length; i++) {\n        const childNode = rowNode.childrenAfterGroup[i];\n        if (childNode.childrenAfterGroup) {\n          this.depthFirstSearchEverything(rowNode.childrenAfterGroup[i], callback, traverseEverything);\n        } else if (traverseEverything) {\n          callback(childNode);\n        }\n      }\n    }\n    callback(rowNode);\n  }\n  // traverseLeafNodes -> used when NOT doing changed path, ie traversing everything. the callback\n  // will be called for child nodes in addition to parent nodes.\n  forEachChangedNodeDepthFirst(callback, traverseLeafNodes = false, includeUnchangedNodes = false) {\n    if (this.active && !includeUnchangedNodes) {\n      this.depthFirstSearchChangedPath(this.pathRoot, callback);\n    } else {\n      this.depthFirstSearchEverything(this.pathRoot.rowNode, callback, traverseLeafNodes);\n    }\n  }\n  executeFromRootNode(callback) {\n    callback(this.pathRoot.rowNode);\n  }\n  createPathItems(rowNode) {\n    let pointer = rowNode;\n    let newEntryCount = 0;\n    while (!this.mapToItems[pointer.id]) {\n      const newEntry = {\n        rowNode: pointer,\n        children: null\n      };\n      this.mapToItems[pointer.id] = newEntry;\n      newEntryCount++;\n      pointer = pointer.parent;\n    }\n    return newEntryCount;\n  }\n  populateColumnsMap(rowNode, columns) {\n    if (!this.keepingColumns || !columns) {\n      return;\n    }\n    let pointer = rowNode;\n    while (pointer) {\n      if (!this.nodeIdsToColumns[pointer.id]) {\n        this.nodeIdsToColumns[pointer.id] = {};\n      }\n      columns.forEach((col) => this.nodeIdsToColumns[pointer.id][col.getId()] = true);\n      pointer = pointer.parent;\n    }\n  }\n  linkPathItems(rowNode, newEntryCount) {\n    let pointer = rowNode;\n    for (let i = 0; i < newEntryCount; i++) {\n      const thisItem = this.mapToItems[pointer.id];\n      const parentItem = this.mapToItems[pointer.parent.id];\n      if (!parentItem.children) {\n        parentItem.children = [];\n      }\n      parentItem.children.push(thisItem);\n      pointer = pointer.parent;\n    }\n  }\n  // called by\n  // 1) change detection (provides cols) and\n  // 2) groupStage if doing transaction update (doesn't provide cols)\n  addParentNode(rowNode, columns) {\n    if (!rowNode || rowNode.isRowPinned()) {\n      return;\n    }\n    const newEntryCount = this.createPathItems(rowNode);\n    this.linkPathItems(rowNode, newEntryCount);\n    this.populateColumnsMap(rowNode, columns);\n  }\n  canSkip(rowNode) {\n    return this.active && !this.mapToItems[rowNode.id];\n  }\n  getValueColumnsForNode(rowNode, valueColumns) {\n    if (!this.keepingColumns) {\n      return valueColumns;\n    }\n    const colsForThisNode = this.nodeIdsToColumns[rowNode.id];\n    const result = valueColumns.filter((col) => colsForThisNode[col.getId()]);\n    return result;\n  }\n  getNotValueColumnsForNode(rowNode, valueColumns) {\n    if (!this.keepingColumns) {\n      return null;\n    }\n    const colsForThisNode = this.nodeIdsToColumns[rowNode.id];\n    const result = valueColumns.filter((col) => !colsForThisNode[col.getId()]);\n    return result;\n  }\n};\n\n// community-modules/core/src/selection/selectionService.ts\nvar SelectionService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"selectionService\";\n    this.selectedNodes = /* @__PURE__ */ new Map();\n    this.selectionCtx = new RowRangeSelectionContext();\n    this.rowSelectionMode = void 0;\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.pageBoundsService = beans.pageBoundsService;\n  }\n  postConstruct() {\n    const { gos, rowModel, onRowSelected } = this;\n    this.selectionCtx.init(rowModel);\n    this.rowSelectionMode = _getRowSelectionMode(gos);\n    this.groupSelectsChildren = _getGroupSelectsDescendants(gos);\n    this.addManagedPropertyListeners([\"groupSelectsChildren\", \"rowSelection\"], () => {\n      const groupSelectsChildren = _getGroupSelectsDescendants(gos);\n      const selectionMode = _getRowSelectionMode(gos);\n      if (groupSelectsChildren !== this.groupSelectsChildren || selectionMode !== this.rowSelectionMode) {\n        this.groupSelectsChildren = groupSelectsChildren;\n        this.rowSelectionMode = selectionMode;\n        this.deselectAllRowNodes({ source: \"api\" });\n      }\n    });\n    this.addManagedEventListeners({ rowSelected: onRowSelected.bind(this) });\n  }\n  destroy() {\n    super.destroy();\n    this.resetNodes();\n    this.selectionCtx.reset();\n  }\n  isMultiSelect() {\n    return this.rowSelectionMode === \"multiRow\";\n  }\n  /**\n   * We override the selection value for UI-triggered events because it's the\n   * current selection state that should determine the next selection state. This\n   * is a stepping stone towards removing selection logic from event listeners and\n   * other code external to the selection service(s).\n   */\n  overrideSelectionValue(newValue, source) {\n    if (!isSelectionUIEvent(source)) {\n      return newValue;\n    }\n    const root = this.selectionCtx.getRoot();\n    return root ? root.isSelected() ?? false : true;\n  }\n  setNodesSelected(params) {\n    const { newValue, clearSelection, suppressFinishActions, rangeSelect, nodes, event, source } = params;\n    if (nodes.length === 0)\n      return 0;\n    if (nodes.length > 1 && !this.isMultiSelect()) {\n      _warnOnce(`cannot multi select unless selection mode is 'multiRow'`);\n      return 0;\n    }\n    const groupSelectsFiltered = this.groupSelectsChildren && params.groupSelectsFiltered === true;\n    const filteredNodes = nodes.map((node) => node.footer ? node.sibling : node);\n    if (rangeSelect) {\n      if (filteredNodes.length > 1) {\n        _warnOnce(\"cannot range select while selecting multiple rows\");\n        return 0;\n      }\n      const node = filteredNodes[0];\n      const newSelectionValue = this.overrideSelectionValue(newValue, source);\n      if (!this.isMultiSelect()) {\n      } else if (this.selectionCtx.isInRange(node)) {\n        const partition = this.selectionCtx.truncate(node);\n        if (newSelectionValue) {\n          this.selectRange(partition.discard, false, source);\n        }\n        return this.selectRange(partition.keep, newSelectionValue, source);\n      } else {\n        const fromNode = this.selectionCtx.getRoot();\n        const toNode = node;\n        if (fromNode !== toNode) {\n          const partition = this.selectionCtx.extend(node, this.groupSelectsChildren);\n          if (newSelectionValue) {\n            this.selectRange(partition.discard, false, source);\n          }\n          return this.selectRange(partition.keep, newSelectionValue, source);\n        }\n      }\n    }\n    if (!suppressFinishActions) {\n      this.selectionCtx.setRoot(filteredNodes[0]);\n    }\n    let updatedCount = 0;\n    for (let i = 0; i < filteredNodes.length; i++) {\n      const node = filteredNodes[i];\n      const skipThisNode = groupSelectsFiltered && node.group;\n      if (!skipThisNode) {\n        const thisNodeWasSelected = node.selectThisNode(newValue, event, source);\n        if (thisNodeWasSelected) {\n          updatedCount++;\n        }\n      }\n      if (this.groupSelectsChildren && node.childrenAfterGroup?.length) {\n        updatedCount += this.selectChildren(node, newValue, groupSelectsFiltered, source);\n      }\n    }\n    if (!suppressFinishActions) {\n      const clearOtherNodes = newValue && (clearSelection || !this.isMultiSelect());\n      if (clearOtherNodes) {\n        updatedCount += this.clearOtherNodes(filteredNodes[0], source);\n      }\n      if (updatedCount > 0) {\n        this.updateGroupsFromChildrenSelections(source);\n        this.dispatchSelectionChanged(source);\n      }\n    }\n    return updatedCount;\n  }\n  // not to be mixed up with 'cell range selection' where you drag the mouse, this is row range selection, by\n  // holding down 'shift'.\n  selectRange(nodesToSelect, value, source) {\n    let updatedCount = 0;\n    nodesToSelect.forEach((rowNode) => {\n      if (rowNode.group && this.groupSelectsChildren) {\n        return;\n      }\n      const nodeWasSelected = rowNode.selectThisNode(value, void 0, source);\n      if (nodeWasSelected) {\n        updatedCount++;\n      }\n    });\n    if (updatedCount > 0) {\n      this.updateGroupsFromChildrenSelections(source);\n      this.dispatchSelectionChanged(source);\n    }\n    return updatedCount;\n  }\n  selectChildren(node, newValue, groupSelectsFiltered, source) {\n    const children = groupSelectsFiltered ? node.childrenAfterAggFilter : node.childrenAfterGroup;\n    if (_missing(children)) {\n      return 0;\n    }\n    return this.setNodesSelected({\n      newValue,\n      clearSelection: false,\n      suppressFinishActions: true,\n      groupSelectsFiltered,\n      source,\n      nodes: children\n    });\n  }\n  getSelectedNodes() {\n    const selectedNodes = [];\n    this.selectedNodes.forEach((rowNode) => {\n      if (rowNode) {\n        selectedNodes.push(rowNode);\n      }\n    });\n    return selectedNodes;\n  }\n  getSelectedRows() {\n    const selectedRows = [];\n    this.selectedNodes.forEach((rowNode) => {\n      if (rowNode && rowNode.data) {\n        selectedRows.push(rowNode.data);\n      }\n    });\n    return selectedRows;\n  }\n  getSelectionCount() {\n    return this.selectedNodes.size;\n  }\n  /**\n   * This method is used by the CSRM to remove groups which are being disposed of,\n   * events do not need fired in this case\n   */\n  filterFromSelection(predicate) {\n    const newSelectedNodes = /* @__PURE__ */ new Map();\n    this.selectedNodes.forEach((rowNode, key) => {\n      const passesPredicate = rowNode && predicate(rowNode);\n      if (passesPredicate) {\n        newSelectedNodes.set(key, rowNode);\n      }\n    });\n    this.selectedNodes = newSelectedNodes;\n  }\n  // should only be called if groupSelectsChildren=true\n  updateGroupsFromChildrenSelections(source, changedPath) {\n    if (!this.groupSelectsChildren) {\n      return false;\n    }\n    if (!_isClientSideRowModel(this.gos)) {\n      return false;\n    }\n    const clientSideRowModel = this.rowModel;\n    const rootNode = clientSideRowModel.getRootNode();\n    if (!changedPath) {\n      changedPath = new ChangedPath(true, rootNode);\n      changedPath.setInactive();\n    }\n    let selectionChanged = false;\n    changedPath.forEachChangedNodeDepthFirst((rowNode) => {\n      if (rowNode !== rootNode) {\n        const selected = rowNode.calculateSelectedFromChildren();\n        selectionChanged = rowNode.selectThisNode(selected === null ? false : selected, void 0, source) || selectionChanged;\n      }\n    });\n    return selectionChanged;\n  }\n  clearOtherNodes(rowNodeToKeepSelected, source) {\n    const groupsToRefresh = /* @__PURE__ */ new Map();\n    let updatedCount = 0;\n    this.selectedNodes.forEach((otherRowNode) => {\n      if (otherRowNode && otherRowNode.id !== rowNodeToKeepSelected.id) {\n        const rowNode = this.selectedNodes.get(otherRowNode.id);\n        updatedCount += rowNode.setSelectedParams({\n          newValue: false,\n          clearSelection: false,\n          suppressFinishActions: true,\n          source\n        });\n        if (this.groupSelectsChildren && otherRowNode.parent) {\n          groupsToRefresh.set(otherRowNode.parent.id, otherRowNode.parent);\n        }\n      }\n    });\n    groupsToRefresh.forEach((group) => {\n      const selected = group.calculateSelectedFromChildren();\n      group.selectThisNode(selected === null ? false : selected, void 0, source);\n    });\n    return updatedCount;\n  }\n  onRowSelected(event) {\n    const rowNode = event.node;\n    if (this.groupSelectsChildren && rowNode.group) {\n      return;\n    }\n    if (rowNode.isSelected()) {\n      this.selectedNodes.set(rowNode.id, rowNode);\n    } else {\n      this.selectedNodes.delete(rowNode.id);\n    }\n  }\n  syncInRowNode(rowNode, oldNode) {\n    this.syncInOldRowNode(rowNode, oldNode);\n    this.syncInNewRowNode(rowNode);\n  }\n  // if the id has changed for the node, then this means the rowNode\n  // is getting used for a different data item, which breaks\n  // our selectedNodes, as the node now is mapped by the old id\n  // which is inconsistent. so to keep the old node as selected,\n  // we swap in the clone (with the old id and old data). this means\n  // the oldNode is effectively a daemon we keep a reference to,\n  // so if client calls api.getSelectedNodes(), it gets the daemon\n  // in the result. when the client un-selects, the reference to the\n  // daemon is removed. the daemon, because it's an oldNode, is not\n  // used by the grid for rendering, it's a copy of what the node used\n  // to be like before the id was changed.\n  syncInOldRowNode(rowNode, oldNode) {\n    const oldNodeHasDifferentId = _exists(oldNode) && rowNode.id !== oldNode.id;\n    if (oldNodeHasDifferentId && oldNode) {\n      const id = oldNode.id;\n      const oldNodeSelected = this.selectedNodes.get(id) == rowNode;\n      if (oldNodeSelected) {\n        this.selectedNodes.set(oldNode.id, oldNode);\n      }\n    }\n  }\n  syncInNewRowNode(rowNode) {\n    if (this.selectedNodes.has(rowNode.id)) {\n      rowNode.setSelectedInitialValue(true);\n      this.selectedNodes.set(rowNode.id, rowNode);\n    } else {\n      rowNode.setSelectedInitialValue(false);\n    }\n  }\n  reset(source) {\n    const selectionCount = this.getSelectionCount();\n    this.resetNodes();\n    if (selectionCount) {\n      this.dispatchSelectionChanged(source);\n    }\n  }\n  resetNodes() {\n    this.selectedNodes?.clear();\n  }\n  // returns a list of all nodes at 'best cost' - a feature to be used\n  // with groups / trees. if a group has all it's children selected,\n  // then the group appears in the result, but not the children.\n  // Designed for use with 'children' as the group selection type,\n  // where groups don't actually appear in the selection normally.\n  getBestCostNodeSelection() {\n    if (!_isClientSideRowModel(this.gos)) {\n      return;\n    }\n    const clientSideRowModel = this.rowModel;\n    const topLevelNodes = clientSideRowModel.getTopLevelNodes();\n    if (topLevelNodes === null) {\n      return;\n    }\n    const result = [];\n    function traverse(nodes) {\n      for (let i = 0, l = nodes.length; i < l; i++) {\n        const node = nodes[i];\n        if (node.isSelected()) {\n          result.push(node);\n        } else {\n          const maybeGroup = node;\n          if (maybeGroup.group && maybeGroup.children) {\n            traverse(maybeGroup.children);\n          }\n        }\n      }\n    }\n    traverse(topLevelNodes);\n    return result;\n  }\n  isEmpty() {\n    let count = 0;\n    this.selectedNodes.forEach((rowNode) => {\n      if (rowNode) {\n        count++;\n      }\n    });\n    return count === 0;\n  }\n  deselectAllRowNodes(params) {\n    const callback = (rowNode) => rowNode.selectThisNode(false, void 0, source);\n    const rowModelClientSide = _isClientSideRowModel(this.gos);\n    const { source, justFiltered, justCurrentPage } = params;\n    if (justCurrentPage || justFiltered) {\n      if (!rowModelClientSide) {\n        _errorOnce(\"selecting just filtered only works when gridOptions.rowModelType='clientSide'\");\n        return;\n      }\n      this.getNodesToSelect(justFiltered, justCurrentPage).forEach(callback);\n    } else {\n      this.selectedNodes.forEach((rowNode) => {\n        if (rowNode) {\n          callback(rowNode);\n        }\n      });\n      this.reset(source);\n    }\n    this.selectionCtx.reset();\n    if (rowModelClientSide && this.groupSelectsChildren) {\n      this.updateGroupsFromChildrenSelections(source);\n    }\n    this.dispatchSelectionChanged(source);\n  }\n  getSelectedCounts(justFiltered, justCurrentPage) {\n    let selectedCount = 0;\n    let notSelectedCount = 0;\n    const callback = (node) => {\n      if (this.groupSelectsChildren && node.group) {\n        return;\n      }\n      if (node.isSelected()) {\n        selectedCount++;\n      } else if (!node.selectable) {\n      } else {\n        notSelectedCount++;\n      }\n    };\n    this.getNodesToSelect(justFiltered, justCurrentPage).forEach(callback);\n    return { selectedCount, notSelectedCount };\n  }\n  getSelectAllState(justFiltered, justCurrentPage) {\n    const { selectedCount, notSelectedCount } = this.getSelectedCounts(justFiltered, justCurrentPage);\n    if (selectedCount === 0 && notSelectedCount === 0) {\n      return false;\n    }\n    if (selectedCount > 0 && notSelectedCount > 0) {\n      return null;\n    }\n    return selectedCount > 0;\n  }\n  hasNodesToSelect(justFiltered = false, justCurrentPage = false) {\n    return this.getNodesToSelect(justFiltered, justCurrentPage).filter((node) => node.selectable).length > 0;\n  }\n  /**\n   * @param justFiltered whether to just include nodes which have passed the filter\n   * @param justCurrentPage whether to just include nodes on the current page\n   * @returns all nodes including unselectable nodes which are the target of this selection attempt\n   */\n  getNodesToSelect(justFiltered = false, justCurrentPage = false) {\n    this.validateSelectAllType();\n    const nodes = [];\n    if (justCurrentPage) {\n      this.forEachNodeOnPage((node) => {\n        if (!node.group) {\n          nodes.push(node);\n          return;\n        }\n        if (!node.expanded) {\n          const recursivelyAddChildren = (child) => {\n            nodes.push(child);\n            if (child.childrenAfterFilter?.length) {\n              child.childrenAfterFilter.forEach(recursivelyAddChildren);\n            }\n          };\n          recursivelyAddChildren(node);\n          return;\n        }\n        if (!this.groupSelectsChildren) {\n          nodes.push(node);\n        }\n      });\n      return nodes;\n    }\n    const clientSideRowModel = this.rowModel;\n    if (justFiltered) {\n      clientSideRowModel.forEachNodeAfterFilter((node) => {\n        nodes.push(node);\n      });\n      return nodes;\n    }\n    clientSideRowModel.forEachNode((node) => {\n      nodes.push(node);\n    });\n    return nodes;\n  }\n  forEachNodeOnPage(callback) {\n    const firstRow = this.pageBoundsService.getFirstRow();\n    const lastRow = this.pageBoundsService.getLastRow();\n    for (let i = firstRow; i <= lastRow; i++) {\n      const node = this.rowModel.getRow(i);\n      if (node) {\n        callback(node);\n      }\n    }\n  }\n  selectAllRowNodes(params) {\n    if (_isUsingNewRowSelectionAPI(this.gos) && !_isMultiRowSelection(this.gos)) {\n      return _warnOnce(`cannot multi select unless selection mode is 'multiRow'`);\n    }\n    this.validateSelectAllType();\n    const { source, justFiltered, justCurrentPage } = params;\n    const nodes = this.getNodesToSelect(justFiltered, justCurrentPage);\n    nodes.forEach((rowNode) => rowNode.selectThisNode(true, void 0, source));\n    this.selectionCtx.setRoot(nodes[0] ?? null);\n    this.selectionCtx.setEndRange(_last(nodes) ?? null);\n    if (_isClientSideRowModel(this.gos) && this.groupSelectsChildren) {\n      this.updateGroupsFromChildrenSelections(source);\n    }\n    this.dispatchSelectionChanged(source);\n  }\n  getSelectionState() {\n    const selectedIds = [];\n    this.selectedNodes.forEach((node) => {\n      if (node?.id) {\n        selectedIds.push(node.id);\n      }\n    });\n    return selectedIds.length ? selectedIds : null;\n  }\n  setSelectionState(state, source) {\n    if (!Array.isArray(state)) {\n      return _errorOnce(\n        \"Invalid selection state. When using client-side row model, the state must conform to `string[]`.\"\n      );\n    }\n    const rowIds = new Set(state);\n    const nodes = [];\n    this.rowModel.forEachNode((node) => {\n      if (rowIds.has(node.id)) {\n        nodes.push(node);\n      }\n    });\n    this.setNodesSelected({\n      newValue: true,\n      nodes,\n      source\n    });\n  }\n  dispatchSelectionChanged(source) {\n    this.eventService.dispatchEvent({\n      type: \"selectionChanged\",\n      source\n    });\n  }\n  validateSelectAllType() {\n    if (!_isClientSideRowModel(this.gos)) {\n      throw new Error(\n        `selectAll only available when rowModelType='clientSide', ie not ${this.rowModel.getType()}`\n      );\n    }\n  }\n};\n\n// community-modules/core/src/rowNodes/selectableService.ts\nvar SelectableService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"selectableService\";\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.selectionService = beans.selectionService;\n  }\n  postConstruct() {\n    this.addManagedPropertyListeners([\"isRowSelectable\", \"rowSelection\"], () => this.updateSelectable());\n  }\n  /**\n   * Used by CSRM only, to update selectable state after group state changes.\n   */\n  updateSelectableAfterGrouping() {\n    this.updateSelectable(true);\n  }\n  updateSelectable(skipLeafNodes = false) {\n    const { gos } = this;\n    const isRowSelecting = _isRowSelection(gos);\n    const isRowSelectable = _getIsRowSelectable(gos);\n    if (!isRowSelecting || !isRowSelectable) {\n      return;\n    }\n    const isGroupSelectsChildren = _getGroupSelectsDescendants(gos);\n    const isCsrmGroupSelectsChildren = _isClientSideRowModel(gos) && isGroupSelectsChildren;\n    const nodesToDeselect = [];\n    const nodeCallback = (node) => {\n      if (skipLeafNodes && !node.group) {\n        return;\n      }\n      if (isCsrmGroupSelectsChildren && node.group) {\n        const hasSelectableChild = node.childrenAfterGroup.some((rowNode) => rowNode.selectable === true);\n        node.setRowSelectable(hasSelectableChild, true);\n        return;\n      }\n      const rowSelectable = isRowSelectable?.(node) ?? true;\n      node.setRowSelectable(rowSelectable, true);\n      if (!rowSelectable && node.isSelected()) {\n        nodesToDeselect.push(node);\n      }\n    };\n    if (isCsrmGroupSelectsChildren) {\n      const csrm = this.rowModel;\n      const changedPath = new ChangedPath(false, csrm.getRootNode());\n      changedPath.forEachChangedNodeDepthFirst(nodeCallback, true, true);\n    } else {\n      this.rowModel.forEachNode(nodeCallback);\n    }\n    if (nodesToDeselect.length) {\n      this.selectionService.setNodesSelected({\n        nodes: nodesToDeselect,\n        newValue: false,\n        source: \"selectableChanged\"\n      });\n    }\n    if (isCsrmGroupSelectsChildren && this.selectionService instanceof SelectionService) {\n      this.selectionService.updateGroupsFromChildrenSelections(\"selectableChanged\");\n    }\n  }\n};\n\n// community-modules/core/src/sortController.ts\nvar DEFAULT_SORTING_ORDER = [\"asc\", \"desc\", null];\nvar SortController = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"sortController\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n    this.showRowGroupColsService = beans.showRowGroupColsService;\n  }\n  progressSort(column, multiSort, source) {\n    const nextDirection = this.getNextSortDirection(column);\n    this.setSortForColumn(column, nextDirection, multiSort, source);\n  }\n  setSortForColumn(column, sort, multiSort, source) {\n    if (sort !== \"asc\" && sort !== \"desc\") {\n      sort = null;\n    }\n    const isColumnsSortingCoupledToGroup = _isColumnsSortingCoupledToGroup(this.gos);\n    let columnsToUpdate = [column];\n    if (isColumnsSortingCoupledToGroup) {\n      if (column.getColDef().showRowGroup) {\n        const rowGroupColumns = this.funcColsService.getSourceColumnsForGroupColumn(column);\n        const sortableRowGroupColumns = rowGroupColumns?.filter((col) => col.isSortable());\n        if (sortableRowGroupColumns) {\n          columnsToUpdate = [column, ...sortableRowGroupColumns];\n        }\n      }\n    }\n    columnsToUpdate.forEach((col) => col.setSort(sort, source));\n    const doingMultiSort = (multiSort || this.gos.get(\"alwaysMultiSort\")) && !this.gos.get(\"suppressMultiSort\");\n    const updatedColumns = [];\n    if (!doingMultiSort) {\n      const clearedColumns = this.clearSortBarTheseColumns(columnsToUpdate, source);\n      updatedColumns.push(...clearedColumns);\n    }\n    this.updateSortIndex(column);\n    updatedColumns.push(...columnsToUpdate);\n    this.dispatchSortChangedEvents(source, updatedColumns);\n  }\n  updateSortIndex(lastColToChange) {\n    const isCoupled = _isColumnsSortingCoupledToGroup(this.gos);\n    const groupParent = this.showRowGroupColsService?.getShowRowGroupCol(lastColToChange.getId());\n    const lastSortIndexCol = isCoupled ? groupParent || lastColToChange : lastColToChange;\n    const allSortedCols = this.getColumnsWithSortingOrdered();\n    this.columnModel.getAllCols().forEach((col) => col.setSortIndex(null));\n    const allSortedColsWithoutChangesOrGroups = allSortedCols.filter((col) => {\n      if (isCoupled && col.getColDef().showRowGroup) {\n        return false;\n      }\n      return col !== lastSortIndexCol;\n    });\n    const sortedColsWithIndices = lastSortIndexCol.getSort() ? [...allSortedColsWithoutChangesOrGroups, lastSortIndexCol] : allSortedColsWithoutChangesOrGroups;\n    sortedColsWithIndices.forEach((col, idx) => {\n      col.setSortIndex(idx);\n    });\n  }\n  // gets called by API, so if data changes, use can call this, which will end up\n  // working out the sort order again of the rows.\n  onSortChanged(source, columns) {\n    this.dispatchSortChangedEvents(source, columns);\n  }\n  isSortActive() {\n    const allCols = this.columnModel.getAllCols();\n    const sortedCols = allCols.filter((column) => !!column.getSort());\n    return sortedCols && sortedCols.length > 0;\n  }\n  dispatchSortChangedEvents(source, columns) {\n    const event = {\n      type: \"sortChanged\",\n      source\n    };\n    if (columns) {\n      event.columns = columns;\n    }\n    this.eventService.dispatchEvent(event);\n  }\n  clearSortBarTheseColumns(columnsToSkip, source) {\n    const clearedColumns = [];\n    this.columnModel.getAllCols().forEach((columnToClear) => {\n      if (!columnsToSkip.includes(columnToClear)) {\n        if (columnToClear.getSort()) {\n          clearedColumns.push(columnToClear);\n        }\n        columnToClear.setSort(void 0, source);\n      }\n    });\n    return clearedColumns;\n  }\n  getNextSortDirection(column) {\n    let sortingOrder;\n    if (column.getColDef().sortingOrder) {\n      sortingOrder = column.getColDef().sortingOrder;\n    } else if (this.gos.get(\"sortingOrder\")) {\n      sortingOrder = this.gos.get(\"sortingOrder\");\n    } else {\n      sortingOrder = DEFAULT_SORTING_ORDER;\n    }\n    if (!Array.isArray(sortingOrder) || sortingOrder.length <= 0) {\n      _warnOnce(`sortingOrder must be an array with at least one element, currently it's ${sortingOrder}`);\n      return null;\n    }\n    const currentIndex = sortingOrder.indexOf(column.getSort());\n    const notInArray = currentIndex < 0;\n    const lastItemInArray = currentIndex == sortingOrder.length - 1;\n    let result;\n    if (notInArray || lastItemInArray) {\n      result = sortingOrder[0];\n    } else {\n      result = sortingOrder[currentIndex + 1];\n    }\n    if (DEFAULT_SORTING_ORDER.indexOf(result) < 0) {\n      _warnOnce(\"invalid sort type \", result);\n      return null;\n    }\n    return result;\n  }\n  /**\n   * @returns a map of sort indexes for every sorted column, if groups sort primaries then they will have equivalent indices\n   */\n  getIndexedSortMap() {\n    let allSortedCols = this.columnModel.getAllCols().filter((col) => !!col.getSort());\n    if (this.columnModel.isPivotMode()) {\n      const isSortingLinked = _isColumnsSortingCoupledToGroup(this.gos);\n      allSortedCols = allSortedCols.filter((col) => {\n        const isAggregated = !!col.getAggFunc();\n        const isSecondary = !col.isPrimary();\n        const isGroup = isSortingLinked ? this.showRowGroupColsService?.getShowRowGroupCol(col.getId()) : col.getColDef().showRowGroup;\n        return isAggregated || isSecondary || isGroup;\n      });\n    }\n    const sortedRowGroupCols = this.funcColsService.getRowGroupColumns().filter((col) => !!col.getSort());\n    const allColsIndexes = {};\n    allSortedCols.forEach((col, index) => allColsIndexes[col.getId()] = index);\n    allSortedCols.sort((a, b) => {\n      const iA = a.getSortIndex();\n      const iB = b.getSortIndex();\n      if (iA != null && iB != null) {\n        return iA - iB;\n      } else if (iA == null && iB == null) {\n        const posA = allColsIndexes[a.getId()];\n        const posB = allColsIndexes[b.getId()];\n        return posA > posB ? 1 : -1;\n      } else if (iB == null) {\n        return -1;\n      } else {\n        return 1;\n      }\n    });\n    const isSortLinked = _isColumnsSortingCoupledToGroup(this.gos) && !!sortedRowGroupCols.length;\n    if (isSortLinked) {\n      allSortedCols = [\n        ...new Set(\n          // if linked sorting, replace all columns with the display group column for index purposes, and ensure uniqueness\n          allSortedCols.map((col) => this.showRowGroupColsService?.getShowRowGroupCol(col.getId()) ?? col)\n        )\n      ];\n    }\n    const indexMap = /* @__PURE__ */ new Map();\n    allSortedCols.forEach((col, idx) => indexMap.set(col, idx));\n    if (isSortLinked) {\n      sortedRowGroupCols.forEach((col) => {\n        const groupDisplayCol = this.showRowGroupColsService.getShowRowGroupCol(col.getId());\n        indexMap.set(col, indexMap.get(groupDisplayCol));\n      });\n    }\n    return indexMap;\n  }\n  getColumnsWithSortingOrdered() {\n    return [...this.getIndexedSortMap().entries()].sort(([col1, idx1], [col2, idx2]) => idx1 - idx2).map(([col]) => col);\n  }\n  // used by server side row models, to sent sort to server\n  getSortModel() {\n    return this.getColumnsWithSortingOrdered().filter((column) => column.getSort()).map((column) => ({\n      sort: column.getSort(),\n      colId: column.getId()\n    }));\n  }\n  getSortOptions() {\n    return this.getColumnsWithSortingOrdered().filter((column) => column.getSort()).map((column) => ({\n      sort: column.getSort(),\n      column\n    }));\n  }\n  canColumnDisplayMixedSort(column) {\n    const isColumnSortCouplingActive = _isColumnsSortingCoupledToGroup(this.gos);\n    const isGroupDisplayColumn = !!column.getColDef().showRowGroup;\n    return isColumnSortCouplingActive && isGroupDisplayColumn;\n  }\n  getDisplaySortForColumn(column) {\n    const linkedColumns = this.funcColsService.getSourceColumnsForGroupColumn(column);\n    if (!this.canColumnDisplayMixedSort(column) || !linkedColumns?.length) {\n      return column.getSort();\n    }\n    const columnHasUniqueData = column.getColDef().field != null || !!column.getColDef().valueGetter;\n    const sortableColumns = columnHasUniqueData ? [column, ...linkedColumns] : linkedColumns;\n    const firstSort = sortableColumns[0].getSort();\n    const allMatch = sortableColumns.every((col) => col.getSort() == firstSort);\n    if (!allMatch) {\n      return \"mixed\";\n    }\n    return firstSort;\n  }\n  getDisplaySortIndexForColumn(column) {\n    return this.getIndexedSortMap().get(column);\n  }\n};\n\n// community-modules/core/src/syncService.ts\nvar SyncService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"syncService\";\n    this.waitingForColumns = false;\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.columnModel = beans.columnModel;\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.addManagedPropertyListener(\"columnDefs\", (event) => this.setColumnDefs(event));\n  }\n  start() {\n    this.ctrlsService.whenReady(this, () => {\n      const columnDefs = this.gos.get(\"columnDefs\");\n      if (columnDefs) {\n        this.setColumnsAndData(columnDefs);\n      } else {\n        this.waitingForColumns = true;\n      }\n      this.gridReady();\n    });\n  }\n  setColumnsAndData(columnDefs) {\n    this.columnModel.setColumnDefs(columnDefs ?? [], \"gridInitializing\");\n    this.rowModel.start();\n  }\n  gridReady() {\n    this.eventService.dispatchEvent({\n      type: \"gridReady\"\n    });\n    const isEnterprise = this.gos.isModuleRegistered(\"@ag-grid-enterprise/core\" /* EnterpriseCoreModule */);\n    if (this.gos.get(\"debug\")) {\n      _log(`initialised successfully, enterprise = ${isEnterprise}`);\n    }\n  }\n  setColumnDefs(event) {\n    const columnDefs = this.gos.get(\"columnDefs\");\n    if (!columnDefs) {\n      return;\n    }\n    if (this.waitingForColumns) {\n      this.waitingForColumns = false;\n      this.setColumnsAndData(columnDefs);\n      return;\n    }\n    this.columnModel.setColumnDefs(columnDefs, convertSourceType(event.source));\n  }\n};\n\n// community-modules/core/src/valueService/changeDetectionService.ts\nvar SOURCE_PASTE = \"paste\";\nvar ChangeDetectionService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"changeDetectionService\";\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.rowRenderer = beans.rowRenderer;\n  }\n  postConstruct() {\n    if (_isClientSideRowModel(this.gos)) {\n      this.clientSideRowModel = this.rowModel;\n    }\n    this.addManagedEventListeners({ cellValueChanged: this.onCellValueChanged.bind(this) });\n  }\n  onCellValueChanged(event) {\n    if (event.source === SOURCE_PASTE) {\n      return;\n    }\n    this.doChangeDetection(event.node, event.column);\n  }\n  doChangeDetection(rowNode, column) {\n    if (this.gos.get(\"suppressChangeDetection\")) {\n      return;\n    }\n    const nodesToRefresh = [rowNode];\n    if (this.clientSideRowModel && !rowNode.isRowPinned()) {\n      const onlyChangedColumns = this.gos.get(\"aggregateOnlyChangedColumns\");\n      const changedPath = new ChangedPath(onlyChangedColumns, this.clientSideRowModel.getRootNode());\n      changedPath.addParentNode(rowNode.parent, [column]);\n      this.clientSideRowModel.doAggregate(changedPath);\n      changedPath.forEachChangedNodeDepthFirst((rowNode2) => {\n        nodesToRefresh.push(rowNode2);\n      });\n    }\n    this.rowRenderer.refreshCells({ rowNodes: nodesToRefresh });\n  }\n};\n\n// community-modules/core/src/valueService/expressionService.ts\nvar ExpressionService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"expressionService\";\n    this.expressionToFunctionCache = {};\n  }\n  evaluate(expression, params) {\n    if (typeof expression === \"string\") {\n      return this.evaluateExpression(expression, params);\n    } else {\n      _errorOnce(\"value should be either a string or a function\", expression);\n    }\n  }\n  evaluateExpression(expression, params) {\n    try {\n      const javaScriptFunction = this.createExpressionFunction(expression);\n      const result = javaScriptFunction(\n        params.value,\n        params.context,\n        params.oldValue,\n        params.newValue,\n        params.value,\n        params.node,\n        params.data,\n        params.colDef,\n        params.rowIndex,\n        params.api,\n        params.getValue,\n        params.column,\n        params.columnGroup\n      );\n      return result;\n    } catch (e) {\n      _log(\"Processing of the expression failed\");\n      _log(\"Expression = \", expression);\n      _log(\"Params = \", params);\n      _log(\"Exception = \", e);\n      return null;\n    }\n  }\n  createExpressionFunction(expression) {\n    if (this.expressionToFunctionCache[expression]) {\n      return this.expressionToFunctionCache[expression];\n    }\n    const functionBody = this.createFunctionBody(expression);\n    const theFunction = new Function(\n      \"x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, getValue, column, columnGroup\",\n      functionBody\n    );\n    this.expressionToFunctionCache[expression] = theFunction;\n    return theFunction;\n  }\n  createFunctionBody(expression) {\n    if (expression.indexOf(\"return\") >= 0) {\n      return expression;\n    } else {\n      return \"return \" + expression + \";\";\n    }\n  }\n};\n\n// community-modules/core/src/valueService/valueCache.ts\nvar ValueCache = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"valueCache\";\n    this.cacheVersion = 0;\n  }\n  postConstruct() {\n    this.active = this.gos.get(\"valueCache\");\n    this.neverExpires = this.gos.get(\"valueCacheNeverExpires\");\n  }\n  onDataChanged() {\n    if (this.neverExpires) {\n      return;\n    }\n    this.expire();\n  }\n  expire() {\n    this.cacheVersion++;\n  }\n  setValue(rowNode, colId, value) {\n    if (this.active) {\n      if (rowNode.__cacheVersion !== this.cacheVersion) {\n        rowNode.__cacheVersion = this.cacheVersion;\n        rowNode.__cacheData = {};\n      }\n      rowNode.__cacheData[colId] = value;\n    }\n  }\n  getValue(rowNode, colId) {\n    if (!this.active || rowNode.__cacheVersion !== this.cacheVersion) {\n      return void 0;\n    }\n    return rowNode.__cacheData[colId];\n  }\n};\n\n// community-modules/core/src/valueService/valueService.ts\nvar ValueService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"valueService\";\n    this.initialised = false;\n    this.isSsrm = false;\n  }\n  wireBeans(beans) {\n    this.expressionService = beans.expressionService;\n    this.columnModel = beans.columnModel;\n    this.valueCache = beans.valueCache;\n    this.dataTypeService = beans.dataTypeService;\n  }\n  postConstruct() {\n    if (!this.initialised) {\n      this.init();\n    }\n  }\n  init() {\n    this.isSsrm = _isServerSideRowModel(this.gos);\n    this.cellExpressions = this.gos.get(\"enableCellExpressions\");\n    this.isTreeData = this.gos.get(\"treeData\");\n    this.initialised = true;\n    const listener = (event) => this.callColumnCellValueChangedHandler(event);\n    const async = _useAsyncEvents(this.gos);\n    this.eventService.addEventListener(\"cellValueChanged\", listener, async);\n    this.addDestroyFunc(() => this.eventService.removeEventListener(\"cellValueChanged\", listener, async));\n    this.addManagedPropertyListener(\"treeData\", (propChange) => this.isTreeData = propChange.currentValue);\n  }\n  /**\n   * Use this function to get a displayable cell value.\n   * This hides values in expanded group rows which are instead displayed by the footer row.\n   */\n  getValueForDisplay(column, node) {\n    const lockedClosedGroup = node.leafGroup && this.columnModel.isPivotMode();\n    const isOpenGroup = node.group && node.expanded && !node.footer && !lockedClosedGroup;\n    const groupAlwaysShowAggData = this.gos.get(\"groupSuppressBlankHeader\");\n    if (!isOpenGroup || groupAlwaysShowAggData) {\n      return this.getValue(column, node);\n    }\n    let includeFooter = false;\n    const groupIncludeFooterOpt = this.gos.get(\"groupTotalRow\") ?? this.gos.get(\"groupIncludeFooter\");\n    if (typeof groupIncludeFooterOpt !== \"function\") {\n      includeFooter = !!groupIncludeFooterOpt;\n    } else {\n      const groupIncludeFooterCb = this.gos.getCallback(\"groupTotalRow\") ?? this.gos.getCallback(\"groupIncludeFooter\");\n      includeFooter = !!groupIncludeFooterCb({ node: this });\n    }\n    const ignoreAggData = isOpenGroup && includeFooter;\n    return this.getValue(column, node, false, ignoreAggData);\n  }\n  getValue(column, rowNode, forFilter = false, ignoreAggData = false) {\n    if (!this.initialised) {\n      this.init();\n    }\n    if (!rowNode) {\n      return;\n    }\n    const colDef = column.getColDef();\n    const field = colDef.field;\n    const colId = column.getColId();\n    const data = rowNode.data;\n    let result;\n    const groupDataExists = rowNode.groupData && rowNode.groupData[colId] !== void 0;\n    const aggDataExists = !ignoreAggData && rowNode.aggData && rowNode.aggData[colId] !== void 0;\n    const ignoreSsrmAggData = this.isSsrm && ignoreAggData && !!column.getColDef().aggFunc;\n    const ssrmFooterGroupCol = this.isSsrm && rowNode.footer && rowNode.field && (column.getColDef().showRowGroup === true || column.getColDef().showRowGroup === rowNode.field);\n    if (forFilter && colDef.filterValueGetter) {\n      result = this.executeFilterValueGetter(colDef.filterValueGetter, data, column, rowNode);\n    } else if (this.isTreeData && aggDataExists) {\n      result = rowNode.aggData[colId];\n    } else if (this.isTreeData && colDef.valueGetter) {\n      result = this.executeValueGetter(colDef.valueGetter, data, column, rowNode);\n    } else if (this.isTreeData && field && data) {\n      result = _getValueUsingField(data, field, column.isFieldContainsDots());\n    } else if (groupDataExists) {\n      result = rowNode.groupData[colId];\n    } else if (aggDataExists) {\n      result = rowNode.aggData[colId];\n    } else if (colDef.valueGetter) {\n      result = this.executeValueGetter(colDef.valueGetter, data, column, rowNode);\n    } else if (ssrmFooterGroupCol) {\n      result = _getValueUsingField(data, rowNode.field, column.isFieldContainsDots());\n    } else if (field && data && !ignoreSsrmAggData) {\n      result = _getValueUsingField(data, field, column.isFieldContainsDots());\n    }\n    if (this.cellExpressions && typeof result === \"string\" && result.indexOf(\"=\") === 0) {\n      const cellValueGetter = result.substring(1);\n      result = this.executeValueGetter(cellValueGetter, data, column, rowNode);\n    }\n    if (result == null) {\n      const openedGroup = this.getOpenedGroup(rowNode, column);\n      if (openedGroup != null) {\n        return openedGroup;\n      }\n    }\n    return result;\n  }\n  parseValue(column, rowNode, newValue, oldValue) {\n    const colDef = column.getColDef();\n    const valueParser = colDef.valueParser;\n    if (_exists(valueParser)) {\n      const params = this.gos.addGridCommonParams({\n        node: rowNode,\n        data: rowNode?.data,\n        oldValue,\n        newValue,\n        colDef,\n        column\n      });\n      if (typeof valueParser === \"function\") {\n        return valueParser(params);\n      }\n      return this.expressionService.evaluate(valueParser, params);\n    }\n    return newValue;\n  }\n  getDeleteValue(column, rowNode) {\n    if (_exists(column.getColDef().valueParser)) {\n      return this.parseValue(column, rowNode, \"\", this.getValueForDisplay(column, rowNode)) ?? null;\n    }\n    return null;\n  }\n  formatValue(column, node, value, suppliedFormatter, useFormatterFromColumn = true) {\n    let result = null;\n    let formatter;\n    const colDef = column.getColDef();\n    if (suppliedFormatter) {\n      formatter = suppliedFormatter;\n    } else if (useFormatterFromColumn) {\n      formatter = colDef.valueFormatter;\n    }\n    if (formatter) {\n      const params = this.gos.addGridCommonParams({\n        value,\n        node,\n        data: node ? node.data : null,\n        colDef,\n        column\n      });\n      if (typeof formatter === \"function\") {\n        result = formatter(params);\n      } else {\n        result = this.expressionService.evaluate(formatter, params);\n      }\n    } else if (colDef.refData) {\n      return colDef.refData[value] || \"\";\n    }\n    if (result == null && Array.isArray(value)) {\n      result = value.join(\", \");\n    }\n    return result;\n  }\n  getOpenedGroup(rowNode, column) {\n    if (!this.gos.get(\"showOpenedGroup\")) {\n      return;\n    }\n    const colDef = column.getColDef();\n    if (!colDef.showRowGroup) {\n      return;\n    }\n    const showRowGroup = column.getColDef().showRowGroup;\n    let pointer = rowNode.parent;\n    while (pointer != null) {\n      if (pointer.rowGroupColumn && (showRowGroup === true || showRowGroup === pointer.rowGroupColumn.getColId())) {\n        return pointer.key;\n      }\n      pointer = pointer.parent;\n    }\n    return void 0;\n  }\n  /**\n   * Sets the value of a GridCell\n   * @param rowNode The `RowNode` to be updated\n   * @param colKey The `Column` to be updated\n   * @param newValue The new value to be set\n   * @param eventSource The event source\n   * @returns `True` if the value has been updated, otherwise`False`.\n   */\n  setValue(rowNode, colKey, newValue, eventSource) {\n    const column = this.columnModel.getColDefCol(colKey);\n    if (!rowNode || !column) {\n      return false;\n    }\n    if (_missing(rowNode.data)) {\n      rowNode.data = {};\n    }\n    const { field, valueSetter } = column.getColDef();\n    if (_missing(field) && _missing(valueSetter)) {\n      _warnOnce(`you need either field or valueSetter set on colDef for editing to work`);\n      return false;\n    }\n    if (this.dataTypeService && !this.dataTypeService.checkType(column, newValue)) {\n      _warnOnce(`Data type of the new value does not match the cell data type of the column`);\n      return false;\n    }\n    const params = this.gos.addGridCommonParams({\n      node: rowNode,\n      data: rowNode.data,\n      oldValue: this.getValue(column, rowNode),\n      newValue,\n      colDef: column.getColDef(),\n      column\n    });\n    params.newValue = newValue;\n    let valueWasDifferent;\n    if (_exists(valueSetter)) {\n      if (typeof valueSetter === \"function\") {\n        valueWasDifferent = valueSetter(params);\n      } else {\n        valueWasDifferent = this.expressionService.evaluate(valueSetter, params);\n      }\n    } else {\n      valueWasDifferent = this.setValueUsingField(rowNode.data, field, newValue, column.isFieldContainsDots());\n    }\n    if (valueWasDifferent === void 0) {\n      valueWasDifferent = true;\n    }\n    if (!valueWasDifferent) {\n      return false;\n    }\n    rowNode.resetQuickFilterAggregateText();\n    this.valueCache.onDataChanged();\n    const savedValue = this.getValue(column, rowNode);\n    this.eventService.dispatchEvent({\n      type: \"cellValueChanged\",\n      event: null,\n      rowIndex: rowNode.rowIndex,\n      rowPinned: rowNode.rowPinned,\n      column: params.column,\n      colDef: params.colDef,\n      data: rowNode.data,\n      node: rowNode,\n      oldValue: params.oldValue,\n      newValue: savedValue,\n      value: savedValue,\n      source: eventSource\n    });\n    return true;\n  }\n  callColumnCellValueChangedHandler(event) {\n    const onCellValueChanged = event.colDef.onCellValueChanged;\n    if (typeof onCellValueChanged === \"function\") {\n      this.getFrameworkOverrides().wrapOutgoing(() => {\n        onCellValueChanged({\n          node: event.node,\n          data: event.data,\n          oldValue: event.oldValue,\n          newValue: event.newValue,\n          colDef: event.colDef,\n          column: event.column,\n          api: event.api,\n          context: event.context\n        });\n      });\n    }\n  }\n  setValueUsingField(data, field, newValue, isFieldContainsDots) {\n    if (!field) {\n      return false;\n    }\n    let valuesAreSame = false;\n    if (!isFieldContainsDots) {\n      valuesAreSame = data[field] === newValue;\n      if (!valuesAreSame) {\n        data[field] = newValue;\n      }\n    } else {\n      const fieldPieces = field.split(\".\");\n      let currentObject = data;\n      while (fieldPieces.length > 0 && currentObject) {\n        const fieldPiece = fieldPieces.shift();\n        if (fieldPieces.length === 0) {\n          valuesAreSame = currentObject[fieldPiece] === newValue;\n          if (!valuesAreSame) {\n            currentObject[fieldPiece] = newValue;\n          }\n        } else {\n          currentObject = currentObject[fieldPiece];\n        }\n      }\n    }\n    return !valuesAreSame;\n  }\n  executeFilterValueGetter(valueGetter, data, column, rowNode) {\n    const params = this.gos.addGridCommonParams({\n      data,\n      node: rowNode,\n      column,\n      colDef: column.getColDef(),\n      getValue: this.getValueCallback.bind(this, rowNode)\n    });\n    if (typeof valueGetter === \"function\") {\n      return valueGetter(params);\n    }\n    return this.expressionService.evaluate(valueGetter, params);\n  }\n  executeValueGetter(valueGetter, data, column, rowNode) {\n    const colId = column.getColId();\n    const valueFromCache = this.valueCache.getValue(rowNode, colId);\n    if (valueFromCache !== void 0) {\n      return valueFromCache;\n    }\n    const params = this.gos.addGridCommonParams({\n      data,\n      node: rowNode,\n      column,\n      colDef: column.getColDef(),\n      getValue: this.getValueCallback.bind(this, rowNode)\n    });\n    let result;\n    if (typeof valueGetter === \"function\") {\n      result = valueGetter(params);\n    } else {\n      result = this.expressionService.evaluate(valueGetter, params);\n    }\n    this.valueCache.setValue(rowNode, colId, result);\n    return result;\n  }\n  getValueCallback(node, field) {\n    const otherColumn = this.columnModel.getColDefCol(field);\n    if (otherColumn) {\n      return this.getValue(otherColumn, node);\n    }\n    return null;\n  }\n  // used by row grouping and pivot, to get key for a row. col can be a pivot col or a row grouping col\n  getKeyForNode(col, rowNode) {\n    const value = this.getValue(col, rowNode);\n    const keyCreator = col.getColDef().keyCreator;\n    let result = value;\n    if (keyCreator) {\n      const keyParams = this.gos.addGridCommonParams({\n        value,\n        colDef: col.getColDef(),\n        column: col,\n        node: rowNode,\n        data: rowNode.data\n      });\n      result = keyCreator(keyParams);\n    }\n    if (typeof result === \"string\" || result == null) {\n      return result;\n    }\n    result = String(result);\n    if (result === \"[object Object]\") {\n      _warnOnce(\n        \"a column you are grouping or pivoting by has objects as values. If you want to group by complex objects then either a) use a colDef.keyCreator (se AG Grid docs) or b) to toString() on the object to return a key\"\n      );\n    }\n    return result;\n  }\n};\n\n// community-modules/core/src/grid.ts\nvar _GlobalGridOptions = class _GlobalGridOptions {\n  static applyGlobalGridOptions(providedOptions) {\n    if (!_GlobalGridOptions.gridOptions) {\n      return providedOptions;\n    }\n    let mergedGridOps = {};\n    _mergeDeep(mergedGridOps, _GlobalGridOptions.gridOptions, true, true);\n    if (_GlobalGridOptions.mergeStrategy === \"deep\") {\n      _mergeDeep(mergedGridOps, providedOptions, true, true);\n    } else {\n      mergedGridOps = { ...mergedGridOps, ...providedOptions };\n    }\n    if (_GlobalGridOptions.gridOptions.context) {\n      mergedGridOps.context = _GlobalGridOptions.gridOptions.context;\n    }\n    if (providedOptions.context) {\n      if (_GlobalGridOptions.mergeStrategy === \"deep\" && mergedGridOps.context) {\n        _mergeDeep(providedOptions.context, mergedGridOps.context, true, true);\n      }\n      mergedGridOps.context = providedOptions.context;\n    }\n    return mergedGridOps;\n  }\n};\n_GlobalGridOptions.gridOptions = void 0;\n_GlobalGridOptions.mergeStrategy = \"shallow\";\nvar GlobalGridOptions = _GlobalGridOptions;\nfunction provideGlobalGridOptions(gridOptions, mergeStrategy = \"shallow\") {\n  GlobalGridOptions.gridOptions = gridOptions;\n  GlobalGridOptions.mergeStrategy = mergeStrategy;\n}\nfunction _getGlobalGridOption(gridOption) {\n  return GlobalGridOptions.gridOptions?.[gridOption];\n}\nfunction createGrid(eGridDiv, gridOptions, params) {\n  if (!gridOptions) {\n    _errorOnce(\"No gridOptions provided to createGrid\");\n    return {};\n  }\n  const api = new GridCoreCreator().create(\n    eGridDiv,\n    gridOptions,\n    (context) => {\n      const gridComp = new GridComp(eGridDiv);\n      context.createBean(gridComp);\n    },\n    void 0,\n    params\n  );\n  if (!Object.isFrozen(gridOptions) && !params?.frameworkOverrides) {\n    const apiUrl = \"https://ag-grid.com/javascript-data-grid/grid-interface/#grid-api\";\n    Object.defineProperty(gridOptions, \"api\", {\n      get: () => {\n        _errorOnce(`gridOptions.api is no longer supported. See ${apiUrl}.`);\n        return void 0;\n      },\n      configurable: true\n    });\n  }\n  return api;\n}\nvar Grid = class {\n  // Not typed to enable setting api for backwards compatibility\n  constructor(eGridDiv, gridOptions, params) {\n    _warnOnce(\n      \"Since v31 new Grid(...) is deprecated. Use createGrid instead: `const gridApi = createGrid(...)`. The grid api is returned from createGrid and will not be available on gridOptions.\"\n    );\n    if (!gridOptions) {\n      _errorOnce(\"No gridOptions provided to the grid\");\n      return;\n    }\n    this.gridOptions = gridOptions;\n    const api = new GridCoreCreator().create(\n      eGridDiv,\n      gridOptions,\n      (context) => {\n        const gridComp = new GridComp(eGridDiv);\n        const bean = context.createBean(gridComp);\n        bean.addDestroyFunc(() => {\n          this.destroy();\n        });\n      },\n      void 0,\n      params\n    );\n    this.gridOptions.api = api;\n  }\n  destroy() {\n    if (this.gridOptions) {\n      this.gridOptions.api?.destroy();\n      delete this.gridOptions.api;\n    }\n  }\n};\nvar nextGridId = 1;\nvar GridCoreCreator = class {\n  create(eGridDiv, providedOptions, createUi, acceptChanges, params) {\n    const mergedGridOps = GlobalGridOptions.applyGlobalGridOptions(providedOptions);\n    const gridOptions = getCoercedGridOptions(mergedGridOps);\n    const gridId = gridOptions.gridId ?? String(nextGridId++);\n    const registeredModules = this.getRegisteredModules(params, gridId);\n    const beanClasses = this.createBeansList(gridOptions.rowModelType, registeredModules, gridId);\n    const providedBeanInstances = this.createProvidedBeans(eGridDiv, gridOptions, params);\n    if (!beanClasses) {\n      _errorOnce(\"Failed to create grid.\");\n      return void 0;\n    }\n    const contextParams = {\n      providedBeanInstances,\n      beanClasses,\n      gridId,\n      beanInitComparator: gridBeanInitComparator,\n      beanDestroyComparator: gridBeanDestroyComparator,\n      derivedBeans: [createGridApi]\n    };\n    const context = new Context(contextParams);\n    this.registerModuleUserComponents(context, registeredModules);\n    this.registerControllers(context, registeredModules);\n    this.registerModuleApiFunctions(context, registeredModules);\n    createUi(context);\n    context.getBean(\"syncService\").start();\n    if (acceptChanges) {\n      acceptChanges(context);\n    }\n    return context.getBean(\"gridApi\");\n  }\n  registerControllers(context, registeredModules) {\n    const factory = context.getBean(\"ctrlsFactory\");\n    registeredModules.forEach((module) => {\n      if (module.controllers) {\n        module.controllers.forEach((meta) => factory.register(meta));\n      }\n    });\n  }\n  getRegisteredModules(params, gridId) {\n    const passedViaConstructor = params ? params.modules : null;\n    const registered = ModuleRegistry.__getRegisteredModules(gridId);\n    const allModules = [];\n    const mapNames = {};\n    const addModule = (moduleBased, mod2, gridId2) => {\n      const addIndividualModule = (currentModule) => {\n        if (!mapNames[currentModule.moduleName]) {\n          mapNames[currentModule.moduleName] = true;\n          allModules.push(currentModule);\n          ModuleRegistry.__register(currentModule, moduleBased, gridId2);\n        }\n      };\n      addIndividualModule(mod2);\n      if (mod2.dependantModules) {\n        mod2.dependantModules.forEach((m) => addModule(moduleBased, m, gridId2));\n      }\n    };\n    addModule(\n      !!passedViaConstructor?.length || !ModuleRegistry.__isPackageBased(),\n      CommunityFeaturesModule,\n      void 0\n    );\n    if (passedViaConstructor) {\n      passedViaConstructor.forEach((m) => addModule(true, m, gridId));\n    }\n    if (registered) {\n      registered.forEach((m) => addModule(!ModuleRegistry.__isPackageBased(), m, void 0));\n    }\n    return allModules;\n  }\n  registerModuleUserComponents(context, registeredModules) {\n    const moduleUserComps = this.extractModuleEntity(\n      registeredModules,\n      (module) => module.userComponents ? module.userComponents : []\n    );\n    const registry = context.getBean(\"userComponentRegistry\");\n    moduleUserComps.forEach(({ name, classImp, params }) => {\n      registry.registerDefaultComponent(name, classImp, params);\n    });\n  }\n  registerModuleApiFunctions(context, registeredModules) {\n    const apiFunctionService = context.getBean(\"apiFunctionService\");\n    registeredModules.forEach((module) => {\n      const apiFunctions = module.apiFunctions;\n      if (apiFunctions) {\n        const names = Object.keys(apiFunctions);\n        names.forEach((name) => {\n          apiFunctionService?.addFunction(name, apiFunctions[name]);\n        });\n      }\n    });\n  }\n  createProvidedBeans(eGridDiv, gridOptions, params) {\n    let frameworkOverrides = params ? params.frameworkOverrides : null;\n    if (_missing(frameworkOverrides)) {\n      frameworkOverrides = new VanillaFrameworkOverrides();\n    }\n    const seed = {\n      gridOptions,\n      eGridDiv,\n      globalEventListener: params ? params.globalEventListener : null,\n      globalSyncEventListener: params ? params.globalSyncEventListener : null,\n      frameworkOverrides\n    };\n    if (params && params.providedBeanInstances) {\n      Object.assign(seed, params.providedBeanInstances);\n    }\n    return seed;\n  }\n  createBeansList(rowModelType = \"clientSide\", registeredModules, gridId) {\n    const rowModelModules = registeredModules.filter(\n      (module) => !module.rowModel || module.rowModel === rowModelType\n    );\n    const rowModelModuleNames = {\n      clientSide: \"@ag-grid-community/client-side-row-model\" /* ClientSideRowModelModule */,\n      infinite: \"@ag-grid-community/infinite-row-model\" /* InfiniteRowModelModule */,\n      serverSide: \"@ag-grid-enterprise/server-side-row-model\" /* ServerSideRowModelModule */,\n      viewport: \"@ag-grid-enterprise/viewport-row-model\" /* ViewportRowModelModule */\n    };\n    if (!rowModelModuleNames[rowModelType]) {\n      _errorOnce(\"Could not find row model for rowModelType = \", rowModelType);\n      return;\n    }\n    if (!ModuleRegistry.__assertRegistered(\n      rowModelModuleNames[rowModelType],\n      `rowModelType = '${rowModelType}'`,\n      gridId\n    )) {\n      return;\n    }\n    const beans = [\n      RowPositionUtils,\n      CellPositionUtils,\n      HeaderPositionUtils,\n      GridDestroyService,\n      ApiFunctionService,\n      UserComponentRegistry,\n      AgComponentUtils,\n      ComponentMetadataProvider,\n      ResizeObserverService,\n      UserComponentFactory,\n      RowContainerHeightService,\n      HorizontalResizeService,\n      LocaleService,\n      PinnedRowModel,\n      DragService,\n      VisibleColsService,\n      EventService,\n      GridOptionsService,\n      PopupService,\n      SelectionService,\n      ColumnModel,\n      HeaderNavigationService,\n      PageBoundsService,\n      PageBoundsListener,\n      RowRenderer,\n      ExpressionService,\n      ColumnFactory,\n      NavigationService,\n      ValueCache,\n      ValueService,\n      AutoWidthCalculator,\n      StandardMenuFactory,\n      DragAndDropService,\n      FocusService,\n      MouseEventService,\n      Environment,\n      CellNavigationService,\n      StylingService,\n      ScrollVisibleService,\n      SortController,\n      ColumnHoverService,\n      ColumnAnimationService,\n      SelectableService,\n      ChangeDetectionService,\n      AnimationFrameService,\n      ColumnDefFactory,\n      RowCssClassCalculator,\n      RowNodeSorter,\n      CtrlsService,\n      PinnedWidthService,\n      RowNodeEventThrottle,\n      CtrlsFactory,\n      SyncService,\n      OverlayService,\n      ExpansionService,\n      ApiEventService,\n      AriaAnnouncementService,\n      MenuService,\n      ColumnApplyStateService,\n      ColumnEventDispatcher,\n      ColumnMoveService,\n      ColumnAutosizeService,\n      ColumnGetStateService,\n      ColumnGroupStateService,\n      ColumnSizeService,\n      FuncColsService,\n      ColumnNameService,\n      ColumnViewportService,\n      PivotResultColsService,\n      ControlsColService\n    ];\n    const moduleBeans = this.extractModuleEntity(rowModelModules, (module) => module.beans ? module.beans : []);\n    beans.push(...moduleBeans);\n    const beansNoDuplicates = [];\n    beans.forEach((bean) => {\n      if (beansNoDuplicates.indexOf(bean) < 0) {\n        beansNoDuplicates.push(bean);\n      }\n    });\n    return beansNoDuplicates;\n  }\n  extractModuleEntity(moduleEntities, extractor) {\n    return [].concat(...moduleEntities.map(extractor));\n  }\n};\n\n// community-modules/core/src/api/rowModelHelperService.ts\nvar RowModelHelperService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowModelHelperService\";\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    const rowModel = this.rowModel;\n    switch (rowModel.getType()) {\n      case \"clientSide\":\n        this.clientSideRowModel = rowModel;\n        break;\n      case \"infinite\":\n        this.infiniteRowModel = rowModel;\n        break;\n      case \"serverSide\":\n        this.serverSideRowModel = rowModel;\n        break;\n    }\n  }\n  getClientSideRowModel() {\n    return this.clientSideRowModel;\n  }\n  getInfiniteRowModel() {\n    return this.infiniteRowModel;\n  }\n  getServerSideRowModel() {\n    return this.serverSideRowModel;\n  }\n};\n\n// community-modules/core/src/api/csrmSsrmSharedApi.ts\nfunction expandAll(beans) {\n  beans.expansionService.expandAll(true);\n}\nfunction collapseAll(beans) {\n  beans.expansionService.expandAll(false);\n}\nfunction onRowHeightChanged(beans) {\n  const clientSideRowModel = beans.rowModelHelperService?.getClientSideRowModel();\n  const serverSideRowModel = beans.rowModelHelperService?.getServerSideRowModel();\n  if (clientSideRowModel) {\n    clientSideRowModel.onRowHeightChanged();\n  } else if (serverSideRowModel) {\n    serverSideRowModel.onRowHeightChanged();\n  }\n}\n\n// community-modules/core/src/api/ssrmInfiniteSharedApi.ts\nfunction setRowCount(beans, rowCount, maxRowFound) {\n  const serverSideRowModel = beans.rowModelHelperService?.getServerSideRowModel();\n  if (serverSideRowModel) {\n    if (beans.funcColsService.isRowGroupEmpty()) {\n      serverSideRowModel.setRowCount(rowCount, maxRowFound);\n      return;\n    }\n    _errorOnce(\"setRowCount cannot be used while using row grouping.\");\n    return;\n  }\n  const infiniteRowModel = beans.rowModelHelperService?.getInfiniteRowModel();\n  if (infiniteRowModel) {\n    infiniteRowModel.setRowCount(rowCount, maxRowFound);\n    return;\n  }\n}\nfunction getCacheBlockState(beans) {\n  return beans.rowNodeBlockLoader?.getBlockState() ?? {};\n}\nfunction isLastRowIndexKnown(beans) {\n  return beans.rowModel.isLastRowIndexKnown();\n}\n\n// community-modules/core/src/api/sharedApiModule.ts\nvar CsrmSsrmSharedApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/csrm-ssrm-shared-api\",\n  apiFunctions: {\n    expandAll,\n    collapseAll,\n    onRowHeightChanged\n  }\n});\nvar SsrmInfiniteSharedApiModule = _defineModule({\n  version: VERSION,\n  moduleName: \"@ag-grid-community/ssrm-infinite-shared-api\",\n  apiFunctions: {\n    setRowCount,\n    getCacheBlockState,\n    isLastRowIndexKnown\n  }\n});\n\n// community-modules/core/src/components/framework/frameworkComponentWrapper.ts\nvar BaseComponentWrapper = class {\n  wrap(OriginalConstructor, mandatoryMethodList, optionalMethodList = [], componentType) {\n    const wrapper = this.createWrapper(OriginalConstructor, componentType);\n    mandatoryMethodList.forEach((methodName) => {\n      this.createMethod(wrapper, methodName, true);\n    });\n    optionalMethodList.forEach((methodName) => {\n      this.createMethod(wrapper, methodName, false);\n    });\n    return wrapper;\n  }\n  createMethod(wrapper, methodName, mandatory) {\n    wrapper.addMethod(methodName, this.createMethodProxy(wrapper, methodName, mandatory));\n  }\n  createMethodProxy(wrapper, methodName, mandatory) {\n    return function() {\n      if (wrapper.hasMethod(methodName)) {\n        return wrapper.callMethod(methodName, arguments);\n      }\n      if (mandatory) {\n        _warnOnce(\"Framework component is missing the method \" + methodName + \"()\");\n      }\n      return null;\n    };\n  }\n};\n\n// community-modules/core/src/interfaces/iChartOptions.ts\nvar ChartMappings = class {\n};\nChartMappings.CHART_TYPE_TO_SERIES_TYPE = {\n  column: \"bar\",\n  groupedColumn: \"bar\",\n  stackedColumn: \"bar\",\n  normalizedColumn: \"bar\",\n  bar: \"bar\",\n  groupedBar: \"bar\",\n  stackedBar: \"bar\",\n  normalizedBar: \"bar\",\n  line: \"line\",\n  scatter: \"scatter\",\n  bubble: \"bubble\",\n  pie: \"pie\",\n  donut: \"donut\",\n  doughnut: \"donut\",\n  area: \"area\",\n  stackedArea: \"area\",\n  normalizedArea: \"area\",\n  histogram: \"histogram\",\n  radarLine: \"radar-line\",\n  radarArea: \"radar-area\",\n  nightingale: \"nightingale\",\n  radialColumn: \"radial-column\",\n  radialBar: \"radial-bar\",\n  sunburst: \"sunburst\",\n  rangeBar: \"range-bar\",\n  rangeArea: \"range-area\",\n  boxPlot: \"box-plot\",\n  treemap: \"treemap\",\n  heatmap: \"heatmap\",\n  waterfall: \"waterfall\"\n};\nChartMappings.COMBO_CHART_TYPES = [\"columnLineCombo\", \"areaColumnCombo\", \"customCombo\"];\nChartMappings.SERIES_GROUP_TYPES = [\"grouped\", \"stacked\", \"normalized\"];\n\n// community-modules/core/src/interfaces/iSparklineCellRendererParams.ts\nvar BarColumnLabelPlacement = /* @__PURE__ */ ((BarColumnLabelPlacement2) => {\n  BarColumnLabelPlacement2[\"InsideBase\"] = \"insideBase\";\n  BarColumnLabelPlacement2[\"InsideEnd\"] = \"insideEnd\";\n  BarColumnLabelPlacement2[\"Center\"] = \"center\";\n  BarColumnLabelPlacement2[\"OutsideEnd\"] = \"outsideEnd\";\n  return BarColumnLabelPlacement2;\n})(BarColumnLabelPlacement || {});\n\n// community-modules/core/src/main.ts\nvar globalObj = typeof global === \"undefined\" ? {} : global;\nglobalObj.HTMLElement = typeof HTMLElement === \"undefined\" ? {} : HTMLElement;\nglobalObj.HTMLButtonElement = typeof HTMLButtonElement === \"undefined\" ? {} : HTMLButtonElement;\nglobalObj.HTMLSelectElement = typeof HTMLSelectElement === \"undefined\" ? {} : HTMLSelectElement;\nglobalObj.HTMLInputElement = typeof HTMLInputElement === \"undefined\" ? {} : HTMLInputElement;\nglobalObj.Node = typeof Node === \"undefined\" ? {} : Node;\nglobalObj.MouseEvent = typeof MouseEvent === \"undefined\" ? {} : MouseEvent;\n\n// community-modules/client-side-row-model/src/clientSideRowModel/clientSideNodeManager.ts\nvar ROOT_NODE_ID = \"ROOT_NODE_ID\";\nvar TOP_LEVEL = 0;\nvar ClientSideNodeManager = class {\n  constructor(rootNode, gos, eventService, funcColsService, selectionService, beans) {\n    this.nextId = 0;\n    // has row data actually been set\n    this.rowCountReady = false;\n    // when user is provide the id's, we also keep a map of ids to row nodes for convenience\n    this.allNodesMap = {};\n    this.rootNode = rootNode;\n    this.gos = gos;\n    this.eventService = eventService;\n    this.funcColsService = funcColsService;\n    this.beans = beans;\n    this.selectionService = selectionService;\n    this.rootNode.group = true;\n    this.rootNode.level = -1;\n    this.rootNode.id = ROOT_NODE_ID;\n    this.rootNode.allLeafChildren = [];\n    this.rootNode.childrenAfterGroup = [];\n    this.rootNode.childrenAfterSort = [];\n    this.rootNode.childrenAfterAggFilter = [];\n    this.rootNode.childrenAfterFilter = [];\n  }\n  getCopyOfNodesMap() {\n    return _cloneObject(this.allNodesMap);\n  }\n  getRowNode(id) {\n    return this.allNodesMap[id];\n  }\n  setRowData(rowData) {\n    if (typeof rowData === \"string\") {\n      _warnOnce(\"rowData must be an array.\");\n      return;\n    }\n    this.rowCountReady = true;\n    this.dispatchRowDataUpdateStartedEvent(rowData);\n    const rootNode = this.rootNode;\n    const sibling = this.rootNode.sibling;\n    rootNode.childrenAfterFilter = null;\n    rootNode.childrenAfterGroup = null;\n    rootNode.childrenAfterAggFilter = null;\n    rootNode.childrenAfterSort = null;\n    rootNode.childrenMapped = null;\n    rootNode.updateHasChildren();\n    this.nextId = 0;\n    this.allNodesMap = {};\n    if (rowData) {\n      rootNode.allLeafChildren = rowData.map(\n        (dataItem, index) => this.createNode(dataItem, this.rootNode, TOP_LEVEL, index)\n      );\n    } else {\n      rootNode.allLeafChildren = [];\n      rootNode.childrenAfterGroup = [];\n    }\n    if (sibling) {\n      sibling.childrenAfterFilter = rootNode.childrenAfterFilter;\n      sibling.childrenAfterGroup = rootNode.childrenAfterGroup;\n      sibling.childrenAfterAggFilter = rootNode.childrenAfterAggFilter;\n      sibling.childrenAfterSort = rootNode.childrenAfterSort;\n      sibling.childrenMapped = rootNode.childrenMapped;\n      sibling.allLeafChildren = rootNode.allLeafChildren;\n    }\n  }\n  updateRowData(rowDataTran) {\n    this.rowCountReady = true;\n    this.dispatchRowDataUpdateStartedEvent(rowDataTran.add);\n    const updateRowDataResult = {\n      rowNodeTransaction: { remove: [], update: [], add: [] },\n      rowsInserted: false\n    };\n    const nodesToUnselect = [];\n    this.executeRemove(rowDataTran, updateRowDataResult, nodesToUnselect);\n    this.executeUpdate(rowDataTran, updateRowDataResult, nodesToUnselect);\n    this.executeAdd(rowDataTran, updateRowDataResult);\n    this.updateSelection(nodesToUnselect, \"rowDataChanged\");\n    return updateRowDataResult;\n  }\n  /**\n   * Used by the immutable service, after updateRowData, after updating with a generated transaction to\n   * apply the order as specified by the the new data. We use sourceRowIndex to determine the order of the rows.\n   * Time complexity is O(n) where n is the number of rows/rowData\n   * @returns true if the order changed, otherwise false\n   */\n  updateRowOrderFromRowData(rowData) {\n    const rows = this.rootNode.allLeafChildren;\n    const rowsLength = rows?.length ?? 0;\n    const rowsOutOfOrder = /* @__PURE__ */ new Map();\n    let firstIndexOutOfOrder = -1;\n    let lastIndexOutOfOrder = -1;\n    for (let i = 0; i < rowsLength; ++i) {\n      const row = rows[i];\n      const data = row.data;\n      if (data !== rowData[i]) {\n        if (lastIndexOutOfOrder < 0) {\n          firstIndexOutOfOrder = i;\n        }\n        lastIndexOutOfOrder = i;\n        rowsOutOfOrder.set(data, row);\n      }\n    }\n    if (firstIndexOutOfOrder < 0) {\n      return false;\n    }\n    for (let i = firstIndexOutOfOrder; i <= lastIndexOutOfOrder; ++i) {\n      const row = rowsOutOfOrder.get(rowData[i]);\n      if (row !== void 0) {\n        rows[i] = row;\n        row.sourceRowIndex = i;\n      }\n    }\n    return true;\n  }\n  isRowCountReady() {\n    return this.rowCountReady;\n  }\n  dispatchRowDataUpdateStartedEvent(rowData) {\n    this.eventService.dispatchEvent({\n      type: \"rowDataUpdateStarted\",\n      firstRowData: rowData?.length ? rowData[0] : null\n    });\n  }\n  updateSelection(nodesToUnselect, source) {\n    const selectionChanged = nodesToUnselect.length > 0;\n    if (selectionChanged) {\n      this.selectionService.setNodesSelected({\n        newValue: false,\n        nodes: nodesToUnselect,\n        suppressFinishActions: true,\n        source\n      });\n    }\n    this.selectionService.updateGroupsFromChildrenSelections(source);\n    if (selectionChanged) {\n      this.eventService.dispatchEvent({\n        type: \"selectionChanged\",\n        source\n      });\n    }\n  }\n  executeAdd(rowDataTran, result) {\n    const add = rowDataTran.add;\n    if (_missingOrEmpty(add)) {\n      return;\n    }\n    const allLeafChildren = this.rootNode.allLeafChildren;\n    let addIndex = allLeafChildren.length;\n    if (typeof rowDataTran.addIndex === \"number\") {\n      addIndex = this.sanitizeAddIndex(rowDataTran.addIndex);\n      if (addIndex > 0) {\n        const isTreeData = this.gos.get(\"treeData\");\n        if (isTreeData) {\n          for (let i = 0; i < allLeafChildren.length; i++) {\n            const node = allLeafChildren[i];\n            if (node?.rowIndex == addIndex - 1) {\n              addIndex = i + 1;\n              break;\n            }\n          }\n        }\n      }\n    }\n    const newNodes = add.map(\n      (item, index) => this.createNode(item, this.rootNode, TOP_LEVEL, addIndex + index)\n    );\n    if (addIndex < allLeafChildren.length) {\n      const nodesBeforeIndex = allLeafChildren.slice(0, addIndex);\n      const nodesAfterIndex = allLeafChildren.slice(addIndex, allLeafChildren.length);\n      const nodesAfterIndexFirstIndex = nodesBeforeIndex.length + newNodes.length;\n      for (let index = 0, length = nodesAfterIndex.length; index < length; ++index) {\n        nodesAfterIndex[index].sourceRowIndex = nodesAfterIndexFirstIndex + index;\n      }\n      this.rootNode.allLeafChildren = [...nodesBeforeIndex, ...newNodes, ...nodesAfterIndex];\n      result.rowsInserted = true;\n    } else {\n      this.rootNode.allLeafChildren = allLeafChildren.concat(newNodes);\n    }\n    const sibling = this.rootNode.sibling;\n    if (sibling) {\n      sibling.allLeafChildren = allLeafChildren;\n    }\n    result.rowNodeTransaction.add = newNodes;\n  }\n  sanitizeAddIndex(addIndex) {\n    const allChildrenCount = this.rootNode.allLeafChildren?.length ?? 0;\n    if (addIndex < 0 || addIndex >= allChildrenCount || Number.isNaN(addIndex)) {\n      return allChildrenCount;\n    }\n    return Math.ceil(addIndex);\n  }\n  executeRemove(rowDataTran, { rowNodeTransaction }, nodesToUnselect) {\n    const { remove } = rowDataTran;\n    if (_missingOrEmpty(remove)) {\n      return;\n    }\n    const rowIdsRemoved = {};\n    remove.forEach((item) => {\n      const rowNode = this.lookupRowNode(item);\n      if (!rowNode) {\n        return;\n      }\n      if (rowNode.isSelected()) {\n        nodesToUnselect.push(rowNode);\n      }\n      rowNode.clearRowTopAndRowIndex();\n      rowIdsRemoved[rowNode.id] = true;\n      delete this.allNodesMap[rowNode.id];\n      rowNodeTransaction.remove.push(rowNode);\n    });\n    this.rootNode.allLeafChildren = this.rootNode.allLeafChildren?.filter((rowNode) => !rowIdsRemoved[rowNode.id]) ?? null;\n    this.rootNode.allLeafChildren?.forEach((node, idx) => {\n      node.sourceRowIndex = idx;\n    });\n    const sibling = this.rootNode.sibling;\n    if (sibling) {\n      sibling.allLeafChildren = this.rootNode.allLeafChildren;\n    }\n  }\n  executeUpdate(rowDataTran, { rowNodeTransaction }, nodesToUnselect) {\n    const { update } = rowDataTran;\n    if (_missingOrEmpty(update)) {\n      return;\n    }\n    update.forEach((item) => {\n      const rowNode = this.lookupRowNode(item);\n      if (!rowNode) {\n        return;\n      }\n      rowNode.updateData(item);\n      if (!rowNode.selectable && rowNode.isSelected()) {\n        nodesToUnselect.push(rowNode);\n      }\n      this.setMasterForRow(rowNode, item, TOP_LEVEL, false);\n      rowNodeTransaction.update.push(rowNode);\n    });\n  }\n  lookupRowNode(data) {\n    const getRowIdFunc = _getRowIdCallback(this.gos);\n    let rowNode;\n    if (getRowIdFunc) {\n      const id = getRowIdFunc({ data, level: 0 });\n      rowNode = this.allNodesMap[id];\n      if (!rowNode) {\n        _errorOnce(`could not find row id=${id}, data item was not found for this id`);\n        return null;\n      }\n    } else {\n      rowNode = this.rootNode.allLeafChildren?.find((node) => node.data === data);\n      if (!rowNode) {\n        _errorOnce(`could not find data item as object was not found`, data);\n        _errorOnce(`Consider using getRowId to help the Grid find matching row data`);\n        return null;\n      }\n    }\n    return rowNode || null;\n  }\n  createNode(dataItem, parent, level, sourceRowIndex) {\n    const node = new RowNode(this.beans);\n    node.sourceRowIndex = sourceRowIndex;\n    node.group = false;\n    this.setMasterForRow(node, dataItem, level, true);\n    if (parent) {\n      node.parent = parent;\n    }\n    node.level = level;\n    node.setDataAndId(dataItem, this.nextId.toString());\n    if (this.allNodesMap[node.id]) {\n      _warnOnce(\n        `duplicate node id '${node.id}' detected from getRowId callback, this could cause issues in your grid.`\n      );\n    }\n    this.allNodesMap[node.id] = node;\n    this.nextId++;\n    return node;\n  }\n  setMasterForRow(rowNode, data, level, setExpanded) {\n    const isTreeData = this.gos.get(\"treeData\");\n    if (isTreeData) {\n      rowNode.setMaster(false);\n      if (setExpanded) {\n        rowNode.expanded = false;\n      }\n    } else {\n      const masterDetail = this.gos.get(\"masterDetail\");\n      if (masterDetail) {\n        const isRowMasterFunc = this.gos.get(\"isRowMaster\");\n        if (isRowMasterFunc) {\n          rowNode.setMaster(isRowMasterFunc(data));\n        } else {\n          rowNode.setMaster(true);\n        }\n      } else {\n        rowNode.setMaster(false);\n      }\n      if (setExpanded) {\n        const rowGroupColumns = this.funcColsService.getRowGroupColumns();\n        const numRowGroupColumns = rowGroupColumns ? rowGroupColumns.length : 0;\n        const masterRowLevel = level + numRowGroupColumns;\n        rowNode.expanded = rowNode.master ? this.isExpanded(masterRowLevel) : false;\n      }\n    }\n  }\n  isExpanded(level) {\n    const expandByDefault = this.gos.get(\"groupDefaultExpanded\");\n    if (expandByDefault === -1) {\n      return true;\n    }\n    return level < expandByDefault;\n  }\n};\n\n// community-modules/client-side-row-model/src/clientSideRowModel/clientSideRowModel.ts\nvar ClientSideRowModel = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowModel\";\n    this.onRowHeightChanged_debounced = _debounce(this.onRowHeightChanged.bind(this), 100);\n    this.rowsToDisplay = [];\n    /** Has the start method been called */\n    this.hasStarted = false;\n    /** E.g. data has been set into the node manager already */\n    this.shouldSkipSettingDataOnStart = false;\n    /**\n     * This is to prevent refresh model being called when it's already being called.\n     * E.g. the group stage can trigger initial state filter model to be applied. This fires onFilterChanged,\n     * which then triggers the listener here that calls refresh model again but at the filter stage\n     * (which is about to be run by the original call).\n     */\n    this.isRefreshingModel = false;\n    this.rowCountReady = false;\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n    this.selectionService = beans.selectionService;\n    this.valueCache = beans.valueCache;\n    this.environment = beans.environment;\n    this.filterStage = beans.filterStage;\n    this.sortStage = beans.sortStage;\n    this.flattenStage = beans.flattenStage;\n    this.groupStage = beans.groupStage;\n    this.aggregationStage = beans.aggregationStage;\n    this.pivotStage = beans.pivotStage;\n    this.filterAggregatesStage = beans.filterAggregatesStage;\n  }\n  postConstruct() {\n    const refreshEverythingFunc = this.refreshModel.bind(this, { step: \"group\" /* EVERYTHING */ });\n    const animate = !this.gos.get(\"suppressAnimationFrame\");\n    const refreshEverythingAfterColsChangedFunc = this.refreshModel.bind(this, {\n      step: \"group\" /* EVERYTHING */,\n      // after cols change, row grouping (the first stage) could of changed\n      afterColumnsChanged: true,\n      keepRenderedRows: true,\n      // we want animations cos sorting or filtering could be applied\n      animate\n    });\n    this.addManagedEventListeners({\n      newColumnsLoaded: refreshEverythingAfterColsChangedFunc,\n      columnRowGroupChanged: refreshEverythingFunc,\n      columnValueChanged: this.onValueChanged.bind(this),\n      columnPivotChanged: this.refreshModel.bind(this, { step: \"pivot\" /* PIVOT */ }),\n      filterChanged: this.onFilterChanged.bind(this),\n      sortChanged: this.onSortChanged.bind(this),\n      columnPivotModeChanged: refreshEverythingFunc,\n      gridStylesChanged: this.onGridStylesChanges.bind(this),\n      gridReady: this.onGridReady.bind(this)\n    });\n    this.addPropertyListeners();\n    this.rootNode = new RowNode(this.beans);\n    this.nodeManager = new ClientSideNodeManager(\n      this.rootNode,\n      this.gos,\n      this.eventService,\n      this.funcColsService,\n      this.selectionService,\n      this.beans\n    );\n  }\n  addPropertyListeners() {\n    const resetProps = /* @__PURE__ */ new Set([\"treeData\", \"masterDetail\"]);\n    const groupStageRefreshProps = /* @__PURE__ */ new Set([\n      \"groupDefaultExpanded\",\n      \"groupAllowUnbalanced\",\n      \"initialGroupOrderComparator\",\n      \"groupHideOpenParents\",\n      \"groupDisplayType\"\n    ]);\n    const filterStageRefreshProps = /* @__PURE__ */ new Set([\"excludeChildrenWhenTreeDataFiltering\"]);\n    const pivotStageRefreshProps = /* @__PURE__ */ new Set([\n      \"removePivotHeaderRowWhenSingleValueColumn\",\n      \"pivotRowTotals\",\n      \"pivotColumnGroupTotals\",\n      \"suppressExpandablePivotGroups\"\n    ]);\n    const aggregateStageRefreshProps = /* @__PURE__ */ new Set([\n      \"getGroupRowAgg\",\n      \"alwaysAggregateAtRootLevel\",\n      \"groupIncludeTotalFooter\",\n      \"suppressAggFilteredOnly\",\n      \"grandTotalRow\"\n    ]);\n    const sortStageRefreshProps = /* @__PURE__ */ new Set([\n      \"postSortRows\",\n      \"groupDisplayType\",\n      \"accentedSort\"\n    ]);\n    const filterAggStageRefreshProps = /* @__PURE__ */ new Set([]);\n    const flattenStageRefreshProps = /* @__PURE__ */ new Set([\n      \"groupRemoveSingleChildren\",\n      \"groupRemoveLowestSingleChildren\",\n      \"groupIncludeFooter\",\n      \"groupTotalRow\"\n    ]);\n    const allProps = [\n      ...resetProps,\n      ...groupStageRefreshProps,\n      ...filterStageRefreshProps,\n      ...pivotStageRefreshProps,\n      ...pivotStageRefreshProps,\n      ...aggregateStageRefreshProps,\n      ...sortStageRefreshProps,\n      ...filterAggStageRefreshProps,\n      ...flattenStageRefreshProps\n    ];\n    this.addManagedPropertyListeners(allProps, (params) => {\n      const properties = params.changeSet?.properties;\n      if (!properties) {\n        return;\n      }\n      const arePropertiesImpacted = (propSet) => properties.some((prop) => propSet.has(prop));\n      if (arePropertiesImpacted(resetProps)) {\n        this.setRowData(this.rootNode.allLeafChildren.map((child) => child.data));\n        return;\n      }\n      if (arePropertiesImpacted(groupStageRefreshProps)) {\n        this.refreshModel({ step: \"group\" /* EVERYTHING */ });\n        return;\n      }\n      if (arePropertiesImpacted(filterStageRefreshProps)) {\n        this.refreshModel({ step: \"filter\" /* FILTER */ });\n        return;\n      }\n      if (arePropertiesImpacted(pivotStageRefreshProps)) {\n        this.refreshModel({ step: \"pivot\" /* PIVOT */ });\n        return;\n      }\n      if (arePropertiesImpacted(aggregateStageRefreshProps)) {\n        this.refreshModel({ step: \"aggregate\" /* AGGREGATE */ });\n        return;\n      }\n      if (arePropertiesImpacted(sortStageRefreshProps)) {\n        this.refreshModel({ step: \"sort\" /* SORT */ });\n        return;\n      }\n      if (arePropertiesImpacted(filterAggStageRefreshProps)) {\n        this.refreshModel({ step: \"filter_aggregates\" /* FILTER_AGGREGATES */ });\n        return;\n      }\n      if (arePropertiesImpacted(flattenStageRefreshProps)) {\n        this.refreshModel({ step: \"map\" /* MAP */ });\n      }\n    });\n    this.addManagedPropertyListener(\"rowHeight\", () => this.resetRowHeights());\n  }\n  start() {\n    this.hasStarted = true;\n    if (this.shouldSkipSettingDataOnStart) {\n      this.dispatchUpdateEventsAndRefresh();\n    } else {\n      this.setInitialData();\n    }\n  }\n  setInitialData() {\n    const rowData = this.gos.get(\"rowData\");\n    if (rowData) {\n      this.shouldSkipSettingDataOnStart = true;\n      this.setRowData(rowData);\n    }\n  }\n  ensureRowHeightsValid(startPixel, endPixel, startLimitIndex, endLimitIndex) {\n    let atLeastOneChange;\n    let res = false;\n    do {\n      atLeastOneChange = false;\n      const rowAtStartPixel = this.getRowIndexAtPixel(startPixel);\n      const rowAtEndPixel = this.getRowIndexAtPixel(endPixel);\n      const firstRow = Math.max(rowAtStartPixel, startLimitIndex);\n      const lastRow = Math.min(rowAtEndPixel, endLimitIndex);\n      for (let rowIndex = firstRow; rowIndex <= lastRow; rowIndex++) {\n        const rowNode = this.getRow(rowIndex);\n        if (rowNode.rowHeightEstimated) {\n          const rowHeight = _getRowHeightForNode(this.gos, rowNode);\n          rowNode.setRowHeight(rowHeight.height);\n          atLeastOneChange = true;\n          res = true;\n        }\n      }\n      if (atLeastOneChange) {\n        this.setRowTopAndRowIndex();\n      }\n    } while (atLeastOneChange);\n    return res;\n  }\n  setRowTopAndRowIndex() {\n    const defaultRowHeight = this.environment.getDefaultRowHeight();\n    let nextRowTop = 0;\n    const displayedRowsMapped = /* @__PURE__ */ new Set();\n    const allowEstimate = _isDomLayout(this.gos, \"normal\");\n    for (let i = 0; i < this.rowsToDisplay.length; i++) {\n      const rowNode = this.rowsToDisplay[i];\n      if (rowNode.id != null) {\n        displayedRowsMapped.add(rowNode.id);\n      }\n      if (rowNode.rowHeight == null) {\n        const rowHeight = _getRowHeightForNode(this.gos, rowNode, allowEstimate, defaultRowHeight);\n        rowNode.setRowHeight(rowHeight.height, rowHeight.estimated);\n      }\n      rowNode.setRowTop(nextRowTop);\n      rowNode.setRowIndex(i);\n      nextRowTop += rowNode.rowHeight;\n    }\n    return displayedRowsMapped;\n  }\n  clearRowTopAndRowIndex(changedPath, displayedRowsMapped) {\n    const changedPathActive = changedPath.isActive();\n    const clearIfNotDisplayed = (rowNode) => {\n      if (rowNode && rowNode.id != null && !displayedRowsMapped.has(rowNode.id)) {\n        rowNode.clearRowTopAndRowIndex();\n      }\n    };\n    const recurse = (rowNode) => {\n      clearIfNotDisplayed(rowNode);\n      clearIfNotDisplayed(rowNode.detailNode);\n      clearIfNotDisplayed(rowNode.sibling);\n      if (rowNode.hasChildren()) {\n        if (rowNode.childrenAfterGroup) {\n          const isRootNode = rowNode.level == -1;\n          const skipChildren = changedPathActive && !isRootNode && !rowNode.expanded;\n          if (!skipChildren) {\n            rowNode.childrenAfterGroup.forEach(recurse);\n          }\n        }\n      }\n    };\n    recurse(this.rootNode);\n  }\n  // returns false if row was moved, otherwise true\n  ensureRowsAtPixel(rowNodes, pixel, increment = 0) {\n    const indexAtPixelNow = this.getRowIndexAtPixel(pixel);\n    const rowNodeAtPixelNow = this.getRow(indexAtPixelNow);\n    const animate = !this.gos.get(\"suppressAnimationFrame\");\n    if (rowNodeAtPixelNow === rowNodes[0]) {\n      return false;\n    }\n    const allLeafChildren = this.rootNode.allLeafChildren;\n    rowNodes.forEach((rowNode) => {\n      _removeFromArray(allLeafChildren, rowNode);\n    });\n    rowNodes.forEach((rowNode, idx) => {\n      _insertIntoArray(allLeafChildren, rowNode, Math.max(indexAtPixelNow + increment, 0) + idx);\n    });\n    rowNodes.forEach((rowNode, index) => {\n      rowNode.sourceRowIndex = index;\n    });\n    this.refreshModel({\n      step: \"group\" /* EVERYTHING */,\n      keepRenderedRows: true,\n      keepEditingRows: true,\n      animate,\n      rowNodesOrderChanged: true\n      // We assume the order changed and we don't need to check if it really did\n    });\n    return true;\n  }\n  highlightRowAtPixel(rowNode, pixel) {\n    const indexAtPixelNow = pixel != null ? this.getRowIndexAtPixel(pixel) : null;\n    const rowNodeAtPixelNow = indexAtPixelNow != null ? this.getRow(indexAtPixelNow) : null;\n    if (!rowNodeAtPixelNow || !rowNode || pixel == null) {\n      this.clearHighlightedRow();\n      return;\n    }\n    const highlight = this.getHighlightPosition(pixel, rowNodeAtPixelNow);\n    const isSamePosition = this.isHighlightingCurrentPosition(rowNode, rowNodeAtPixelNow, highlight);\n    const isDifferentNode = this.lastHighlightedRow != null && this.lastHighlightedRow !== rowNodeAtPixelNow;\n    if (isSamePosition || isDifferentNode) {\n      this.clearHighlightedRow();\n      if (isSamePosition) {\n        return;\n      }\n    }\n    rowNodeAtPixelNow.setHighlighted(highlight);\n    this.lastHighlightedRow = rowNodeAtPixelNow;\n  }\n  getHighlightPosition(pixel, rowNode) {\n    if (!rowNode) {\n      const index = this.getRowIndexAtPixel(pixel);\n      rowNode = this.getRow(index || 0);\n      if (!rowNode) {\n        return 1 /* Below */;\n      }\n    }\n    const { rowTop, rowHeight } = rowNode;\n    return pixel - rowTop < rowHeight / 2 ? 0 /* Above */ : 1 /* Below */;\n  }\n  getLastHighlightedRowNode() {\n    return this.lastHighlightedRow;\n  }\n  isHighlightingCurrentPosition(movingRowNode, hoveredRowNode, highlightPosition) {\n    if (movingRowNode === hoveredRowNode) {\n      return true;\n    }\n    const diff = highlightPosition === 0 /* Above */ ? -1 : 1;\n    if (this.getRow(hoveredRowNode.rowIndex + diff) === movingRowNode) {\n      return true;\n    }\n    return false;\n  }\n  clearHighlightedRow() {\n    if (this.lastHighlightedRow) {\n      this.lastHighlightedRow.setHighlighted(null);\n      this.lastHighlightedRow = null;\n    }\n  }\n  isLastRowIndexKnown() {\n    return true;\n  }\n  getRowCount() {\n    if (this.rowsToDisplay) {\n      return this.rowsToDisplay.length;\n    }\n    return 0;\n  }\n  /**\n   * Returns the number of rows with level === 1\n   */\n  getTopLevelRowCount() {\n    if (this.rowsToDisplay.length === 0) {\n      return 0;\n    }\n    const showingRootNode = this.rowsToDisplay && this.rowsToDisplay[0] === this.rootNode;\n    if (showingRootNode) {\n      return 1;\n    }\n    const filteredChildren = this.rootNode.childrenAfterAggFilter;\n    const totalFooterInc = this.rootNode.sibling ? 1 : 0;\n    return (filteredChildren ? filteredChildren.length : 0) + totalFooterInc;\n  }\n  /**\n   * Get the row display index by the top level index\n   * top level index is the index of rows with level === 1\n   */\n  getTopLevelRowDisplayedIndex(topLevelIndex) {\n    const showingRootNode = this.rowsToDisplay && this.rowsToDisplay[0] === this.rootNode;\n    if (showingRootNode) {\n      return topLevelIndex;\n    }\n    let adjustedIndex = topLevelIndex;\n    if (this.rowsToDisplay[0].footer) {\n      if (topLevelIndex === 0) {\n        return 0;\n      }\n      adjustedIndex -= 1;\n    }\n    const lastRow = this.rowsToDisplay[this.rowsToDisplay.length - 1];\n    const indexOutsideGroupBounds = adjustedIndex >= this.rootNode.childrenAfterSort.length;\n    if (lastRow.footer && indexOutsideGroupBounds) {\n      return lastRow.rowIndex;\n    }\n    let rowNode = this.rootNode.childrenAfterSort[adjustedIndex];\n    if (this.gos.get(\"groupHideOpenParents\")) {\n      while (rowNode.expanded && rowNode.childrenAfterSort && rowNode.childrenAfterSort.length > 0) {\n        rowNode = rowNode.childrenAfterSort[0];\n      }\n    }\n    return rowNode.rowIndex;\n  }\n  getRowBounds(index) {\n    if (_missing(this.rowsToDisplay)) {\n      return null;\n    }\n    const rowNode = this.rowsToDisplay[index];\n    if (rowNode) {\n      return {\n        rowTop: rowNode.rowTop,\n        rowHeight: rowNode.rowHeight\n      };\n    }\n    return null;\n  }\n  onRowGroupOpened() {\n    const animate = _isAnimateRows(this.gos);\n    this.refreshModel({ step: \"map\" /* MAP */, keepRenderedRows: true, animate });\n  }\n  onFilterChanged(event) {\n    if (event.afterDataChange) {\n      return;\n    }\n    const animate = _isAnimateRows(this.gos);\n    const primaryOrQuickFilterChanged = event.columns.length === 0 || event.columns.some((col) => col.isPrimary());\n    const step = primaryOrQuickFilterChanged ? \"filter\" /* FILTER */ : \"filter_aggregates\" /* FILTER_AGGREGATES */;\n    this.refreshModel({ step, keepRenderedRows: true, animate });\n  }\n  onSortChanged() {\n    const animate = _isAnimateRows(this.gos);\n    this.refreshModel({\n      step: \"sort\" /* SORT */,\n      keepRenderedRows: true,\n      animate,\n      keepEditingRows: true\n    });\n  }\n  getType() {\n    return \"clientSide\";\n  }\n  onValueChanged() {\n    if (this.columnModel.isPivotActive()) {\n      this.refreshModel({ step: \"pivot\" /* PIVOT */ });\n    } else {\n      this.refreshModel({ step: \"aggregate\" /* AGGREGATE */ });\n    }\n  }\n  createChangePath(rowNodeTransactions) {\n    const noTransactions = _missingOrEmpty(rowNodeTransactions);\n    const changedPath = new ChangedPath(false, this.rootNode);\n    if (noTransactions) {\n      changedPath.setInactive();\n    }\n    return changedPath;\n  }\n  isSuppressModelUpdateAfterUpdateTransaction(params) {\n    if (!this.gos.get(\"suppressModelUpdateAfterUpdateTransaction\")) {\n      return false;\n    }\n    if (params.rowNodeTransactions == null) {\n      return false;\n    }\n    const transWithAddsOrDeletes = params.rowNodeTransactions.filter(\n      (tx) => tx.add != null && tx.add.length > 0 || tx.remove != null && tx.remove.length > 0\n    );\n    const transactionsContainUpdatesOnly = transWithAddsOrDeletes == null || transWithAddsOrDeletes.length == 0;\n    return transactionsContainUpdatesOnly;\n  }\n  buildRefreshModelParams(step) {\n    let paramsStep = \"group\" /* EVERYTHING */;\n    const stepsMapped = {\n      everything: \"group\" /* EVERYTHING */,\n      group: \"group\" /* EVERYTHING */,\n      filter: \"filter\" /* FILTER */,\n      map: \"map\" /* MAP */,\n      aggregate: \"aggregate\" /* AGGREGATE */,\n      filter_aggregates: \"filter_aggregates\" /* FILTER_AGGREGATES */,\n      sort: \"sort\" /* SORT */,\n      pivot: \"pivot\" /* PIVOT */,\n      nothing: \"nothing\" /* NOTHING */\n    };\n    if (_exists(step)) {\n      paramsStep = stepsMapped[step];\n    }\n    if (_missing(paramsStep)) {\n      _errorOnce(`invalid step ${step}, available steps are ${Object.keys(stepsMapped).join(\", \")}`);\n      return void 0;\n    }\n    const animate = !this.gos.get(\"suppressAnimationFrame\");\n    const modelParams = {\n      step: paramsStep,\n      keepRenderedRows: true,\n      keepEditingRows: true,\n      animate\n    };\n    return modelParams;\n  }\n  refreshModel(paramsOrStep) {\n    if (!this.hasStarted || this.isRefreshingModel || this.columnModel.isChangeEventsDispatching()) {\n      return;\n    }\n    const params = typeof paramsOrStep === \"object\" && \"step\" in paramsOrStep ? paramsOrStep : this.buildRefreshModelParams(paramsOrStep);\n    if (!params) {\n      return;\n    }\n    if (this.isSuppressModelUpdateAfterUpdateTransaction(params)) {\n      return;\n    }\n    const changedPath = this.createChangePath(params.rowNodeTransactions);\n    this.isRefreshingModel = true;\n    switch (params.step) {\n      case \"group\" /* EVERYTHING */:\n        this.doRowGrouping(\n          params.rowNodeTransactions,\n          changedPath,\n          !!params.rowNodesOrderChanged,\n          !!params.afterColumnsChanged\n        );\n      case \"filter\" /* FILTER */:\n        this.doFilter(changedPath);\n      case \"pivot\" /* PIVOT */:\n        this.doPivot(changedPath);\n      case \"aggregate\" /* AGGREGATE */:\n        this.doAggregate(changedPath);\n      case \"filter_aggregates\" /* FILTER_AGGREGATES */:\n        this.doFilterAggregates(changedPath);\n      case \"sort\" /* SORT */:\n        this.doSort(params.rowNodeTransactions, changedPath);\n      case \"map\" /* MAP */:\n        this.doRowsToDisplay();\n    }\n    const displayedNodesMapped = this.setRowTopAndRowIndex();\n    this.clearRowTopAndRowIndex(changedPath, displayedNodesMapped);\n    this.isRefreshingModel = false;\n    this.eventService.dispatchEvent({\n      type: \"modelUpdated\",\n      animate: params.animate,\n      keepRenderedRows: params.keepRenderedRows,\n      newData: params.newData,\n      newPage: false,\n      keepUndoRedoStack: params.keepUndoRedoStack\n    });\n  }\n  isEmpty() {\n    const rowsMissing = _missing(this.rootNode.allLeafChildren) || this.rootNode.allLeafChildren.length === 0;\n    return _missing(this.rootNode) || rowsMissing || !this.columnModel.isReady();\n  }\n  isRowsToRender() {\n    return _exists(this.rowsToDisplay) && this.rowsToDisplay.length > 0;\n  }\n  getNodesInRangeForSelection(firstInRange, lastInRange) {\n    let started = false;\n    let finished = false;\n    const result = [];\n    const groupsSelectChildren = _getGroupSelectsDescendants(this.gos);\n    this.forEachNodeAfterFilterAndSort((rowNode) => {\n      if (finished) {\n        return;\n      }\n      if (started) {\n        if (rowNode === lastInRange || rowNode === firstInRange) {\n          finished = true;\n          if (rowNode.group && groupsSelectChildren) {\n            result.push(...rowNode.allLeafChildren);\n            return;\n          }\n        }\n      }\n      if (!started) {\n        if (rowNode !== lastInRange && rowNode !== firstInRange) {\n          return;\n        }\n        started = true;\n      }\n      const includeThisNode = !rowNode.group || !groupsSelectChildren;\n      if (includeThisNode) {\n        result.push(rowNode);\n        return;\n      }\n    });\n    return result;\n  }\n  // eslint-disable-next-line\n  setDatasource(datasource) {\n    _errorOnce(\"should never call setDatasource on clientSideRowController\");\n  }\n  getTopLevelNodes() {\n    return this.rootNode ? this.rootNode.childrenAfterGroup : null;\n  }\n  getRootNode() {\n    return this.rootNode;\n  }\n  getRow(index) {\n    return this.rowsToDisplay[index];\n  }\n  isRowPresent(rowNode) {\n    return this.rowsToDisplay.indexOf(rowNode) >= 0;\n  }\n  getRowIndexAtPixel(pixelToMatch) {\n    if (this.isEmpty() || this.rowsToDisplay.length === 0) {\n      return -1;\n    }\n    let bottomPointer = 0;\n    let topPointer = this.rowsToDisplay.length - 1;\n    if (pixelToMatch <= 0) {\n      return 0;\n    }\n    const lastNode = _last(this.rowsToDisplay);\n    if (lastNode.rowTop <= pixelToMatch) {\n      return this.rowsToDisplay.length - 1;\n    }\n    let oldBottomPointer = -1;\n    let oldTopPointer = -1;\n    while (true) {\n      const midPointer = Math.floor((bottomPointer + topPointer) / 2);\n      const currentRowNode = this.rowsToDisplay[midPointer];\n      if (this.isRowInPixel(currentRowNode, pixelToMatch)) {\n        return midPointer;\n      }\n      if (currentRowNode.rowTop < pixelToMatch) {\n        bottomPointer = midPointer + 1;\n      } else if (currentRowNode.rowTop > pixelToMatch) {\n        topPointer = midPointer - 1;\n      }\n      const caughtInInfiniteLoop = oldBottomPointer === bottomPointer && oldTopPointer === topPointer;\n      if (caughtInInfiniteLoop) {\n        return midPointer;\n      }\n      oldBottomPointer = bottomPointer;\n      oldTopPointer = topPointer;\n    }\n  }\n  isRowInPixel(rowNode, pixelToMatch) {\n    const topPixel = rowNode.rowTop;\n    const bottomPixel = rowNode.rowTop + rowNode.rowHeight;\n    const pixelInRow = topPixel <= pixelToMatch && bottomPixel > pixelToMatch;\n    return pixelInRow;\n  }\n  forEachLeafNode(callback) {\n    if (this.rootNode.allLeafChildren) {\n      this.rootNode.allLeafChildren.forEach((rowNode, index) => callback(rowNode, index));\n    }\n  }\n  forEachNode(callback, includeFooterNodes = false) {\n    this.recursivelyWalkNodesAndCallback({\n      nodes: [...this.rootNode.childrenAfterGroup || []],\n      callback,\n      recursionType: 0 /* Normal */,\n      index: 0,\n      includeFooterNodes\n    });\n  }\n  forEachNodeAfterFilter(callback, includeFooterNodes = false) {\n    this.recursivelyWalkNodesAndCallback({\n      nodes: [...this.rootNode.childrenAfterAggFilter || []],\n      callback,\n      recursionType: 1 /* AfterFilter */,\n      index: 0,\n      includeFooterNodes\n    });\n  }\n  forEachNodeAfterFilterAndSort(callback, includeFooterNodes = false) {\n    this.recursivelyWalkNodesAndCallback({\n      nodes: [...this.rootNode.childrenAfterSort || []],\n      callback,\n      recursionType: 2 /* AfterFilterAndSort */,\n      index: 0,\n      includeFooterNodes\n    });\n  }\n  forEachPivotNode(callback, includeFooterNodes = false) {\n    this.recursivelyWalkNodesAndCallback({\n      nodes: [this.rootNode],\n      callback,\n      recursionType: 3 /* PivotNodes */,\n      index: 0,\n      includeFooterNodes\n    });\n  }\n  // iterates through each item in memory, and calls the callback function\n  // nodes - the rowNodes to traverse\n  // callback - the user provided callback\n  // recursion type - need this to know what child nodes to recurse, eg if looking at all nodes, or filtered notes etc\n  // index - works similar to the index in forEach in javascript's array function\n  recursivelyWalkNodesAndCallback(params) {\n    const { nodes, callback, recursionType, includeFooterNodes } = params;\n    let { index } = params;\n    const addFooters = (position) => {\n      const parentNode = nodes[0]?.parent;\n      if (!parentNode)\n        return;\n      const grandTotal = includeFooterNodes && _getGrandTotalRow(this.gos);\n      const isGroupIncludeFooter = _getGroupTotalRowCallback(this.gos);\n      const groupTotal = includeFooterNodes && isGroupIncludeFooter({ node: parentNode });\n      const isRootNode = parentNode === this.rootNode;\n      if (isRootNode) {\n        if (grandTotal === position) {\n          parentNode.createFooter();\n          callback(parentNode.sibling, index++);\n        }\n        return;\n      }\n      if (groupTotal === position) {\n        parentNode.createFooter();\n        callback(parentNode.sibling, index++);\n      }\n    };\n    addFooters(\"top\");\n    for (let i = 0; i < nodes.length; i++) {\n      const node = nodes[i];\n      callback(node, index++);\n      if (node.hasChildren() && !node.footer) {\n        let nodeChildren = null;\n        switch (recursionType) {\n          case 0 /* Normal */:\n            nodeChildren = node.childrenAfterGroup;\n            break;\n          case 1 /* AfterFilter */:\n            nodeChildren = node.childrenAfterAggFilter;\n            break;\n          case 2 /* AfterFilterAndSort */:\n            nodeChildren = node.childrenAfterSort;\n            break;\n          case 3 /* PivotNodes */:\n            nodeChildren = !node.leafGroup ? node.childrenAfterSort : null;\n            break;\n        }\n        if (nodeChildren) {\n          index = this.recursivelyWalkNodesAndCallback({\n            nodes: [...nodeChildren],\n            callback,\n            recursionType,\n            index,\n            includeFooterNodes\n          });\n        }\n      }\n    }\n    addFooters(\"bottom\");\n    return index;\n  }\n  // it's possible to recompute the aggregate without doing the other parts\n  // + api.refreshClientSideRowModel('aggregate')\n  doAggregate(changedPath) {\n    this.aggregationStage?.execute({ rowNode: this.rootNode, changedPath });\n  }\n  doFilterAggregates(changedPath) {\n    if (this.filterAggregatesStage) {\n      this.filterAggregatesStage.execute({ rowNode: this.rootNode, changedPath });\n    } else {\n      this.rootNode.childrenAfterAggFilter = this.rootNode.childrenAfterFilter;\n    }\n  }\n  // + gridApi.expandAll()\n  // + gridApi.collapseAll()\n  expandOrCollapseAll(expand) {\n    const usingTreeData = this.gos.get(\"treeData\");\n    const usingPivotMode = this.columnModel.isPivotActive();\n    const recursiveExpandOrCollapse = (rowNodes) => {\n      if (!rowNodes) {\n        return;\n      }\n      rowNodes.forEach((rowNode) => {\n        const actionRow = () => {\n          rowNode.expanded = expand;\n          recursiveExpandOrCollapse(rowNode.childrenAfterGroup);\n        };\n        if (usingTreeData) {\n          const hasChildren = _exists(rowNode.childrenAfterGroup);\n          if (hasChildren) {\n            actionRow();\n          }\n          return;\n        }\n        if (usingPivotMode) {\n          const notLeafGroup = !rowNode.leafGroup;\n          if (notLeafGroup) {\n            actionRow();\n          }\n          return;\n        }\n        const isRowGroup = rowNode.group;\n        if (isRowGroup) {\n          actionRow();\n        }\n      });\n    };\n    if (this.rootNode) {\n      recursiveExpandOrCollapse(this.rootNode.childrenAfterGroup);\n    }\n    this.refreshModel({ step: \"map\" /* MAP */ });\n    this.eventService.dispatchEvent({\n      type: \"expandOrCollapseAll\",\n      source: expand ? \"expandAll\" : \"collapseAll\"\n    });\n  }\n  doSort(rowNodeTransactions, changedPath) {\n    this.sortStage.execute({\n      rowNode: this.rootNode,\n      rowNodeTransactions,\n      changedPath\n    });\n  }\n  doRowGrouping(rowNodeTransactions, changedPath, rowNodesOrderChanged, afterColumnsChanged) {\n    if (this.groupStage) {\n      if (rowNodeTransactions) {\n        this.groupStage.execute({\n          rowNode: this.rootNode,\n          rowNodeTransactions,\n          rowNodesOrderChanged,\n          changedPath\n        });\n      } else {\n        this.groupStage.execute({\n          rowNode: this.rootNode,\n          changedPath,\n          afterColumnsChanged\n        });\n      }\n      if (_getGroupSelectsDescendants(this.gos)) {\n        const selectionChanged = this.selectionService.updateGroupsFromChildrenSelections(\n          \"rowGroupChanged\",\n          changedPath\n        );\n        if (selectionChanged) {\n          this.eventService.dispatchEvent({\n            type: \"selectionChanged\",\n            source: \"rowGroupChanged\"\n          });\n        }\n      }\n    } else {\n      const rootNode = this.rootNode;\n      const sibling = rootNode.sibling;\n      rootNode.childrenAfterGroup = rootNode.allLeafChildren;\n      if (sibling) {\n        sibling.childrenAfterGroup = rootNode.childrenAfterGroup;\n      }\n      this.rootNode.updateHasChildren();\n    }\n    if (this.nodeManager.isRowCountReady()) {\n      this.rowCountReady = true;\n      this.eventService.dispatchEventOnce({\n        type: \"rowCountReady\"\n      });\n    }\n  }\n  doFilter(changedPath) {\n    this.filterStage.execute({ rowNode: this.rootNode, changedPath });\n  }\n  doPivot(changedPath) {\n    this.pivotStage?.execute({ rowNode: this.rootNode, changedPath });\n  }\n  getNodeManager() {\n    return this.nodeManager;\n  }\n  getRowNode(id) {\n    const idIsGroup = typeof id == \"string\" && id.indexOf(RowNode.ID_PREFIX_ROW_GROUP) == 0;\n    if (idIsGroup) {\n      let res = void 0;\n      this.forEachNode((node) => {\n        if (node.id === id) {\n          res = node;\n        }\n      });\n      return res;\n    }\n    return this.nodeManager.getRowNode(id);\n  }\n  // rows: the rows to put into the model\n  setRowData(rowData) {\n    this.selectionService.reset(\"rowDataChanged\");\n    this.nodeManager.setRowData(rowData);\n    if (this.hasStarted) {\n      this.dispatchUpdateEventsAndRefresh();\n    }\n  }\n  dispatchUpdateEventsAndRefresh() {\n    this.eventService.dispatchEvent({\n      type: \"rowDataUpdated\"\n    });\n    this.refreshModel({\n      step: \"group\" /* EVERYTHING */,\n      newData: true\n    });\n  }\n  batchUpdateRowData(rowDataTransaction, callback) {\n    if (this.applyAsyncTransactionsTimeout == null) {\n      this.rowDataTransactionBatch = [];\n      const waitMillis = this.gos.get(\"asyncTransactionWaitMillis\");\n      this.applyAsyncTransactionsTimeout = window.setTimeout(() => {\n        if (this.isAlive()) {\n          this.executeBatchUpdateRowData();\n        }\n      }, waitMillis);\n    }\n    this.rowDataTransactionBatch.push({ rowDataTransaction, callback });\n  }\n  flushAsyncTransactions() {\n    if (this.applyAsyncTransactionsTimeout != null) {\n      clearTimeout(this.applyAsyncTransactionsTimeout);\n      this.executeBatchUpdateRowData();\n    }\n  }\n  executeBatchUpdateRowData() {\n    this.valueCache.onDataChanged();\n    const callbackFuncsBound = [];\n    const rowNodeTrans = [];\n    let orderChanged = false;\n    this.rowDataTransactionBatch?.forEach((tranItem) => {\n      const { rowNodeTransaction, rowsInserted } = this.nodeManager.updateRowData(tranItem.rowDataTransaction);\n      if (rowsInserted) {\n        orderChanged = true;\n      }\n      rowNodeTrans.push(rowNodeTransaction);\n      if (tranItem.callback) {\n        callbackFuncsBound.push(tranItem.callback.bind(null, rowNodeTransaction));\n      }\n    });\n    this.commonUpdateRowData(rowNodeTrans, orderChanged);\n    if (callbackFuncsBound.length > 0) {\n      window.setTimeout(() => {\n        callbackFuncsBound.forEach((func) => func());\n      }, 0);\n    }\n    if (rowNodeTrans.length > 0) {\n      this.eventService.dispatchEvent({\n        type: \"asyncTransactionsFlushed\",\n        results: rowNodeTrans\n      });\n    }\n    this.rowDataTransactionBatch = null;\n    this.applyAsyncTransactionsTimeout = void 0;\n  }\n  /**\n   * Used to apply transaction changes.\n   * Called by gridApi & rowDragFeature\n   */\n  updateRowData(rowDataTran) {\n    this.valueCache.onDataChanged();\n    const { rowNodeTransaction, rowsInserted } = this.nodeManager.updateRowData(rowDataTran);\n    this.commonUpdateRowData([rowNodeTransaction], rowsInserted);\n    return rowNodeTransaction;\n  }\n  /**\n   * Used to apply generated transaction\n   */\n  afterImmutableDataChange(rowNodeTransaction, rowNodesOrderChanged) {\n    this.commonUpdateRowData([rowNodeTransaction], rowNodesOrderChanged);\n  }\n  /**\n   * Common to:\n   * - executeBatchUpdateRowData (batch transactions)\n   * - updateRowData (single transaction)\n   * - afterImmutableDataChange (generated transaction)\n   *\n   * @param rowNodeTrans - the transactions to apply\n   * @param orderChanged - whether the order of the rows has changed, either via generated transaction or user provided addIndex\n   */\n  commonUpdateRowData(rowNodeTransactions, rowNodesOrderChanged) {\n    if (!this.hasStarted) {\n      return;\n    }\n    const animate = !this.gos.get(\"suppressAnimationFrame\");\n    this.eventService.dispatchEvent({\n      type: \"rowDataUpdated\"\n    });\n    this.refreshModel({\n      step: \"group\" /* EVERYTHING */,\n      rowNodeTransactions,\n      rowNodesOrderChanged,\n      keepRenderedRows: true,\n      keepEditingRows: true,\n      animate\n    });\n  }\n  doRowsToDisplay() {\n    this.rowsToDisplay = this.flattenStage.execute({ rowNode: this.rootNode });\n  }\n  onRowHeightChanged() {\n    this.refreshModel({\n      step: \"map\" /* MAP */,\n      keepRenderedRows: true,\n      keepEditingRows: true,\n      keepUndoRedoStack: true\n    });\n  }\n  /** This method is debounced. It is used for row auto-height. If we don't debounce,\n   * then the Row Models will end up recalculating each row position\n   * for each row height change and result in the Row Renderer laying out rows.\n   * This is particularly bad if using print layout, and showing eg 1,000 rows,\n   * each row will change it's height, causing Row Model to update 1,000 times.\n   */\n  onRowHeightChangedDebounced() {\n    this.onRowHeightChanged_debounced();\n  }\n  resetRowHeights() {\n    const atLeastOne = this.resetRowHeightsForAllRowNodes();\n    this.rootNode.setRowHeight(this.rootNode.rowHeight, true);\n    if (this.rootNode.sibling) {\n      this.rootNode.sibling.setRowHeight(this.rootNode.sibling.rowHeight, true);\n    }\n    if (atLeastOne) {\n      this.onRowHeightChanged();\n    }\n  }\n  resetRowHeightsForAllRowNodes() {\n    let atLeastOne = false;\n    this.forEachNode((rowNode) => {\n      rowNode.setRowHeight(rowNode.rowHeight, true);\n      const detailNode = rowNode.detailNode;\n      if (detailNode) {\n        detailNode.setRowHeight(detailNode.rowHeight, true);\n      }\n      if (rowNode.sibling) {\n        rowNode.sibling.setRowHeight(rowNode.sibling.rowHeight, true);\n      }\n      atLeastOne = true;\n    });\n    return atLeastOne;\n  }\n  onGridStylesChanges(e) {\n    if (e.rowHeightChanged) {\n      if (this.columnModel.isAutoRowHeightActive()) {\n        return;\n      }\n      this.resetRowHeights();\n    }\n  }\n  onGridReady() {\n    if (this.hasStarted) {\n      return;\n    }\n    this.setInitialData();\n  }\n  isRowDataLoaded() {\n    return this.rowCountReady;\n  }\n  destroy() {\n    super.destroy();\n    this.clearHighlightedRow();\n  }\n};\n\n// community-modules/client-side-row-model/src/clientSideRowModel/clientSideRowModelApi.ts\nfunction onGroupExpandedOrCollapsed(beans) {\n  beans.expansionService.onGroupExpandedOrCollapsed();\n}\nfunction refreshClientSideRowModel(beans, step) {\n  beans.rowModelHelperService?.getClientSideRowModel()?.refreshModel(step);\n}\nfunction isRowDataEmpty(beans) {\n  return beans.rowModelHelperService?.getClientSideRowModel()?.isEmpty() ?? true;\n}\nfunction forEachLeafNode(beans, callback) {\n  beans.rowModelHelperService?.getClientSideRowModel()?.forEachLeafNode(callback);\n}\nfunction forEachNodeAfterFilter(beans, callback) {\n  beans.rowModelHelperService?.getClientSideRowModel()?.forEachNodeAfterFilter(callback);\n}\nfunction forEachNodeAfterFilterAndSort(beans, callback) {\n  beans.rowModelHelperService?.getClientSideRowModel()?.forEachNodeAfterFilterAndSort(callback);\n}\nfunction resetRowHeights(beans) {\n  if (beans.columnModel.isAutoRowHeightActive()) {\n    _warnOnce(\"calling gridApi.resetRowHeights() makes no sense when using Auto Row Height.\");\n    return;\n  }\n  beans.rowModelHelperService?.getClientSideRowModel()?.resetRowHeights();\n}\nfunction applyTransaction(beans, rowDataTransaction) {\n  return beans.frameworkOverrides.wrapIncoming(\n    () => beans.rowModelHelperService?.getClientSideRowModel()?.updateRowData(rowDataTransaction)\n  );\n}\nfunction applyTransactionAsync(beans, rowDataTransaction, callback) {\n  beans.frameworkOverrides.wrapIncoming(\n    () => beans.rowModelHelperService?.getClientSideRowModel()?.batchUpdateRowData(rowDataTransaction, callback)\n  );\n}\nfunction flushAsyncTransactions(beans) {\n  beans.frameworkOverrides.wrapIncoming(\n    () => beans.rowModelHelperService?.getClientSideRowModel()?.flushAsyncTransactions()\n  );\n}\nfunction getBestCostNodeSelection(beans) {\n  return beans.selectionService.getBestCostNodeSelection();\n}\n\n// community-modules/client-side-row-model/src/clientSideRowModel/filterStage.ts\nvar FilterStage = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"filterStage\";\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n  }\n  execute(params) {\n    const { changedPath } = params;\n    this.filter(changedPath);\n  }\n  filter(changedPath) {\n    const filterActive = !!this.filterManager?.isChildFilterPresent();\n    this.filterNodes(filterActive, changedPath);\n  }\n  filterNodes(filterActive, changedPath) {\n    const filterCallback = (rowNode, includeChildNodes) => {\n      if (rowNode.hasChildren()) {\n        if (filterActive && !includeChildNodes) {\n          rowNode.childrenAfterFilter = rowNode.childrenAfterGroup.filter((childNode) => {\n            const passBecauseChildren = childNode.childrenAfterFilter && childNode.childrenAfterFilter.length > 0;\n            const passBecauseDataPasses = childNode.data && this.filterManager.doesRowPassFilter({ rowNode: childNode });\n            return passBecauseChildren || passBecauseDataPasses;\n          });\n        } else {\n          rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;\n        }\n      } else {\n        rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;\n      }\n      if (rowNode.sibling) {\n        rowNode.sibling.childrenAfterFilter = rowNode.childrenAfterFilter;\n      }\n    };\n    if (this.doingTreeDataFiltering()) {\n      const treeDataDepthFirstFilter = (rowNode, alreadyFoundInParent) => {\n        if (rowNode.childrenAfterGroup) {\n          for (let i = 0; i < rowNode.childrenAfterGroup.length; i++) {\n            const childNode = rowNode.childrenAfterGroup[i];\n            const foundInParent = alreadyFoundInParent || this.filterManager.doesRowPassFilter({ rowNode: childNode });\n            if (childNode.childrenAfterGroup) {\n              treeDataDepthFirstFilter(rowNode.childrenAfterGroup[i], foundInParent);\n            } else {\n              filterCallback(childNode, foundInParent);\n            }\n          }\n        }\n        filterCallback(rowNode, alreadyFoundInParent);\n      };\n      const treeDataFilterCallback = (rowNode) => treeDataDepthFirstFilter(rowNode, false);\n      changedPath.executeFromRootNode(treeDataFilterCallback);\n    } else {\n      const defaultFilterCallback = (rowNode) => filterCallback(rowNode, false);\n      changedPath.forEachChangedNodeDepthFirst(defaultFilterCallback, true);\n    }\n  }\n  doingTreeDataFiltering() {\n    return this.gos.get(\"treeData\") && !this.gos.get(\"excludeChildrenWhenTreeDataFiltering\");\n  }\n};\n\n// community-modules/client-side-row-model/src/clientSideRowModel/flattenStage.ts\nvar FlattenStage = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"flattenStage\";\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n    this.columnModel = beans.columnModel;\n  }\n  execute(params) {\n    const rootNode = params.rowNode;\n    const result = [];\n    const skipLeafNodes = this.columnModel.isPivotMode();\n    const showRootNode = skipLeafNodes && rootNode.leafGroup;\n    const topList = showRootNode ? [rootNode] : rootNode.childrenAfterSort;\n    const details = this.getFlattenDetails();\n    this.recursivelyAddToRowsToDisplay(details, topList, result, skipLeafNodes, 0);\n    const atLeastOneRowPresent = result.length > 0;\n    const includeGrandTotalRow = !showRootNode && // don't show total footer when showRootNode is true (i.e. in pivot mode and no groups)\n    atLeastOneRowPresent && details.grandTotalRow;\n    if (includeGrandTotalRow) {\n      rootNode.createFooter();\n      const addToTop = details.grandTotalRow === \"top\";\n      this.addRowNodeToRowsToDisplay(details, rootNode.sibling, result, 0, addToTop);\n    }\n    return result;\n  }\n  getFlattenDetails() {\n    const groupRemoveSingleChildren = this.gos.get(\"groupRemoveSingleChildren\");\n    const groupRemoveLowestSingleChildren = !groupRemoveSingleChildren && this.gos.get(\"groupRemoveLowestSingleChildren\");\n    return {\n      groupRemoveLowestSingleChildren,\n      groupRemoveSingleChildren,\n      isGroupMultiAutoColumn: _isGroupMultiAutoColumn(this.gos),\n      hideOpenParents: this.gos.get(\"groupHideOpenParents\"),\n      grandTotalRow: _getGrandTotalRow(this.gos),\n      groupTotalRow: _getGroupTotalRowCallback(this.gos)\n    };\n  }\n  recursivelyAddToRowsToDisplay(details, rowsToFlatten, result, skipLeafNodes, uiLevel) {\n    if (_missingOrEmpty(rowsToFlatten)) {\n      return;\n    }\n    for (let i = 0; i < rowsToFlatten.length; i++) {\n      const rowNode = rowsToFlatten[i];\n      const isParent = rowNode.hasChildren();\n      const isSkippedLeafNode = skipLeafNodes && !isParent;\n      const isRemovedSingleChildrenGroup = details.groupRemoveSingleChildren && isParent && rowNode.childrenAfterGroup.length === 1;\n      const isRemovedLowestSingleChildrenGroup = details.groupRemoveLowestSingleChildren && isParent && rowNode.leafGroup && rowNode.childrenAfterGroup.length === 1;\n      const neverAllowToExpand = skipLeafNodes && rowNode.leafGroup;\n      const isHiddenOpenParent = details.hideOpenParents && rowNode.expanded && !rowNode.master && !neverAllowToExpand;\n      const thisRowShouldBeRendered = !isSkippedLeafNode && !isHiddenOpenParent && !isRemovedSingleChildrenGroup && !isRemovedLowestSingleChildrenGroup;\n      if (thisRowShouldBeRendered) {\n        this.addRowNodeToRowsToDisplay(details, rowNode, result, uiLevel);\n      }\n      if (skipLeafNodes && rowNode.leafGroup) {\n        continue;\n      }\n      if (isParent) {\n        const excludedParent = isRemovedSingleChildrenGroup || isRemovedLowestSingleChildrenGroup;\n        if (rowNode.expanded || excludedParent) {\n          const doesRowShowFooter = details.groupTotalRow({ node: rowNode });\n          if (!doesRowShowFooter) {\n            rowNode.destroyFooter();\n          }\n          const uiLevelForChildren = excludedParent ? uiLevel : uiLevel + 1;\n          if (doesRowShowFooter === \"top\") {\n            rowNode.createFooter();\n            this.addRowNodeToRowsToDisplay(details, rowNode.sibling, result, uiLevelForChildren);\n          }\n          this.recursivelyAddToRowsToDisplay(\n            details,\n            rowNode.childrenAfterSort,\n            result,\n            skipLeafNodes,\n            uiLevelForChildren\n          );\n          if (doesRowShowFooter === \"bottom\") {\n            rowNode.createFooter();\n            this.addRowNodeToRowsToDisplay(details, rowNode.sibling, result, uiLevelForChildren);\n          }\n        }\n      } else if (rowNode.master && rowNode.expanded) {\n        const detailNode = this.createDetailNode(rowNode);\n        this.addRowNodeToRowsToDisplay(details, detailNode, result, uiLevel);\n      }\n    }\n  }\n  // duplicated method, it's also in floatingRowModel\n  addRowNodeToRowsToDisplay(details, rowNode, result, uiLevel, addToTop) {\n    if (addToTop) {\n      result.unshift(rowNode);\n    } else {\n      result.push(rowNode);\n    }\n    rowNode.setUiLevel(details.isGroupMultiAutoColumn ? 0 : uiLevel);\n  }\n  createDetailNode(masterNode) {\n    if (_exists(masterNode.detailNode)) {\n      return masterNode.detailNode;\n    }\n    const detailNode = new RowNode(this.beans);\n    detailNode.detail = true;\n    detailNode.selectable = false;\n    detailNode.parent = masterNode;\n    if (_exists(masterNode.id)) {\n      detailNode.id = \"detail_\" + masterNode.id;\n    }\n    detailNode.data = masterNode.data;\n    detailNode.level = masterNode.level + 1;\n    masterNode.detailNode = detailNode;\n    return detailNode;\n  }\n};\n\n// community-modules/client-side-row-model/src/clientSideRowModel/immutableService.ts\nvar ImmutableService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"immutableService\";\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.selectionService = beans.selectionService;\n  }\n  postConstruct() {\n    if (_isClientSideRowModel(this.gos)) {\n      this.clientSideRowModel = this.rowModel;\n      this.addManagedPropertyListener(\"rowData\", () => this.onRowDataUpdated());\n    }\n  }\n  isActive() {\n    const getRowIdProvided = this.gos.exists(\"getRowId\");\n    const resetRowDataOnUpdate = this.gos.get(\"resetRowDataOnUpdate\");\n    if (resetRowDataOnUpdate) {\n      return false;\n    }\n    return getRowIdProvided;\n  }\n  setRowData(rowData) {\n    const rowDataTransaction = this.createTransactionForRowData(rowData);\n    if (!rowDataTransaction) {\n      return;\n    }\n    const nodeManager = this.clientSideRowModel.getNodeManager();\n    const { rowNodeTransaction, rowsInserted } = nodeManager.updateRowData(rowDataTransaction);\n    let orderChanged = false;\n    const suppressSortOrder = this.gos.get(\"suppressMaintainUnsortedOrder\");\n    if (!suppressSortOrder) {\n      orderChanged = nodeManager.updateRowOrderFromRowData(rowData);\n    }\n    this.clientSideRowModel.afterImmutableDataChange(rowNodeTransaction, orderChanged || rowsInserted);\n  }\n  /** Converts the setRowData() command to a transaction */\n  createTransactionForRowData(rowData) {\n    if (!_isClientSideRowModel(this.gos)) {\n      _errorOnce(\"ImmutableService only works with ClientSideRowModel\");\n      return null;\n    }\n    const getRowIdFunc = _getRowIdCallback(this.gos);\n    if (getRowIdFunc == null) {\n      _errorOnce(\"ImmutableService requires getRowId() callback to be implemented, your row data needs IDs!\");\n      return null;\n    }\n    const existingNodesMap = this.clientSideRowModel.getNodeManager().getCopyOfNodesMap();\n    const remove = [];\n    const update = [];\n    const add = [];\n    if (_exists(rowData)) {\n      rowData.forEach((data) => {\n        const id = getRowIdFunc({ data, level: 0 });\n        const existingNode = existingNodesMap[id];\n        if (existingNode) {\n          const dataHasChanged = existingNode.data !== data;\n          if (dataHasChanged) {\n            update.push(data);\n          }\n          existingNodesMap[id] = void 0;\n        } else {\n          add.push(data);\n        }\n      });\n    }\n    _iterateObject(existingNodesMap, (id, rowNode) => {\n      if (rowNode) {\n        remove.push(rowNode.data);\n      }\n    });\n    return { remove, update, add };\n  }\n  onRowDataUpdated() {\n    const rowData = this.gos.get(\"rowData\");\n    if (!rowData) {\n      return;\n    }\n    if (this.isActive()) {\n      this.setRowData(rowData);\n    } else {\n      this.selectionService.reset(\"rowDataChanged\");\n      this.clientSideRowModel.setRowData(rowData);\n    }\n  }\n};\n\n// community-modules/client-side-row-model/src/clientSideRowModel/sortService.ts\nvar SortService = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"sortService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n    this.rowNodeSorter = beans.rowNodeSorter;\n    this.showRowGroupColsService = beans.showRowGroupColsService;\n  }\n  sort(sortOptions, sortActive, useDeltaSort, rowNodeTransactions, changedPath, sortContainsGroupColumns) {\n    const groupMaintainOrder = this.gos.get(\"groupMaintainOrder\");\n    const groupColumnsPresent = this.columnModel.getCols().some((c) => c.isRowGroupActive());\n    let allDirtyNodes = {};\n    if (useDeltaSort && rowNodeTransactions) {\n      allDirtyNodes = this.calculateDirtyNodes(rowNodeTransactions);\n    }\n    const isPivotMode = this.columnModel.isPivotMode();\n    const postSortFunc = this.gos.getCallback(\"postSortRows\");\n    const callback = (rowNode) => {\n      this.pullDownGroupDataForHideOpenParents(rowNode.childrenAfterAggFilter, true);\n      const skipSortingPivotLeafs = isPivotMode && rowNode.leafGroup;\n      const skipSortingGroups = groupMaintainOrder && groupColumnsPresent && !rowNode.leafGroup && !sortContainsGroupColumns;\n      if (skipSortingGroups) {\n        const nextGroup = this.funcColsService.getRowGroupColumns()?.[rowNode.level + 1];\n        const wasSortExplicitlyRemoved = nextGroup?.getSort() === null;\n        const childrenToBeSorted = rowNode.childrenAfterAggFilter.slice(0);\n        if (rowNode.childrenAfterSort && !wasSortExplicitlyRemoved) {\n          const indexedOrders = {};\n          rowNode.childrenAfterSort.forEach((node, idx) => {\n            indexedOrders[node.id] = idx;\n          });\n          childrenToBeSorted.sort(\n            (row1, row2) => (indexedOrders[row1.id] ?? 0) - (indexedOrders[row2.id] ?? 0)\n          );\n        }\n        rowNode.childrenAfterSort = childrenToBeSorted;\n      } else if (!sortActive || skipSortingPivotLeafs) {\n        rowNode.childrenAfterSort = rowNode.childrenAfterAggFilter.slice(0);\n      } else if (useDeltaSort) {\n        rowNode.childrenAfterSort = this.doDeltaSort(rowNode, allDirtyNodes, changedPath, sortOptions);\n      } else {\n        rowNode.childrenAfterSort = this.rowNodeSorter.doFullSort(rowNode.childrenAfterAggFilter, sortOptions);\n      }\n      if (rowNode.sibling) {\n        rowNode.sibling.childrenAfterSort = rowNode.childrenAfterSort;\n      }\n      this.updateChildIndexes(rowNode);\n      if (postSortFunc) {\n        const params = { nodes: rowNode.childrenAfterSort };\n        postSortFunc(params);\n      }\n    };\n    if (changedPath) {\n      changedPath.forEachChangedNodeDepthFirst(callback);\n    }\n    this.updateGroupDataForHideOpenParents(changedPath);\n  }\n  calculateDirtyNodes(rowNodeTransactions) {\n    const dirtyNodes = {};\n    const addNodesFunc = (rowNodes) => {\n      if (rowNodes) {\n        rowNodes.forEach((rowNode) => dirtyNodes[rowNode.id] = true);\n      }\n    };\n    if (rowNodeTransactions) {\n      rowNodeTransactions.forEach((tran) => {\n        addNodesFunc(tran.add);\n        addNodesFunc(tran.update);\n        addNodesFunc(tran.remove);\n      });\n    }\n    return dirtyNodes;\n  }\n  doDeltaSort(rowNode, allTouchedNodes, changedPath, sortOptions) {\n    const unsortedRows = rowNode.childrenAfterAggFilter;\n    const oldSortedRows = rowNode.childrenAfterSort;\n    if (!oldSortedRows) {\n      return this.rowNodeSorter.doFullSort(unsortedRows, sortOptions);\n    }\n    const untouchedRowsMap = {};\n    const touchedRows = [];\n    unsortedRows.forEach((row) => {\n      if (allTouchedNodes[row.id] || !changedPath.canSkip(row)) {\n        touchedRows.push(row);\n      } else {\n        untouchedRowsMap[row.id] = true;\n      }\n    });\n    const sortedUntouchedRows = oldSortedRows.filter((child) => untouchedRowsMap[child.id]);\n    const mapNodeToSortedNode = (rowNode2, pos) => ({\n      currentPos: pos,\n      rowNode: rowNode2\n    });\n    const sortedChangedRows = touchedRows.map(mapNodeToSortedNode).sort((a, b) => this.rowNodeSorter.compareRowNodes(sortOptions, a, b));\n    return this.mergeSortedArrays(sortOptions, sortedChangedRows, sortedUntouchedRows.map(mapNodeToSortedNode)).map(\n      ({ rowNode: rowNode2 }) => rowNode2\n    );\n  }\n  // Merge two sorted arrays into each other\n  mergeSortedArrays(sortOptions, arr1, arr2) {\n    const res = [];\n    let i = 0;\n    let j = 0;\n    while (i < arr1.length && j < arr2.length) {\n      const compareResult = this.rowNodeSorter.compareRowNodes(sortOptions, arr1[i], arr2[j]);\n      if (compareResult < 0) {\n        res.push(arr1[i++]);\n      } else {\n        res.push(arr2[j++]);\n      }\n    }\n    while (i < arr1.length) {\n      res.push(arr1[i++]);\n    }\n    while (j < arr2.length) {\n      res.push(arr2[j++]);\n    }\n    return res;\n  }\n  updateChildIndexes(rowNode) {\n    if (_missing(rowNode.childrenAfterSort)) {\n      return;\n    }\n    const listToSort = rowNode.childrenAfterSort;\n    for (let i = 0; i < listToSort.length; i++) {\n      const child = listToSort[i];\n      const firstChild = i === 0;\n      const lastChild = i === rowNode.childrenAfterSort.length - 1;\n      child.setFirstChild(firstChild);\n      child.setLastChild(lastChild);\n      child.setChildIndex(i);\n    }\n  }\n  updateGroupDataForHideOpenParents(changedPath) {\n    if (!this.gos.get(\"groupHideOpenParents\")) {\n      return;\n    }\n    if (this.gos.get(\"treeData\")) {\n      _warnOnce(\n        `The property hideOpenParents dose not work with Tree Data. This is because Tree Data has values at the group level, it doesn't make sense to hide them.`\n      );\n      return false;\n    }\n    const callback = (rowNode) => {\n      this.pullDownGroupDataForHideOpenParents(rowNode.childrenAfterSort, false);\n      rowNode.childrenAfterSort.forEach((child) => {\n        if (child.hasChildren()) {\n          callback(child);\n        }\n      });\n    };\n    if (changedPath) {\n      changedPath.executeFromRootNode((rowNode) => callback(rowNode));\n    }\n  }\n  pullDownGroupDataForHideOpenParents(rowNodes, clearOperation) {\n    if (!this.gos.get(\"groupHideOpenParents\") || _missing(rowNodes)) {\n      return;\n    }\n    rowNodes.forEach((childRowNode) => {\n      const groupDisplayCols = this.showRowGroupColsService?.getShowRowGroupCols() ?? [];\n      groupDisplayCols.forEach((groupDisplayCol) => {\n        const showRowGroup = groupDisplayCol.getColDef().showRowGroup;\n        if (typeof showRowGroup !== \"string\") {\n          _errorOnce(\n            \"groupHideOpenParents only works when specifying specific columns for colDef.showRowGroup\"\n          );\n          return;\n        }\n        const displayingGroupKey = showRowGroup;\n        const rowGroupColumn = this.columnModel.getColDefCol(displayingGroupKey);\n        const thisRowNodeMatches = rowGroupColumn === childRowNode.rowGroupColumn;\n        if (thisRowNodeMatches) {\n          return;\n        }\n        if (clearOperation) {\n          childRowNode.setGroupValue(groupDisplayCol.getId(), void 0);\n        } else {\n          const parentToStealFrom = this.getFirstChildOfFirstChild(childRowNode, rowGroupColumn);\n          if (parentToStealFrom) {\n            childRowNode.setGroupValue(groupDisplayCol.getId(), parentToStealFrom.key);\n          }\n        }\n      });\n    });\n  }\n  getFirstChildOfFirstChild(node, rowGroupColumn) {\n    let currentRowNode = node;\n    while (currentRowNode) {\n      const parentRowNode = currentRowNode.parent;\n      if (parentRowNode && currentRowNode.firstChild) {\n        if (parentRowNode.rowGroupColumn === rowGroupColumn) {\n          return parentRowNode;\n        }\n      } else {\n        return null;\n      }\n      currentRowNode = parentRowNode;\n    }\n    return null;\n  }\n};\n\n// community-modules/client-side-row-model/src/clientSideRowModel/sortStage.ts\nvar SortStage = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"sortStage\";\n  }\n  wireBeans(beans) {\n    this.sortService = beans.sortService;\n    this.sortController = beans.sortController;\n  }\n  execute(params) {\n    const sortOptions = this.sortController.getSortOptions();\n    const sortActive = _exists(sortOptions) && sortOptions.length > 0;\n    const deltaSort = sortActive && _exists(params.rowNodeTransactions) && // in time we can remove this check, so that delta sort is always\n    // on if transactions are present. it's off for now so that we can\n    // selectively turn it on and test it with some select users before\n    // rolling out to everyone.\n    this.gos.get(\"deltaSort\");\n    const sortContainsGroupColumns = sortOptions.some((opt) => {\n      const isSortingCoupled = _isColumnsSortingCoupledToGroup(this.gos);\n      if (isSortingCoupled) {\n        return opt.column.isPrimary() && opt.column.isRowGroupActive();\n      }\n      return !!opt.column.getColDef().showRowGroup;\n    });\n    this.sortService.sort(\n      sortOptions,\n      sortActive,\n      deltaSort,\n      params.rowNodeTransactions,\n      params.changedPath,\n      sortContainsGroupColumns\n    );\n  }\n};\n\n// community-modules/client-side-row-model/src/version.ts\nvar VERSION2 = \"32.3.9\";\n\n// community-modules/client-side-row-model/src/clientSideRowModelModule.ts\nvar ClientSideRowModelCoreModule = _defineModule({\n  version: VERSION2,\n  moduleName: `${\"@ag-grid-community/client-side-row-model\" /* ClientSideRowModelModule */}-core`,\n  rowModel: \"clientSide\",\n  beans: [ClientSideRowModel, FilterStage, SortStage, FlattenStage, SortService, ImmutableService]\n});\nvar ClientSideRowModelApiModule = _defineModule({\n  version: VERSION2,\n  moduleName: `${\"@ag-grid-community/client-side-row-model\" /* ClientSideRowModelModule */}-api`,\n  beans: [RowModelHelperService],\n  apiFunctions: {\n    onGroupExpandedOrCollapsed,\n    refreshClientSideRowModel,\n    isRowDataEmpty,\n    forEachLeafNode,\n    forEachNodeAfterFilter,\n    forEachNodeAfterFilterAndSort,\n    resetRowHeights,\n    applyTransaction,\n    applyTransactionAsync,\n    flushAsyncTransactions,\n    getBestCostNodeSelection\n  },\n  dependantModules: [ClientSideRowModelCoreModule, CsrmSsrmSharedApiModule]\n});\nvar ClientSideRowModelModule = _defineModule({\n  version: VERSION2,\n  moduleName: \"@ag-grid-community/client-side-row-model\" /* ClientSideRowModelModule */,\n  dependantModules: [ClientSideRowModelCoreModule, ClientSideRowModelApiModule]\n});\n\n// community-modules/csv-export/dist/package/main.esm.mjs\nvar BaseCreator = class extends BeanStub {\n  setBeans(beans) {\n    this.beans = beans;\n  }\n  getFileName(fileName) {\n    const extension = this.getDefaultFileExtension();\n    if (fileName == null || !fileName.length) {\n      fileName = this.getDefaultFileName();\n    }\n    return fileName.indexOf(\".\") === -1 ? `${fileName}.${extension}` : fileName;\n  }\n  getData(params) {\n    const serializingSession = this.createSerializingSession(params);\n    return this.beans.gridSerializer.serialize(serializingSession, params);\n  }\n  getDefaultFileName() {\n    return `export.${this.getDefaultFileExtension()}`;\n  }\n};\nvar BaseGridSerializingSession = class {\n  constructor(config) {\n    this.groupColumns = [];\n    const {\n      columnModel,\n      funcColsService,\n      columnNameService,\n      valueService,\n      gos,\n      processCellCallback,\n      processHeaderCallback,\n      processGroupHeaderCallback,\n      processRowGroupCallback\n    } = config;\n    this.columnModel = columnModel;\n    this.funcColsService = funcColsService;\n    this.columnNameService = columnNameService;\n    this.valueService = valueService;\n    this.gos = gos;\n    this.processCellCallback = processCellCallback;\n    this.processHeaderCallback = processHeaderCallback;\n    this.processGroupHeaderCallback = processGroupHeaderCallback;\n    this.processRowGroupCallback = processRowGroupCallback;\n  }\n  prepare(columnsToExport) {\n    this.groupColumns = columnsToExport.filter((col) => !!col.getColDef().showRowGroup);\n  }\n  extractHeaderValue(column) {\n    const value = this.getHeaderName(this.processHeaderCallback, column);\n    return value ?? \"\";\n  }\n  extractRowCellValue(column, index, accumulatedRowIndex, type, node) {\n    const hideOpenParents = this.gos.get(\"groupHideOpenParents\");\n    const value = (!hideOpenParents || node.footer) && this.shouldRenderGroupSummaryCell(node, column, index) ? this.createValueForGroupNode(column, node) : this.valueService.getValue(column, node);\n    const processedValue = this.processCell({\n      accumulatedRowIndex,\n      rowNode: node,\n      column,\n      value,\n      processCellCallback: this.processCellCallback,\n      type\n    });\n    return processedValue;\n  }\n  shouldRenderGroupSummaryCell(node, column, currentColumnIndex) {\n    const isGroupNode = node && node.group;\n    if (!isGroupNode) {\n      return false;\n    }\n    const currentColumnGroupIndex = this.groupColumns.indexOf(column);\n    if (currentColumnGroupIndex !== -1) {\n      const groupDataKeyForColumn = node.groupData?.[column.getId()];\n      const suppressGroupMaintainValueType = this.gos.get(\"suppressGroupMaintainValueType\");\n      if (suppressGroupMaintainValueType && groupDataKeyForColumn != null || !suppressGroupMaintainValueType && groupDataKeyForColumn !== void 0) {\n        return true;\n      }\n      if (_isServerSideRowModel(this.gos) && node.group) {\n        return true;\n      }\n      if (node.footer && node.level === -1) {\n        const colDef = column.getColDef();\n        const isFullWidth = colDef == null || colDef.showRowGroup === true;\n        return isFullWidth || colDef.showRowGroup === this.funcColsService.getRowGroupColumns()[0].getId();\n      }\n    }\n    const isGroupUseEntireRow = _isGroupUseEntireRow(this.gos, this.columnModel.isPivotMode());\n    return currentColumnIndex === 0 && isGroupUseEntireRow;\n  }\n  getHeaderName(callback, column) {\n    if (callback) {\n      return callback(this.gos.addGridCommonParams({ column }));\n    }\n    return this.columnNameService.getDisplayNameForColumn(column, \"csv\", true);\n  }\n  createValueForGroupNode(column, node) {\n    if (this.processRowGroupCallback) {\n      return this.processRowGroupCallback(this.gos.addGridCommonParams({ column, node }));\n    }\n    const isTreeData = this.gos.get(\"treeData\");\n    const isSuppressGroupMaintainValueType = this.gos.get(\"suppressGroupMaintainValueType\");\n    const getValueFromNode = (node2) => {\n      if (isTreeData || isSuppressGroupMaintainValueType) {\n        return node2.key;\n      }\n      const value = node2.groupData?.[column.getId()];\n      if (!value || !node2.rowGroupColumn || node2.rowGroupColumn.getColDef().useValueFormatterForExport === false) {\n        return value;\n      }\n      return this.valueService.formatValue(node2.rowGroupColumn, node2, value) ?? value;\n    };\n    const isFooter = node.footer;\n    const keys = [getValueFromNode(node)];\n    if (!_isGroupMultiAutoColumn(this.gos)) {\n      while (node.parent) {\n        node = node.parent;\n        keys.push(getValueFromNode(node));\n      }\n    }\n    const groupValue = keys.reverse().join(\" -> \");\n    return isFooter ? `Total ${groupValue}` : groupValue;\n  }\n  processCell(params) {\n    const { accumulatedRowIndex, rowNode, column, value, processCellCallback, type } = params;\n    if (processCellCallback) {\n      return {\n        value: processCellCallback(\n          this.gos.addGridCommonParams({\n            accumulatedRowIndex,\n            column,\n            node: rowNode,\n            value,\n            type,\n            parseValue: (valueToParse) => this.valueService.parseValue(\n              column,\n              rowNode,\n              valueToParse,\n              this.valueService.getValue(column, rowNode)\n            ),\n            formatValue: (valueToFormat) => this.valueService.formatValue(column, rowNode, valueToFormat) ?? valueToFormat\n          })\n        ) ?? \"\"\n      };\n    }\n    if (column.getColDef().useValueFormatterForExport !== false) {\n      return {\n        value: value ?? \"\",\n        valueFormatted: this.valueService.formatValue(column, rowNode, value)\n      };\n    }\n    return { value: value ?? \"\" };\n  }\n};\nvar Downloader = class {\n  static download(fileName, content) {\n    const win = document.defaultView || window;\n    if (!win) {\n      _warnOnce(\"There is no `window` associated with the current `document`\");\n      return;\n    }\n    const element = document.createElement(\"a\");\n    const url = win.URL.createObjectURL(content);\n    element.setAttribute(\"href\", url);\n    element.setAttribute(\"download\", fileName);\n    element.style.display = \"none\";\n    document.body.appendChild(element);\n    element.dispatchEvent(\n      new MouseEvent(\"click\", {\n        bubbles: false,\n        cancelable: true,\n        view: win\n      })\n    );\n    document.body.removeChild(element);\n    win.setTimeout(() => {\n      win.URL.revokeObjectURL(url);\n    }, 0);\n  }\n};\nvar LINE_SEPARATOR = \"\\r\\n\";\nvar CsvSerializingSession = class extends BaseGridSerializingSession {\n  constructor(config) {\n    super(config);\n    this.isFirstLine = true;\n    this.result = \"\";\n    const { suppressQuotes, columnSeparator } = config;\n    this.suppressQuotes = suppressQuotes;\n    this.columnSeparator = columnSeparator;\n  }\n  addCustomContent(content) {\n    if (!content) {\n      return;\n    }\n    if (typeof content === \"string\") {\n      if (!/^\\s*\\n/.test(content)) {\n        this.beginNewLine();\n      }\n      content = content.replace(/\\r?\\n/g, LINE_SEPARATOR);\n      this.result += content;\n    } else {\n      content.forEach((row) => {\n        this.beginNewLine();\n        row.forEach((cell, index) => {\n          if (index !== 0) {\n            this.result += this.columnSeparator;\n          }\n          this.result += this.putInQuotes(cell.data.value || \"\");\n          if (cell.mergeAcross) {\n            this.appendEmptyCells(cell.mergeAcross);\n          }\n        });\n      });\n    }\n  }\n  onNewHeaderGroupingRow() {\n    this.beginNewLine();\n    return {\n      onColumn: this.onNewHeaderGroupingRowColumn.bind(this)\n    };\n  }\n  onNewHeaderGroupingRowColumn(columnGroup, header, index, span) {\n    if (index != 0) {\n      this.result += this.columnSeparator;\n    }\n    this.result += this.putInQuotes(header);\n    this.appendEmptyCells(span);\n  }\n  appendEmptyCells(count) {\n    for (let i = 1; i <= count; i++) {\n      this.result += this.columnSeparator + this.putInQuotes(\"\");\n    }\n  }\n  onNewHeaderRow() {\n    this.beginNewLine();\n    return {\n      onColumn: this.onNewHeaderRowColumn.bind(this)\n    };\n  }\n  onNewHeaderRowColumn(column, index) {\n    if (index != 0) {\n      this.result += this.columnSeparator;\n    }\n    this.result += this.putInQuotes(this.extractHeaderValue(column));\n  }\n  onNewBodyRow() {\n    this.beginNewLine();\n    return {\n      onColumn: this.onNewBodyRowColumn.bind(this)\n    };\n  }\n  onNewBodyRowColumn(column, index, node) {\n    if (index != 0) {\n      this.result += this.columnSeparator;\n    }\n    const rowCellValue = this.extractRowCellValue(column, index, index, \"csv\", node);\n    this.result += this.putInQuotes(rowCellValue.valueFormatted ?? rowCellValue.value);\n  }\n  putInQuotes(value) {\n    if (this.suppressQuotes) {\n      return value;\n    }\n    if (value === null || value === void 0) {\n      return '\"\"';\n    }\n    let stringValue;\n    if (typeof value === \"string\") {\n      stringValue = value;\n    } else if (typeof value.toString === \"function\") {\n      stringValue = value.toString();\n    } else {\n      _warnOnce(\"unknown value type during csv conversion\");\n      stringValue = \"\";\n    }\n    const valueEscaped = stringValue.replace(/\"/g, '\"\"');\n    return '\"' + valueEscaped + '\"';\n  }\n  parse() {\n    return this.result;\n  }\n  beginNewLine() {\n    if (!this.isFirstLine) {\n      this.result += LINE_SEPARATOR;\n    }\n    this.isFirstLine = false;\n  }\n};\nvar CsvCreator = class extends BaseCreator {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"csvCreator\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.funcColsService = beans.funcColsService;\n    this.valueService = beans.valueService;\n    this.gridSerializer = beans.gridSerializer;\n  }\n  postConstruct() {\n    this.setBeans({\n      gridSerializer: this.gridSerializer,\n      gos: this.gos\n    });\n  }\n  getMergedParams(params) {\n    const baseParams = this.gos.get(\"defaultCsvExportParams\");\n    return Object.assign({}, baseParams, params);\n  }\n  export(userParams) {\n    if (this.isExportSuppressed()) {\n      _warnOnce(`Export cancelled. Export is not allowed as per your configuration.`);\n      return;\n    }\n    const mergedParams = this.getMergedParams(userParams);\n    const data = this.getData(mergedParams);\n    const packagedFile = new Blob([\"\\uFEFF\", data], { type: \"text/plain\" });\n    const fileName = typeof mergedParams.fileName === \"function\" ? mergedParams.fileName(this.gos.getGridCommonParams()) : mergedParams.fileName;\n    Downloader.download(this.getFileName(fileName), packagedFile);\n  }\n  exportDataAsCsv(params) {\n    this.export(params);\n  }\n  getDataAsCsv(params, skipDefaultParams = false) {\n    const mergedParams = skipDefaultParams ? Object.assign({}, params) : this.getMergedParams(params);\n    return this.getData(mergedParams);\n  }\n  getDefaultFileExtension() {\n    return \"csv\";\n  }\n  createSerializingSession(params) {\n    const { columnModel, columnNameService, funcColsService, valueService, gos } = this;\n    const {\n      processCellCallback,\n      processHeaderCallback,\n      processGroupHeaderCallback,\n      processRowGroupCallback,\n      suppressQuotes,\n      columnSeparator\n    } = params;\n    return new CsvSerializingSession({\n      columnModel,\n      columnNameService,\n      funcColsService,\n      valueService,\n      gos,\n      processCellCallback: processCellCallback || void 0,\n      processHeaderCallback: processHeaderCallback || void 0,\n      processGroupHeaderCallback: processGroupHeaderCallback || void 0,\n      processRowGroupCallback: processRowGroupCallback || void 0,\n      suppressQuotes: suppressQuotes || false,\n      columnSeparator: columnSeparator || \",\"\n    });\n  }\n  isExportSuppressed() {\n    return this.gos.get(\"suppressCsvExport\");\n  }\n};\nfunction getDataAsCsv(beans, params) {\n  return beans.csvCreator?.getDataAsCsv(params);\n}\nfunction exportDataAsCsv(beans, params) {\n  beans.csvCreator?.exportDataAsCsv(params);\n}\nvar RowType = /* @__PURE__ */ ((RowType2) => {\n  RowType2[RowType2[\"HEADER_GROUPING\"] = 0] = \"HEADER_GROUPING\";\n  RowType2[RowType2[\"HEADER\"] = 1] = \"HEADER\";\n  RowType2[RowType2[\"BODY\"] = 2] = \"BODY\";\n  return RowType2;\n})(RowType || {});\nvar GridSerializer = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"gridSerializer\";\n  }\n  wireBeans(beans) {\n    this.visibleColsService = beans.visibleColsService;\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.rowModel = beans.rowModel;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.selectionService = beans.selectionService;\n    this.rowNodeSorter = beans.rowNodeSorter;\n    this.sortController = beans.sortController;\n  }\n  serialize(gridSerializingSession, params = {}) {\n    const { allColumns, columnKeys, skipRowGroups } = params;\n    const columnsToExport = this.getColumnsToExport(\n      allColumns,\n      skipRowGroups,\n      columnKeys\n    );\n    const serializeChain = _compose(\n      // first pass, put in the header names of the cols\n      this.prepareSession(columnsToExport),\n      this.prependContent(params),\n      this.exportColumnGroups(params, columnsToExport),\n      this.exportHeaders(params, columnsToExport),\n      this.processPinnedTopRows(params, columnsToExport),\n      this.processRows(params, columnsToExport),\n      this.processPinnedBottomRows(params, columnsToExport),\n      this.appendContent(params)\n    );\n    return serializeChain(gridSerializingSession).parse();\n  }\n  processRow(gridSerializingSession, params, columnsToExport, node) {\n    const rowSkipper = params.shouldRowBeSkipped || (() => false);\n    const skipSingleChildrenGroup = this.gos.get(\"groupRemoveSingleChildren\");\n    const skipLowestSingleChildrenGroup = this.gos.get(\"groupRemoveLowestSingleChildren\");\n    const isClipboardExport = params.rowPositions != null;\n    const isExplicitExportSelection = isClipboardExport || !!params.onlySelected;\n    const hideOpenParents = this.gos.get(\"groupHideOpenParents\") && !isExplicitExportSelection;\n    const isLeafNode = this.columnModel.isPivotMode() ? node.leafGroup : !node.group;\n    const isFooter = !!node.footer;\n    const shouldSkipLowestGroup = skipLowestSingleChildrenGroup && node.leafGroup;\n    const shouldSkipCurrentGroup = node.allChildrenCount === 1 && node.childrenAfterGroup?.length === 1 && (skipSingleChildrenGroup || shouldSkipLowestGroup);\n    if (!isLeafNode && !isFooter && (params.skipRowGroups || shouldSkipCurrentGroup || hideOpenParents) || params.onlySelected && !node.isSelected() || params.skipPinnedTop && node.rowPinned === \"top\" || params.skipPinnedBottom && node.rowPinned === \"bottom\") {\n      return;\n    }\n    const nodeIsRootNode = node.level === -1;\n    if (nodeIsRootNode && !isLeafNode && !isFooter) {\n      return;\n    }\n    const shouldRowBeSkipped = rowSkipper(this.gos.addGridCommonParams({ node }));\n    if (shouldRowBeSkipped) {\n      return;\n    }\n    const rowAccumulator = gridSerializingSession.onNewBodyRow(node);\n    columnsToExport.forEach((column, index) => {\n      rowAccumulator.onColumn(column, index, node);\n    });\n    if (params.getCustomContentBelowRow) {\n      const content = params.getCustomContentBelowRow(this.gos.addGridCommonParams({ node }));\n      if (content) {\n        gridSerializingSession.addCustomContent(content);\n      }\n    }\n  }\n  appendContent(params) {\n    return (gridSerializingSession) => {\n      const appendContent = params.appendContent;\n      if (appendContent) {\n        gridSerializingSession.addCustomContent(appendContent);\n      }\n      return gridSerializingSession;\n    };\n  }\n  prependContent(params) {\n    return (gridSerializingSession) => {\n      const prependContent = params.prependContent;\n      if (prependContent) {\n        gridSerializingSession.addCustomContent(prependContent);\n      }\n      return gridSerializingSession;\n    };\n  }\n  prepareSession(columnsToExport) {\n    return (gridSerializingSession) => {\n      gridSerializingSession.prepare(columnsToExport);\n      return gridSerializingSession;\n    };\n  }\n  exportColumnGroups(params, columnsToExport) {\n    return (gridSerializingSession) => {\n      if (!params.skipColumnGroupHeaders) {\n        const idCreator = new GroupInstanceIdCreator();\n        const displayedGroups = this.visibleColsService.createGroups({\n          columns: columnsToExport,\n          idCreator,\n          pinned: null,\n          isStandaloneStructure: true\n        });\n        this.recursivelyAddHeaderGroups(\n          displayedGroups,\n          gridSerializingSession,\n          params.processGroupHeaderCallback\n        );\n      }\n      return gridSerializingSession;\n    };\n  }\n  exportHeaders(params, columnsToExport) {\n    return (gridSerializingSession) => {\n      if (!params.skipColumnHeaders) {\n        const gridRowIterator = gridSerializingSession.onNewHeaderRow();\n        columnsToExport.forEach((column, index) => {\n          gridRowIterator.onColumn(column, index, void 0);\n        });\n      }\n      return gridSerializingSession;\n    };\n  }\n  processPinnedTopRows(params, columnsToExport) {\n    return (gridSerializingSession) => {\n      const processRow = this.processRow.bind(this, gridSerializingSession, params, columnsToExport);\n      if (params.rowPositions) {\n        params.rowPositions.filter((position) => position.rowPinned === \"top\").sort((a, b) => a.rowIndex - b.rowIndex).map((position) => this.pinnedRowModel.getPinnedTopRow(position.rowIndex)).forEach(processRow);\n      } else {\n        this.pinnedRowModel.forEachPinnedRow(\"top\", processRow);\n      }\n      return gridSerializingSession;\n    };\n  }\n  processRows(params, columnsToExport) {\n    return (gridSerializingSession) => {\n      const rowModel = this.rowModel;\n      const usingCsrm = _isClientSideRowModel(this.gos);\n      const usingSsrm = _isServerSideRowModel(this.gos);\n      const onlySelectedNonStandardModel = !usingCsrm && params.onlySelected;\n      const processRow = this.processRow.bind(this, gridSerializingSession, params, columnsToExport);\n      const { exportedRows = \"filteredAndSorted\" } = params;\n      if (params.rowPositions) {\n        params.rowPositions.filter((position) => position.rowPinned == null).sort((a, b) => a.rowIndex - b.rowIndex).map((position) => rowModel.getRow(position.rowIndex)).forEach(processRow);\n      } else if (this.columnModel.isPivotMode()) {\n        if (usingCsrm) {\n          rowModel.forEachPivotNode(processRow, true);\n        } else if (usingSsrm) {\n          rowModel.forEachNodeAfterFilterAndSort(processRow, true);\n        } else {\n          rowModel.forEachNode(processRow);\n        }\n      } else {\n        if (params.onlySelectedAllPages || onlySelectedNonStandardModel) {\n          const selectedNodes = this.selectionService.getSelectedNodes();\n          this.replicateSortedOrder(selectedNodes);\n          selectedNodes.forEach(processRow);\n        } else {\n          if (exportedRows === \"all\") {\n            rowModel.forEachNode(processRow);\n          } else if (usingCsrm) {\n            rowModel.forEachNodeAfterFilterAndSort(processRow, true);\n          } else if (usingSsrm) {\n            rowModel.forEachNodeAfterFilterAndSort(processRow, true);\n          } else {\n            rowModel.forEachNode(processRow);\n          }\n        }\n      }\n      return gridSerializingSession;\n    };\n  }\n  replicateSortedOrder(rows) {\n    const sortOptions = this.sortController.getSortOptions();\n    const compareNodes = (rowA, rowB) => {\n      if (rowA.rowIndex != null && rowB.rowIndex != null) {\n        return rowA.rowIndex - rowB.rowIndex;\n      }\n      if (rowA.level === rowB.level) {\n        if (rowA.parent?.id === rowB.parent?.id) {\n          return this.rowNodeSorter.compareRowNodes(\n            sortOptions,\n            {\n              rowNode: rowA,\n              currentPos: rowA.rowIndex ?? -1\n            },\n            {\n              rowNode: rowB,\n              currentPos: rowB.rowIndex ?? -1\n            }\n          );\n        }\n        return compareNodes(rowA.parent, rowB.parent);\n      }\n      if (rowA.level > rowB.level) {\n        return compareNodes(rowA.parent, rowB);\n      }\n      return compareNodes(rowA, rowB.parent);\n    };\n    rows.sort(compareNodes);\n  }\n  processPinnedBottomRows(params, columnsToExport) {\n    return (gridSerializingSession) => {\n      const processRow = this.processRow.bind(this, gridSerializingSession, params, columnsToExport);\n      if (params.rowPositions) {\n        params.rowPositions.filter((position) => position.rowPinned === \"bottom\").sort((a, b) => a.rowIndex - b.rowIndex).map((position) => this.pinnedRowModel.getPinnedBottomRow(position.rowIndex)).forEach(processRow);\n      } else {\n        this.pinnedRowModel.forEachPinnedRow(\"bottom\", processRow);\n      }\n      return gridSerializingSession;\n    };\n  }\n  getColumnsToExport(allColumns = false, skipRowGroups = false, columnKeys) {\n    const isPivotMode = this.columnModel.isPivotMode();\n    if (columnKeys && columnKeys.length) {\n      return this.columnModel.getColsForKeys(columnKeys);\n    }\n    const isTreeData = this.gos.get(\"treeData\");\n    let columnsToExport = [];\n    if (allColumns && !isPivotMode) {\n      columnsToExport = this.columnModel.getCols();\n    } else {\n      columnsToExport = this.visibleColsService.getAllCols();\n    }\n    if (skipRowGroups && !isTreeData) {\n      columnsToExport = columnsToExport.filter(\n        (column) => !isColumnGroupAutoCol(column) && !isColumnControlsCol(column)\n      );\n    }\n    return columnsToExport;\n  }\n  recursivelyAddHeaderGroups(displayedGroups, gridSerializingSession, processGroupHeaderCallback) {\n    const directChildrenHeaderGroups = [];\n    displayedGroups.forEach((columnGroupChild) => {\n      const columnGroup = columnGroupChild;\n      if (!columnGroup.getChildren) {\n        return;\n      }\n      columnGroup.getChildren().forEach((it) => directChildrenHeaderGroups.push(it));\n    });\n    if (displayedGroups.length > 0 && isColumnGroup(displayedGroups[0])) {\n      this.doAddHeaderHeader(gridSerializingSession, displayedGroups, processGroupHeaderCallback);\n    }\n    if (directChildrenHeaderGroups && directChildrenHeaderGroups.length > 0) {\n      this.recursivelyAddHeaderGroups(\n        directChildrenHeaderGroups,\n        gridSerializingSession,\n        processGroupHeaderCallback\n      );\n    }\n  }\n  doAddHeaderHeader(gridSerializingSession, displayedGroups, processGroupHeaderCallback) {\n    const gridRowIterator = gridSerializingSession.onNewHeaderGroupingRow();\n    let columnIndex = 0;\n    displayedGroups.forEach((columnGroupChild) => {\n      const columnGroup = columnGroupChild;\n      let name;\n      if (processGroupHeaderCallback) {\n        name = processGroupHeaderCallback(\n          this.gos.addGridCommonParams({\n            columnGroup\n          })\n        );\n      } else {\n        name = this.columnNameService.getDisplayNameForColumnGroup(columnGroup, \"header\");\n      }\n      const collapsibleGroupRanges = columnGroup.getLeafColumns().reduce((collapsibleGroups, currentColumn, currentIdx, arr) => {\n        let lastGroup = _last(collapsibleGroups);\n        const groupShow = currentColumn.getColumnGroupShow() === \"open\";\n        if (!groupShow) {\n          if (lastGroup && lastGroup[1] == null) {\n            lastGroup[1] = currentIdx - 1;\n          }\n        } else if (!lastGroup || lastGroup[1] != null) {\n          lastGroup = [currentIdx];\n          collapsibleGroups.push(lastGroup);\n        }\n        if (currentIdx === arr.length - 1 && lastGroup && lastGroup[1] == null) {\n          lastGroup[1] = currentIdx;\n        }\n        return collapsibleGroups;\n      }, []);\n      gridRowIterator.onColumn(\n        columnGroup,\n        name || \"\",\n        columnIndex++,\n        columnGroup.getLeafColumns().length - 1,\n        collapsibleGroupRanges\n      );\n    });\n  }\n};\nvar VERSION3 = \"32.3.9\";\nvar CsvExportCoreModule = _defineModule({\n  version: VERSION3,\n  moduleName: `${\"@ag-grid-community/csv-export\" /* CsvExportModule */}-core`,\n  beans: [CsvCreator, GridSerializer]\n});\nvar CsvExportApiModule = _defineModule({\n  version: VERSION3,\n  moduleName: `${\"@ag-grid-community/csv-export\" /* CsvExportModule */}-api`,\n  apiFunctions: {\n    getDataAsCsv,\n    exportDataAsCsv\n  },\n  dependantModules: [CsvExportCoreModule]\n});\nvar CsvExportModule = _defineModule({\n  version: VERSION3,\n  moduleName: \"@ag-grid-community/csv-export\" /* CsvExportModule */,\n  dependantModules: [CsvExportCoreModule, CsvExportApiModule]\n});\nvar LINE_SEPARATOR2 = \"\\r\\n\";\nfunction returnAttributeIfPopulated(key, value, booleanTransformer) {\n  if (!value && value !== \"\" && value !== 0) {\n    return \"\";\n  }\n  let xmlValue = value;\n  if (typeof value === \"boolean\") {\n    if (booleanTransformer) {\n      xmlValue = booleanTransformer(value);\n    }\n  }\n  return ` ${key}=\"${xmlValue}\"`;\n}\nvar XmlFactory = class {\n  static createHeader(headerElement = {}) {\n    const headerStart = \"<?\";\n    const headerEnd = \"?>\";\n    const keys = [\"version\"];\n    if (!headerElement.version) {\n      headerElement.version = \"1.0\";\n    }\n    if (headerElement.encoding) {\n      keys.push(\"encoding\");\n    }\n    if (headerElement.standalone) {\n      keys.push(\"standalone\");\n    }\n    const att = keys.map((key) => `${key}=\"${headerElement[key]}\"`).join(\" \");\n    return `${headerStart}xml ${att} ${headerEnd}`;\n  }\n  static createXml(xmlElement, booleanTransformer) {\n    let props = \"\";\n    if (xmlElement.properties) {\n      if (xmlElement.properties.prefixedAttributes) {\n        xmlElement.properties.prefixedAttributes.forEach((prefixedSet) => {\n          Object.keys(prefixedSet.map).forEach((key) => {\n            props += returnAttributeIfPopulated(\n              prefixedSet.prefix + key,\n              prefixedSet.map[key],\n              booleanTransformer\n            );\n          });\n        });\n      }\n      if (xmlElement.properties.rawMap) {\n        Object.keys(xmlElement.properties.rawMap).forEach((key) => {\n          props += returnAttributeIfPopulated(key, xmlElement.properties.rawMap[key], booleanTransformer);\n        });\n      }\n    }\n    let result = \"<\" + xmlElement.name + props;\n    if (!xmlElement.children && xmlElement.textNode == null) {\n      return result + \"/>\" + LINE_SEPARATOR2;\n    }\n    if (xmlElement.textNode != null) {\n      return result + \">\" + xmlElement.textNode + \"</\" + xmlElement.name + \">\" + LINE_SEPARATOR2;\n    }\n    result += \">\" + LINE_SEPARATOR2;\n    if (xmlElement.children) {\n      xmlElement.children.forEach((it) => {\n        result += this.createXml(it, booleanTransformer);\n      });\n    }\n    return result + \"</\" + xmlElement.name + \">\" + LINE_SEPARATOR2;\n  }\n};\nvar compressBlob = async (data) => {\n  let chunksSize = 0;\n  const chunks = [];\n  const writeCompressedData = new WritableStream({\n    write: (chunk) => {\n      chunks.push(chunk);\n      chunksSize += chunk.length;\n    }\n  });\n  const readable = new ReadableStream({\n    start: (controller) => {\n      const reader = new FileReader();\n      reader.onload = (e) => {\n        if (e.target?.result) {\n          controller.enqueue(e.target.result);\n        }\n        controller.close();\n      };\n      reader.readAsArrayBuffer(data);\n    }\n  });\n  const compressStream = new window.CompressionStream(\"deflate-raw\");\n  await readable.pipeThrough(compressStream).pipeTo(writeCompressedData);\n  return {\n    size: chunksSize,\n    content: new Blob(chunks)\n  };\n};\nvar deflateLocalFile = async (rawContent) => {\n  const contentAsBlob = new Blob([rawContent]);\n  const { size: compressedSize, content: compressedContent } = await compressBlob(contentAsBlob);\n  const compressedContentAsUint8Array = new Uint8Array(await compressedContent.arrayBuffer());\n  return {\n    size: compressedSize,\n    content: compressedContentAsUint8Array\n  };\n};\nvar convertTime = (date) => {\n  let time = date.getHours();\n  time <<= 6;\n  time = time | date.getMinutes();\n  time <<= 5;\n  time = time | date.getSeconds() / 2;\n  return time;\n};\nvar convertDate = (date) => {\n  let dt = date.getFullYear() - 1980;\n  dt <<= 4;\n  dt = dt | date.getMonth() + 1;\n  dt <<= 5;\n  dt = dt | date.getDate();\n  return dt;\n};\nfunction convertDecToHex(number, bytes) {\n  let hex = \"\";\n  for (let i = 0; i < bytes; i++) {\n    hex += String.fromCharCode(number & 255);\n    number >>>= 8;\n  }\n  return hex;\n}\nvar getCrcFromCrc32TableAndByteArray = (content) => {\n  if (!content.length) {\n    return 0;\n  }\n  let crc = 0 ^ -1;\n  let j = 0;\n  let k = 0;\n  let l = 0;\n  for (let i = 0; i < content.length; i++) {\n    j = content[i];\n    k = (crc ^ j) & 255;\n    l = crcTable[k];\n    crc = crc >>> 8 ^ l;\n  }\n  return crc ^ -1;\n};\nvar getCrcFromCrc32Table = (content) => {\n  if (!content.length) {\n    return 0;\n  }\n  if (typeof content === \"string\") {\n    return getCrcFromCrc32TableAndByteArray(new TextEncoder().encode(content));\n  }\n  return getCrcFromCrc32TableAndByteArray(content);\n};\nvar crcTable = new Uint32Array([\n  0,\n  1996959894,\n  3993919788,\n  2567524794,\n  124634137,\n  1886057615,\n  3915621685,\n  2657392035,\n  249268274,\n  2044508324,\n  3772115230,\n  2547177864,\n  162941995,\n  2125561021,\n  3887607047,\n  2428444049,\n  498536548,\n  1789927666,\n  4089016648,\n  2227061214,\n  450548861,\n  1843258603,\n  4107580753,\n  2211677639,\n  325883990,\n  1684777152,\n  4251122042,\n  2321926636,\n  335633487,\n  1661365465,\n  4195302755,\n  2366115317,\n  997073096,\n  1281953886,\n  3579855332,\n  2724688242,\n  1006888145,\n  1258607687,\n  3524101629,\n  2768942443,\n  901097722,\n  1119000684,\n  3686517206,\n  2898065728,\n  853044451,\n  1172266101,\n  3705015759,\n  2882616665,\n  651767980,\n  1373503546,\n  3369554304,\n  3218104598,\n  565507253,\n  1454621731,\n  3485111705,\n  3099436303,\n  671266974,\n  1594198024,\n  3322730930,\n  2970347812,\n  795835527,\n  1483230225,\n  3244367275,\n  3060149565,\n  1994146192,\n  31158534,\n  2563907772,\n  4023717930,\n  1907459465,\n  112637215,\n  2680153253,\n  3904427059,\n  2013776290,\n  251722036,\n  2517215374,\n  3775830040,\n  2137656763,\n  141376813,\n  2439277719,\n  3865271297,\n  1802195444,\n  476864866,\n  2238001368,\n  4066508878,\n  1812370925,\n  453092731,\n  2181625025,\n  4111451223,\n  1706088902,\n  314042704,\n  2344532202,\n  4240017532,\n  1658658271,\n  366619977,\n  2362670323,\n  4224994405,\n  1303535960,\n  984961486,\n  2747007092,\n  3569037538,\n  1256170817,\n  1037604311,\n  2765210733,\n  3554079995,\n  1131014506,\n  879679996,\n  2909243462,\n  3663771856,\n  1141124467,\n  855842277,\n  2852801631,\n  3708648649,\n  1342533948,\n  654459306,\n  3188396048,\n  3373015174,\n  1466479909,\n  544179635,\n  3110523913,\n  3462522015,\n  1591671054,\n  702138776,\n  2966460450,\n  3352799412,\n  1504918807,\n  783551873,\n  3082640443,\n  3233442989,\n  3988292384,\n  2596254646,\n  62317068,\n  1957810842,\n  3939845945,\n  2647816111,\n  81470997,\n  1943803523,\n  3814918930,\n  2489596804,\n  225274430,\n  2053790376,\n  3826175755,\n  2466906013,\n  167816743,\n  2097651377,\n  4027552580,\n  2265490386,\n  503444072,\n  1762050814,\n  4150417245,\n  2154129355,\n  426522225,\n  1852507879,\n  4275313526,\n  2312317920,\n  282753626,\n  1742555852,\n  4189708143,\n  2394877945,\n  397917763,\n  1622183637,\n  3604390888,\n  2714866558,\n  953729732,\n  1340076626,\n  3518719985,\n  2797360999,\n  1068828381,\n  1219638859,\n  3624741850,\n  2936675148,\n  906185462,\n  1090812512,\n  3747672003,\n  2825379669,\n  829329135,\n  1181335161,\n  3412177804,\n  3160834842,\n  628085408,\n  1382605366,\n  3423369109,\n  3138078467,\n  570562233,\n  1426400815,\n  3317316542,\n  2998733608,\n  733239954,\n  1555261956,\n  3268935591,\n  3050360625,\n  752459403,\n  1541320221,\n  2607071920,\n  3965973030,\n  1969922972,\n  40735498,\n  2617837225,\n  3943577151,\n  1913087877,\n  83908371,\n  2512341634,\n  3803740692,\n  2075208622,\n  213261112,\n  2463272603,\n  3855990285,\n  2094854071,\n  198958881,\n  2262029012,\n  4057260610,\n  1759359992,\n  534414190,\n  2176718541,\n  4139329115,\n  1873836001,\n  414664567,\n  2282248934,\n  4279200368,\n  1711684554,\n  285281116,\n  2405801727,\n  4167216745,\n  1634467795,\n  376229701,\n  2685067896,\n  3608007406,\n  1308918612,\n  956543938,\n  2808555105,\n  3495958263,\n  1231636301,\n  1047427035,\n  2932959818,\n  3654703836,\n  1088359270,\n  936918e3,\n  2847714899,\n  3736837829,\n  1202900863,\n  817233897,\n  3183342108,\n  3401237130,\n  1404277552,\n  615818150,\n  3134207493,\n  3453421203,\n  1423857449,\n  601450431,\n  3009837614,\n  3294710456,\n  1567103746,\n  711928724,\n  3020668471,\n  3272380065,\n  1510334235,\n  755167117\n]);\nvar getHeaders = (currentFile, isCompressed, offset, rawSize, rawContent, deflatedSize) => {\n  const { content, path, created: creationDate } = currentFile;\n  const time = convertTime(creationDate);\n  const dt = convertDate(creationDate);\n  const crcFlag = getCrcFromCrc32Table(rawContent);\n  const zipSize = deflatedSize !== void 0 ? deflatedSize : rawSize;\n  const utfPath = _utf8_encode(path);\n  const isUTF8 = utfPath !== path;\n  let extraFields = \"\";\n  if (isUTF8) {\n    const uExtraFieldPath = convertDecToHex(1, 1) + convertDecToHex(getCrcFromCrc32Table(utfPath), 4) + utfPath;\n    extraFields = \"up\" + convertDecToHex(uExtraFieldPath.length, 2) + uExtraFieldPath;\n  }\n  const commonHeader = \"\u0014\\0\" + // version needed to extract\n  (isUTF8 ? \"\\0\\b\" : \"\\0\\0\") + // Language encoding flag (EFS) (12th bit turned on)\n  convertDecToHex(isCompressed ? 8 : 0, 2) + // As per ECMA-376 Part 2 specs\n  convertDecToHex(time, 2) + // last modified time\n  convertDecToHex(dt, 2) + // last modified date\n  convertDecToHex(zipSize ? crcFlag : 0, 4) + convertDecToHex(deflatedSize ?? rawSize, 4) + // compressed size\n  convertDecToHex(rawSize, 4) + // uncompressed size\n  convertDecToHex(utfPath.length, 2) + // file name length\n  convertDecToHex(extraFields.length, 2);\n  const localFileHeader = \"PK\u0003\u0004\" + commonHeader + utfPath + extraFields;\n  const centralDirectoryHeader = \"PK\u0001\u0002\u0014\\0\" + commonHeader + // file header\n  \"\\0\\0\\0\\0\\0\\0\" + (content ? \"\\0\\0\\0\\0\" : \"\u0010\\0\\0\\0\") + // external file attributes\n  convertDecToHex(offset, 4) + // relative offset of local header\n  utfPath + // file name\n  extraFields;\n  return {\n    localFileHeader: Uint8Array.from(localFileHeader, (c) => c.charCodeAt(0)),\n    centralDirectoryHeader: Uint8Array.from(centralDirectoryHeader, (c) => c.charCodeAt(0))\n  };\n};\nvar getDecodedContent = (content) => {\n  let contentToUse;\n  if (typeof content === \"string\") {\n    const base64String = atob(content.split(\";base64,\")[1]);\n    contentToUse = Uint8Array.from(base64String, (c) => c.charCodeAt(0));\n  } else {\n    contentToUse = content;\n  }\n  return {\n    size: contentToUse.length,\n    content: contentToUse\n  };\n};\nvar getDeflatedHeaderAndContent = async (currentFile, offset) => {\n  const { content } = currentFile;\n  const { size, content: rawContent } = !content ? { size: 0, content: Uint8Array.from([]) } : getDecodedContent(content);\n  let deflatedContent = void 0;\n  let deflatedSize = void 0;\n  let deflationPerformed = false;\n  const shouldDeflate = currentFile.type === \"file\" && rawContent && size > 0;\n  if (shouldDeflate) {\n    const result = await deflateLocalFile(rawContent);\n    deflatedContent = result.content;\n    deflatedSize = result.size;\n    deflationPerformed = true;\n  }\n  const headers = getHeaders(currentFile, deflationPerformed, offset, size, rawContent, deflatedSize);\n  return {\n    ...headers,\n    content: deflatedContent || rawContent,\n    isCompressed: deflationPerformed\n  };\n};\nvar getHeaderAndContent = (currentFile, offset) => {\n  const { content } = currentFile;\n  const { content: rawContent } = !content ? { content: Uint8Array.from([]) } : getDecodedContent(content);\n  const headers = getHeaders(currentFile, false, offset, rawContent.length, rawContent, void 0);\n  return {\n    ...headers,\n    content: rawContent,\n    isCompressed: false\n  };\n};\nvar buildCentralDirectoryEnd = (tLen, cLen, lLen) => {\n  const str = \"PK\u0005\u0006\\0\\0\\0\\0\" + convertDecToHex(tLen, 2) + // total number of entries in the central folder\n  convertDecToHex(tLen, 2) + // total number of entries in the central folder\n  convertDecToHex(cLen, 4) + // size of the central folder\n  convertDecToHex(lLen, 4) + // central folder start offset\n  \"\\0\\0\";\n  return Uint8Array.from(str, (c) => c.charCodeAt(0));\n};\nvar ZipContainer = class {\n  static addFolders(paths) {\n    paths.forEach(this.addFolder.bind(this));\n  }\n  static addFolder(path) {\n    this.folders.push({\n      path,\n      created: /* @__PURE__ */ new Date(),\n      isBase64: false,\n      type: \"folder\"\n    });\n  }\n  static addFile(path, content, isBase64 = false) {\n    this.files.push({\n      path,\n      created: /* @__PURE__ */ new Date(),\n      content: isBase64 ? content : new TextEncoder().encode(content),\n      isBase64,\n      type: \"file\"\n    });\n  }\n  static async getZipFile(mimeType = \"application/zip\") {\n    const textOutput = await this.buildCompressedFileStream();\n    this.clearStream();\n    return new Blob([textOutput], { type: mimeType });\n  }\n  static getUncompressedZipFile(mimeType = \"application/zip\") {\n    const textOutput = this.buildFileStream();\n    this.clearStream();\n    return new Blob([textOutput], { type: mimeType });\n  }\n  static clearStream() {\n    this.folders = [];\n    this.files = [];\n  }\n  static packageFiles(files) {\n    let fileLen = 0;\n    let folderLen = 0;\n    for (const currentFile of files) {\n      const { localFileHeader, centralDirectoryHeader, content } = currentFile;\n      fileLen += localFileHeader.length + content.length;\n      folderLen += centralDirectoryHeader.length;\n    }\n    const fileData = new Uint8Array(fileLen);\n    const folderData = new Uint8Array(folderLen);\n    let fileOffset = 0;\n    let folderOffset = 0;\n    for (const currentFile of files) {\n      const { localFileHeader, centralDirectoryHeader, content } = currentFile;\n      fileData.set(localFileHeader, fileOffset);\n      fileOffset += localFileHeader.length;\n      fileData.set(content, fileOffset);\n      fileOffset += content.length;\n      folderData.set(centralDirectoryHeader, folderOffset);\n      folderOffset += centralDirectoryHeader.length;\n    }\n    const folderEnd = buildCentralDirectoryEnd(files.length, folderLen, fileLen);\n    const result = new Uint8Array(fileData.length + folderData.length + folderEnd.length);\n    result.set(fileData);\n    result.set(folderData, fileData.length);\n    result.set(folderEnd, fileData.length + folderData.length);\n    return result;\n  }\n  static async buildCompressedFileStream() {\n    const totalFiles = [...this.folders, ...this.files];\n    const readyFiles = [];\n    let lL = 0;\n    for (const currentFile of totalFiles) {\n      const output = await getDeflatedHeaderAndContent(currentFile, lL);\n      const { localFileHeader, content } = output;\n      readyFiles.push(output);\n      lL += localFileHeader.length + content.length;\n    }\n    return this.packageFiles(readyFiles);\n  }\n  static buildFileStream() {\n    const totalFiles = [...this.folders, ...this.files];\n    const readyFiles = [];\n    let lL = 0;\n    for (const currentFile of totalFiles) {\n      const readyFile = getHeaderAndContent(currentFile, lL);\n      const { localFileHeader, content } = readyFile;\n      readyFiles.push(readyFile);\n      lL += localFileHeader.length + content.length;\n    }\n    return this.packageFiles(readyFiles);\n  }\n};\nZipContainer.folders = [];\nZipContainer.files = [];\n\n// community-modules/infinite-row-model/dist/package/main.esm.mjs\nvar InfiniteBlock = class extends RowNodeBlock {\n  wireBeans(beans) {\n    this.beans = beans;\n  }\n  constructor(id, parentCache, params) {\n    super(id);\n    this.parentCache = parentCache;\n    this.params = params;\n    this.startRow = id * params.blockSize;\n    this.endRow = this.startRow + params.blockSize;\n  }\n  postConstruct() {\n    this.createRowNodes();\n  }\n  getBlockStateJson() {\n    return {\n      id: \"\" + this.getId(),\n      state: {\n        blockNumber: this.getId(),\n        startRow: this.getStartRow(),\n        endRow: this.getEndRow(),\n        pageStatus: this.getState()\n      }\n    };\n  }\n  setDataAndId(rowNode, data, index) {\n    if (_exists(data)) {\n      rowNode.setDataAndId(data, index.toString());\n    } else {\n      rowNode.setDataAndId(void 0, void 0);\n    }\n  }\n  loadFromDatasource() {\n    const params = this.createLoadParams();\n    if (_missing(this.params.datasource.getRows)) {\n      _warnOnce(`datasource is missing getRows method`);\n      return;\n    }\n    window.setTimeout(() => {\n      this.params.datasource.getRows(params);\n    }, 0);\n  }\n  processServerFail() {\n  }\n  createLoadParams() {\n    const params = {\n      startRow: this.getStartRow(),\n      endRow: this.getEndRow(),\n      successCallback: this.pageLoaded.bind(this, this.getVersion()),\n      failCallback: this.pageLoadFailed.bind(this, this.getVersion()),\n      sortModel: this.params.sortModel,\n      filterModel: this.params.filterModel,\n      context: this.gos.getGridCommonParams().context\n    };\n    return params;\n  }\n  forEachNode(callback, sequence, rowCount) {\n    this.rowNodes.forEach((rowNode, index) => {\n      const rowIndex = this.startRow + index;\n      if (rowIndex < rowCount) {\n        callback(rowNode, sequence.next());\n      }\n    });\n  }\n  getLastAccessed() {\n    return this.lastAccessed;\n  }\n  getRow(rowIndex, dontTouchLastAccessed = false) {\n    if (!dontTouchLastAccessed) {\n      this.lastAccessed = this.params.lastAccessedSequence.next();\n    }\n    const localIndex = rowIndex - this.startRow;\n    return this.rowNodes[localIndex];\n  }\n  getStartRow() {\n    return this.startRow;\n  }\n  getEndRow() {\n    return this.endRow;\n  }\n  // creates empty row nodes, data is missing as not loaded yet\n  createRowNodes() {\n    this.rowNodes = [];\n    for (let i = 0; i < this.params.blockSize; i++) {\n      const rowIndex = this.startRow + i;\n      const rowNode = new RowNode(this.beans);\n      rowNode.setRowHeight(this.params.rowHeight);\n      rowNode.uiLevel = 0;\n      rowNode.setRowIndex(rowIndex);\n      rowNode.setRowTop(this.params.rowHeight * rowIndex);\n      this.rowNodes.push(rowNode);\n    }\n  }\n  processServerResult(params) {\n    this.rowNodes.forEach((rowNode, index) => {\n      const data = params.rowData ? params.rowData[index] : void 0;\n      if (!rowNode.id && rowNode.alreadyRendered && data) {\n        this.rowNodes[index] = new RowNode(this.beans);\n        this.rowNodes[index].setRowIndex(rowNode.rowIndex);\n        this.rowNodes[index].setRowTop(rowNode.rowTop);\n        this.rowNodes[index].setRowHeight(rowNode.rowHeight);\n        rowNode.clearRowTopAndRowIndex();\n      }\n      this.setDataAndId(this.rowNodes[index], data, this.startRow + index);\n    });\n    const finalRowCount = params.rowCount != null && params.rowCount >= 0 ? params.rowCount : void 0;\n    this.parentCache.pageLoaded(this, finalRowCount);\n  }\n  destroy() {\n    this.rowNodes.forEach((rowNode) => {\n      rowNode.clearRowTopAndRowIndex();\n    });\n    super.destroy();\n  }\n};\nvar MAX_EMPTY_BLOCKS_TO_KEEP = 2;\nvar InfiniteCache = class extends BeanStub {\n  constructor(params) {\n    super();\n    this.lastRowIndexKnown = false;\n    this.blocks = {};\n    this.blockCount = 0;\n    this.rowCount = params.initialRowCount;\n    this.params = params;\n  }\n  wireBeans(beans) {\n    this.rowRenderer = beans.rowRenderer;\n    this.focusService = beans.focusService;\n  }\n  // the rowRenderer will not pass dontCreatePage, meaning when rendering the grid,\n  // it will want new pages in the cache as it asks for rows. only when we are inserting /\n  // removing rows via the api is dontCreatePage set, where we move rows between the pages.\n  getRow(rowIndex, dontCreatePage = false) {\n    const blockId = Math.floor(rowIndex / this.params.blockSize);\n    let block = this.blocks[blockId];\n    if (!block) {\n      if (dontCreatePage) {\n        return void 0;\n      }\n      block = this.createBlock(blockId);\n    }\n    return block.getRow(rowIndex);\n  }\n  createBlock(blockNumber) {\n    const newBlock = this.createBean(new InfiniteBlock(blockNumber, this, this.params));\n    this.blocks[newBlock.getId()] = newBlock;\n    this.blockCount++;\n    this.purgeBlocksIfNeeded(newBlock);\n    this.params.rowNodeBlockLoader.addBlock(newBlock);\n    return newBlock;\n  }\n  // we have this on infinite row model only, not server side row model,\n  // because for server side, it would leave the children in inconsistent\n  // state - eg if a node had children, but after the refresh it had data\n  // for a different row, then the children would be with the wrong row node.\n  refreshCache() {\n    const nothingToRefresh = this.blockCount == 0;\n    if (nothingToRefresh) {\n      this.purgeCache();\n      return;\n    }\n    this.getBlocksInOrder().forEach((block) => block.setStateWaitingToLoad());\n    this.params.rowNodeBlockLoader.checkBlockToLoad();\n  }\n  destroy() {\n    this.getBlocksInOrder().forEach((block) => this.destroyBlock(block));\n    super.destroy();\n  }\n  getRowCount() {\n    return this.rowCount;\n  }\n  isLastRowIndexKnown() {\n    return this.lastRowIndexKnown;\n  }\n  // block calls this, when page loaded\n  pageLoaded(block, lastRow) {\n    if (!this.isAlive()) {\n      return;\n    }\n    if (this.gos.get(\"debug\")) {\n      _log(`InfiniteCache - onPageLoaded: page = ${block.getId()}, lastRow = ${lastRow}`);\n    }\n    this.checkRowCount(block, lastRow);\n    this.onCacheUpdated();\n  }\n  purgeBlocksIfNeeded(blockToExclude) {\n    const blocksForPurging = this.getBlocksInOrder().filter((b) => b != blockToExclude);\n    const lastAccessedComparator = (a, b) => b.getLastAccessed() - a.getLastAccessed();\n    blocksForPurging.sort(lastAccessedComparator);\n    const maxBlocksProvided = this.params.maxBlocksInCache > 0;\n    const blocksToKeep = maxBlocksProvided ? this.params.maxBlocksInCache - 1 : null;\n    const emptyBlocksToKeep = MAX_EMPTY_BLOCKS_TO_KEEP - 1;\n    blocksForPurging.forEach((block, index) => {\n      const purgeBecauseBlockEmpty = block.getState() === \"needsLoading\" && index >= emptyBlocksToKeep;\n      const purgeBecauseCacheFull = maxBlocksProvided ? index >= blocksToKeep : false;\n      if (purgeBecauseBlockEmpty || purgeBecauseCacheFull) {\n        if (this.isBlockCurrentlyDisplayed(block)) {\n          return;\n        }\n        if (this.isBlockFocused(block)) {\n          return;\n        }\n        this.removeBlockFromCache(block);\n      }\n    });\n  }\n  isBlockFocused(block) {\n    const focusedCell = this.focusService.getFocusCellToUseAfterRefresh();\n    if (!focusedCell) {\n      return false;\n    }\n    if (focusedCell.rowPinned != null) {\n      return false;\n    }\n    const blockIndexStart = block.getStartRow();\n    const blockIndexEnd = block.getEndRow();\n    const hasFocus = focusedCell.rowIndex >= blockIndexStart && focusedCell.rowIndex < blockIndexEnd;\n    return hasFocus;\n  }\n  isBlockCurrentlyDisplayed(block) {\n    const startIndex = block.getStartRow();\n    const endIndex = block.getEndRow() - 1;\n    return this.rowRenderer.isRangeInRenderedViewport(startIndex, endIndex);\n  }\n  removeBlockFromCache(blockToRemove) {\n    if (!blockToRemove) {\n      return;\n    }\n    this.destroyBlock(blockToRemove);\n  }\n  checkRowCount(block, lastRow) {\n    if (typeof lastRow === \"number\" && lastRow >= 0) {\n      this.rowCount = lastRow;\n      this.lastRowIndexKnown = true;\n    } else if (!this.lastRowIndexKnown) {\n      const lastRowIndex = (block.getId() + 1) * this.params.blockSize;\n      const lastRowIndexPlusOverflow = lastRowIndex + this.params.overflowSize;\n      if (this.rowCount < lastRowIndexPlusOverflow) {\n        this.rowCount = lastRowIndexPlusOverflow;\n      }\n    }\n  }\n  setRowCount(rowCount, lastRowIndexKnown) {\n    this.rowCount = rowCount;\n    if (_exists(lastRowIndexKnown)) {\n      this.lastRowIndexKnown = lastRowIndexKnown;\n    }\n    if (!this.lastRowIndexKnown) {\n      if (this.rowCount % this.params.blockSize === 0) {\n        this.rowCount++;\n      }\n    }\n    this.onCacheUpdated();\n  }\n  forEachNodeDeep(callback) {\n    const sequence = new NumberSequence();\n    this.getBlocksInOrder().forEach((block) => block.forEachNode(callback, sequence, this.rowCount));\n  }\n  getBlocksInOrder() {\n    const blockComparator = (a, b) => a.getId() - b.getId();\n    const blocks = _getAllValuesInObject(this.blocks).sort(blockComparator);\n    return blocks;\n  }\n  destroyBlock(block) {\n    delete this.blocks[block.getId()];\n    this.destroyBean(block);\n    this.blockCount--;\n    this.params.rowNodeBlockLoader.removeBlock(block);\n  }\n  // gets called 1) row count changed 2) cache purged 3) items inserted\n  onCacheUpdated() {\n    if (this.isAlive()) {\n      this.destroyAllBlocksPastVirtualRowCount();\n      this.eventService.dispatchEvent({\n        type: \"storeUpdated\"\n      });\n    }\n  }\n  destroyAllBlocksPastVirtualRowCount() {\n    const blocksToDestroy = [];\n    this.getBlocksInOrder().forEach((block) => {\n      const startRow = block.getId() * this.params.blockSize;\n      if (startRow >= this.rowCount) {\n        blocksToDestroy.push(block);\n      }\n    });\n    if (blocksToDestroy.length > 0) {\n      blocksToDestroy.forEach((block) => this.destroyBlock(block));\n    }\n  }\n  purgeCache() {\n    this.getBlocksInOrder().forEach((block) => this.removeBlockFromCache(block));\n    this.lastRowIndexKnown = false;\n    if (this.rowCount === 0) {\n      this.rowCount = this.params.initialRowCount;\n    }\n    this.onCacheUpdated();\n  }\n  getRowNodesInRange(firstInRange, lastInRange) {\n    const result = [];\n    let lastBlockId = -1;\n    let inActiveRange = false;\n    const numberSequence = new NumberSequence();\n    let foundGapInSelection = false;\n    this.getBlocksInOrder().forEach((block) => {\n      if (foundGapInSelection) {\n        return;\n      }\n      if (inActiveRange && lastBlockId + 1 !== block.getId()) {\n        foundGapInSelection = true;\n        return;\n      }\n      lastBlockId = block.getId();\n      block.forEachNode(\n        (rowNode) => {\n          const hitFirstOrLast = rowNode === firstInRange || rowNode === lastInRange;\n          if (inActiveRange || hitFirstOrLast) {\n            result.push(rowNode);\n          }\n          if (hitFirstOrLast) {\n            inActiveRange = !inActiveRange;\n          }\n        },\n        numberSequence,\n        this.rowCount\n      );\n    });\n    const invalidRange = foundGapInSelection || inActiveRange;\n    return invalidRange ? [] : result;\n  }\n};\nvar InfiniteRowModel = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowModel\";\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.sortController = beans.sortController;\n    this.selectionService = beans.selectionService;\n    this.rowRenderer = beans.rowRenderer;\n    this.rowNodeBlockLoader = beans.rowNodeBlockLoader;\n  }\n  getRowBounds(index) {\n    return {\n      rowHeight: this.rowHeight,\n      rowTop: this.rowHeight * index\n    };\n  }\n  // we don't implement as lazy row heights is not supported in this row model\n  ensureRowHeightsValid() {\n    return false;\n  }\n  postConstruct() {\n    if (this.gos.get(\"rowModelType\") !== \"infinite\") {\n      return;\n    }\n    this.rowHeight = _getRowHeightAsNumber(this.gos);\n    this.addEventListeners();\n    this.addDestroyFunc(() => this.destroyCache());\n    this.verifyProps();\n  }\n  verifyProps() {\n    if (this.gos.exists(\"initialGroupOrderComparator\")) {\n      _warnOnce(\n        \"initialGroupOrderComparator cannot be used with Infinite Row Model as sorting is done on the server side\"\n      );\n    }\n  }\n  start() {\n    this.setDatasource(this.gos.get(\"datasource\"));\n  }\n  destroy() {\n    this.destroyDatasource();\n    super.destroy();\n  }\n  destroyDatasource() {\n    if (this.datasource) {\n      this.destroyBean(this.datasource);\n      this.rowRenderer.datasourceChanged();\n      this.datasource = null;\n    }\n  }\n  addEventListeners() {\n    this.addManagedEventListeners({\n      filterChanged: this.onFilterChanged.bind(this),\n      sortChanged: this.onSortChanged.bind(this),\n      newColumnsLoaded: this.onColumnEverything.bind(this),\n      storeUpdated: this.onCacheUpdated.bind(this)\n    });\n    this.addManagedPropertyListener(\"datasource\", () => this.setDatasource(this.gos.get(\"datasource\")));\n    this.addManagedPropertyListener(\"cacheBlockSize\", () => this.resetCache());\n    this.addManagedPropertyListener(\"rowHeight\", () => {\n      this.rowHeight = _getRowHeightAsNumber(this.gos);\n      this.cacheParams.rowHeight = this.rowHeight;\n      this.updateRowHeights();\n    });\n  }\n  onFilterChanged() {\n    this.reset();\n  }\n  onSortChanged() {\n    this.reset();\n  }\n  onColumnEverything() {\n    let resetRequired;\n    if (this.cacheParams) {\n      resetRequired = this.isSortModelDifferent();\n    } else {\n      resetRequired = true;\n    }\n    if (resetRequired) {\n      this.reset();\n    }\n  }\n  isSortModelDifferent() {\n    return !_jsonEquals(this.cacheParams.sortModel, this.sortController.getSortModel());\n  }\n  getType() {\n    return \"infinite\";\n  }\n  setDatasource(datasource) {\n    this.destroyDatasource();\n    this.datasource = datasource;\n    if (datasource) {\n      this.reset();\n    }\n  }\n  isEmpty() {\n    return !this.infiniteCache;\n  }\n  isRowsToRender() {\n    return !!this.infiniteCache;\n  }\n  getNodesInRangeForSelection(firstInRange, lastInRange) {\n    return this.infiniteCache ? this.infiniteCache.getRowNodesInRange(firstInRange, lastInRange) : [];\n  }\n  reset() {\n    if (!this.datasource) {\n      return;\n    }\n    const getRowIdFunc = _getRowIdCallback(this.gos);\n    const userGeneratingIds = getRowIdFunc != null;\n    if (!userGeneratingIds) {\n      this.selectionService.reset(\"rowDataChanged\");\n    }\n    this.resetCache();\n  }\n  dispatchModelUpdatedEvent() {\n    this.eventService.dispatchEvent({\n      type: \"modelUpdated\",\n      // not sure if these should all be false - noticed if after implementing,\n      // maybe they should be true?\n      newPage: false,\n      newPageSize: false,\n      newData: false,\n      keepRenderedRows: true,\n      animate: false\n    });\n  }\n  resetCache() {\n    this.destroyCache();\n    this.cacheParams = {\n      // the user provided datasource\n      datasource: this.datasource,\n      // sort and filter model\n      filterModel: this.filterManager?.getFilterModel() ?? {},\n      sortModel: this.sortController.getSortModel(),\n      rowNodeBlockLoader: this.rowNodeBlockLoader,\n      // properties - this way we take a snapshot of them, so if user changes any, they will be\n      // used next time we create a new cache, which is generally after a filter or sort change,\n      // or a new datasource is set\n      initialRowCount: this.gos.get(\"infiniteInitialRowCount\"),\n      maxBlocksInCache: this.gos.get(\"maxBlocksInCache\"),\n      rowHeight: _getRowHeightAsNumber(this.gos),\n      // if user doesn't provide overflow, we use default overflow of 1, so user can scroll past\n      // the current page and request first row of next page\n      overflowSize: this.gos.get(\"cacheOverflowSize\"),\n      // page size needs to be 1 or greater. having it at 1 would be silly, as you would be hitting the\n      // server for one page at a time. so the default if not specified is 100.\n      blockSize: this.gos.get(\"cacheBlockSize\"),\n      // the cache could create this, however it is also used by the pages, so handy to create it\n      // here as the settings are also passed to the pages\n      lastAccessedSequence: new NumberSequence()\n    };\n    this.infiniteCache = this.createBean(new InfiniteCache(this.cacheParams));\n    this.eventService.dispatchEventOnce({\n      type: \"rowCountReady\"\n    });\n    this.dispatchModelUpdatedEvent();\n  }\n  updateRowHeights() {\n    this.forEachNode((node) => {\n      node.setRowHeight(this.rowHeight);\n      node.setRowTop(this.rowHeight * node.rowIndex);\n    });\n    this.dispatchModelUpdatedEvent();\n  }\n  destroyCache() {\n    if (this.infiniteCache) {\n      this.infiniteCache = this.destroyBean(this.infiniteCache);\n    }\n  }\n  onCacheUpdated() {\n    this.dispatchModelUpdatedEvent();\n  }\n  getRow(rowIndex) {\n    if (!this.infiniteCache) {\n      return void 0;\n    }\n    if (rowIndex >= this.infiniteCache.getRowCount()) {\n      return void 0;\n    }\n    return this.infiniteCache.getRow(rowIndex);\n  }\n  getRowNode(id) {\n    let result;\n    this.forEachNode((rowNode) => {\n      if (rowNode.id === id) {\n        result = rowNode;\n      }\n    });\n    return result;\n  }\n  forEachNode(callback) {\n    if (this.infiniteCache) {\n      this.infiniteCache.forEachNodeDeep(callback);\n    }\n  }\n  getTopLevelRowCount() {\n    return this.getRowCount();\n  }\n  getTopLevelRowDisplayedIndex(topLevelIndex) {\n    return topLevelIndex;\n  }\n  getRowIndexAtPixel(pixel) {\n    if (this.rowHeight !== 0) {\n      const rowIndexForPixel = Math.floor(pixel / this.rowHeight);\n      const lastRowIndex = this.getRowCount() - 1;\n      if (rowIndexForPixel > lastRowIndex) {\n        return lastRowIndex;\n      }\n      return rowIndexForPixel;\n    }\n    return 0;\n  }\n  getRowCount() {\n    return this.infiniteCache ? this.infiniteCache.getRowCount() : 0;\n  }\n  isRowPresent(rowNode) {\n    const foundRowNode = this.getRowNode(rowNode.id);\n    return !!foundRowNode;\n  }\n  refreshCache() {\n    if (this.infiniteCache) {\n      this.infiniteCache.refreshCache();\n    }\n  }\n  purgeCache() {\n    if (this.infiniteCache) {\n      this.infiniteCache.purgeCache();\n    }\n  }\n  // for iRowModel\n  isLastRowIndexKnown() {\n    if (this.infiniteCache) {\n      return this.infiniteCache.isLastRowIndexKnown();\n    }\n    return false;\n  }\n  setRowCount(rowCount, lastRowIndexKnown) {\n    if (this.infiniteCache) {\n      this.infiniteCache.setRowCount(rowCount, lastRowIndexKnown);\n    }\n  }\n};\nfunction refreshInfiniteCache(beans) {\n  beans.rowModelHelperService?.getInfiniteRowModel()?.refreshCache();\n}\nfunction purgeInfiniteCache(beans) {\n  beans.rowModelHelperService?.getInfiniteRowModel()?.purgeCache();\n}\nfunction getInfiniteRowCount(beans) {\n  return beans.rowModelHelperService?.getInfiniteRowModel()?.getRowCount();\n}\nvar VERSION4 = \"32.3.9\";\nvar InfiniteRowModelCoreModule = _defineModule({\n  version: VERSION4,\n  moduleName: `${\"@ag-grid-community/infinite-row-model\" /* InfiniteRowModelModule */}-core`,\n  rowModel: \"infinite\",\n  beans: [InfiniteRowModel],\n  dependantModules: [RowNodeBlockModule]\n});\nvar InfiniteRowModelApiModule = _defineModule({\n  version: VERSION4,\n  moduleName: `${\"@ag-grid-community/infinite-row-model\" /* InfiniteRowModelModule */}-api`,\n  beans: [RowModelHelperService],\n  apiFunctions: {\n    refreshInfiniteCache,\n    purgeInfiniteCache,\n    getInfiniteRowCount\n  },\n  dependantModules: [InfiniteRowModelCoreModule, SsrmInfiniteSharedApiModule]\n});\nvar InfiniteRowModelModule = _defineModule({\n  version: VERSION4,\n  moduleName: \"@ag-grid-community/infinite-row-model\" /* InfiniteRowModelModule */,\n  dependantModules: [InfiniteRowModelCoreModule, InfiniteRowModelApiModule]\n});\n\n// community-modules/theming/dist/package/main.esm.mjs\nvar createPartVariant = (part, variant) => new PartImpl(part.feature, variant, part.defaults, part.css);\nvar customPartCounter = 0;\nvar createPart = (feature, variant = `customPart${++customPartCounter}`) => /* @__PURE__ */ new PartImpl(feature, variant);\nvar PartImpl = class _PartImpl {\n  constructor(feature, variant, defaults = {}, css = []) {\n    this.feature = feature;\n    this.variant = variant;\n    this.defaults = defaults;\n    this.css = css;\n  }\n  get id() {\n    return this.feature ? `${this.feature}/${this.variant}` : this.variant;\n  }\n  withParams(params) {\n    const newParams = { ...this.defaults };\n    for (const [name, value] of Object.entries(params)) {\n      if (value != null) {\n        newParams[name] = value;\n      }\n    }\n    return new _PartImpl(this.feature, this.variant, newParams, this.css);\n  }\n  withAdditionalParams(defaults) {\n    return this.withParams(defaults);\n  }\n  withCSS(css) {\n    return new _PartImpl(this.feature, this.variant, this.defaults, this.css.concat(css));\n  }\n};\nvar coreCSS = (\n  /*css*/\n  `:where([class^=ag-]){box-sizing:border-box;outline:none;&:after,&:before,&:focus,&:focus-within{box-sizing:border-box;outline:none}&:where(button){background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;padding:0}&:where(button){font-weight:inherit}&::-ms-clear{display:none}}.ag-aria-description-container{border:0;z-index:9999;clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.ag-hidden{display:none!important}.ag-invisible{visibility:hidden!important}.ag-unselectable{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-selectable{-webkit-user-select:text;-moz-user-select:text;user-select:text}.ag-tab-guard{display:block;height:0;position:absolute;width:0}.ag-virtual-list-viewport .ag-tab-guard{position:sticky}.ag-tab-guard-top{top:1px}.ag-tab-guard-bottom{bottom:1px}.ag-shake-left-to-right{animation-direction:alternate;animation-duration:.2s;animation-iteration-count:infinite;animation-name:ag-shake-left-to-right}@keyframes ag-shake-left-to-right{0%{padding-left:6px;padding-right:2px}to{padding-left:2px;padding-right:6px}}.ag-watermark{bottom:20px;color:#9b9b9b;opacity:.7;position:absolute;right:25px;transition:opacity 1s ease-out 3s;&:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDkiIGhlaWdodD0iMzYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDkgMzYiPjxwYXRoIGZpbGw9IiM5QjlCOUIiIGQ9Ik0xOTIuOTkzIDIzLjY1OHYtNy45NDZoLTEzLjU0MWwtNy45NDcgNy45NDZ6TTIwOC4yNSAzLjk1aC0xNi45NzRsLTguMDEgNy45NDdoMjQuOTg0ek0xNjMuNjIyIDMxLjYwNWw0LjA2OS00LjA2OWgxMy43MzJ2Ny45NDdoLTE3LjgwMXoiLz48cGF0aCBmaWxsPSIjOUI5QjlCIiBkPSJNMTY2LjYxIDE5Ljc4aDguNzczbDguMDEtNy45NDZIMTY2LjYxek0xNTcuMDExIDMxLjYwNWg2LjYxMWw3Ljg4My03Ljk0N2gtMTQuNDk0ek0xOTEuMjc2IDMuOTVsLTQuMDY4IDQuMDdIMTYxLjI3Vi4wNzJoMzAuMDA2ek0yMC44NCAzMC4yMDZIOC4zNzhsLTIuMTYyIDUuMzRILjc1TDEyLjI1NyA4LjU5Mmg0Ljc2OEwyOC41MyAzNS41NDZoLTUuNTN6bS0xLjcxNy00LjI2TDE0LjYwOSAxNC45NWwtNC41MTQgMTAuOTk4ek0xMDQuNDM3IDE4LjUwOWMxLjU4OS0yLjM1MiA1LjU5NC0yLjYwNyA3LjI0Ny0yLjYwN3Y0LjU3OGMtMi4wMzQgMC00LjA2OS4wNjMtNS4yNzcuOTUzLTEuMjA3Ljg5LTEuODQzIDIuMDk4LTEuODQzIDMuNTZ2MTAuNTUzaC00Ljk1OVYxNS45MDJoNC43Njh6TTExOS4zNzYgMTUuOTAyaC00Ljk1OHYxOS42NDRoNC45NTh6TTExOS4zNzYgNy4xM2gtNC45NTh2NS44NDhoNC45NTh6TTE0My45NzkgNy4xM3YyOC40MTZoLTQuNzY4bC0uMTI3LTIuOTg4YTguMyA4LjMgMCAwIDEtMi42NyAyLjQ4Yy0xLjA4MS41NzItMi40MTYuODktMy45NDIuODktMS4zMzUgMC0yLjYwNi0uMjU1LTMuNjg3LS43LTEuMTQ0LS41MDgtMi4xNjItMS4xNDQtMi45ODgtMi4wMzRhOS42IDkuNiAwIDAgMS0xLjk3MS0zLjE3OWMtLjUwOC0xLjIwNy0uNjk5LTIuNjA2LS42OTktNC4xMzJzLjI1NC0yLjkyNC42OTktNC4xOTZjLjUwOS0xLjI3MSAxLjE0NS0yLjM1MiAxLjk3MS0zLjI0MnMxLjg0NC0xLjU4OSAyLjk4OC0yLjA5OCAyLjM1Mi0uNzYzIDMuNjg3LS43NjNjMS41MjYgMCAyLjc5Ny4yNTUgMy44NzguODI3czEuOTcxIDEuMzM1IDIuNjcgMi40MTZWNy4xOTNoNC45NTl6bS0xMC40MjYgMjQuNTM4YzEuNjUzIDAgMi45MjQtLjU3MiAzLjk0MS0xLjY1M3MxLjUyNi0yLjU0MyAxLjUyNi00LjMyMy0uNTA5LTMuMTc4LTEuNTI2LTQuMzIyYy0xLjAxNy0xLjA4MS0yLjI4OC0xLjY1My0zLjk0MS0xLjY1My0xLjU5IDAtMi45MjUuNTcyLTMuODc4IDEuNjUzLTEuMDE3IDEuMDgtMS41MjYgMi41NDMtMS41MjYgNC4zMjIgMCAxLjc4LjUwOSAzLjE4IDEuNTI2IDQuMjYgMS4wMTcgMS4xNDQgMi4yODggMS43MTYgMy44NzggMS43MTZNNTcuMjAyIDIwLjM1M0g0NC45MzN2NC4yNTloNi45OTNjLS4xOSAyLjE2MS0xLjAxNyAzLjgxNC0yLjQxNiA1LjE1LTEuMzk4IDEuMjctMy4xNzggMS45MDYtNS40NjcgMS45MDYtMS4yNzEgMC0yLjQ4LS4yNTQtMy40OTYtLjY5OWE3IDcgMCAwIDEtMi43MzQtMS45N2MtLjc2My0uODI3LTEuMzM1LTEuODQ0LTEuNzgtMy4wNTJzLS42MzYtMi40OC0uNjM2LTMuOTQyLjE5LTIuNzMzLjYzNi0zLjk0MWMuMzgxLTEuMjA4IDEuMDE3LTIuMTYyIDEuNzgtMy4wNTIuNzYzLS44MjYgMS42NTMtMS40NjIgMi43MzMtMS45N2E5LjEgOS4xIDAgMCAxIDMuNTYtLjdxNC4wMDUgMCA2LjEwMyAxLjkwN2wzLjMwNi0zLjMwNWMtMi40OC0xLjkwNy01LjY1OC0yLjkyNS05LjQwOS0yLjkyNS0yLjA5NyAwLTQuMDA0LjMxOC01LjcyMSAxLjAxOC0xLjcxNi42OTktMy4xNzkgMS41ODktNC4zODYgMi43OTdBMTIuMSAxMi4xIDAgMCAwIDMxLjIgMTYuMjJjLS42MzUgMS43MTctLjk1MyAzLjYyNC0uOTUzIDUuNjU4cy4zMTggMy45NDIgMS4wMTcgNS42NThjLjcgMS43MTcgMS41OSAzLjE3OSAyLjc5NyA0LjM4N2ExMi4xIDEyLjEgMCAwIDAgNC4zODcgMi43OTdjMS43MTYuNyAzLjYyMyAxLjAxNyA1LjY1NyAxLjAxNyAyLjAzNSAwIDMuODc4LS4zMTggNS41MzEtMS4wMTcgMS42NTMtLjcgMy4wNTItMS41OSA0LjE5Ni0yLjc5N3ExLjcxNi0xLjgxMiAyLjY3LTQuMzg3Yy42MzYtMS43MTYuOTU0LTMuNjIzLjk1NC01LjY1OHYtLjgyNmMtLjE5MS0uMTI3LS4yNTUtLjQ0NS0uMjU1LS43TTk1Ljk4MiAyMC4zNTNoLTEyLjI3djQuMjU5aDYuOTkzYy0uMTkgMi4xNjEtMS4wMTcgMy44MTQtMi40MTYgNS4xNS0xLjM5OCAxLjI3LTMuMTc4IDEuOTA2LTUuNDY3IDEuOTA2LTEuMjcxIDAtMi40OC0uMjU0LTMuNDk2LS42OTlhNyA3IDAgMCAxLTIuNzM0LTEuOTdjLS43NjMtLjgyNy0xLjMzNS0xLjg0NC0xLjc4LTMuMDUycy0uNjM2LTIuNDgtLjYzNi0zLjk0Mi4xOS0yLjczMy42MzYtMy45NDFjLjM4MS0xLjIwOCAxLjAxNy0yLjE2MiAxLjc4LTMuMDUyLjc2My0uODI2IDEuNjUzLTEuNDYyIDIuNzM0LTEuOTdhOS4xIDkuMSAwIDAgMSAzLjU2LS43cTQuMDA1IDAgNi4xMDMgMS45MDdsMy4zMDUtMy4zMDVjLTIuNDc5LTEuOTA3LTUuNjU4LTIuOTI1LTkuNDA4LTIuOTI1LTIuMDk4IDAtNC4wMDUuMzE4LTUuNzIyIDEuMDE4LTEuNzE2LjY5OS0zLjE3OCAxLjU4OS00LjM4NiAyLjc5N2ExMi4xIDEyLjEgMCAwIDAtMi43OTcgNC4zODZjLS42MzYgMS43MTctLjk1NCAzLjYyNC0uOTU0IDUuNjU4cy4zMTggMy45NDIgMS4wMTcgNS42NThjLjcgMS43MTcgMS41OSAzLjE3OSAyLjc5NyA0LjM4N2ExMi4xIDEyLjEgMCAwIDAgNC4zODcgMi43OTdjMS43MTYuNyAzLjYyMyAxLjAxNyA1LjY1OCAxLjAxNyAyLjAzNCAwIDMuODc4LS4zMTggNS41My0xLjAxNyAxLjY1My0uNyAzLjA1Mi0xLjU5IDQuMTk2LTIuNzk3cTEuNzE4LTEuODEyIDIuNjctNC4zODdjLjYzNi0xLjcxNi45NTQtMy42MjMuOTU0LTUuNjU4di0uODI2Yy0uMTktLjEyNy0uMjU1LS40NDUtLjI1NS0uNyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-size:170px 40px;content:\"\";display:block;height:40px;width:170px}}.ag-watermark-text{font-family:Impact,sans-serif;font-size:19px;font-weight:700;opacity:.5}.ag-ltr .ag-watermark-text{padding-left:.7rem}.ag-rtl .ag-watermark-text{padding-right:.7rem}.ag-body-horizontal-scroll-viewport,.ag-body-vertical-scroll-viewport,.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport,.ag-virtual-list-viewport{flex:1 1 auto;height:100%;min-width:0;overflow:hidden;position:relative}.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport{overflow-x:auto;-ms-overflow-style:none!important;scrollbar-width:none!important;&::-webkit-scrollbar{display:none!important}}.ag-body-viewport{display:flex;overflow-x:hidden;&.ag-layout-normal{overflow-y:auto;-webkit-overflow-scrolling:touch}}.ag-sticky-bottom-container,.ag-sticky-top-container{min-height:1px}.ag-center-cols-viewport{min-height:100%;width:100%}.ag-body-horizontal-scroll-viewport{overflow-x:scroll}.ag-body-vertical-scroll-viewport{overflow-y:scroll}.ag-virtual-list-viewport{overflow:auto;width:100%}.ag-body-container,.ag-body-horizontal-scroll-container,.ag-body-vertical-scroll-container,.ag-center-cols-container,.ag-floating-bottom-container,.ag-floating-bottom-full-width-container,.ag-floating-top-container,.ag-full-width-container,.ag-header-container,.ag-pinned-left-cols-container,.ag-pinned-right-cols-container,.ag-sticky-bottom-container,.ag-sticky-top-container,.ag-virtual-list-container{position:relative}.ag-floating-bottom-container,.ag-floating-top-container,.ag-header-container,.ag-sticky-bottom-container,.ag-sticky-top-container{height:100%;white-space:nowrap}.ag-center-cols-container,.ag-pinned-right-cols-container{display:block}.ag-body-horizontal-scroll-container{height:100%}.ag-body-vertical-scroll-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container,.ag-full-width-container,.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{pointer-events:none;position:absolute;top:0}.ag-ltr .ag-floating-bottom-full-width-container,.ag-ltr .ag-floating-top-full-width-container,.ag-ltr .ag-full-width-container,.ag-ltr .ag-sticky-bottom-full-width-container,.ag-ltr .ag-sticky-top-full-width-container{left:0}.ag-rtl .ag-floating-bottom-full-width-container,.ag-rtl .ag-floating-top-full-width-container,.ag-rtl .ag-full-width-container,.ag-rtl .ag-sticky-bottom-full-width-container,.ag-rtl .ag-sticky-top-full-width-container{right:0}.ag-full-width-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container{display:inline-block;height:100%;overflow:hidden;width:100%}.ag-virtual-list-container{overflow:hidden}.ag-body{display:flex;flex:1 1 auto;flex-direction:row!important;min-height:0;position:relative}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:flex;min-height:0;min-width:0;position:relative;&.ag-scrollbar-invisible{bottom:0;position:absolute;&.ag-apple-scrollbar{opacity:0;transition:opacity .4s;visibility:hidden;&.ag-scrollbar-active,&.ag-scrollbar-scrolling{opacity:1;visibility:visible}}}}.ag-body-horizontal-scroll{width:100%;&.ag-scrollbar-invisible{left:0;right:0}}.ag-body-vertical-scroll{height:100%;&.ag-scrollbar-invisible{top:0;z-index:10}}.ag-ltr .ag-body-vertical-scroll{&.ag-scrollbar-invisible{right:0}}.ag-rtl .ag-body-vertical-scroll{&.ag-scrollbar-invisible{left:0}}.ag-force-vertical-scroll{overflow-y:scroll!important}.ag-horizontal-left-spacer,.ag-horizontal-right-spacer{height:100%;min-width:0;overflow-x:scroll;&.ag-scroller-corner{overflow-x:hidden}}.ag-ltr .ag-column-moving{.ag-cell,.ag-header-cell{transition:left .2s}.ag-header-group-cell{transition:left .2s,width .2s}}.ag-rtl .ag-column-moving{.ag-cell,.ag-header-cell{transition:right .2s}.ag-header-group-cell{transition:right .2s,width .2s}}.ag-row-animation .ag-row{transition:transform .4s,top .4s,opacity .2s}.ag-row-animation .ag-row.ag-after-created{transition:transform .4s,top .4s,height .4s,opacity .2s}.ag-row-no-animation .ag-row{transition:none}.ag-row-loading{align-items:center;display:flex}.ag-row-position-absolute{position:absolute}.ag-row-position-relative{position:relative}.ag-full-width-row{overflow:hidden;pointer-events:all}.ag-row-inline-editing{z-index:1}.ag-row-dragging{z-index:2}.ag-stub-cell{align-items:center;display:flex}.ag-cell{display:inline-block;height:100%;position:absolute;white-space:nowrap}.ag-cell-value{flex:1 1 auto}.ag-cell-value,.ag-group-value{overflow:hidden;text-overflow:ellipsis}.ag-cell-wrap-text{white-space:normal;word-break:break-word}.ag-sparkline-wrapper{height:100%;left:0;position:absolute;top:0;width:100%}.ag-full-width-row .ag-cell-wrapper.ag-row-group{align-items:center;height:100%}.ag-cell .ag-icon{display:inline-block;vertical-align:middle}.ag-floating-top{border-bottom:var(--ag-pinned-row-border);display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}.ag-pinned-left-floating-top,.ag-pinned-right-floating-top{display:inline-block;min-width:0;overflow:hidden;position:relative}.ag-floating-bottom{border-top:var(--ag-pinned-row-border);display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}.ag-pinned-left-floating-bottom,.ag-pinned-right-floating-bottom{display:inline-block;min-width:0;overflow:hidden;position:relative}.ag-sticky-bottom,.ag-sticky-top{background-color:var(--ag-background-color);display:flex;height:0;overflow:hidden;position:absolute;width:100%}.ag-pinned-left-sticky-top,.ag-pinned-right-sticky-top{height:100%;overflow:hidden;position:relative}.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{height:100%;overflow:hidden;width:100%}.ag-value-slide-out{opacity:1}.ag-ltr .ag-value-slide-out{margin-right:5px;transition:opacity 3s,margin-right 3s}.ag-rtl .ag-value-slide-out{margin-left:5px;transition:opacity 3s,margin-left 3s}:is(.ag-ltr,.ag-rtl) .ag-value-slide-out{transition-timing-function:linear}.ag-value-slide-out-end{opacity:0}.ag-ltr .ag-value-slide-out-end{margin-right:10px}.ag-rtl .ag-value-slide-out-end{margin-left:10px}.ag-opacity-zero{opacity:0!important}.ag-details-row{width:100%}.ag-details-row-fixed-height{height:100%}.ag-details-grid{width:100%}.ag-details-grid-fixed-height{height:100%}.ag-cell-label-container{align-items:center;display:flex;flex-direction:row-reverse;height:100%;justify-content:space-between;width:100%}.ag-right-aligned-header{.ag-cell-label-container{flex-direction:row}.ag-header-cell-text{text-align:end}}.ag-column-group-icons{display:block;>*{cursor:pointer}}.ag-pill-select{display:flex;flex-direction:column;.ag-column-drop-list{padding:0}.ag-select{padding-top:var(--ag-spacing)}.ag-picker-field-wrapper{background-color:transparent;border:0}.ag-picker-field-display{cursor:pointer}}.ag-ltr{direction:ltr;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row}}.ag-rtl{direction:rtl;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row-reverse}.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{display:block}}.ag-rtl{.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(180deg)}}.ag-rtl{.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(-180deg)}}.ag-measurement-container{overflow:hidden;visibility:hidden;width:0;& div{position:absolute}}.ag-group{position:relative;width:100%}.ag-group-title-bar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-title{display:inline;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-group-title-bar .ag-group-title{cursor:default}.ag-group-toolbar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-container{display:flex}.ag-disabled .ag-group-container{pointer-events:none}.ag-disabled-group-container,.ag-disabled-group-title-bar{opacity:.5}.ag-group-container-horizontal{flex-direction:row;flex-wrap:wrap}.ag-group-container-vertical{flex-direction:column}.ag-group-title-bar-icon{cursor:pointer;flex:none}.ag-ltr .ag-group-title-bar-icon{margin-right:var(--ag-spacing)}.ag-rtl .ag-group-title-bar-icon{margin-left:var(--ag-spacing)}.ag-group-item-alignment-stretch .ag-group-item{align-items:stretch}.ag-group-item-alignment-start .ag-group-item{align-items:flex-start}.ag-group-item-alignment-end .ag-group-item{align-items:flex-end}.ag-popup-child{top:0;z-index:5;&:where(:not(.ag-tooltip-custom)){box-shadow:var(--ag-popup-shadow)}}.ag-popup-editor{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-large-text-input{display:block}.ag-rtl{text-align:right}.ag-ltr .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-left:var(--ag-row-group-indent-size)}.ag-rtl .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-right:var(--ag-row-group-indent-size)}.ag-ltr .ag-row-group-leaf-indent{margin-left:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}.ag-rtl .ag-row-group-leaf-indent{margin-right:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}.ag-value-change-delta{padding:0 2px}.ag-value-change-delta-up{color:var(--ag-value-change-delta-up-color)}.ag-value-change-delta-down{color:var(--ag-value-change-delta-down-color)}.ag-value-change-value{background-color:transparent;border-radius:1px;padding-left:1px;padding-right:1px;transition:background-color 1s}.ag-value-change-value-highlight{background-color:var(--ag-value-change-value-highlight-background-color);transition:background-color .1s}.ag-cell-data-changed{background-color:var(--ag-value-change-value-highlight-background-color)!important}.ag-cell-data-changed-animation{background-color:transparent}.ag-cell-highlight{background-color:var(--ag-range-selection-highlight-color)!important}.ag-row{background-color:var(--ag-background-color);border-bottom:var(--ag-row-border);color:var(--ag-cell-text-color);font-size:var(--ag-data-font-size);height:var(--ag-row-height);white-space:nowrap;width:100%;--ag-internal-content-line-height:min(calc(var(--ag-row-height) - 1px),var(--ag-line-height,1000px))}:where(.ag-body-vertical-content-no-gap) .ag-row-last{border-bottom-color:transparent}.ag-sticky-bottom{border-top:var(--ag-row-border);box-sizing:content-box!important;display:none}.ag-group-contracted,.ag-group-expanded{cursor:pointer}.ag-cell,.ag-full-width-row .ag-cell-wrapper.ag-row-group{border:1px solid transparent;line-height:var(--ag-internal-content-line-height)}.ag-ltr .ag-cell{border-right:var(--ag-column-border)}.ag-rtl .ag-cell{border-left:var(--ag-column-border)}.ag-ltr :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-right-color:transparent}.ag-rtl :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-left-color:transparent}.ag-cell-wrapper{align-items:center;display:flex;&.ag-row-group{align-items:flex-start}>:not(.ag-cell-value):not(.ag-group-value){align-items:center;display:flex;height:var(--ag-internal-content-line-height)}}.ag-ltr .ag-cell-wrapper{padding-left:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}.ag-rtl .ag-cell-wrapper{padding-right:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}.ag-ltr .ag-row>.ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-rtl .ag-row>.ag-cell-wrapper.ag-row-group{padding-right:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-ltr .ag-group-contracted,.ag-ltr .ag-group-expanded,.ag-ltr .ag-row-drag,.ag-ltr .ag-selection-checkbox{margin-right:var(--ag-cell-widget-spacing)}.ag-rtl .ag-group-contracted,.ag-rtl .ag-group-expanded,.ag-rtl .ag-row-drag,.ag-rtl .ag-selection-checkbox{margin-left:var(--ag-cell-widget-spacing)}.ag-ltr .ag-group-child-count{margin-left:3px}.ag-rtl .ag-group-child-count{margin-right:3px}.ag-row-highlight-above:after,.ag-row-highlight-below:after{background-color:var(--ag-range-selection-border-color);content:\"\";height:1px;position:absolute;width:calc(100% - 1px)}.ag-ltr .ag-row-highlight-above:after,.ag-ltr .ag-row-highlight-below:after{left:1px}.ag-rtl .ag-row-highlight-above:after,.ag-rtl .ag-row-highlight-below:after{right:1px}.ag-row-highlight-above:after{top:-1px}.ag-row-highlight-above.ag-row-first:after{top:0}.ag-row-highlight-below:after{bottom:0}.ag-row-odd{background-color:var(--ag-odd-row-background-color)}.ag-row-selected:before{background-color:var(--ag-selected-row-background-color);content:\"\";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-full-width-row.ag-row-group:before,.ag-row-hover:not(.ag-full-width-row):before{background-color:var(--ag-row-hover-color);content:\"\";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-row-selected:before{background-color:var(--ag-row-hover-color);background-image:linear-gradient(var(--ag-selected-row-background-color),var(--ag-selected-row-background-color))}.ag-row-hover.ag-full-width-row.ag-row-group>*{position:relative}.ag-column-hover{background-color:var(--ag-column-hover-color)}.ag-right-aligned-cell{font-variant-numeric:tabular-nums}.ag-ltr .ag-right-aligned-cell{text-align:right}.ag-rtl .ag-right-aligned-cell{text-align:left}.ag-right-aligned-cell .ag-cell-value,.ag-right-aligned-cell .ag-group-value{margin-left:auto}.ag-cell:not(.ag-cell-inline-editing),.ag-full-width-row .ag-cell-wrapper.ag-row-group{-webkit-font-smoothing:subpixel-antialiased}.ag-ltr .ag-cell:not(.ag-cell-inline-editing),.ag-ltr .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level));padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}.ag-rtl .ag-cell:not(.ag-cell-inline-editing),.ag-rtl .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-row>.ag-cell-wrapper{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}.ag-row-dragging{cursor:move;opacity:.5}.ag-details-row{background-color:var(--ag-background-color);padding:calc(var(--ag-spacing)*3.5)}.ag-layout-auto-height,.ag-layout-print{.ag-center-cols-container,.ag-center-cols-viewport{min-height:150px}}.ag-overlay-loading-wrapper{background-color:var(--ag-modal-overlay-background-color)}.ag-skeleton-container{align-content:center;height:100%;width:100%}.ag-skeleton-effect{animation:ag-skeleton-loading 1.5s ease-in-out .5s infinite;background-color:var(--ag-row-loading-skeleton-effect-color);border-radius:.25rem;height:1em;width:100%}.ag-ltr .ag-right-aligned-cell .ag-skeleton-effect{margin-left:auto}.ag-rtl .ag-right-aligned-cell .ag-skeleton-effect{margin-right:auto}@keyframes ag-skeleton-loading{0%{opacity:1}50%{opacity:.4}to{opacity:1}}.ag-loading{align-items:center;display:flex;height:100%}.ag-ltr .ag-loading{padding-left:var(--ag-cell-horizontal-padding)}.ag-rtl .ag-loading{padding-right:var(--ag-cell-horizontal-padding)}.ag-ltr .ag-loading-icon{padding-right:var(--ag-cell-widget-spacing)}.ag-rtl .ag-loading-icon{padding-left:var(--ag-cell-widget-spacing)}.ag-icon-loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:spin;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ag-details-row{padding:calc(var(--ag-spacing)*3.75)}.ag-pinned-left-header,.ag-pinned-right-header{display:inline-block;overflow:hidden;position:relative}.ag-body-horizontal-scroll:not(.ag-scrollbar-invisible){.ag-horizontal-left-spacer:not(.ag-scroller-corner){border-right:var(--ag-pinned-column-border)}.ag-horizontal-right-spacer:not(.ag-scroller-corner){border-left:var(--ag-pinned-column-border)}}.ag-pinned-right-header{border-left:var(--ag-pinned-column-border)}.ag-pinned-left-header{border-right:var(--ag-pinned-column-border)}.ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left):not(.ag-cell-range-single-cell){border-left:var(--ag-pinned-column-border)}.ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell){border-right:var(--ag-pinned-column-border)}.ag-pinned-left-header .ag-header-cell-resize:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}.ag-pinned-right-header .ag-header-cell-resize:after{left:50%}.ag-pinned-left-header,.ag-pinned-right-header{height:100%}.ag-pinned-left-header .ag-header-cell-resize{right:-3px}.ag-pinned-right-header .ag-header-cell-resize{left:-3px}.ag-body-viewport:not(.ag-has-focus) .ag-cell-range-single-cell:not(.ag-cell-inline-editing),.ag-cell-range-selected:not(.ag-cell-focus){background-color:var(--ag-range-selection-background-color);&.ag-cell-range-chart{background-color:var(--ag-range-selection-chart-background-color)!important;&.ag-cell-range-chart-category{background-color:var(--ag-range-selection-chart-category-background-color)!important}}}.ag-cell-range-selected-1:not(.ag-cell-focus),.ag-root:not(.ag-context-menu-open) .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-1:not(.ag-cell-inline-editing){background-color:var(--ag-range-selection-background-color)}.ag-cell-range-selected-2:not(.ag-cell-focus){background-image:linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color))}.ag-cell-range-selected-3:not(.ag-cell-focus){background-image:linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color)),linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color))}.ag-cell-range-selected-4:not(.ag-cell-focus){background-image:linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color)),linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color)),linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color))}.ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell){&.ag-cell-range-top{border-top-color:var(--ag-range-selection-border-color);border-top-style:var(--ag-range-selection-border-style)}&.ag-cell-range-right{border-right-color:var(--ag-range-selection-border-color);border-right-style:var(--ag-range-selection-border-style)}&.ag-cell-range-bottom{border-bottom-color:var(--ag-range-selection-border-color);border-bottom-style:var(--ag-range-selection-border-style)}&.ag-cell-range-left{border-left-color:var(--ag-range-selection-border-color);border-left-style:var(--ag-range-selection-border-style)}}.ag-ltr,.ag-rtl{.ag-cell-focus:not(.ag-cell-range-selected):focus-within,.ag-cell-range-single-cell,.ag-cell-range-single-cell.ag-cell-range-handle,.ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),.ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group{border:1px solid;border-color:var(--ag-range-selection-border-color);border-style:var(--ag-range-selection-border-style);outline:initial}}.ag-cell.ag-selection-fill-top,.ag-cell.ag-selection-fill-top.ag-cell-range-selected{border-top:1px dashed;border-top-color:var(--ag-range-selection-border-color)}.ag-ltr .ag-cell.ag-selection-fill-right,.ag-ltr .ag-cell.ag-selection-fill-right.ag-cell-range-selected{border-right:1px dashed var(--ag-range-selection-border-color)!important}.ag-rtl .ag-cell.ag-selection-fill-right,.ag-rtl .ag-cell.ag-selection-fill-right.ag-cell-range-selected{border-left:1px dashed var(--ag-range-selection-border-color)!important}.ag-cell.ag-selection-fill-bottom,.ag-cell.ag-selection-fill-bottom.ag-cell-range-selected{border-bottom:1px dashed;border-bottom-color:var(--ag-range-selection-border-color)}.ag-ltr .ag-cell.ag-selection-fill-left,.ag-ltr .ag-cell.ag-selection-fill-left.ag-cell-range-selected{border-left:1px dashed var(--ag-range-selection-border-color)!important}.ag-rtl .ag-cell.ag-selection-fill-left,.ag-rtl .ag-cell.ag-selection-fill-left.ag-cell-range-selected{border-right:1px dashed var(--ag-range-selection-border-color)!important}.ag-fill-handle,.ag-range-handle{background-color:var(--ag-range-selection-border-color);bottom:-1px;height:6px;position:absolute;width:6px}.ag-ltr .ag-fill-handle,.ag-ltr .ag-range-handle{right:-1px}.ag-rtl .ag-fill-handle,.ag-rtl .ag-range-handle{left:-1px}.ag-fill-handle{cursor:cell}.ag-ltr .ag-range-handle{cursor:nwse-resize}.ag-rtl .ag-range-handle{cursor:nesw-resize}.ag-cell-inline-editing{border:var(--ag-input-focus-border)!important}.ag-input-wrapper,.ag-picker-field-wrapper{align-items:center;display:flex;flex:1 1 auto;line-height:normal;position:relative}.ag-input-field{align-items:center;display:flex;flex-direction:row}.ag-input-field-input{flex:1 1 auto}.ag-floating-filter-input .ag-input-field-input[type=date]{width:1px}.ag-input-field-input{min-width:0;width:100%}.ag-column-select-header-filter-wrapper,.ag-filter-filter,.ag-filter-toolpanel-search,.ag-mini-filter{.ag-input-wrapper:before{background-color:currentColor;content:\"\";display:block;height:12px;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==\");mask-image:url(\"data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;opacity:50%;position:absolute;width:12px}}.ag-ltr .ag-column-select-header-filter-wrapper,.ag-ltr .ag-filter-filter,.ag-ltr .ag-filter-toolpanel-search,.ag-ltr .ag-mini-filter{.ag-input-wrapper:before{margin-left:var(--ag-spacing)}& input.ag-number-field-input,& input.ag-text-field-input{padding-left:calc(var(--ag-spacing)*1.5 + 12px)}}.ag-rtl .ag-column-select-header-filter-wrapper,.ag-rtl .ag-filter-filter,.ag-rtl .ag-filter-toolpanel-search,.ag-rtl .ag-mini-filter{.ag-input-wrapper:before{margin-right:var(--ag-spacing)}& input.ag-number-field-input,& input.ag-text-field-input{padding-right:calc(var(--ag-spacing)*1.5 + 12px)}}.ag-advanced-filter-header{align-items:center;background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);display:flex;padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding);position:relative}.ag-advanced-filter{align-items:center;display:flex;width:100%}.ag-advanced-filter-apply-button,.ag-advanced-filter-builder-button{line-height:normal;white-space:nowrap}.ag-ltr .ag-advanced-filter-apply-button,.ag-ltr .ag-advanced-filter-builder-button{margin-left:calc(var(--ag-spacing)*2)}.ag-rtl .ag-advanced-filter-apply-button,.ag-rtl .ag-advanced-filter-builder-button{margin-right:calc(var(--ag-spacing)*2)}.ag-advanced-filter-builder-button{align-items:center;background-color:unset;border:0;display:flex;font-size:var(--ag-font-size);font-weight:600;padding:var(--ag-spacing);&:hover:not(:disabled){background-color:var(--ag-row-hover-color)}&:not(:disabled){cursor:pointer}}.ag-ltr .ag-advanced-filter-builder-button-label{margin-left:var(--ag-spacing)}.ag-rtl .ag-advanced-filter-builder-button-label{margin-right:var(--ag-spacing)}.ag-advanced-filter-builder{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ag-advanced-filter-builder-list{flex:1;overflow:auto}.ag-advanced-filter-builder-button-panel{border-top:var(--ag-advanced-filter-builder-button-bar-border);display:flex;justify-content:flex-end;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}.ag-ltr .ag-advanced-filter-builder .ag-advanced-filter-builder-button-panel{.ag-advanced-filter-builder-apply-button,.ag-advanced-filter-builder-cancel-button{margin-left:calc(var(--ag-spacing)*2)}}.ag-rtl .ag-advanced-filter-builder .ag-advanced-filter-builder-button-panel{.ag-advanced-filter-builder-apply-button,.ag-advanced-filter-builder-cancel-button{margin-right:calc(var(--ag-spacing)*2)}}.ag-advanced-filter-builder-item-wrapper{align-items:center;display:flex;flex:1 1 auto;justify-content:space-between;overflow:hidden}.ag-ltr .ag-advanced-filter-builder-item-wrapper{padding-left:calc(var(--ag-icon-size)/2);padding-right:var(--ag-icon-size)}.ag-rtl .ag-advanced-filter-builder-item-wrapper{padding-left:var(--ag-icon-size);padding-right:calc(var(--ag-icon-size)/2)}.ag-virtual-list-viewport .ag-advanced-filter-builder-item-wrapper .ag-tab-guard{position:absolute}.ag-advanced-filter-builder-item-tree-lines>*{width:var(--ag-advanced-filter-builder-indent-size)}.ag-advanced-filter-builder-item-tree-lines .ag-advanced-filter-builder-item-tree-line-root{width:var(--ag-icon-size);&:before{height:50%;top:50%}}.ag-advanced-filter-builder-item-tree-line-horizontal,.ag-advanced-filter-builder-item-tree-line-vertical,.ag-advanced-filter-builder-item-tree-line-vertical-bottom,.ag-advanced-filter-builder-item-tree-line-vertical-top{align-items:center;display:flex;height:100%;position:relative;&:after,&:before{content:\"\";height:100%;position:absolute}}.ag-advanced-filter-builder-item-tree-line-horizontal:after{border-bottom:1px solid var(--ag-border-color);height:50%;top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size))}.ag-ltr .ag-advanced-filter-builder-item-tree-line-horizontal:after{left:calc(var(--ag-icon-size)/2)}.ag-rtl .ag-advanced-filter-builder-item-tree-line-horizontal:after{right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical:before{top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size)/2)}.ag-ltr .ag-advanced-filter-builder-item-tree-line-vertical:before{border-left:1px solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}.ag-rtl .ag-advanced-filter-builder-item-tree-line-vertical:before{border-right:1px solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical-top:before{height:50%;top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size)/2)}.ag-ltr .ag-advanced-filter-builder-item-tree-line-vertical-top:before{border-left:1px solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}.ag-rtl .ag-advanced-filter-builder-item-tree-line-vertical-top:before{border-right:1px solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{height:calc(50% - var(--ag-icon-size)*1.5/2);top:calc(50% + var(--ag-icon-size)*1.5/2);width:calc(var(--ag-icon-size)/2)}.ag-ltr .ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{border-left:1px solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}.ag-rtl .ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{border-right:1px solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-condition{padding-bottom:var(--ag-spacing);padding-top:var(--ag-spacing)}.ag-advanced-filter-builder-item,.ag-advanced-filter-builder-item-buttons,.ag-advanced-filter-builder-item-condition,.ag-advanced-filter-builder-item-tree-lines,.ag-advanced-filter-builder-pill,.ag-advanced-filter-builder-pill-wrapper{align-items:center;display:flex;height:100%}.ag-advanced-filter-builder-pill-wrapper{margin:0 var(--ag-spacing)}.ag-advanced-filter-builder-pill{border-radius:var(--ag-border-radius);min-height:calc(100% - var(--ag-spacing)*3);min-width:calc(var(--ag-spacing)*2);padding:var(--ag-spacing) calc(var(--ag-spacing)*2);position:relative;.ag-advanced-filter-builder-value-number{font-family:monospace;font-weight:700}.ag-advanced-filter-builder-value-empty{color:var(--ag-subtle-text-color)}}.ag-ltr .ag-advanced-filter-builder-pill{.ag-picker-field-display{margin-right:var(--ag-spacing)}}.ag-rtl .ag-advanced-filter-builder-pill{.ag-picker-field-display{margin-left:var(--ag-spacing)}}.ag-advanced-filter-builder-item-button,.ag-advanced-filter-builder-pill{&:focus-visible{shadow:var(--ag-focus-shadow)}}.ag-advanced-filter-builder-pill-display{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-advanced-filter-builder-join-pill{background-color:var(--ag-advanced-filter-builder-join-pill-color);cursor:pointer}.ag-advanced-filter-builder-column-pill{background-color:var(--ag-advanced-filter-builder-column-pill-color);cursor:pointer}.ag-advanced-filter-builder-option-pill{background-color:var(--ag-advanced-filter-builder-option-pill-color);cursor:pointer}.ag-advanced-filter-builder-value-pill{background-color:var(--ag-advanced-filter-builder-value-pill-color);cursor:text;max-width:140px;.ag-advanced-filter-builder-pill-display{display:block}}.ag-advanced-filter-builder-item-buttons>*{margin:0 calc(var(--ag-spacing)*.5)}.ag-advanced-filter-builder-item-button{color:var(--ag-subtle-text-color);cursor:pointer;position:relative}.ag-advanced-filter-builder-item-button-disabled{cursor:default;opacity:.5}.ag-advanced-filter-builder-virtual-list-container{top:var(--ag-spacing)}.ag-advanced-filter-builder-virtual-list-item{cursor:default;display:flex;height:var(--ag-list-item-height);&:hover{background-color:var(--ag-row-hover-color);.ag-advanced-filter-builder-item-button{opacity:100%}}}.ag-advanced-filter-builder-validation .ag-advanced-filter-builder-invalid,.ag-advanced-filter-builder-virtual-list-item-highlight .ag-advanced-filter-builder-item-button:focus-visible{opacity:100%}.ag-advanced-filter-builder-invalid{color:var(--ag-invalid-color);cursor:default;margin:0 var(--ag-spacing)}.ag-cell-inline-editing{border-radius:var(--ag-border-radius);padding:0;z-index:1;.ag-cell-edit-wrapper,.ag-cell-editor,.ag-cell-editor .ag-wrapper,.ag-cell-editor input,.ag-cell-wrapper{height:100%;line-height:normal;width:100%}}.ag-autocomplete-list-popup,.ag-popup-editor .ag-large-text{background-color:var(--ag-background-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);padding:0}.ag-large-text-input{height:auto;padding:var(--ag-cell-horizontal-padding)}.ag-rtl .ag-large-text-input textarea{resize:none}.ag-checkbox-edit{padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding)}.ag-chart{display:flex;height:100%;position:relative;width:100%}.ag-chart-components-wrapper{display:flex}.ag-chart-canvas-wrapper,.ag-chart-components-wrapper{flex:1 1 auto;position:relative}.ag-chart-menu{display:flex;flex-direction:column;position:absolute;top:16px}.ag-ltr .ag-chart-menu{right:20px}.ag-rtl .ag-chart-menu{left:20px}.ag-chart-docked-container{min-width:var(--ag-chart-menu-panel-width);position:relative}.ag-chart-menu-hidden~.ag-chart-docked-container{display:none}.ag-chart-tabbed-menu{display:flex;flex-direction:column;height:100%;overflow:hidden;width:100%}.ag-chart-tabbed-menu-header{cursor:default;flex:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-chart-tabbed-menu-body{align-items:stretch;display:flex;flex:1 1 auto;overflow:hidden}.ag-chart-tab{overflow:hidden;overflow-y:auto;width:100%}.ag-chart-settings{overflow-x:hidden}.ag-chart-settings-wrapper{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;width:100%}.ag-chart-settings-nav-bar{align-items:center;display:flex;height:30px;padding:0 10px;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ag-chart-settings-card-selector{align-items:center;display:flex;flex:1 1 auto;height:100%;justify-content:space-around;padding:0 10px}.ag-chart-settings-card-item{background-color:var(--ag-foreground-color);border-radius:4px;cursor:pointer;height:10px;height:8px;position:relative;width:10px;width:8px;&.ag-not-selected{opacity:.2}&:before{background-color:transparent;content:\" \";display:block;height:20px;left:50%;margin-left:-10px;margin-top:-10px;position:absolute;top:50%;width:20px}&.ag-selected{background-color:var(--ag-accent-color)}}.ag-chart-settings-next,.ag-chart-settings-prev{flex:none;position:relative;&:focus-within{border-radius:1px;box-shadow:var(--ag-focus-shadow)}}.ag-chart-settings-next-button,.ag-chart-settings-prev-button{cursor:pointer;height:100%;left:0;opacity:0;position:absolute;top:0;width:100%}.ag-chart-settings-mini-charts-container{flex:1 1 auto;overflow-x:hidden;overflow-y:auto;position:relative}.ag-chart-settings-mini-wrapper{display:flex;flex-direction:column;left:0;min-height:100%;overflow:hidden;position:absolute;top:0;width:100%;&.ag-animating{transition:left .3s;transition-timing-function:ease-in-out}}.ag-chart-mini-thumbnail{cursor:pointer}.ag-chart-mini-thumbnail-canvas{display:block}.ag-chart-advanced-settings-wrapper,.ag-chart-data-wrapper,.ag-chart-format-wrapper{display:flex;flex-direction:column;padding-bottom:16px;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-chart-advanced-settings-wrapper,.ag-chart-data-wrapper{height:100%;overflow-y:auto}.ag-chart-advanced-settings{background-color:var(--ag-chrome-background-color)}.ag-chart-advanced-settings,.ag-chart-advanced-settings-wrapper{width:100%}.ag-chart-advanced-settings-wrapper{padding-bottom:0}.ag-chart-advanced-settings-section,.ag-chart-data-section,.ag-chart-format-section{display:flex;margin:0}.ag-chart-advanced-settings-section{border-bottom:1px solid var(--ag-border-color)}.ag-chart-empty-text{align-items:center;background-color:var(--ag-background-color);display:flex;height:100%;justify-content:center;top:0;width:100%}.ag-chart .ag-chart-menu{display:none}.ag-chart-menu-hidden:hover .ag-chart-menu{display:block}.ag-chart{.ag-chart-menu-wrapper{.ag-chart-menu{display:flex;flex-direction:row;gap:20px;top:8px;width:auto}}}.ag-ltr .ag-chart{.ag-chart-menu-wrapper{.ag-chart-menu{justify-content:right;right:calc(var(--ag-cell-horizontal-padding) + var(--ag-spacing) - 4px)}}}.ag-rtl .ag-chart{.ag-chart-menu-wrapper{.ag-chart-menu{justify-content:left;left:calc(var(--ag-cell-horizontal-padding) + var(--ag-spacing) - 4px)}}}.ag-charts-font-size-color{align-self:stretch;display:flex;justify-content:space-between}.ag-charts-data-group-item{position:relative}.ag-charts-data-group-item:not(:last-child){margin-bottom:var(--ag-spacing)}.ag-chart-menu{background:var(--ag-background-color);border-radius:var(--ag-border-radius)}.ag-chart-menu-icon{border-radius:var(--ag-border-radius);cursor:pointer;margin:2px 0;opacity:.5;opacity:.8;&:hover{opacity:1}}.ag-chart-menu-toolbar-button{background-color:unset;border:0;border-radius:1px;padding:0 2px}.ag-chart-mini-thumbnail{border:1px solid var(--ag-border-color);border-radius:5px;&.ag-selected{border-color:var(--ag-accent-color);border-width:2px}&:focus-visible{border-color:var(--ag-accent-color);box-shadow:var(--ag-focus-shadow)}}.ag-chart-data-column-drag-handle{margin-left:var(--ag-spacing)}.ag-charts-data-group-title-bar,.ag-charts-format-top-level-group-title-bar,.ag-charts-settings-group-title-bar{position:relative}.ag-charts-advanced-settings-top-level-group-title-bar{background-color:unset;position:relative}.ag-charts-advanced-settings-top-level-group-title-bar:focus-visible,.ag-charts-data-group-title-bar:focus-visible,.ag-charts-format-top-level-group-title-bar:focus-visible,.ag-charts-settings-group-title-bar:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-charts-data-group-container{padding:calc(var(--ag-widget-container-vertical-padding)*.5) var(--ag-widget-container-horizontal-padding);.ag-charts-data-group-item:not(.ag-charts-format-sub-level-group):not(.ag-pill-select):not(.ag-select){height:var(--ag-list-item-height)}.ag-charts-data-group-item.ag-picker-field{margin-top:var(--ag-spacing)}}.ag-charts-advanced-settings-top-level-group-container,.ag-charts-format-top-level-group-container{margin-left:calc(var(--ag-spacing)*2);padding:var(--ag-spacing)}.ag-charts-advanced-settings-top-level-group-item,.ag-charts-format-top-level-group-item{margin:var(--ag-spacing) 0}.ag-charts-format-sub-level-group-container{display:flex;flex-direction:column;gap:var(--ag-widget-vertical-spacing);padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}.ag-charts-settings-group-container{display:grid;grid-template-columns:60px 1fr 60px 1fr 60px;padding:var(--ag-spacing);row-gap:8px;.ag-chart-mini-thumbnail:nth-child(3n+1){grid-column:1}.ag-chart-mini-thumbnail:nth-child(3n+2){grid-column:3}.ag-chart-mini-thumbnail:nth-child(3n+3){grid-column:5}}.ag-chart-data-section,.ag-chart-format-section{display:flex;margin:0}.ag-chart-menu-panel{background-color:var(--ag-chrome-background-color)}.ag-ltr .ag-chart-menu-panel{border-left:1px solid var(--ag-border-color)}.ag-rtl .ag-chart-menu-panel{border-right:1px solid var(--ag-border-color)}.ag-chart-tabbed-menu-body{position:relative;&:after{background:linear-gradient(var(--ag-background-color),transparent);content:\"\";display:block;height:16px;left:0;position:absolute;right:0;top:0}}.ag-charts-data-group-title-bar,.ag-charts-format-top-level-group-title-bar,.ag-charts-settings-group-container,.ag-charts-settings-group-title-bar{border-top:none;font-weight:500;padding:0 calc(var(--ag-spacing)*1.5)}.ag-chart-settings-nav-bar{border-top:1px solid var(--ag-border-color)}.ag-charts-format-sub-level-group-title-bar{background:none;font-weight:500}.ag-chart-data-section,.ag-chart-format-section{.ag-label:not(.ag-group-title-bar){color:var(--ag-chart-menu-label-color)}.ag-label-align-top .ag-label{margin-bottom:var(--ag-widget-vertical-spacing);margin-top:calc(var(--ag-widget-vertical-spacing)*.5)}.ag-slider.ag-label-align-top .ag-label{margin-bottom:0}& label{display:inline-block}}.ag-chart-data-wrapper,.ag-chart-format-wrapper,.ag-charts-data-group-container,.ag-charts-data-group-title-bar,.ag-charts-format-sub-level-group,.ag-charts-format-sub-level-group-container,.ag-charts-format-sub-level-group-container>*,.ag-charts-format-sub-level-group-item:last-child,.ag-charts-format-sub-level-group-title-bar,.ag-charts-format-top-level-group,.ag-charts-format-top-level-group .ag-charts-format-top-level-group-container,.ag-charts-format-top-level-group-item,.ag-charts-format-top-level-group-title-bar,.ag-charts-settings-group-container,.ag-charts-settings-group-title-bar{margin:0;padding:0}.ag-charts-data-group,.ag-charts-format-top-level-group{border-top:1px solid var(--ag-border-color)}.ag-charts-data-group-title-bar,.ag-charts-format-top-level-group-title-bar,.ag-charts-settings-group-title-bar{padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}.ag-charts-data-group .ag-charts-data-group-container,.ag-charts-format-top-level-group .ag-charts-format-top-level-group-container,.ag-charts-settings-group .ag-charts-settings-group-container{padding:0 var(--ag-widget-container-horizontal-padding)}.ag-charts-format-sub-level-group-title-bar{padding:var(--ag-widget-vertical-spacing) 0}.ag-charts-format-sub-level-group-container{padding-bottom:var(--ag-widget-container-vertical-padding);padding-top:var(--ag-widget-vertical-spacing)}.ag-charts-format-sub-level-group-container>*,.ag-charts-format-sub-level-no-header-group-container>*,.ag-charts-format-top-level-group-container>*{margin-bottom:var(--ag-widget-vertical-spacing)}.ag-chart-advanced-settings-section,.ag-chart-settings-mini-wrapper,.ag-charts-data-group-item{padding-bottom:var(--ag-widget-container-vertical-padding)}.ag-chart-advanced-settings-section{padding-top:var(--ag-widget-container-vertical-padding)}.ag-charts-advanced-settings-top-level-group{.ag-charts-advanced-settings-top-level-group-container,.ag-charts-advanced-settings-top-level-group-title-bar{padding:0 var(--ag-widget-container-horizontal-padding)}}.ag-charts-advanced-settings-top-level-group-container{margin:0}.ag-charts-advanced-settings-top-level-group-item{margin-bottom:0;margin-top:calc(var(--ag-widget-vertical-spacing)*2)}.ag-chart-menu{--ag-icon-size:20px;background-color:color-mix(in srgb,transparent,var(--ag-background-color) 30%);padding:4px 2px}.ag-chart-settings-card-item.ag-not-selected:hover{opacity:.35}.ag-column-drop{align-items:center;display:inline-flex;overflow:auto;position:relative;width:100%}.ag-column-drop-cell,.ag-column-drop-list{align-items:center;display:flex}.ag-column-drop-cell{gap:var(--ag-spacing);position:relative}.ag-column-drop-cell-text{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-column-drop-vertical{align-items:stretch;display:flex;flex-direction:column;overflow:hidden}.ag-column-drop-vertical-title-bar{align-items:center;display:flex;flex:none}.ag-column-drop-vertical-list{align-items:stretch;flex-direction:column;flex-grow:1;overflow-x:auto;position:relative;>*{flex:none}}.ag-column-drop-empty .ag-column-drop-vertical-list{overflow:hidden}.ag-column-drop-vertical-empty-message{display:block}.ag-column-drop.ag-column-drop-horizontal{overflow:hidden;white-space:nowrap}.ag-column-drop-cell-button{cursor:pointer}.ag-column-drop-wrapper{display:flex}.ag-column-drop-horizontal-half-width{width:50%!important}.ag-column-drop-cell{background:var(--ag-column-drop-cell-background-color);border:var(--ag-column-drop-cell-border);border-radius:500px;padding:calc(var(--ag-spacing)*.5);&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-ltr .ag-column-drop-cell{padding-left:calc(var(--ag-spacing)*.75)}.ag-rtl .ag-column-drop-cell{padding-right:calc(var(--ag-spacing)*.75)}.ag-column-drop-cell-button{min-width:calc(var(--ag-spacing)*4)}.ag-column-drop-cell-ghost{opacity:.5}.ag-column-drop-horizontal{gap:var(--ag-cell-widget-spacing);height:var(--ag-header-height)}.ag-ltr .ag-column-drop-horizontal{padding-left:var(--ag-cell-horizontal-padding)}.ag-rtl .ag-column-drop-horizontal{padding-right:var(--ag-cell-horizontal-padding)}.ag-column-drop-horizontal-list{gap:var(--ag-cell-widget-spacing)}.ag-column-drop-vertical-list{padding-bottom:var(--ag-spacing);padding-left:var(--ag-spacing);padding-right:var(--ag-spacing)}.ag-column-drop-vertical-cell{margin-top:var(--ag-spacing)}.ag-ltr .ag-column-drop-vertical-icon{margin-right:var(--ag-widget-horizontal-spacing)}.ag-rtl .ag-column-drop-vertical-icon{margin-left:var(--ag-widget-horizontal-spacing)}.ag-column-drop-vertical-empty-message{bottom:0;left:0;margin-top:var(--ag-spacing);overflow:hidden;position:absolute;right:0;top:0}.ag-select-agg-func-popup{background:var(--ag-background-color);border:1px solid var(--ag-border-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);height:calc(var(--ag-spacing)*5*3.5);padding:0;position:absolute}.ag-select-agg-func-virtual-list-item{cursor:default;&:hover{background-color:var(--ag-selected-row-background-color)}&:focus-visible{shadow:var(--ag-focus-shadow)}}.ag-ltr .ag-select-agg-func-virtual-list-item{padding-left:calc(var(--ag-spacing)*2)}.ag-rtl .ag-select-agg-func-virtual-list-item{padding-right:calc(var(--ag-spacing)*2)}.ag-sort-indicator-container{display:contents}.ag-ltr .ag-sort-indicator-icon{padding-left:var(--ag-spacing)}.ag-rtl .ag-sort-indicator-icon{padding-right:var(--ag-spacing)}.ag-column-drop-horizontal{background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border)}.ag-ltr .ag-column-drop-horizontal-half-width:not(:last-child){border-right:var(--ag-column-border)}.ag-rtl .ag-column-drop-horizontal-half-width:not(:last-child){border-left:var(--ag-column-border)}.ag-column-drop-cell-button{min-width:0;opacity:.75;&:hover{opacity:1}}.ag-column-drop-vertical{min-height:75px}.ag-column-drop-vertical-title-bar{padding:var(--ag-widget-container-vertical-padding) calc(var(--ag-spacing)*2) 0}.ag-column-drop-vertical-empty-message{align-items:center;border:1px dashed;border-color:var(--ag-border-color);display:flex;justify-content:center;margin:calc(var(--ag-spacing)*1.5) calc(var(--ag-spacing)*2);padding:calc(var(--ag-spacing)*2)}.ag-column-select{display:flex;flex:3 1 0px;flex-direction:column;overflow:hidden;position:relative}.ag-column-select-header{flex:none;height:var(--ag-header-height);padding-left:var(--ag-widget-container-horizontal-padding);padding-right:var(--ag-widget-container-horizontal-padding)}.ag-column-select-column,.ag-column-select-column-group,.ag-column-select-header{align-items:center;display:flex;gap:var(--ag-widget-horizontal-spacing);position:relative}.ag-column-select-column,.ag-column-select-column-group{height:100%}.ag-column-select-virtual-list-item:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-column-select-header-icon{border-radius:var(--ag-border-radius);cursor:pointer;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-column-select-header-filter-wrapper{flex:1 1 auto}.ag-column-select-header-filter{width:100%}.ag-column-select-list{flex:1 1 0px;overflow:hidden}.ag-ltr .ag-column-select-column,.ag-ltr .ag-column-select-column-group{padding-left:calc(var(--ag-indentation-level)*var(--ag-column-select-indent-size))}.ag-rtl .ag-column-select-column,.ag-rtl .ag-column-select-column-group{padding-right:calc(var(--ag-indentation-level)*var(--ag-column-select-indent-size))}.ag-ltr .ag-column-select-add-group-indent{margin-left:calc(var(--ag-icon-size) + var(--ag-spacing)*1.5)}.ag-rtl .ag-column-select-add-group-indent{margin-right:calc(var(--ag-icon-size) + var(--ag-spacing)*1.5)}.ag-column-select-column,.ag-column-select-column-group{&:not(:last-child){margin-bottom:var(--ag-widget-vertical-spacing)}}.ag-column-select-column-group-readonly,.ag-column-select-column-readonly{opacity:.5;pointer-events:none}.ag-column-select-virtual-list-viewport{padding:calc(var(--ag-widget-container-vertical-padding)*.5) 0}.ag-column-select-virtual-list-item{padding:0 var(--ag-widget-container-horizontal-padding)}.ag-column-select-column-label{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-column-select-checkbox{display:flex}.ag-set-filter{--ag-indentation-level:0}.ag-set-filter-item{align-items:center;display:flex;height:100%}.ag-set-filter-item-checkbox{display:flex;height:100%;width:100%}.ag-set-filter-group-icons{display:block;>*{cursor:pointer}}.ag-filter-body-wrapper{display:flex;flex-direction:column}.ag-filter-filter{flex:1 1 0px}.ag-filter-condition{display:flex;justify-content:center}.ag-floating-filter-body{display:flex;flex:1 1 auto;height:100%;position:relative}.ag-floating-filter-full-body{align-items:center;display:flex;flex:1 1 auto;height:100%;overflow:hidden;width:100%}.ag-floating-filter-full-body>div{flex:1 1 auto}.ag-floating-filter-input{align-items:center;display:flex;width:100%;>*{flex:1 1 auto}}.ag-floating-filter-button{display:flex;flex:none}.ag-set-floating-filter-input input[disabled]{pointer-events:none}.ag-floating-filter-button-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;height:var(--ag-icon-size);width:var(--ag-icon-size)}.ag-filter-loading{height:100%;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);position:absolute;width:100%;z-index:1}.ag-column-panel{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.ag-pivot-mode-panel{display:flex;height:var(--ag-header-height)}.ag-pivot-mode-select{align-items:center;display:flex}.ag-ltr .ag-pivot-mode-select{margin-left:var(--ag-widget-container-horizontal-padding)}.ag-rtl .ag-pivot-mode-select{margin-right:var(--ag-widget-container-horizontal-padding)}.ag-column-panel-column-select{border-bottom:var(--ag-tool-panel-separator-border);border-top:var(--ag-tool-panel-separator-border)}:where(.ag-column-panel) .ag-column-drop-vertical{flex:1 1 0px;min-height:50px;&:where(:not(.ag-last-column-drop)){border-bottom:var(--ag-tool-panel-separator-border)}}.ag-dnd-ghost{align-items:center;background-color:var(--ag-drag-and-drop-image-background-color);border:var(--ag-drag-and-drop-image-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-drag-and-drop-image-shadow);color:var(--ag-text-color);cursor:move;font-weight:500;gap:var(--ag-cell-widget-spacing);height:var(--ag-header-height);max-width:200px;padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding);text-overflow:ellipsis;transform:translateY(calc(var(--ag-spacing)*2))}.ag-dnd-ghost,.ag-header{display:flex;overflow:hidden;white-space:nowrap}.ag-header{background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);color:var(--ag-header-text-color);font-family:var(--ag-header-font-family);font-size:var(--ag-header-font-size);font-weight:var(--ag-header-font-weight);width:100%}.ag-header-row{height:var(--ag-header-height);position:absolute}.ag-header-row:not(:first-child){.ag-header-cell:not(.ag-header-span-height.ag-header-span-total),.ag-header-group-cell.ag-header-group-cell-with-group{border-top:var(--ag-header-row-border)}}.ag-header-row:not(.ag-header-row-column-group){overflow:hidden}.ag-header.ag-header-allow-overflow .ag-header-row{overflow:visible}.ag-header-cell,.ag-header-group-cell{align-items:center;display:inline-flex;gap:var(--ag-cell-widget-spacing);height:100%;overflow:hidden;padding:0 var(--ag-cell-horizontal-padding);position:absolute}@property --ag-internal-moving-color{syntax:\"<color>\";inherits:false;initial-value:transparent}@property --ag-internal-hover-color{syntax:\"<color>\";inherits:false;initial-value:transparent}.ag-header-cell:not(.ag-floating-filter),.ag-header-group-cell{&:before{background-image:linear-gradient(var(--ag-internal-hover-color),var(--ag-internal-hover-color)),linear-gradient(var(--ag-internal-moving-color),var(--ag-internal-moving-color));content:\"\";inset:0;position:absolute;--ag-internal-moving-color:transparent;--ag-internal-hover-color:transparent;transition:--ag-internal-moving-color var(--ag-header-cell-background-transition-duration),--ag-internal-hover-color var(--ag-header-cell-background-transition-duration)}&:hover:before{--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}&.ag-header-cell-moving:before{--ag-internal-moving-color:var(--ag-header-cell-moving-background-color);--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}}:where(.ag-header-cell:not(.ag-floating-filter) *,.ag-header-group-cell *){position:relative;z-index:1}.ag-header-cell-filter-button,.ag-header-cell.ag-header-active .ag-header-cell-menu-button{opacity:1}.ag-header-cell-menu-button:not(.ag-header-menu-always-show){opacity:0;transition:opacity .2s}.ag-header-cell-label,.ag-header-group-cell-label{align-items:center;align-self:stretch;display:flex;flex:1 1 auto;gap:var(--ag-spacing);padding:5px 0}.ag-header-cell-label{overflow:hidden;text-overflow:ellipsis}.ag-header-group-cell-label.ag-sticky-label{flex:none;max-width:100%;position:sticky}.ag-ltr .ag-header-group-cell-label.ag-sticky-label{left:var(--ag-cell-horizontal-padding)}.ag-rtl .ag-header-group-cell-label.ag-sticky-label{right:var(--ag-cell-horizontal-padding)}.ag-header-cell-text,.ag-header-group-text{overflow:hidden;text-overflow:ellipsis}.ag-header-cell-text{word-break:break-word}.ag-header-group-cell .ag-header-cell-comp-wrapper{display:flex}.ag-header-cell:not(.ag-header-cell-auto-height) .ag-header-cell-comp-wrapper{align-items:center;display:flex;height:100%}.ag-header-cell-comp-wrapper{width:100%}.ag-header-cell-wrap-text .ag-header-cell-comp-wrapper{white-space:normal}.ag-right-aligned-header .ag-header-cell-label{flex-direction:row-reverse}.ag-floating-filter-button-button,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-cell-sortable .ag-header-cell-label,.ag-header-expand-icon,.ag-panel-title-bar-button{cursor:pointer}.ag-advanced-filter-header-cell,.ag-header-cell,.ag-header-group-cell{&:focus-visible{box-shadow:inset var(--ag-focus-shadow)}}.ag-ltr :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}.ag-rtl :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}.ag-ltr :where(.ag-header-cell.ag-right-aligned-header){.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}.ag-rtl :where(.ag-header-cell.ag-right-aligned-header){.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}.ag-header-cell:after,.ag-header-group-cell:not(.ag-header-span-height.ag-header-group-cell-no-group):after{content:\"\";height:var(--ag-header-column-border-height);position:absolute;top:calc(50% - var(--ag-header-column-border-height)*.5);z-index:1}.ag-ltr .ag-header-cell:after,.ag-ltr .ag-header-group-cell:not(.ag-header-span-height.ag-header-group-cell-no-group):after{border-right:var(--ag-header-column-border);right:0}.ag-rtl .ag-header-cell:after,.ag-rtl .ag-header-group-cell:not(.ag-header-span-height.ag-header-group-cell-no-group):after{border-left:var(--ag-header-column-border);left:0}.ag-header-highlight-after:after,.ag-header-highlight-before:after{background-color:var(--ag-accent-color);content:\"\";height:100%;position:absolute;width:1px}.ag-ltr .ag-header-highlight-before:after{left:0}.ag-ltr .ag-header-highlight-after:after,.ag-rtl .ag-header-highlight-before:after{right:0}.ag-rtl .ag-header-highlight-after:after{left:0}.ag-ltr .ag-pinned-left-header .ag-header-highlight-after:after{right:1px}.ag-rtl .ag-pinned-left-header .ag-header-highlight-after:after{left:1px}.ag-header-cell-resize{align-items:center;cursor:ew-resize;display:flex;height:100%;position:absolute;top:0;width:8px;z-index:2;&:after{background-color:var(--ag-header-column-resize-handle-color);content:\"\";height:var(--ag-header-column-resize-handle-height);position:absolute;top:calc(50% - var(--ag-header-column-resize-handle-height)*.5);width:var(--ag-header-column-resize-handle-width);z-index:1}}.ag-ltr .ag-header-cell-resize{right:-3px;&:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}}.ag-rtl .ag-header-cell-resize{left:-3px;&:after{right:calc(50% - var(--ag-header-column-resize-handle-width))}}.ag-header-cell.ag-header-span-height .ag-header-cell-resize:after{height:calc(100% - var(--ag-spacing)*4);top:calc(var(--ag-spacing)*2)}.ag-header-group-cell-no-group.ag-header-span-height .ag-header-cell-resize{display:none}.ag-menu{background-color:var(--ag-menu-background-color);border:var(--ag-menu-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-menu-shadow);color:var(--ag-menu-text-color);max-height:100%;min-width:180px;overflow-y:auto;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-menu-list{cursor:default;display:table;padding:var(--ag-spacing) 0;width:100%}.ag-menu-option,.ag-menu-separator{display:table-row}.ag-menu-option-part,.ag-menu-separator-part{display:table-cell;vertical-align:middle}.ag-menu-option-text{white-space:nowrap}.ag-menu-option-custom{display:contents}.ag-compact-menu-option{display:flex;flex-wrap:nowrap;width:100%}.ag-compact-menu-option-text{flex:1 1 auto;white-space:nowrap}.ag-menu-separator{height:calc(var(--ag-spacing)*2 + 1px)}.ag-menu-separator-part:after{border-top:1px solid var(--ag-menu-separator-color);content:\"\";display:block}.ag-compact-menu-option-active,.ag-menu-option-active{background-color:var(--ag-row-hover-color)}.ag-compact-menu-option-part,.ag-menu-option-part{line-height:var(--ag-icon-size);padding:calc(var(--ag-spacing) + 2px) 0}.ag-compact-menu-option-disabled,.ag-menu-option-disabled{cursor:not-allowed;opacity:.5}.ag-compact-menu-option-icon,.ag-menu-option-icon{width:var(--ag-icon-size)}.ag-ltr .ag-compact-menu-option-icon,.ag-ltr .ag-menu-option-icon{padding-left:calc(var(--ag-spacing)*2)}.ag-rtl .ag-compact-menu-option-icon,.ag-rtl .ag-menu-option-icon{padding-right:calc(var(--ag-spacing)*2)}.ag-compact-menu-option-text,.ag-menu-option-text{padding-left:calc(var(--ag-spacing)*2);padding-right:calc(var(--ag-spacing)*2)}.ag-ltr .ag-compact-menu-option-shortcut,.ag-ltr .ag-menu-option-shortcut{padding-right:var(--ag-spacing)}.ag-rtl .ag-compact-menu-option-shortcut,.ag-rtl .ag-menu-option-shortcut{padding-left:var(--ag-spacing)}.ag-ltr .ag-compact-menu-option-popup-pointer,.ag-ltr .ag-menu-option-popup-pointer{padding-right:var(--ag-spacing)}.ag-rtl .ag-compact-menu-option-popup-pointer,.ag-rtl .ag-menu-option-popup-pointer{padding-left:var(--ag-spacing)}.ag-menu-column-select-wrapper{height:265px;overflow:auto;.ag-column-select{height:100%}}.ag-menu.ag-tabs{min-width:290px}.ag-filter-separator{border-top:1px solid var(--menu-separator-color)}.ag-filter-select .ag-picker-field-wrapper{width:0}.ag-filter-condition-operator{height:17px}.ag-ltr .ag-filter-condition-operator-or{margin-left:calc(var(--ag-spacing)*2)}.ag-rtl .ag-filter-condition-operator-or{margin-right:calc(var(--ag-spacing)*2)}.ag-set-filter-select-all{padding-top:var(--ag-widget-container-vertical-padding)}.ag-filter-no-matches,.ag-set-filter-list{height:calc(var(--ag-list-item-height)*6)}.ag-filter-no-matches{padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}.ag-set-filter-tree-list{height:calc(var(--ag-list-item-height)*10)}.ag-set-filter-filter{margin-left:var(--ag-widget-container-horizontal-padding);margin-right:var(--ag-widget-container-horizontal-padding);margin-top:var(--ag-widget-container-vertical-padding)}.ag-filter-to{margin-top:var(--ag-widget-vertical-spacing)}.ag-mini-filter{margin:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}.ag-ltr .ag-set-filter-item{padding-left:calc(var(--ag-widget-container-horizontal-padding) + var(--ag-indentation-level)*var(--ag-set-filter-indent-size))}.ag-rtl .ag-set-filter-item{padding-right:calc(var(--ag-widget-container-horizontal-padding) + var(--ag-indentation-level)*var(--ag-set-filter-indent-size))}.ag-ltr .ag-set-filter-add-group-indent{margin-left:calc(var(--ag-icon-size) + var(--ag-widget-container-horizontal-padding))}.ag-rtl .ag-set-filter-add-group-indent{margin-right:calc(var(--ag-icon-size) + var(--ag-widget-container-horizontal-padding))}.ag-ltr .ag-set-filter-group-icons{margin-right:var(--ag-widget-container-horizontal-padding)}.ag-rtl .ag-set-filter-group-icons{margin-left:var(--ag-widget-container-horizontal-padding)}.ag-filter-menu .ag-set-filter-list{min-width:200px}.ag-filter-virtual-list-item:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-filter-apply-panel{display:flex;justify-content:flex-end;overflow:hidden;padding:var(--ag-widget-vertical-spacing) var(--ag-widget-container-horizontal-padding) var(--ag-widget-container-vertical-padding)}.ag-filter-apply-panel-button{line-height:1.5}.ag-ltr .ag-filter-apply-panel-button{margin-left:calc(var(--ag-spacing)*2)}.ag-rtl .ag-filter-apply-panel-button{margin-right:calc(var(--ag-spacing)*2)}.ag-simple-filter-body-wrapper{display:flex;flex-direction:column;min-height:calc(var(--ag-list-item-height) + var(--ag-widget-container-vertical-padding) + var(--ag-widget-vertical-spacing));overflow-y:auto;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);padding-bottom:calc(var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing));&>*{margin-bottom:var(--ag-widget-vertical-spacing)}.ag-resizer-wrapper{margin:0}}.ag-multi-filter-menu-item{margin:var(--ag-spacing) 0}.ag-multi-filter-group-title-bar{background-color:transparent;color:var(--ag-header-text-color);font-weight:500;padding:calc(var(--ag-spacing)*1.5) var(--ag-spacing);&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-group-filter-field-select-wrapper{display:flex;flex-direction:column;gap:var(--ag-widget-vertical-spacing);padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}.ag-menu-option{cursor:pointer;font-weight:500}.ag-ltr .ag-menu-option-popup-pointer .ag-icon{text-align:right}.ag-rtl .ag-menu-option-popup-pointer .ag-icon{text-align:left}.ag-panel{background-color:var(--ag-panel-background-color);display:flex;flex-direction:column;overflow:hidden;position:relative}.ag-dialog{border:var(--ag-dialog-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dialog-shadow);position:absolute}.ag-panel-title-bar{align-items:center;background-color:var(--ag-panel-title-bar-background-color);border-bottom:var(--ag-panel-title-bar-border);color:var(--ag-header-text-color);cursor:default;display:flex;flex:none;height:var(--ag-header-height);padding:var(--ag-spacing) var(--ag-cell-horizontal-padding)}.ag-ltr .ag-panel-title-bar-button{margin-left:calc(var(--ag-spacing)*2);margin-right:var(--ag-spacing)}.ag-rtl .ag-panel-title-bar-button{margin-left:var(--ag-spacing);margin-right:calc(var(--ag-spacing)*2)}.ag-panel-title-bar-title{color:var(--ag-header-text-color);flex:1 1 auto;font-weight:500}.ag-panel-title-bar-buttons{display:flex}.ag-panel-title-bar-button{cursor:pointer}.ag-panel-content-wrapper{display:flex;flex:1 1 auto;overflow:hidden;position:relative}.ag-resizer{pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:1;&.ag-resizer-topLeft{height:5px;left:0;top:0;width:5px}&.ag-resizer-top{cursor:ns-resize;height:5px;left:5px;right:5px;top:0}&.ag-resizer-topRight{height:5px;right:0;top:0;width:5px}&.ag-resizer-right{bottom:5px;cursor:ew-resize;right:0;top:5px;width:5px}&.ag-resizer-bottomRight{bottom:0;height:5px;right:0;width:5px}&.ag-resizer-bottom{bottom:0;cursor:ns-resize;height:5px;left:5px;right:5px}&.ag-resizer-bottomLeft{bottom:0;height:5px;left:0;width:5px}&.ag-resizer-left{bottom:5px;cursor:ew-resize;left:0;top:5px;width:5px}}.ag-ltr .ag-resizer{&.ag-resizer-topLeft{cursor:nwse-resize}&.ag-resizer-topRight{cursor:nesw-resize}&.ag-resizer-bottomRight{cursor:nwse-resize}&.ag-resizer-bottomLeft{cursor:nesw-resize}}.ag-rtl .ag-resizer{&.ag-resizer-topLeft{cursor:nesw-resize}&.ag-resizer-topRight{cursor:nwse-resize}&.ag-resizer-bottomRight{cursor:nesw-resize}&.ag-resizer-bottomLeft{cursor:nwse-resize}}.ag-dragging-fill-handle .ag-dialog,.ag-dragging-range-handle .ag-dialog{opacity:.7;pointer-events:none}.ag-layout-print{&.ag-body{display:block;height:unset}&.ag-root-wrapper{display:inline-block}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:none}&.ag-force-vertical-scroll{overflow-y:visible!important}}@media print{.ag-root-wrapper.ag-layout-print{display:table;.ag-body-horizontal-scroll-viewport,.ag-body-viewport,.ag-center-cols-container,.ag-center-cols-viewport,.ag-root,.ag-root-wrapper-body,.ag-virtual-list-viewport{display:block!important;height:auto!important;overflow:hidden!important}.ag-cell,.ag-row{-moz-column-break-inside:avoid;break-inside:avoid}}}.ag-select{align-items:center;display:flex;flex-direction:row;.ag-picker-field-wrapper{cursor:default}&.ag-disabled .ag-picker-field-wrapper:focus{box-shadow:none}&:not(.ag-cell-editor,.ag-label-align-top){min-height:var(--ag-list-item-height)}.ag-picker-field-display{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-picker-field-icon{align-items:center;display:flex}&.ag-disabled{opacity:.5}}.ag-ltr .ag-select{.ag-picker-field-wrapper{padding-left:calc(var(--ag-cell-horizontal-padding)/2);padding-right:var(--ag-spacing)}}.ag-rtl .ag-select{.ag-picker-field-wrapper{padding-left:var(--ag-spacing);padding-right:calc(var(--ag-cell-horizontal-padding)/2)}}.ag-rich-select{cursor:default;height:100%}.ag-rich-select-value{align-items:center;background-color:var(--ag-input-background-color);display:flex;height:100%;padding:var(--ag-spacing);.ag-picker-field-display{overflow:hidden;text-overflow:ellipsis;&.ag-display-as-placeholder{opacity:.5}}}.ag-rich-select-list{background-color:var(--ag-input-background-color);border:var(--ag-input-border);border-radius:var(--ag-input-border-radius);box-shadow:var(--ag-dropdown-shadow);height:auto;position:relative;width:100%;.ag-loading-text{padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}}.ag-rich-select-row{align-items:center;display:flex;flex:1 1 auto;height:100%;overflow:hidden;padding:0 var(--ag-spacing);white-space:nowrap}.ag-rich-select-row-selected{background-color:var(--ag-selected-row-background-color)}.ag-rich-select-row-highlighted,.ag-rich-select-row:hover{background-image:linear-gradient(var(--ag-row-hover-color),var(--ag-row-hover-color))}.ag-rich-select-row-text-highlight{font-weight:700}.ag-rich-select-field-input{flex:1 1 auto;.ag-input-field-input{border:none!important;box-shadow:none!important;padding:0!important;text-overflow:ellipsis;&::-moz-placeholder{opacity:.8}&::placeholder{opacity:.8}}}.ag-ltr .ag-rich-select-field-input{left:var(--ag-spacing)}.ag-rtl .ag-rich-select-field-input{right:var(--ag-spacing)}.ag-popup-editor .ag-rich-select-value{height:var(--ag-row-height);min-width:200px}.ag-rich-select-virtual-list-item{cursor:default;height:var(--ag-list-item-height)}.ag-pill-container{display:flex;flex-wrap:nowrap;gap:.25rem}.ag-pill{align-items:center;background:var(--ag-select-cell-background-color);border:var(--ag-select-cell-border);border-radius:var(--ag-border-radius);display:flex;padding:0 .25rem;white-space:nowrap;&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-pill .ag-pill-button{border:none;padding:0;&:hover{color:var(--ag-accent-color);cursor:pointer}}.ag-ltr .ag-pill .ag-pill-button{margin-left:var(--ag-spacing)}.ag-rtl .ag-pill .ag-pill-button{margin-right:var(--ag-spacing)}ag-grid,ag-grid-angular{display:block}.ag-dnd-ghost,.ag-popup,.ag-root-wrapper{cursor:default;line-height:normal;white-space:normal;-webkit-font-smoothing:antialiased;background-color:var(--ag-background-color);color:var(--ag-text-color);color-scheme:var(--ag-browser-color-scheme);font-family:var(--ag-font-family);font-size:var(--ag-font-size);--ag-indentation-level:0}.ag-root-wrapper{border:var(--ag-wrapper-border);border-radius:var(--ag-wrapper-border-radius);display:flex;flex-direction:column;overflow:hidden;position:relative;&.ag-layout-normal{height:100%}}.ag-root-wrapper-body{display:flex;flex-direction:row;&.ag-layout-normal{flex:1 1 auto;height:0;min-height:0}}.ag-root{display:flex;flex-direction:column;position:relative;&.ag-layout-auto-height,&.ag-layout-normal{flex:1 1 auto;overflow:hidden;width:0}&.ag-layout-normal{height:100%}}.ag-tool-panel-wrapper{cursor:default;display:flex;overflow-x:hidden;overflow-y:auto;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-side-bar-panel-width)}.ag-select-agg-func-item{align-items:center;display:flex;flex:1 1 auto;flex-direction:row;flex-wrap:nowrap;height:100%;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;>*{flex:none}}.ag-tool-panel-horizontal-resize{cursor:ew-resize;height:100%;position:absolute;top:0;width:5px;z-index:1}.ag-ltr .ag-side-bar-left .ag-tool-panel-horizontal-resize{right:-3px}.ag-ltr .ag-side-bar-right .ag-tool-panel-horizontal-resize,.ag-rtl .ag-side-bar-left .ag-tool-panel-horizontal-resize{left:-3px}.ag-rtl .ag-side-bar-right .ag-tool-panel-horizontal-resize{right:-3px}.ag-side-bar{background-color:var(--ag-side-bar-background-color);display:flex;flex-direction:row-reverse;position:relative}.ag-side-bar-left{flex-direction:row;order:-1}.ag-side-buttons{position:relative;width:calc(var(--ag-icon-size) + var(--ag-spacing)*2)}.ag-side-button{&.ag-selected{background-color:var(--ag-background-color);border-bottom:1px solid var(--ag-border-color);&:not(:first-of-type){border-top:1px solid var(--ag-border-color)}}}.ag-side-button-button{align-items:center;cursor:pointer;display:flex;flex-direction:column;gap:var(--ag-spacing);padding:calc(var(--ag-spacing)*3) 0;position:relative;white-space:nowrap;width:100%;&:focus{box-shadow:none}}.ag-side-button-button:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-side-button-label{writing-mode:vertical-lr}@media (max-resolution:1.5x){.ag-side-button-label{font-family:\"Segoe UI\",var(--ag-font-family)}.ag-ltr .ag-side-button-label{transform:rotate(.05deg)}.ag-rtl .ag-side-button-label{transform:rotate(-.05deg)}}.ag-ltr .ag-side-bar-left,.ag-rtl .ag-side-bar-right{border-right:var(--ag-side-panel-border);.ag-tool-panel-wrapper{border-left:var(--ag-side-panel-border)}}.ag-ltr .ag-side-bar-right,.ag-rtl .ag-side-bar-left{border-left:var(--ag-side-panel-border);.ag-tool-panel-wrapper{border-right:var(--ag-side-panel-border)}}.ag-ltr .ag-chart-menu-panel{border-left:var(--ag-side-panel-border)}.ag-rtl .ag-chart-menu-panel{border-right:var(--ag-side-panel-border)}.ag-button{border-radius:0}.ag-standard-button{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-color:var(--ag-background-color);border:var(--ag-input-border);border-radius:var(--ag-border-radius);cursor:pointer;font-family:inherit;padding:var(--ag-spacing) calc(var(--ag-spacing)*2);&:hover{background-color:var(--ag-row-hover-color)}&:active{border-color:var(--ag-accent-color)}&:disabled{background-color:var(--ag-input-disabled-background-color);border:var(--ag-input-disabled-border);color:var(--ag-input-disabled-text-color)}}:where(input[class^=ag-][type=button],button[class^=ag-]):focus-visible{box-shadow:var(--ag-focus-shadow)}.ag-drag-handle{color:var(--ag-drag-handle-color);cursor:grab}.ag-list-item,.ag-virtual-list-item{height:var(--ag-list-item-height)}.ag-virtual-list-item{position:absolute;width:100%}.ag-select-list{background-color:var(--ag-background-color);border:var(--ag-input-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);overflow-x:hidden;overflow-y:auto}.ag-list-item{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;&.ag-active-item{background-color:var(--ag-row-hover-color)}}.ag-select-list-item{cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none;& span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.ag-ltr .ag-select-list-item{padding-left:calc(var(--ag-cell-horizontal-padding)/2)}.ag-rtl .ag-select-list-item{padding-right:calc(var(--ag-cell-horizontal-padding)/2)}.ag-list-item-hovered:after{background-color:var(--ag-accent-color);content:\"\";height:1px;left:0;position:absolute;right:0}.ag-item-highlight-top:after{top:0}.ag-item-highlight-bottom:after{bottom:0}.ag-range-field{align-items:center;display:flex;.ag-input-wrapper{height:100%}}& input[class^=ag-][type=range]{-webkit-appearance:none;background:none;height:100%;overflow:visible;padding:0;width:100%;&::-webkit-slider-runnable-track{background-color:var(--ag-border-color);border-radius:1.5px;height:3px;margin:0;padding:0;width:100%}&::-moz-range-track{background-color:var(--ag-border-color);border-radius:1.5px;height:3px;margin:0;padding:0;width:100%}&::-webkit-slider-thumb{-webkit-appearance:none;background-color:var(--ag-background-color);border:1px solid var(--ag-border-color);border-radius:100%;height:var(--ag-icon-size);margin:0;padding:0;transform:translateY(calc(var(--ag-icon-size)*-.5 + 1.5px));width:var(--ag-icon-size)}&::-moz-ag-range-thumb{-webkit-appearance:none;background-color:var(--ag-background-color);border:1px solid var(--ag-border-color);border-radius:100%;height:var(--ag-icon-size);margin:0;padding:0;transform:translateY(calc(var(--ag-icon-size)*-.5 + 1.5px));width:var(--ag-icon-size)}&:focus{&::-webkit-slider-thumb{border-color:var(--ag-accent-color);box-shadow:var(--ag-focus-shadow)}&::-moz-ag-range-thumb{border-color:var(--ag-accent-color);box-shadow:var(--ag-focus-shadow)}}&:active{&::-webkit-slider-runnable-track{background-color:var(--ag-accent-color)}&::-moz-ag-range-track{background-color:var(--ag-accent-color)}}&:disabled{opacity:.5}}.ag-toggle-button{flex:none;min-width:unset;width:unset}.ag-toggle-button-input-wrapper{background-color:var(--ag-toggle-button-off-background-color);border:solid var(--ag-toggle-button-border-width) var(--ag-toggle-button-off-border-color);border-radius:calc(var(--ag-toggle-button-height)*.5);flex:none;height:var(--ag-toggle-button-height);max-width:var(--ag-toggle-button-width);min-width:var(--ag-toggle-button-width);position:relative;& input{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:100%;opacity:0;width:100%}&:before{background-color:var(--ag-toggle-button-switch-background-color);border:var(--ag-toggle-button-border-width) solid var(--ag-toggle-button-switch-border-color);border-radius:100%;content:\"\";display:block;height:var(--ag-toggle-button-height);pointer-events:none;position:absolute;top:calc(0px - var(--ag-toggle-button-border-width));width:var(--ag-toggle-button-height)}&.ag-checked{background-color:var(--ag-toggle-button-on-background-color);border-color:var(--ag-toggle-button-on-border-color);&:before{border-color:var(--ag-toggle-button-on-border-color)}}&:focus-within{box-shadow:var(--ag-focus-shadow)}&.ag-disabled{opacity:.5}}.ag-ltr .ag-toggle-button-input-wrapper{&:before{left:calc(0px - var(--ag-toggle-button-border-width));transition:left .1s}&.ag-checked{&:before{left:calc(100% - var(--ag-toggle-button-height) + var(--ag-toggle-button-border-width))}}}.ag-rtl .ag-toggle-button-input-wrapper{&:before{right:calc(0px - var(--ag-toggle-button-border-width));transition:right .1s}&.ag-checked{&:before{right:calc(100% - var(--ag-toggle-button-height) + var(--ag-toggle-button-border-width))}}}.ag-autocomplete{align-items:center;display:flex;width:100%;>*{flex:1 1 auto}}.ag-autocomplete-list-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-autocomplete-list{height:calc(var(--ag-row-height)*6.5);min-width:200px;position:relative;width:100%}.ag-autocomplete-virtual-list-item{cursor:default;display:flex;height:var(--ag-list-item-height);&:focus-visible:after{content:none}&:hover{background-color:var(--ag-row-hover-color)}}.ag-autocomplete-row{align-items:center;display:flex;flex:1 1 auto;overflow:hidden}.ag-autocomplete-row-label{margin:0 var(--ag-widget-container-horizontal-padding);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-autocomplete-row-selected{background-color:var(--ag-selected-row-background-color)}.ag-tooltip{background-color:var(--ag-tooltip-background-color);border:var(--ag-tooltip-border);border-radius:var(--ag-border-radius);color:var(--ag-tooltip-text-color);padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);white-space:normal}.ag-tooltip,.ag-tooltip-custom{position:absolute;z-index:99999}.ag-tooltip-custom:not(.ag-tooltip-interactive),.ag-tooltip:not(.ag-tooltip-interactive){pointer-events:none}.ag-tooltip-custom.ag-tooltip-animate,.ag-tooltip.ag-tooltip-animate{transition:opacity 1s;&.ag-tooltip-hiding{opacity:0}}.ag-angle-select{align-items:center;display:flex}.ag-angle-select-wrapper{display:flex}.ag-angle-select-parent-circle{display:block;position:relative}.ag-angle-select-child-circle{position:absolute}.ag-slider-wrapper{display:flex;.ag-input-field{flex:1 1 auto}}.ag-picker-field-display{flex:1 1 auto}.ag-picker-field{align-items:center;display:flex}.ag-picker-field-icon{border:0;cursor:pointer;display:flex;margin:0;padding:0}.ag-color-panel{display:flex;flex-direction:column;text-align:center;width:100%}.ag-spectrum-color{cursor:default;flex:1 1 auto;overflow:visible;position:relative}.ag-spectrum-fill{inset:0;position:absolute}.ag-spectrum-val{cursor:pointer}.ag-spectrum-dragger{cursor:pointer;pointer-events:none;position:absolute}.ag-spectrum-alpha,.ag-spectrum-hue{cursor:default}.ag-spectrum-hue-background{background:linear-gradient(270deg,red 3%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);height:100%;width:100%}.ag-spectrum-alpha-background{background:linear-gradient(to right,var(--ag-internal-spectrum-alpha-color-from),var(--ag-internal-spectrum-alpha-color-to)),url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"4\" height=\"4\"><rect x=\"0\" y=\"0\" width=\"4\" height=\"4\" fill=\"%23fff\"/><path d=\"M0 0H2V4H4V2H0Z\" fill=\"%23b2b2b2\"/></svg>') 0 0 /4px 4px;height:100%;width:100%}.ag-spectrum-tool{cursor:pointer;position:relative}.ag-spectrum-slider{pointer-events:none;position:absolute}.ag-spectrum-alpha .ag-spectrum-slider{background:linear-gradient(to bottom,var(--ag-internal-spectrum-alpha-color),var(--ag-internal-spectrum-alpha-color)) var(--ag-background-color)}.ag-recent-colors{display:flex;gap:6px;margin-top:10px}.ag-recent-color{cursor:pointer}.ag-angle-select[disabled]{opacity:.5;pointer-events:none}.ag-ltr .ag-angle-select-field,.ag-ltr .ag-slider-field{margin-right:calc(var(--ag-spacing)*2)}.ag-rtl .ag-angle-select-field,.ag-rtl .ag-slider-field{margin-left:calc(var(--ag-spacing)*2)}.ag-angle-select-parent-circle{background-color:var(--ag-background-color);border:1px solid;border-color:var(--ag-border-color);border-radius:12px;height:24px;width:24px}.ag-angle-select-child-circle{background-color:var(--ag-foreground-color);border-radius:3px;height:6px;left:12px;margin-left:-3px;margin-top:-4px;top:4px;width:6px}.ag-picker-field-wrapper{background-color:var(--ag-background-color);border:var(--ag-input-border);border-radius:5px;min-height:max(var(--ag-list-item-height),calc(var(--ag-spacing)*4));overflow:hidden;&:disabled{opacity:.5}&.ag-picker-has-focus,&:focus-within{border:var(--ag-input-focus-border);box-shadow:var(--ag-focus-shadow)}}.ag-picker-field-button{background-color:var(--ag-background-color)}.ag-dialog.ag-color-dialog{border-radius:5px}.ag-color-picker{.ag-picker-field-wrapper{padding-left:var(--ag-spacing);padding-right:var(--ag-spacing)}.ag-picker-field-display{align-items:center;display:flex;flex-direction:row;min-height:var(--ag-list-item-height)}}.ag-ltr .ag-color-picker-color,.ag-ltr .ag-color-picker-value{margin-right:var(--ag-spacing)}.ag-rtl .ag-color-picker-color,.ag-rtl .ag-color-picker-value{margin-left:var(--ag-spacing)}.ag-color-panel{padding:var(--ag-spacing)}.ag-spectrum-tools{padding-bottom:0;padding-left:0;padding-right:0}.ag-spectrum-tool{height:12px}.ag-spectrum-alpha-background,.ag-spectrum-hue-background{border-radius:12px}.ag-spectrum-slider{border:3px solid #f8f8f8;border-radius:18px;height:18px;margin-top:-15px;width:18px}.ag-recent-colors{margin-bottom:2px;margin-left:var(--ag-spacing);margin-right:var(--ag-spacing)}.ag-color-input-color,.ag-color-picker-color,.ag-recent-color{border-radius:4px}.ag-recent-color{border:1px solid var(--ag-border-color)}.ag-spectrum-sat{background-image:linear-gradient(90deg,#fff,hsla(20,42%,65%,0))}.ag-spectrum-val{background-image:linear-gradient(0deg,#000,hsla(20,42%,65%,0))}.ag-spectrum-dragger{background:#000;border:3px solid #fff;border-radius:18px;box-shadow:0 0 2px 0 rgba(0,0,0,.24);height:18px;width:18px}.ag-spectrum-alpha-background,.ag-spectrum-hue-background{border-radius:2px}.ag-spectrum-tool{border-radius:2px;height:11px;margin-bottom:10px}.ag-spectrum-slider{border:2px solid #fff;border-radius:13px;box-shadow:0 1px 4px 0 rgba(0,0,0,.37);height:13px;margin-top:-12px;width:13px}.ag-recent-color,.ag-spectrum-color,.ag-spectrum-slider{&:focus-visible:not(:disabled):not([readonly]){box-shadow:var(--ag-focus-shadow)}}.ag-color-input{.ag-color-input-color{position:absolute}}.ag-ltr .ag-color-input{& input[class^=ag-][type=text].ag-input-field-input{padding-left:calc(var(--ag-icon-size) + var(--ag-spacing)*2)}.ag-color-input-color{margin-left:var(--ag-spacing)}}.ag-rtl .ag-color-input{& input[class^=ag-][type=text].ag-input-field-input{padding-right:calc(var(--ag-icon-size) + var(--ag-spacing)*2)}.ag-color-input-color{margin-right:var(--ag-spacing)}}.ag-color-input-color,.ag-color-picker-color{border:1px solid var(--ag-border-color);border-radius:2px;height:var(--ag-icon-size);width:var(--ag-icon-size)}.ag-pill-select{.ag-picker-field-display{font-weight:500}.ag-picker-field-display,.ag-picker-field-icon .ag-icon{color:var(--ag-chart-menu-label-color)}}.ag-filter-toolpanel{flex:1 1 0px;min-width:0}.ag-filter-toolpanel-header{position:relative}.ag-filter-toolpanel-header,.ag-filter-toolpanel-search{align-items:center;display:flex;>*{align-items:center;display:flex}}.ag-filter-toolpanel-header{height:calc(var(--ag-spacing)*6);&:focus-visible{border-radius:var(--ag-border-radius);box-shadow:inset var(--ag-focus-shadow)}}.ag-filter-toolpanel-header,.ag-filter-toolpanel-search{padding:0 var(--ag-spacing)}.ag-filter-toolpanel-group:not(.ag-has-filter)>.ag-group-title-bar .ag-filter-toolpanel-group-instance-header-icon{display:none}.ag-filter-toolpanel-group-level-0-header{height:calc(var(--ag-spacing)*8)}.ag-filter-toolpanel-group-item{margin-bottom:calc(var(--ag-spacing)*.5);margin-top:calc(var(--ag-spacing)*.5)}.ag-filter-toolpanel-search{margin-bottom:var(--ag-spacing);margin-top:var(--ag-widget-container-vertical-padding)}.ag-filter-toolpanel-search-input{flex-grow:1;height:calc(var(--ag-spacing)*4)}.ag-ltr .ag-filter-toolpanel-group-title-bar-icon{margin-right:var(--ag-spacing)}.ag-rtl .ag-filter-toolpanel-group-title-bar-icon{margin-left:var(--ag-spacing)}.ag-filter-toolpanel-expand{cursor:pointer}.ag-ltr .ag-filter-toolpanel-expand{margin-right:var(--ag-spacing)}.ag-rtl .ag-filter-toolpanel-expand{margin-left:var(--ag-spacing)}.ag-ltr .ag-filter-toolpanel-group-title-bar,.ag-ltr .ag-filter-toolpanel-instance-header{padding-left:calc(var(--ag-spacing) + var(--ag-filter-tool-panel-group-indent)*var(--ag-indentation-level))}.ag-rtl .ag-filter-toolpanel-group-title-bar,.ag-rtl .ag-filter-toolpanel-instance-header{padding-right:calc(var(--ag-spacing) + var(--ag-filter-tool-panel-group-indent)*var(--ag-indentation-level))}.ag-ltr .ag-filter-toolpanel-instance-body{margin-left:var(--ag-filter-tool-panel-group-indent)}.ag-rtl .ag-filter-toolpanel-instance-body{margin-right:var(--ag-filter-tool-panel-group-indent)}.ag-ltr .ag-filter-toolpanel-group-instance-header-icon,.ag-ltr .ag-filter-toolpanel-instance-header-icon{margin-left:var(--ag-spacing)}.ag-rtl .ag-filter-toolpanel-group-instance-header-icon,.ag-rtl .ag-filter-toolpanel-instance-header-icon{margin-right:var(--ag-spacing)}.ag-filter-toolpanel-instance-filter{background-color:var(--ag-chrome-background-color)}.ag-filter-toolpanel-group-level-0{border-top:none}.ag-filter-toolpanel-header{height:auto;padding-bottom:var(--ag-spacing);padding-top:var(--ag-spacing)}.ag-filter-toolpanel-group-item{margin:0}.ag-filter-toolpanel-header,.ag-filter-toolpanel-search{color:var(--ag-header-text-color);font-weight:500}.ag-paging-panel{align-items:center;border-top:var(--ag-footer-row-border);display:flex;gap:calc(var(--ag-spacing)*4);height:max(var(--ag-row-height),22px);justify-content:flex-end;padding:0 var(--ag-cell-horizontal-padding)}.ag-paging-page-size .ag-wrapper{min-width:50px}.ag-paging-page-summary-panel{align-items:center;display:flex;gap:var(--ag-cell-widget-spacing);.ag-disabled &{pointer-events:none}}.ag-paging-button{cursor:pointer;position:relative;&:focus-visible{box-shadow:var(--ag-focus-shadow)}&.ag-disabled{cursor:default;opacity:.5}}.ag-paging-number,.ag-paging-row-summary-panel-number{font-weight:500}.ag-status-bar{border-top:var(--ag-footer-row-border);display:flex;justify-content:space-between;line-height:1.5;overflow:hidden;padding-left:calc(var(--ag-spacing)*4);padding-right:calc(var(--ag-spacing)*4)}.ag-status-panel{display:inline-flex}.ag-status-name-value{white-space:nowrap}.ag-status-bar-center,.ag-status-bar-left,.ag-status-bar-right{display:inline-flex}.ag-status-bar-center{text-align:center}.ag-status-name-value{margin-left:var(--ag-spacing);margin-right:var(--ag-spacing);padding-bottom:var(--ag-widget-container-vertical-padding);padding-top:var(--ag-widget-container-vertical-padding)}.ag-status-name-value-value{font-weight:500}.ag-overlay{inset:0;pointer-events:none;position:absolute;z-index:2}.ag-overlay-panel,.ag-overlay-wrapper{display:flex;height:100%;width:100%}.ag-overlay-wrapper{align-items:center;flex:none;justify-content:center;text-align:center}.ag-overlay-loading-wrapper{pointer-events:all}.ag-overlay-loading-center{background:var(--ag-background-color);border:1px solid var(--ag-border-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-popup-shadow);padding:var(--ag-spacing)}.ag-icon{display:block;height:var(--ag-icon-size);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-icon-size)}.ag-column-select-column-group-readonly,.ag-disabled,[disabled]{.ag-icon{opacity:.5}}.ag-column-select-column-readonly .ag-icon-grip,.ag-column-select-column-readonly.ag-icon-grip{opacity:.35}.ag-chart-menu-icon,.ag-chart-settings-next,.ag-chart-settings-prev,.ag-column-group-icons,.ag-column-select-header-icon,.ag-filter-toolpanel-expand,.ag-floating-filter-button-button,.ag-group-contracted .ag-icon,.ag-group-expanded .ag-icon,.ag-group-title-bar-icon,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,.ag-panel-title-bar-button-icon,.ag-set-filter-group-icons{&:hover{background-color:var(--ag-icon-button-hover-color);border-radius:1px;box-shadow:0 0 0 4px var(--ag-icon-button-hover-color)}}.ag-filter-active{--ag-icon-button-hover-color:color-mix(in srgb,transparent,var(--ag-accent-color) 28%);background-color:color-mix(in srgb,transparent,var(--ag-accent-color) 14%);border-radius:1px;box-shadow:0 0 0 4px color-mix(in srgb,transparent,var(--ag-accent-color) 14%);position:relative;&:after{background-color:var(--ag-accent-color);border-radius:50%;content:\"\";height:6px;position:absolute;top:-1px;width:6px}.ag-icon-filter{clip-path:path(\"M8,0C8,4.415 11.585,8 16,8L16,16L0,16L0,0L8,0Z\")}}.ag-ltr .ag-filter-active{&:after{right:-1px}}.ag-rtl .ag-filter-active{&:after{left:-1px}}.ag-label-align-right{.ag-label{order:1}>*{flex:none}}.ag-label-align-top{align-items:flex-start;flex-direction:column;>*{align-self:stretch}}.ag-label-ellipsis{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-label{white-space:nowrap}.ag-ltr .ag-label{margin-right:var(--ag-spacing)}.ag-rtl .ag-label{margin-left:var(--ag-spacing)}.ag-label-align-top .ag-label{margin-bottom:calc(var(--ag-spacing)*.5)}.ag-ltr .ag-label-align-right .ag-label{margin-left:var(--ag-spacing)}.ag-rtl .ag-label-align-right .ag-label{margin-right:var(--ag-spacing)}`\n);\nvar coreDefaults = {\n  backgroundColor: \"#FFF\",\n  foregroundColor: \"#181d1f\",\n  textColor: {\n    ref: \"foregroundColor\"\n  },\n  accentColor: \"#2196f3\",\n  invalidColor: \"#e02525\",\n  borderColor: {\n    ref: \"foregroundColor\",\n    mix: 0.15\n  },\n  wrapperBorder: true,\n  rowBorder: true,\n  browserColorScheme: \"light\",\n  headerRowBorder: {\n    ref: \"rowBorder\"\n  },\n  footerRowBorder: {\n    ref: \"rowBorder\"\n  },\n  columnBorder: {\n    style: \"solid\",\n    width: 1,\n    color: \"transparent\"\n  },\n  headerColumnBorder: false,\n  headerColumnBorderHeight: \"100%\",\n  pinnedColumnBorder: true,\n  pinnedRowBorder: true,\n  sidePanelBorder: true,\n  fontFamily: [\n    \"-apple-system\",\n    \"BlinkMacSystemFont\",\n    \"Segoe UI\",\n    \"Roboto\",\n    \"Oxygen-Sans\",\n    \"Ubuntu\",\n    \"Cantarell\",\n    \"Helvetica Neue\",\n    \"sans-serif\"\n  ],\n  chromeBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.02,\n    onto: \"backgroundColor\"\n  },\n  headerBackgroundColor: {\n    ref: \"chromeBackgroundColor\"\n  },\n  headerFontFamily: {\n    ref: \"fontFamily\"\n  },\n  headerFontWeight: 500,\n  headerFontSize: {\n    ref: \"fontSize\"\n  },\n  dataFontSize: {\n    ref: \"fontSize\"\n  },\n  headerTextColor: {\n    ref: \"textColor\"\n  },\n  headerCellHoverBackgroundColor: \"transparent\",\n  headerCellMovingBackgroundColor: { ref: \"backgroundColor\" },\n  headerCellBackgroundTransitionDuration: \"0.2s\",\n  cellTextColor: {\n    ref: \"textColor\"\n  },\n  subtleTextColor: {\n    ref: \"textColor\",\n    mix: 0.5\n  },\n  rangeSelectionBorderStyle: \"solid\",\n  rangeSelectionBorderColor: {\n    ref: \"accentColor\"\n  },\n  rangeSelectionBackgroundColor: {\n    ref: \"accentColor\",\n    mix: 0.2\n  },\n  rangeSelectionChartBackgroundColor: \"#0058FF1A\",\n  rangeSelectionChartCategoryBackgroundColor: \"#00FF841A\",\n  rangeSelectionHighlightColor: {\n    ref: \"accentColor\",\n    mix: 0.5\n  },\n  rowHoverColor: {\n    ref: \"accentColor\",\n    mix: 0.08\n  },\n  columnHoverColor: {\n    ref: \"accentColor\",\n    mix: 0.05\n  },\n  selectedRowBackgroundColor: {\n    ref: \"accentColor\",\n    mix: 0.12\n  },\n  modalOverlayBackgroundColor: {\n    ref: \"backgroundColor\",\n    mix: 0.66\n  },\n  oddRowBackgroundColor: {\n    ref: \"backgroundColor\"\n  },\n  borderRadius: 4,\n  wrapperBorderRadius: 8,\n  cellHorizontalPadding: {\n    calc: \"spacing * 2 * cellHorizontalPaddingScale\"\n  },\n  cellWidgetSpacing: {\n    calc: \"spacing * 1.5\"\n  },\n  cellHorizontalPaddingScale: 1,\n  rowGroupIndentSize: {\n    calc: \"cellWidgetSpacing + iconSize\"\n  },\n  valueChangeDeltaUpColor: \"#43a047\",\n  valueChangeDeltaDownColor: \"#e53935\",\n  valueChangeValueHighlightBackgroundColor: \"#16a08580\",\n  spacing: 8,\n  fontSize: 14,\n  rowHeight: {\n    calc: \"max(iconSize, dataFontSize) + spacing * 3.25 * rowVerticalPaddingScale\"\n  },\n  rowVerticalPaddingScale: 1,\n  headerHeight: {\n    calc: \"max(iconSize, dataFontSize) + spacing * 4 * headerVerticalPaddingScale\"\n  },\n  headerVerticalPaddingScale: 1,\n  popupShadow: {\n    radius: 16,\n    color: \"#00000026\"\n  },\n  dropdownShadow: {\n    radius: 4,\n    spread: 1,\n    offsetY: 1,\n    color: \"#babfc766\"\n  },\n  dragAndDropImageBackgroundColor: {\n    ref: \"backgroundColor\"\n  },\n  dragAndDropImageBorder: true,\n  dragAndDropImageShadow: {\n    ref: \"popupShadow\"\n  },\n  dragHandleColor: {\n    ref: \"foregroundColor\",\n    mix: 0.7\n  },\n  focusShadow: {\n    spread: 3,\n    color: { ref: \"accentColor\", mix: 0.5 }\n  },\n  sideBarPanelWidth: 250,\n  sideBarBackgroundColor: {\n    ref: \"chromeBackgroundColor\"\n  },\n  headerColumnResizeHandleHeight: \"30%\",\n  headerColumnResizeHandleWidth: 2,\n  headerColumnResizeHandleColor: {\n    ref: \"borderColor\"\n  },\n  widgetContainerHorizontalPadding: {\n    calc: \"spacing * 1.5\"\n  },\n  widgetContainerVerticalPadding: {\n    calc: \"spacing * 1.5\"\n  },\n  widgetHorizontalSpacing: {\n    calc: \"spacing * 1.5\"\n  },\n  widgetVerticalSpacing: {\n    ref: \"spacing\"\n  },\n  listItemHeight: {\n    calc: \"iconSize + widgetVerticalSpacing\"\n  },\n  iconSize: 16,\n  toggleButtonWidth: 28,\n  toggleButtonHeight: 18,\n  toggleButtonBorderWidth: 2,\n  toggleButtonOnBorderColor: {\n    ref: \"accentColor\"\n  },\n  toggleButtonOnBackgroundColor: {\n    ref: \"accentColor\"\n  },\n  toggleButtonOffBorderColor: {\n    ref: \"foregroundColor\",\n    mix: 0.3,\n    onto: \"backgroundColor\"\n  },\n  toggleButtonOffBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.3,\n    onto: \"backgroundColor\"\n  },\n  toggleButtonSwitchBorderColor: {\n    ref: \"toggleButtonOffBorderColor\"\n  },\n  toggleButtonSwitchBackgroundColor: {\n    ref: \"backgroundColor\"\n  },\n  menuBorder: {\n    color: {\n      ref: \"foregroundColor\",\n      mix: 0.2\n    }\n  },\n  menuBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.03,\n    onto: \"backgroundColor\"\n  },\n  menuTextColor: {\n    ref: \"foregroundColor\",\n    mix: 0.95,\n    onto: \"backgroundColor\"\n  },\n  menuShadow: {\n    ref: \"popupShadow\"\n  },\n  menuSeparatorColor: {\n    ref: \"borderColor\"\n  },\n  setFilterIndentSize: {\n    ref: \"iconSize\"\n  },\n  chartMenuPanelWidth: 260,\n  chartMenuLabelColor: {\n    ref: \"foregroundColor\",\n    mix: 0.8\n  },\n  iconButtonHoverColor: {\n    ref: \"foregroundColor\",\n    mix: 0.1\n  },\n  dialogShadow: {\n    ref: \"popupShadow\"\n  },\n  dialogBorder: {\n    color: {\n      ref: \"foregroundColor\",\n      mix: 0.2\n    }\n  },\n  panelBackgroundColor: {\n    ref: \"backgroundColor\"\n  },\n  panelTitleBarBackgroundColor: {\n    ref: \"headerBackgroundColor\"\n  },\n  panelTitleBarBorder: true,\n  columnSelectIndentSize: {\n    ref: \"iconSize\"\n  },\n  toolPanelSeparatorBorder: true,\n  tooltipBackgroundColor: {\n    ref: \"chromeBackgroundColor\"\n  },\n  tooltipTextColor: {\n    ref: \"textColor\"\n  },\n  tooltipBorder: true,\n  columnDropCellBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.07\n  },\n  columnDropCellBorder: {\n    color: {\n      ref: \"foregroundColor\",\n      mix: 0.13\n    }\n  },\n  selectCellBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.07\n  },\n  selectCellBorder: {\n    color: {\n      ref: \"foregroundColor\",\n      mix: 0.13\n    }\n  },\n  advancedFilterBuilderButtonBarBorder: true,\n  advancedFilterBuilderIndentSize: {\n    calc: \"spacing * 2 + iconSize\"\n  },\n  advancedFilterBuilderJoinPillColor: \"#f08e8d\",\n  advancedFilterBuilderColumnPillColor: \"#a6e194\",\n  advancedFilterBuilderOptionPillColor: \"#f3c08b\",\n  advancedFilterBuilderValuePillColor: \"#85c0e4\",\n  filterToolPanelGroupIndent: {\n    ref: \"spacing\"\n  },\n  iconButtonHoverBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.1\n  },\n  rowLoadingSkeletonEffectColor: \"rgba(66, 66, 66, 0.2)\"\n};\nvar kebabCase = (str) => str.replace(/[A-Z]/g, (m) => `-${m}`).toLowerCase();\nvar paramToVariableName = (paramName) => `--ag-${kebabCase(paramName)}`;\nvar paramToVariableExpression = (paramName) => `var(${paramToVariableName(paramName)})`;\nvar clamp = (value, min, max) => Math.max(min, Math.min(max, value));\nvar memoize = (fn) => {\n  const values = /* @__PURE__ */ new Map();\n  return (a) => {\n    const key = a;\n    if (!values.has(key)) {\n      values.set(key, fn(a));\n    }\n    return values.get(key);\n  };\n};\nvar getParamType = memoize((param) => {\n  if (/Color$/.test(param))\n    return \"color\";\n  if (/Scale?$/.test(param))\n    return \"scale\";\n  if (param === \"spacing\" || /(Padding|Spacing|Size|Width|Height|Radius|Indent|Start|End|Top|Bottom|Horizontal|Vertical)$/.test(param)) {\n    return \"length\";\n  }\n  if (/Border$/.test(param))\n    return \"border\";\n  if (/BorderStyle$/.test(param))\n    return \"borderStyle\";\n  if (/Shadow$/.test(param))\n    return \"shadow\";\n  if (/Image$/.test(param))\n    return \"image\";\n  if (/Family$/.test(param))\n    return \"fontFamily\";\n  if (/Weight$/.test(param))\n    return \"fontWeight\";\n  if (/Duration$/.test(param))\n    return \"duration\";\n  if (/ColorScheme$/.test(param))\n    return \"colorScheme\";\n  throw new Error(`\"${param}\" is not a valid theme parameter.`);\n});\nvar literalToCSS = (value) => {\n  if (typeof value === \"string\")\n    return value;\n  if (typeof value === \"number\")\n    return String(value);\n  return false;\n};\nvar colorValueToCss = (value) => {\n  if (typeof value === \"string\")\n    return value;\n  if (\"ref\" in value) {\n    const colorExpr = paramToVariableExpression(value.ref);\n    if (value.mix == null) {\n      return colorExpr;\n    }\n    const backgroundExpr = value.onto ? \"var(--ag-background-color)\" : \"transparent\";\n    return `color-mix(in srgb, ${backgroundExpr}, ${colorExpr} ${clamp(value.mix * 100, 0, 100)}%)`;\n  }\n  return false;\n};\nvar colorSchemeValueToCss = literalToCSS;\nvar lengthValueToCss = (value) => {\n  if (typeof value === \"string\")\n    return value;\n  if (typeof value === \"number\")\n    return `${value}px`;\n  if (\"calc\" in value) {\n    const valueWithSpaces = value.calc.replace(/ ?[*/+] ?/g, \" $& \");\n    return `calc(${valueWithSpaces.replace(/-?[a-z][a-z0-9]*\\b(?![-(])/gi, (p) => p[0] === \"-\" ? p : ` ${paramToVariableExpression(p)} `)})`;\n  }\n  if (\"ref\" in value)\n    return paramToVariableExpression(value.ref);\n  return false;\n};\nvar scaleValueToCss = literalToCSS;\nvar borderValueToCss = (value, param) => {\n  if (typeof value === \"string\")\n    return value;\n  if (value === true)\n    return \"solid 1px var(--ag-border-color)\";\n  if (value === false)\n    return param === \"columnBorder\" ? \"solid 1px transparent\" : \"none\";\n  if (\"ref\" in value)\n    return paramToVariableExpression(value.ref);\n  return borderStyleValueToCss(value.style ?? \"solid\") + \" \" + lengthValueToCss(value.width ?? 1) + \" \" + colorValueToCss(value.color ?? { ref: \"borderColor\" });\n};\nvar shadowValueToCss = (value) => {\n  if (typeof value === \"string\")\n    return value;\n  if (value === false)\n    return \"none\";\n  if (\"ref\" in value)\n    return paramToVariableExpression(value.ref);\n  return [\n    lengthValueToCss(value.offsetX ?? 0),\n    lengthValueToCss(value.offsetY ?? 0),\n    lengthValueToCss(value.radius ?? 0),\n    lengthValueToCss(value.spread ?? 0),\n    colorValueToCss(value.color ?? { ref: \"foregroundColor\" })\n  ].join(\" \");\n};\nvar borderStyleValueToCss = literalToCSS;\nvar fontFamilyValueToCss = (value) => {\n  if (typeof value === \"string\")\n    return value;\n  if (\"googleFont\" in value)\n    return fontFamilyValueToCss(value.googleFont);\n  if (\"ref\" in value)\n    return paramToVariableExpression(value.ref);\n  if (Array.isArray(value)) {\n    return value.map((font) => {\n      if (typeof font === \"object\" && \"googleFont\" in font) {\n        font = font.googleFont;\n      }\n      return /^[\\w-]+$/.test(font) ? font : JSON.stringify(font);\n    }).join(\", \");\n  }\n  return false;\n};\nvar fontWeightValueToCss = literalToCSS;\nvar imageValueToCss = (value) => {\n  if (typeof value === \"string\")\n    return value;\n  if (\"url\" in value)\n    return `url(${JSON.stringify(value.url)})`;\n  if (\"svg\" in value)\n    return imageValueToCss({ url: `data:image/svg+xml,${encodeURIComponent(value.svg)}` });\n  if (\"ref\" in value)\n    return paramToVariableExpression(value.ref);\n  return false;\n};\nvar durationValueToCss = (value, param) => {\n  if (typeof value === \"string\")\n    return value;\n  if (typeof value === \"number\") {\n    if (value > 50) {\n      _errorOnce(\n        `Numeric value ${value} passed to ${param} param will be interpreted as ${value} seconds. If this is intentional use \"${value}s\" to silence this warning.`\n      );\n    }\n    return `${value}s`;\n  }\n  if (\"ref\" in value)\n    return paramToVariableExpression(value.ref);\n  return false;\n};\nvar paramValidators = {\n  color: colorValueToCss,\n  colorScheme: colorSchemeValueToCss,\n  length: lengthValueToCss,\n  scale: scaleValueToCss,\n  border: borderValueToCss,\n  borderStyle: borderStyleValueToCss,\n  shadow: shadowValueToCss,\n  image: imageValueToCss,\n  fontFamily: fontFamilyValueToCss,\n  fontWeight: fontWeightValueToCss,\n  duration: durationValueToCss\n};\nvar paramValueToCss = (param, value) => {\n  const type = getParamType(param);\n  return paramValidators[type](value, param);\n};\nvar customThemeCounter = 0;\nvar createTheme = (id = `customTheme${++customThemeCounter}`) => /* @__PURE__ */ new ThemeImpl(id, [], {});\nvar IS_SSR = typeof window !== \"object\" || !window || typeof document !== \"object\" || window.document !== document;\nvar themeClassCounter = 0;\nvar uninstalledLegacyCSS = false;\nvar ThemeImpl = class _ThemeImpl {\n  constructor(id, dependencies = [], defaults = {}) {\n    this.id = id;\n    this.dependencies = dependencies;\n    this.defaults = defaults;\n    this.useCount = 0;\n  }\n  withPart(part) {\n    if (typeof part === \"function\") {\n      part = part();\n    }\n    return new _ThemeImpl(\n      this.id,\n      this.dependencies.concat(part),\n      this.defaults\n    );\n  }\n  withParams(params) {\n    const newParams = { ...this.defaults };\n    for (const [name, value] of Object.entries(params)) {\n      if (value != null) {\n        newParams[name] = value;\n      }\n    }\n    return new _ThemeImpl(this.id, this.dependencies, newParams);\n  }\n  getCSS() {\n    return [coreCSS, ...this._getCSSChunks().map((chunk) => chunk.css)].join(\"\\n\\n\");\n  }\n  startUse(args) {\n    ++this.useCount;\n    if (this.useCount === 1) {\n      void this._install(args);\n    }\n  }\n  stopUse() {\n    --this.useCount;\n    if (this.useCount === 0) {\n      setTimeout(() => {\n        if (this.useCount === 0) {\n          uninstallThemeCSS(this.getCssClass(), this._installRoot);\n        }\n      }, 1e3);\n    }\n  }\n  getCssClass() {\n    if (this._cssClass == null) {\n      this._cssClass = `ag-theme-${++themeClassCounter}`;\n    }\n    return this._cssClass;\n  }\n  getParams() {\n    if (this._getParamsCache)\n      return this._getParamsCache;\n    const mergedParams = { ...coreDefaults };\n    for (const part of this._getFlatUnits()) {\n      for (const [param, value] of Object.entries(part.defaults)) {\n        const partParamValue = value != null ? value : coreDefaults[param];\n        if (partParamValue != null) {\n          mergedParams[param] = partParamValue;\n        }\n      }\n    }\n    return this._getParamsCache = mergedParams;\n  }\n  async _install({ container, loadThemeGoogleFonts }) {\n    if (IS_SSR)\n      return;\n    if (!uninstalledLegacyCSS) {\n      uninstalledLegacyCSS = true;\n      uninstallThemeCSS(\"legacy\", document.head);\n      const legacyStylesLoaded = getComputedStyle(document.body).getPropertyValue(\"--ag-legacy-styles-loaded\");\n      if (legacyStylesLoaded) {\n        _errorOnce(\"both Theming API and the ag-grid.css are used on the same page, styling will be incorrect\");\n      }\n    }\n    let root = container.getRootNode();\n    if (!(root instanceof ShadowRoot)) {\n      root = document.head;\n    }\n    this._installRoot = root;\n    const loadPromises = [];\n    loadPromises.push(installCSS({ css: coreCSS, part: \"core\", root }));\n    for (const googleFont of getGoogleFontsUsed(this)) {\n      if (loadThemeGoogleFonts) {\n        loadGoogleFont(googleFont);\n      } else if (loadThemeGoogleFonts == null) {\n        _warnOnce(\n          `theme uses google font ${googleFont} but no value for loadThemeGoogleFonts was provided. Pass true to load fonts from ${googleFontsDomain} or false to silence this warning.`\n        );\n      }\n    }\n    for (const chunk of this._getCSSChunks()) {\n      installCSS({ css: chunk.css, part: chunk.id, scope: this.getCssClass(), root });\n    }\n    return Promise.all(loadPromises);\n  }\n  _getFlatUnits() {\n    if (this._getFlatUnitsCache)\n      return this._getFlatUnitsCache;\n    const accumulator = {};\n    for (const part of this.dependencies) {\n      delete accumulator[part.feature];\n      accumulator[part.feature] = part;\n    }\n    const flatUnits = [\n      ...Object.values(accumulator),\n      // add `this` at the end so that CSS and params added to the theme override anything added to parts\n      this\n    ];\n    return this._getFlatUnitsCache = flatUnits;\n  }\n  _getCSSChunks() {\n    if (this._getCssChunksCache)\n      return this._getCssChunksCache;\n    const chunks = [];\n    chunks.push(makeVariablesChunk(this));\n    for (const part of this._getFlatUnits()) {\n      if (part.css && part.css.length > 0) {\n        let css = `/* Part ${part.id} */`;\n        css += part.css.map((p) => typeof p === \"function\" ? p() : p).join(\"\\n\") + \"\\n\";\n        css = `.${this.getCssClass()} {\n\t${css}\n}`;\n        chunks.push({ css, id: part.id });\n      }\n    }\n    return this._getCssChunksCache = chunks;\n  }\n};\nvar makeVariablesChunk = (theme) => {\n  let variablesCss = \"\";\n  let inheritanceCss = \"\";\n  for (const [key, value] of Object.entries(theme.getParams())) {\n    const cssValue = paramValueToCss(key, value);\n    if (cssValue === false) {\n      _errorOnce(`Invalid value for param ${key} - ${describeValue(value)}`);\n    } else {\n      const cssName = paramToVariableName(key);\n      const inheritedName = cssName.replace(\"--ag-\", \"--ag-inherited-\");\n      variablesCss += `\t${cssName}: var(${inheritedName}, ${cssValue});\n`;\n      inheritanceCss += `\t${inheritedName}: var(${cssName});\n`;\n    }\n  }\n  const rootSelector = `:where(.${theme.getCssClass()})`;\n  let css = `${rootSelector} {\n${variablesCss}}\n`;\n  css += `:has(> ${rootSelector}):not(${rootSelector}) {\n${inheritanceCss}}\n`;\n  return {\n    css,\n    id: \"variables\"\n  };\n};\nvar getGoogleFontsUsed = (theme) => Array.from(\n  new Set(\n    Object.values(theme.getParams()).flat().map((value) => value?.googleFont).filter((value) => typeof value === \"string\")\n  )\n).sort();\nvar installCSS = async ({ root, part, scope, css }) => {\n  let selector = `:scope > style[data-ag-part=\"${part}\"]`;\n  if (scope) {\n    selector += `[data-ag-scope=\"${scope}\"]`;\n  }\n  let style = root.querySelector(selector);\n  if (!style) {\n    style = document.createElement(\"style\");\n    style.dataset.agPart = part;\n    if (scope) {\n      style.dataset.agScope = scope;\n    }\n    const existingStyles = root.querySelectorAll(\":scope > style[data-ag-part]\");\n    const lastExistingStyle = existingStyles[existingStyles.length - 1];\n    if (lastExistingStyle) {\n      lastExistingStyle.insertAdjacentElement(\"afterend\", style);\n    } else if (root.firstElementChild) {\n      root.firstElementChild.insertAdjacentElement(\"beforebegin\", style);\n    } else {\n      root.appendChild(style);\n    }\n  }\n  if (style._agTextContent !== css) {\n    style.textContent = css;\n    style._agTextContent = css;\n    return resolveOnLoad(style);\n  }\n};\nvar uninstallThemeCSS = (scope, root) => {\n  for (const style of Array.from(root.querySelectorAll(`:scope > style[data-ag-scope=\"${scope}\"]`))) {\n    style.remove();\n  }\n};\nvar googleFontsLoaded = /* @__PURE__ */ new Set();\nvar loadGoogleFont = async (font) => {\n  if (googleFontsLoaded.has(font))\n    return;\n  googleFontsLoaded.add(font);\n  const css = `@import url('https://${googleFontsDomain}/css2?family=${encodeURIComponent(font)}:wght@100;200;300;400;500;600;700;800;900&display=swap');\n`;\n  return installCSS({ css, part: `googleFont:${font}`, root: document.head });\n};\nvar googleFontsDomain = \"fonts.googleapis.com\";\nvar resolveOnLoad = (element) => new Promise((resolve) => {\n  const handler = () => {\n    element.removeEventListener(\"load\", handler);\n    resolve();\n  };\n  element.addEventListener(\"load\", handler);\n});\nvar describeValue = (value) => {\n  if (value == null)\n    return String(value);\n  return `${typeof value} ${value}`;\n};\nvar checkboxStyleDefaultCSS = (\n  /*css*/\n  `.ag-checkbox-input-wrapper,.ag-radio-button-input-wrapper{background-color:var(--ag-checkbox-unchecked-background-color);border:solid var(--ag-checkbox-border-width) var(--ag-checkbox-unchecked-border-color);flex:none;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);& input{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:100%;opacity:0;width:100%}&:after{content:\"\";display:block;inset:0;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;pointer-events:none;position:absolute}&.ag-checked{background-color:var(--ag-checkbox-checked-background-color);border-color:var(--ag-checkbox-checked-border-color);&:after{background-color:var(--ag-checkbox-checked-shape-color)}}&:active,&:focus-within{box-shadow:var(--ag-focus-shadow)}&.ag-disabled{filter:grayscale();opacity:.5}}.ag-checkbox-input-wrapper{border-radius:var(--ag-checkbox-border-radius);&.ag-checked:after{-webkit-mask-image:var(--ag-checkbox-checked-shape-image);mask-image:var(--ag-checkbox-checked-shape-image)}&.ag-indeterminate{background-color:var(--ag-checkbox-indeterminate-background-color);border-color:var(--ag-checkbox-indeterminate-border-color);&:after{background-color:var(--ag-checkbox-indeterminate-shape-color);-webkit-mask-image:var(--ag-checkbox-indeterminate-shape-image);mask-image:var(--ag-checkbox-indeterminate-shape-image)}}}.ag-radio-button-input-wrapper{border-radius:100%;&.ag-checked:after{-webkit-mask-image:var(--ag-radio-checked-shape-image);mask-image:var(--ag-radio-checked-shape-image)}}`\n);\nvar checkboxStyleDefault = /* @__PURE__ */ createPart(\"checkboxStyle\", \"default\").withAdditionalParams({\n  checkboxBorderWidth: 1,\n  checkboxBorderRadius: {\n    ref: \"borderRadius\"\n  },\n  checkboxUncheckedBackgroundColor: {\n    ref: \"backgroundColor\"\n  },\n  checkboxUncheckedBorderColor: {\n    ref: \"foregroundColor\",\n    mix: 0.3,\n    onto: \"backgroundColor\"\n  },\n  checkboxCheckedBackgroundColor: {\n    ref: \"accentColor\"\n  },\n  checkboxCheckedBorderColor: {\n    ref: \"accentColor\"\n  },\n  checkboxCheckedShapeImage: {\n    svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"7\" fill=\"none\"><path stroke=\"#000\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.75\" d=\"M1 3.5 3.5 6l5-5\"/></svg>'\n  },\n  checkboxCheckedShapeColor: {\n    ref: \"backgroundColor\"\n  },\n  checkboxIndeterminateBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.3,\n    onto: \"backgroundColor\"\n  },\n  checkboxIndeterminateBorderColor: {\n    ref: \"foregroundColor\",\n    mix: 0.3,\n    onto: \"backgroundColor\"\n  },\n  checkboxIndeterminateShapeImage: {\n    svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"2\" fill=\"none\"><rect width=\"10\" height=\"2\" fill=\"#000\" rx=\"1\"/></svg>'\n  },\n  checkboxIndeterminateShapeColor: {\n    ref: \"backgroundColor\"\n  },\n  radioCheckedShapeImage: {\n    svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"6\" height=\"6\" fill=\"none\"><circle cx=\"3\" cy=\"3\" r=\"3\" fill=\"#000\"/></svg>'\n  }\n}).withCSS(checkboxStyleDefaultCSS);\nvar colorSchemeLight = /* @__PURE__ */ createPart(\"colorScheme\", \"light\");\nvar colorSchemeLightWarm = /* @__PURE__ */ createPart(\"colorScheme\", \"lightWarm\").withParams({\n  foregroundColor: \"#000000de\",\n  borderColor: \"#60300026\",\n  chromeBackgroundColor: \"#60300005\"\n});\nvar colorSchemeLightCold = /* @__PURE__ */ createPart(\"colorScheme\", \"lightCold\").withParams({\n  foregroundColor: \"#000\",\n  backgroundColor: \"#fff\",\n  chromeBackgroundColor: \"#f3f8f8\"\n});\nvar colorSchemeDark = /* @__PURE__ */ createPart(\"colorScheme\", \"dark\").withParams({\n  backgroundColor: \"hsl(217, 0%, 17%)\",\n  foregroundColor: \"#FFF\",\n  chromeBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.05,\n    onto: \"backgroundColor\"\n  },\n  browserColorScheme: \"dark\"\n});\nvar colorSchemeDarkWarm = /* @__PURE__ */ createPart(\"colorScheme\", \"darkWarm\").withParams({\n  backgroundColor: \"hsl(29, 10%, 17%)\",\n  foregroundColor: \"#FFF\",\n  chromeBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.05,\n    onto: \"backgroundColor\"\n  },\n  browserColorScheme: \"dark\"\n});\nvar colorSchemeDarkBlue = /* @__PURE__ */ createPart(\"colorScheme\", \"darkBlue\").withParams({\n  backgroundColor: \"#1f2836\",\n  foregroundColor: \"#FFF\",\n  chromeBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.07,\n    onto: \"backgroundColor\"\n  },\n  browserColorScheme: \"dark\"\n});\nvar iconSetAlpineCSS = (\n  /*css*/\n  `.ag-icon:before{background-color:currentColor;content:\"\";display:block;height:var(--ag-icon-size);-webkit-mask-image:linear-gradient(#0000,#0000);mask-image:linear-gradient(#0000,#0000);-webkit-mask-size:contain;mask-size:contain;width:var(--ag-icon-size)}.ag-icon-aggregation:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M24 6H8v2l8 8-8 8v2h16v-2H11l8-8-8-8h13z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M24 6H8v2l8 8-8 8v2h16v-2H11l8-8-8-8h13z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-arrows:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M7.515 11.171 2.687 16l4.828 4.829-1.414 1.414L-.142 16l6.243-6.243zm16.97 0 1.414-1.414L32.142 16l-6.243 6.243-1.414-1.414L29.313 16zM16.028 13.2l2.829 2.828-2.829 2.829-2.828-2.829zm-4.857 11.285L16 29.313l4.829-4.828 1.414 1.414L16 32.142l-6.243-6.243zm0-16.97L9.757 6.101 16-.142l6.243 6.243-1.414 1.414L16 2.687z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M7.515 11.171 2.687 16l4.828 4.829-1.414 1.414L-.142 16l6.243-6.243zm16.97 0 1.414-1.414L32.142 16l-6.243 6.243-1.414-1.414L29.313 16zM16.028 13.2l2.829 2.828-2.829 2.829-2.828-2.829zm-4.857 11.285L16 29.313l4.829-4.828 1.414 1.414L16 32.142l-6.243-6.243zm0-16.97L9.757 6.101 16-.142l6.243 6.243-1.414 1.414L16 2.687z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-asc:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m5.333 16 1.88 1.88 7.453-7.44v16.227h2.667V10.44l7.44 7.453L26.666 16 15.999 5.333 5.332 16z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m5.333 16 1.88 1.88 7.453-7.44v16.227h2.667V10.44l7.44 7.453L26.666 16 15.999 5.333 5.332 16z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-cancel:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M16 2.667A13.32 13.32 0 0 0 2.667 16c0 7.373 5.96 13.333 13.333 13.333S29.333 23.373 29.333 16 23.373 2.667 16 2.667m6.667 18.12-1.88 1.88L16 17.88l-4.787 4.787-1.88-1.88L14.12 16l-4.787-4.787 1.88-1.88L16 14.12l4.787-4.787 1.88 1.88L17.88 16z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M16 2.667A13.32 13.32 0 0 0 2.667 16c0 7.373 5.96 13.333 13.333 13.333S29.333 23.373 29.333 16 23.373 2.667 16 2.667m6.667 18.12-1.88 1.88L16 17.88l-4.787 4.787-1.88-1.88L14.12 16l-4.787-4.787 1.88-1.88L16 14.12l4.787-4.787 1.88 1.88L17.88 16z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-chart:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Echart%3C/title%3E%3Cg fill='%23000' fill-rule='nonzero'%3E%3Cpath d='M14 7h4v18h-4zM8 17h4v8H8zM20 13h4v12h-4z'/%3E%3C/g%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Echart%3C/title%3E%3Cg fill='%23000' fill-rule='nonzero'%3E%3Cpath d='M14 7h4v18h-4zM8 17h4v8H8zM20 13h4v12h-4z'/%3E%3C/g%3E%3C/svg%3E\")}.ag-icon-color-picker:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M23.907 17.587 10.574 4.254l-1.88 1.88 3.173 3.173-8.28 8.28 10.16 10.16zm-16.547 0 6.387-6.387 6.387 6.387zm18.387 2s-2.667 2.893-2.667 4.667c0 1.467 1.2 2.667 2.667 2.667s2.667-1.2 2.667-2.667c0-1.773-2.667-4.667-2.667-4.667' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M23.907 17.587 10.574 4.254l-1.88 1.88 3.173 3.173-8.28 8.28 10.16 10.16zm-16.547 0 6.387-6.387 6.387 6.387zm18.387 2s-2.667 2.893-2.667 4.667c0 1.467 1.2 2.667 2.667 2.667s2.667-1.2 2.667-2.667c0-1.773-2.667-4.667-2.667-4.667' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-columns:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M26 25H6V7h20zM12 11H8v12h4zm6 0h-4v12h4zm6 12V11h-4v12z' style='fill-rule:nonzero' transform='translate(0 -1)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M26 25H6V7h20zM12 11H8v12h4zm6 0h-4v12h4zm6 12V11h-4v12z' style='fill-rule:nonzero' transform='translate(0 -1)'/%3E%3C/svg%3E\")}.ag-icon-contracted:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m12 6 10 10-10 10-2-2 8-8-8-8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m12 6 10 10-10 10-2-2 8-8-8-8z'/%3E%3C/svg%3E\")}.ag-icon-copy:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M22 1.333H6A2.675 2.675 0 0 0 3.333 4v18.667H6V4h16zm4 5.334H11.333a2.675 2.675 0 0 0-2.667 2.667v18.667c0 1.467 1.2 2.667 2.667 2.667H26c1.467 0 2.667-1.2 2.667-2.667V9.334c0-1.467-1.2-2.667-2.667-2.667M26 28H11.333V9.333H26z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M22 1.333H6A2.675 2.675 0 0 0 3.333 4v18.667H6V4h16zm4 5.334H11.333a2.675 2.675 0 0 0-2.667 2.667v18.667c0 1.467 1.2 2.667 2.667 2.667H26c1.467 0 2.667-1.2 2.667-2.667V9.334c0-1.467-1.2-2.667-2.667-2.667M26 28H11.333V9.333H26z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-cross:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M15.984 13.894 27.05 2.828l2.122 2.122-11.066 11.066 11.066 11.066-2.122 2.12-11.066-11.066L4.918 29.202l-2.12-2.12 11.066-11.066L2.798 4.95l2.12-2.122z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M15.984 13.894 27.05 2.828l2.122 2.122-11.066 11.066 11.066 11.066-2.122 2.12-11.066-11.066L4.918 29.202l-2.12-2.12 11.066-11.066L2.798 4.95l2.12-2.122z'/%3E%3C/svg%3E\")}.ag-icon-csv:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M384 131.9c-7.753-8.433-110.425-128.473-114.9-133L48-.1C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48zm-35.9 2.1H257V27.9zM30 479V27h200l1 105c0 13.3-1.3 29 12 29h111l1 318z' style='fill-rule:nonzero' transform='matrix(.06285 0 0 .06285 3.934 -.054)'/%3E%3Cpath d='M.688-.226a.2.2 0 0 1-.017.074.28.28 0 0 1-.145.14.412.412 0 0 1-.234.013.28.28 0 0 1-.202-.168.468.468 0 0 1-.04-.19q0-.086.025-.155a.319.319 0 0 1 .182-.191.4.4 0 0 1 .134-.025q.087 0 .155.035a.3.3 0 0 1 .104.085.17.17 0 0 1 .036.097.06.06 0 0 1-.018.044.06.06 0 0 1-.042.019.06.06 0 0 1-.042-.013.2.2 0 0 1-.031-.046.2.2 0 0 0-.066-.079.16.16 0 0 0-.095-.027.17.17 0 0 0-.142.068.3.3 0 0 0-.053.193.4.4 0 0 0 .023.139.2.2 0 0 0 .067.083.2.2 0 0 0 .1.027q.063 0 .106-.031a.2.2 0 0 0 .065-.091.2.2 0 0 1 .023-.046q.014-.018.044-.018a.06.06 0 0 1 .044.018.06.06 0 0 1 .019.045' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 7.122 25.977)'/%3E%3Cpath d='M.622-.215a.2.2 0 0 1-.033.117.23.23 0 0 1-.098.081.4.4 0 0 1-.153.029.34.34 0 0 1-.175-.04.23.23 0 0 1-.079-.077.17.17 0 0 1-.031-.093q0-.027.019-.045a.06.06 0 0 1 .046-.019.06.06 0 0 1 .039.014.1.1 0 0 1 .027.044.3.3 0 0 0 .03.057q.015.023.044.038.03.015.076.015.065 0 .105-.03a.09.09 0 0 0 .04-.075.08.08 0 0 0-.022-.058.14.14 0 0 0-.056-.034 1 1 0 0 0-.092-.025.7.7 0 0 1-.129-.042.2.2 0 0 1-.083-.066.17.17 0 0 1-.03-.104q0-.058.032-.105a.2.2 0 0 1 .093-.07.4.4 0 0 1 .144-.025q.066 0 .114.016a.3.3 0 0 1 .08.044.2.2 0 0 1 .046.057q.015.03.015.058a.07.07 0 0 1-.018.046.06.06 0 0 1-.046.021q-.025 0-.038-.012a.2.2 0 0 1-.028-.041.2.2 0 0 0-.047-.063Q.387-.625.326-.625a.15.15 0 0 0-.09.025q-.035.024-.035.059 0 .021.012.037a.1.1 0 0 0 .032.027.4.4 0 0 0 .111.036q.06.015.11.031.048.018.083.042a.2.2 0 0 1 .054.062.2.2 0 0 1 .019.091' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 13.339 25.977)'/%3E%3Cpath d='m.184-.633.162.48.163-.483q.013-.038.019-.053a.062.062 0 0 1 .061-.039q.018 0 .034.009a.1.1 0 0 1 .025.025q.009.015.009.031L.654-.64l-.007.025-.009.024-.173.468-.019.051a.2.2 0 0 1-.021.042.1.1 0 0 1-.033.03.1.1 0 0 1-.049.012.1.1 0 0 1-.05-.011A.1.1 0 0 1 .26-.03a.2.2 0 0 1-.021-.042L.22-.123.05-.587.041-.612.033-.638.03-.662q0-.025.02-.046a.07.07 0 0 1 .05-.02q.037 0 .053.023.015.023.031.072' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 18.94 25.977)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M384 131.9c-7.753-8.433-110.425-128.473-114.9-133L48-.1C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48zm-35.9 2.1H257V27.9zM30 479V27h200l1 105c0 13.3-1.3 29 12 29h111l1 318z' style='fill-rule:nonzero' transform='matrix(.06285 0 0 .06285 3.934 -.054)'/%3E%3Cpath d='M.688-.226a.2.2 0 0 1-.017.074.28.28 0 0 1-.145.14.412.412 0 0 1-.234.013.28.28 0 0 1-.202-.168.468.468 0 0 1-.04-.19q0-.086.025-.155a.319.319 0 0 1 .182-.191.4.4 0 0 1 .134-.025q.087 0 .155.035a.3.3 0 0 1 .104.085.17.17 0 0 1 .036.097.06.06 0 0 1-.018.044.06.06 0 0 1-.042.019.06.06 0 0 1-.042-.013.2.2 0 0 1-.031-.046.2.2 0 0 0-.066-.079.16.16 0 0 0-.095-.027.17.17 0 0 0-.142.068.3.3 0 0 0-.053.193.4.4 0 0 0 .023.139.2.2 0 0 0 .067.083.2.2 0 0 0 .1.027q.063 0 .106-.031a.2.2 0 0 0 .065-.091.2.2 0 0 1 .023-.046q.014-.018.044-.018a.06.06 0 0 1 .044.018.06.06 0 0 1 .019.045' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 7.122 25.977)'/%3E%3Cpath d='M.622-.215a.2.2 0 0 1-.033.117.23.23 0 0 1-.098.081.4.4 0 0 1-.153.029.34.34 0 0 1-.175-.04.23.23 0 0 1-.079-.077.17.17 0 0 1-.031-.093q0-.027.019-.045a.06.06 0 0 1 .046-.019.06.06 0 0 1 .039.014.1.1 0 0 1 .027.044.3.3 0 0 0 .03.057q.015.023.044.038.03.015.076.015.065 0 .105-.03a.09.09 0 0 0 .04-.075.08.08 0 0 0-.022-.058.14.14 0 0 0-.056-.034 1 1 0 0 0-.092-.025.7.7 0 0 1-.129-.042.2.2 0 0 1-.083-.066.17.17 0 0 1-.03-.104q0-.058.032-.105a.2.2 0 0 1 .093-.07.4.4 0 0 1 .144-.025q.066 0 .114.016a.3.3 0 0 1 .08.044.2.2 0 0 1 .046.057q.015.03.015.058a.07.07 0 0 1-.018.046.06.06 0 0 1-.046.021q-.025 0-.038-.012a.2.2 0 0 1-.028-.041.2.2 0 0 0-.047-.063Q.387-.625.326-.625a.15.15 0 0 0-.09.025q-.035.024-.035.059 0 .021.012.037a.1.1 0 0 0 .032.027.4.4 0 0 0 .111.036q.06.015.11.031.048.018.083.042a.2.2 0 0 1 .054.062.2.2 0 0 1 .019.091' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 13.339 25.977)'/%3E%3Cpath d='m.184-.633.162.48.163-.483q.013-.038.019-.053a.062.062 0 0 1 .061-.039q.018 0 .034.009a.1.1 0 0 1 .025.025q.009.015.009.031L.654-.64l-.007.025-.009.024-.173.468-.019.051a.2.2 0 0 1-.021.042.1.1 0 0 1-.033.03.1.1 0 0 1-.049.012.1.1 0 0 1-.05-.011A.1.1 0 0 1 .26-.03a.2.2 0 0 1-.021-.042L.22-.123.05-.587.041-.612.033-.638.03-.662q0-.025.02-.046a.07.07 0 0 1 .05-.02q.037 0 .053.023.015.023.031.072' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 18.94 25.977)'/%3E%3C/svg%3E\")}.ag-icon-cut:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M13.775 15.198 3.835 2.945a1.501 1.501 0 0 1 2.33-1.89l14.997 18.488A6.003 6.003 0 0 1 29.657 25c0 3.311-2.688 6-6 6s-6-2.689-6-6c0-1.335.437-2.569 1.176-3.566l-3.127-3.855-3.001 3.7A5.97 5.97 0 0 1 14 25c0 3.311-2.689 6-6 6s-6-2.689-6-6a6.003 6.003 0 0 1 8.315-5.536zm9.882 6.702a3.1 3.1 0 0 0-3.1 3.1c0 1.711 1.389 3.1 3.1 3.1s3.1-1.389 3.1-3.1-1.389-3.1-3.1-3.1M8 21.95a3.05 3.05 0 1 0 .001 6.101A3.05 3.05 0 0 0 8 21.95m9.63-11.505 1.932 2.381 8.015-9.881a1.5 1.5 0 0 0-2.329-1.89z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M13.775 15.198 3.835 2.945a1.501 1.501 0 0 1 2.33-1.89l14.997 18.488A6.003 6.003 0 0 1 29.657 25c0 3.311-2.688 6-6 6s-6-2.689-6-6c0-1.335.437-2.569 1.176-3.566l-3.127-3.855-3.001 3.7A5.97 5.97 0 0 1 14 25c0 3.311-2.689 6-6 6s-6-2.689-6-6a6.003 6.003 0 0 1 8.315-5.536zm9.882 6.702a3.1 3.1 0 0 0-3.1 3.1c0 1.711 1.389 3.1 3.1 3.1s3.1-1.389 3.1-3.1-1.389-3.1-3.1-3.1M8 21.95a3.05 3.05 0 1 0 .001 6.101A3.05 3.05 0 0 0 8 21.95m9.63-11.505 1.932 2.381 8.015-9.881a1.5 1.5 0 0 0-2.329-1.89z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-desc:before,.ag-icon-down:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m26.667 16-1.88-1.88-7.453 7.44V5.333h-2.667V21.56l-7.44-7.453L5.334 16l10.667 10.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m26.667 16-1.88-1.88-7.453 7.44V5.333h-2.667V21.56l-7.44-7.453L5.334 16l10.667 10.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-excel:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M384 131.9c-7.753-8.433-110.425-128.473-114.9-133L48-.1C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48zm-35.9 2.1H257V27.9zM30 479V27h200l1 105c0 13.3-1.3 29 12 29h111l1 318z' style='fill-rule:nonzero' transform='matrix(.06285 0 0 .06285 3.934 -.054)'/%3E%3Cpath d='m.052-.139.16-.234-.135-.208a.4.4 0 0 1-.028-.052.1.1 0 0 1-.01-.042.05.05 0 0 1 .018-.037.07.07 0 0 1 .045-.016q.03 0 .047.018a1 1 0 0 1 .047.066l.107.174.115-.174.024-.038.019-.026.021-.015a.1.1 0 0 1 .027-.005.06.06 0 0 1 .044.016.05.05 0 0 1 .018.039q0 .033-.038.089l-.141.211.152.234a.3.3 0 0 1 .03.051.1.1 0 0 1 .009.038.1.1 0 0 1-.008.031.1.1 0 0 1-.024.023.1.1 0 0 1-.034.008.1.1 0 0 1-.035-.008.1.1 0 0 1-.023-.022L.427-.067.301-.265l-.134.204-.022.034-.016.019a.1.1 0 0 1-.022.015.1.1 0 0 1-.03.005.06.06 0 0 1-.044-.016.06.06 0 0 1-.017-.047q0-.036.036-.088' style='fill-rule:nonzero' transform='matrix(17.82892 0 0 16.50777 10.371 25.928)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M384 131.9c-7.753-8.433-110.425-128.473-114.9-133L48-.1C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48zm-35.9 2.1H257V27.9zM30 479V27h200l1 105c0 13.3-1.3 29 12 29h111l1 318z' style='fill-rule:nonzero' transform='matrix(.06285 0 0 .06285 3.934 -.054)'/%3E%3Cpath d='m.052-.139.16-.234-.135-.208a.4.4 0 0 1-.028-.052.1.1 0 0 1-.01-.042.05.05 0 0 1 .018-.037.07.07 0 0 1 .045-.016q.03 0 .047.018a1 1 0 0 1 .047.066l.107.174.115-.174.024-.038.019-.026.021-.015a.1.1 0 0 1 .027-.005.06.06 0 0 1 .044.016.05.05 0 0 1 .018.039q0 .033-.038.089l-.141.211.152.234a.3.3 0 0 1 .03.051.1.1 0 0 1 .009.038.1.1 0 0 1-.008.031.1.1 0 0 1-.024.023.1.1 0 0 1-.034.008.1.1 0 0 1-.035-.008.1.1 0 0 1-.023-.022L.427-.067.301-.265l-.134.204-.022.034-.016.019a.1.1 0 0 1-.022.015.1.1 0 0 1-.03.005.06.06 0 0 1-.044-.016.06.06 0 0 1-.017-.047q0-.036.036-.088' style='fill-rule:nonzero' transform='matrix(17.82892 0 0 16.50777 10.371 25.928)'/%3E%3C/svg%3E\")}.ag-icon-expanded:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M20 26 10 16 20 6l2 2-8 8 8 8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M20 26 10 16 20 6l2 2-8 8 8 8z'/%3E%3C/svg%3E\")}.ag-icon-eye-slash:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eeye-slash%3C/title%3E%3Cpath fill='%23000' fill-rule='nonzero' d='M8.95 10.364 7 8.414 8.414 7l2.32 2.32A13.2 13.2 0 0 1 16.5 8c5.608 0 10.542 3.515 12.381 8.667L29 17l-.119.333a13 13 0 0 1-4.255 5.879l1.466 1.466-1.414 1.414-1.754-1.753A13.2 13.2 0 0 1 16.5 26c-5.608 0-10.542-3.515-12.381-8.667L4 17l.119-.333a13 13 0 0 1 4.83-6.303m1.445 1.445A11.02 11.02 0 0 0 6.148 17c1.646 4.177 5.728 7 10.352 7 1.76 0 3.441-.409 4.94-1.146l-1.878-1.878A5.06 5.06 0 0 1 16.5 22c-2.789 0-5.05-2.239-5.05-5 0-1.158.398-2.223 1.065-3.07zm1.855-.974 1.794 1.795A5.07 5.07 0 0 1 16.5 12c2.789 0 5.05 2.239 5.05 5 0 .9-.24 1.745-.661 2.474l2.305 2.306A11 11 0 0 0 26.852 17c-1.646-4.177-5.728-7-10.352-7-1.495 0-2.933.295-4.25.835'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eeye-slash%3C/title%3E%3Cpath fill='%23000' fill-rule='nonzero' d='M8.95 10.364 7 8.414 8.414 7l2.32 2.32A13.2 13.2 0 0 1 16.5 8c5.608 0 10.542 3.515 12.381 8.667L29 17l-.119.333a13 13 0 0 1-4.255 5.879l1.466 1.466-1.414 1.414-1.754-1.753A13.2 13.2 0 0 1 16.5 26c-5.608 0-10.542-3.515-12.381-8.667L4 17l.119-.333a13 13 0 0 1 4.83-6.303m1.445 1.445A11.02 11.02 0 0 0 6.148 17c1.646 4.177 5.728 7 10.352 7 1.76 0 3.441-.409 4.94-1.146l-1.878-1.878A5.06 5.06 0 0 1 16.5 22c-2.789 0-5.05-2.239-5.05-5 0-1.158.398-2.223 1.065-3.07zm1.855-.974 1.794 1.795A5.07 5.07 0 0 1 16.5 12c2.789 0 5.05 2.239 5.05 5 0 .9-.24 1.745-.661 2.474l2.305 2.306A11 11 0 0 0 26.852 17c-1.646-4.177-5.728-7-10.352-7-1.495 0-2.933.295-4.25.835'/%3E%3C/svg%3E\")}.ag-icon-eye:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M16.5 23c4.624 0 8.706-2.823 10.352-7-1.646-4.177-5.728-7-10.352-7s-8.706 2.823-10.352 7c1.646 4.177 5.728 7 10.352 7M4.119 15.667C5.958 10.515 10.892 7 16.5 7s10.542 3.515 12.381 8.667L29 16l-.119.333C27.042 21.485 22.108 25 16.5 25S5.958 21.485 4.119 16.333L4 16zM16.5 21c2.789 0 5.049-2.239 5.049-5s-2.26-5-5.049-5-5.049 2.239-5.049 5 2.26 5 5.049 5' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M16.5 23c4.624 0 8.706-2.823 10.352-7-1.646-4.177-5.728-7-10.352-7s-8.706 2.823-10.352 7c1.646 4.177 5.728 7 10.352 7M4.119 15.667C5.958 10.515 10.892 7 16.5 7s10.542 3.515 12.381 8.667L29 16l-.119.333C27.042 21.485 22.108 25 16.5 25S5.958 21.485 4.119 16.333L4 16zM16.5 21c2.789 0 5.049-2.239 5.049-5s-2.26-5-5.049-5-5.049 2.239-5.049 5 2.26 5 5.049 5' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-filter:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m28 8-8 8v5l-6 6V16L6 8V6h22zM9 8l7 7v7l2-2v-5l7-7z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m28 8-8 8v5l-6 6V16L6 8V6h22zM9 8l7 7v7l2-2v-5l7-7z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-first:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M24.273 22.12 18.153 16l6.12-6.12L22.393 8l-8 8 8 8zM7.727 8h2.667v16H7.727z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M24.273 22.12 18.153 16l6.12-6.12L22.393 8l-8 8 8 8zM7.727 8h2.667v16H7.727z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-group:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M14 7v1H9V7zm0-3v1H5.001V4zm-7 7H5v-1h2zm0-3H5V7h2zM3 5H1V4h2zm11 5v1H9v-1zm-7 4H5v-1h2zm7-1v1H9v-1z' style='fill-rule:nonzero' transform='matrix(2 0 0 2 0 -2)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M14 7v1H9V7zm0-3v1H5.001V4zm-7 7H5v-1h2zm0-3H5V7h2zM3 5H1V4h2zm11 5v1H9v-1zm-7 4H5v-1h2zm7-1v1H9v-1z' style='fill-rule:nonzero' transform='matrix(2 0 0 2 0 -2)'/%3E%3C/svg%3E\")}.ag-icon-last:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m7.727 9.88 6.12 6.12-6.12 6.12L9.607 24l8-8-8-8zM21.607 8h2.667v16h-2.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m7.727 9.88 6.12 6.12-6.12 6.12L9.607 24l8-8-8-8zM21.607 8h2.667v16h-2.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-left:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M26.667 14.667H10.44l7.453-7.453L16 5.334 5.333 16.001 16 26.668l1.88-1.88-7.44-7.453h16.227z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M26.667 14.667H10.44l7.453-7.453L16 5.334 5.333 16.001 16 26.668l1.88-1.88-7.44-7.453h16.227z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-linked:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M5.2 16a4.136 4.136 0 0 1 4.133-4.133h5.333V9.334H9.333a6.67 6.67 0 0 0-6.667 6.667 6.67 6.67 0 0 0 6.667 6.667h5.333v-2.533H9.333A4.136 4.136 0 0 1 5.2 16.002zm5.467 1.333h10.667v-2.667H10.667zm12-8h-5.333v2.533h5.333a4.136 4.136 0 0 1 4.133 4.133 4.136 4.136 0 0 1-4.133 4.133h-5.333v2.533h5.333a6.67 6.67 0 0 0 6.667-6.667 6.67 6.67 0 0 0-6.667-6.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M5.2 16a4.136 4.136 0 0 1 4.133-4.133h5.333V9.334H9.333a6.67 6.67 0 0 0-6.667 6.667 6.67 6.67 0 0 0 6.667 6.667h5.333v-2.533H9.333A4.136 4.136 0 0 1 5.2 16.002zm5.467 1.333h10.667v-2.667H10.667zm12-8h-5.333v2.533h5.333a4.136 4.136 0 0 1 4.133 4.133 4.136 4.136 0 0 1-4.133 4.133h-5.333v2.533h5.333a6.67 6.67 0 0 0 6.667-6.667 6.67 6.67 0 0 0-6.667-6.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-loading:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M17 29h-2v-8h2zm-3.586-9L7 26.414 5.586 25 12 18.586zm13 5L25 26.414 18.586 20 20 18.586zM29 17h-8v-2h8zm-18 0H3v-2h8zm2.414-5L12 13.414 5.586 7 7 5.586zm13-5L20 13.414 18.586 12 25 5.586zM17 11h-2V3h2z' style='fill-rule:nonzero' transform='translate(-3.692 -3.692)scale(1.23077)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M17 29h-2v-8h2zm-3.586-9L7 26.414 5.586 25 12 18.586zm13 5L25 26.414 18.586 20 20 18.586zM29 17h-8v-2h8zm-18 0H3v-2h8zm2.414-5L12 13.414 5.586 7 7 5.586zm13-5L20 13.414 18.586 12 25 5.586zM17 11h-2V3h2z' style='fill-rule:nonzero' transform='translate(-3.692 -3.692)scale(1.23077)'/%3E%3C/svg%3E\")}.ag-icon-maximize:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M14 30H2V18h2.828v7.05l8.254-8.252 2.12 2.12-8.252 8.254H14zm4-28h12v12h-2.828V6.95l-8.254 8.252-2.12-2.12 8.252-8.254H18z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M14 30H2V18h2.828v7.05l8.254-8.252 2.12 2.12-8.252 8.254H14zm4-28h12v12h-2.828V6.95l-8.254 8.252-2.12-2.12 8.252-8.254H18z'/%3E%3C/svg%3E\")}.ag-icon-menu:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M20 13H0v-2h20zm0-6H0V5h20zm0-6H0v-2h20z' style='fill-rule:nonzero' transform='translate(6 9)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M20 13H0v-2h20zm0-6H0V5h20zm0-6H0v-2h20z' style='fill-rule:nonzero' transform='translate(6 9)'/%3E%3C/svg%3E\")}.ag-icon-menu-alt:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='none' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' d='M16 19a3 3 0 1 0 0-6 3 3 0 0 0 0 6M16 11a3 3 0 1 0 0-6 3 3 0 0 0 0 6M16 27a3 3 0 1 0 0-6 3 3 0 0 0 0 6'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='none' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' d='M16 19a3 3 0 1 0 0-6 3 3 0 0 0 0 6M16 11a3 3 0 1 0 0-6 3 3 0 0 0 0 6M16 27a3 3 0 1 0 0-6 3 3 0 0 0 0 6'/%3E%3C/svg%3E\")}.ag-icon-minimize:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M2 18h12v12h-2.828v-7.05l-8.254 8.252-2.12-2.12 8.252-8.254H2zm28-4H18V2h2.828v7.05L29.082.798l2.12 2.12-8.252 8.254H30z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M2 18h12v12h-2.828v-7.05l-8.254 8.252-2.12-2.12 8.252-8.254H2zm28-4H18V2h2.828v7.05L29.082.798l2.12 2.12-8.252 8.254H30z'/%3E%3C/svg%3E\")}.ag-icon-minus:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6.572 6.572a13.32 13.32 0 0 0 0 18.856 13.32 13.32 0 0 0 18.856 0 13.32 13.32 0 0 0 0-18.856 13.32 13.32 0 0 0-18.856 0m17.527 8.099v2.658H7.901v-2.658z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6.572 6.572a13.32 13.32 0 0 0 0 18.856 13.32 13.32 0 0 0 18.856 0 13.32 13.32 0 0 0 0-18.856 13.32 13.32 0 0 0-18.856 0m17.527 8.099v2.658H7.901v-2.658z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-next:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M10.94 6 9.06 7.88 17.167 16 9.06 24.12 10.94 26l10-10z' style='fill-rule:nonzero' transform='translate(1)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M10.94 6 9.06 7.88 17.167 16 9.06 24.12 10.94 26l10-10z' style='fill-rule:nonzero' transform='translate(1)'/%3E%3C/svg%3E\")}.ag-icon-none:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Enone%3C/title%3E%3Cg fill='%23000' fill-rule='nonzero'%3E%3Cpath d='M23.708 14.645 16 6.939l-7.708 7.706 1.416 1.416L16 9.767l6.292 6.294zM23.708 20.355 16 28.061l-7.708-7.706 1.416-1.416L16 25.233l6.292-6.294z'/%3E%3C/g%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Enone%3C/title%3E%3Cg fill='%23000' fill-rule='nonzero'%3E%3Cpath d='M23.708 14.645 16 6.939l-7.708 7.706 1.416 1.416L16 9.767l6.292 6.294zM23.708 20.355 16 28.061l-7.708-7.706 1.416-1.416L16 25.233l6.292-6.294z'/%3E%3C/g%3E%3C/svg%3E\")}.ag-icon-not-allowed:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M16 2.667C8.64 2.667 2.667 8.64 2.667 16S8.64 29.333 16 29.333 29.333 23.36 29.333 16 23.36 2.667 16 2.667M5.333 16c0-5.893 4.773-10.667 10.667-10.667 2.467 0 4.733.84 6.533 2.253L7.586 22.533A10.54 10.54 0 0 1 5.333 16M16 26.667c-2.467 0-4.733-.84-6.533-2.253L24.414 9.467A10.54 10.54 0 0 1 26.667 16c0 5.893-4.773 10.667-10.667 10.667' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M16 2.667C8.64 2.667 2.667 8.64 2.667 16S8.64 29.333 16 29.333 29.333 23.36 29.333 16 23.36 2.667 16 2.667M5.333 16c0-5.893 4.773-10.667 10.667-10.667 2.467 0 4.733.84 6.533 2.253L7.586 22.533A10.54 10.54 0 0 1 5.333 16M16 26.667c-2.467 0-4.733-.84-6.533-2.253L24.414 9.467A10.54 10.54 0 0 1 26.667 16c0 5.893-4.773 10.667-10.667 10.667' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-paste:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M25.334 4H19.76C19.2 2.453 17.733 1.333 16 1.333S12.8 2.453 12.24 4H6.667A2.675 2.675 0 0 0 4 6.667V28c0 1.467 1.2 2.667 2.667 2.667h18.667c1.467 0 2.667-1.2 2.667-2.667V6.667C28.001 5.2 26.801 4 25.334 4M16 4c.733 0 1.333.6 1.333 1.333s-.6 1.333-1.333 1.333-1.333-.6-1.333-1.333S15.267 4 16 4m9.333 24H6.666V6.667h2.667v4h13.333v-4h2.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M25.334 4H19.76C19.2 2.453 17.733 1.333 16 1.333S12.8 2.453 12.24 4H6.667A2.675 2.675 0 0 0 4 6.667V28c0 1.467 1.2 2.667 2.667 2.667h18.667c1.467 0 2.667-1.2 2.667-2.667V6.667C28.001 5.2 26.801 4 25.334 4M16 4c.733 0 1.333.6 1.333 1.333s-.6 1.333-1.333 1.333-1.333-.6-1.333-1.333S15.267 4 16 4m9.333 24H6.666V6.667h2.667v4h13.333v-4h2.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-pin:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m10.78 19.777-4.668-4.666s.032-1 .67-1.87c1.366-1.86 4.052-1.96 6.056-1.572l3.158-3.108c-.7-2.342 3.352-5.046 3.352-5.046l9.166 9.168q-.334.447-.67.894c-1.074 1.426-2.538 2.63-4.272 2.338l-3.32 3.218c.046.344.042.03.118 1.152.144 2.13-.64 4.324-2.632 5.34l-.746.364-4.798-4.798-7.292 7.294-1.416-1.416zm8.24-13.672c-.688.568-1.416 1.45-1.024 2.072l.49.722-4.986 4.988c-1.988-.506-4.346-.636-5.156.614l9.02 9.032q.14-.099.272-.21c1.226-1.08.764-3.04.498-4.9l4.79-4.79s1.47.938 2.936-.776l-6.79-6.79q-.026.019-.05.038' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m10.78 19.777-4.668-4.666s.032-1 .67-1.87c1.366-1.86 4.052-1.96 6.056-1.572l3.158-3.108c-.7-2.342 3.352-5.046 3.352-5.046l9.166 9.168q-.334.447-.67.894c-1.074 1.426-2.538 2.63-4.272 2.338l-3.32 3.218c.046.344.042.03.118 1.152.144 2.13-.64 4.324-2.632 5.34l-.746.364-4.798-4.798-7.292 7.294-1.416-1.416zm8.24-13.672c-.688.568-1.416 1.45-1.024 2.072l.49.722-4.986 4.988c-1.988-.506-4.346-.636-5.156.614l9.02 9.032q.14-.099.272-.21c1.226-1.08.764-3.04.498-4.9l4.79-4.79s1.47.938 2.936-.776l-6.79-6.79q-.026.019-.05.038' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-pivot:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M25.128 2.002c2.56.096 4.772 2.292 4.87 4.87a712 712 0 0 1 0 18.256c-.096 2.56-2.292 4.772-4.87 4.87a712 712 0 0 1-18.256 0c-2.558-.096-4.772-2.29-4.87-4.87a712 712 0 0 1 0-18.256c.096-2.56 2.292-4.772 4.87-4.87a712 712 0 0 1 18.256 0m2.966 7.954H9.892v18.136c5.086.13 10.18.098 15.264-.096 1.48-.094 2.746-1.35 2.84-2.84.192-5.064.226-10.134.098-15.2M3.968 24.1q.015.528.036 1.056c.094 1.484 1.354 2.746 2.84 2.84l1.012.036V24.1zM22 15.414l-.292.294-1.416-1.416L23 11.586l2.708 2.706-1.416 1.416-.292-.294v3.592c-.032 2.604-2.246 4.892-4.872 4.992L15.414 24l.294.292-1.416 1.416L11.586 23l2.706-2.708 1.416 1.416-.322.32c3.372.03 6.578-.164 6.614-3.034zM3.88 18.038c.002 1.346.012 2.694.038 4.04h3.938v-4.04zm.05-6.062a681 681 0 0 0-.044 4.042h3.97v-4.042zm5.962-7.99Q8.449 3.999 7.006 4c-1.57.02-2.946 1.348-3.004 2.922q-.02 1.517-.042 3.034h3.896v-2.02h2.036zm14.244-.016v3.966h3.898q-.017-.546-.038-1.092c-.094-1.48-1.35-2.746-2.84-2.84q-.51-.019-1.02-.034m-8.14-.054q-2.035.022-4.07.048v3.972h4.07zm6.106.008a213 213 0 0 0-4.07-.022v4.034h4.07z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M25.128 2.002c2.56.096 4.772 2.292 4.87 4.87a712 712 0 0 1 0 18.256c-.096 2.56-2.292 4.772-4.87 4.87a712 712 0 0 1-18.256 0c-2.558-.096-4.772-2.29-4.87-4.87a712 712 0 0 1 0-18.256c.096-2.56 2.292-4.772 4.87-4.87a712 712 0 0 1 18.256 0m2.966 7.954H9.892v18.136c5.086.13 10.18.098 15.264-.096 1.48-.094 2.746-1.35 2.84-2.84.192-5.064.226-10.134.098-15.2M3.968 24.1q.015.528.036 1.056c.094 1.484 1.354 2.746 2.84 2.84l1.012.036V24.1zM22 15.414l-.292.294-1.416-1.416L23 11.586l2.708 2.706-1.416 1.416-.292-.294v3.592c-.032 2.604-2.246 4.892-4.872 4.992L15.414 24l.294.292-1.416 1.416L11.586 23l2.706-2.708 1.416 1.416-.322.32c3.372.03 6.578-.164 6.614-3.034zM3.88 18.038c.002 1.346.012 2.694.038 4.04h3.938v-4.04zm.05-6.062a681 681 0 0 0-.044 4.042h3.97v-4.042zm5.962-7.99Q8.449 3.999 7.006 4c-1.57.02-2.946 1.348-3.004 2.922q-.02 1.517-.042 3.034h3.896v-2.02h2.036zm14.244-.016v3.966h3.898q-.017-.546-.038-1.092c-.094-1.48-1.35-2.746-2.84-2.84q-.51-.019-1.02-.034m-8.14-.054q-2.035.022-4.07.048v3.972h4.07zm6.106.008a213 213 0 0 0-4.07-.022v4.034h4.07z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-plus:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6.572 6.572a13.32 13.32 0 0 0 0 18.856 13.32 13.32 0 0 0 18.856 0 13.32 13.32 0 0 0 0-18.856 13.32 13.32 0 0 0-18.856 0m17.527 8.099v2.658h-6.77v6.77h-2.658v-6.77h-6.77v-2.658h6.77v-6.77h2.658v6.77z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6.572 6.572a13.32 13.32 0 0 0 0 18.856 13.32 13.32 0 0 0 18.856 0 13.32 13.32 0 0 0 0-18.856 13.32 13.32 0 0 0-18.856 0m17.527 8.099v2.658h-6.77v6.77h-2.658v-6.77h-6.77v-2.658h6.77v-6.77h2.658v6.77z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-previous:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M21.94 7.88 20.06 6l-10 10 10 10 1.88-1.88L13.833 16z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M21.94 7.88 20.06 6l-10 10 10 10 1.88-1.88L13.833 16z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-right:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m16 5.333-1.88 1.88 7.44 7.453H5.333v2.667H21.56l-7.44 7.453 1.88 1.88 10.667-10.667L16 5.332z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m16 5.333-1.88 1.88 7.44 7.453H5.333v2.667H21.56l-7.44 7.453 1.88 1.88 10.667-10.667L16 5.332z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-save:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M15.708 2.355 8 10.061.292 2.355 1.708.939 8 7.233 14.292.939z' style='fill-rule:nonzero' transform='translate(8 14)'/%3E%3Cpath d='M5 26h22v2H5zM15 4h2v18h-2z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M15.708 2.355 8 10.061.292 2.355 1.708.939 8 7.233 14.292.939z' style='fill-rule:nonzero' transform='translate(8 14)'/%3E%3Cpath d='M5 26h22v2H5zM15 4h2v18h-2z'/%3E%3C/svg%3E\")}.ag-icon-small-down:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M7.334 10.667 16 21.334l8.667-10.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M7.334 10.667 16 21.334l8.667-10.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-small-left:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M21.333 7.334 10.666 16l10.667 8.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M21.333 7.334 10.666 16l10.667 8.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-small-right:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M10.667 24.666 21.334 16 10.667 7.333z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M10.667 24.666 21.334 16 10.667 7.333z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-small-up:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M7.334 21.333 16 10.666l8.667 10.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M7.334 21.333 16 10.666l8.667 10.667z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-tick:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M11.586 22.96 27.718 6.828 29.84 8.95 11.586 27.202 2.4 18.016l2.12-2.122z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M11.586 22.96 27.718 6.828 29.84 8.95 11.586 27.202 2.4 18.016l2.12-2.122z'/%3E%3C/svg%3E\")}.ag-icon-tree-closed:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m11.94 6-1.88 1.88L18.167 16l-8.107 8.12L11.94 26l10-10z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m11.94 6-1.88 1.88L18.167 16l-8.107 8.12L11.94 26l10-10z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-tree-indeterminate:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6 13.5h20v3H6z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6 13.5h20v3H6z'/%3E%3C/svg%3E\")}.ag-icon-tree-open:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M24.12 9.06 16 17.167 7.88 9.06 6 10.94l10 10 10-10z' style='fill-rule:nonzero' transform='translate(0 1)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M24.12 9.06 16 17.167 7.88 9.06 6 10.94l10 10 10-10z' style='fill-rule:nonzero' transform='translate(0 1)'/%3E%3C/svg%3E\")}.ag-icon-unlinked:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M22.667 9.333h-5.333v2.533h5.333a4.136 4.136 0 0 1 4.133 4.133c0 1.907-1.307 3.507-3.08 3.973l1.947 1.947c2.173-1.107 3.667-3.32 3.667-5.92a6.67 6.67 0 0 0-6.667-6.667zm-1.334 5.334h-2.92l2.667 2.667h.253zM2.667 5.693 6.814 9.84A6.65 6.65 0 0 0 2.667 16a6.67 6.67 0 0 0 6.667 6.667h5.333v-2.533H9.334a4.136 4.136 0 0 1-4.133-4.133c0-2.12 1.613-3.867 3.68-4.093l2.76 2.76h-.973v2.667h3.64l3.027 3.027v2.307h2.307l5.347 5.333 1.68-1.68L4.362 4.002 2.669 5.695z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M22.667 9.333h-5.333v2.533h5.333a4.136 4.136 0 0 1 4.133 4.133c0 1.907-1.307 3.507-3.08 3.973l1.947 1.947c2.173-1.107 3.667-3.32 3.667-5.92a6.67 6.67 0 0 0-6.667-6.667zm-1.334 5.334h-2.92l2.667 2.667h.253zM2.667 5.693 6.814 9.84A6.65 6.65 0 0 0 2.667 16a6.67 6.67 0 0 0 6.667 6.667h5.333v-2.533H9.334a4.136 4.136 0 0 1-4.133-4.133c0-2.12 1.613-3.867 3.68-4.093l2.76 2.76h-.973v2.667h3.64l3.027 3.027v2.307h2.307l5.347 5.333 1.68-1.68L4.362 4.002 2.669 5.695z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-up:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m5.333 16 1.88 1.88 7.453-7.44v16.227h2.667V10.44l7.44 7.453L26.666 16 15.999 5.333 5.332 16z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m5.333 16 1.88 1.88 7.453-7.44v16.227h2.667V10.44l7.44 7.453L26.666 16 15.999 5.333 5.332 16z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-grip:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M8 24H6v-4h2zm6 0h-2v-4h2zm6 0h-2v-4h2zm6 0h-2v-4h2zM8 18H6v-4h2zm6 0h-2v-4h2zm6 0h-2v-4h2zm6 0h-2v-4h2zM8 12H6V8h2zm6 0h-2V8h2zm6 0h-2V8h2zm6 0h-2V8h2z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M8 24H6v-4h2zm6 0h-2v-4h2zm6 0h-2v-4h2zm6 0h-2v-4h2zM8 18H6v-4h2zm6 0h-2v-4h2zm6 0h-2v-4h2zm6 0h-2v-4h2zM8 12H6V8h2zm6 0h-2V8h2zm6 0h-2V8h2zm6 0h-2V8h2z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-settings:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='none' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' d='M30 8h-4.1c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2v2h14.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30zm-9 4c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3M2 24h4.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30v-2H15.9c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2zm9-4c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='none' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' d='M30 8h-4.1c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2v2h14.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30zm-9 4c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3M2 24h4.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30v-2H15.9c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2zm9-4c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3'/%3E%3C/svg%3E\")}`\n);\nvar iconSetAlpine = /* @__PURE__ */ createPart(\"iconSet\", \"alpine\").withCSS(iconSetAlpineCSS);\nvar iconSetMaterialCSS = (\n  /*css*/\n  `.ag-icon:before{background-color:currentColor;content:\"\";display:block;height:var(--ag-icon-size);-webkit-mask-image:linear-gradient(#0000,#0000);mask-image:linear-gradient(#0000,#0000);-webkit-mask-size:contain;mask-size:contain;width:var(--ag-icon-size)}.ag-icon-aggregation:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eaggregation%3C/title%3E%3Cpath d='M24 5.333H8V8l8.667 8L8 24v2.667h16v-4h-9.333L21.334 16l-6.667-6.667H24z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eaggregation%3C/title%3E%3Cpath d='M24 5.333H8V8l8.667 8L8 24v2.667h16v-4h-9.333L21.334 16l-6.667-6.667H24z'/%3E%3C/svg%3E\")}.ag-icon-arrows:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Earrows%3C/title%3E%3Cpath d='M13.333 11.556h5.333V8h3.556L16 1.778 9.778 8h3.556zm-1.777 1.777H8V9.777l-6.222 6.222L8 22.221v-3.556h3.556zM30.222 16 24 9.778v3.556h-3.556v5.333H24v3.556l6.222-6.222zm-11.555 4.444h-5.333V24H9.778L16 30.222 22.222 24h-3.556z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Earrows%3C/title%3E%3Cpath d='M13.333 11.556h5.333V8h3.556L16 1.778 9.778 8h3.556zm-1.777 1.777H8V9.777l-6.222 6.222L8 22.221v-3.556h3.556zM30.222 16 24 9.778v3.556h-3.556v5.333H24v3.556l6.222-6.222zm-11.555 4.444h-5.333V24H9.778L16 30.222 22.222 24h-3.556z'/%3E%3C/svg%3E\")}.ag-icon-asc:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Easc%3C/title%3E%3Cpath d='m5.333 16 1.88 1.88 7.453-7.44v16.227h2.667V10.44l7.44 7.453L26.666 16 15.999 5.333z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Easc%3C/title%3E%3Cpath d='m5.333 16 1.88 1.88 7.453-7.44v16.227h2.667V10.44l7.44 7.453L26.666 16 15.999 5.333z'/%3E%3C/svg%3E\")}.ag-icon-cancel:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecancel%3C/title%3E%3Cpath d='M16 2.667C8.627 2.667 2.667 8.627 2.667 16S8.627 29.333 16 29.333 29.333 23.373 29.333 16 23.373 2.667 16 2.667m6.667 18.12-1.88 1.88L16 17.88l-4.787 4.787-1.88-1.88L14.12 16l-4.787-4.787 1.88-1.88L16 14.12l4.787-4.787 1.88 1.88L17.88 16z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecancel%3C/title%3E%3Cpath d='M16 2.667C8.627 2.667 2.667 8.627 2.667 16S8.627 29.333 16 29.333 29.333 23.373 29.333 16 23.373 2.667 16 2.667m6.667 18.12-1.88 1.88L16 17.88l-4.787 4.787-1.88-1.88L14.12 16l-4.787-4.787 1.88-1.88L16 14.12l4.787-4.787 1.88 1.88L17.88 16z'/%3E%3C/svg%3E\")}.ag-icon-chart:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Echart%3C/title%3E%3Cpath d='M6.667 12.267h4v13.067h-4zm7.466-5.6h3.733v18.667h-3.733zM21.6 17.333h3.733v8H21.6z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Echart%3C/title%3E%3Cpath d='M6.667 12.267h4v13.067h-4zm7.466-5.6h3.733v18.667h-3.733zM21.6 17.333h3.733v8H21.6z'/%3E%3C/svg%3E\")}.ag-icon-color-picker:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecolor-picker%3C/title%3E%3Cpath d='M23.907 17.587 10.574 4.254l-1.88 1.88 3.173 3.173-8.28 8.28 10.16 10.16zm-16.547 0 6.387-6.387 6.387 6.387H7.361zm18.387 2s-2.667 2.893-2.667 4.667c0 1.467 1.2 2.667 2.667 2.667s2.667-1.2 2.667-2.667c0-1.773-2.667-4.667-2.667-4.667'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecolor-picker%3C/title%3E%3Cpath d='M23.907 17.587 10.574 4.254l-1.88 1.88 3.173 3.173-8.28 8.28 10.16 10.16zm-16.547 0 6.387-6.387 6.387 6.387H7.361zm18.387 2s-2.667 2.893-2.667 4.667c0 1.467 1.2 2.667 2.667 2.667s2.667-1.2 2.667-2.667c0-1.773-2.667-4.667-2.667-4.667'/%3E%3C/svg%3E\")}.ag-icon-columns:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecolumns%3C/title%3E%3Cpath d='M5.333 10.667h5.333V5.334H5.333zm8 16h5.333v-5.333h-5.333zm-8 0h5.333v-5.333H5.333zm0-8h5.333v-5.333H5.333zm8 0h5.333v-5.333h-5.333zm8-13.334v5.333h5.333V5.333zm-8 5.334h5.333V5.334h-5.333zm8 8h5.333v-5.333h-5.333zm0 8h5.333v-5.333h-5.333z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecolumns%3C/title%3E%3Cpath d='M5.333 10.667h5.333V5.334H5.333zm8 16h5.333v-5.333h-5.333zm-8 0h5.333v-5.333H5.333zm0-8h5.333v-5.333H5.333zm8 0h5.333v-5.333h-5.333zm8-13.334v5.333h5.333V5.333zm-8 5.334h5.333V5.334h-5.333zm8 8h5.333v-5.333h-5.333zm0 8h5.333v-5.333h-5.333z'/%3E%3C/svg%3E\")}.ag-icon-contracted:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Econtracted%3C/title%3E%3Cpath d='m12.94 8-1.88 1.88L17.167 16l-6.107 6.12L12.94 24l8-8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Econtracted%3C/title%3E%3Cpath d='m12.94 8-1.88 1.88L17.167 16l-6.107 6.12L12.94 24l8-8z'/%3E%3C/svg%3E\")}.ag-icon-copy:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecopy%3C/title%3E%3Cpath d='M22 1.333H6A2.675 2.675 0 0 0 3.333 4v18.667H6V4h16zm4 5.334H11.333a2.675 2.675 0 0 0-2.667 2.667v18.667c0 1.467 1.2 2.667 2.667 2.667H26c1.467 0 2.667-1.2 2.667-2.667V9.334c0-1.467-1.2-2.667-2.667-2.667M26 28H11.333V9.333H26z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecopy%3C/title%3E%3Cpath d='M22 1.333H6A2.675 2.675 0 0 0 3.333 4v18.667H6V4h16zm4 5.334H11.333a2.675 2.675 0 0 0-2.667 2.667v18.667c0 1.467 1.2 2.667 2.667 2.667H26c1.467 0 2.667-1.2 2.667-2.667V9.334c0-1.467-1.2-2.667-2.667-2.667M26 28H11.333V9.333H26z'/%3E%3C/svg%3E\")}.ag-icon-cross:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecross%3C/title%3E%3Cpath d='m25.333 8.547-1.88-1.88L16 14.12 8.547 6.667l-1.88 1.88L14.12 16l-7.453 7.453 1.88 1.88L16 17.88l7.453 7.453 1.88-1.88L17.88 16z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Ecross%3C/title%3E%3Cpath d='m25.333 8.547-1.88-1.88L16 14.12 8.547 6.667l-1.88 1.88L14.12 16l-7.453 7.453 1.88 1.88L16 17.88l7.453 7.453 1.88-1.88L17.88 16z'/%3E%3C/svg%3E\")}.ag-icon-csv:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M384 131.9c-7.753-8.433-110.425-128.473-114.9-133L48-.1C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48zm-35.9 2.1H257V27.9zM30 479V27h200l1 105c0 13.3-1.3 29 12 29h111l1 318z' style='fill-rule:nonzero' transform='matrix(.06285 0 0 .06285 3.934 -.054)'/%3E%3Cpath d='M.688-.226a.2.2 0 0 1-.017.074.28.28 0 0 1-.145.14.412.412 0 0 1-.234.013.28.28 0 0 1-.202-.168.468.468 0 0 1-.04-.19q0-.086.025-.155a.319.319 0 0 1 .182-.191.4.4 0 0 1 .134-.025q.087 0 .155.035a.3.3 0 0 1 .104.085.17.17 0 0 1 .036.097.06.06 0 0 1-.018.044.06.06 0 0 1-.042.019.06.06 0 0 1-.042-.013.2.2 0 0 1-.031-.046.2.2 0 0 0-.066-.079.16.16 0 0 0-.095-.027.17.17 0 0 0-.142.068.3.3 0 0 0-.053.193.4.4 0 0 0 .023.139.2.2 0 0 0 .067.083.2.2 0 0 0 .1.027q.063 0 .106-.031a.2.2 0 0 0 .065-.091.2.2 0 0 1 .023-.046q.014-.018.044-.018a.06.06 0 0 1 .044.018.06.06 0 0 1 .019.045' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 7.122 25.977)'/%3E%3Cpath d='M.622-.215a.2.2 0 0 1-.033.117.23.23 0 0 1-.098.081.4.4 0 0 1-.153.029.34.34 0 0 1-.175-.04.23.23 0 0 1-.079-.077.17.17 0 0 1-.031-.093q0-.027.019-.045a.06.06 0 0 1 .046-.019.06.06 0 0 1 .039.014.1.1 0 0 1 .027.044.3.3 0 0 0 .03.057q.015.023.044.038.03.015.076.015.065 0 .105-.03a.09.09 0 0 0 .04-.075.08.08 0 0 0-.022-.058.14.14 0 0 0-.056-.034 1 1 0 0 0-.092-.025.7.7 0 0 1-.129-.042.2.2 0 0 1-.083-.066.17.17 0 0 1-.03-.104q0-.058.032-.105a.2.2 0 0 1 .093-.07.4.4 0 0 1 .144-.025q.066 0 .114.016a.3.3 0 0 1 .08.044.2.2 0 0 1 .046.057q.015.03.015.058a.07.07 0 0 1-.018.046.06.06 0 0 1-.046.021q-.025 0-.038-.012a.2.2 0 0 1-.028-.041.2.2 0 0 0-.047-.063Q.387-.625.326-.625a.15.15 0 0 0-.09.025q-.035.024-.035.059 0 .021.012.037a.1.1 0 0 0 .032.027.4.4 0 0 0 .111.036q.06.015.11.031.048.018.083.042a.2.2 0 0 1 .054.062.2.2 0 0 1 .019.091' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 13.339 25.977)'/%3E%3Cpath d='m.184-.633.162.48.163-.483q.013-.038.019-.053a.062.062 0 0 1 .061-.039q.018 0 .034.009a.1.1 0 0 1 .025.025q.009.015.009.031L.654-.64l-.007.025-.009.024-.173.468-.019.051a.2.2 0 0 1-.021.042.1.1 0 0 1-.033.03.1.1 0 0 1-.049.012.1.1 0 0 1-.05-.011A.1.1 0 0 1 .26-.03a.2.2 0 0 1-.021-.042L.22-.123.05-.587.041-.612.033-.638.03-.662q0-.025.02-.046a.07.07 0 0 1 .05-.02q.037 0 .053.023.015.023.031.072' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 18.94 25.977)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M384 131.9c-7.753-8.433-110.425-128.473-114.9-133L48-.1C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48zm-35.9 2.1H257V27.9zM30 479V27h200l1 105c0 13.3-1.3 29 12 29h111l1 318z' style='fill-rule:nonzero' transform='matrix(.06285 0 0 .06285 3.934 -.054)'/%3E%3Cpath d='M.688-.226a.2.2 0 0 1-.017.074.28.28 0 0 1-.145.14.412.412 0 0 1-.234.013.28.28 0 0 1-.202-.168.468.468 0 0 1-.04-.19q0-.086.025-.155a.319.319 0 0 1 .182-.191.4.4 0 0 1 .134-.025q.087 0 .155.035a.3.3 0 0 1 .104.085.17.17 0 0 1 .036.097.06.06 0 0 1-.018.044.06.06 0 0 1-.042.019.06.06 0 0 1-.042-.013.2.2 0 0 1-.031-.046.2.2 0 0 0-.066-.079.16.16 0 0 0-.095-.027.17.17 0 0 0-.142.068.3.3 0 0 0-.053.193.4.4 0 0 0 .023.139.2.2 0 0 0 .067.083.2.2 0 0 0 .1.027q.063 0 .106-.031a.2.2 0 0 0 .065-.091.2.2 0 0 1 .023-.046q.014-.018.044-.018a.06.06 0 0 1 .044.018.06.06 0 0 1 .019.045' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 7.122 25.977)'/%3E%3Cpath d='M.622-.215a.2.2 0 0 1-.033.117.23.23 0 0 1-.098.081.4.4 0 0 1-.153.029.34.34 0 0 1-.175-.04.23.23 0 0 1-.079-.077.17.17 0 0 1-.031-.093q0-.027.019-.045a.06.06 0 0 1 .046-.019.06.06 0 0 1 .039.014.1.1 0 0 1 .027.044.3.3 0 0 0 .03.057q.015.023.044.038.03.015.076.015.065 0 .105-.03a.09.09 0 0 0 .04-.075.08.08 0 0 0-.022-.058.14.14 0 0 0-.056-.034 1 1 0 0 0-.092-.025.7.7 0 0 1-.129-.042.2.2 0 0 1-.083-.066.17.17 0 0 1-.03-.104q0-.058.032-.105a.2.2 0 0 1 .093-.07.4.4 0 0 1 .144-.025q.066 0 .114.016a.3.3 0 0 1 .08.044.2.2 0 0 1 .046.057q.015.03.015.058a.07.07 0 0 1-.018.046.06.06 0 0 1-.046.021q-.025 0-.038-.012a.2.2 0 0 1-.028-.041.2.2 0 0 0-.047-.063Q.387-.625.326-.625a.15.15 0 0 0-.09.025q-.035.024-.035.059 0 .021.012.037a.1.1 0 0 0 .032.027.4.4 0 0 0 .111.036q.06.015.11.031.048.018.083.042a.2.2 0 0 1 .054.062.2.2 0 0 1 .019.091' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 13.339 25.977)'/%3E%3Cpath d='m.184-.633.162.48.163-.483q.013-.038.019-.053a.062.062 0 0 1 .061-.039q.018 0 .034.009a.1.1 0 0 1 .025.025q.009.015.009.031L.654-.64l-.007.025-.009.024-.173.468-.019.051a.2.2 0 0 1-.021.042.1.1 0 0 1-.033.03.1.1 0 0 1-.049.012.1.1 0 0 1-.05-.011A.1.1 0 0 1 .26-.03a.2.2 0 0 1-.021-.042L.22-.123.05-.587.041-.612.033-.638.03-.662q0-.025.02-.046a.07.07 0 0 1 .05-.02q.037 0 .053.023.015.023.031.072' style='fill-rule:nonzero' transform='matrix(8.39799 0 0 12.455 18.94 25.977)'/%3E%3C/svg%3E\")}.ag-icon-cut:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m19 3-6 6 2 2 7-7V3m-10 9.5a.503.503 0 0 1-.5-.5c0-.274.226-.5.5-.5s.5.226.5.5-.226.5-.5.5M6 20c-1.097 0-2-.903-2-2a2 2 0 0 1 2-2c1.097 0 2 .903 2 2a2 2 0 0 1-2 2M6 8c-1.097 0-2-.903-2-2a2 2 0 0 1 2-2c1.097 0 2 .903 2 2a2 2 0 0 1-2 2m3.64-.36c.23-.5.36-1.05.36-1.64 0-2.194-1.806-4-4-4S2 3.806 2 6s1.806 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59 14 6 14c-2.194 0-4 1.806-4 4s1.806 4 4 4 4-1.806 4-4c0-.59-.13-1.14-.36-1.64L12 14l7 7h3v-1z' style='fill-rule:nonzero' transform='translate(4 4)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='m19 3-6 6 2 2 7-7V3m-10 9.5a.503.503 0 0 1-.5-.5c0-.274.226-.5.5-.5s.5.226.5.5-.226.5-.5.5M6 20c-1.097 0-2-.903-2-2a2 2 0 0 1 2-2c1.097 0 2 .903 2 2a2 2 0 0 1-2 2M6 8c-1.097 0-2-.903-2-2a2 2 0 0 1 2-2c1.097 0 2 .903 2 2a2 2 0 0 1-2 2m3.64-.36c.23-.5.36-1.05.36-1.64 0-2.194-1.806-4-4-4S2 3.806 2 6s1.806 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59 14 6 14c-2.194 0-4 1.806-4 4s1.806 4 4 4 4-1.806 4-4c0-.59-.13-1.14-.36-1.64L12 14l7 7h3v-1z' style='fill-rule:nonzero' transform='translate(4 4)'/%3E%3C/svg%3E\")}.ag-icon-desc:before,.ag-icon-down:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Edesc%3C/title%3E%3Cpath d='m26.667 16-1.88-1.88-7.453 7.44V5.333h-2.667V21.56l-7.44-7.453L5.334 16l10.667 10.667L26.668 16z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Edesc%3C/title%3E%3Cpath d='m26.667 16-1.88-1.88-7.453 7.44V5.333h-2.667V21.56l-7.44-7.453L5.334 16l10.667 10.667L26.668 16z'/%3E%3C/svg%3E\")}.ag-icon-excel:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M384 131.9c-7.753-8.433-110.425-128.473-114.9-133L48-.1C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48zm-35.9 2.1H257V27.9zM30 479V27h200l1 105c0 13.3-1.3 29 12 29h111l1 318z' style='fill-rule:nonzero' transform='matrix(.06285 0 0 .06285 3.934 -.054)'/%3E%3Cpath d='m.052-.139.16-.234-.135-.208a.4.4 0 0 1-.028-.052.1.1 0 0 1-.01-.042.05.05 0 0 1 .018-.037.07.07 0 0 1 .045-.016q.03 0 .047.018a1 1 0 0 1 .047.066l.107.174.115-.174.024-.038.019-.026.021-.015a.1.1 0 0 1 .027-.005.06.06 0 0 1 .044.016.05.05 0 0 1 .018.039q0 .033-.038.089l-.141.211.152.234a.3.3 0 0 1 .03.051.1.1 0 0 1 .009.038.1.1 0 0 1-.008.031.1.1 0 0 1-.024.023.1.1 0 0 1-.034.008.1.1 0 0 1-.035-.008.1.1 0 0 1-.023-.022L.427-.067.301-.265l-.134.204-.022.034-.016.019a.1.1 0 0 1-.022.015.1.1 0 0 1-.03.005.06.06 0 0 1-.044-.016.06.06 0 0 1-.017-.047q0-.036.036-.088' style='fill-rule:nonzero' transform='matrix(17.82892 0 0 16.50777 10.371 25.928)'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M384 131.9c-7.753-8.433-110.425-128.473-114.9-133L48-.1C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48zm-35.9 2.1H257V27.9zM30 479V27h200l1 105c0 13.3-1.3 29 12 29h111l1 318z' style='fill-rule:nonzero' transform='matrix(.06285 0 0 .06285 3.934 -.054)'/%3E%3Cpath d='m.052-.139.16-.234-.135-.208a.4.4 0 0 1-.028-.052.1.1 0 0 1-.01-.042.05.05 0 0 1 .018-.037.07.07 0 0 1 .045-.016q.03 0 .047.018a1 1 0 0 1 .047.066l.107.174.115-.174.024-.038.019-.026.021-.015a.1.1 0 0 1 .027-.005.06.06 0 0 1 .044.016.05.05 0 0 1 .018.039q0 .033-.038.089l-.141.211.152.234a.3.3 0 0 1 .03.051.1.1 0 0 1 .009.038.1.1 0 0 1-.008.031.1.1 0 0 1-.024.023.1.1 0 0 1-.034.008.1.1 0 0 1-.035-.008.1.1 0 0 1-.023-.022L.427-.067.301-.265l-.134.204-.022.034-.016.019a.1.1 0 0 1-.022.015.1.1 0 0 1-.03.005.06.06 0 0 1-.044-.016.06.06 0 0 1-.017-.047q0-.036.036-.088' style='fill-rule:nonzero' transform='matrix(17.82892 0 0 16.50777 10.371 25.928)'/%3E%3C/svg%3E\")}.ag-icon-expanded:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eexpanded%3C/title%3E%3Cpath d='M20.94 9.88 19.06 8l-8 8 8 8 1.88-1.88L14.833 16z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eexpanded%3C/title%3E%3Cpath d='M20.94 9.88 19.06 8l-8 8 8 8 1.88-1.88L14.833 16z'/%3E%3C/svg%3E\")}.ag-icon-eye-slash:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eeye-slash%3C/title%3E%3Cpath d='M21.106 15.088A5.19 5.19 0 0 0 16 10.814a5.17 5.17 0 0 0-3.668 1.522L9.866 9.868a12.2 12.2 0 0 1 6.133-1.646c5.186 0 9.614 3.225 11.408 7.778a12.34 12.34 0 0 1-5.276 6.133l-2.468-2.466a5.17 5.17 0 0 0 1.449-2.802h-2.123c-.148.508-.42.964-.782 1.33l-1.33-1.33h-2.514l2.196 2.196q-.272.049-.56.05a3.11 3.11 0 0 1-2.99-2.245h-2.123a5.19 5.19 0 0 0 7.3 3.836l2.247 2.247a12.2 12.2 0 0 1-4.434.828c-5.186 0-9.614-3.225-11.408-7.778a12.3 12.3 0 0 1 3.781-5.111l2.924 2.924a5.1 5.1 0 0 0-.404 1.275h4.206l-1.296-1.296a3.1 3.1 0 0 1 2.196-.903c1.404 0 2.587.924 2.976 2.199h2.13z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eeye-slash%3C/title%3E%3Cpath d='M21.106 15.088A5.19 5.19 0 0 0 16 10.814a5.17 5.17 0 0 0-3.668 1.522L9.866 9.868a12.2 12.2 0 0 1 6.133-1.646c5.186 0 9.614 3.225 11.408 7.778a12.34 12.34 0 0 1-5.276 6.133l-2.468-2.466a5.17 5.17 0 0 0 1.449-2.802h-2.123c-.148.508-.42.964-.782 1.33l-1.33-1.33h-2.514l2.196 2.196q-.272.049-.56.05a3.11 3.11 0 0 1-2.99-2.245h-2.123a5.19 5.19 0 0 0 7.3 3.836l2.247 2.247a12.2 12.2 0 0 1-4.434.828c-5.186 0-9.614-3.225-11.408-7.778a12.3 12.3 0 0 1 3.781-5.111l2.924 2.924a5.1 5.1 0 0 0-.404 1.275h4.206l-1.296-1.296a3.1 3.1 0 0 1 2.196-.903c1.404 0 2.587.924 2.976 2.199h2.13z'/%3E%3C/svg%3E\")}.ag-icon-eye:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eeye%3C/title%3E%3Cpath d='M16 8.222c-5.186 0-9.614 3.225-11.408 7.778 1.794 4.553 6.222 7.778 11.408 7.778S25.614 20.553 27.408 16C25.614 11.447 21.186 8.222 16 8.222m0 12.964c-2.862 0-5.186-2.324-5.186-5.186s2.324-5.186 5.186-5.186 5.186 2.324 5.186 5.186-2.324 5.186-5.186 5.186m0-8.297c-1.721 0-3.111 1.39-3.111 3.111s1.39 3.111 3.111 3.111 3.111-1.39 3.111-3.111-1.39-3.111-3.111-3.111'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eeye%3C/title%3E%3Cpath d='M16 8.222c-5.186 0-9.614 3.225-11.408 7.778 1.794 4.553 6.222 7.778 11.408 7.778S25.614 20.553 27.408 16C25.614 11.447 21.186 8.222 16 8.222m0 12.964c-2.862 0-5.186-2.324-5.186-5.186s2.324-5.186 5.186-5.186 5.186 2.324 5.186 5.186-2.324 5.186-5.186 5.186m0-8.297c-1.721 0-3.111 1.39-3.111 3.111s1.39 3.111 3.111 3.111 3.111-1.39 3.111-3.111-1.39-3.111-3.111-3.111'/%3E%3C/svg%3E\")}.ag-icon-filter:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Efilter%3C/title%3E%3Cpath d='M13.333 24h5.333v-2.667h-5.333zM4 8v2.667h24V8zm4 9.333h16v-2.667H8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Efilter%3C/title%3E%3Cpath d='M13.333 24h5.333v-2.667h-5.333zM4 8v2.667h24V8zm4 9.333h16v-2.667H8z'/%3E%3C/svg%3E\")}.ag-icon-first:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Efirst%3C/title%3E%3Cpath d='M24.273 22.12 18.153 16l6.12-6.12L22.393 8l-8 8 8 8zM7.727 8h2.667v16H7.727z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Efirst%3C/title%3E%3Cpath d='M24.273 22.12 18.153 16l6.12-6.12L22.393 8l-8 8 8 8zM7.727 8h2.667v16H7.727z'/%3E%3C/svg%3E\")}.ag-icon-group:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Egroup%3C/title%3E%3Cpath d='M18.667 21.333h8.889A3.555 3.555 0 0 1 24 24.889h-5.333zm8.888-7.111v3.556h-8.889v-3.556zM24 7.111a3.555 3.555 0 0 1 3.556 3.556h-16V7.111zm-8.889 17.778h-3.556v-3.556h3.556zm0-7.111h-3.556v-3.556h3.556zM8 10.667H4.444A3.555 3.555 0 0 1 8 7.111z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Egroup%3C/title%3E%3Cpath d='M18.667 21.333h8.889A3.555 3.555 0 0 1 24 24.889h-5.333zm8.888-7.111v3.556h-8.889v-3.556zM24 7.111a3.555 3.555 0 0 1 3.556 3.556h-16V7.111zm-8.889 17.778h-3.556v-3.556h3.556zm0-7.111h-3.556v-3.556h3.556zM8 10.667H4.444A3.555 3.555 0 0 1 8 7.111z'/%3E%3C/svg%3E\")}.ag-icon-last:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Elast%3C/title%3E%3Cpath d='m7.727 9.88 6.12 6.12-6.12 6.12L9.607 24l8-8-8-8zM21.607 8h2.667v16h-2.667z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Elast%3C/title%3E%3Cpath d='m7.727 9.88 6.12 6.12-6.12 6.12L9.607 24l8-8-8-8zM21.607 8h2.667v16h-2.667z'/%3E%3C/svg%3E\")}.ag-icon-left:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eleft%3C/title%3E%3Cpath d='M26.667 14.667H10.44l7.453-7.453L16 5.334 5.333 16.001 16 26.668l1.88-1.88-7.44-7.453h16.227v-2.667z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eleft%3C/title%3E%3Cpath d='M26.667 14.667H10.44l7.453-7.453L16 5.334 5.333 16.001 16 26.668l1.88-1.88-7.44-7.453h16.227v-2.667z'/%3E%3C/svg%3E\")}.ag-icon-linked:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Elinked%3C/title%3E%3Cpath d='M5.2 16a4.136 4.136 0 0 1 4.133-4.133h5.333V9.334H9.333c-3.68 0-6.667 2.987-6.667 6.667s2.987 6.667 6.667 6.667h5.333v-2.533H9.333A4.136 4.136 0 0 1 5.2 16.002zm5.467 1.333h10.667v-2.667H10.667zm12-8h-5.333v2.533h5.333c2.28 0 4.133 1.853 4.133 4.133s-1.853 4.133-4.133 4.133h-5.333v2.533h5.333c3.68 0 6.667-2.987 6.667-6.667s-2.987-6.667-6.667-6.667z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Elinked%3C/title%3E%3Cpath d='M5.2 16a4.136 4.136 0 0 1 4.133-4.133h5.333V9.334H9.333c-3.68 0-6.667 2.987-6.667 6.667s2.987 6.667 6.667 6.667h5.333v-2.533H9.333A4.136 4.136 0 0 1 5.2 16.002zm5.467 1.333h10.667v-2.667H10.667zm12-8h-5.333v2.533h5.333c2.28 0 4.133 1.853 4.133 4.133s-1.853 4.133-4.133 4.133h-5.333v2.533h5.333c3.68 0 6.667-2.987 6.667-6.667s-2.987-6.667-6.667-6.667z'/%3E%3C/svg%3E\")}.ag-icon-loading:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eloading%3C/title%3E%3Cpath d='m17.778 11.708 3.25-3.251 2.516 2.516-3.251 3.25h4.597v3.556h-4.597l3.251 3.25-2.516 2.516-3.25-3.251v4.597h-3.556v-4.597l-3.25 3.251-2.516-2.516 3.251-3.25H7.11v-3.556h4.597l-3.251-3.25 2.516-2.516 3.25 3.251V7.111h3.556zm-3.251 7.847h2.944l2.084-2.084v-2.944l-2.084-2.084h-2.944l-2.084 2.084v2.944z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eloading%3C/title%3E%3Cpath d='m17.778 11.708 3.25-3.251 2.516 2.516-3.251 3.25h4.597v3.556h-4.597l3.251 3.25-2.516 2.516-3.25-3.251v4.597h-3.556v-4.597l-3.25 3.251-2.516-2.516 3.251-3.25H7.11v-3.556h4.597l-3.251-3.25 2.516-2.516 3.25 3.251V7.111h3.556zm-3.251 7.847h2.944l2.084-2.084v-2.944l-2.084-2.084h-2.944l-2.084 2.084v2.944z'/%3E%3C/svg%3E\")}.ag-icon-maximize:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Emaximize%3C/title%3E%3Cpath d='M4 4h24v2.667H4z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Emaximize%3C/title%3E%3Cpath d='M4 4h24v2.667H4z'/%3E%3C/svg%3E\")}.ag-icon-menu:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Emenu%3C/title%3E%3Cpath d='M4 24h24v-2.667H4zm0-6.667h24v-2.667H4zM4 8v2.667h24V8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Emenu%3C/title%3E%3Cpath d='M4 24h24v-2.667H4zm0-6.667h24v-2.667H4zM4 8v2.667h24V8z'/%3E%3C/svg%3E\")}.ag-icon-menu-alt:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='none' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' d='M16 26.667a2.57 2.57 0 0 1-1.883-.784A2.57 2.57 0 0 1 13.333 24q0-1.1.784-1.883A2.57 2.57 0 0 1 16 21.333q1.1 0 1.883.784.784.783.784 1.883t-.784 1.883a2.57 2.57 0 0 1-1.883.784m0-8a2.57 2.57 0 0 1-1.883-.784A2.57 2.57 0 0 1 13.333 16q0-1.1.784-1.883A2.57 2.57 0 0 1 16 13.333q1.1 0 1.883.784.784.783.784 1.883t-.784 1.883a2.57 2.57 0 0 1-1.883.784m0-8a2.57 2.57 0 0 1-1.883-.784A2.57 2.57 0 0 1 13.333 8q0-1.1.784-1.883A2.57 2.57 0 0 1 16 5.333q1.1 0 1.883.784.784.783.784 1.883t-.784 1.883a2.57 2.57 0 0 1-1.883.784'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='none' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' d='M16 26.667a2.57 2.57 0 0 1-1.883-.784A2.57 2.57 0 0 1 13.333 24q0-1.1.784-1.883A2.57 2.57 0 0 1 16 21.333q1.1 0 1.883.784.784.783.784 1.883t-.784 1.883a2.57 2.57 0 0 1-1.883.784m0-8a2.57 2.57 0 0 1-1.883-.784A2.57 2.57 0 0 1 13.333 16q0-1.1.784-1.883A2.57 2.57 0 0 1 16 13.333q1.1 0 1.883.784.784.783.784 1.883t-.784 1.883a2.57 2.57 0 0 1-1.883.784m0-8a2.57 2.57 0 0 1-1.883-.784A2.57 2.57 0 0 1 13.333 8q0-1.1.784-1.883A2.57 2.57 0 0 1 16 5.333q1.1 0 1.883.784.784.783.784 1.883t-.784 1.883a2.57 2.57 0 0 1-1.883.784'/%3E%3C/svg%3E\")}.ag-icon-minimize:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eminimize%3C/title%3E%3Cpath d='M8 25.333h16V28H8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eminimize%3C/title%3E%3Cpath d='M8 25.333h16V28H8z'/%3E%3C/svg%3E\")}.ag-icon-minus:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6.572 6.572a13.32 13.32 0 0 0 0 18.856 13.32 13.32 0 0 0 18.856 0 13.32 13.32 0 0 0 0-18.856 13.32 13.32 0 0 0-18.856 0m17.527 8.099v2.658H7.901v-2.658z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6.572 6.572a13.32 13.32 0 0 0 0 18.856 13.32 13.32 0 0 0 18.856 0 13.32 13.32 0 0 0 0-18.856 13.32 13.32 0 0 0-18.856 0m17.527 8.099v2.658H7.901v-2.658z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-next:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Enext%3C/title%3E%3Cpath d='m12.94 8-1.88 1.88L17.167 16l-6.107 6.12L12.94 24l8-8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Enext%3C/title%3E%3Cpath d='m12.94 8-1.88 1.88L17.167 16l-6.107 6.12L12.94 24l8-8z'/%3E%3C/svg%3E\")}.ag-icon-none:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Enone%3C/title%3E%3Cpath d='M4 24h16v-2.667H4zM4 8v2.667h24V8zm0 9.333h24v-2.667H4z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Enone%3C/title%3E%3Cpath d='M4 24h16v-2.667H4zM4 8v2.667h24V8zm0 9.333h24v-2.667H4z'/%3E%3C/svg%3E\")}.ag-icon-not-allowed:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Enot-allowed%3C/title%3E%3Cpath d='M16 2.667C8.64 2.667 2.667 8.64 2.667 16S8.64 29.333 16 29.333 29.333 23.36 29.333 16 23.36 2.667 16 2.667M5.333 16c0-5.893 4.773-10.667 10.667-10.667 2.467 0 4.733.84 6.533 2.253L7.586 22.533A10.54 10.54 0 0 1 5.333 16M16 26.667c-2.467 0-4.733-.84-6.533-2.253L24.414 9.467A10.54 10.54 0 0 1 26.667 16c0 5.893-4.773 10.667-10.667 10.667'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Enot-allowed%3C/title%3E%3Cpath d='M16 2.667C8.64 2.667 2.667 8.64 2.667 16S8.64 29.333 16 29.333 29.333 23.36 29.333 16 23.36 2.667 16 2.667M5.333 16c0-5.893 4.773-10.667 10.667-10.667 2.467 0 4.733.84 6.533 2.253L7.586 22.533A10.54 10.54 0 0 1 5.333 16M16 26.667c-2.467 0-4.733-.84-6.533-2.253L24.414 9.467A10.54 10.54 0 0 1 26.667 16c0 5.893-4.773 10.667-10.667 10.667'/%3E%3C/svg%3E\")}.ag-icon-paste:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Epaste%3C/title%3E%3Cpath d='M25.333 4H19.76C19.2 2.453 17.733 1.333 16 1.333S12.8 2.453 12.24 4H6.667A2.675 2.675 0 0 0 4 6.667V28c0 1.467 1.2 2.667 2.667 2.667h18.667c1.467 0 2.667-1.2 2.667-2.667V6.667C28.001 5.2 26.801 4 25.334 4zM16 4c.733 0 1.333.6 1.333 1.333s-.6 1.333-1.333 1.333-1.333-.6-1.333-1.333S15.267 4 16 4m9.333 24H6.666V6.667h2.667v4h13.333v-4h2.667z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Epaste%3C/title%3E%3Cpath d='M25.333 4H19.76C19.2 2.453 17.733 1.333 16 1.333S12.8 2.453 12.24 4H6.667A2.675 2.675 0 0 0 4 6.667V28c0 1.467 1.2 2.667 2.667 2.667h18.667c1.467 0 2.667-1.2 2.667-2.667V6.667C28.001 5.2 26.801 4 25.334 4zM16 4c.733 0 1.333.6 1.333 1.333s-.6 1.333-1.333 1.333-1.333-.6-1.333-1.333S15.267 4 16 4m9.333 24H6.666V6.667h2.667v4h13.333v-4h2.667z'/%3E%3C/svg%3E\")}.ag-icon-pin:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Epin%3C/title%3E%3Cpath d='m11.106 22.093-4.444 4.444-1.259-1.259 4.444-4.444zm5.872-16.63 9.618 9.62-.962.962-.962-.962-7.694 3.847 1.924 1.924-2.74 2.74-7.696-7.696 2.741-2.74 1.924 1.925 3.847-7.696-.962-.962z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Epin%3C/title%3E%3Cpath d='m11.106 22.093-4.444 4.444-1.259-1.259 4.444-4.444zm5.872-16.63 9.618 9.62-.962.962-.962-.962-7.694 3.847 1.924 1.924-2.74 2.74-7.696-7.696 2.741-2.74 1.924 1.925 3.847-7.696-.962-.962z'/%3E%3C/svg%3E\")}.ag-icon-pivot:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Epivot%3C/title%3E%3Cpath d='M26.667 30.223H5.334a3.556 3.556 0 0 1-3.556-3.556V5.334a3.556 3.556 0 0 1 3.556-3.556h21.333a3.556 3.556 0 0 1 3.556 3.556v21.333a3.556 3.556 0 0 1-3.556 3.556m-16-8.89H5.334v5.333h5.333zm16-7.11H12.444v12.444h14.223zm-9.15 6.85-2.039 2.037 2.039 2.039-1.257 1.257-3.295-3.296 3.295-3.295q.63.628 1.257 1.257zm-6.85-6.85H5.334v5.333h5.333zm15.74 3.816-1.257 1.256-2.039-2.037-2.037 2.037-1.257-1.256 3.295-3.296zM10.667 5.333H5.334v5.333h5.333zm8.889 0h-7.112v5.333h7.112zm7.111 0h-5.333v5.333h5.333z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Epivot%3C/title%3E%3Cpath d='M26.667 30.223H5.334a3.556 3.556 0 0 1-3.556-3.556V5.334a3.556 3.556 0 0 1 3.556-3.556h21.333a3.556 3.556 0 0 1 3.556 3.556v21.333a3.556 3.556 0 0 1-3.556 3.556m-16-8.89H5.334v5.333h5.333zm16-7.11H12.444v12.444h14.223zm-9.15 6.85-2.039 2.037 2.039 2.039-1.257 1.257-3.295-3.296 3.295-3.295q.63.628 1.257 1.257zm-6.85-6.85H5.334v5.333h5.333zm15.74 3.816-1.257 1.256-2.039-2.037-2.037 2.037-1.257-1.256 3.295-3.296zM10.667 5.333H5.334v5.333h5.333zm8.889 0h-7.112v5.333h7.112zm7.111 0h-5.333v5.333h5.333z'/%3E%3C/svg%3E\")}.ag-icon-plus:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6.572 6.572a13.32 13.32 0 0 0 0 18.856 13.32 13.32 0 0 0 18.856 0 13.32 13.32 0 0 0 0-18.856 13.32 13.32 0 0 0-18.856 0m17.527 8.099v2.658h-6.77v6.77h-2.658v-6.77h-6.77v-2.658h6.77v-6.77h2.658v6.77z' style='fill-rule:nonzero'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 32 32'%3E%3Cpath d='M6.572 6.572a13.32 13.32 0 0 0 0 18.856 13.32 13.32 0 0 0 18.856 0 13.32 13.32 0 0 0 0-18.856 13.32 13.32 0 0 0-18.856 0m17.527 8.099v2.658h-6.77v6.77h-2.658v-6.77h-6.77v-2.658h6.77v-6.77h2.658v6.77z' style='fill-rule:nonzero'/%3E%3C/svg%3E\")}.ag-icon-previous:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eprevious%3C/title%3E%3Cpath d='M20.94 9.88 19.06 8l-8 8 8 8 1.88-1.88L14.833 16z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eprevious%3C/title%3E%3Cpath d='M20.94 9.88 19.06 8l-8 8 8 8 1.88-1.88L14.833 16z'/%3E%3C/svg%3E\")}.ag-icon-right:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eright%3C/title%3E%3Cpath d='m16 5.333-1.88 1.88 7.44 7.453H5.333v2.667H21.56l-7.44 7.453 1.88 1.88 10.667-10.667L16 5.332z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eright%3C/title%3E%3Cpath d='m16 5.333-1.88 1.88 7.44 7.453H5.333v2.667H21.56l-7.44 7.453 1.88 1.88 10.667-10.667L16 5.332z'/%3E%3C/svg%3E\")}.ag-icon-save:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esave%3C/title%3E%3Cpath d='M25.333 16v9.333H6.666V16H3.999v9.333C3.999 26.8 5.199 28 6.666 28h18.667C26.8 28 28 26.8 28 25.333V16zm-8 .893 3.453-3.44 1.88 1.88L15.999 22l-6.667-6.667 1.88-1.88 3.453 3.44V4h2.667v12.893z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esave%3C/title%3E%3Cpath d='M25.333 16v9.333H6.666V16H3.999v9.333C3.999 26.8 5.199 28 6.666 28h18.667C26.8 28 28 26.8 28 25.333V16zm-8 .893 3.453-3.44 1.88 1.88L15.999 22l-6.667-6.667 1.88-1.88 3.453 3.44V4h2.667v12.893z'/%3E%3C/svg%3E\")}.ag-icon-small-down:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esmall-down%3C/title%3E%3Cpath d='M9.333 12.667 16 19.334l6.667-6.667H9.334z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esmall-down%3C/title%3E%3Cpath d='M9.333 12.667 16 19.334l6.667-6.667H9.334z'/%3E%3C/svg%3E\")}.ag-icon-small-left:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esmall-left%3C/title%3E%3Cpath d='M19.333 9.333 12.666 16l6.667 6.667V9.334z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esmall-left%3C/title%3E%3Cpath d='M19.333 9.333 12.666 16l6.667 6.667V9.334z'/%3E%3C/svg%3E\")}.ag-icon-small-right:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esmall-right%3C/title%3E%3Cpath d='M12.667 22.667 19.334 16l-6.667-6.667v13.333z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esmall-right%3C/title%3E%3Cpath d='M12.667 22.667 19.334 16l-6.667-6.667v13.333z'/%3E%3C/svg%3E\")}.ag-icon-small-up:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esmall-up%3C/title%3E%3Cpath d='M9.333 19.333 16 12.666l6.667 6.667H9.334z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Esmall-up%3C/title%3E%3Cpath d='M9.333 19.333 16 12.666l6.667 6.667H9.334z'/%3E%3C/svg%3E\")}.ag-icon-tick:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Etick%3C/title%3E%3Cpath d='m11.727 21.167-5.56-5.56-1.893 1.88 7.453 7.453 16-16-1.88-1.88z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Etick%3C/title%3E%3Cpath d='m11.727 21.167-5.56-5.56-1.893 1.88 7.453 7.453 16-16-1.88-1.88z'/%3E%3C/svg%3E\")}.ag-icon-tree-closed:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Etree-closed%3C/title%3E%3Cpath d='m12.94 8-1.88 1.88L17.167 16l-6.107 6.12L12.94 24l8-8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Etree-closed%3C/title%3E%3Cpath d='m12.94 8-1.88 1.88L17.167 16l-6.107 6.12L12.94 24l8-8z'/%3E%3C/svg%3E\")}.ag-icon-tree-indeterminate:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Etree-indeterminate%3C/title%3E%3Cpath d='M6.667 14.667h18.667v2.667H6.667z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Etree-indeterminate%3C/title%3E%3Cpath d='M6.667 14.667h18.667v2.667H6.667z'/%3E%3C/svg%3E\")}.ag-icon-tree-open:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Etree-open%3C/title%3E%3Cpath d='M22.12 11.06 16 17.167 9.88 11.06 8 12.94l8 8 8-8z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Etree-open%3C/title%3E%3Cpath d='M22.12 11.06 16 17.167 9.88 11.06 8 12.94l8 8 8-8z'/%3E%3C/svg%3E\")}.ag-icon-unlinked:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eunlinked%3C/title%3E%3Cpath d='M22.667 9.333h-5.333v2.533h5.333a4.136 4.136 0 0 1 4.133 4.133c0 1.907-1.307 3.507-3.08 3.973l1.947 1.947c2.173-1.107 3.667-3.32 3.667-5.92a6.67 6.67 0 0 0-6.667-6.667zm-1.334 5.334h-2.92l2.667 2.667h.253zM2.667 5.693 6.814 9.84A6.65 6.65 0 0 0 2.667 16a6.67 6.67 0 0 0 6.667 6.667h5.333v-2.533H9.334a4.136 4.136 0 0 1-4.133-4.133c0-2.12 1.613-3.867 3.68-4.093l2.76 2.76h-.973v2.667h3.64l3.027 3.027v2.307h2.307l5.347 5.333 1.68-1.68L4.362 4.002 2.669 5.695z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Eunlinked%3C/title%3E%3Cpath d='M22.667 9.333h-5.333v2.533h5.333a4.136 4.136 0 0 1 4.133 4.133c0 1.907-1.307 3.507-3.08 3.973l1.947 1.947c2.173-1.107 3.667-3.32 3.667-5.92a6.67 6.67 0 0 0-6.667-6.667zm-1.334 5.334h-2.92l2.667 2.667h.253zM2.667 5.693 6.814 9.84A6.65 6.65 0 0 0 2.667 16a6.67 6.67 0 0 0 6.667 6.667h5.333v-2.533H9.334a4.136 4.136 0 0 1-4.133-4.133c0-2.12 1.613-3.867 3.68-4.093l2.76 2.76h-.973v2.667h3.64l3.027 3.027v2.307h2.307l5.347 5.333 1.68-1.68L4.362 4.002 2.669 5.695z'/%3E%3C/svg%3E\")}.ag-icon-up:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Easc%3C/title%3E%3Cpath d='m5.333 16 1.88 1.88 7.453-7.44v16.227h2.667V10.44l7.44 7.453L26.666 16 15.999 5.333z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Easc%3C/title%3E%3Cpath d='m5.333 16 1.88 1.88 7.453-7.44v16.227h2.667V10.44l7.44 7.453L26.666 16 15.999 5.333z'/%3E%3C/svg%3E\")}.ag-icon-grip:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Egrip%3C/title%3E%3Cpath d='M26.667 12H5.334v2.667h21.333zM5.333 20h21.333v-2.667H5.333z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ctitle%3Egrip%3C/title%3E%3Cpath d='M26.667 12H5.334v2.667h21.333zM5.333 20h21.333v-2.667H5.333z'/%3E%3C/svg%3E\")}.ag-icon-settings:before{-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='none' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' d='M30 8h-4.1c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2v2h14.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30zm-9 4c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3M2 24h4.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30v-2H15.9c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2zm9-4c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='none' viewBox='0 0 32 32'%3E%3Cpath fill='%23000' d='M30 8h-4.1c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2v2h14.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30zm-9 4c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3M2 24h4.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30v-2H15.9c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2zm9-4c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3'/%3E%3C/svg%3E\")}`\n);\nvar iconSetMaterial = /* @__PURE__ */ createPart(\"iconSet\", \"material\").withCSS(iconSetMaterialCSS);\nvar iconSetQuartzCSS = (\n  /*css*/\n  `.ag-icon:before{background-color:currentColor;content:\"\";display:block;height:var(--ag-icon-size);-webkit-mask-image:linear-gradient(#0000,#0000);mask-image:linear-gradient(#0000,#0000);-webkit-mask-size:contain;mask-size:contain;width:var(--ag-icon-size)}`\n);\nvar iconNameToSvgFragment = {\n  aggregation: '<path d=\"M18 7V4H6l6 8-6 8h12v-3\"/>',\n  arrows: '<polyline points=\"5 9 2 12 5 15\"/><polyline points=\"9 5 12 2 15 5\"/><polyline points=\"15 19 12 22 9 19\"/><polyline points=\"19 9 22 12 19 15\"/><line x1=\"2\" x2=\"22\" y1=\"12\" y2=\"12\"/><line x1=\"12\" x2=\"12\" y1=\"2\" y2=\"22\"/>',\n  asc: '<path d=\"m5 12 7-7 7 7\"/><path d=\"M12 19V5\"/>',\n  cancel: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m15 9-6 6\"/><path d=\"m9 9 6 6\"/>',\n  chart: '<line x1=\"18\" x2=\"18\" y1=\"20\" y2=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"20\" y2=\"4\"/><line x1=\"6\" x2=\"6\" y1=\"20\" y2=\"14\"/>',\n  \"color-picker\": '<path d=\"m19 11-8-8-8.6 8.6a2 2 0 0 0 0 2.8l5.2 5.2c.8.8 2 .8 2.8 0L19 11Z\"/><path d=\"m5 2 5 5\"/><path d=\"M2 13h15\"/><path d=\"M22 20a2 2 0 1 1-4 0c0-1.6 1.7-2.4 2-4 .3 1.6 2 2.4 2 4Z\"/>',\n  columns: '<path d=\"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18\"/>',\n  contracted: '<path d=\"m9 18 6-6-6-6\"/>',\n  copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n  cross: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n  csv: '<path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\"/><polyline points=\"14 2 14 8 20 8\"/><path d=\"M8 13h2\"/><path d=\"M8 17h2\"/><path d=\"M14 13h2\"/><path d=\"M14 17h2\"/>',\n  cut: '<circle cx=\"6\" cy=\"6\" r=\"3\"/><path d=\"M8.12 8.12 12 12\"/><path d=\"M20 4 8.12 15.88\"/><circle cx=\"6\" cy=\"18\" r=\"3\"/><path d=\"M14.8 14.8 20 20\"/>',\n  desc: '<path d=\"M12 5v14\"/><path d=\"m19 12-7 7-7-7\"/>',\n  down: '<path d=\"M12 5v14\"/><path d=\"m19 12-7 7-7-7\"/>',\n  excel: '<path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\"/><polyline points=\"14 2 14 8 20 8\"/><path d=\"M8 13h2\"/><path d=\"M8 17h2\"/><path d=\"M14 13h2\"/><path d=\"M14 17h2\"/>',\n  expanded: '<path d=\"m15 18-6-6 6-6\"/>',\n  \"eye-slash\": '<path d=\"M9.88 9.88a3 3 0 1 0 4.24 4.24\"/><path d=\"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68\"/><path d=\"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61\"/><line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\"/>',\n  eye: '<path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n  filter: '<path d=\"M3 6h18\"/><path d=\"M7 12h10\"/><path d=\"M10 18h4\"/>',\n  first: '<path d=\"m17 18-6-6 6-6\"/><path d=\"M7 6v12\"/>',\n  group: '<path d=\"M16 12H3\"/><path d=\"M16 18H3\"/><path d=\"M10 6H3\"/><path d=\"M21 18V8a2 2 0 0 0-2-2h-5\"/><path d=\"m16 8-2-2 2-2\"/>',\n  last: '<path d=\"m7 18 6-6-6-6\"/><path d=\"M17 6v12\"/>',\n  left: '<path d=\"m12 19-7-7 7-7\"/><path d=\"M19 12H5\"/>',\n  linked: '<path d=\"M9 17H7A5 5 0 0 1 7 7h2\"/><path d=\"M15 7h2a5 5 0 1 1 0 10h-2\"/><line x1=\"8\" x2=\"16\" y1=\"12\" y2=\"12\"/>',\n  loading: '<line x1=\"12\" x2=\"12\" y1=\"2\" y2=\"6\"/><line x1=\"12\" x2=\"12\" y1=\"18\" y2=\"22\"/><line x1=\"4.93\" x2=\"7.76\" y1=\"4.93\" y2=\"7.76\"/><line x1=\"16.24\" x2=\"19.07\" y1=\"16.24\" y2=\"19.07\"/><line x1=\"2\" x2=\"6\" y1=\"12\" y2=\"12\"/><line x1=\"18\" x2=\"22\" y1=\"12\" y2=\"12\"/><line x1=\"4.93\" x2=\"7.76\" y1=\"19.07\" y2=\"16.24\"/><line x1=\"16.24\" x2=\"19.07\" y1=\"7.76\" y2=\"4.93\"/>',\n  maximize: '<polyline points=\"15 3 21 3 21 9\"/><polyline points=\"9 21 3 21 3 15\"/><line x1=\"21\" x2=\"14\" y1=\"3\" y2=\"10\"/><line x1=\"3\" x2=\"10\" y1=\"21\" y2=\"14\"/>',\n  menu: '<line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\"/><line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\"/><line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\"/>',\n  \"menu-alt\": '<circle cx=\"12\" cy=\"5\" r=\"0.75\" fill=\"#D9D9D9\"/><circle cx=\"12\" cy=\"12\" r=\"0.75\" fill=\"#D9D9D9\"/><circle cx=\"12\" cy=\"19\" r=\"0.75\" fill=\"#D9D9D9\"/>',\n  minimize: '<polyline points=\"4 14 10 14 10 20\"/><polyline points=\"20 10 14 10 14 4\"/><line x1=\"14\" x2=\"21\" y1=\"10\" y2=\"3\"/><line x1=\"3\" x2=\"10\" y1=\"21\" y2=\"14\"/>',\n  minus: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M8 12h8\"/>',\n  next: '<path d=\"m9 18 6-6-6-6\"/>',\n  none: '<path d=\"m7 15 5 5 5-5\"/><path d=\"m7 9 5-5 5 5\"/>',\n  \"not-allowed\": '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m4.9 4.9 14.2 14.2\"/>',\n  paste: '<path d=\"M15 2H9a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1Z\"/><path d=\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2M16 4h2a2 2 0 0 1 2 2v2M11 14h10\"/><path d=\"m17 10 4 4-4 4\"/>',\n  pin: '<line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"22\"/><path d=\"M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z\"/>',\n  pivot: '<path d=\"M15 3v18\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"/><path d=\"M21 9H3\"/><path d=\"M21 15H3\"/>',\n  plus: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M8 12h8\"/><path d=\"M12 8v8\"/>',\n  previous: '<path d=\"m15 18-6-6 6-6\"/>',\n  right: '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n  save: '<path d=\"M12 17V3\"/><path d=\"m6 11 6 6 6-6\"/><path d=\"M19 21H5\"/>',\n  \"small-down\": '<path d=\"m6 9 6 6 6-6\"/>',\n  \"small-left\": '<path d=\"m15 18-6-6 6-6\"/>',\n  \"small-right\": '<path d=\"m9 18 6-6-6-6\"/>',\n  \"small-up\": '<path d=\"m18 15-6-6-6 6\"/>',\n  tick: '<path d=\"M20 6 9 17l-5-5\"/>',\n  \"tree-closed\": '<path d=\"m9 18 6-6-6-6\"/>',\n  \"tree-indeterminate\": '<path d=\"M5 12h14\"/>',\n  \"tree-open\": '<path d=\"m6 9 6 6 6-6\"/>',\n  unlinked: '<path d=\"M9 17H7A5 5 0 0 1 7 7\"/><path d=\"M15 7h2a5 5 0 0 1 4 8\"/><line x1=\"8\" x2=\"12\" y1=\"12\" y2=\"12\"/><line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\"/>',\n  up: '<path d=\"m5 12 7-7 7 7\"/><path d=\"M12 19V5\"/>',\n  grip: '<circle cx=\"5\" cy=\"8\" r=\"0.5\"/><circle cx=\"12\" cy=\"8\" r=\"0.5\"/><circle cx=\"19\" cy=\"8\" r=\"0.5\"/><circle cx=\"5\" cy=\"16\" r=\"0.5\"/><circle cx=\"12\" cy=\"16\" r=\"0.5\"/><circle cx=\"19\" cy=\"16\" r=\"0.5\"/><g stroke=\"none\" fill=\"currentColor\"><circle cx=\"5\" cy=\"8\" r=\"1\"/><circle cx=\"12\" cy=\"8\" r=\"1\"/><circle cx=\"19\" cy=\"8\" r=\"1\"/><circle cx=\"5\" cy=\"16\" r=\"1\"/><circle cx=\"12\" cy=\"16\" r=\"1\"/><circle cx=\"19\" cy=\"16\" r=\"1\"/></g>',\n  settings: '<path d=\"M20 7h-9\"/><path d=\"M14 17H5\"/><circle cx=\"17\" cy=\"17\" r=\"3\"/><circle cx=\"7\" cy=\"7\" r=\"3\"/>'\n};\nvar getQuartzIconsCss = (args = {}) => {\n  let result = iconSetQuartzCSS;\n  for (const iconName of Object.keys(iconNameToSvgFragment)) {\n    const iconSvg = quartzIconSvg(iconName, args.strokeWidth || 1.5);\n    result += `.ag-icon-${iconName}::before { mask-image: url('data:image/svg+xml,${encodeURIComponent(iconSvg)}'); }\n`;\n  }\n  return result;\n};\nvar quartzIconSvg = (name, strokeWidth) => {\n  const svgFragment = iconNameToSvgFragment[name];\n  if (!svgFragment)\n    throw new Error(`Missing icon data for ${name}`);\n  return `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"ag-icon ag-icon-${name}\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"black\" stroke-width=\"${strokeWidth}\" viewBox=\"0 0 24 24\"><style>* { vector-effect: non-scaling-stroke; }</style>` + svgFragment + \"</svg>\";\n};\nvar iconSetQuartz = (args = {}) => /* @__PURE__ */ createPart(\"iconSet\", \"quartz\").withCSS(() => getQuartzIconsCss(args));\nvar iconSetQuartzLight = /* @__PURE__ */ createPart(\"iconSet\", \"quartzLight\").withCSS(() => getQuartzIconsCss({ strokeWidth: 1 }));\nvar iconSetQuartzRegular = /* @__PURE__ */ createPart(\"iconSet\", \"quartzRegular\").withCSS(getQuartzIconsCss);\nvar iconSetQuartzBold = /* @__PURE__ */ createPart(\"iconSet\", \"quartzBold\").withCSS(() => getQuartzIconsCss({ strokeWidth: 2 }));\nvar inputStyleBaseCSS = (\n  /*css*/\n  `:where(input[class^=ag-][type=number]:not(.ag-number-field-input-stepper)){-moz-appearance:textfield;&::-webkit-inner-spin-button,&::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}}:where(input[class^=ag-]:not([type]),input[class^=ag-][type=text],input[class^=ag-][type=number],input[class^=ag-][type=tel],input[class^=ag-][type=date],input[class^=ag-][type=datetime-local],textarea[class^=ag-]){background-color:var(--ag-input-background-color);border:var(--ag-input-border);border-radius:var(--ag-input-border-radius);color:var(--ag-input-text-color);cursor:pointer;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;min-height:var(--ag-input-height);padding:0;&:where(:disabled){background-color:var(--ag-input-disabled-background-color);border:var(--ag-input-disabled-border);color:var(--ag-input-disabled-text-color)}&:where(:focus){background-color:var(--ag-input-focus-background-color);border:var(--ag-input-focus-border);box-shadow:var(--ag-input-focus-shadow);color:var(--ag-input-focus-text-color)}&:where(:invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&:where(.invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}}&.ag-ltr :where(input[class^=ag-]:not([type]),input[class^=ag-][type=text],input[class^=ag-][type=number],input[class^=ag-][type=tel],input[class^=ag-][type=date],input[class^=ag-][type=datetime-local],textarea[class^=ag-]){padding-left:var(--ag-input-padding-start)}&.ag-rtl :where(input[class^=ag-]:not([type]),input[class^=ag-][type=text],input[class^=ag-][type=number],input[class^=ag-][type=tel],input[class^=ag-][type=date],input[class^=ag-][type=datetime-local],textarea[class^=ag-]){padding-right:var(--ag-input-padding-start)}`\n);\nvar inputStyleUnderlinedCSS = (\n  /*css*/\n  `:where(input[class^=ag-]:not([type]),input[class^=ag-][type=text],input[class^=ag-][type=number],input[class^=ag-][type=tel],input[class^=ag-][type=date],input[class^=ag-][type=datetime-local],textarea[class^=ag-]){border-left:none;border-right:none;border-top:none}`\n);\nvar inputStyleBase = /* @__PURE__ */ createPart(\"inputStyle\", \"base\").withAdditionalParams({\n  inputBackgroundColor: \"transparent\",\n  inputBorder: false,\n  inputBorderRadius: 0,\n  inputTextColor: {\n    ref: \"textColor\"\n  },\n  inputPaddingStart: 0,\n  inputHeight: {\n    calc: \"max(iconSize, fontSize) + spacing * 2\"\n  },\n  inputFocusBackgroundColor: {\n    ref: \"inputBackgroundColor\"\n  },\n  inputFocusBorder: {\n    ref: \"inputBorder\"\n  },\n  inputFocusShadow: \"none\",\n  inputFocusTextColor: {\n    ref: \"inputTextColor\"\n  },\n  inputDisabledBackgroundColor: {\n    ref: \"inputBackgroundColor\"\n  },\n  inputDisabledBorder: {\n    ref: \"inputBorder\"\n  },\n  inputDisabledTextColor: {\n    ref: \"inputTextColor\"\n  },\n  inputInvalidBackgroundColor: {\n    ref: \"inputBackgroundColor\"\n  },\n  inputInvalidBorder: {\n    ref: \"inputBorder\"\n  },\n  inputInvalidTextColor: {\n    ref: \"inputTextColor\"\n  }\n}).withCSS(inputStyleBaseCSS);\nvar inputStyleBordered = /* @__PURE__ */ createPartVariant(inputStyleBase, \"bordered\").withParams({\n  inputBackgroundColor: {\n    ref: \"backgroundColor\"\n  },\n  inputBorder: true,\n  inputBorderRadius: {\n    ref: \"borderRadius\"\n  },\n  inputPaddingStart: {\n    ref: \"spacing\"\n  },\n  inputFocusBorder: {\n    color: { ref: \"accentColor\" }\n  },\n  inputFocusShadow: {\n    ref: \"focusShadow\"\n  },\n  inputDisabledBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.06,\n    onto: \"backgroundColor\"\n  },\n  inputDisabledTextColor: {\n    ref: \"textColor\",\n    mix: 0.5\n  },\n  inputInvalidBorder: {\n    color: { ref: \"invalidColor\" }\n  }\n});\nvar inputStyleUnderlined = /* @__PURE__ */ createPartVariant(inputStyleBase, \"underlined\").withParams({\n  inputBorder: {\n    width: 2,\n    color: {\n      ref: \"foregroundColor\",\n      mix: 0.3\n    }\n  },\n  inputPaddingStart: {\n    ref: \"spacing\"\n  },\n  inputFocusBorder: \"solid 2px var(--ag-accent-color)\",\n  inputDisabledTextColor: {\n    ref: \"textColor\",\n    mix: 0.5\n  },\n  inputDisabledBorder: \"solid 1px var(--ag-border-color)\",\n  inputInvalidBorder: {\n    width: 2,\n    color: {\n      ref: \"invalidColor\",\n      mix: 0.3\n    }\n  }\n}).withCSS(inputStyleUnderlinedCSS);\nvar tabStyleBaseCSS = (\n  /*css*/\n  `.ag-tabs-header{background-color:var(--ag-tab-bar-background-color);border-bottom:var(--ag-tab-bar-border);display:flex;gap:var(--ag-tab-spacing);padding:var(--ag-tab-bar-top-padding) var(--ag-tab-bar-horizontal-padding) 0}.ag-tabs-header-wrapper{display:flex;.ag-tabs-header{flex:1}}.ag-tabs-close-button-wrapper{border:0;padding:var(--ag-spacing)}&.ag-ltr .ag-tabs-close-button-wrapper{border-right:1px solid var(--ag-border-color)}&.ag-rtl .ag-tabs-close-button-wrapper{border-left:1px solid var(--ag-border-color)}.ag-tabs-close-button{background-color:unset;border:0;cursor:pointer;padding:0}.ag-tab{align-items:center;background-color:var(--ag-tab-background-color);border-left:var(--ag-tab-selected-border-width) solid transparent;border-right:var(--ag-tab-selected-border-width) solid transparent;color:var(--ag-tab-text-color);cursor:pointer;display:flex;flex:1;justify-content:center;padding:var(--ag-tab-top-padding) var(--ag-tab-horizontal-padding) var(--ag-tab-bottom-padding);position:relative;&:hover{background-color:var(--ag-tab-hover-background-color);color:var(--ag-tab-hover-text-color)}&.ag-tab-selected{background-color:var(--ag-tab-selected-background-color);color:var(--ag-tab-selected-text-color)}&:after{background-color:var(--ag-tab-selected-underline-color);bottom:0;content:\"\";display:block;height:var(--ag-tab-selected-underline-width);left:0;opacity:0;position:absolute;right:0;transition:opacity var(--ag-tab-selected-underline-transition-duration)}&.ag-tab-selected:after{opacity:1}&:focus-visible{box-shadow:inset var(--ag-focus-shadow)}}&.ag-ltr .ag-tab{&.ag-tab-selected{&:not(:first-of-type){border-left-color:var(--ag-tab-selected-border-color)}&:not(:last-of-type){border-right-color:var(--ag-tab-selected-border-color)}}}&.ag-rtl .ag-tab{&.ag-tab-selected{&:not(:first-of-type){border-right-color:var(--ag-tab-selected-border-color)}&:not(:last-of-type){border-left-color:var(--ag-tab-selected-border-color)}}}`\n);\nvar tabStyleRolodexCSS = (\n  /*css*/\n  `.ag-tab{border-left:var(--ag-tab-selected-border-width) solid transparent;border-right:var(--ag-tab-selected-border-width) solid transparent;border-top:var(--ag-tab-selected-border-width) solid transparent;flex:0;&.ag-tab-selected{border-left-color:var(--ag-tab-selected-border-color);border-right-color:var(--ag-tab-selected-border-color);border-top-color:var(--ag-tab-selected-border-color);margin-bottom:-1px;padding-bottom:calc(var(--ag-tab-bottom-padding) + 1px)}}`\n);\nvar tabStyleBase = /* @__PURE__ */ createPart(\"tabStyle\", \"base\").withAdditionalParams({\n  tabBarBackgroundColor: \"transparent\",\n  tabBarHorizontalPadding: 0,\n  tabBarTopPadding: 0,\n  tabBackgroundColor: \"transparent\",\n  tabTextColor: {\n    ref: \"textColor\"\n  },\n  tabHorizontalPadding: {\n    ref: \"spacing\"\n  },\n  tabTopPadding: {\n    ref: \"spacing\"\n  },\n  tabBottomPadding: {\n    ref: \"spacing\"\n  },\n  tabSpacing: \"0\",\n  tabHoverBackgroundColor: {\n    ref: \"tabBackgroundColor\"\n  },\n  tabHoverTextColor: {\n    ref: \"tabTextColor\"\n  },\n  tabSelectedBackgroundColor: {\n    ref: \"tabBackgroundColor\"\n  },\n  tabSelectedTextColor: {\n    ref: \"tabTextColor\"\n  },\n  tabSelectedBorderWidth: 1,\n  tabSelectedBorderColor: \"transparent\",\n  tabSelectedUnderlineColor: \"transparent\",\n  tabSelectedUnderlineWidth: \"0\",\n  tabSelectedUnderlineTransitionDuration: \"0\",\n  tabBarBorder: false\n}).withCSS(tabStyleBaseCSS);\nvar tabStyleQuartz = /* @__PURE__ */ createPartVariant(tabStyleBase, \"quartz\").withParams({\n  tabBarBorder: true,\n  tabBarBackgroundColor: {\n    ref: \"foregroundColor\",\n    mix: 0.05\n  },\n  tabTextColor: {\n    ref: \"textColor\",\n    mix: 0.7\n  },\n  tabSelectedTextColor: {\n    ref: \"textColor\"\n  },\n  tabHoverTextColor: {\n    ref: \"textColor\"\n  },\n  tabSelectedBorderColor: {\n    ref: \"borderColor\"\n  },\n  tabSelectedBackgroundColor: {\n    ref: \"backgroundColor\"\n  }\n});\nvar tabStyleMaterial = /* @__PURE__ */ createPartVariant(tabStyleBase, \"material\").withParams({\n  tabBarBackgroundColor: {\n    ref: \"chromeBackgroundColor\"\n  },\n  tabSelectedUnderlineColor: {\n    ref: \"primaryColor\"\n  },\n  tabSelectedUnderlineWidth: 2,\n  tabSelectedUnderlineTransitionDuration: \"0\"\n});\nvar tabStyleAlpine = /* @__PURE__ */ createPartVariant(tabStyleBase, \"alpine\").withParams({\n  tabBarBorder: true,\n  tabBarBackgroundColor: {\n    ref: \"chromeBackgroundColor\"\n  },\n  tabHoverTextColor: {\n    ref: \"accentColor\"\n  },\n  tabSelectedTextColor: {\n    ref: \"accentColor\"\n  },\n  tabSelectedUnderlineColor: {\n    ref: \"accentColor\"\n  },\n  tabSelectedUnderlineWidth: 2,\n  tabSelectedUnderlineTransitionDuration: \"0.3s\"\n});\nvar tabStyleRolodex = /* @__PURE__ */ createPartVariant(tabStyleBase, \"rolodex\").withParams({\n  tabBarBackgroundColor: {\n    ref: \"chromeBackgroundColor\"\n  },\n  tabBarHorizontalPadding: {\n    ref: \"spacing\"\n  },\n  tabBarTopPadding: {\n    ref: \"spacing\"\n  },\n  tabBarBorder: true,\n  tabHorizontalPadding: { calc: \"spacing * 2\" },\n  tabTopPadding: {\n    ref: \"spacing\"\n  },\n  tabBottomPadding: {\n    ref: \"spacing\"\n  },\n  tabSpacing: {\n    ref: \"spacing\"\n  },\n  tabSelectedBorderColor: {\n    ref: \"borderColor\"\n  },\n  tabSelectedBackgroundColor: {\n    ref: \"backgroundColor\"\n  }\n}).withCSS(tabStyleRolodexCSS);\nvar createThemeWithDefaultWidgets = (name) => createTheme(name).withPart(checkboxStyleDefault);\nvar themeQuartz = /* @__PURE__ */ createThemeWithDefaultWidgets(\"quartz\").withPart(colorSchemeLight).withPart(iconSetQuartz).withPart(tabStyleQuartz).withPart(() => inputStyleBordered).withParams({\n  fontFamily: [\n    { googleFont: \"IBM Plex Sans\" },\n    \"-apple-system\",\n    \"BlinkMacSystemFont\",\n    \"Segoe UI\",\n    \"Roboto\",\n    \"Oxygen-Sans\",\n    \"Ubuntu\"\n  ]\n});\nvar themeAlpine = /* @__PURE__ */ createThemeWithDefaultWidgets(\"alpine\").withPart(colorSchemeLight).withPart(iconSetAlpine).withPart(tabStyleAlpine).withPart(inputStyleBordered).withParams({\n  accentColor: \"#2196f3\",\n  selectedRowBackgroundColor: {\n    ref: \"accentColor\",\n    mix: 0.3\n  },\n  inputFocusBorder: {\n    color: { ref: \"accentColor\", mix: 0.4 }\n  },\n  fontSize: 13,\n  dataFontSize: 14,\n  headerFontWeight: 700,\n  borderRadius: 3,\n  wrapperBorderRadius: 3,\n  tabSelectedUnderlineColor: { ref: \"accentColor\" },\n  tabSelectedBorderWidth: 2,\n  tabSelectedUnderlineTransitionDuration: 0.3\n});\nvar themeBalham = /* @__PURE__ */ createThemeWithDefaultWidgets(\"balham\").withPart(colorSchemeLightCold).withPart(iconSetAlpine).withPart(tabStyleRolodex).withPart(inputStyleBordered).withParams({\n  spacing: 4,\n  borderRadius: 2,\n  wrapperBorderRadius: 2,\n  headerColumnResizeHandleColor: \"transparent\",\n  headerColumnBorder: true,\n  headerColumnBorderHeight: \"50%\",\n  oddRowBackgroundColor: {\n    ref: \"chromeBackgroundColor\",\n    mix: 0.5\n  },\n  headerTextColor: {\n    ref: \"foregroundColor\",\n    mix: 0.5\n  },\n  fontSize: 12,\n  headerFontWeight: \"bold\"\n});\n\n// packages/ag-grid-community/src/main.ts\nModuleRegistry.__registerModules(\n  [CommunityFeaturesModule, ClientSideRowModelModule, InfiniteRowModelModule, CsvExportModule],\n  false,\n  void 0\n);\nexport {\n  ALWAYS_SYNC_GLOBAL_EVENTS,\n  AbstractHeaderCellCtrl,\n  AgAbstractField,\n  AgAbstractInputField,\n  AgAbstractLabel,\n  AgCheckbox,\n  AgCheckboxSelector,\n  AgColumn,\n  AgColumnGroup,\n  AgInputDateField,\n  AgInputNumberField,\n  AgInputNumberFieldSelector,\n  AgInputTextArea,\n  AgInputTextField,\n  AgInputTextFieldSelector,\n  AgPickerField,\n  AgPromise,\n  AgProvidedColumnGroup,\n  AgRadioButton,\n  AgSelect,\n  AgSelectSelector,\n  AgToggleButton,\n  AgToggleButtonSelector,\n  AnimateShowChangeCellRenderer,\n  AnimateSlideCellRenderer,\n  AnimationFrameService,\n  AriaAnnouncementService,\n  AutoScrollService,\n  AutoWidthCalculator,\n  BarColumnLabelPlacement,\n  BaseComponentWrapper,\n  BaseCreator,\n  BaseGridSerializingSession,\n  BeanStub,\n  BodyDropPivotTarget,\n  BodyDropTarget,\n  CellComp,\n  CellCtrl,\n  CellNavigationService,\n  CellPositionUtils,\n  CellRangeType,\n  ChangedPath,\n  ChartMappings,\n  CheckboxCellEditor,\n  CheckboxCellRenderer,\n  CheckboxSelectionComponent,\n  ClientSideRowModelModule,\n  ClientSideRowModelSteps,\n  ColumnApplyStateService,\n  ColumnAutosizeService,\n  ColumnFactory,\n  ColumnKeyCreator,\n  ColumnModel,\n  ColumnMoveService,\n  ColumnNameService,\n  ColumnSizeService,\n  CommunityFeaturesModule,\n  Component,\n  ComponentUtil,\n  Context,\n  CssClassManager,\n  CsvCreator,\n  CsvExportModule,\n  CtrlsService,\n  DataTypeService,\n  DateCellEditor,\n  DateFilter,\n  DateStringCellEditor,\n  Downloader,\n  DragAndDropService,\n  DragService,\n  DragSourceType,\n  Environment,\n  EventService,\n  ExcelFactoryMode,\n  ExpansionService,\n  ExpressionService,\n  FakeHScrollComp,\n  FakeVScrollComp,\n  FilterManager,\n  FilterWrapperComp,\n  FocusService,\n  FuncColsService,\n  GROUP_AUTO_COLUMN_ID,\n  Grid,\n  GridBodyComp,\n  GridBodyCtrl,\n  GridComp,\n  GridCoreCreator,\n  GridCoreModule,\n  GridCtrl,\n  GridHeaderComp,\n  GridHeaderCtrl,\n  GridOptionsService,\n  GridSerializer,\n  GroupInstanceIdCreator,\n  HeaderCellCtrl,\n  HeaderFilterCellComp,\n  HeaderFilterCellCtrl,\n  HeaderGroupCellCtrl,\n  HeaderNavigationDirection,\n  HeaderNavigationService,\n  HeaderPositionUtils,\n  HeaderRowComp,\n  HeaderRowContainerComp,\n  HeaderRowContainerCtrl,\n  HeaderRowCtrl,\n  HeaderRowType,\n  HorizontalDirection,\n  HorizontalResizeService,\n  InfiniteRowModelModule,\n  KeyCode,\n  LargeTextCellEditor,\n  LayoutCssClasses,\n  LocalEventService,\n  LocaleService,\n  ManagedFocusFeature,\n  MenuService,\n  ModuleNames,\n  ModuleRegistry,\n  MouseEventService,\n  MoveColumnFeature,\n  NavigationService,\n  NumberCellEditor,\n  NumberFilter,\n  NumberSequence,\n  OverlayWrapperComponent,\n  PinnedRowModel,\n  PivotResultColsService,\n  PopupComponent,\n  PopupEditorWrapper,\n  PopupService,\n  PositionableFeature,\n  PropertyKeys,\n  ProvidedFilter,\n  RefPlaceholder,\n  ResizeObserverService,\n  RowContainerComp,\n  RowContainerCtrl,\n  RowCtrl,\n  RowDragComp,\n  RowHighlightPosition,\n  RowModelHelperService,\n  RowNode,\n  RowNodeBlock,\n  RowNodeBlockLoader,\n  RowNodeSorter,\n  RowPositionUtils,\n  RowRenderer,\n  RowType,\n  ScalarFilter,\n  ScrollVisibleService,\n  SelectCellEditor,\n  SelectableService,\n  SelectionHandleType,\n  ServerSideTransactionResultStatus,\n  SetLeftFeature,\n  SimpleFilter,\n  SortController,\n  SortIndicatorComp,\n  SortIndicatorSelector,\n  StandardMenuFactory,\n  StylingService,\n  TabGuardClassNames,\n  TabGuardComp,\n  TabGuardCtrl,\n  TabGuardFeature,\n  TextCellEditor,\n  TextFilter,\n  TextFloatingFilter,\n  TooltipFeature,\n  TooltipStateManager,\n  TouchListener,\n  UserComponentFactory,\n  UserComponentRegistry,\n  ValueCache,\n  ValueService,\n  VanillaFrameworkOverrides,\n  VerticalDirection,\n  VisibleColsService,\n  XmlFactory,\n  ZipContainer,\n  ColumnFilterModule as _ColumnFilterModule,\n  CommunityMenuApiModule as _CommunityMenuApiModule,\n  CsrmSsrmSharedApiModule as _CsrmSsrmSharedApiModule,\n  CsvExportCoreModule as _CsvExportCoreModule,\n  EditCoreModule as _EditCoreModule,\n  EmptyBean as _EmptyBean,\n  FilterCoreModule as _FilterCoreModule,\n  FloatingFilterModule as _FloatingFilterModule,\n  ReadOnlyFloatingFilterModule as _ReadOnlyFloatingFilterModule,\n  RowNodeBlockModule as _RowNodeBlockModule,\n  SsrmInfiniteSharedApiModule as _SsrmInfiniteSharedApiModule,\n  _addFocusableContainerListener,\n  _areEqual,\n  _bindCellRendererToHtmlElement,\n  _capitalise,\n  _clearElement,\n  _cloneObject,\n  _combineAttributesAndGridOptions,\n  _compose,\n  _createIcon,\n  _createIconNoSpan,\n  _debounce,\n  _defaultComparator,\n  _defineModule,\n  _doOnce,\n  _errorOnce,\n  _escapeString,\n  _exists,\n  _existsAndNotEmpty,\n  _flatten,\n  _forEachReverse,\n  _formatNumberCommas,\n  _formatNumberTwoDecimalPlacesAndCommas,\n  _fuzzySuggestions,\n  _getAbsoluteHeight,\n  _getAbsoluteWidth,\n  _getActiveDomElement,\n  _getAllValuesInObject,\n  _getAriaPosInSet,\n  _getCtrlForEventTarget,\n  _getDocument,\n  _getFillHandle,\n  _getGlobalGridOption,\n  _getGrandTotalRow,\n  _getGroupAggFiltering,\n  _getGroupSelection,\n  _getGroupSelectsDescendants,\n  _getGroupTotalRowCallback,\n  _getHeaderCheckbox,\n  _getHeaderClassesFromColDef,\n  _getInnerHeight,\n  _getInnerWidth,\n  _getIsRowSelectable,\n  _getRowContainerOptions,\n  _getRowHeightAsNumber,\n  _getRowHeightForNode,\n  _getRowIdCallback,\n  _getRowSelectionMode,\n  _getSuppressMultiRanges,\n  _getToolPanelClassesFromColDef,\n  _includes,\n  _insertArrayIntoArray,\n  _insertIntoArray,\n  _isAnimateRows,\n  _isCellSelectionEnabled,\n  _isClientSideRowModel,\n  _isColumnsSortingCoupledToGroup,\n  _isDomLayout,\n  _isElementInEventPath,\n  _isEventFromPrintableCharacter,\n  _isGetRowHeightFunction,\n  _isGroupMultiAutoColumn,\n  _isGroupUseEntireRow,\n  _isIOSUserAgent,\n  _isMultiRowSelection,\n  _isNodeOrElement,\n  _isNothingFocused,\n  _isRowSelection,\n  _isServerSideRowModel,\n  _isStopPropagationForAgGrid,\n  _isUsingNewCellSelectionAPI,\n  _isUsingNewRowSelectionAPI,\n  _isVisible,\n  _iterateObject,\n  _jsonEquals,\n  _last,\n  _loadTemplate,\n  _log,\n  _makeNull,\n  _mergeDeep,\n  _missing,\n  _missingOrEmpty,\n  _parseDateTimeFromString,\n  _processOnChange,\n  _radioCssClass,\n  _removeAriaExpanded,\n  _removeAriaSort,\n  _removeFromArray,\n  _removeFromParent,\n  _removeRepeatsFromArray,\n  _serialiseDate,\n  _setAriaActiveDescendant,\n  _setAriaChecked,\n  _setAriaColCount,\n  _setAriaColIndex,\n  _setAriaColSpan,\n  _setAriaControls,\n  _setAriaDescribedBy,\n  _setAriaDisabled,\n  _setAriaExpanded,\n  _setAriaHidden,\n  _setAriaLabel,\n  _setAriaLabelledBy,\n  _setAriaLevel,\n  _setAriaPosInSet,\n  _setAriaRole,\n  _setAriaRowCount,\n  _setAriaRowIndex,\n  _setAriaSelected,\n  _setAriaSetSize,\n  _setAriaSort,\n  _setDisabled,\n  _setDisplayed,\n  _setFixedWidth,\n  _setVisible,\n  _shallowCompare,\n  _stopPropagationForAgGrid,\n  _toStringOrNull,\n  _unwrapUserComp,\n  _utf8_encode,\n  _values,\n  _waitUntil,\n  _warnOnce,\n  checkboxStyleDefault,\n  colorSchemeDark,\n  colorSchemeDarkBlue,\n  colorSchemeDarkWarm,\n  colorSchemeLight,\n  colorSchemeLightCold,\n  colorSchemeLightWarm,\n  createGrid,\n  createPart,\n  createTheme,\n  getDefaultFloatingFilterType,\n  getParamType,\n  iconSetAlpine,\n  iconSetMaterial,\n  iconSetQuartz,\n  iconSetQuartzBold,\n  iconSetQuartzLight,\n  iconSetQuartzRegular,\n  inputStyleBase,\n  inputStyleBordered,\n  inputStyleUnderlined,\n  isColumn,\n  isColumnControlsCol,\n  isColumnGroup,\n  isColumnGroupAutoCol,\n  isProvidedColumnGroup,\n  isSelectionUIEvent,\n  paramValueToCss,\n  provideGlobalGridOptions,\n  tabStyleAlpine,\n  tabStyleBase,\n  tabStyleMaterial,\n  tabStyleQuartz,\n  tabStyleRolodex,\n  themeAlpine,\n  themeBalham,\n  themeQuartz\n};\n", "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __decorateClass = (decorators, target, key, kind) => {\n  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n  for (var i = decorators.length - 1, decorator; i >= 0; i--)\n    if (decorator = decorators[i])\n      result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n  if (kind && result)\n    __defProp(target, key, result);\n  return result;\n};\n\n// packages/ag-charts-locale/src/en-US.ts\nvar AG_CHARTS_LOCALE_EN_US = {\n  // Screen reader announcement when focusing an item in the chart\n  ariaAnnounceHoverDatum: \"${datum}\",\n  // Screen reader announcement when focusing a chart\n  ariaAnnounceChart: \"chart, ${seriesCount}[number] series\",\n  // Screen reader announcement when focusing a hierarchy chart\n  ariaAnnounceHierarchyChart: \"hierarchy chart, ${caption}\",\n  // Screen reader announcement when focusing a gauge chart\n  ariaAnnounceGaugeChart: \"gauge chart, ${caption}\",\n  // Screen reader announcement when focusing an item in a treemap or sunburst chart\n  ariaAnnounceHierarchyDatum: \"level ${level}[number], ${count}[number] children, ${description}\",\n  // Screen reader announcement when focusing a link in a Sankey or chord chart\n  ariaAnnounceFlowProportionLink: \"link ${index} of ${count}, from ${from} to ${to}, ${sizeName} ${size}\",\n  // Screen reader announcement when focusing a node in a Sankey or chord chart\n  ariaAnnounceFlowProportionNode: \"node ${index} of ${count}, ${description}\",\n  // Screen reader description for legend items\n  ariaDescriptionLegendItem: \"Press Space or Enter to toggle visibility\",\n  // Screen reader text for annotation-options toolbar\n  ariaLabelAnnotationOptionsToolbar: \"Annotation Options\",\n  // Screen reader text for annotation-settings dialog\n  ariaLabelAnnotationSettingsDialog: \"Annotation Settings\",\n  // Screen reader text for the color picker dialog\n  ariaLabelColorPicker: \"Color picker\",\n  // Screen reader text for the financial charts toolbar\n  ariaLabelFinancialCharts: \"Financial Charts\",\n  // Screen reader text for the legend toolbar\n  ariaLabelLegend: \"Legend\",\n  // Screen reader text for the legend pagination button\n  ariaLabelLegendPagination: \"Legend Pagination\",\n  // Screen reader text for the previous legend page button\n  ariaLabelLegendPagePrevious: \"Previous Legend Page\",\n  // Screen reader text for the next legend page button\n  ariaLabelLegendPageNext: \"Next Legend Page\",\n  // Screen reader text for the an item in the legend\n  ariaLabelLegendItem: \"${label}, Legend item ${index}[number] of ${count}[number]\",\n  // Screen reader text for the an unknown item in the legend\n  ariaLabelLegendItemUnknown: \"Unknown legend item\",\n  // Screen reader text for the navigator element\n  ariaLabelNavigator: \"Navigator\",\n  // Screen reader text for an accessibility control that changes the position of the navigator's range\n  ariaLabelNavigatorRange: \"Range\",\n  // Screen reader text for an accessibility control that changes the start of the navigator's range\n  ariaLabelNavigatorMinimum: \"Minimum\",\n  // Screen reader text for an accessibility control that changes the end of the navigator's range\n  ariaLabelNavigatorMaximum: \"Maximum\",\n  // Screen reader text for ranges toolbar\n  ariaLabelRangesToolbar: \"Ranges\",\n  // Screen reader text for the settings dialog tab-bar\n  ariaLabelSettingsTabBar: \"Settings\",\n  // Screen reader text for zoom toolbar\n  ariaLabelZoomToolbar: \"Zoom\",\n  // Screen reader text for the value of the navigator's range\n  ariaValuePanRange: \"${min}[percent] to ${max}[percent]\",\n  // Alt-text for the solid line dash style menu item icon\n  iconAltTextLineStyleSolid: \"Solid\",\n  // Alt-text for the long-dashed line dash style menu item icon\n  iconAltTextLineStyleDashed: \"Long-dashed\",\n  // Alt-text for the short-dashed line dash style menu item icon\n  iconAltTextLineStyleDotted: \"Short-dashed\",\n  // Alt-text for the 'position-top' icon\n  iconAltTextPositionTop: \"Top\",\n  // Alt-text for the 'position-center' icon\n  iconAltTextPositionCenter: \"Center\",\n  // Alt-text for the 'position-bottom' icon\n  iconAltTextPositionBottom: \"Bottom\",\n  // Alt-text for the 'position-left' icon\n  iconAltTextAlignLeft: \"Left\",\n  // Alt-text for the 'align-center' icon\n  iconAltTextAlignCenter: \"Center\",\n  // Alt-text for the 'position-right' icon\n  iconAltTextAlignRight: \"Right\",\n  // Alt-text for the 'close' icon\n  iconAltTextClose: \"Close\",\n  // Default text for the 'loading data' overlay\n  overlayLoadingData: \"Loading data...\",\n  // Default text for the 'no data' overlay\n  overlayNoData: \"No data to display\",\n  // Default text for the 'no visible series' overlay\n  overlayNoVisibleSeries: \"No visible series\",\n  // Text for the series type toolbar's chart type button\n  toolbarSeriesTypeDropdown: \"Chart Type\",\n  // Text for the series type toolbar's OHLC chart type button\n  toolbarSeriesTypeOHLC: \"OHLC\",\n  // Text for the series type toolbar's HLC chart type button\n  toolbarSeriesTypeHLC: \"HLC\",\n  // Text for the series type toolbar's high low chart type button\n  toolbarSeriesTypeHighLow: \"High Low\",\n  // Text for the series type toolbar's candles chart type button\n  toolbarSeriesTypeCandles: \"Candles\",\n  // Text for the series type toolbar's hollow candles chart type button\n  toolbarSeriesTypeHollowCandles: \"Hollow Candles\",\n  // Text for the series type toolbar's line chart type button\n  toolbarSeriesTypeLine: \"Line\",\n  // Text for the series type toolbar's line with markers chart type button\n  toolbarSeriesTypeLineWithMarkers: \"Line with Markers\",\n  // Text for the series type toolbar's line with step line chart type button\n  toolbarSeriesTypeStepLine: \"Step Line\",\n  // Text for the annotation toolbar's trend line button\n  toolbarAnnotationsTrendLine: \"Trend Line\",\n  // Text for the annotation toolbar's horizontal line button\n  toolbarAnnotationsHorizontalLine: \"Horizontal Line\",\n  // Text for the annotation toolbar's vertical line button\n  toolbarAnnotationsVerticalLine: \"Vertical Line\",\n  // Text for the annotation toolbar's parallel channel button\n  toolbarAnnotationsParallelChannel: \"Parallel Channel\",\n  // Text for the annotation toolbar's disjoint channel button\n  toolbarAnnotationsDisjointChannel: \"Disjoint Channel\",\n  // Text for the annotation toolbar's clear all button\n  toolbarAnnotationsClearAll: \"Clear All\",\n  /**\n   * Text for the annotation toolbar's color picker annotation button\n   * @deprecated v10.1.0 use `toolbarAnnotationsLineColor` instead.\n   */\n  toolbarAnnotationsColor: \"Color\",\n  // Text for the annotation toolbar's fill color picker annotation button\n  toolbarAnnotationsFillColor: \"Fill Color\",\n  // Text for the annotation toolbar's line color picker annotation button\n  toolbarAnnotationsLineColor: \"Line Color\",\n  // Text for the annotation toolbar's line style type button\n  toolbarAnnotationsLineStyle: \"Line Style\",\n  // Text for the annotation toolbar's line stroke width button\n  toolbarAnnotationsLineStrokeWidth: \"Line Stroke Width\",\n  // Text for the annotation toolbar's settings annotation button\n  toolbarAnnotationsSettings: \"Settings\",\n  // Text for the annotation toolbar's text color picker annotation button\n  toolbarAnnotationsTextColor: \"Text Color\",\n  // Text for the annotation toolbar's text size picker annotation button\n  toolbarAnnotationsTextSize: \"Text Size\",\n  // Text for the annotation toolbar's lock annotation button\n  toolbarAnnotationsLock: \"Lock\",\n  // Text for the annotation toolbar's unlock annotation button\n  toolbarAnnotationsUnlock: \"Unlock\",\n  // Text for the annotation toolbar's delete annotation button\n  toolbarAnnotationsDelete: \"Delete\",\n  // Text for the annotation toolbar's drag handle\n  toolbarAnnotationsDragHandle: \"Drag Toolbar\",\n  // Text for the annotation toolbar's line drawings menu button\n  toolbarAnnotationsLineAnnotations: \"Trend Lines\",\n  // Text for the annotation toolbar's text annotations menu button\n  toolbarAnnotationsTextAnnotations: \"Text Annotations\",\n  // Text for the annotation toolbar's shapes menu button\n  toolbarAnnotationsShapeAnnotations: \"Arrows\",\n  // Text for the annotation toolbar's measurers menu button\n  toolbarAnnotationsMeasurerAnnotations: \"Measurers\",\n  // Text for the annotation toolbar's callout button\n  toolbarAnnotationsCallout: \"Callout\",\n  // Text for the annotation toolbar's comment button\n  toolbarAnnotationsComment: \"Comment\",\n  // Text for the annotation toolbar's note button\n  toolbarAnnotationsNote: \"Note\",\n  // Text for the annotation toolbar's text button\n  toolbarAnnotationsText: \"Text\",\n  // Text for the annotation toolbar's arrow button\n  toolbarAnnotationsArrow: \"Arrow\",\n  // Text for the annotation toolbar's arrow up button\n  toolbarAnnotationsArrowUp: \"Arrow Up\",\n  // Text for the annotation toolbar's arrow down button\n  toolbarAnnotationsArrowDown: \"Arrow Down\",\n  // Text for the annotation toolbar's date range button\n  toolbarAnnotationsDateRange: \"Date Range\",\n  // Text for the annotation toolbar's price range button\n  toolbarAnnotationsPriceRange: \"Price Range\",\n  // Text for the annotation toolbar's date and price range button\n  toolbarAnnotationsDatePriceRange: \"Date and Price\",\n  // Text for the annotation toolbar's quick date and price range button\n  toolbarAnnotationsQuickDatePriceRange: \"Measure\",\n  // Text for the range toolbar's 1 month button\n  toolbarRange1Month: \"1M\",\n  // Aria label for the range toolbar's 1 month button\n  toolbarRange1MonthAria: \"1 month\",\n  // Text for the range toolbar's 3 month button\n  toolbarRange3Months: \"3M\",\n  // Aria label for the range toolbar's 3 month button\n  toolbarRange3MonthsAria: \"3 months\",\n  // Text for the range toolbar's 6 month button\n  toolbarRange6Months: \"6M\",\n  // Aria label for the range toolbar's 6 month button\n  toolbarRange6MonthsAria: \"6 months\",\n  // Text for the range toolbar's year to date button\n  toolbarRangeYearToDate: \"YTD\",\n  // Aria label for the range toolbar's year to date month button\n  toolbarRangeYearToDateAria: \"Year to date\",\n  // Text for the range toolbar's 1 year button\n  toolbarRange1Year: \"1Y\",\n  // Aria label for the range toolbar's 1 year button\n  toolbarRange1YearAria: \"1 year\",\n  // Text for the range toolbar's full range button\n  toolbarRangeAll: \"All\",\n  // Aria label for the range toolbar's full range button\n  toolbarRangeAllAria: \"All\",\n  // Text for the zoom toolbar's zoom out button\n  toolbarZoomZoomOut: \"Zoom out\",\n  // Text for the zoom toolbar's zoom in button\n  toolbarZoomZoomIn: \"Zoom in\",\n  // Text for the zoom toolbar's pan left button\n  toolbarZoomPanLeft: \"Pan left\",\n  // Text for the zoom toolbar's pan right button\n  toolbarZoomPanRight: \"Pan right\",\n  // Text for the zoom toolbar's pan to the start button\n  toolbarZoomPanStart: \"Pan to the start\",\n  // Text for the zoom toolbar's pan to the end button\n  toolbarZoomPanEnd: \"Pan to the end\",\n  // Text for the zoom toolbar's pan reset button\n  toolbarZoomReset: \"Reset the zoom\",\n  // Text for the context menu's download button\n  contextMenuDownload: \"Download\",\n  // Text for the context menu's toggle series visibility button\n  contextMenuToggleSeriesVisibility: \"Toggle Visibility\",\n  // Text for the context menu's toggle other series visibility button\n  contextMenuToggleOtherSeries: \"Toggle Other Series\",\n  // Text for the context menu's zoom to point button\n  contextMenuZoomToCursor: \"Zoom to here\",\n  // Text for the context menu's pan to point button\n  contextMenuPanToCursor: \"Pan to here\",\n  // Text for the annotation dialog's header channel tab label\n  dialogHeaderChannel: \"Channel\",\n  // Text for the annotation dialog's header line tab label\n  dialogHeaderLine: \"Line\",\n  // Text for the annotation dialog's header date range tab label\n  dialogHeaderDateRange: \"Date Range\",\n  // Text for the annotation dialog's header price range tab label\n  dialogHeaderPriceRange: \"Price Range\",\n  // Text for the annotation dialog's header date and price range tab label\n  dialogHeaderDatePriceRange: \"Date and Price\",\n  // Text for the annotation dialog's header text tab label\n  dialogHeaderText: \"Text\",\n  // Text for the annotation dialog's text alignment radio label\n  dialogInputAlign: \"Align\",\n  // Text for the annotation dialog's color picker label\n  dialogInputColorPicker: \"Color\",\n  // Text for the annotation dialog's color picker alt text\n  dialogInputColorPickerAltText: \"Text Color\",\n  // Text for the annotation dialog's fill color picker label\n  dialogInputFillColorPicker: \"Fill\",\n  // Text for the annotation dialog's fill color picker alt text\n  dialogInputFillColorPickerAltText: \"Fill Color\",\n  // Text for the annotation dialog's extend channel start checkbox\n  dialogInputExtendChannelStart: \"Extend channel start\",\n  // Text for the annotation dialog's extend channel end checkbox\n  dialogInputExtendChannelEnd: \"Extend channel end\",\n  // Text for the annotation dialog's extend line start checkbox\n  dialogInputExtendLineStart: \"Extend line start\",\n  // Text for the annotation dialog's extend line end checkbox\n  dialogInputExtendLineEnd: \"Extend line end\",\n  // Text for the annotation dialog's extend above checkbox\n  dialogInputExtendAbove: \"Extend above\",\n  // Text for the annotation dialog's extend below checkbox\n  dialogInputExtendBelow: \"Extend below\",\n  // Text for the annotation dialog's extend left checkbox\n  dialogInputExtendLeft: \"Extend left\",\n  // Text for the annotation dialog's extend right checkbox\n  dialogInputExtendRight: \"Extend right\",\n  // Text for the annotation dialog's font size select box label\n  dialogInputFontSize: \"Size\",\n  // Text for the annotation dialog's font size select box alt text\n  dialogInputFontSizeAltText: \"Font Size\",\n  // Text for the annotation dialog's line style radio label\n  dialogInputLineStyle: \"Dash\",\n  // Text for the annotation dialog's text position radio label\n  dialogInputPosition: \"Position\",\n  // Text for the annotation dialog's stroke width label\n  dialogInputStrokeWidth: \"Weight\",\n  // Text for the annotation dialog's stroke width label\n  dialogInputStrokeWidthAltText: \"Line Weight\",\n  // Text for text area input placeholders\n  inputTextareaPlaceholder: \"Add Text\",\n  // Text for the measurer statistics date range bars value\n  measurerDateRangeBars: \"${value}[number] bars\",\n  // Text for the measurer statistics price range value\n  measurerPriceRangeValue: \"${value}[number]\",\n  // Text for the measurer statistics price range percentage\n  measurerPriceRangePercent: \"${value}[percent]\",\n  // Text for the measurer statistics volume value\n  measurerVolume: \"Vol ${value}\"\n};\n\n// packages/ag-charts-types/src/chart/errorBarOptions.ts\nvar AgErrorBarSupportedSeriesTypes = [\"bar\", \"line\", \"scatter\"];\n\n// packages/ag-charts-types/src/chart/icons.ts\nvar ICONS_LEGACY = [\n  \"delete-legacy\",\n  \"disjoint-channel\",\n  \"disjoint-channel-legacy\",\n  \"horizontal-line-legacy\",\n  \"line-color-legacy\",\n  \"lock\",\n  \"lock-legacy\",\n  \"pan-end-legacy\",\n  \"pan-left-legacy\",\n  \"pan-right-legacy\",\n  \"pan-start-legacy\",\n  \"parallel-channel\",\n  \"parallel-channel-legacy\",\n  \"reset-legacy\",\n  \"trend-line\",\n  \"trend-line-legacy\",\n  \"unlock\",\n  \"unlock-legacy\",\n  \"vertical-line\",\n  \"vertical-line-legacy\",\n  \"zoom-in-legacy\",\n  \"zoom-in-alt\",\n  \"zoom-in-alt-legacy\",\n  \"zoom-out-legacy\",\n  \"zoom-out-alt\",\n  \"zoom-out-alt-legacy\"\n];\n\n// packages/ag-charts-types/src/chart/navigatorOptions.ts\nvar __MINI_CHART_SERIES_OPTIONS = void 0;\nvar __VERIFY_MINI_CHART_SERIES_OPTIONS = void 0;\n__VERIFY_MINI_CHART_SERIES_OPTIONS = __MINI_CHART_SERIES_OPTIONS;\n\n// packages/ag-charts-types/src/chart/themeOptions.ts\nvar __THEME_OVERRIDES = void 0;\nvar __VERIFY_THEME_OVERRIDES = void 0;\n__VERIFY_THEME_OVERRIDES = __THEME_OVERRIDES;\n\n// packages/ag-charts-types/src/chart/tooltipOptions.ts\nvar AgTooltipPositionType = /* @__PURE__ */ ((AgTooltipPositionType2) => {\n  AgTooltipPositionType2[\"POINTER\"] = \"pointer\";\n  AgTooltipPositionType2[\"NODE\"] = \"node\";\n  AgTooltipPositionType2[\"TOP\"] = \"top\";\n  AgTooltipPositionType2[\"RIGHT\"] = \"right\";\n  AgTooltipPositionType2[\"BOTTOM\"] = \"bottom\";\n  AgTooltipPositionType2[\"LEFT\"] = \"left\";\n  AgTooltipPositionType2[\"TOP_LEFT\"] = \"top-left\";\n  AgTooltipPositionType2[\"TOP_RIGHT\"] = \"top-right\";\n  AgTooltipPositionType2[\"BOTTOM_RIGHT\"] = \"bottom-right\";\n  AgTooltipPositionType2[\"BOTTOM_LEFT\"] = \"bottom-left\";\n  return AgTooltipPositionType2;\n})(AgTooltipPositionType || {});\n\n// packages/ag-charts-types/src/presets/gauge/commonOptions.ts\nvar __THEMEABLE_OPTIONS = void 0;\nvar __VERIFY_THEMEABLE_OPTIONS = void 0;\n__VERIFY_THEMEABLE_OPTIONS = __THEMEABLE_OPTIONS;\nvar __AXIS_LABEL_OPTIONS = void 0;\nvar __VERIFY_AXIS_LABEL_OPTIONS = void 0;\n__VERIFY_AXIS_LABEL_OPTIONS = __AXIS_LABEL_OPTIONS;\n\n// packages/ag-charts-community/src/util/time/index.ts\nvar time_exports = {};\n__export(time_exports, {\n  TimeInterval: () => TimeInterval,\n  day: () => day,\n  friday: () => friday,\n  hour: () => hour,\n  millisecond: () => millisecond,\n  minute: () => minute,\n  monday: () => monday,\n  month: () => month,\n  saturday: () => saturday,\n  second: () => second,\n  sunday: () => sunday,\n  thursday: () => thursday,\n  tuesday: () => tuesday,\n  utcDay: () => utcDay,\n  utcHour: () => utcHour,\n  utcMinute: () => utcMinute,\n  utcMonth: () => utcMonth,\n  utcYear: () => utcYear,\n  wednesday: () => wednesday,\n  year: () => year\n});\n\n// packages/ag-charts-community/src/util/function.ts\nvar doOnceState = /* @__PURE__ */ new Map();\nfunction doOnce(func, key) {\n  if (doOnceState.has(key))\n    return;\n  doOnceState.set(key, true);\n  func();\n}\ndoOnce.clear = () => doOnceState.clear();\nfunction identity(x) {\n  return x;\n}\nfunction throttle(callback2, waitMs = 0, options) {\n  const { leading = true, trailing = true } = options ?? {};\n  let timerId;\n  let lastArgs;\n  let shouldWait = false;\n  function timeoutHandler() {\n    if (trailing && lastArgs) {\n      timerId = setTimeout(timeoutHandler, waitMs);\n      callback2(...lastArgs);\n    } else {\n      shouldWait = false;\n    }\n    lastArgs = null;\n  }\n  function throttleCallback(...args) {\n    if (shouldWait) {\n      lastArgs = args;\n    } else {\n      shouldWait = true;\n      timerId = setTimeout(timeoutHandler, waitMs);\n      if (leading) {\n        callback2(...args);\n      } else {\n        lastArgs = args;\n      }\n    }\n  }\n  return Object.assign(throttleCallback, {\n    cancel() {\n      clearTimeout(timerId);\n      shouldWait = false;\n      lastArgs = null;\n    }\n  });\n}\nfunction joinFunctions(...fns) {\n  return () => {\n    for (const fn of fns) {\n      fn();\n    }\n  };\n}\n\n// packages/ag-charts-community/src/util/logger.ts\nvar Logger = {\n  log(...logContent) {\n    console.log(...logContent);\n  },\n  warn(message, ...logContent) {\n    console.warn(`AG Charts - ${message}`, ...logContent);\n  },\n  error(message, ...logContent) {\n    if (typeof message === \"object\") {\n      console.error(`AG Charts error`, message, ...logContent);\n    } else {\n      console.error(`AG Charts - ${message}`, ...logContent);\n    }\n  },\n  table(...logContent) {\n    console.table(...logContent);\n  },\n  warnOnce(message, ...logContent) {\n    doOnce(() => Logger.warn(message, ...logContent), `Logger.warn: ${message}`);\n  },\n  errorOnce(message, ...logContent) {\n    doOnce(() => Logger.error(message, ...logContent), `Logger.error: ${message}`);\n  }\n};\n\n// packages/ag-charts-community/src/util/time/interval.ts\nvar TimeInterval = class {\n  constructor(_encode, _decode, _rangeCallback) {\n    this._encode = _encode;\n    this._decode = _decode;\n    this._rangeCallback = _rangeCallback;\n  }\n  /**\n   * Returns a new date representing the latest interval boundary date before or equal to date.\n   * For example, `day.floor(date)` typically returns 12:00 AM local time on the given date.\n   * @param date\n   */\n  floor(date) {\n    const d = new Date(date);\n    const e = this._encode(d);\n    return this._decode(e);\n  }\n  /**\n   * Returns a new date representing the earliest interval boundary date after or equal to date.\n   * @param date\n   */\n  ceil(date) {\n    const d = new Date(Number(date) - 1);\n    const e = this._encode(d);\n    return this._decode(e + 1);\n  }\n  /**\n   * Returns an array of dates representing every interval boundary after or equal to start (inclusive) and before stop (exclusive).\n   * @param start Range start.\n   * @param stop Range end.\n   * @param extend If specified, the requested range will be extended to the closest \"nice\" values.\n   */\n  range(start2, stop, extend) {\n    const rangeCallback = this._rangeCallback?.(start2, stop);\n    const e0 = this._encode(extend ? this.floor(start2) : this.ceil(start2));\n    const e1 = this._encode(extend ? this.ceil(stop) : this.floor(stop));\n    if (e1 < e0) {\n      return [];\n    }\n    const range3 = [];\n    for (let e = e0; e <= e1; e++) {\n      const d = this._decode(e);\n      range3.push(d);\n    }\n    rangeCallback?.();\n    return range3;\n  }\n};\nvar CountableTimeInterval = class extends TimeInterval {\n  getOffset(snapTo, step) {\n    const s = typeof snapTo === \"number\" || snapTo instanceof Date ? this._encode(new Date(snapTo)) : 0;\n    return Math.floor(s) % step;\n  }\n  /**\n   * Returns a filtered view of this interval representing every step'th date.\n   * It can be a number of minutes, hours, days etc.\n   * Must be a positive integer.\n   * @param step\n   */\n  every(step, options) {\n    let offset4 = 0;\n    let rangeCallback;\n    const unsafeStep = step;\n    step = Math.max(1, Math.round(step));\n    if (unsafeStep !== step) {\n      Logger.warnOnce(`interval step of [${unsafeStep}] rounded to [${step}].`);\n    }\n    const { snapTo = \"start\" } = options ?? {};\n    if (typeof snapTo === \"string\") {\n      const initialOffset = offset4;\n      rangeCallback = (start2, stop) => {\n        const s = snapTo === \"start\" ? start2 : stop;\n        offset4 = this.getOffset(s, step);\n        return () => offset4 = initialOffset;\n      };\n    } else if (typeof snapTo === \"number\") {\n      offset4 = this.getOffset(new Date(snapTo), step);\n    } else if (snapTo instanceof Date) {\n      offset4 = this.getOffset(snapTo, step);\n    }\n    const encode13 = (date) => {\n      const e = this._encode(date);\n      return Math.floor((e - offset4) / step);\n    };\n    const decode13 = (encoded) => {\n      return this._decode(encoded * step + offset4);\n    };\n    return new TimeInterval(encode13, decode13, rangeCallback);\n  }\n};\n\n// packages/ag-charts-community/src/util/time/millisecond.ts\nfunction encode(date) {\n  return date.getTime();\n}\nfunction decode(encoded) {\n  return new Date(encoded);\n}\nvar millisecond = new CountableTimeInterval(encode, decode);\nvar millisecond_default = millisecond;\n\n// packages/ag-charts-community/src/util/time/duration.ts\nvar epochYear = (/* @__PURE__ */ new Date(0)).getFullYear();\nvar durationSecond = 1e3;\nvar durationMinute = durationSecond * 60;\nvar durationHour = durationMinute * 60;\nvar durationDay = durationHour * 24;\nvar durationWeek = durationDay * 7;\nvar durationMonth = durationDay * 30;\nvar durationYear = durationDay * 365;\n\n// packages/ag-charts-community/src/util/time/second.ts\nvar offset = (/* @__PURE__ */ new Date()).getTimezoneOffset() * durationMinute;\nfunction encode2(date) {\n  return Math.floor((date.getTime() - offset) / durationSecond);\n}\nfunction decode2(encoded) {\n  return new Date(offset + encoded * durationSecond);\n}\nvar second = new CountableTimeInterval(encode2, decode2);\nvar second_default = second;\n\n// packages/ag-charts-community/src/util/time/minute.ts\nvar offset2 = (/* @__PURE__ */ new Date()).getTimezoneOffset() * durationMinute;\nfunction encode3(date) {\n  return Math.floor((date.getTime() - offset2) / durationMinute);\n}\nfunction decode3(encoded) {\n  return new Date(offset2 + encoded * durationMinute);\n}\nvar minute = new CountableTimeInterval(encode3, decode3);\nvar minute_default = minute;\n\n// packages/ag-charts-community/src/util/time/hour.ts\nvar offset3 = (/* @__PURE__ */ new Date()).getTimezoneOffset() * durationMinute;\nfunction encode4(date) {\n  return Math.floor((date.getTime() - offset3) / durationHour);\n}\nfunction decode4(encoded) {\n  return new Date(offset3 + encoded * durationHour);\n}\nvar hour = new CountableTimeInterval(encode4, decode4);\nvar hour_default = hour;\n\n// packages/ag-charts-community/src/util/time/day.ts\nfunction encode5(date) {\n  const tzOffsetMs = date.getTimezoneOffset() * durationMinute;\n  return Math.floor((date.getTime() - tzOffsetMs) / durationDay);\n}\nfunction decode5(encoded) {\n  const d = new Date(1970, 0, 1);\n  d.setDate(d.getDate() + encoded);\n  return d;\n}\nvar day = new CountableTimeInterval(encode5, decode5);\nvar day_default = day;\n\n// packages/ag-charts-community/src/util/time/week.ts\nfunction weekday(weekStart) {\n  const thursday2 = 4;\n  const dayShift = (7 + weekStart - thursday2) % 7;\n  function encode13(date) {\n    const tzOffsetMs = date.getTimezoneOffset() * durationMinute;\n    return Math.floor((date.getTime() - tzOffsetMs) / durationWeek - dayShift / 7);\n  }\n  function decode13(encoded) {\n    const d = new Date(1970, 0, 1);\n    d.setDate(d.getDate() + encoded * 7 + dayShift);\n    return d;\n  }\n  return new CountableTimeInterval(encode13, decode13);\n}\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\nvar week_default = sunday;\n\n// packages/ag-charts-community/src/util/time/month.ts\nfunction encode6(date) {\n  return date.getFullYear() * 12 + date.getMonth();\n}\nfunction decode6(encoded) {\n  const year2 = Math.floor(encoded / 12);\n  const month2 = encoded - year2 * 12;\n  return new Date(year2, month2, 1);\n}\nvar month = new CountableTimeInterval(encode6, decode6);\nvar month_default = month;\n\n// packages/ag-charts-community/src/util/time/year.ts\nfunction encode7(date) {\n  return date.getFullYear();\n}\nfunction decode7(encoded) {\n  const d = /* @__PURE__ */ new Date();\n  d.setFullYear(encoded);\n  d.setMonth(0, 1);\n  d.setHours(0, 0, 0, 0);\n  return d;\n}\nvar year = new CountableTimeInterval(encode7, decode7);\nvar year_default = year;\n\n// packages/ag-charts-community/src/util/time/utcMinute.ts\nfunction encode8(date) {\n  return Math.floor(date.getTime() / durationMinute);\n}\nfunction decode8(encoded) {\n  return new Date(encoded * durationMinute);\n}\nvar utcMinute = new CountableTimeInterval(encode8, decode8);\n\n// packages/ag-charts-community/src/util/time/utcHour.ts\nfunction encode9(date) {\n  return Math.floor(date.getTime() / durationHour);\n}\nfunction decode9(encoded) {\n  return new Date(encoded * durationHour);\n}\nvar utcHour = new CountableTimeInterval(encode9, decode9);\n\n// packages/ag-charts-community/src/util/time/utcDay.ts\nfunction encode10(date) {\n  return Math.floor(date.getTime() / durationDay);\n}\nfunction decode10(encoded) {\n  const d = /* @__PURE__ */ new Date(0);\n  d.setUTCDate(d.getUTCDate() + encoded);\n  d.setUTCHours(0, 0, 0, 0);\n  return d;\n}\nvar utcDay = new CountableTimeInterval(encode10, decode10);\n\n// packages/ag-charts-community/src/util/time/utcMonth.ts\nfunction encode11(date) {\n  return date.getUTCFullYear() * 12 + date.getUTCMonth();\n}\nfunction decode11(encoded) {\n  const year2 = Math.floor(encoded / 12);\n  const month2 = encoded - year2 * 12;\n  return new Date(Date.UTC(year2, month2, 1));\n}\nvar utcMonth = new CountableTimeInterval(encode11, decode11);\n\n// packages/ag-charts-community/src/util/time/utcYear.ts\nfunction encode12(date) {\n  return date.getUTCFullYear();\n}\nfunction decode12(encoded) {\n  const d = /* @__PURE__ */ new Date();\n  d.setUTCFullYear(encoded);\n  d.setUTCMonth(0, 1);\n  d.setUTCHours(0, 0, 0, 0);\n  return d;\n}\nvar utcYear = new CountableTimeInterval(encode12, decode12);\n\n// packages/ag-charts-community/src/motion/fromToMotion.ts\nvar fromToMotion_exports = {};\n__export(fromToMotion_exports, {\n  NODE_UPDATE_STATE_TO_PHASE_MAPPING: () => NODE_UPDATE_STATE_TO_PHASE_MAPPING,\n  fromToMotion: () => fromToMotion,\n  staticFromToMotion: () => staticFromToMotion\n});\n\n// packages/ag-charts-community/src/util/id.ts\nvar ID_MAP = /* @__PURE__ */ new Map();\nfunction resetIds() {\n  ID_MAP.clear();\n}\nfunction createId(instance) {\n  const constructor = instance.constructor;\n  const className = Object.hasOwn(constructor, \"className\") ? constructor.className : constructor.name;\n  if (!className) {\n    throw new Error(`The ${constructor} is missing the 'className' property.`);\n  }\n  const nextId = (ID_MAP.get(className) ?? 0) + 1;\n  ID_MAP.set(className, nextId);\n  return `${className}-${nextId}`;\n}\nfunction generateUUID() {\n  return crypto.randomUUID?.() ?? generateUUIDv4();\n}\nfunction generateUUIDv4() {\n  const uuidArray = new Uint8Array(16);\n  crypto.getRandomValues(uuidArray);\n  uuidArray[6] = uuidArray[6] & 15 | 64;\n  uuidArray[8] = uuidArray[8] & 63 | 128;\n  let uuid = \"\";\n  for (let i = 0; i < uuidArray.length; i++) {\n    if (i === 4 || i === 6 || i === 8 || i === 10) {\n      uuid += \"-\";\n    }\n    uuid += uuidArray[i].toString(16).padStart(2, \"0\");\n  }\n  return uuid;\n}\n\n// packages/ag-charts-community/src/util/iterator.ts\nfunction* iterate(...iterators) {\n  for (const iterator of iterators) {\n    yield* iterator;\n  }\n}\nfunction toIterable(value) {\n  return value != null && typeof value === \"object\" && Symbol.iterator in value ? value : [value];\n}\n\n// packages/ag-charts-community/src/util/interpolating.ts\nvar interpolate = Symbol(\"interpolate\");\nvar isInterpolating = (x) => x[interpolate] != null;\n\n// packages/ag-charts-community/src/util/nearest.ts\nfunction nearestSquared(x, y, objects, maxDistanceSquared = Infinity) {\n  const result = { nearest: void 0, distanceSquared: maxDistanceSquared };\n  for (const obj of objects) {\n    const thisDistance = obj.distanceSquared(x, y);\n    if (thisDistance === 0) {\n      return { nearest: obj, distanceSquared: 0 };\n    } else if (thisDistance < result.distanceSquared) {\n      result.nearest = obj;\n      result.distanceSquared = thisDistance;\n    }\n  }\n  return result;\n}\nfunction nearestSquaredInContainer(x, y, container, maxDistanceSquared = Infinity) {\n  const { x: tx = x, y: ty = y } = container.transformPoint?.(x, y) ?? {};\n  const result = { nearest: void 0, distanceSquared: maxDistanceSquared };\n  for (const child of container.children) {\n    const { nearest, distanceSquared: distanceSquared3 } = child.nearestSquared(tx, ty, result.distanceSquared);\n    if (distanceSquared3 === 0) {\n      return { nearest, distanceSquared: distanceSquared3 };\n    } else if (distanceSquared3 < result.distanceSquared) {\n      result.nearest = nearest;\n      result.distanceSquared = distanceSquared3;\n    }\n  }\n  return result;\n}\n\n// packages/ag-charts-community/src/util/dom.ts\nvar verifiedGlobals = {};\nif (typeof window !== \"undefined\") {\n  verifiedGlobals.window = window;\n} else if (typeof global !== \"undefined\") {\n  verifiedGlobals.window = global.window;\n}\nif (typeof document !== \"undefined\") {\n  verifiedGlobals.document = document;\n} else if (typeof global !== \"undefined\") {\n  verifiedGlobals.document = global.document;\n}\nfunction getDocument(propertyName) {\n  return propertyName ? verifiedGlobals.document?.[propertyName] : verifiedGlobals.document;\n}\nfunction getWindow(propertyName) {\n  return propertyName ? verifiedGlobals.window?.[propertyName] : verifiedGlobals.window;\n}\nfunction createElement(tagName, className, style) {\n  const element2 = getDocument().createElement(tagName);\n  if (typeof className === \"object\") {\n    style = className;\n    className = void 0;\n  }\n  if (className) {\n    for (const name of className.split(\" \")) {\n      element2.classList.add(name);\n    }\n  }\n  if (style) {\n    Object.assign(element2.style, style);\n  }\n  return element2;\n}\nfunction createElementNS(namespaceURI, qualifiedName) {\n  return getDocument().createElementNS(namespaceURI, qualifiedName);\n}\nfunction downloadUrl(dataUrl, fileName) {\n  const { body } = getDocument();\n  const element2 = createElement(\"a\", { display: \"none\" });\n  element2.href = dataUrl;\n  element2.download = fileName;\n  body.appendChild(element2);\n  element2.click();\n  setTimeout(() => body.removeChild(element2));\n}\nfunction setDocument(document2) {\n  verifiedGlobals.document = document2;\n}\nfunction setWindow(window2) {\n  verifiedGlobals.window = window2;\n}\nfunction setElementBBox(element2, bbox) {\n  if (element2) {\n    element2.style.width = `${bbox.width}px`;\n    element2.style.height = `${bbox.height}px`;\n    element2.style.left = `${bbox.x}px`;\n    element2.style.top = `${bbox.y}px`;\n  }\n}\nfunction focusCursorAtEnd(element2) {\n  element2.focus({ preventScroll: true });\n  if (element2.lastChild?.textContent == null)\n    return;\n  const range3 = getDocument().createRange();\n  range3.setStart(element2.lastChild, element2.lastChild.textContent.length);\n  range3.setEnd(element2.lastChild, element2.lastChild.textContent.length);\n  const selection = getWindow().getSelection();\n  selection?.removeAllRanges();\n  selection?.addRange(range3);\n}\nvar _id = 0;\nfunction createElementId(label) {\n  return `${label ?? \"ag-charts-element\"}-${_id++}`;\n}\n\n// packages/ag-charts-community/src/util/number.ts\nfunction clamp(min, value, max) {\n  return Math.min(max, Math.max(min, value));\n}\nfunction clampArray(value, array2) {\n  const [min, max] = findMinMax(array2);\n  return clamp(min, value, max);\n}\nfunction findMinMax(array2) {\n  if (array2.length === 0)\n    return [];\n  const result = [Infinity, -Infinity];\n  for (const val of array2) {\n    if (val < result[0])\n      result[0] = val;\n    if (val > result[1])\n      result[1] = val;\n  }\n  return result;\n}\nfunction findRangeExtent(array2) {\n  const [min, max] = findMinMax(array2);\n  return max - min;\n}\nfunction isEqual(a, b, epsilon2 = 1e-10) {\n  return Math.abs(a - b) < epsilon2;\n}\nfunction isNegative(value) {\n  return Math.sign(value) === -1 || Object.is(value, -0);\n}\nfunction round(value, decimals = 2) {\n  const base = 10 ** decimals;\n  return Math.round(value * base) / base;\n}\nfunction toFixed(value, fractionOrSignificantDigits = 2) {\n  const power = Math.floor(Math.log(Math.abs(value)) / Math.LN10);\n  if (power >= 0 || !isFinite(power)) {\n    return value.toFixed(fractionOrSignificantDigits);\n  }\n  return value.toFixed(Math.abs(power) - 1 + fractionOrSignificantDigits);\n}\nfunction mod(n, m) {\n  return Math.floor(n % m + (n < 0 ? m : 0));\n}\nfunction countFractionDigits(value) {\n  if (Math.floor(value) === value)\n    return 0;\n  let valueString = String(value);\n  let exponent = 0;\n  if (value < 1e-6 || value >= 1e21) {\n    let exponentString;\n    [valueString, exponentString] = valueString.split(\"e\");\n    if (exponentString != null) {\n      exponent = Number(exponentString);\n    }\n  }\n  const decimalPlaces2 = valueString.split(\".\")[1]?.length ?? 0;\n  return Math.max(decimalPlaces2 - exponent, 0);\n}\nfunction formatNormalizedPercentage(ratio2, locale) {\n  locale = locale ?? getWindow(\"navigator\").language;\n  return new Intl.NumberFormat(locale, {\n    style: \"percent\",\n    minimumFractionDigits: 2,\n    maximumFractionDigits: 2\n  }).format(ratio2);\n}\nfunction formatPercentage(percent, locale) {\n  return formatNormalizedPercentage(percent / 100, locale);\n}\n\n// packages/ag-charts-community/src/scene/bbox.ts\nvar _BBox = class _BBox {\n  constructor(x, y, width2, height2) {\n    this.x = x;\n    this.y = y;\n    this.width = width2;\n    this.height = height2;\n  }\n  static fromDOMRect({ x, y, width: width2, height: height2 }) {\n    return new _BBox(x, y, width2, height2);\n  }\n  toDOMRect() {\n    return {\n      x: this.x,\n      y: this.y,\n      width: this.width,\n      height: this.height,\n      top: this.y,\n      left: this.x,\n      right: this.x + this.width,\n      bottom: this.y + this.height,\n      toJSON() {\n        return {};\n      }\n    };\n  }\n  clone() {\n    const { x, y, width: width2, height: height2 } = this;\n    return new _BBox(x, y, width2, height2);\n  }\n  equals(other) {\n    return this.x === other.x && this.y === other.y && this.width === other.width && this.height === other.height;\n  }\n  containsPoint(x, y) {\n    return x >= this.x && x <= this.x + this.width && y >= this.y && y <= this.y + this.height;\n  }\n  intersection(other) {\n    if (!this.collidesBBox(other))\n      return;\n    const newX1 = clamp(other.x, this.x, other.x + other.width);\n    const newY1 = clamp(other.y, this.y, other.y + other.height);\n    const newX2 = clamp(other.x, this.x + this.width, other.x + other.width);\n    const newY2 = clamp(other.y, this.y + this.height, other.y + other.height);\n    return new _BBox(newX1, newY1, newX2 - newX1, newY2 - newY1);\n  }\n  collidesBBox(other) {\n    return this.x < other.x + other.width && this.x + this.width > other.x && this.y < other.y + other.height && this.y + this.height > other.y;\n  }\n  computeCenter() {\n    return { x: this.x + this.width / 2, y: this.y + this.height / 2 };\n  }\n  isFinite() {\n    return Number.isFinite(this.x) && Number.isFinite(this.y) && Number.isFinite(this.width) && Number.isFinite(this.height);\n  }\n  distanceSquared(x, y) {\n    if (this.containsPoint(x, y)) {\n      return 0;\n    }\n    const dx = x - clamp(this.x, x, this.x + this.width);\n    const dy = y - clamp(this.y, y, this.y + this.height);\n    return dx * dx + dy * dy;\n  }\n  static nearestBox(x, y, boxes) {\n    return nearestSquared(x, y, boxes);\n  }\n  clip(clipRect) {\n    if (clipRect === void 0)\n      return this;\n    const x1 = Math.max(this.x, clipRect.x);\n    const y1 = Math.max(this.y, clipRect.y);\n    const x2 = Math.min(this.x + this.width, clipRect.x + clipRect.width);\n    const y2 = Math.min(this.y + this.height, clipRect.y + clipRect.height);\n    this.x = x1;\n    this.y = y1;\n    this.width = Math.max(0, x2 - x1);\n    this.height = Math.max(0, y2 - y1);\n    return this;\n  }\n  shrink(amount, position) {\n    const apply2 = (pos, amt) => {\n      switch (pos) {\n        case \"top\":\n          this.y += amt;\n        case \"bottom\":\n          this.height -= amt;\n          break;\n        case \"left\":\n          this.x += amt;\n        case \"right\":\n          this.width -= amt;\n          break;\n        case \"vertical\":\n          this.y += amt;\n          this.height -= amt * 2;\n          break;\n        case \"horizontal\":\n          this.x += amt;\n          this.width -= amt * 2;\n          break;\n        case void 0:\n          this.x += amt;\n          this.width -= amt * 2;\n          this.y += amt;\n          this.height -= amt * 2;\n          break;\n        default:\n      }\n    };\n    if (typeof amount === \"number\") {\n      apply2(position, amount);\n    } else if (typeof amount === \"object\") {\n      Object.entries(amount).forEach(([pos, amt]) => apply2(pos, amt));\n    }\n    return this;\n  }\n  grow(amount, position) {\n    if (typeof amount === \"number\") {\n      this.shrink(-amount, position);\n    } else {\n      const paddingCopy = { ...amount };\n      for (const key in paddingCopy) {\n        paddingCopy[key] *= -1;\n      }\n      this.shrink(paddingCopy);\n    }\n    return this;\n  }\n  translate(x, y) {\n    this.x += x;\n    this.y += y;\n    return this;\n  }\n  combine(other) {\n    const { x, y, width: width2, height: height2 } = this;\n    this.x = Math.min(x, other.x);\n    this.y = Math.min(y, other.y);\n    this.width = Math.max(x + width2, other.x + other.width) - this.x;\n    this.height = Math.max(y + height2, other.y + other.height) - this.y;\n  }\n  static merge(boxes) {\n    let left = Infinity;\n    let top = Infinity;\n    let right = -Infinity;\n    let bottom = -Infinity;\n    for (const box of boxes) {\n      if (box.x < left) {\n        left = box.x;\n      }\n      if (box.y < top) {\n        top = box.y;\n      }\n      if (box.x + box.width > right) {\n        right = box.x + box.width;\n      }\n      if (box.y + box.height > bottom) {\n        bottom = box.y + box.height;\n      }\n    }\n    return new _BBox(left, top, right - left, bottom - top);\n  }\n  [interpolate](other, d) {\n    return new _BBox(\n      this.x * (1 - d) + other.x * d,\n      this.y * (1 - d) + other.y * d,\n      this.width * (1 - d) + other.width * d,\n      this.height * (1 - d) + other.height * d\n    );\n  }\n};\n_BBox.zero = Object.freeze(new _BBox(0, 0, 0, 0));\n_BBox.NaN = Object.freeze(new _BBox(NaN, NaN, NaN, NaN));\nvar BBox = _BBox;\n\n// packages/ag-charts-community/src/scene/changeDetectable.ts\nvar RedrawType = /* @__PURE__ */ ((RedrawType2) => {\n  RedrawType2[RedrawType2[\"NONE\"] = 0] = \"NONE\";\n  RedrawType2[RedrawType2[\"TRIVIAL\"] = 1] = \"TRIVIAL\";\n  RedrawType2[RedrawType2[\"MINOR\"] = 2] = \"MINOR\";\n  RedrawType2[RedrawType2[\"MAJOR\"] = 3] = \"MAJOR\";\n  return RedrawType2;\n})(RedrawType || {});\nfunction SceneChangeDetection(opts) {\n  return function(target, key) {\n    const privateKey = `__${key}`;\n    if (target[key]) {\n      return;\n    }\n    prepareGetSet(target, key, privateKey, opts);\n  };\n}\nfunction prepareGetSet(target, key, privateKey, opts) {\n  const {\n    redraw = 1 /* TRIVIAL */,\n    type = \"normal\",\n    changeCb,\n    convertor,\n    checkDirtyOnAssignment = false\n  } = opts ?? {};\n  const requiredOpts = { redraw, type, changeCb, checkDirtyOnAssignment, convertor };\n  let setter;\n  switch (type) {\n    case \"normal\":\n      setter = buildNormalSetter(privateKey, requiredOpts);\n      break;\n    case \"transform\":\n      setter = buildTransformSetter(privateKey, requiredOpts);\n      break;\n    case \"path\":\n      setter = buildPathSetter(privateKey, requiredOpts);\n      break;\n  }\n  setter = buildCheckDirtyChain(\n    buildChangeCallbackChain(buildConvertorChain(setter, requiredOpts), requiredOpts),\n    requiredOpts\n  );\n  const getter = function() {\n    return this[privateKey];\n  };\n  Object.defineProperty(target, key, {\n    set: setter,\n    get: getter,\n    enumerable: true,\n    configurable: true\n  });\n}\nfunction buildConvertorChain(setterFn, opts) {\n  const { convertor } = opts;\n  if (convertor) {\n    return function(value) {\n      setterFn.call(this, convertor(value));\n    };\n  }\n  return setterFn;\n}\nvar NO_CHANGE = Symbol(\"no-change\");\nfunction buildChangeCallbackChain(setterFn, opts) {\n  const { changeCb } = opts;\n  if (changeCb) {\n    return function(value) {\n      const change = setterFn.call(this, value);\n      if (change !== NO_CHANGE) {\n        changeCb.call(this, this);\n      }\n      return change;\n    };\n  }\n  return setterFn;\n}\nfunction buildCheckDirtyChain(setterFn, opts) {\n  const { checkDirtyOnAssignment } = opts;\n  if (checkDirtyOnAssignment) {\n    return function(value) {\n      const change = setterFn.call(this, value);\n      if (change !== NO_CHANGE && value != null && value._dirty > 0 /* NONE */) {\n        this.markDirty(value._dirty);\n      }\n      return change;\n    };\n  }\n  return setterFn;\n}\nfunction buildNormalSetter(privateKey, opts) {\n  const { redraw = 1 /* TRIVIAL */, changeCb } = opts;\n  return function(value) {\n    const oldValue = this[privateKey];\n    if (value !== oldValue) {\n      this[privateKey] = value;\n      this.markDirty(redraw);\n      changeCb?.(this);\n      return value;\n    }\n    return NO_CHANGE;\n  };\n}\nfunction buildTransformSetter(privateKey, opts) {\n  const { redraw = 1 /* TRIVIAL */ } = opts;\n  return function(value) {\n    const oldValue = this[privateKey];\n    if (value !== oldValue) {\n      this[privateKey] = value;\n      this.markDirtyTransform(redraw);\n      return value;\n    }\n    return NO_CHANGE;\n  };\n}\nfunction buildPathSetter(privateKey, opts) {\n  const { redraw = 1 /* TRIVIAL */ } = opts;\n  return function(value) {\n    const oldValue = this[privateKey];\n    if (value !== oldValue) {\n      this[privateKey] = value;\n      if (!this._dirtyPath) {\n        this._dirtyPath = true;\n        this.markDirty(redraw);\n      }\n      return value;\n    }\n    return NO_CHANGE;\n  };\n}\n\n// packages/ag-charts-community/src/scene/node.ts\nvar PointerEvents = /* @__PURE__ */ ((PointerEvents2) => {\n  PointerEvents2[PointerEvents2[\"All\"] = 0] = \"All\";\n  PointerEvents2[PointerEvents2[\"None\"] = 1] = \"None\";\n  return PointerEvents2;\n})(PointerEvents || {});\nvar _Node = class _Node {\n  // Discriminators for render order within a zIndex\n  constructor(options) {\n    /** Unique number to allow creation order to be easily determined. */\n    this.serialNumber = _Node._nextSerialNumber++;\n    this.childNodeCounts = { groups: 0, nonGroups: 0 };\n    /** Unique node ID in the form `ClassName-NaturalNumber`. */\n    this.id = createId(this);\n    this.pointerEvents = 0 /* All */;\n    this._dirty = 3 /* MAJOR */;\n    this.dirtyZIndex = false;\n    this.virtualChildrenCount = 0;\n    /**\n     * To simplify the type system (especially in Selections) we don't have the `Parent` node\n     * (one that has children). Instead, we mimic HTML DOM, where any node can have children.\n     * But we still need to distinguish regular leaf nodes from container leafs somehow.\n     */\n    this.isContainerNode = false;\n    this.visible = true;\n    this.zIndex = 0;\n    this.zIndexSubOrder = void 0;\n    this.name = options?.name;\n    this.isVirtual = options?.isVirtual ?? false;\n    this.tag = options?.tag ?? NaN;\n    this.zIndex = options?.zIndex ?? 0;\n  }\n  static *extractBBoxes(nodes, skipInvisible) {\n    for (const n of nodes) {\n      if (!skipInvisible || n.visible && !n.transitionOut) {\n        const bbox = n.getBBox();\n        if (bbox)\n          yield bbox;\n      }\n    }\n  }\n  /**\n   * Some arbitrary data bound to the node.\n   */\n  get datum() {\n    return this._datum ?? this.parentNode?.datum;\n  }\n  set datum(datum) {\n    if (this._datum !== datum) {\n      this._previousDatum = this._datum;\n      this._datum = datum;\n    }\n  }\n  get previousDatum() {\n    return this._previousDatum;\n  }\n  get layerManager() {\n    return this._layerManager;\n  }\n  get dirty() {\n    return this._dirty;\n  }\n  /** Perform any pre-rendering initialization. */\n  preRender() {\n    this.childNodeCounts.groups = 0;\n    this.childNodeCounts.nonGroups = 1;\n    for (const child of this.children()) {\n      const childCounts = child.preRender();\n      this.childNodeCounts.groups += childCounts.groups;\n      this.childNodeCounts.nonGroups += childCounts.nonGroups;\n    }\n    return this.childNodeCounts;\n  }\n  render(renderCtx) {\n    const { stats } = renderCtx;\n    this._dirty = 0 /* NONE */;\n    if (renderCtx.debugNodeSearch) {\n      const idOrName = this.name ?? this.id;\n      if (renderCtx.debugNodeSearch.some((v) => typeof v === \"string\" ? v === idOrName : v.test(idOrName))) {\n        renderCtx.debugNodes[this.name ?? this.id] = this;\n      }\n    }\n    if (stats) {\n      stats.nodesRendered++;\n    }\n  }\n  _setLayerManager(value) {\n    this._layerManager = value;\n    this._debug = value?.debug;\n    for (const child of this.children(false)) {\n      child._setLayerManager(value);\n    }\n  }\n  sortChildren(compareFn) {\n    this.dirtyZIndex = false;\n    if (!this.childNodes)\n      return;\n    if (this.hasVirtualChildren())\n      return;\n    const sortedChildren = [...this.childNodes].sort(compareFn);\n    this.childNodes.clear();\n    for (const child of sortedChildren) {\n      this.childNodes.add(child);\n    }\n  }\n  *traverseUp(includeSelf) {\n    let node = this;\n    if (includeSelf) {\n      yield node;\n    }\n    while (node = node.parentNode) {\n      yield node;\n    }\n  }\n  *children(flattenVirtual = true) {\n    if (!this.childNodes)\n      return;\n    const virtualChildren = [];\n    for (const child of this.childNodes) {\n      if (flattenVirtual && child.isVirtual) {\n        virtualChildren.push(child.children());\n      } else {\n        yield child;\n      }\n    }\n    for (const vChildren of virtualChildren) {\n      yield* vChildren;\n    }\n  }\n  *virtualChildren() {\n    if (!this.childNodes || !this.virtualChildrenCount)\n      return;\n    for (const child of this.childNodes) {\n      if (child.isVirtual) {\n        yield child;\n      }\n    }\n  }\n  hasVirtualChildren() {\n    return this.virtualChildrenCount > 0;\n  }\n  /**\n   * Checks if the node is a leaf (has no children).\n   */\n  isLeaf() {\n    return !this.childNodes?.size;\n  }\n  /**\n   * Checks if the node is the root (has no parent).\n   */\n  isRoot() {\n    return !this.parentNode;\n  }\n  /**\n   * Appends one or more new node instances to this parent.\n   * If one needs to:\n   * - move a child to the end of the list of children\n   * - move a child from one parent to another (including parents in other scenes)\n   * one should use the {@link insertBefore} method instead.\n   * @param nodes A node or nodes to append.\n   */\n  append(nodes) {\n    this.childNodes ?? (this.childNodes = /* @__PURE__ */ new Set());\n    for (const node of toIterable(nodes)) {\n      node.parentNode?.removeChild(node);\n      this.childNodes.add(node);\n      node.parentNode = this;\n      node._setLayerManager(this.layerManager);\n      if (node.isVirtual) {\n        this.virtualChildrenCount++;\n      }\n    }\n    this.invalidateCachedBBox();\n    this.dirtyZIndex = true;\n    this.markDirty(3 /* MAJOR */);\n  }\n  appendChild(node) {\n    this.append(node);\n    return node;\n  }\n  removeChild(node) {\n    if (!this.childNodes?.delete(node)) {\n      return false;\n    }\n    delete node.parentNode;\n    node._setLayerManager();\n    if (node.isVirtual) {\n      this.virtualChildrenCount--;\n    }\n    this.invalidateCachedBBox();\n    this.dirtyZIndex = true;\n    this.markDirty(3 /* MAJOR */);\n    return true;\n  }\n  remove() {\n    return this.parentNode?.removeChild(this) ?? false;\n  }\n  clear() {\n    for (const child of this.children(false)) {\n      delete child.parentNode;\n      child._setLayerManager();\n    }\n    this.childNodes?.clear();\n    this.invalidateCachedBBox();\n    this.virtualChildrenCount = 0;\n  }\n  destroy() {\n    this.parentNode?.removeChild(this);\n  }\n  setProperties(styles, pickKeys) {\n    if (pickKeys) {\n      for (const key of pickKeys) {\n        this[key] = styles[key];\n      }\n    } else {\n      Object.assign(this, styles);\n    }\n    return this;\n  }\n  containsPoint(_x, _y) {\n    return false;\n  }\n  /**\n   * Hit testing method.\n   * Recursively checks if the given point is inside this node or any of its children.\n   * Returns the first matching node or `undefined`.\n   * Nodes that render later (show on top) are hit tested first.\n   */\n  pickNode(x, y, _localCoords = false) {\n    if (!this.visible || this.pointerEvents === 1 /* None */ || !this.containsPoint(x, y)) {\n      return;\n    }\n    const children = [...this.children()];\n    if (children.length > 1e3) {\n      for (let i = children.length - 1; i >= 0; i--) {\n        const child = children[i];\n        const containsPoint2 = child.containsPoint(x, y);\n        const hit = containsPoint2 ? child.pickNode(x, y) : void 0;\n        if (hit) {\n          return hit;\n        }\n      }\n    } else if (children.length) {\n      for (let i = children.length - 1; i >= 0; i--) {\n        const hit = children[i].pickNode(x, y);\n        if (hit) {\n          return hit;\n        }\n      }\n    } else if (!this.isContainerNode) {\n      return this;\n    }\n  }\n  invalidateCachedBBox() {\n    this.cachedBBox = void 0;\n    this.parentNode?.invalidateCachedBBox();\n  }\n  getBBox() {\n    if (this.cachedBBox == null) {\n      this.cachedBBox = Object.freeze(this.computeBBox());\n    }\n    return this.cachedBBox;\n  }\n  computeBBox() {\n    return;\n  }\n  markDirty(type = 1 /* TRIVIAL */, parentType = type) {\n    const { _dirty } = this;\n    const dirtyTypeBelowHighWatermark = _dirty > type || _dirty === type && type === parentType;\n    const noParentCachedBBox = this.cachedBBox == null;\n    if (noParentCachedBBox && dirtyTypeBelowHighWatermark)\n      return;\n    this.invalidateCachedBBox();\n    this._dirty = Math.max(_dirty, type);\n    if (this.parentNode) {\n      this.parentNode.markDirty(parentType);\n    } else if (this.layerManager) {\n      this.layerManager.markDirty();\n    }\n  }\n  markClean(opts) {\n    const { force = false, recursive = true } = opts ?? {};\n    if (this._dirty === 0 /* NONE */ && !force)\n      return;\n    this._dirty = 0 /* NONE */;\n    for (const child of this.children(false)) {\n      if (child.isVirtual ? recursive !== false : recursive === true) {\n        child.markClean({ force });\n      }\n    }\n  }\n  onVisibleChange() {\n  }\n  onZIndexChange() {\n    if (this.parentNode) {\n      this.parentNode.dirtyZIndex = true;\n    }\n  }\n  toSVG() {\n    return;\n  }\n};\n_Node._nextSerialNumber = 0;\n__decorateClass([\n  SceneChangeDetection({\n    redraw: 3 /* MAJOR */,\n    changeCb: (target) => target.onVisibleChange()\n  })\n], _Node.prototype, \"visible\", 2);\n__decorateClass([\n  SceneChangeDetection({\n    redraw: 1 /* TRIVIAL */,\n    changeCb: (target) => target.onZIndexChange()\n  })\n], _Node.prototype, \"zIndex\", 2);\n__decorateClass([\n  SceneChangeDetection({\n    redraw: 1 /* TRIVIAL */,\n    changeCb: (target) => target.onZIndexChange()\n  })\n], _Node.prototype, \"zIndexSubOrder\", 2);\nvar Node = _Node;\n\n// packages/ag-charts-community/src/util/color.ts\nvar lerp = (x, y, t) => x * (1 - t) + y * t;\nvar srgbToLinear = (value) => {\n  const sign = value < 0 ? -1 : 1;\n  const abs = Math.abs(value);\n  if (abs <= 0.04045)\n    return value / 12.92;\n  return sign * ((abs + 0.055) / 1.055) ** 2.4;\n};\nvar srgbFromLinear = (value) => {\n  const sign = value < 0 ? -1 : 1;\n  const abs = Math.abs(value);\n  if (abs > 31308e-7) {\n    return sign * (1.055 * abs ** (1 / 2.4) - 0.055);\n  }\n  return 12.92 * value;\n};\nvar _Color = class _Color {\n  /**\n   * Every color component should be in the [0, 1] range.\n   * Some easing functions (such as elastic easing) can overshoot the target value by some amount.\n   * So, when animating colors, if the source or target color components are already near\n   * or at the edge of the allowed [0, 1] range, it is possible for the intermediate color\n   * component value to end up outside of that range mid-animation. For this reason the constructor\n   * performs range checking/constraining.\n   * @param r Red component.\n   * @param g Green component.\n   * @param b Blue component.\n   * @param a Alpha (opacity) component.\n   */\n  constructor(r, g, b, a = 1) {\n    this.r = clamp(0, r || 0, 1);\n    this.g = clamp(0, g || 0, 1);\n    this.b = clamp(0, b || 0, 1);\n    this.a = clamp(0, a || 0, 1);\n  }\n  /**\n   * A color string can be in one of the following formats to be valid:\n   * - #rgb\n   * - #rrggbb\n   * - rgb(r, g, b)\n   * - rgba(r, g, b, a)\n   * - CSS color name such as 'white', 'orange', 'cyan', etc.\n   */\n  static validColorString(str) {\n    if (str.indexOf(\"#\") >= 0) {\n      return !!_Color.parseHex(str);\n    }\n    if (str.indexOf(\"rgb\") >= 0) {\n      return !!_Color.stringToRgba(str);\n    }\n    return !!_Color.nameToHex[str.toLowerCase()];\n  }\n  /**\n   * The given string can be in one of the following formats:\n   * - #rgb\n   * - #rrggbb\n   * - rgb(r, g, b)\n   * - rgba(r, g, b, a)\n   * - CSS color name such as 'white', 'orange', 'cyan', etc.\n   * @param str\n   */\n  static fromString(str) {\n    if (str.indexOf(\"#\") >= 0) {\n      return _Color.fromHexString(str);\n    }\n    const hex = _Color.nameToHex[str.toLowerCase()];\n    if (hex) {\n      return _Color.fromHexString(hex);\n    }\n    if (str.indexOf(\"rgb\") >= 0) {\n      return _Color.fromRgbaString(str);\n    }\n    throw new Error(`Invalid color string: '${str}'`);\n  }\n  // See https://drafts.csswg.org/css-color/#hex-notation\n  static parseHex(input) {\n    input = input.replace(/ /g, \"\").slice(1);\n    let parts;\n    switch (input.length) {\n      case 6:\n      case 8:\n        parts = [];\n        for (let i = 0; i < input.length; i += 2) {\n          parts.push(parseInt(`${input[i]}${input[i + 1]}`, 16));\n        }\n        break;\n      case 3:\n      case 4:\n        parts = input.split(\"\").map((p) => parseInt(p, 16)).map((p) => p + p * 16);\n        break;\n    }\n    if (parts?.length >= 3 && parts.every((p) => p >= 0)) {\n      if (parts.length === 3) {\n        parts.push(255);\n      }\n      return parts;\n    }\n  }\n  static fromHexString(str) {\n    const values = _Color.parseHex(str);\n    if (values) {\n      const [r, g, b, a] = values;\n      return new _Color(r / 255, g / 255, b / 255, a / 255);\n    }\n    throw new Error(`Malformed hexadecimal color string: '${str}'`);\n  }\n  static stringToRgba(str) {\n    let po = -1;\n    let pc = -1;\n    for (let i = 0; i < str.length; i++) {\n      const c = str[i];\n      if (po === -1 && c === \"(\") {\n        po = i;\n      } else if (c === \")\") {\n        pc = i;\n        break;\n      }\n    }\n    if (po === -1 || pc === -1)\n      return;\n    const contents = str.substring(po + 1, pc);\n    const parts = contents.split(\",\");\n    const rgba = [];\n    for (let i = 0; i < parts.length; i++) {\n      const part = parts[i];\n      let value = parseFloat(part);\n      if (!Number.isFinite(value)) {\n        return;\n      }\n      if (part.indexOf(\"%\") >= 0) {\n        value = clamp(0, value, 100);\n        value /= 100;\n      } else if (i === 3) {\n        value = clamp(0, value, 1);\n      } else {\n        value = clamp(0, value, 255);\n        value /= 255;\n      }\n      rgba.push(value);\n    }\n    return rgba;\n  }\n  static fromRgbaString(str) {\n    const rgba = _Color.stringToRgba(str);\n    if (rgba) {\n      if (rgba.length === 3) {\n        return new _Color(rgba[0], rgba[1], rgba[2]);\n      } else if (rgba.length === 4) {\n        return new _Color(rgba[0], rgba[1], rgba[2], rgba[3]);\n      }\n    }\n    throw new Error(`Malformed rgb/rgba color string: '${str}'`);\n  }\n  static fromArray(arr) {\n    if (arr.length === 4) {\n      return new _Color(arr[0], arr[1], arr[2], arr[3]);\n    }\n    if (arr.length === 3) {\n      return new _Color(arr[0], arr[1], arr[2]);\n    }\n    throw new Error(\"The given array should contain 3 or 4 color components (numbers).\");\n  }\n  static fromHSB(h, s, b, alpha = 1) {\n    const rgb = _Color.HSBtoRGB(h, s, b);\n    return new _Color(rgb[0], rgb[1], rgb[2], alpha);\n  }\n  static fromHSL(h, s, l, alpha = 1) {\n    const rgb = _Color.HSLtoRGB(h, s, l);\n    return new _Color(rgb[0], rgb[1], rgb[2], alpha);\n  }\n  static fromOKLCH(l, c, h, alpha = 1) {\n    const rgb = _Color.OKLCHtoRGB(l, c, h);\n    return new _Color(rgb[0], rgb[1], rgb[2], alpha);\n  }\n  static padHex(str) {\n    return str.length === 1 ? \"0\" + str : str;\n  }\n  toHexString() {\n    let hex = \"#\" + _Color.padHex(Math.round(this.r * 255).toString(16)) + _Color.padHex(Math.round(this.g * 255).toString(16)) + _Color.padHex(Math.round(this.b * 255).toString(16));\n    if (this.a < 1) {\n      hex += _Color.padHex(Math.round(this.a * 255).toString(16));\n    }\n    return hex;\n  }\n  toRgbaString(fractionDigits = 3) {\n    const components = [Math.round(this.r * 255), Math.round(this.g * 255), Math.round(this.b * 255)];\n    const k = Math.pow(10, fractionDigits);\n    if (this.a !== 1) {\n      components.push(Math.round(this.a * k) / k);\n      return `rgba(${components.join(\", \")})`;\n    }\n    return `rgb(${components.join(\", \")})`;\n  }\n  toString() {\n    if (this.a === 1) {\n      return this.toHexString();\n    }\n    return this.toRgbaString();\n  }\n  toHSB() {\n    return _Color.RGBtoHSB(this.r, this.g, this.b);\n  }\n  static RGBtoOKLCH(r, g, b) {\n    const LSRGB0 = srgbToLinear(r);\n    const LSRGB1 = srgbToLinear(g);\n    const LSRGB2 = srgbToLinear(b);\n    const LMS0 = Math.cbrt(0.4122214708 * LSRGB0 + 0.5363325363 * LSRGB1 + 0.0514459929 * LSRGB2);\n    const LMS1 = Math.cbrt(0.2119034982 * LSRGB0 + 0.6806995451 * LSRGB1 + 0.1073969566 * LSRGB2);\n    const LMS2 = Math.cbrt(0.0883024619 * LSRGB0 + 0.2817188376 * LSRGB1 + 0.6299787005 * LSRGB2);\n    const OKLAB0 = 0.2104542553 * LMS0 + 0.793617785 * LMS1 - 0.0040720468 * LMS2;\n    const OKLAB1 = 1.9779984951 * LMS0 - 2.428592205 * LMS1 + 0.4505937099 * LMS2;\n    const OKLAB2 = 0.0259040371 * LMS0 + 0.7827717662 * LMS1 - 0.808675766 * LMS2;\n    const hue = Math.atan2(OKLAB2, OKLAB1) * 180 / Math.PI;\n    const OKLCH0 = OKLAB0;\n    const OKLCH1 = Math.hypot(OKLAB1, OKLAB2);\n    const OKLCH2 = hue >= 0 ? hue : hue + 360;\n    return [OKLCH0, OKLCH1, OKLCH2];\n  }\n  static OKLCHtoRGB(l, c, h) {\n    const OKLAB0 = l;\n    const OKLAB1 = c * Math.cos(h * Math.PI / 180);\n    const OKLAB2 = c * Math.sin(h * Math.PI / 180);\n    const LMS0 = (OKLAB0 + 0.3963377774 * OKLAB1 + 0.2158037573 * OKLAB2) ** 3;\n    const LMS1 = (OKLAB0 - 0.1055613458 * OKLAB1 - 0.0638541728 * OKLAB2) ** 3;\n    const LMS2 = (OKLAB0 - 0.0894841775 * OKLAB1 - 1.291485548 * OKLAB2) ** 3;\n    const LSRGB0 = 4.0767416621 * LMS0 - 3.3077115913 * LMS1 + 0.2309699292 * LMS2;\n    const LSRGB1 = -1.2684380046 * LMS0 + 2.6097574011 * LMS1 - 0.3413193965 * LMS2;\n    const LSRGB2 = -0.0041960863 * LMS0 - 0.7034186147 * LMS1 + 1.707614701 * LMS2;\n    const SRGB0 = srgbFromLinear(LSRGB0);\n    const SRGB1 = srgbFromLinear(LSRGB1);\n    const SRGB2 = srgbFromLinear(LSRGB2);\n    return [SRGB0, SRGB1, SRGB2];\n  }\n  static RGBtoHSL(r, g, b) {\n    const min = Math.min(r, g, b);\n    const max = Math.max(r, g, b);\n    const l = (max + min) / 2;\n    let h;\n    let s;\n    if (max === min) {\n      h = 0;\n      s = 0;\n    } else {\n      const delta4 = max - min;\n      s = l > 0.5 ? delta4 / (2 - max - min) : delta4 / (max + min);\n      if (max === r) {\n        h = (g - b) / delta4 + (g < b ? 6 : 0);\n      } else if (max === g) {\n        h = (b - r) / delta4 + 2;\n      } else {\n        h = (r - g) / delta4 + 4;\n      }\n      h *= 360 / 6;\n    }\n    return [h, s, l];\n  }\n  static HSLtoRGB(h, s, l) {\n    h = (h % 360 + 360) % 360;\n    if (s === 0) {\n      return [l, l, l];\n    }\n    const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n    const p = 2 * l - q;\n    function hueToRgb(t) {\n      if (t < 0)\n        t += 1;\n      if (t > 1)\n        t -= 1;\n      if (t < 1 / 6)\n        return p + (q - p) * 6 * t;\n      if (t < 1 / 2)\n        return q;\n      if (t < 2 / 3)\n        return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n    const r = hueToRgb(h / 360 + 1 / 3);\n    const g = hueToRgb(h / 360);\n    const b = hueToRgb(h / 360 - 1 / 3);\n    return [r, g, b];\n  }\n  /**\n   * Converts the given RGB triple to an array of HSB (HSV) components.\n   */\n  static RGBtoHSB(r, g, b) {\n    const min = Math.min(r, g, b);\n    const max = Math.max(r, g, b);\n    const S = max === 0 ? 0 : (max - min) / max;\n    let H = 0;\n    if (min !== max) {\n      const delta4 = max - min;\n      const rc = (max - r) / delta4;\n      const gc = (max - g) / delta4;\n      const bc = (max - b) / delta4;\n      if (r === max) {\n        H = bc - gc;\n      } else if (g === max) {\n        H = 2 + rc - bc;\n      } else {\n        H = 4 + gc - rc;\n      }\n      H /= 6;\n      if (H < 0) {\n        H = H + 1;\n      }\n    }\n    return [H * 360, S, max];\n  }\n  /**\n   * Converts the given HSB (HSV) triple to an array of RGB components.\n   */\n  static HSBtoRGB(H, S, B) {\n    H = (H % 360 + 360) % 360 / 360;\n    let r = 0;\n    let g = 0;\n    let b = 0;\n    if (S === 0) {\n      r = g = b = B;\n    } else {\n      const h = (H - Math.floor(H)) * 6;\n      const f = h - Math.floor(h);\n      const p = B * (1 - S);\n      const q = B * (1 - S * f);\n      const t = B * (1 - S * (1 - f));\n      switch (h >> 0) {\n        case 0:\n          r = B;\n          g = t;\n          b = p;\n          break;\n        case 1:\n          r = q;\n          g = B;\n          b = p;\n          break;\n        case 2:\n          r = p;\n          g = B;\n          b = t;\n          break;\n        case 3:\n          r = p;\n          g = q;\n          b = B;\n          break;\n        case 4:\n          r = t;\n          g = p;\n          b = B;\n          break;\n        case 5:\n          r = B;\n          g = p;\n          b = q;\n          break;\n      }\n    }\n    return [r, g, b];\n  }\n  static mix(c0, c1, t) {\n    return new _Color(lerp(c0.r, c1.r, t), lerp(c0.g, c1.g, t), lerp(c0.b, c1.b, t), lerp(c0.a, c1.a, t));\n  }\n};\n/**\n * CSS Color Module Level 4:\n * https://drafts.csswg.org/css-color/#named-colors\n */\n_Color.nameToHex = {\n  // @ts-expect-error\n  __proto__: null,\n  aliceblue: \"#F0F8FF\",\n  antiquewhite: \"#FAEBD7\",\n  aqua: \"#00FFFF\",\n  aquamarine: \"#7FFFD4\",\n  azure: \"#F0FFFF\",\n  beige: \"#F5F5DC\",\n  bisque: \"#FFE4C4\",\n  black: \"#000000\",\n  blanchedalmond: \"#FFEBCD\",\n  blue: \"#0000FF\",\n  blueviolet: \"#8A2BE2\",\n  brown: \"#A52A2A\",\n  burlywood: \"#DEB887\",\n  cadetblue: \"#5F9EA0\",\n  chartreuse: \"#7FFF00\",\n  chocolate: \"#D2691E\",\n  coral: \"#FF7F50\",\n  cornflowerblue: \"#6495ED\",\n  cornsilk: \"#FFF8DC\",\n  crimson: \"#DC143C\",\n  cyan: \"#00FFFF\",\n  darkblue: \"#00008B\",\n  darkcyan: \"#008B8B\",\n  darkgoldenrod: \"#B8860B\",\n  darkgray: \"#A9A9A9\",\n  darkgreen: \"#006400\",\n  darkgrey: \"#A9A9A9\",\n  darkkhaki: \"#BDB76B\",\n  darkmagenta: \"#8B008B\",\n  darkolivegreen: \"#556B2F\",\n  darkorange: \"#FF8C00\",\n  darkorchid: \"#9932CC\",\n  darkred: \"#8B0000\",\n  darksalmon: \"#E9967A\",\n  darkseagreen: \"#8FBC8F\",\n  darkslateblue: \"#483D8B\",\n  darkslategray: \"#2F4F4F\",\n  darkslategrey: \"#2F4F4F\",\n  darkturquoise: \"#00CED1\",\n  darkviolet: \"#9400D3\",\n  deeppink: \"#FF1493\",\n  deepskyblue: \"#00BFFF\",\n  dimgray: \"#696969\",\n  dimgrey: \"#696969\",\n  dodgerblue: \"#1E90FF\",\n  firebrick: \"#B22222\",\n  floralwhite: \"#FFFAF0\",\n  forestgreen: \"#228B22\",\n  fuchsia: \"#FF00FF\",\n  gainsboro: \"#DCDCDC\",\n  ghostwhite: \"#F8F8FF\",\n  gold: \"#FFD700\",\n  goldenrod: \"#DAA520\",\n  gray: \"#808080\",\n  green: \"#008000\",\n  greenyellow: \"#ADFF2F\",\n  grey: \"#808080\",\n  honeydew: \"#F0FFF0\",\n  hotpink: \"#FF69B4\",\n  indianred: \"#CD5C5C\",\n  indigo: \"#4B0082\",\n  ivory: \"#FFFFF0\",\n  khaki: \"#F0E68C\",\n  lavender: \"#E6E6FA\",\n  lavenderblush: \"#FFF0F5\",\n  lawngreen: \"#7CFC00\",\n  lemonchiffon: \"#FFFACD\",\n  lightblue: \"#ADD8E6\",\n  lightcoral: \"#F08080\",\n  lightcyan: \"#E0FFFF\",\n  lightgoldenrodyellow: \"#FAFAD2\",\n  lightgray: \"#D3D3D3\",\n  lightgreen: \"#90EE90\",\n  lightgrey: \"#D3D3D3\",\n  lightpink: \"#FFB6C1\",\n  lightsalmon: \"#FFA07A\",\n  lightseagreen: \"#20B2AA\",\n  lightskyblue: \"#87CEFA\",\n  lightslategray: \"#778899\",\n  lightslategrey: \"#778899\",\n  lightsteelblue: \"#B0C4DE\",\n  lightyellow: \"#FFFFE0\",\n  lime: \"#00FF00\",\n  limegreen: \"#32CD32\",\n  linen: \"#FAF0E6\",\n  magenta: \"#FF00FF\",\n  maroon: \"#800000\",\n  mediumaquamarine: \"#66CDAA\",\n  mediumblue: \"#0000CD\",\n  mediumorchid: \"#BA55D3\",\n  mediumpurple: \"#9370DB\",\n  mediumseagreen: \"#3CB371\",\n  mediumslateblue: \"#7B68EE\",\n  mediumspringgreen: \"#00FA9A\",\n  mediumturquoise: \"#48D1CC\",\n  mediumvioletred: \"#C71585\",\n  midnightblue: \"#191970\",\n  mintcream: \"#F5FFFA\",\n  mistyrose: \"#FFE4E1\",\n  moccasin: \"#FFE4B5\",\n  navajowhite: \"#FFDEAD\",\n  navy: \"#000080\",\n  oldlace: \"#FDF5E6\",\n  olive: \"#808000\",\n  olivedrab: \"#6B8E23\",\n  orange: \"#FFA500\",\n  orangered: \"#FF4500\",\n  orchid: \"#DA70D6\",\n  palegoldenrod: \"#EEE8AA\",\n  palegreen: \"#98FB98\",\n  paleturquoise: \"#AFEEEE\",\n  palevioletred: \"#DB7093\",\n  papayawhip: \"#FFEFD5\",\n  peachpuff: \"#FFDAB9\",\n  peru: \"#CD853F\",\n  pink: \"#FFC0CB\",\n  plum: \"#DDA0DD\",\n  powderblue: \"#B0E0E6\",\n  purple: \"#800080\",\n  rebeccapurple: \"#663399\",\n  red: \"#FF0000\",\n  rosybrown: \"#BC8F8F\",\n  royalblue: \"#4169E1\",\n  saddlebrown: \"#8B4513\",\n  salmon: \"#FA8072\",\n  sandybrown: \"#F4A460\",\n  seagreen: \"#2E8B57\",\n  seashell: \"#FFF5EE\",\n  sienna: \"#A0522D\",\n  silver: \"#C0C0C0\",\n  skyblue: \"#87CEEB\",\n  slateblue: \"#6A5ACD\",\n  slategray: \"#708090\",\n  slategrey: \"#708090\",\n  snow: \"#FFFAFA\",\n  springgreen: \"#00FF7F\",\n  steelblue: \"#4682B4\",\n  tan: \"#D2B48C\",\n  teal: \"#008080\",\n  thistle: \"#D8BFD8\",\n  tomato: \"#FF6347\",\n  transparent: \"#00000000\",\n  turquoise: \"#40E0D0\",\n  violet: \"#EE82EE\",\n  wheat: \"#F5DEB3\",\n  white: \"#FFFFFF\",\n  whitesmoke: \"#F5F5F5\",\n  yellow: \"#FFFF00\",\n  yellowgreen: \"#9ACD32\"\n};\nvar Color = _Color;\n\n// packages/ag-charts-community/src/util/interpolate.ts\nfunction interpolateNumber(a, b) {\n  return (d) => Number(a) * (1 - d) + Number(b) * d;\n}\nfunction interpolateColor(a, b) {\n  if (typeof a === \"string\") {\n    try {\n      a = Color.fromString(a);\n    } catch (e) {\n      a = Color.fromArray([0, 0, 0]);\n    }\n  }\n  if (typeof b === \"string\") {\n    try {\n      b = Color.fromString(b);\n    } catch (e) {\n      b = Color.fromArray([0, 0, 0]);\n    }\n  }\n  return (d) => Color.mix(a, b, d).toRgbaString();\n}\n\n// packages/ag-charts-community/src/util/decorator.ts\nvar BREAK_TRANSFORM_CHAIN = Symbol(\"BREAK\");\nvar CONFIG_KEY = \"__decorator_config\";\nfunction initialiseConfig(target, propertyKeyOrSymbol) {\n  if (Object.getOwnPropertyDescriptor(target, CONFIG_KEY) == null) {\n    Object.defineProperty(target, CONFIG_KEY, { value: {} });\n  }\n  const config = target[CONFIG_KEY];\n  const propertyKey = propertyKeyOrSymbol.toString();\n  if (typeof config[propertyKey] !== \"undefined\") {\n    return config[propertyKey];\n  }\n  const valuesMap = /* @__PURE__ */ new WeakMap();\n  config[propertyKey] = { setters: [], getters: [], observers: [], valuesMap };\n  const descriptor = Object.getOwnPropertyDescriptor(target, propertyKeyOrSymbol);\n  const prevSet = descriptor?.set;\n  const prevGet = descriptor?.get;\n  const getter = function() {\n    let value = prevGet ? prevGet.call(this) : valuesMap.get(this);\n    for (const transformFn of config[propertyKey].getters) {\n      value = transformFn(this, propertyKeyOrSymbol, value);\n      if (value === BREAK_TRANSFORM_CHAIN) {\n        return;\n      }\n    }\n    return value;\n  };\n  const setter = function(value) {\n    const { setters, observers } = config[propertyKey];\n    let oldValue;\n    if (setters.some((f) => f.length > 2)) {\n      oldValue = prevGet ? prevGet.call(this) : valuesMap.get(this);\n    }\n    for (const transformFn of setters) {\n      value = transformFn(this, propertyKeyOrSymbol, value, oldValue);\n      if (value === BREAK_TRANSFORM_CHAIN) {\n        return;\n      }\n    }\n    if (prevSet) {\n      prevSet.call(this, value);\n    } else {\n      valuesMap.set(this, value);\n    }\n    for (const observerFn of observers) {\n      observerFn(this, value, oldValue);\n    }\n  };\n  Object.defineProperty(target, propertyKeyOrSymbol, {\n    set: setter,\n    get: getter,\n    enumerable: true,\n    configurable: false\n  });\n  return config[propertyKey];\n}\nfunction addTransformToInstanceProperty(setTransform, getTransform, configMetadata) {\n  return (target, propertyKeyOrSymbol) => {\n    const config = initialiseConfig(target, propertyKeyOrSymbol);\n    config.setters.push(setTransform);\n    if (getTransform) {\n      config.getters.unshift(getTransform);\n    }\n    if (configMetadata) {\n      Object.assign(config, configMetadata);\n    }\n  };\n}\nfunction addObserverToInstanceProperty(setObserver) {\n  return (target, propertyKeyOrSymbol) => {\n    initialiseConfig(target, propertyKeyOrSymbol).observers.push(setObserver);\n  };\n}\nfunction isDecoratedObject(target) {\n  return typeof target !== \"undefined\" && CONFIG_KEY in target;\n}\nfunction listDecoratedProperties(target) {\n  const targets = /* @__PURE__ */ new Set();\n  while (isDecoratedObject(target)) {\n    targets.add(target?.[CONFIG_KEY]);\n    target = Object.getPrototypeOf(target);\n  }\n  return Array.from(targets).flatMap((configMap) => Object.keys(configMap));\n}\nfunction extractDecoratedProperties(target) {\n  return listDecoratedProperties(target).reduce((result, key) => {\n    result[key] = target[key] ?? null;\n    return result;\n  }, {});\n}\nfunction extractDecoratedPropertyMetadata(target, propertyKeyOrSymbol) {\n  const propertyKey = propertyKeyOrSymbol.toString();\n  while (isDecoratedObject(target)) {\n    const config = target[CONFIG_KEY];\n    if (Object.hasOwn(config, propertyKey)) {\n      return config[propertyKey];\n    }\n    target = Object.getPrototypeOf(target);\n  }\n}\n\n// packages/ag-charts-community/src/util/type-guards.ts\nfunction isDefined(val) {\n  return val != null;\n}\nfunction isArray(value) {\n  return Array.isArray(value);\n}\nfunction isBoolean(value) {\n  return typeof value === \"boolean\";\n}\nfunction isDate(value) {\n  return value instanceof Date;\n}\nfunction isValidDate(value) {\n  return isDate(value) && !isNaN(Number(value));\n}\nfunction isRegExp(value) {\n  return value instanceof RegExp;\n}\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction isObject(value) {\n  return typeof value === \"object\" && value !== null && !isArray(value);\n}\nfunction isObjectLike(value) {\n  return isArray(value) || isPlainObject(value);\n}\nfunction isPlainObject(value) {\n  return typeof value === \"object\" && value !== null && Object.getPrototypeOf(value) === Object.prototype;\n}\nfunction isString(value) {\n  return typeof value === \"string\";\n}\nfunction isNumber(value) {\n  return typeof value === \"number\";\n}\nfunction isFiniteNumber(value) {\n  return Number.isFinite(value);\n}\nfunction isHtmlElement(value) {\n  return typeof window !== \"undefined\" && value instanceof HTMLElement;\n}\nfunction isEnumKey(enumObject, enumKey) {\n  return isString(enumKey) && Object.keys(enumObject).includes(enumKey);\n}\nfunction isEnumValue(enumObject, enumValue) {\n  return Object.values(enumObject).includes(enumValue);\n}\nfunction isSymbol(value) {\n  return typeof value === \"symbol\";\n}\nfunction excludesType(obj, excluded) {\n  return obj.type !== excluded;\n}\n\n// packages/ag-charts-community/src/util/object.ts\nfunction objectEqualWith(a, b, cmp) {\n  for (const key in b) {\n    if (!(key in a))\n      return false;\n  }\n  for (const key in a) {\n    if (!(key in b))\n      return false;\n    if (!cmp(a[key], b[key]))\n      return false;\n  }\n  return true;\n}\nfunction deepMerge(...sources) {\n  return mergeDefaults(...sources.reverse());\n}\nfunction mergeDefaults(...sources) {\n  const target = {};\n  for (const source of sources) {\n    if (!isObject(source))\n      continue;\n    const keys = isDecoratedObject(source) ? listDecoratedProperties(source) : Object.keys(source);\n    for (const key of keys) {\n      if (isPlainObject(target[key]) && isPlainObject(source[key])) {\n        target[key] = mergeDefaults(target[key], source[key]);\n      } else {\n        target[key] ?? (target[key] = source[key]);\n      }\n    }\n  }\n  return target;\n}\nfunction mergeArrayDefaults(dataArray, ...itemDefaults) {\n  if (itemDefaults && isArray(dataArray)) {\n    return dataArray.map((item) => mergeDefaults(item, ...itemDefaults));\n  }\n  return dataArray;\n}\nfunction mapValues(object2, mapper) {\n  return Object.entries(object2).reduce(\n    (result, [key, value]) => {\n      result[key] = mapper(value, key, object2);\n      return result;\n    },\n    {}\n  );\n}\nfunction without(object2, keys) {\n  const clone2 = { ...object2 };\n  for (const key of keys) {\n    delete clone2[key];\n  }\n  return clone2;\n}\nfunction getPath(object2, path) {\n  const pathArray = isArray(path) ? path : path.split(\".\");\n  return pathArray.reduce((value, pathKey) => value[pathKey], object2);\n}\nvar SKIP_JS_BUILTINS = /* @__PURE__ */ new Set([\"__proto__\", \"constructor\", \"prototype\"]);\nfunction setPath(object2, path, newValue) {\n  const pathArray = isArray(path) ? path.slice() : path.split(\".\");\n  const lastKey = pathArray.pop();\n  if (pathArray.some((p) => SKIP_JS_BUILTINS.has(p)))\n    return;\n  const lastObject = pathArray.reduce((value, pathKey) => value[pathKey], object2);\n  lastObject[lastKey] = newValue;\n  return lastObject[lastKey];\n}\nfunction partialAssign(keysToCopy, target, source) {\n  if (source === void 0) {\n    return target;\n  }\n  for (const key of keysToCopy) {\n    const value = source[key];\n    if (value !== void 0) {\n      target[key] = value;\n    }\n  }\n  return target;\n}\n\n// packages/ag-charts-community/src/motion/easing.ts\nvar easing_exports = {};\n__export(easing_exports, {\n  easeIn: () => easeIn,\n  easeInOut: () => easeInOut,\n  easeInOutQuad: () => easeInOutQuad,\n  easeInQuad: () => easeInQuad,\n  easeOut: () => easeOut,\n  easeOutQuad: () => easeOutQuad,\n  inverseEaseOut: () => inverseEaseOut,\n  linear: () => linear\n});\nvar linear = (n) => n;\nvar easeIn = (n) => 1 - Math.cos(n * Math.PI / 2);\nvar easeOut = (n) => Math.sin(n * Math.PI / 2);\nvar easeInOut = (n) => -(Math.cos(n * Math.PI) - 1) / 2;\nvar easeInQuad = (n) => n * n;\nvar easeOutQuad = (n) => 1 - (1 - n) ** 2;\nvar easeInOutQuad = (n) => n < 0.5 ? 2 * n * n : 1 - (-2 * n + 2) ** 2 / 2;\nvar inverseEaseOut = (x) => 2 * Math.asin(x) / Math.PI;\n\n// packages/ag-charts-community/src/motion/animation.ts\nvar QUICK_TRANSITION = 0.2;\nvar PHASE_ORDER = [\"initial\", \"remove\", \"update\", \"add\", \"trailing\", \"end\", \"none\"];\nvar PHASE_METADATA = {\n  initial: {\n    animationDuration: 1,\n    animationDelay: 0\n  },\n  add: {\n    animationDuration: 0.25,\n    animationDelay: 0.75\n  },\n  remove: {\n    animationDuration: 0.25,\n    animationDelay: 0\n  },\n  update: {\n    animationDuration: 0.5,\n    animationDelay: 0.25\n  },\n  trailing: {\n    animationDuration: QUICK_TRANSITION,\n    animationDelay: 1,\n    skipIfNoEarlierAnimations: true\n  },\n  end: {\n    animationDelay: 1 + QUICK_TRANSITION,\n    animationDuration: 0,\n    skipIfNoEarlierAnimations: true\n  },\n  none: {\n    animationDuration: 0,\n    animationDelay: 0\n  }\n};\nvar RepeatType = /* @__PURE__ */ ((RepeatType2) => {\n  RepeatType2[\"Loop\"] = \"loop\";\n  RepeatType2[\"Reverse\"] = \"reverse\";\n  return RepeatType2;\n})(RepeatType || {});\nfunction isNodeArray(array2) {\n  return array2.every((n) => n instanceof Node);\n}\nfunction deconstructSelectionsOrNodes(selectionsOrNodes) {\n  return isNodeArray(selectionsOrNodes) ? { nodes: selectionsOrNodes, selections: [] } : { nodes: [], selections: selectionsOrNodes };\n}\nfunction animationValuesEqual(a, b) {\n  if (a === b) {\n    return true;\n  } else if (Array.isArray(a) && Array.isArray(b)) {\n    return a.length === b.length && a.every((v, i) => animationValuesEqual(v, b[i]));\n  } else if (isInterpolating(a) && isInterpolating(b)) {\n    return a.equals(b);\n  } else if (isPlainObject(a) && isPlainObject(b)) {\n    return objectEqualWith(a, b, animationValuesEqual);\n  }\n  return false;\n}\nvar Animation = class {\n  constructor(opts) {\n    this.isComplete = false;\n    this.elapsed = 0;\n    this.iteration = 0;\n    this.isPlaying = false;\n    this.isReverse = false;\n    this.id = opts.id;\n    this.groupId = opts.groupId;\n    this.autoplay = opts.autoplay ?? true;\n    this.ease = opts.ease ?? linear;\n    this.phase = opts.phase;\n    const durationProportion = opts.duration ?? PHASE_METADATA[this.phase].animationDuration;\n    this.duration = durationProportion * opts.defaultDuration;\n    this.delay = (opts.delay ?? 0) * opts.defaultDuration;\n    this.onComplete = opts.onComplete;\n    this.onPlay = opts.onPlay;\n    this.onStop = opts.onStop;\n    this.onUpdate = opts.onUpdate;\n    this.interpolate = this.createInterpolator(opts.from, opts.to);\n    this.from = opts.from;\n    if (opts.skip === true) {\n      this.onUpdate?.(opts.to, false, this);\n      this.onStop?.(this);\n      this.onComplete?.(this);\n      this.isComplete = true;\n    }\n    if (opts.collapsable !== false) {\n      this.duration = this.checkCollapse(opts, this.duration);\n    }\n  }\n  checkCollapse(opts, calculatedDuration) {\n    return animationValuesEqual(opts.from, opts.to) ? 0 : calculatedDuration;\n  }\n  play(initialUpdate = false) {\n    if (this.isPlaying || this.isComplete)\n      return;\n    this.isPlaying = true;\n    this.onPlay?.(this);\n    if (!this.autoplay)\n      return;\n    this.autoplay = false;\n    if (!initialUpdate)\n      return;\n    this.onUpdate?.(this.from, true, this);\n  }\n  pause() {\n    this.isPlaying = false;\n  }\n  stop() {\n    this.isPlaying = false;\n    if (!this.isComplete) {\n      this.isComplete = true;\n      this.onStop?.(this);\n    }\n  }\n  update(time2) {\n    if (this.isComplete)\n      return time2;\n    if (!this.isPlaying && this.autoplay) {\n      this.play(true);\n    }\n    const previousElapsed = this.elapsed;\n    this.elapsed += time2;\n    if (this.delay > this.elapsed)\n      return 0;\n    const value = this.interpolate(this.isReverse ? 1 - this.delta : this.delta);\n    this.onUpdate?.(value, false, this);\n    const totalDuration = this.delay + this.duration;\n    if (this.elapsed >= totalDuration) {\n      this.stop();\n      this.isComplete = true;\n      this.onComplete?.(this);\n      return time2 - (totalDuration - previousElapsed);\n    }\n    return 0;\n  }\n  get delta() {\n    return this.ease(clamp(0, (this.elapsed - this.delay) / this.duration, 1));\n  }\n  createInterpolator(from3, to) {\n    if (typeof to !== \"object\" || isInterpolating(to)) {\n      return this.interpolateValue(from3, to);\n    }\n    const interpolatorEntries = [];\n    for (const key in to) {\n      const interpolator = this.interpolateValue(from3[key], to[key]);\n      if (interpolator != null) {\n        interpolatorEntries.push([key, interpolator]);\n      }\n    }\n    return (d) => {\n      const result = {};\n      for (const [key, interpolator] of interpolatorEntries) {\n        result[key] = interpolator(d);\n      }\n      return result;\n    };\n  }\n  interpolateValue(a, b) {\n    if (a == null || b == null) {\n      return;\n    } else if (isInterpolating(a)) {\n      return (d) => a[interpolate](b, d);\n    }\n    try {\n      switch (typeof a) {\n        case \"number\":\n          return interpolateNumber(a, b);\n        case \"string\":\n          return interpolateColor(a, b);\n        case \"boolean\":\n          if (a === b) {\n            return () => a;\n          }\n          break;\n      }\n    } catch (e) {\n    }\n    throw new Error(`Unable to interpolate values: ${a}, ${b}`);\n  }\n};\n\n// packages/ag-charts-community/src/motion/fromToMotion.ts\nvar NODE_UPDATE_STATE_TO_PHASE_MAPPING = {\n  added: \"add\",\n  updated: \"update\",\n  removed: \"remove\",\n  unknown: \"initial\",\n  \"no-op\": \"none\"\n};\nfunction fromToMotion(groupId, subId, animationManager, selectionsOrNodes, fns, getDatumId, diff2) {\n  const { fromFn, toFn, applyFn = (node, props) => node.setProperties(props) } = fns;\n  const { nodes, selections } = deconstructSelectionsOrNodes(selectionsOrNodes);\n  const processNodes = (liveNodes, subNodes) => {\n    let prevFromProps;\n    let liveNodeIndex = 0;\n    let nodeIndex = 0;\n    for (const node of subNodes) {\n      const isLive = liveNodes[liveNodeIndex] === node;\n      const ctx = {\n        last: nodeIndex >= subNodes.length - 1,\n        lastLive: liveNodeIndex >= liveNodes.length - 1,\n        prev: subNodes[nodeIndex - 1],\n        prevFromProps,\n        prevLive: liveNodes[liveNodeIndex - 1],\n        next: subNodes[nodeIndex + 1],\n        nextLive: liveNodes[liveNodeIndex + (isLive ? 1 : 0)]\n      };\n      const animationId = `${groupId}_${subId}_${node.id}`;\n      animationManager.stopByAnimationId(animationId);\n      let status = \"unknown\";\n      if (!isLive) {\n        status = \"removed\";\n      } else if (getDatumId && diff2) {\n        status = calculateStatus(node, node.datum, getDatumId, diff2);\n      }\n      node.transitionOut = status === \"removed\";\n      const { phase, start: start2, finish, delay, duration, ...from3 } = fromFn(node, node.datum, status, ctx);\n      const {\n        phase: toPhase,\n        start: toStart,\n        finish: toFinish,\n        delay: toDelay,\n        duration: toDuration,\n        ...to\n      } = toFn(node, node.datum, status, ctx);\n      const collapsable = finish == null;\n      animationManager.animate({\n        id: animationId,\n        groupId,\n        phase: phase ?? toPhase ?? \"update\",\n        duration: duration ?? toDuration,\n        delay: delay ?? toDelay,\n        from: from3,\n        to,\n        ease: easeOut,\n        collapsable,\n        onPlay: () => {\n          applyFn(node, { ...start2, ...toStart, ...from3 });\n        },\n        onUpdate(props) {\n          applyFn(node, props);\n        },\n        onStop: () => {\n          applyFn(node, {\n            ...start2,\n            ...toStart,\n            ...from3,\n            ...to,\n            ...finish,\n            ...toFinish\n          });\n        }\n      });\n      if (isLive) {\n        liveNodeIndex++;\n      }\n      nodeIndex++;\n      prevFromProps = from3;\n    }\n  };\n  let selectionIndex = 0;\n  for (const selection of selections) {\n    const selectionNodes = selection.nodes();\n    const liveNodes = selectionNodes.filter((n) => !selection.isGarbage(n));\n    processNodes(liveNodes, selectionNodes);\n    animationManager.animate({\n      id: `${groupId}_${subId}_selection_${selectionIndex}`,\n      groupId,\n      phase: \"end\",\n      from: 0,\n      to: 1,\n      ease: easeOut,\n      onStop() {\n        selection.cleanup();\n      }\n    });\n    selectionIndex++;\n  }\n  processNodes(nodes, nodes);\n}\nfunction staticFromToMotion(groupId, subId, animationManager, selectionsOrNodes, from3, to, extraOpts) {\n  const { nodes, selections } = deconstructSelectionsOrNodes(selectionsOrNodes);\n  const { start: start2, finish, phase } = extraOpts;\n  animationManager.animate({\n    id: `${groupId}_${subId}`,\n    groupId,\n    phase: phase ?? \"update\",\n    from: from3,\n    to,\n    ease: easeOut,\n    onPlay: () => {\n      if (!start2)\n        return;\n      for (const node of nodes) {\n        node.setProperties(start2);\n      }\n      for (const selection of selections) {\n        for (const node of selection.nodes()) {\n          node.setProperties(start2);\n        }\n      }\n    },\n    onUpdate(props) {\n      for (const node of nodes) {\n        node.setProperties(props);\n      }\n      for (const selection of selections) {\n        for (const node of selection.nodes()) {\n          node.setProperties(props);\n        }\n      }\n    },\n    onStop: () => {\n      for (const node of nodes) {\n        node.setProperties({ ...to, ...finish });\n      }\n      for (const selection of selections) {\n        for (const node of selection.nodes()) {\n          node.setProperties({ ...to, ...finish });\n        }\n        selection.cleanup();\n      }\n    }\n  });\n}\nfunction calculateStatus(node, datum, getDatumId, diff2) {\n  const id = getDatumId(node, datum);\n  if (diff2.added.has(id)) {\n    return \"added\";\n  }\n  if (diff2.removed.has(id)) {\n    return \"removed\";\n  }\n  return \"updated\";\n}\n\n// packages/ag-charts-community/src/scale/invalidating.ts\nvar Invalidating = (target, propertyKey) => {\n  const mappedProperty = Symbol(String(propertyKey));\n  target[mappedProperty] = void 0;\n  Object.defineProperty(target, propertyKey, {\n    get() {\n      return this[mappedProperty];\n    },\n    set(newValue) {\n      const oldValue = this[mappedProperty];\n      if (oldValue !== newValue) {\n        this[mappedProperty] = newValue;\n        this.invalid = true;\n      }\n    },\n    enumerable: true,\n    configurable: false\n  });\n};\n\n// packages/ag-charts-community/src/scale/continuousScale.ts\nvar _ContinuousScale = class _ContinuousScale {\n  constructor(domain, range3) {\n    this.invalid = true;\n    this.nice = false;\n    this.interval = void 0;\n    this.tickCount = _ContinuousScale.defaultTickCount;\n    this.minTickCount = 0;\n    this.maxTickCount = Infinity;\n    // TODO(olegat) should be of type D[]\n    this.niceDomain = [];\n    this.defaultClampMode = \"raw\";\n    this.domain = domain;\n    this.range = range3;\n  }\n  static is(value) {\n    return value instanceof _ContinuousScale;\n  }\n  transform(x) {\n    return x;\n  }\n  transformInvert(x) {\n    return x;\n  }\n  calcBandwidth(smallestInterval = 1) {\n    const domain = this.getDomain();\n    const rangeDistance = this.getPixelRange();\n    const intervals = Math.abs(domain[1] - domain[0]) / smallestInterval + 1;\n    const maxBands = Math.floor(rangeDistance);\n    const bands = Math.min(intervals, maxBands);\n    return rangeDistance / Math.max(1, bands);\n  }\n  getDomain() {\n    if (this.nice) {\n      this.refresh();\n      if (this.niceDomain.length) {\n        return this.niceDomain;\n      }\n    }\n    return this.domain;\n  }\n  convert(x, opts) {\n    const clampMode = opts?.clampMode ?? this.defaultClampMode;\n    if (!this.domain || this.domain.length < 2) {\n      return NaN;\n    }\n    this.refresh();\n    const domain = this.getDomain().map((d) => this.transform(d));\n    const [d0, d1] = domain;\n    const { range: range3 } = this;\n    const [r0, r1] = range3;\n    x = this.transform(x);\n    if (clampMode === \"clamped\") {\n      const [start2, stop] = findMinMax(domain.map(Number));\n      if (Number(x) < start2) {\n        return r0;\n      } else if (Number(x) > stop) {\n        return r1;\n      }\n    }\n    if (d0 === d1) {\n      return (r0 + r1) / 2;\n    } else if (x === d0) {\n      return r0;\n    } else if (x === d1) {\n      return r1;\n    }\n    return r0 + (Number(x) - Number(d0)) / (Number(d1) - Number(d0)) * (r1 - r0);\n  }\n  invert(x) {\n    this.refresh();\n    const domain = this.getDomain().map((d2) => this.transform(d2));\n    const [d0, d1] = domain;\n    const { range: range3 } = this;\n    const [r0, r1] = range3;\n    const isReversed = r0 > r1;\n    const rMin = isReversed ? r1 : r0;\n    const rMax = isReversed ? r0 : r1;\n    let d;\n    if (x < rMin) {\n      return isReversed ? d1 : d0;\n    } else if (x > rMax) {\n      return isReversed ? d0 : d1;\n    } else if (r0 === r1) {\n      d = this.toDomain((Number(d0) + Number(d1)) / 2);\n    } else {\n      d = this.toDomain(Number(d0) + (x - r0) / (r1 - r0) * (Number(d1) - Number(d0)));\n    }\n    return this.transformInvert(d);\n  }\n  refresh() {\n    if (!this.invalid)\n      return;\n    this.invalid = false;\n    this.update();\n    if (this.invalid) {\n      Logger.warnOnce(\"Expected update to not invalidate scale\");\n    }\n  }\n  getPixelRange() {\n    const [a, b] = this.range;\n    return Math.abs(b - a);\n  }\n};\n_ContinuousScale.defaultTickCount = 5;\n_ContinuousScale.defaultMaxTickCount = 6;\n__decorateClass([\n  Invalidating\n], _ContinuousScale.prototype, \"domain\", 2);\n__decorateClass([\n  Invalidating\n], _ContinuousScale.prototype, \"range\", 2);\n__decorateClass([\n  Invalidating\n], _ContinuousScale.prototype, \"nice\", 2);\n__decorateClass([\n  Invalidating\n], _ContinuousScale.prototype, \"interval\", 2);\n__decorateClass([\n  Invalidating\n], _ContinuousScale.prototype, \"tickCount\", 2);\n__decorateClass([\n  Invalidating\n], _ContinuousScale.prototype, \"minTickCount\", 2);\n__decorateClass([\n  Invalidating\n], _ContinuousScale.prototype, \"maxTickCount\", 2);\nvar ContinuousScale = _ContinuousScale;\n\n// packages/ag-charts-community/src/util/array.ts\nfunction extent(values) {\n  if (values.length === 0) {\n    return null;\n  }\n  let min = Infinity;\n  let max = -Infinity;\n  for (let n of values) {\n    if (n instanceof Date) {\n      n = n.getTime();\n    }\n    if (typeof n !== \"number\") {\n      continue;\n    }\n    if (n < min) {\n      min = n;\n    }\n    if (n > max) {\n      max = n;\n    }\n  }\n  const result = [min, max];\n  return result.every(isFinite) ? result : null;\n}\nfunction normalisedExtentWithMetadata(d, min, max) {\n  let clipped = false;\n  if (d.length > 2) {\n    d = extent(d) ?? [NaN, NaN];\n  }\n  if (!isNaN(min)) {\n    clipped || (clipped = min > d[0]);\n    d = [min, d[1]];\n  }\n  if (!isNaN(max)) {\n    clipped || (clipped = max < d[1]);\n    d = [d[0], max];\n  }\n  if (d[0] > d[1]) {\n    d = [];\n  }\n  return { extent: d, clipped };\n}\nfunction arraysEqual(a, b) {\n  if (a == null || b == null || a.length !== b.length) {\n    return false;\n  }\n  for (let i = 0; i < a.length; i++) {\n    if (Array.isArray(a[i]) && Array.isArray(b[i])) {\n      if (!arraysEqual(a[i], b[i])) {\n        return false;\n      }\n    } else if (a[i] !== b[i]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction toArray(value) {\n  if (typeof value === \"undefined\") {\n    return [];\n  }\n  return Array.isArray(value) ? value : [value];\n}\nfunction unique(array2) {\n  return Array.from(new Set(array2));\n}\nfunction groupBy(array2, iteratee) {\n  return array2.reduce((result, item) => {\n    const groupKey = iteratee(item);\n    result[groupKey] ?? (result[groupKey] = []);\n    result[groupKey].push(item);\n    return result;\n  }, {});\n}\nfunction circularSliceArray(data, size, offset4 = 0) {\n  if (data.length === 0) {\n    return [];\n  }\n  const result = [];\n  for (let i = 0; i < size; i++) {\n    result.push(data.at((i + offset4) % data.length));\n  }\n  return result;\n}\nfunction sortBasedOnArray(baseArray, orderArray) {\n  const orderMap = /* @__PURE__ */ new Map();\n  orderArray.forEach((item, index) => {\n    orderMap.set(item, index);\n  });\n  return baseArray.sort((a, b) => {\n    const indexA = orderMap.get(a) ?? Infinity;\n    const indexB = orderMap.get(b) ?? Infinity;\n    return indexA - indexB;\n  });\n}\n\n// packages/ag-charts-community/src/util/timeFormat.ts\nvar CONSTANTS = {\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\"\n  ],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n};\nfunction dayOfYear(date, startOfYear = new Date(date.getFullYear(), 0, 1)) {\n  const startOffset = date.getTimezoneOffset() - startOfYear.getTimezoneOffset();\n  const timeDiff = date.getTime() - startOfYear.getTime() + startOffset * 6e4;\n  const timeOneDay = 36e5 * 24;\n  return Math.floor(timeDiff / timeOneDay);\n}\nfunction weekOfYear(date, startDay) {\n  const startOfYear = new Date(date.getFullYear(), 0, 1);\n  const startOfYearDay = startOfYear.getDay();\n  const firstWeekStartOffset = (startDay - startOfYearDay + 7) % 7;\n  const startOffset = new Date(date.getFullYear(), 0, firstWeekStartOffset + 1);\n  if (startOffset <= date) {\n    return Math.floor(dayOfYear(date, startOffset) / 7) + 1;\n  }\n  return 0;\n}\nvar SUNDAY = 0;\nvar MONDAY = 1;\nvar THURSDAY = 4;\nfunction isoWeekOfYear(date, year2 = date.getFullYear()) {\n  const firstOfYear = new Date(year2, 0, 1);\n  const firstOfYearDay = firstOfYear.getDay();\n  const firstThursdayOffset = (THURSDAY - firstOfYearDay + 7) % 7;\n  const startOffset = new Date(year2, 0, firstThursdayOffset - (THURSDAY - MONDAY) + 1);\n  if (startOffset <= date) {\n    return Math.floor(dayOfYear(date, startOffset) / 7) + 1;\n  }\n  return isoWeekOfYear(date, year2 - 1);\n}\nfunction timezone(date) {\n  const offset4 = date.getTimezoneOffset();\n  const unsignedOffset = Math.abs(offset4);\n  const sign = offset4 > 0 ? \"-\" : \"+\";\n  return `${sign}${pad(Math.floor(unsignedOffset / 60), 2, \"0\")}${pad(Math.floor(unsignedOffset % 60), 2, \"0\")}`;\n}\nvar FORMATTERS = {\n  a: (d) => CONSTANTS.shortDays[d.getDay()],\n  A: (d) => CONSTANTS.days[d.getDay()],\n  b: (d) => CONSTANTS.shortMonths[d.getMonth()],\n  B: (d) => CONSTANTS.months[d.getMonth()],\n  c: \"%x, %X\",\n  d: (d, p) => pad(d.getDate(), 2, p ?? \"0\"),\n  e: \"%_d\",\n  f: (d, p) => pad(d.getMilliseconds() * 1e3, 6, p ?? \"0\"),\n  H: (d, p) => pad(d.getHours(), 2, p ?? \"0\"),\n  I: (d, p) => {\n    const hours = d.getHours() % 12;\n    return hours === 0 ? \"12\" : pad(hours, 2, p ?? \"0\");\n  },\n  j: (d, p) => pad(dayOfYear(d) + 1, 3, p ?? \"0\"),\n  m: (d, p) => pad(d.getMonth() + 1, 2, p ?? \"0\"),\n  M: (d, p) => pad(d.getMinutes(), 2, p ?? \"0\"),\n  L: (d, p) => pad(d.getMilliseconds(), 3, p ?? \"0\"),\n  p: (d) => d.getHours() < 12 ? \"AM\" : \"PM\",\n  Q: (d) => String(d.getTime()),\n  s: (d) => String(Math.floor(d.getTime() / 1e3)),\n  S: (d, p) => pad(d.getSeconds(), 2, p ?? \"0\"),\n  u: (d) => {\n    let day2 = d.getDay();\n    if (day2 < 1)\n      day2 += 7;\n    return String(day2 % 7);\n  },\n  U: (d, p) => pad(weekOfYear(d, SUNDAY), 2, p ?? \"0\"),\n  V: (d, p) => pad(isoWeekOfYear(d), 2, p ?? \"0\"),\n  w: (d, p) => pad(d.getDay(), 2, p ?? \"0\"),\n  W: (d, p) => pad(weekOfYear(d, MONDAY), 2, p ?? \"0\"),\n  x: \"%-m/%-d/%Y\",\n  X: \"%-I:%M:%S %p\",\n  y: (d, p) => pad(d.getFullYear() % 100, 2, p ?? \"0\"),\n  Y: (d, p) => pad(d.getFullYear(), 4, p ?? \"0\"),\n  Z: (d) => timezone(d),\n  \"%\": () => \"%\"\n};\nvar PADS = {\n  _: \" \",\n  \"0\": \"0\",\n  \"-\": \"\"\n};\nfunction pad(value, size, padChar) {\n  const output = String(Math.floor(value));\n  if (output.length >= size) {\n    return output;\n  }\n  return `${padChar.repeat(size - output.length)}${output}`;\n}\nfunction buildFormatter(formatString) {\n  const formatParts = [];\n  while (formatString.length > 0) {\n    let nextEscapeIdx = formatString.indexOf(\"%\");\n    if (nextEscapeIdx !== 0) {\n      const literalPart = nextEscapeIdx > 0 ? formatString.substring(0, nextEscapeIdx) : formatString;\n      formatParts.push(literalPart);\n    }\n    if (nextEscapeIdx < 0)\n      break;\n    const maybePadSpecifier = formatString[nextEscapeIdx + 1];\n    const maybePad = PADS[maybePadSpecifier];\n    if (maybePad != null) {\n      nextEscapeIdx++;\n    }\n    const maybeFormatterSpecifier = formatString[nextEscapeIdx + 1];\n    const maybeFormatter = FORMATTERS[maybeFormatterSpecifier];\n    if (typeof maybeFormatter === \"function\") {\n      formatParts.push([maybeFormatter, maybePad]);\n    } else if (typeof maybeFormatter === \"string\") {\n      const formatter = buildFormatter(maybeFormatter);\n      formatParts.push([formatter, maybePad]);\n    } else {\n      formatParts.push(`${maybePad ?? \"\"}${maybeFormatterSpecifier}`);\n    }\n    formatString = formatString.substring(nextEscapeIdx + 2);\n  }\n  return (dateTime) => {\n    const dateTimeAsDate = typeof dateTime === \"number\" ? new Date(dateTime) : dateTime;\n    return formatParts.map((c) => typeof c === \"string\" ? c : c[0](dateTimeAsDate, c[1])).join(\"\");\n  };\n}\n\n// packages/ag-charts-community/src/util/timeFormatDefaults.ts\nfunction dateToNumber(value) {\n  return value instanceof Date ? value.getTime() : value;\n}\nfunction defaultTimeTickFormat(ticks, domain, formatOffset) {\n  const formatString = calculateDefaultTimeTickFormat(ticks, domain, formatOffset);\n  const formatter = buildFormatter(formatString);\n  return (date) => formatter(date);\n}\nfunction calculateDefaultTimeTickFormat(ticks = [], domain = ticks, formatOffset = 0) {\n  let minInterval = Infinity;\n  for (let i = 1; i < ticks.length; i++) {\n    minInterval = Math.min(minInterval, Math.abs(ticks[i] - ticks[i - 1]));\n  }\n  const startYear = new Date(domain[0]).getFullYear();\n  const stopYear = new Date(domain.at(-1)).getFullYear();\n  const yearChange = stopYear - startYear > 0;\n  const timeFormat = isFinite(minInterval) ? getIntervalLowestGranularityFormat(minInterval, ticks) : getLowestGranularityFormat(ticks[0]);\n  return formatStringBuilder(Math.max(timeFormat - formatOffset, 0), yearChange, ticks);\n}\nfunction getIntervalLowestGranularityFormat(value, ticks) {\n  if (value < durationSecond) {\n    return 0 /* MILLISECOND */;\n  } else if (value < durationMinute) {\n    return 1 /* SECOND */;\n  } else if (value < durationHour) {\n    return 2 /* MINUTE */;\n  } else if (value < durationDay) {\n    return 3 /* HOUR */;\n  } else if (value < durationWeek) {\n    return 4 /* WEEK_DAY */;\n  } else if (value < durationDay * 28 || value < durationDay * 31 && hasDuplicateMonth(ticks)) {\n    return 5 /* SHORT_MONTH */;\n  } else if (value < durationYear) {\n    return 6 /* MONTH */;\n  }\n  return 7 /* YEAR */;\n}\nfunction getLowestGranularityFormat(value) {\n  if (second_default.floor(value) < value) {\n    return 0 /* MILLISECOND */;\n  } else if (minute_default.floor(value) < value) {\n    return 1 /* SECOND */;\n  } else if (hour_default.floor(value) < value) {\n    return 2 /* MINUTE */;\n  } else if (day_default.floor(value) < value) {\n    return 3 /* HOUR */;\n  } else if (month_default.floor(value) < value) {\n    if (week_default.floor(value) < value) {\n      return 4 /* WEEK_DAY */;\n    }\n    return 5 /* SHORT_MONTH */;\n  } else if (year_default.floor(value) < value) {\n    return 6 /* MONTH */;\n  }\n  return 7 /* YEAR */;\n}\nfunction hasDuplicateMonth(ticks) {\n  let prevMonth = new Date(ticks[0]).getMonth();\n  for (let i = 1; i < ticks.length; i++) {\n    const tickMonth = new Date(ticks[i]).getMonth();\n    if (prevMonth === tickMonth) {\n      return true;\n    }\n    prevMonth = tickMonth;\n  }\n  return false;\n}\nfunction formatStringBuilder(defaultTimeFormat, yearChange, ticks) {\n  const firstTick = dateToNumber(ticks[0]);\n  const lastTick = dateToNumber(ticks.at(-1));\n  const extent2 = Math.abs(lastTick - firstTick);\n  const activeYear = yearChange || defaultTimeFormat === 7 /* YEAR */;\n  const activeDate = extent2 === 0;\n  const parts = [\n    [\"hour\", 6 * durationHour, 14 * durationDay, 3 /* HOUR */, \"%I %p\"],\n    [\"hour\", durationMinute, 6 * durationHour, 3 /* HOUR */, \"%I:%M\"],\n    [\"second\", 1e3, 6 * durationHour, 1 /* SECOND */, \":%S\"],\n    [\"ms\", 0, 6 * durationHour, 0 /* MILLISECOND */, \".%L\"],\n    [\"am/pm\", durationMinute, 6 * durationHour, 3 /* HOUR */, \"%p\"],\n    \" \",\n    [\"day\", durationDay, durationWeek, 4 /* WEEK_DAY */, \"%a\"],\n    [\"month\", activeDate ? 0 : durationWeek, 52 * durationWeek, 5 /* SHORT_MONTH */, \"%b %d\"],\n    [\"month\", 5 * durationWeek, 10 * durationYear, 6 /* MONTH */, \"%B\"],\n    \" \",\n    [\"year\", activeYear ? 0 : durationYear, Infinity, 7 /* YEAR */, \"%Y\"]\n  ];\n  const formatParts = parts.filter((v) => {\n    if (typeof v === \"string\") {\n      return true;\n    }\n    const [_, min, max, format] = v;\n    return format >= defaultTimeFormat && min <= extent2 && extent2 < max;\n  }).reduce(\n    (r, next) => {\n      if (typeof next === \"string\") {\n        r.result.push(next);\n      } else if (!r.used.has(next[0])) {\n        r.result.push(next);\n        r.used.add(next[0]);\n      }\n      return r;\n    },\n    { result: [], used: /* @__PURE__ */ new Set() }\n  ).result;\n  const firstFormat = formatParts.findIndex((v) => typeof v !== \"string\");\n  const lastFormat = formatParts.findLastIndex((v) => typeof v !== \"string\");\n  return formatParts.slice(firstFormat, lastFormat + 1).map((v) => typeof v === \"string\" ? v : v[4]).join(\"\").replaceAll(/\\s+/g, \" \").trim();\n}\n\n// packages/ag-charts-community/src/scale/bandScale.ts\nvar _BandScale = class _BandScale {\n  constructor() {\n    this.type = \"band\";\n    this.invalid = true;\n    this.range = [0, 1];\n    this.round = false;\n    this.interval = void 0;\n    /**\n     * Maps datum to its index in the {@link domain} array.\n     * Used to check for duplicate data (not allowed).\n     */\n    this.index = /* @__PURE__ */ new Map();\n    /**\n     * The output range values for datum at each index.\n     */\n    this.ordinalRange = [];\n    /**\n     * Contains unique data only.\n     */\n    this._domain = [];\n    this._bandwidth = 1;\n    this._step = 1;\n    this._inset = 1;\n    this._rawBandwidth = 1;\n    /**\n     * The ratio of the range that is reserved for space between bands.\n     */\n    this._paddingInner = 0;\n    /**\n     * The ratio of the range that is reserved for space before the first\n     * and after the last band.\n     */\n    this._paddingOuter = 0;\n  }\n  static is(value) {\n    return value instanceof _BandScale;\n  }\n  refresh() {\n    if (!this.invalid)\n      return;\n    this.invalid = false;\n    this.update();\n    if (this.invalid) {\n      Logger.warnOnce(\"Expected update to not invalidate scale\");\n    }\n  }\n  set domain(values) {\n    this.index = /* @__PURE__ */ new Map();\n    this.invalid = true;\n    this._domain = [];\n    for (const value of values) {\n      const key = dateToNumber(value);\n      if (this.getIndex(key) === void 0) {\n        this.index.set(key, this._domain.push(value) - 1);\n      }\n    }\n  }\n  get domain() {\n    return this._domain;\n  }\n  getDomain() {\n    return this._domain;\n  }\n  ticks() {\n    this.refresh();\n    return this._domain;\n  }\n  convert(d) {\n    this.refresh();\n    const i = this.getIndex(d);\n    if (i == null) {\n      return NaN;\n    }\n    return this.ordinalRange[i] ?? NaN;\n  }\n  invert(position) {\n    this.refresh();\n    const index = this.ordinalRange.findIndex((p) => p === position);\n    return this.domain[index];\n  }\n  invertNearest(position) {\n    this.refresh();\n    let nearest = -1;\n    let minDistance = Infinity;\n    const index = this.ordinalRange.findIndex((p, i) => {\n      if (p === position)\n        return true;\n      const distance3 = Math.abs(position - p);\n      if (distance3 < minDistance) {\n        minDistance = distance3;\n        nearest = i;\n      }\n      return false;\n    });\n    return this.domain[index] ?? this.domain[nearest];\n  }\n  get bandwidth() {\n    this.refresh();\n    return this._bandwidth;\n  }\n  get step() {\n    this.refresh();\n    return this._step;\n  }\n  get inset() {\n    this.refresh();\n    return this._inset;\n  }\n  get rawBandwidth() {\n    this.refresh();\n    return this._rawBandwidth;\n  }\n  set padding(value) {\n    value = clamp(0, value, 1);\n    this._paddingInner = value;\n    this._paddingOuter = value;\n  }\n  get padding() {\n    return this._paddingInner;\n  }\n  set paddingInner(value) {\n    this._paddingInner = clamp(0, value, 1);\n  }\n  get paddingInner() {\n    return this._paddingInner;\n  }\n  set paddingOuter(value) {\n    this._paddingOuter = clamp(0, value, 1);\n  }\n  get paddingOuter() {\n    return this._paddingOuter;\n  }\n  update() {\n    const count = this._domain.length;\n    if (count === 0)\n      return;\n    const [r0, r1] = this.range;\n    let { _paddingInner: paddingInner } = this;\n    const { _paddingOuter: paddingOuter, round: round5 } = this;\n    const rangeDistance = r1 - r0;\n    let rawStep;\n    if (count === 1) {\n      paddingInner = 0;\n      rawStep = rangeDistance * (1 - paddingOuter * 2);\n    } else {\n      rawStep = rangeDistance / Math.max(1, count - paddingInner + paddingOuter * 2);\n    }\n    const step = round5 ? Math.floor(rawStep) : rawStep;\n    let inset = r0 + (rangeDistance - step * (count - paddingInner)) / 2;\n    let bandwidth = step * (1 - paddingInner);\n    if (round5) {\n      inset = Math.round(inset);\n      bandwidth = Math.round(bandwidth);\n    }\n    this._step = step;\n    this._inset = inset;\n    this._bandwidth = bandwidth;\n    this._rawBandwidth = rawStep * (1 - paddingInner);\n    this.ordinalRange = this._domain.map((_, i) => inset + step * i);\n  }\n  getIndex(value) {\n    return this.index.get(value instanceof Date ? value.getTime() : value);\n  }\n};\n__decorateClass([\n  Invalidating\n], _BandScale.prototype, \"range\", 2);\n__decorateClass([\n  Invalidating\n], _BandScale.prototype, \"round\", 2);\n__decorateClass([\n  Invalidating\n], _BandScale.prototype, \"interval\", 2);\nvar BandScale = _BandScale;\n\n// packages/ag-charts-community/src/util/properties.ts\nvar BaseProperties = class {\n  set(properties) {\n    const { className = this.constructor.name } = this.constructor;\n    if (typeof properties !== \"object\") {\n      Logger.warn(`unable to set ${className} - expecting a properties object`);\n      return this;\n    }\n    const keys = new Set(Object.keys(properties));\n    for (const propertyKey of listDecoratedProperties(this)) {\n      if (keys.has(propertyKey)) {\n        const value = properties[propertyKey];\n        const self = this;\n        if (isProperties(self[propertyKey])) {\n          if (self[propertyKey] instanceof PropertiesArray) {\n            const array2 = self[propertyKey].reset(value);\n            if (array2 != null) {\n              self[propertyKey] = array2;\n            } else {\n              Logger.warn(`unable to set [${propertyKey}] - expecting a properties array`);\n            }\n          } else {\n            self[propertyKey].set(value);\n          }\n        } else {\n          self[propertyKey] = value;\n        }\n        keys.delete(propertyKey);\n      }\n    }\n    for (const unknownKey of keys) {\n      Logger.warn(`unable to set [${unknownKey}] in ${className} - property is unknown`);\n    }\n    return this;\n  }\n  isValid(warningPrefix) {\n    return listDecoratedProperties(this).every((propertyKey) => {\n      const { optional } = extractDecoratedPropertyMetadata(this, propertyKey);\n      const valid = optional === true || typeof this[propertyKey] !== \"undefined\";\n      if (!valid) {\n        Logger.warnOnce(`${warningPrefix ?? \"\"}[${propertyKey}] is required.`);\n      }\n      return valid;\n    });\n  }\n  toJson() {\n    return listDecoratedProperties(this).reduce((object2, propertyKey) => {\n      const propertyValue = this[propertyKey];\n      object2[propertyKey] = isProperties(propertyValue) ? propertyValue.toJson() : propertyValue;\n      return object2;\n    }, {});\n  }\n};\nvar PropertiesArray = class _PropertiesArray extends Array {\n  constructor(itemFactory, ...properties) {\n    super(properties.length);\n    const isConstructor = (value2) => Boolean(value2?.prototype?.constructor?.name);\n    const value = isConstructor(itemFactory) ? (params) => new itemFactory().set(params) : itemFactory;\n    Object.defineProperty(this, \"itemFactory\", { value, enumerable: false, configurable: false });\n    this.set(properties);\n  }\n  set(properties) {\n    if (isArray(properties)) {\n      this.length = properties.length;\n      for (let i = 0; i < properties.length; i++) {\n        this[i] = this.itemFactory(properties[i]);\n      }\n    }\n    return this;\n  }\n  reset(properties) {\n    if (Array.isArray(properties)) {\n      return new _PropertiesArray(this.itemFactory, ...properties);\n    }\n  }\n  toJson() {\n    return this.map((value) => value?.toJson?.() ?? value);\n  }\n};\nfunction isProperties(value) {\n  return value instanceof BaseProperties || value instanceof PropertiesArray;\n}\n\n// packages/ag-charts-community/src/util/validation.ts\nfunction Validate(predicate, options = {}) {\n  const { optional = false, property: overrideProperty } = options;\n  return addTransformToInstanceProperty(\n    (target, property, value) => {\n      const context = { ...options, target, property };\n      if (optional && typeof value === \"undefined\" || predicate(value, context)) {\n        if (isProperties(target[property]) && !isProperties(value)) {\n          target[property].set(value);\n          return target[property];\n        }\n        return value;\n      }\n      const cleanKey = overrideProperty ?? String(property).replace(/^_*/, \"\");\n      const targetName = target.constructor.className ?? target.constructor.name.replace(/Properties$/, \"\");\n      let valueString = stringify(value);\n      const maxLength = 50;\n      if (valueString != null && valueString.length > maxLength) {\n        const excessCharacters = valueString.length - maxLength;\n        valueString = valueString.slice(0, maxLength) + `... (+${excessCharacters} characters)`;\n      }\n      Logger.warn(\n        `Property [${cleanKey}] of [${targetName}] cannot be set to [${valueString}]${predicate.message ? `; expecting ${getPredicateMessage(predicate, context)}` : \"\"}, ignoring.`\n      );\n      return BREAK_TRANSFORM_CHAIN;\n    },\n    void 0,\n    { optional }\n  );\n}\nvar AND = (...predicates) => {\n  const messages = [];\n  return predicateWithMessage(\n    (value, ctx) => {\n      messages.length = 0;\n      return predicates.every((predicate) => {\n        const isValid2 = predicate(value, ctx);\n        if (!isValid2) {\n          messages.push(getPredicateMessage(predicate, ctx));\n        }\n        return isValid2;\n      });\n    },\n    () => messages.filter(Boolean).join(\" AND \")\n  );\n};\nvar OR = (...predicates) => predicateWithMessage(\n  (value, ctx) => predicates.some((predicate) => predicate(value, ctx)),\n  (ctx) => predicates.map(getPredicateMessageMapper(ctx)).filter(Boolean).join(\" OR \")\n);\nvar OBJECT = attachObjectRestrictions(\n  predicateWithMessage(\n    (value, ctx) => isProperties(value) || isObject(value) && isProperties(ctx.target[ctx.property]),\n    \"a properties object\"\n  )\n);\nvar PLAIN_OBJECT = attachObjectRestrictions(predicateWithMessage((value) => isObject(value), \"an object\"));\nvar BOOLEAN = predicateWithMessage(isBoolean, \"a boolean\");\nvar FUNCTION = predicateWithMessage(isFunction, \"a function\");\nvar STRING = predicateWithMessage(isString, \"a string\");\nvar NUMBER = attachNumberRestrictions(predicateWithMessage(isFiniteNumber, \"a number\"));\nvar REAL_NUMBER = predicateWithMessage((value) => isNumber(value) && !isNaN(value), \"a real number\");\nvar NAN = predicateWithMessage((value) => isNumber(value) && isNaN(value), \"NaN\");\nvar POSITIVE_NUMBER = NUMBER.restrict({ min: 0 });\nvar RATIO = NUMBER.restrict({ min: 0, max: 1 });\nvar DEGREE = NUMBER.restrict({ min: -360, max: 360 });\nvar NUMBER_OR_NAN = OR(NUMBER, NAN);\nvar ARRAY = attachArrayRestrictions(predicateWithMessage(isArray, \"an array\"));\nvar ARRAY_OF = (predicate, message) => predicateWithMessage(\n  (value, ctx) => isArray(value) && value.every((item) => predicate(item, ctx)),\n  (ctx) => {\n    const arrayMessage = getPredicateMessage(ARRAY, ctx) ?? \"\";\n    return message ? `${arrayMessage} of ${message}` : arrayMessage;\n  }\n);\nvar isComparable = (value) => isFiniteNumber(value) || isValidDate(value);\nvar LESS_THAN = (otherField) => predicateWithMessage(\n  (v, ctx) => !isComparable(v) || !isComparable(ctx.target[otherField]) || v < ctx.target[otherField],\n  `to be less than ${otherField}`\n);\nvar GREATER_THAN = (otherField) => predicateWithMessage(\n  (v, ctx) => !isComparable(v) || !isComparable(ctx.target[otherField]) || v > ctx.target[otherField],\n  `to be greater than ${otherField}`\n);\nvar DATE = predicateWithMessage(isValidDate, \"Date object\");\nvar DATE_OR_DATETIME_MS = OR(DATE, POSITIVE_NUMBER);\nvar colorMessage = `A color string can be in one of the following formats to be valid: #rgb, #rrggbb, rgb(r, g, b), rgba(r, g, b, a) or a CSS color name such as 'white', 'orange', 'cyan', etc`;\nvar COLOR_STRING = predicateWithMessage(\n  (v) => isString(v) && Color.validColorString(v),\n  `color String. ${colorMessage}`\n);\nvar COLOR_STRING_ARRAY = predicateWithMessage(ARRAY_OF(COLOR_STRING), `color strings. ${colorMessage}`);\nvar BOOLEAN_ARRAY = ARRAY_OF(BOOLEAN, \"boolean values\");\nvar NUMBER_ARRAY = ARRAY_OF(NUMBER, \"numbers\");\nvar STRING_ARRAY = ARRAY_OF(STRING, \"strings\");\nvar DATE_ARRAY = predicateWithMessage(ARRAY_OF(DATE), \"Date objects\");\nvar OBJECT_ARRAY = predicateWithMessage(ARRAY_OF(OBJECT), \"objects\");\nvar LINE_CAP = UNION([\"butt\", \"round\", \"square\"], \"a line cap\");\nvar LINE_JOIN = UNION([\"round\", \"bevel\", \"miter\"], \"a line join\");\nvar LINE_STYLE = UNION([\"solid\", \"dashed\", \"dotted\"], \"a line style\");\nvar LINE_DASH = predicateWithMessage(\n  ARRAY_OF(POSITIVE_NUMBER),\n  \"numbers specifying the length in pixels of alternating dashes and gaps, for example, [6, 3] means dashes with a length of 6 pixels with gaps between of 3 pixels.\"\n);\nvar POSITION = UNION([\"top\", \"right\", \"bottom\", \"left\"], \"a position\");\nvar FONT_STYLE = UNION([\"normal\", \"italic\", \"oblique\"], \"a font style\");\nvar FONT_WEIGHT = OR(\n  UNION([\"normal\", \"bold\", \"bolder\", \"lighter\"], \"a font weight\"),\n  NUMBER.restrict({ min: 1, max: 1e3 })\n);\nvar TEXT_WRAP = UNION([\"never\", \"always\", \"hyphenate\", \"on-space\"], \"a text wrap strategy\");\nvar TEXT_ALIGN = UNION([\"left\", \"center\", \"right\"], \"a text align\");\nvar VERTICAL_ALIGN = UNION([\"top\", \"middle\", \"bottom\"], \"a vertical align\");\nvar OVERFLOW_STRATEGY = UNION([\"ellipsis\", \"hide\"], \"an overflow strategy\");\nvar DIRECTION = UNION([\"horizontal\", \"vertical\"], \"a direction\");\nvar PLACEMENT = UNION([\"inside\", \"outside\"], \"a placement\");\nvar INTERACTION_RANGE = OR(UNION([\"exact\", \"nearest\"], \"interaction range\"), NUMBER);\nvar LABEL_PLACEMENT = UNION([\"top\", \"bottom\", \"left\", \"right\"]);\nfunction UNION(options, message = \"a\") {\n  return predicateWithMessage(\n    (v, ctx) => {\n      const option = options.find((o) => {\n        const value = typeof o === \"string\" ? o : o.value;\n        return v === value;\n      });\n      if (option == null)\n        return false;\n      if (typeof option !== \"string\" && (option.deprecated === true || option.deprecatedTo != null)) {\n        const messages = [`Property [%s] with value '${option.value}' is deprecated.`];\n        if (option.deprecatedTo) {\n          messages.push(`Use ${option.deprecatedTo} instead.`);\n        }\n        Logger.warnOnce(messages.join(\" \"), ctx.property);\n      }\n      return true;\n    },\n    `${message} keyword such as ${joinUnionOptions(options)}`\n  );\n}\nvar MIN_SPACING = OR(AND(NUMBER.restrict({ min: 1 }), LESS_THAN(\"maxSpacing\")), NAN);\nvar MAX_SPACING = OR(AND(NUMBER.restrict({ min: 1 }), GREATER_THAN(\"minSpacing\")), NAN);\nfunction predicateWithMessage(predicate, message) {\n  predicate.message = message;\n  return predicate;\n}\nfunction joinUnionOptions(options) {\n  const values = options.filter((option) => typeof option === \"string\" || option.undocumented !== true).map((option) => `'${typeof option === \"string\" ? option : option.value}'`);\n  if (values.length === 1) {\n    return values[0];\n  }\n  const lastValue = values.pop();\n  return `${values.join(\", \")} or ${lastValue}`;\n}\nfunction getPredicateMessage(predicate, ctx) {\n  return isFunction(predicate.message) ? predicate.message(ctx) : predicate.message;\n}\nfunction getPredicateMessageMapper(ctx) {\n  return (predicate) => getPredicateMessage(predicate, ctx);\n}\nfunction attachArrayRestrictions(predicate) {\n  return Object.assign(predicate, {\n    restrict({ length: length2, minLength } = {}) {\n      let message = \"an array\";\n      if (isNumber(minLength) && minLength > 0) {\n        message = \"a non-empty array\";\n      } else if (isNumber(length2)) {\n        message = `an array of length ${length2}`;\n      }\n      return predicateWithMessage(\n        (value) => isArray(value) && (isNumber(length2) ? value.length === length2 : true) && (isNumber(minLength) ? value.length >= minLength : true),\n        message\n      );\n    }\n  });\n}\nfunction attachNumberRestrictions(predicate) {\n  return Object.assign(predicate, {\n    restrict({ min, max } = {}) {\n      const message = [\"a number\"];\n      const hasMin = isNumber(min);\n      const hasMax = isNumber(max);\n      if (hasMin && hasMax) {\n        message.push(`between ${min} and ${max} inclusive`);\n      } else if (hasMin) {\n        message.push(`greater than or equal to ${min}`);\n      } else if (hasMax) {\n        message.push(`less than or equal to ${max}`);\n      }\n      return predicateWithMessage(\n        (value) => isFiniteNumber(value) && (hasMin ? value >= min : true) && (hasMax ? value <= max : true),\n        message.join(\" \")\n      );\n    }\n  });\n}\nfunction attachObjectRestrictions(predicate) {\n  return Object.assign(predicate, {\n    restrict(objectType) {\n      return predicateWithMessage(\n        (value) => value instanceof objectType,\n        (ctx) => getPredicateMessage(predicate, ctx) ?? `an instance of ${objectType.name}`\n      );\n    }\n  });\n}\nfunction stringify(value) {\n  if (typeof value === \"number\") {\n    if (isNaN(value))\n      return \"NaN\";\n    if (value === Infinity)\n      return \"Infinity\";\n    if (value === -Infinity)\n      return \"-Infinity\";\n  }\n  return JSON.stringify(value);\n}\n\n// packages/ag-charts-community/src/chart/chartAxisDirection.ts\nvar ChartAxisDirection = /* @__PURE__ */ ((ChartAxisDirection2) => {\n  ChartAxisDirection2[\"X\"] = \"x\";\n  ChartAxisDirection2[\"Y\"] = \"y\";\n  return ChartAxisDirection2;\n})(ChartAxisDirection || {});\n\n// packages/ag-charts-community/src/module/moduleMap.ts\nvar ModuleMap = class {\n  constructor() {\n    this.moduleMap = /* @__PURE__ */ new Map();\n  }\n  *modules() {\n    for (const m of this.moduleMap.values()) {\n      yield m.moduleInstance;\n    }\n  }\n  addModule(module, moduleFactory) {\n    if (this.moduleMap.has(module.optionsKey)) {\n      throw new Error(`AG Charts - module already initialised: ${module.optionsKey}`);\n    }\n    this.moduleMap.set(module.optionsKey, { module, moduleInstance: moduleFactory(module) });\n  }\n  removeModule(module) {\n    const moduleKey = isString(module) ? module : module.optionsKey;\n    this.moduleMap.get(moduleKey)?.moduleInstance.destroy();\n    this.moduleMap.delete(moduleKey);\n  }\n  getModule(module) {\n    return this.moduleMap.get(isString(module) ? module : module.optionsKey)?.moduleInstance;\n  }\n  isEnabled(module) {\n    return this.moduleMap.has(isString(module) ? module : module.optionsKey);\n  }\n  mapModules(callback2) {\n    return Array.from(this.moduleMap.values(), (m, i) => callback2(m.moduleInstance, i));\n  }\n  destroy() {\n    for (const moduleKey of this.moduleMap.keys()) {\n      this.moduleMap.get(moduleKey)?.moduleInstance.destroy();\n    }\n    this.moduleMap.clear();\n  }\n};\n\n// packages/ag-charts-community/src/motion/resetMotion.ts\nvar resetMotion_exports = {};\n__export(resetMotion_exports, {\n  resetMotion: () => resetMotion\n});\nfunction resetMotion(selectionsOrNodes, propsFn) {\n  const { nodes, selections } = deconstructSelectionsOrNodes(selectionsOrNodes);\n  for (const selection of selections) {\n    for (const node of selection.nodes()) {\n      const from3 = propsFn(node, node.datum);\n      node.setProperties(from3);\n    }\n    selection.cleanup();\n  }\n  for (const node of nodes) {\n    const from3 = propsFn(node, node.datum);\n    node.setProperties(from3);\n  }\n}\n\n// packages/ag-charts-community/src/util/numberFormat.ts\nfunction parseFormat(format) {\n  let prefix;\n  let suffix;\n  const surrounded = surroundedRegEx.exec(format);\n  if (surrounded) {\n    [, prefix, format, suffix] = surrounded;\n  }\n  const match = formatRegEx.exec(format);\n  if (!match) {\n    throw new Error(`The number formatter is invalid: ${format}`);\n  }\n  const [, fill, align, sign, symbol, zero, width2, comma, precision, trim, type] = match;\n  return {\n    fill,\n    align,\n    sign,\n    symbol,\n    zero,\n    width: parseInt(width2),\n    comma,\n    precision: parseInt(precision),\n    trim: Boolean(trim),\n    type,\n    prefix,\n    suffix\n  };\n}\nfunction numberFormat(format) {\n  const options = typeof format === \"string\" ? parseFormat(format) : format;\n  const { fill, align, sign = \"-\", symbol, zero, width: width2, comma, type, prefix = \"\", suffix = \"\", precision } = options;\n  let { trim } = options;\n  const precisionIsNaN = precision == null || isNaN(precision);\n  let formatBody;\n  if (!type) {\n    formatBody = decimalTypes[\"g\"];\n    trim = true;\n  } else if (type in decimalTypes && type in integerTypes) {\n    formatBody = precisionIsNaN ? integerTypes[type] : decimalTypes[type];\n  } else if (type in decimalTypes) {\n    formatBody = decimalTypes[type];\n  } else if (type in integerTypes) {\n    formatBody = integerTypes[type];\n  } else {\n    throw new Error(`The number formatter type is invalid: ${type}`);\n  }\n  let formatterPrecision;\n  if (precision == null || precisionIsNaN) {\n    formatterPrecision = type ? 6 : 12;\n  } else {\n    formatterPrecision = precision;\n  }\n  return (n) => {\n    let result = formatBody(n, formatterPrecision);\n    if (trim) {\n      result = removeTrailingZeros(result);\n    }\n    if (comma) {\n      result = insertSeparator(result, comma);\n    }\n    result = addSign(n, result, sign);\n    if (symbol && symbol !== \"#\") {\n      result = `${symbol}${result}`;\n    }\n    if (symbol === \"#\" && type === \"x\") {\n      result = `0x${result}`;\n    }\n    if (type === \"s\") {\n      result = `${result}${getSIPrefix(n)}`;\n    }\n    if (type === \"%\" || type === \"p\") {\n      result = `${result}%`;\n    }\n    if (width2 != null && !isNaN(width2)) {\n      result = addPadding(result, width2, fill ?? zero, align);\n    }\n    result = `${prefix}${result}${suffix}`;\n    return result;\n  };\n}\nvar formatRegEx = /^(?:(.)?([<>=^]))?([+\\-( ])?([$\u20AC\u00A3\u00A5\u20A3\u20B9#])?(0)?(\\d+)?(,)?(?:\\.(\\d+))?(~)?([%a-z])?$/i;\nvar surroundedRegEx = /^((?:[^#]|#[^{])*)#{([^}]+)}(.*)$/;\nvar integerTypes = {\n  b: (n) => absFloor(n).toString(2),\n  c: (n) => String.fromCharCode(n),\n  d: (n) => Math.round(Math.abs(n)).toFixed(0),\n  o: (n) => absFloor(n).toString(8),\n  x: (n) => absFloor(n).toString(16),\n  X: (n) => integerTypes.x(n).toUpperCase(),\n  n: (n) => integerTypes.d(n),\n  \"%\": (n) => `${absFloor(n * 100).toFixed(0)}`\n};\nvar decimalTypes = {\n  e: (n, f) => Math.abs(n).toExponential(f),\n  E: (n, f) => decimalTypes.e(n, f).toUpperCase(),\n  f: (n, f) => Math.abs(n).toFixed(f),\n  F: (n, f) => decimalTypes.f(n, f).toUpperCase(),\n  g: (n, f) => {\n    if (n === 0) {\n      return \"0\";\n    }\n    const a = Math.abs(n);\n    const p = Math.floor(Math.log10(a));\n    if (p >= -4 && p < f) {\n      return a.toFixed(f - 1 - p);\n    }\n    return a.toExponential(f - 1);\n  },\n  G: (n, f) => decimalTypes.g(n, f).toUpperCase(),\n  n: (n, f) => decimalTypes.g(n, f),\n  p: (n, f) => decimalTypes.r(n * 100, f),\n  r: (n, f) => {\n    if (n === 0) {\n      return \"0\";\n    }\n    const a = Math.abs(n);\n    const p = Math.floor(Math.log10(a));\n    const q = p - (f - 1);\n    if (q <= 0) {\n      return a.toFixed(-q);\n    }\n    const x = 10 ** q;\n    return (Math.round(a / x) * x).toFixed();\n  },\n  s: (n, f) => {\n    const p = getSIPrefixPower(n);\n    return decimalTypes.r(n / 10 ** p, f);\n  },\n  \"%\": (n, f) => decimalTypes.f(n * 100, f)\n};\nvar minSIPrefix = -24;\nvar maxSIPrefix = 24;\nvar siPrefixes = {\n  [minSIPrefix]: \"y\",\n  [-21]: \"z\",\n  [-18]: \"a\",\n  [-15]: \"f\",\n  [-12]: \"p\",\n  [-9]: \"n\",\n  [-6]: \"\\xB5\",\n  [-3]: \"m\",\n  [0]: \"\",\n  [3]: \"k\",\n  [6]: \"M\",\n  [9]: \"G\",\n  [12]: \"T\",\n  [15]: \"P\",\n  [18]: \"E\",\n  [21]: \"Z\",\n  [maxSIPrefix]: \"Y\"\n};\nvar minusSign = \"\\u2212\";\nfunction absFloor(n) {\n  return Math.floor(Math.abs(n));\n}\nfunction removeTrailingZeros(numString) {\n  return numString.replace(/\\.0+$/, \"\").replace(/(\\.[1-9])0+$/, \"$1\");\n}\nfunction insertSeparator(numString, separator) {\n  let dotIndex = numString.indexOf(\".\");\n  if (dotIndex < 0) {\n    dotIndex = numString.length;\n  }\n  const integerChars = numString.substring(0, dotIndex).split(\"\");\n  const fractionalPart = numString.substring(dotIndex);\n  for (let i = integerChars.length - 3; i > 0; i -= 3) {\n    integerChars.splice(i, 0, separator);\n  }\n  return `${integerChars.join(\"\")}${fractionalPart}`;\n}\nfunction getSIPrefix(n) {\n  return siPrefixes[getSIPrefixPower(n)];\n}\nfunction getSIPrefixPower(n) {\n  return clamp(minSIPrefix, n ? Math.floor(Math.log10(Math.abs(n)) / 3) * 3 : 0, maxSIPrefix);\n}\nfunction addSign(num, numString, signType = \"\") {\n  if (signType === \"(\") {\n    return num >= 0 ? numString : `(${numString})`;\n  }\n  const plusSign = signType === \"+\" ? \"+\" : \"\";\n  return `${num >= 0 ? plusSign : minusSign}${numString}`;\n}\nfunction addPadding(numString, width2, fill = \" \", align = \">\") {\n  let result = numString;\n  if (align === \">\" || !align) {\n    result = result.padStart(width2, fill);\n  } else if (align === \"<\") {\n    result = result.padEnd(width2, fill);\n  } else if (align === \"^\") {\n    const padWidth = Math.max(0, width2 - result.length);\n    const padLeft = Math.ceil(padWidth / 2);\n    const padRight = Math.floor(padWidth / 2);\n    result = result.padStart(padLeft + result.length, fill);\n    result = result.padEnd(padRight + result.length, fill);\n  }\n  return result;\n}\n\n// packages/ag-charts-community/src/util/ticks.ts\nvar tInterval = (timeInterval, baseDuration, step) => ({\n  duration: baseDuration * step,\n  timeInterval,\n  step\n});\nvar TickIntervals = [\n  tInterval(second_default, durationSecond, 1),\n  tInterval(second_default, durationSecond, 5),\n  tInterval(second_default, durationSecond, 15),\n  tInterval(second_default, durationSecond, 30),\n  tInterval(minute_default, durationMinute, 1),\n  tInterval(minute_default, durationMinute, 5),\n  tInterval(minute_default, durationMinute, 15),\n  tInterval(minute_default, durationMinute, 30),\n  tInterval(hour_default, durationHour, 1),\n  tInterval(hour_default, durationHour, 3),\n  tInterval(hour_default, durationHour, 6),\n  tInterval(hour_default, durationHour, 12),\n  tInterval(day_default, durationDay, 1),\n  tInterval(day_default, durationDay, 2),\n  tInterval(week_default, durationWeek, 1),\n  tInterval(week_default, durationWeek, 2),\n  tInterval(week_default, durationWeek, 3),\n  tInterval(month_default, durationMonth, 1),\n  tInterval(month_default, durationMonth, 2),\n  tInterval(month_default, durationMonth, 3),\n  tInterval(month_default, durationMonth, 4),\n  tInterval(month_default, durationMonth, 6),\n  tInterval(year_default, durationYear, 1)\n];\nvar TickMultipliers = [1, 2, 5, 10];\nfunction isCloseToInteger(n, delta4) {\n  return Math.abs(Math.round(n) - n) < delta4;\n}\nfunction createTicks(start2, stop, count, minCount, maxCount) {\n  if (count < 2) {\n    return [start2, stop];\n  }\n  const step = tickStep(start2, stop, count, minCount, maxCount);\n  if (!Number.isFinite(step)) {\n    return [];\n  }\n  if (!isCloseToInteger(start2 / step, 1e-12)) {\n    start2 = Math.ceil(start2 / step) * step;\n  }\n  if (!isCloseToInteger(stop / step, 1e-12)) {\n    stop = Math.floor(stop / step) * step;\n  }\n  return range(start2, stop, step);\n}\nfunction getTickInterval(start2, stop, count, minCount, maxCount, targetInterval) {\n  const target = targetInterval ?? Math.abs(stop - start2) / Math.max(count, 1);\n  let i = 0;\n  for (const tickInterval of TickIntervals) {\n    if (target <= tickInterval.duration)\n      break;\n    i++;\n  }\n  if (i === 0) {\n    const step2 = Math.max(tickStep(start2, stop, count, minCount, maxCount), 1);\n    return millisecond_default.every(step2);\n  } else if (i === TickIntervals.length) {\n    const step2 = targetInterval == null ? tickStep(start2 / durationYear, stop / durationYear, count, minCount, maxCount) : 1;\n    return year_default.every(step2);\n  }\n  const i0 = TickIntervals[i - 1];\n  const i1 = TickIntervals[i];\n  const { timeInterval, step } = target - i0.duration < i1.duration - target ? i0 : i1;\n  return timeInterval.every(step);\n}\nfunction tickStep(start2, end2, count, minCount = 0, maxCount = Infinity) {\n  if (start2 === end2) {\n    return clamp(1, minCount, maxCount);\n  } else if (count < 1) {\n    return NaN;\n  }\n  const extent2 = Math.abs(end2 - start2);\n  const step = 10 ** Math.floor(Math.log10(extent2 / count));\n  let m = NaN, minDiff = Infinity, isInBounds = false;\n  for (const multiplier of TickMultipliers) {\n    const c = Math.ceil(extent2 / (multiplier * step));\n    const validBounds = c >= minCount && c <= maxCount;\n    if (isInBounds && !validBounds)\n      continue;\n    const diffCount = Math.abs(c - count);\n    if (minDiff > diffCount || isInBounds !== validBounds) {\n      isInBounds || (isInBounds = validBounds);\n      minDiff = diffCount;\n      m = multiplier;\n    }\n  }\n  return m * step;\n}\nfunction decimalPlaces(decimal) {\n  for (let i = decimal.length - 1; i >= 0; i -= 1) {\n    if (decimal[i] !== \"0\") {\n      return i + 1;\n    }\n  }\n  return 0;\n}\nfunction tickFormat(ticks, format) {\n  const options = parseFormat(format ?? \",f\");\n  if (options.precision == null || isNaN(options.precision)) {\n    if (!options.type || \"eEFgGnprs\".includes(options.type)) {\n      options.precision = Math.max(\n        ...ticks.map((x) => {\n          if (!Number.isFinite(x))\n            return 0;\n          const [integer, decimal] = x.toExponential((options.type ? 6 : 12) - 1).split(/\\.|e/g);\n          return (integer !== \"1\" && integer !== \"-1\" ? 1 : 0) + decimalPlaces(decimal) + 1;\n        })\n      );\n    } else if (\"f%\".includes(options.type)) {\n      options.precision = Math.max(\n        ...ticks.map((x) => {\n          if (!Number.isFinite(x) || x === 0)\n            return 0;\n          const l = Math.floor(Math.log10(Math.abs(x)));\n          const digits = options.type ? 6 : 12;\n          const decimal = x.toExponential(digits - 1).split(/\\.|e/g)[1];\n          const decimalLength = decimalPlaces(decimal);\n          return Math.max(0, decimalLength - l);\n        })\n      );\n    }\n  }\n  const formatter = numberFormat(options);\n  return (n) => formatter(Number(n));\n}\nfunction range(start2, end2, step) {\n  if (!Number.isFinite(step) || step <= 0)\n    return [];\n  const f = 10 ** countFractionDigits(step);\n  const d0 = Math.min(start2, end2);\n  const d1 = Math.max(start2, end2);\n  const out = [];\n  for (let i = 0; ; i += 1) {\n    const p = Math.round((d0 + step * i) * f) / f;\n    if (p <= d1) {\n      out.push(p);\n    } else {\n      break;\n    }\n  }\n  return out;\n}\nfunction isDenseInterval(count, availableRange) {\n  if (count >= availableRange) {\n    Logger.warnOnce(\n      `the configured interval results in more than 1 item per pixel, ignoring. Supply a larger interval or omit this configuration`\n    );\n    return true;\n  }\n  return false;\n}\nfunction niceTicksDomain(start2, end2) {\n  const extent2 = Math.abs(end2 - start2);\n  const step = 10 ** Math.floor(Math.log10(extent2));\n  let minError = Infinity, ticks = [start2, end2];\n  for (const multiplier of TickMultipliers) {\n    const m = multiplier * step;\n    const d0 = Math.floor(start2 / m) * m;\n    const d1 = Math.ceil(end2 / m) * m;\n    const error = 1 - extent2 / Math.abs(d1 - d0);\n    if (minError > error) {\n      minError = error;\n      ticks = [d0, d1];\n    }\n  }\n  return ticks;\n}\nfunction estimateTickCount(rangeExtent, minSpacing, maxSpacing, defaultTickCount, defaultMinSpacing) {\n  defaultMinSpacing = Math.max(defaultMinSpacing, rangeExtent / (defaultTickCount + 1));\n  if (isNaN(minSpacing)) {\n    minSpacing = defaultMinSpacing;\n  }\n  if (isNaN(maxSpacing)) {\n    maxSpacing = rangeExtent;\n  }\n  if (minSpacing > maxSpacing) {\n    if (minSpacing === defaultMinSpacing) {\n      minSpacing = maxSpacing;\n    } else {\n      maxSpacing = minSpacing;\n    }\n  }\n  const maxTickCount = clamp(1, Math.floor(rangeExtent / minSpacing), Math.min(Math.floor(rangeExtent), 100));\n  const minTickCount = Math.min(maxTickCount, Math.ceil(rangeExtent / maxSpacing));\n  const tickCount = clamp(minTickCount, defaultTickCount, maxTickCount);\n  return { minTickCount, maxTickCount, tickCount };\n}\n\n// packages/ag-charts-community/src/scale/logScale.ts\nvar _LogScale = class _LogScale extends ContinuousScale {\n  constructor() {\n    super([1, 10], [0, 1]);\n    this.type = \"log\";\n    this.base = 10;\n    this.baseLog = identity;\n    this.basePow = identity;\n    this.log = (x) => {\n      const start2 = Math.min(...this.domain);\n      return start2 >= 0 ? this.baseLog(x) : -this.baseLog(-x);\n    };\n    this.pow = (x) => {\n      const start2 = Math.min(...this.domain);\n      return start2 >= 0 ? this.basePow(x) : -this.basePow(-x);\n    };\n    this.defaultClampMode = \"clamped\";\n  }\n  toDomain(d) {\n    return d;\n  }\n  transform(x) {\n    const start2 = Math.min(...this.domain);\n    return start2 >= 0 ? Math.log(x) : -Math.log(-x);\n  }\n  transformInvert(x) {\n    const start2 = Math.min(...this.domain);\n    return start2 >= 0 ? Math.exp(x) : -Math.exp(-x);\n  }\n  refresh() {\n    if (this.base <= 0) {\n      this.base = 0;\n      Logger.warnOnce(\"expecting a finite Number greater than to 0\");\n    }\n    super.refresh();\n  }\n  update() {\n    if (!this.domain || this.domain.length < 2) {\n      return;\n    }\n    this.baseLog = _LogScale.getBaseLogMethod(this.base);\n    this.basePow = _LogScale.getBasePowerMethod(this.base);\n    if (this.nice) {\n      this.updateNiceDomain();\n    }\n  }\n  updateNiceDomain() {\n    const [d0, d1] = this.domain;\n    const roundStart = d0 > d1 ? Math.ceil : Math.floor;\n    const roundStop = d0 > d1 ? Math.floor : Math.ceil;\n    const n0 = this.pow(roundStart(this.log(d0)));\n    const n1 = this.pow(roundStop(this.log(d1)));\n    this.niceDomain = [n0, n1];\n  }\n  ticks() {\n    const count = this.tickCount ?? 10;\n    if (!this.domain || this.domain.length < 2 || count < 1) {\n      return [];\n    }\n    this.refresh();\n    const base = this.base;\n    const [d0, d1] = this.getDomain();\n    const start2 = Math.min(d0, d1);\n    const stop = Math.max(d0, d1);\n    let p0 = this.log(start2);\n    let p1 = this.log(stop);\n    if (this.interval) {\n      const inBounds = (tick) => tick >= start2 && tick <= stop;\n      const step = Math.min(Math.abs(this.interval), Math.abs(p1 - p0));\n      const ticks2 = range(p0, p1, step).map(this.pow).filter(inBounds);\n      if (!isDenseInterval(ticks2.length, this.getPixelRange())) {\n        return ticks2;\n      }\n    }\n    const isBaseInteger = base % 1 === 0;\n    const isDiffLarge = p1 - p0 >= count;\n    if (!isBaseInteger || isDiffLarge) {\n      return createTicks(p0, p1, Math.min(p1 - p0, count)).map(this.pow);\n    }\n    const ticks = [];\n    const isPositive = start2 > 0;\n    p0 = Math.floor(p0) - 1;\n    p1 = Math.round(p1) + 1;\n    const availableSpacing = findRangeExtent(this.range) / count;\n    let lastTickPosition = Infinity;\n    for (let p = p0; p <= p1; p++) {\n      const nextMagnitudeTickPosition = this.convert(this.pow(p + 1));\n      for (let k = 1; k < base; k++) {\n        const q = isPositive ? k : base - k + 1;\n        const t = this.pow(p) * q;\n        const tickPosition = this.convert(t);\n        const prevSpacing = Math.abs(lastTickPosition - tickPosition);\n        const nextSpacing = Math.abs(tickPosition - nextMagnitudeTickPosition);\n        const fits = prevSpacing >= availableSpacing && nextSpacing >= availableSpacing;\n        if (t >= start2 && t <= stop && (k === 1 || fits || ticks.length === 0)) {\n          ticks.push(t);\n          lastTickPosition = tickPosition;\n        }\n      }\n    }\n    return ticks;\n  }\n  tickFormat({\n    count,\n    ticks,\n    specifier\n  }) {\n    if (count !== Infinity && ticks == null) {\n      this.ticks();\n    }\n    specifier ?? (specifier = this.base === 10 ? \".0e\" : \",\");\n    return isString(specifier) ? numberFormat(specifier) : specifier;\n  }\n  static getBaseLogMethod(base) {\n    switch (base) {\n      case 10:\n        return Math.log10;\n      case Math.E:\n        return Math.log;\n      case 2:\n        return Math.log2;\n      default:\n        return (x) => Math.log(x) / Math.log(base);\n    }\n  }\n  static getBasePowerMethod(base) {\n    switch (base) {\n      case 10:\n        return (x) => x >= 0 ? 10 ** x : 1 / 10 ** -x;\n      case Math.E:\n        return Math.exp;\n      default:\n        return (x) => base ** x;\n    }\n  }\n};\n__decorateClass([\n  Invalidating\n], _LogScale.prototype, \"base\", 2);\nvar LogScale = _LogScale;\n\n// packages/ag-charts-community/src/scale/timeScale.ts\nvar TimeScale = class _TimeScale extends ContinuousScale {\n  constructor() {\n    super([], [0, 1]);\n    this.type = \"time\";\n  }\n  toDomain(d) {\n    return new Date(d);\n  }\n  convert(x, opts) {\n    return super.convert(new Date(x), opts);\n  }\n  invert(y) {\n    return new Date(super.invert(y));\n  }\n  /**\n   * Returns uniformly-spaced dates that represent the scale's domain.\n   */\n  ticks() {\n    if (!this.domain || this.domain.length < 2) {\n      return [];\n    }\n    this.refresh();\n    const { interval, nice, tickCount, minTickCount, maxTickCount } = this;\n    const [start2, stop] = findMinMax(this.getDomain().map(dateToNumber));\n    if (interval != null) {\n      return _TimeScale.getTicksForInterval({ start: start2, stop, interval, availableRange: this.getPixelRange() }) ?? _TimeScale.getDefaultTicks({ start: start2, stop, tickCount, minTickCount, maxTickCount });\n    } else if (nice && tickCount === 2) {\n      return this.niceDomain;\n    } else if (nice && tickCount === 1) {\n      return this.niceDomain.slice(0, 1);\n    }\n    return _TimeScale.getDefaultTicks({ start: start2, stop, tickCount, minTickCount, maxTickCount });\n  }\n  static getDefaultTicks({\n    start: start2,\n    stop,\n    tickCount,\n    minTickCount,\n    maxTickCount\n  }) {\n    const t = getTickInterval(start2, stop, tickCount, minTickCount, maxTickCount);\n    return t ? t.range(new Date(start2), new Date(stop)) : [];\n  }\n  static getTicksForInterval({\n    start: start2,\n    stop,\n    interval,\n    availableRange\n  }) {\n    if (!interval) {\n      return [];\n    }\n    if (interval instanceof TimeInterval) {\n      const ticks2 = interval.range(new Date(start2), new Date(stop));\n      if (isDenseInterval(ticks2.length, availableRange)) {\n        return;\n      }\n      return ticks2;\n    }\n    const absInterval = Math.abs(interval);\n    if (isDenseInterval((stop - start2) / absInterval, availableRange))\n      return;\n    const timeInterval = TickIntervals.findLast((tickInterval) => absInterval % tickInterval.duration === 0);\n    if (timeInterval) {\n      const i = timeInterval.timeInterval.every(absInterval / (timeInterval.duration / timeInterval.step));\n      return i.range(new Date(start2), new Date(stop));\n    }\n    let date = new Date(start2);\n    const stopDate = new Date(stop);\n    const ticks = [];\n    while (date <= stopDate) {\n      ticks.push(date);\n      date = new Date(date);\n      date.setMilliseconds(date.getMilliseconds() + absInterval);\n    }\n    return ticks;\n  }\n  /**\n   * Returns a time format function suitable for displaying tick values.\n   *\n   * @param ticks Optional array of tick values for custom formatting.\n   * @param domain Optional array representing the [min, max] values of the time axis.\n   * @param specifier Optional format specifier string for custom date formatting (e.g., `%Y`, `%m`, `%d`).\n   * @param formatOffset Optional number for applying an offset to the format (e.g., timezone shifts).\n   * @returns A function that formats a `Date` object into a string based on the provided specifier or default format.\n   */\n  tickFormat({\n    ticks,\n    domain,\n    specifier,\n    formatOffset\n  }) {\n    return specifier == null ? defaultTimeTickFormat(ticks, domain, formatOffset) : buildFormatter(specifier);\n  }\n  update() {\n    if (!this.domain || this.domain.length < 2) {\n      return;\n    }\n    if (this.nice) {\n      this.updateNiceDomain();\n    }\n  }\n  /**\n   * Extends the domain so that it starts and ends on nice round values.\n   * This method typically modifies the scale\u2019s domain, and may only extend the bounds to the nearest round value.\n   */\n  updateNiceDomain() {\n    const maxAttempts = 4;\n    let [d0, d1] = this.domain;\n    for (let i = 0; i < maxAttempts; i++) {\n      this.updateNiceDomainIteration(d0, d1);\n      const [n0, n1] = this.niceDomain;\n      if (dateToNumber(d0) === dateToNumber(n0) && dateToNumber(d1) === dateToNumber(n1)) {\n        break;\n      }\n      d0 = n0;\n      d1 = n1;\n    }\n  }\n  updateNiceDomainIteration(d0, d1) {\n    const start2 = Math.min(dateToNumber(d0), dateToNumber(d1));\n    const stop = Math.max(dateToNumber(d0), dateToNumber(d1));\n    const isReversed = d0 > d1;\n    const { interval } = this;\n    let i;\n    if (interval instanceof TimeInterval) {\n      i = interval;\n    } else {\n      const tickCount = typeof interval === \"number\" ? (stop - start2) / Math.max(interval, 1) : this.tickCount;\n      i = getTickInterval(start2, stop, tickCount, this.minTickCount, this.maxTickCount);\n    }\n    if (i) {\n      const intervalRange = i.range(new Date(start2), new Date(stop), true);\n      const domain = isReversed ? [...intervalRange].reverse() : intervalRange;\n      const n0 = domain[0];\n      const n1 = domain.at(-1);\n      this.niceDomain = [n0, n1];\n    }\n  }\n};\n\n// packages/ag-charts-community/src/scale/ordinalTimeScale.ts\nfunction compareNumbers(a, b) {\n  return a - b;\n}\nvar _OrdinalTimeScale = class _OrdinalTimeScale extends BandScale {\n  constructor() {\n    super(...arguments);\n    this.type = \"ordinal-time\";\n    this.tickCount = ContinuousScale.defaultTickCount;\n    this.minTickCount = 0;\n    this.maxTickCount = Infinity;\n    this.interval = void 0;\n    this._domain = [];\n    this.timestamps = [];\n    this.sortedTimestamps = [];\n    this.visibleRange = [0, 1];\n  }\n  static is(value) {\n    return value instanceof _OrdinalTimeScale;\n  }\n  setVisibleRange(visibleRange) {\n    this.visibleRange = visibleRange;\n  }\n  set domain(values) {\n    this.invalid = true;\n    if (values.length === 0) {\n      this._domain = [];\n      return;\n    }\n    this._domain = values;\n    this.timestamps = unique(values.map(dateToNumber));\n    this.sortedTimestamps = this.timestamps.slice().sort(compareNumbers);\n  }\n  get domain() {\n    return this._domain;\n  }\n  ticks() {\n    this.refresh();\n    const [t0, t1] = [this.timestamps[0], this.timestamps.at(-1)];\n    const start2 = Math.min(t0, t1);\n    const stop = Math.max(t0, t1);\n    const isReversed = t0 > t1;\n    let ticks;\n    if (this.interval == null) {\n      ticks = this.getDefaultTicks(this.maxTickCount, isReversed);\n    } else {\n      const [r0, r1] = this.range;\n      const availableRange = Math.abs(r1 - r0);\n      ticks = TimeScale.getTicksForInterval({ start: start2, stop, interval: this.interval, availableRange }) ?? [];\n    }\n    const tickPositions = /* @__PURE__ */ new Set();\n    return ticks.filter((tick) => {\n      const position = this.convert(tick);\n      if (isNaN(position) || tickPositions.has(position)) {\n        return false;\n      }\n      tickPositions.add(position);\n      return true;\n    });\n  }\n  getDefaultTicks(maxTickCount, isReversed) {\n    const ticks = [];\n    const count = this.timestamps.length;\n    const tickEvery = Math.ceil(count * (this.visibleRange[1] - this.visibleRange[0]) / maxTickCount);\n    const tickOffset = Math.floor(tickEvery / 2);\n    for (const [index, value] of this.timestamps.entries()) {\n      if (tickEvery > 0 && (index + tickOffset) % tickEvery)\n        continue;\n      if (isReversed) {\n        ticks.push(new Date(this.timestamps[count - index - 1]));\n      } else {\n        ticks.push(new Date(value));\n      }\n    }\n    return ticks;\n  }\n  convert(d) {\n    this.refresh();\n    const n = Number(d);\n    if (n < this.sortedTimestamps[0]) {\n      return NaN;\n    }\n    let i = this.findInterval(n);\n    if (this.timestamps[0] !== this.sortedTimestamps[0]) {\n      i = this.timestamps.length - i - 1;\n    }\n    return this.ordinalRange[i] ?? NaN;\n  }\n  findInterval(target) {\n    const { sortedTimestamps } = this;\n    let low = 0;\n    let high = sortedTimestamps.length - 1;\n    while (low <= high) {\n      const mid = Math.floor((low + high) / 2);\n      if (sortedTimestamps[mid] === target) {\n        return mid;\n      } else if (sortedTimestamps[mid] < target) {\n        low = mid + 1;\n      } else {\n        high = mid - 1;\n      }\n    }\n    return low;\n  }\n  /**\n   * Returns a time format function suitable for displaying tick values.\n   * @param specifier If the specifier string is provided, this method is equivalent to\n   * the {@link TimeLocaleObject.format} method.\n   * If no specifier is provided, this method returns the default time format function.\n   */\n  tickFormat({\n    ticks,\n    domain,\n    specifier\n  }) {\n    return specifier == null ? defaultTimeTickFormat(ticks, domain) : buildFormatter(specifier);\n  }\n  invert(position) {\n    this.refresh();\n    const index = this.ordinalRange.findIndex((p) => position <= p);\n    return this.domain[index];\n  }\n  invertNearest(y) {\n    return new Date(super.invertNearest(y));\n  }\n};\n__decorateClass([\n  Invalidating\n], _OrdinalTimeScale.prototype, \"tickCount\", 2);\n__decorateClass([\n  Invalidating\n], _OrdinalTimeScale.prototype, \"minTickCount\", 2);\n__decorateClass([\n  Invalidating\n], _OrdinalTimeScale.prototype, \"maxTickCount\", 2);\n__decorateClass([\n  Invalidating\n], _OrdinalTimeScale.prototype, \"interval\", 2);\nvar OrdinalTimeScale = _OrdinalTimeScale;\n\n// packages/ag-charts-community/src/util/compare.ts\nfunction ascendingStringNumberUndefined(a, b) {\n  if (typeof a === \"number\" && typeof b === \"number\") {\n    return a - b;\n  } else if (typeof a === \"string\" && typeof b === \"string\") {\n    return a.localeCompare(b);\n  } else if (a == null && b == null) {\n    return 0;\n  } else if (a == null) {\n    return -1;\n  } else if (b == null) {\n    return 1;\n  }\n  return String(a).localeCompare(String(b));\n}\nfunction toLiteral(v) {\n  return typeof v === \"function\" ? v() : v;\n}\nfunction compoundAscending(a, b, comparator) {\n  for (const idx in a) {\n    const diff2 = comparator(toLiteral(a[idx]), toLiteral(b[idx]));\n    if (diff2 !== 0) {\n      return diff2;\n    }\n  }\n  return 0;\n}\n\n// packages/ag-charts-community/src/scene/debug.util.ts\nfunction nodeCount(node) {\n  let count = 1;\n  let visibleCount = node.visible ? 1 : 0;\n  let dirtyCount = node.dirty > 0 /* NONE */ ? 1 : 0;\n  for (const child of node.children(false)) {\n    const c = nodeCount(child);\n    count += c.count;\n    dirtyCount += c.dirtyCount;\n    visibleCount += c.visibleCount;\n  }\n  return { count, visibleCount, dirtyCount };\n}\n\n// packages/ag-charts-community/src/scene/matrix.ts\nvar IDENTITY_MATRIX_ELEMENTS = Object.freeze([1, 0, 0, 1, 0, 0]);\nfunction closeValue(val, ref, errorMargin = 1e-8) {\n  return val === ref || Math.abs(ref - val) < errorMargin;\n}\nvar _Matrix = class _Matrix {\n  get e() {\n    return [...this.elements];\n  }\n  constructor(elements2 = [...IDENTITY_MATRIX_ELEMENTS]) {\n    this.elements = elements2;\n  }\n  setElements(elements2) {\n    const e = this.elements;\n    e[0] = elements2[0];\n    e[1] = elements2[1];\n    e[2] = elements2[2];\n    e[3] = elements2[3];\n    e[4] = elements2[4];\n    e[5] = elements2[5];\n    return this;\n  }\n  get identity() {\n    const e = this.elements;\n    return closeValue(e[0], 1) && closeValue(e[1], 0) && closeValue(e[2], 0) && closeValue(e[3], 1) && closeValue(e[4], 0) && closeValue(e[5], 0);\n  }\n  /**\n   * Performs the AxB matrix multiplication and saves the result\n   * to `C`, if given, or to `A` otherwise.\n   */\n  AxB(A, B, C) {\n    const a = A[0] * B[0] + A[2] * B[1], b = A[1] * B[0] + A[3] * B[1], c = A[0] * B[2] + A[2] * B[3], d = A[1] * B[2] + A[3] * B[3], e = A[0] * B[4] + A[2] * B[5] + A[4], f = A[1] * B[4] + A[3] * B[5] + A[5];\n    C = C ?? A;\n    C[0] = a;\n    C[1] = b;\n    C[2] = c;\n    C[3] = d;\n    C[4] = e;\n    C[5] = f;\n  }\n  /**\n   * The `other` matrix gets post-multiplied to the current matrix.\n   * Returns the current matrix.\n   * @param other\n   */\n  multiplySelf(other) {\n    this.AxB(this.elements, other.elements);\n    return this;\n  }\n  /**\n   * The `other` matrix gets post-multiplied to the current matrix.\n   * Returns a new matrix.\n   * @param other\n   */\n  multiply(other) {\n    const elements2 = new Array(6);\n    if (other instanceof _Matrix) {\n      this.AxB(this.elements, other.elements, elements2);\n    } else {\n      this.AxB(this.elements, [other.a, other.b, other.c, other.d, other.e, other.f], elements2);\n    }\n    return new _Matrix(elements2);\n  }\n  preMultiplySelf(other) {\n    this.AxB(other.elements, this.elements, this.elements);\n    return this;\n  }\n  /**\n   * Returns the inverse of this matrix as a new matrix.\n   */\n  inverse() {\n    const el = this.elements;\n    let a = el[0], b = el[1], c = el[2], d = el[3];\n    const e = el[4], f = el[5];\n    const rD = 1 / (a * d - b * c);\n    a *= rD;\n    b *= rD;\n    c *= rD;\n    d *= rD;\n    return new _Matrix([d, -b, -c, a, c * f - d * e, b * e - a * f]);\n  }\n  /**\n   * Save the inverse of this matrix to the given matrix.\n   */\n  inverseTo(other) {\n    const el = this.elements;\n    let a = el[0], b = el[1], c = el[2], d = el[3];\n    const e = el[4], f = el[5];\n    const rD = 1 / (a * d - b * c);\n    a *= rD;\n    b *= rD;\n    c *= rD;\n    d *= rD;\n    other.setElements([d, -b, -c, a, c * f - d * e, b * e - a * f]);\n    return this;\n  }\n  invertSelf() {\n    const el = this.elements;\n    let a = el[0], b = el[1], c = el[2], d = el[3];\n    const e = el[4], f = el[5];\n    const rD = 1 / (a * d - b * c);\n    a *= rD;\n    b *= rD;\n    c *= rD;\n    d *= rD;\n    el[0] = d;\n    el[1] = -b;\n    el[2] = -c;\n    el[3] = a;\n    el[4] = c * f - d * e;\n    el[5] = b * e - a * f;\n    return this;\n  }\n  transformPoint(x, y) {\n    const e = this.elements;\n    return {\n      x: x * e[0] + y * e[2] + e[4],\n      y: x * e[1] + y * e[3] + e[5]\n    };\n  }\n  transformBBox(bbox, target) {\n    const el = this.elements;\n    const xx = el[0];\n    const xy = el[1];\n    const yx = el[2];\n    const yy = el[3];\n    const h_w = bbox.width * 0.5;\n    const h_h = bbox.height * 0.5;\n    const cx = bbox.x + h_w;\n    const cy = bbox.y + h_h;\n    const w = Math.abs(h_w * xx) + Math.abs(h_h * yx);\n    const h = Math.abs(h_w * xy) + Math.abs(h_h * yy);\n    target ?? (target = new BBox(0, 0, 0, 0));\n    target.x = cx * xx + cy * yx + el[4] - w;\n    target.y = cx * xy + cy * yy + el[5] - h;\n    target.width = w + w;\n    target.height = h + h;\n    return target;\n  }\n  toContext(ctx) {\n    if (this.identity) {\n      return;\n    }\n    const e = this.elements;\n    ctx.transform(e[0], e[1], e[2], e[3], e[4], e[5]);\n  }\n  static flyweight(sourceMatrix) {\n    return _Matrix.instance.setElements(sourceMatrix.elements);\n  }\n  static updateTransformMatrix(matrix, scalingX, scalingY, rotation, translationX, translationY, opts) {\n    const sx = scalingX;\n    const sy = scalingY;\n    let scx;\n    let scy;\n    if (sx === 1 && sy === 1) {\n      scx = 0;\n      scy = 0;\n    } else {\n      scx = opts?.scalingCenterX ?? 0;\n      scy = opts?.scalingCenterY ?? 0;\n    }\n    const r = rotation;\n    const cos = Math.cos(r);\n    const sin = Math.sin(r);\n    let rcx;\n    let rcy;\n    if (r === 0) {\n      rcx = 0;\n      rcy = 0;\n    } else {\n      rcx = opts?.rotationCenterX ?? 0;\n      rcy = opts?.rotationCenterY ?? 0;\n    }\n    const tx = translationX;\n    const ty = translationY;\n    const tx4 = scx * (1 - sx) - rcx;\n    const ty4 = scy * (1 - sy) - rcy;\n    matrix.setElements([\n      cos * sx,\n      sin * sx,\n      -sin * sy,\n      cos * sy,\n      cos * tx4 - sin * ty4 + rcx + tx,\n      sin * tx4 + cos * ty4 + rcy + ty\n    ]);\n    return matrix;\n  }\n  static fromContext(ctx) {\n    const domMatrix = ctx.getTransform();\n    return new _Matrix([domMatrix.a, domMatrix.b, domMatrix.c, domMatrix.d, domMatrix.e, domMatrix.f]);\n  }\n};\n_Matrix.instance = new _Matrix();\nvar Matrix = _Matrix;\n\n// packages/ag-charts-community/src/scene/transformable.ts\nfunction isMatrixTransform(node) {\n  return isMatrixTransformType(node.constructor);\n}\nvar MATRIX_TRANSFORM_TYPE = Symbol(\"isMatrixTransform\");\nfunction isMatrixTransformType(cstr) {\n  return cstr[MATRIX_TRANSFORM_TYPE] === true;\n}\nfunction MatrixTransform(Parent) {\n  var _a, _b;\n  const ParentNode = Parent;\n  if (isMatrixTransformType(Parent)) {\n    return Parent;\n  }\n  const TRANSFORM_MATRIX = Symbol(\"matrix_combined_transform\");\n  class MatrixTransformInternal extends ParentNode {\n    constructor() {\n      super(...arguments);\n      this[_b] = new Matrix();\n      this._dirtyTransform = true;\n    }\n    markDirtyTransform() {\n      this._dirtyTransform = true;\n      super.markDirty(3 /* MAJOR */);\n    }\n    updateMatrix(_matrix) {\n    }\n    computeTransformMatrix() {\n      if (!this._dirtyTransform)\n        return;\n      this[TRANSFORM_MATRIX].setElements(IDENTITY_MATRIX_ELEMENTS);\n      this.updateMatrix(this[TRANSFORM_MATRIX]);\n      this._dirtyTransform = false;\n    }\n    toParent(bbox) {\n      this.computeTransformMatrix();\n      if (this[TRANSFORM_MATRIX].identity)\n        return bbox.clone();\n      return this[TRANSFORM_MATRIX].transformBBox(bbox);\n    }\n    toParentPoint(x, y) {\n      this.computeTransformMatrix();\n      if (this[TRANSFORM_MATRIX].identity)\n        return { x, y };\n      return this[TRANSFORM_MATRIX].transformPoint(x, y);\n    }\n    fromParent(bbox) {\n      this.computeTransformMatrix();\n      if (this[TRANSFORM_MATRIX].identity)\n        return bbox.clone();\n      return this[TRANSFORM_MATRIX].inverse().transformBBox(bbox);\n    }\n    fromParentPoint(x, y) {\n      this.computeTransformMatrix();\n      if (this[TRANSFORM_MATRIX].identity)\n        return { x, y };\n      return this[TRANSFORM_MATRIX].inverse().transformPoint(x, y);\n    }\n    computeBBox() {\n      const bbox = super.computeBBox();\n      if (!bbox)\n        return bbox;\n      return this.toParent(bbox);\n    }\n    computeBBoxWithoutTransforms() {\n      return super.computeBBox();\n    }\n    pickNode(x, y, localCoords = false) {\n      if (!localCoords) {\n        ({ x, y } = this.fromParentPoint(x, y));\n      }\n      return super.pickNode(x, y);\n    }\n    render(renderCtx) {\n      if (this._dirtyTransform) {\n        this.computeTransformMatrix();\n        if (!renderCtx.forceRender) {\n          renderCtx = { ...renderCtx, forceRender: \"dirtyTransform\" };\n        }\n      }\n      const matrix = this[TRANSFORM_MATRIX];\n      let performRestore = false;\n      if (!matrix.identity) {\n        renderCtx.ctx.save();\n        performRestore = true;\n        matrix.toContext(renderCtx.ctx);\n      }\n      super.render(renderCtx);\n      if (performRestore) {\n        renderCtx.ctx.restore();\n      }\n    }\n    toSVG() {\n      const svg = super.toSVG();\n      const matrix = this[TRANSFORM_MATRIX];\n      if (matrix.identity || svg == null)\n        return svg;\n      const g = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n      g.append(...svg.elements);\n      const [a, b, c, d, e, f] = matrix.e;\n      g.setAttribute(\"transform\", `matrix(${a} ${b} ${c} ${d} ${e} ${f})`);\n      return {\n        elements: [g],\n        defs: svg.defs\n      };\n    }\n  }\n  _a = MATRIX_TRANSFORM_TYPE, _b = TRANSFORM_MATRIX;\n  MatrixTransformInternal[_a] = true;\n  return MatrixTransformInternal;\n}\nfunction Rotatable(Parent) {\n  var _a;\n  const ParentNode = Parent;\n  const ROTATABLE_MATRIX = Symbol(\"matrix_rotation\");\n  class RotatableInternal extends MatrixTransform(ParentNode) {\n    constructor() {\n      super(...arguments);\n      this[_a] = new Matrix();\n      this.rotationCenterX = null;\n      this.rotationCenterY = null;\n      this.rotation = 0;\n    }\n    updateMatrix(matrix) {\n      super.updateMatrix(matrix);\n      const { rotation, rotationCenterX, rotationCenterY } = this;\n      if (rotation === 0)\n        return;\n      Matrix.updateTransformMatrix(this[ROTATABLE_MATRIX], 1, 1, rotation, 0, 0, {\n        rotationCenterX,\n        rotationCenterY\n      });\n      matrix.multiplySelf(this[ROTATABLE_MATRIX]);\n    }\n  }\n  _a = ROTATABLE_MATRIX;\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], RotatableInternal.prototype, \"rotationCenterX\", 2);\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], RotatableInternal.prototype, \"rotationCenterY\", 2);\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], RotatableInternal.prototype, \"rotation\", 2);\n  return RotatableInternal;\n}\nfunction Scalable(Parent) {\n  var _a;\n  const ParentNode = Parent;\n  const SCALABLE_MATRIX = Symbol(\"matrix_scale\");\n  class ScalableInternal extends MatrixTransform(ParentNode) {\n    constructor() {\n      super(...arguments);\n      this[_a] = new Matrix();\n      this.scalingX = 1;\n      this.scalingY = 1;\n      this.scalingCenterX = null;\n      this.scalingCenterY = null;\n    }\n    updateMatrix(matrix) {\n      super.updateMatrix(matrix);\n      const { scalingX, scalingY, scalingCenterX, scalingCenterY } = this;\n      if (scalingX === 1 && scalingY === 1)\n        return;\n      Matrix.updateTransformMatrix(this[SCALABLE_MATRIX], scalingX, scalingY, 0, 0, 0, {\n        scalingCenterX,\n        scalingCenterY\n      });\n      matrix.multiplySelf(this[SCALABLE_MATRIX]);\n    }\n  }\n  _a = SCALABLE_MATRIX;\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], ScalableInternal.prototype, \"scalingX\", 2);\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], ScalableInternal.prototype, \"scalingY\", 2);\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], ScalableInternal.prototype, \"scalingCenterX\", 2);\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], ScalableInternal.prototype, \"scalingCenterY\", 2);\n  return ScalableInternal;\n}\nfunction Translatable(Parent) {\n  var _a;\n  const ParentNode = Parent;\n  const TRANSLATABLE_MATRIX = Symbol(\"matrix_translation\");\n  class TranslatableInternal extends MatrixTransform(ParentNode) {\n    constructor() {\n      super(...arguments);\n      this[_a] = new Matrix();\n      this.translationX = 0;\n      this.translationY = 0;\n    }\n    updateMatrix(matrix) {\n      super.updateMatrix(matrix);\n      const { translationX, translationY } = this;\n      if (translationX === 0 && translationY === 0)\n        return;\n      Matrix.updateTransformMatrix(this[TRANSLATABLE_MATRIX], 1, 1, 0, translationX, translationY);\n      matrix.multiplySelf(this[TRANSLATABLE_MATRIX]);\n    }\n  }\n  _a = TRANSLATABLE_MATRIX;\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], TranslatableInternal.prototype, \"translationX\", 2);\n  __decorateClass([\n    SceneChangeDetection({ type: \"transform\" })\n  ], TranslatableInternal.prototype, \"translationY\", 2);\n  return TranslatableInternal;\n}\nvar Transformable = class {\n  /**\n   * Converts a BBox from canvas coordinate space into the coordinate space of the given Node.\n   */\n  static fromCanvas(node, bbox) {\n    const parents = [];\n    for (const parent of node.traverseUp()) {\n      if (isMatrixTransform(parent)) {\n        parents.unshift(parent);\n      }\n    }\n    for (const parent of parents) {\n      bbox = parent.fromParent(bbox);\n    }\n    if (isMatrixTransform(node)) {\n      bbox = node.fromParent(bbox);\n    }\n    return bbox;\n  }\n  /**\n   * Converts a Nodes BBox (or an arbitrary BBox if supplied) from local Node coordinate space\n   * into the Canvas coordinate space.\n   */\n  static toCanvas(node, bbox) {\n    if (bbox == null) {\n      bbox = node.getBBox();\n    } else if (isMatrixTransform(node)) {\n      bbox = node.toParent(bbox);\n    }\n    for (const parent of node.traverseUp()) {\n      if (isMatrixTransform(parent)) {\n        bbox = parent.toParent(bbox);\n      }\n    }\n    return bbox;\n  }\n  /**\n   * Converts a point from canvas coordinate space into the coordinate space of the given Node.\n   */\n  static fromCanvasPoint(node, x, y) {\n    const parents = [];\n    for (const parent of node.traverseUp()) {\n      if (isMatrixTransform(parent)) {\n        parents.unshift(parent);\n      }\n    }\n    for (const parent of parents) {\n      ({ x, y } = parent.fromParentPoint(x, y));\n    }\n    if (isMatrixTransform(node)) {\n      ({ x, y } = node.fromParentPoint(x, y));\n    }\n    return { x, y };\n  }\n  /**\n   * Converts a point from a Nodes local coordinate space into the Canvas coordinate space.\n   */\n  static toCanvasPoint(node, x, y) {\n    if (isMatrixTransform(node)) {\n      ({ x, y } = node.toParentPoint(x, y));\n    }\n    for (const parent of node.traverseUp()) {\n      if (isMatrixTransform(parent)) {\n        ({ x, y } = parent.toParentPoint(x, y));\n      }\n    }\n    return { x, y };\n  }\n};\n\n// packages/ag-charts-community/src/scene/group.ts\nvar _Group = class _Group extends Node {\n  constructor(opts) {\n    super(opts);\n    this.opts = opts;\n    this.opacity = 1;\n    this.isContainerNode = true;\n    this.zIndexSubOrder = opts?.zIndexSubOrder;\n  }\n  static is(value) {\n    return value instanceof _Group;\n  }\n  static computeChildrenBBox(nodes, skipInvisible = true) {\n    return BBox.merge(Node.extractBBoxes(nodes, skipInvisible));\n  }\n  static compareChildren(a, b) {\n    return compoundAscending(\n      [a.zIndex, ...a.zIndexSubOrder ?? [void 0, void 0], a.serialNumber],\n      [b.zIndex, ...b.zIndexSubOrder ?? [void 0, void 0], b.serialNumber],\n      ascendingStringNumberUndefined\n    );\n  }\n  // We consider a group to be boundless, thus any point belongs to it.\n  containsPoint(_x, _y) {\n    return true;\n  }\n  computeBBox() {\n    return _Group.computeChildrenBBox(this.children());\n  }\n  preRender() {\n    const counts = super.preRender();\n    counts.groups += 1;\n    counts.nonGroups -= 1;\n    return counts;\n  }\n  isDirty(renderCtx) {\n    const { resized } = renderCtx;\n    const { dirty, dirtyZIndex } = this;\n    const isDirty = dirty >= 2 /* MINOR */ || dirtyZIndex || resized;\n    let isChildDirty = isDirty;\n    let isChildLayerDirty = false;\n    for (const child of this.children()) {\n      isChildDirty || (isChildDirty = child.layerManager == null && child.dirty >= 1 /* TRIVIAL */);\n      isChildLayerDirty || (isChildLayerDirty = child.layerManager != null && child.dirty >= 1 /* TRIVIAL */);\n      if (isChildDirty)\n        break;\n    }\n    if (this.opts?.name) {\n      this._debug?.({ name: this.opts.name, group: this, isDirty, isChildDirty, renderCtx });\n    }\n    return { isDirty, isChildDirty, isChildLayerDirty };\n  }\n  debugSkip(renderCtx) {\n    if (renderCtx.stats && this.opts?.name) {\n      this._debug?.({\n        name: this.opts.name,\n        group: this,\n        result: \"skipping\",\n        counts: nodeCount(this),\n        renderCtx\n      });\n    }\n  }\n  render(renderCtx, skip) {\n    if (skip) {\n      return super.render(renderCtx);\n    }\n    const { opts: { name } = {}, _debug: debug3 } = this;\n    const { isDirty, isChildDirty, isChildLayerDirty } = this.isDirty(renderCtx);\n    const { ctx, stats } = renderCtx;\n    let { forceRender } = renderCtx;\n    if (!isDirty && !isChildDirty && !isChildLayerDirty && !forceRender) {\n      this.debugSkip(renderCtx);\n      this.markClean({ recursive: false });\n      return;\n    }\n    if (forceRender !== \"dirtyTransform\") {\n      forceRender || (forceRender = this.dirtyZIndex);\n    }\n    ctx.globalAlpha *= this.opacity;\n    if (this.dirtyZIndex) {\n      this.sortChildren(_Group.compareChildren);\n    }\n    const children = this.sortedChildren();\n    const clipBBox = this.renderClip(renderCtx) ?? renderCtx.clipBBox;\n    const renderCtxChanged = forceRender !== renderCtx.forceRender || clipBBox !== renderCtx.clipBBox;\n    this.renderChildren(children, renderCtxChanged ? { ...renderCtx, forceRender, clipBBox } : renderCtx);\n    super.render(renderCtx);\n    if (this.clipRect) {\n      ctx.restore();\n    }\n    for (const child of this.virtualChildren()) {\n      child.markClean({ recursive: \"virtual\" });\n    }\n    if (name && stats) {\n      debug3?.({\n        name,\n        renderCtx,\n        result: \"rendered\",\n        skipped: stats.nodesSkipped,\n        counts: nodeCount(this),\n        group: this\n      });\n    }\n  }\n  sortedChildren() {\n    let children = this.children();\n    if (this.hasVirtualChildren()) {\n      children = [...children].sort(_Group.compareChildren);\n    }\n    return children;\n  }\n  renderClip(renderCtx) {\n    if (!this.clipRect)\n      return;\n    const { x, y, width: width2, height: height2 } = this.clipRect;\n    const { ctx } = renderCtx;\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(x, y, width2, height2);\n    ctx.clip();\n    this._debug?.(() => ({\n      name: this.opts?.name,\n      clipRect: this.clipRect,\n      ctxTransform: ctx.getTransform(),\n      renderCtx,\n      group: this\n    }));\n    return Transformable.toCanvas(this, this.clipRect);\n  }\n  renderChildren(children, renderCtx) {\n    const { ctx, forceRender, stats } = renderCtx;\n    for (const child of children) {\n      if (!child.visible || !this.visible) {\n        child.markClean();\n        if (stats) {\n          stats.nodesSkipped += nodeCount(child).count;\n        }\n        continue;\n      }\n      if (!forceRender && child.dirty === 0 /* NONE */) {\n        if (stats) {\n          stats.nodesSkipped += nodeCount(child).count;\n        }\n        continue;\n      }\n      ctx.save();\n      child.render(renderCtx);\n      ctx.restore();\n    }\n  }\n  /**\n   * Transforms bbox given in the canvas coordinate space to bbox in this group's coordinate space and\n   * sets this group's clipRect to the transformed bbox.\n   * @param bbox clipRect bbox in the canvas coordinate space.\n   */\n  setClipRect(bbox) {\n    this.clipRect = bbox ? Transformable.fromCanvas(this, bbox) : void 0;\n  }\n  /**\n   * Set the clip rect within the canvas coordinate space.\n   * @param bbox clipRect bbox in the canvas coordinate space.\n   */\n  setClipRectCanvasSpace(bbox) {\n    this.clipRect = bbox;\n  }\n  toSVG() {\n    if (!this.visible)\n      return;\n    const defs = [];\n    const elements2 = [];\n    for (const child of this.sortedChildren()) {\n      const svg = child.toSVG();\n      if (svg != null) {\n        elements2.push(...svg.elements);\n        if (svg.defs != null) {\n          defs.push(...svg.defs);\n        }\n      }\n    }\n    return { elements: elements2, defs };\n  }\n};\n_Group.className = \"Group\";\n__decorateClass([\n  SceneChangeDetection({\n    redraw: 3 /* MAJOR */,\n    convertor: (v) => clamp(0, v, 1)\n  })\n], _Group.prototype, \"opacity\", 2);\nvar Group = _Group;\nvar ScalableGroup = class extends Scalable(Group) {\n};\nvar RotatableGroup = class extends Rotatable(Group) {\n};\nvar TranslatableGroup = class extends Translatable(Group) {\n};\nvar TransformableGroup = class extends Rotatable(Translatable(Group)) {\n};\n\n// packages/ag-charts-community/src/util/debug.ts\nvar LONG_TIME_PERIOD_THRESHOLD = 2e3;\nvar timeOfLastLog = Date.now();\nvar logTimeGap = () => {\n  const timeSinceLastLog = Date.now() - timeOfLastLog;\n  if (timeSinceLastLog > LONG_TIME_PERIOD_THRESHOLD) {\n    const prettyDuration = (Math.floor(timeSinceLastLog / 100) / 10).toFixed(1);\n    Logger.log(`**** ${prettyDuration}s since last log message ****`);\n  }\n  timeOfLastLog = Date.now();\n};\nvar Debug = {\n  create(...debugSelectors) {\n    const resultFn = (...logContent) => {\n      if (Debug.check(...debugSelectors)) {\n        if (typeof logContent[0] === \"function\") {\n          logContent = toArray(logContent[0]());\n        }\n        logTimeGap();\n        Logger.log(...logContent);\n      }\n    };\n    return Object.assign(resultFn, { check: () => Debug.check(...debugSelectors) });\n  },\n  check(...debugSelectors) {\n    if (debugSelectors.length === 0) {\n      debugSelectors.push(true);\n    }\n    const chartDebug = toArray(getWindow(\"agChartsDebug\"));\n    return chartDebug.some((selector) => debugSelectors.includes(selector));\n  }\n};\n\n// packages/ag-charts-community/src/scene/selection.ts\nvar Selection = class _Selection {\n  constructor(parentNode, classOrFactory, autoCleanup = true) {\n    this.parentNode = parentNode;\n    this.autoCleanup = autoCleanup;\n    this.garbageBin = /* @__PURE__ */ new Set();\n    this._nodesMap = /* @__PURE__ */ new Map();\n    this._nodes = [];\n    this.data = [];\n    this.debug = Debug.create(true, \"scene\", \"scene:selections\");\n    this.nodeFactory = Object.prototype.isPrototypeOf.call(Node, classOrFactory) ? () => new classOrFactory() : classOrFactory;\n  }\n  static select(parent, classOrFactory, garbageCollection = true) {\n    return new _Selection(parent, classOrFactory, garbageCollection);\n  }\n  static selectAll(parent, predicate) {\n    const results = [];\n    const traverse = (node) => {\n      if (predicate(node)) {\n        results.push(node);\n      }\n      for (const child of node.children()) {\n        traverse(child);\n      }\n    };\n    traverse(parent);\n    return results;\n  }\n  static selectByClass(node, ...Classes) {\n    return _Selection.selectAll(node, (n) => Classes.some((C) => n instanceof C));\n  }\n  static selectByTag(node, tag) {\n    return _Selection.selectAll(node, (n) => n.tag === tag);\n  }\n  createNode(datum, initializer, idx) {\n    const node = this.nodeFactory(datum);\n    node.datum = datum;\n    initializer?.(node);\n    if (idx == null) {\n      this._nodes.push(node);\n    } else {\n      this._nodes.splice(idx, 0, node);\n    }\n    this.parentNode.appendChild(node);\n    return node;\n  }\n  /**\n   * Update the data in a selection. If an `getDatumId()` function is provided, maintain a list of ids related to\n   * the nodes. Otherwise, take the more efficient route of simply creating and destroying nodes at the end\n   * of the array.\n   */\n  update(data, initializer, getDatumId) {\n    if (this.garbageBin.size > 0) {\n      this.debug(`Selection - update() called with pending garbage: ${data}`);\n    }\n    if (getDatumId) {\n      const dataMap = new Map(\n        data.map((datum, idx) => [getDatumId(datum), [datum, idx]])\n      );\n      for (const [node, datumId] of this._nodesMap.entries()) {\n        if (dataMap.has(datumId)) {\n          const [newDatum] = dataMap.get(datumId);\n          node.datum = newDatum;\n          this.garbageBin.delete(node);\n          dataMap.delete(datumId);\n        } else {\n          this.garbageBin.add(node);\n        }\n      }\n      for (const [datumId, [datum, idx]] of dataMap.entries()) {\n        this._nodesMap.set(this.createNode(datum, initializer, idx), datumId);\n      }\n    } else {\n      const maxLength = Math.max(data.length, this.data.length);\n      for (let i = 0; i < maxLength; i++) {\n        if (i >= data.length) {\n          this.garbageBin.add(this._nodes[i]);\n        } else if (i >= this._nodes.length) {\n          this.createNode(data[i], initializer);\n        } else {\n          this._nodes[i].datum = data[i];\n          this.garbageBin.delete(this._nodes[i]);\n        }\n      }\n    }\n    this.data = data.slice();\n    if (this.autoCleanup) {\n      this.cleanup();\n    }\n    return this;\n  }\n  cleanup() {\n    if (this.garbageBin.size === 0) {\n      return this;\n    }\n    this._nodes = this._nodes.filter((node) => {\n      if (this.garbageBin.has(node)) {\n        this._nodesMap.delete(node);\n        this.garbageBin.delete(node);\n        node.destroy();\n        return false;\n      }\n      return true;\n    });\n    return this;\n  }\n  clear() {\n    this.update([]);\n    return this;\n  }\n  isGarbage(node) {\n    return this.garbageBin.has(node);\n  }\n  hasGarbage() {\n    return this.garbageBin.size > 0;\n  }\n  each(iterate2) {\n    for (const entry of this._nodes.entries()) {\n      iterate2(entry[1], entry[1].datum, entry[0]);\n    }\n    return this;\n  }\n  *[Symbol.iterator]() {\n    for (let index = 0; index < this._nodes.length; index++) {\n      const node = this._nodes[index];\n      yield { node, datum: node.datum, index };\n    }\n  }\n  select(predicate) {\n    return _Selection.selectAll(this.parentNode, predicate);\n  }\n  selectByClass(Class) {\n    return _Selection.selectByClass(this.parentNode, Class);\n  }\n  selectByTag(tag) {\n    return _Selection.selectByTag(this.parentNode, tag);\n  }\n  nodes() {\n    return this._nodes;\n  }\n  at(index) {\n    return this._nodes.at(index);\n  }\n};\n\n// packages/ag-charts-community/src/util/angle.ts\nvar twoPi = Math.PI * 2;\nfunction normalizeAngle360(radians) {\n  radians %= twoPi;\n  radians += twoPi;\n  radians %= twoPi;\n  return radians;\n}\nfunction normalizeAngle360Inclusive(radians) {\n  radians %= twoPi;\n  radians += twoPi;\n  if (radians !== twoPi) {\n    radians %= twoPi;\n  }\n  return radians;\n}\nfunction normalizeAngle180(radians) {\n  radians %= twoPi;\n  if (radians < -Math.PI) {\n    radians += twoPi;\n  } else if (radians >= Math.PI) {\n    radians -= twoPi;\n  }\n  return radians;\n}\nfunction isBetweenAngles(targetAngle, startAngle, endAngle) {\n  const t = normalizeAngle360(targetAngle);\n  const a0 = normalizeAngle360(startAngle);\n  const a1 = normalizeAngle360(endAngle);\n  if (a0 < a1) {\n    return a0 <= t && t <= a1;\n  } else if (a0 > a1) {\n    return a0 <= t || t <= a1;\n  } else {\n    return true;\n  }\n}\nfunction toRadians(degrees) {\n  return degrees / 180 * Math.PI;\n}\nfunction toDegrees(radians) {\n  return radians / Math.PI * 180;\n}\nfunction angleDiff(angle0, angle1, counterClockwise) {\n  if (counterClockwise) {\n    [angle0, angle1] = [angle1, angle0];\n  }\n  const a0 = normalizeAngle360(angle0);\n  const a1 = normalizeAngle360(angle1) + twoPi;\n  return (a1 - a0) % twoPi;\n}\nfunction angleBetween(angle0, angle1) {\n  angle0 = normalizeAngle360(angle0);\n  angle1 = normalizeAngle360(angle1);\n  return angle1 - angle0 + (angle0 > angle1 ? 2 * Math.PI : 0);\n}\nfunction displacePointFromVector(centerX, centerY, radius, angle2) {\n  const x = centerX + radius * Math.cos(angle2);\n  const y = centerY + radius * Math.sin(angle2);\n  return { x, y };\n}\nvar delta = 1e-6;\nfunction clockwiseAngle(angle2, relativeToStartAngle) {\n  if (angleBetween(angle2, relativeToStartAngle) < delta) {\n    return relativeToStartAngle;\n  } else {\n    return normalizeAngle360(angle2 - relativeToStartAngle) + relativeToStartAngle;\n  }\n}\nfunction clockwiseAngles(startAngle, endAngle, relativeToStartAngle = 0) {\n  const fullPie = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n  const sweepAngle = fullPie ? 2 * Math.PI : normalizeAngle360(endAngle - startAngle);\n  startAngle = clockwiseAngle(startAngle, relativeToStartAngle);\n  endAngle = startAngle + sweepAngle;\n  return { startAngle, endAngle };\n}\n\n// packages/ag-charts-community/src/util/distance.ts\nfunction pointsDistanceSquared(x1, y1, x2, y2) {\n  const dx = x1 - x2;\n  const dy = y1 - y2;\n  return dx * dx + dy * dy;\n}\nfunction lineDistanceSquared(x, y, x1, y1, x2, y2, best) {\n  if (x1 === x2 && y1 === y2) {\n    return Math.min(best, pointsDistanceSquared(x, y, x1, y1));\n  }\n  const dx = x2 - x1;\n  const dy = y2 - y1;\n  const t = Math.max(0, Math.min(1, ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy)));\n  const ix = x1 + t * dx;\n  const iy = y1 + t * dy;\n  return Math.min(best, pointsDistanceSquared(x, y, ix, iy));\n}\nfunction arcDistanceSquared(x, y, cx, cy, radius, startAngle, endAngle, counterClockwise, best) {\n  if (counterClockwise) {\n    [endAngle, startAngle] = [startAngle, endAngle];\n  }\n  const angle2 = Math.atan2(y - cy, x - cx);\n  if (!isBetweenAngles(angle2, startAngle, endAngle)) {\n    const startX = cx + Math.cos(startAngle) * radius;\n    const startY = cy + Math.sin(startAngle) * radius;\n    const endX = cx + Math.cos(startAngle) * radius;\n    const endY = cy + Math.sin(startAngle) * radius;\n    return Math.min(best, pointsDistanceSquared(x, y, startX, startY), pointsDistanceSquared(x, y, endX, endY));\n  }\n  const distToArc = radius - Math.sqrt(pointsDistanceSquared(x, y, cx, cy));\n  return Math.min(best, distToArc * distToArc);\n}\n\n// packages/ag-charts-community/src/scale/colorScale.ts\nvar convertColorStringToOklcha = (v) => {\n  const color = Color.fromString(v);\n  const [l, c, h] = Color.RGBtoOKLCH(color.r, color.g, color.b);\n  return { l, c, h, a: color.a };\n};\nvar delta2 = 1e-6;\nvar isAchromatic = (x) => x.c < delta2 || x.l < delta2 || x.l > 1 - delta2;\nvar interpolateOklch = (x, y, d) => {\n  d = clamp(0, d, 1);\n  let h;\n  if (isAchromatic(x)) {\n    h = y.h;\n  } else if (isAchromatic(y)) {\n    h = x.h;\n  } else {\n    const xH = x.h;\n    let yH = y.h;\n    const deltaH = y.h - x.h;\n    if (deltaH > 180) {\n      yH -= 360;\n    } else if (deltaH < -180) {\n      yH += 360;\n    }\n    h = xH * (1 - d) + yH * d;\n  }\n  const c = x.c * (1 - d) + y.c * d;\n  const l = x.l * (1 - d) + y.l * d;\n  const a = x.a * (1 - d) + y.a * d;\n  return Color.fromOKLCH(l, c, h, a);\n};\nvar ColorScale = class {\n  constructor() {\n    this.type = \"color\";\n    this.invalid = true;\n    this.domain = [0, 1];\n    this.range = [\"red\", \"blue\"];\n    this.parsedRange = this.range.map(convertColorStringToOklcha);\n  }\n  update() {\n    const { domain, range: range3 } = this;\n    if (domain.length < 2) {\n      Logger.warnOnce(\"`colorDomain` should have at least 2 values.\");\n      if (domain.length === 0) {\n        domain.push(0, 1);\n      } else if (domain.length === 1) {\n        domain.push(domain[0] + 1);\n      }\n    }\n    for (let i = 1; i < domain.length; i++) {\n      const a = domain[i - 1];\n      const b = domain[i];\n      if (a >= b) {\n        Logger.warnOnce(\"`colorDomain` values should be supplied in ascending order.\");\n        domain.sort((a2, b2) => a2 - b2);\n        break;\n      }\n    }\n    if (range3.length < domain.length) {\n      for (let i = range3.length; i < domain.length; i++) {\n        range3.push(range3.length > 0 ? range3[0] : \"black\");\n      }\n    }\n    this.parsedRange = this.range.map(convertColorStringToOklcha);\n  }\n  convert(x) {\n    this.refresh();\n    const { domain, range: range3, parsedRange } = this;\n    const d0 = domain[0];\n    const d1 = domain.at(-1);\n    const r0 = range3[0];\n    const r1 = range3[range3.length - 1];\n    if (x <= d0) {\n      return r0;\n    }\n    if (x >= d1) {\n      return r1;\n    }\n    let index;\n    let q;\n    if (domain.length === 2) {\n      const t = (x - d0) / (d1 - d0);\n      const step = 1 / (range3.length - 1);\n      index = range3.length <= 2 ? 0 : Math.min(Math.floor(t * (range3.length - 1)), range3.length - 2);\n      q = (t - index * step) / step;\n    } else {\n      for (index = 0; index < domain.length - 2; index++) {\n        if (x < domain[index + 1]) {\n          break;\n        }\n      }\n      const a = domain[index];\n      const b = domain[index + 1];\n      q = (x - a) / (b - a);\n    }\n    const c0 = parsedRange[index];\n    const c1 = parsedRange[index + 1];\n    return interpolateOklch(c0, c1, q).toRgbaString();\n  }\n  refresh() {\n    if (!this.invalid)\n      return;\n    this.invalid = false;\n    this.update();\n    if (this.invalid) {\n      Logger.warnOnce(\"Expected update to not invalidate scale\");\n    }\n  }\n};\n__decorateClass([\n  Invalidating\n], ColorScale.prototype, \"domain\", 2);\n__decorateClass([\n  Invalidating\n], ColorScale.prototype, \"range\", 2);\n\n// packages/ag-charts-community/src/scene/gradient/gradient.ts\nvar Gradient = class {\n  constructor(colorSpace, stops = [], bbox) {\n    this.colorSpace = colorSpace;\n    this.stops = stops;\n    this.bbox = bbox;\n    this._cache = void 0;\n  }\n  createGradient(ctx, shapeBbox) {\n    const bbox = this.bbox ?? shapeBbox;\n    if (this._cache != null && this._cache.ctx === ctx && this._cache.bbox.equals(bbox)) {\n      return this._cache.gradient;\n    }\n    const { stops, colorSpace } = this;\n    if (stops.length === 0)\n      return;\n    if (stops.length === 1)\n      return stops[0].color;\n    let gradient2 = this.createCanvasGradient(ctx, bbox);\n    if (gradient2 == null)\n      return;\n    const isOkLch = colorSpace === \"oklch\";\n    const step = 0.05;\n    let c0 = stops[0];\n    gradient2.addColorStop(c0.offset, c0.color);\n    for (let i = 1; i < stops.length; i += 1) {\n      const c1 = stops[i];\n      if (isOkLch) {\n        const scale2 = new ColorScale();\n        scale2.domain = [c0.offset, c1.offset];\n        scale2.range = [c0.color, c1.color];\n        for (let offset4 = c0.offset + step; offset4 < c1.offset; offset4 += step) {\n          gradient2.addColorStop(offset4, scale2.convert(offset4));\n        }\n      }\n      gradient2.addColorStop(c1.offset, c1.color);\n      c0 = c1;\n    }\n    if (\"createPattern\" in gradient2) {\n      gradient2 = gradient2.createPattern();\n    }\n    this._cache = { ctx, bbox, gradient: gradient2 };\n    return gradient2;\n  }\n};\n\n// packages/ag-charts-community/src/scene/gradient/linearGradient.ts\nvar LinearGradient = class extends Gradient {\n  constructor(colorSpace, stops, angle2 = 0, bbox) {\n    super(colorSpace, stops, bbox);\n    this.angle = angle2;\n  }\n  createCanvasGradient(ctx, bbox) {\n    const angleOffset = 90;\n    const { angle: angle2 } = this;\n    const radians = normalizeAngle360(toRadians(angle2 + angleOffset));\n    const cos = Math.cos(radians);\n    const sin = Math.sin(radians);\n    const w = bbox.width;\n    const h = bbox.height;\n    const cx = bbox.x + w * 0.5;\n    const cy = bbox.y + h * 0.5;\n    const diagonal = Math.sqrt(h * h + w * w) / 2;\n    const diagonalAngle = Math.atan2(h, w);\n    let quarteredAngle;\n    if (radians < Math.PI / 2) {\n      quarteredAngle = radians;\n    } else if (radians < Math.PI) {\n      quarteredAngle = Math.PI - radians;\n    } else if (radians < 1.5 * Math.PI) {\n      quarteredAngle = radians - Math.PI;\n    } else {\n      quarteredAngle = 2 * Math.PI - radians;\n    }\n    const l = diagonal * Math.abs(Math.cos(quarteredAngle - diagonalAngle));\n    return ctx.createLinearGradient(cx + cos * l, cy + sin * l, cx - cos * l, cy - sin * l);\n  }\n};\n\n// packages/ag-charts-community/src/scene/shape/shape.ts\nvar LINEAR_GRADIENT_REGEXP = /^linear-gradient\\((-?[\\d.]+)deg,(.*?)\\)$/i;\nvar _Shape = class _Shape extends Node {\n  constructor() {\n    super(...arguments);\n    this.fillOpacity = 1;\n    this.strokeOpacity = 1;\n    this.fill = _Shape.defaultStyles.fill;\n    this.stroke = _Shape.defaultStyles.stroke;\n    this.strokeWidth = _Shape.defaultStyles.strokeWidth;\n    this.lineDash = _Shape.defaultStyles.lineDash;\n    this.lineDashOffset = _Shape.defaultStyles.lineDashOffset;\n    this.lineCap = _Shape.defaultStyles.lineCap;\n    this.lineJoin = _Shape.defaultStyles.lineJoin;\n    this.miterLimit = void 0;\n    this.opacity = _Shape.defaultStyles.opacity;\n    this.fillShadow = _Shape.defaultStyles.fillShadow;\n  }\n  /**\n   * Restores the default styles introduced by this subclass.\n   */\n  restoreOwnStyles() {\n    const { defaultStyles } = this.constructor;\n    Object.assign(this, defaultStyles);\n  }\n  onFillChange() {\n    const { fill } = this;\n    let linearGradientMatch;\n    if (fill instanceof Gradient) {\n      this.gradient = fill;\n    } else if (fill?.startsWith(\"linear-gradient\") && (linearGradientMatch = LINEAR_GRADIENT_REGEXP.exec(fill))) {\n      const angle2 = parseFloat(linearGradientMatch[1]);\n      const colors = [];\n      const colorsPart = linearGradientMatch[2];\n      const colorRegex = /(#[0-9a-f]+)|(rgba?\\(.+?\\))|([a-z]+)/gi;\n      let c;\n      while (c = colorRegex.exec(colorsPart)) {\n        colors.push(c[0]);\n      }\n      this.gradient = new LinearGradient(\n        \"rgb\",\n        colors.map((color, index) => ({ color, offset: index / (colors.length - 1) })),\n        angle2\n      );\n    } else {\n      this.gradient = void 0;\n    }\n  }\n  /**\n   * Returns a device-pixel aligned coordinate (or length if length is supplied).\n   *\n   * NOTE: Not suitable for strokes, since the stroke needs to be offset to the middle\n   * of a device pixel.\n   */\n  align(start2, length2) {\n    const pixelRatio = this.layerManager?.canvas?.pixelRatio ?? 1;\n    const alignedStart = Math.round(start2 * pixelRatio) / pixelRatio;\n    if (length2 == null) {\n      return alignedStart;\n    } else if (length2 === 0) {\n      return 0;\n    } else if (length2 < 1) {\n      return Math.ceil(length2 * pixelRatio) / pixelRatio;\n    }\n    return Math.round((length2 + start2) * pixelRatio) / pixelRatio - alignedStart;\n  }\n  fillStroke(ctx, path) {\n    this.renderFill(ctx, path);\n    this.renderStroke(ctx, path);\n  }\n  renderFill(ctx, path) {\n    if (this.fill) {\n      const { globalAlpha } = ctx;\n      this.applyFill(ctx);\n      this.applyFillAlpha(ctx);\n      this.applyShadow(ctx);\n      this.executeFill(ctx, path);\n      ctx.globalAlpha = globalAlpha;\n    }\n    ctx.shadowColor = \"rgba(0, 0, 0, 0)\";\n  }\n  executeFill(ctx, path) {\n    path ? ctx.fill(path) : ctx.fill();\n  }\n  applyFill(ctx) {\n    ctx.fillStyle = this.gradient?.createGradient(ctx, this.getBBox()) ?? (typeof this.fill === \"string\" ? this.fill : void 0) ?? \"black\";\n  }\n  applyFillAlpha(ctx) {\n    ctx.globalAlpha *= this.opacity * this.fillOpacity;\n  }\n  applyShadow(ctx) {\n    const pixelRatio = this.layerManager?.canvas.pixelRatio ?? 1;\n    const fillShadow = this.fillShadow;\n    if (fillShadow?.enabled) {\n      ctx.shadowColor = fillShadow.color;\n      ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n      ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n      ctx.shadowBlur = fillShadow.blur * pixelRatio;\n    }\n  }\n  renderStroke(ctx, path) {\n    if (this.stroke && this.strokeWidth) {\n      const { globalAlpha } = ctx;\n      ctx.strokeStyle = this.stroke;\n      ctx.globalAlpha *= this.opacity * this.strokeOpacity;\n      ctx.lineWidth = this.strokeWidth;\n      if (this.lineDash) {\n        ctx.setLineDash(this.lineDash);\n      }\n      if (this.lineDashOffset) {\n        ctx.lineDashOffset = this.lineDashOffset;\n      }\n      if (this.lineCap) {\n        ctx.lineCap = this.lineCap;\n      }\n      if (this.lineJoin) {\n        ctx.lineJoin = this.lineJoin;\n      }\n      if (this.miterLimit != null) {\n        ctx.miterLimit = this.miterLimit;\n      }\n      this.executeStroke(ctx, path);\n      ctx.globalAlpha = globalAlpha;\n    }\n  }\n  executeStroke(ctx, path) {\n    path ? ctx.stroke(path) : ctx.stroke();\n  }\n  containsPoint(x, y) {\n    return this.isPointInPath(x, y);\n  }\n};\n/**\n * Defaults for style properties. Note that properties that affect the position\n * and shape of the node are not considered style properties, for example:\n * `x`, `y`, `width`, `height`, `radius`, `rotation`, etc.\n * Can be used to reset to the original styling after some custom styling\n * has been applied (using the `restoreOwnStyles` method).\n * These static defaults are meant to be inherited by subclasses.\n */\n_Shape.defaultStyles = {\n  fill: \"black\",\n  stroke: void 0,\n  strokeWidth: 0,\n  lineDash: void 0,\n  lineDashOffset: 0,\n  lineCap: void 0,\n  lineJoin: void 0,\n  opacity: 1,\n  fillShadow: void 0\n};\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */, changeCb: (s) => s.onFillChange() })\n], _Shape.prototype, \"fill\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"stroke\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"lineDash\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"lineDashOffset\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"lineCap\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"lineJoin\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], _Shape.prototype, \"miterLimit\", 2);\n__decorateClass([\n  SceneChangeDetection({\n    redraw: 2 /* MINOR */,\n    convertor: (v) => clamp(0, v, 1)\n  })\n], _Shape.prototype, \"opacity\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */, checkDirtyOnAssignment: true })\n], _Shape.prototype, \"fillShadow\", 2);\nvar Shape = _Shape;\n\n// packages/ag-charts-community/src/scene/shape/line.ts\nvar Line = class extends Shape {\n  constructor(opts = {}) {\n    super(opts);\n    this.x1 = 0;\n    this.y1 = 0;\n    this.x2 = 0;\n    this.y2 = 0;\n    this.restoreOwnStyles();\n  }\n  set x(value) {\n    this.x1 = value;\n    this.x2 = value;\n  }\n  set y(value) {\n    this.y1 = value;\n    this.y2 = value;\n  }\n  get midPoint() {\n    return { x: (this.x1 + this.x2) / 2, y: (this.y1 + this.y2) / 2 };\n  }\n  computeBBox() {\n    return new BBox(\n      Math.min(this.x1, this.x2),\n      Math.min(this.y1, this.y2),\n      Math.abs(this.x2 - this.x1),\n      Math.abs(this.y2 - this.y1)\n    );\n  }\n  isPointInPath(x, y) {\n    if (this.x1 === this.x2 || this.y1 === this.y2) {\n      return this.getBBox().clone().grow(this.strokeWidth / 2).containsPoint(x, y);\n    }\n    return false;\n  }\n  distanceSquared(px, py) {\n    const { x1, y1, x2, y2 } = this;\n    return lineDistanceSquared(px, py, x1, y1, x2, y2, Infinity);\n  }\n  render(renderCtx) {\n    const { ctx, forceRender, stats, devicePixelRatio } = renderCtx;\n    if (this.dirty === 0 /* NONE */ && !forceRender) {\n      if (stats)\n        stats.nodesSkipped += nodeCount(this).count;\n      return;\n    }\n    let { x1, y1, x2, y2 } = this;\n    if (x1 === x2) {\n      const { strokeWidth } = this;\n      const x = Math.round(x1 * devicePixelRatio) / devicePixelRatio + Math.trunc(strokeWidth * devicePixelRatio) % 2 / (devicePixelRatio * 2);\n      x1 = x;\n      x2 = x;\n    } else if (y1 === y2) {\n      const { strokeWidth } = this;\n      const y = Math.round(y1 * devicePixelRatio) / devicePixelRatio + Math.trunc(strokeWidth * devicePixelRatio) % 2 / (devicePixelRatio * 2);\n      y1 = y;\n      y2 = y;\n    }\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    this.fillStroke(ctx);\n    this.fillShadow?.markClean();\n    super.render(renderCtx);\n  }\n  toSVG() {\n    if (!this.visible)\n      return;\n    const element2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n    element2.setAttribute(\"x1\", String(this.x1));\n    element2.setAttribute(\"y1\", String(this.y1));\n    element2.setAttribute(\"x2\", String(this.x2));\n    element2.setAttribute(\"y2\", String(this.y2));\n    element2.setAttribute(\"stroke\", this.stroke ?? \"none\");\n    element2.setAttribute(\"stroke-opacity\", String(this.strokeOpacity));\n    element2.setAttribute(\"stroke-width\", String(this.strokeWidth));\n    return {\n      elements: [element2]\n    };\n  }\n};\nLine.className = \"Line\";\nLine.defaultStyles = { ...Shape.defaultStyles, fill: void 0, strokeWidth: 1 };\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Line.prototype, \"x1\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Line.prototype, \"y1\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Line.prototype, \"x2\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Line.prototype, \"y2\", 2);\n\n// packages/ag-charts-community/src/util/canvas.util.ts\nfunction createCanvasContext(width2 = 0, height2 = 0) {\n  const canvas = createElement(\"canvas\");\n  canvas.style.display = \"block\";\n  canvas.style.width = width2 + \"px\";\n  canvas.style.height = height2 + \"px\";\n  return canvas.getContext(\"2d\");\n}\n\n// packages/ag-charts-community/src/util/lruCache.ts\nvar LRUCache = class {\n  constructor(maxCacheSize = 5) {\n    this.maxCacheSize = maxCacheSize;\n    this.store = /* @__PURE__ */ new Map();\n  }\n  get(key) {\n    if (!this.store.has(key))\n      return void 0;\n    const hit = this.store.get(key);\n    this.store.delete(key);\n    this.store.set(key, hit);\n    return hit;\n  }\n  has(key) {\n    return this.store.has(key);\n  }\n  set(key, value) {\n    this.store.set(key, value);\n    if (this.store.size > this.maxCacheSize) {\n      const iterator = this.store.keys();\n      let evictCount = this.store.size - this.maxCacheSize;\n      while (evictCount > 0) {\n        const evictKeyIterator = iterator.next();\n        if (!evictKeyIterator.done) {\n          this.store.delete(evictKeyIterator.value);\n        }\n        evictCount--;\n      }\n    }\n    return value;\n  }\n  clear() {\n    this.store.clear();\n  }\n};\n\n// packages/ag-charts-community/src/util/textMeasurer.ts\nvar CachedTextMeasurerPool = class {\n  // Measures the dimensions of the provided text, handling multiline if needed.\n  static measureText(text, options) {\n    const textMeasurer = this.getMeasurer(options);\n    return textMeasurer.measureText(text);\n  }\n  static measureLines(text, options) {\n    const textMeasurer = this.getMeasurer(options);\n    return textMeasurer.measureLines(text);\n  }\n  // Gets a TextMeasurer instance, configuring text alignment and baseline if provided.\n  static getMeasurer(options) {\n    const font = typeof options.font === \"string\" ? options.font : TextUtils.toFontString(options.font);\n    const key = `${font}-${options.textAlign ?? \"start\"}-${options.textBaseline ?? \"alphabetic\"}`;\n    return this.instanceMap.get(key) ?? this.createFontMeasurer(font, options, key);\n  }\n  // Creates or retrieves a TextMeasurer instance for a specific font.\n  static createFontMeasurer(font, options, key) {\n    const ctx = createCanvasContext();\n    ctx.font = font;\n    ctx.textAlign = options.textAlign ?? \"start\";\n    ctx.textBaseline = options.textBaseline ?? \"alphabetic\";\n    const measurer = new CachedTextMeasurer(ctx, options);\n    this.instanceMap.set(key, measurer);\n    return measurer;\n  }\n};\nCachedTextMeasurerPool.instanceMap = new LRUCache(10);\nvar CachedTextMeasurer = class {\n  constructor(ctx, options) {\n    this.ctx = ctx;\n    // cached text measurements\n    this.measureMap = new LRUCache(100);\n    if (options.textAlign) {\n      ctx.textAlign = options.textAlign;\n    }\n    if (options.textBaseline) {\n      ctx.textBaseline = options.textBaseline;\n    }\n    ctx.font = typeof options.font === \"string\" ? options.font : TextUtils.toFontString(options.font);\n    this.textMeasurer = new SimpleTextMeasurer(\n      (t) => this.cachedCtxMeasureText(t),\n      options.textBaseline ?? \"alphabetic\"\n    );\n  }\n  textWidth(text, estimate) {\n    return this.textMeasurer.textWidth(text, estimate);\n  }\n  measureText(text) {\n    return this.textMeasurer.measureText(text);\n  }\n  measureLines(text) {\n    return this.textMeasurer.measureLines(text);\n  }\n  cachedCtxMeasureText(text) {\n    if (!this.measureMap.has(text)) {\n      const rawResult = this.ctx.measureText(text);\n      this.measureMap.set(text, {\n        actualBoundingBoxAscent: rawResult.actualBoundingBoxAscent,\n        emHeightAscent: rawResult.emHeightAscent,\n        emHeightDescent: rawResult.emHeightDescent,\n        actualBoundingBoxDescent: rawResult.actualBoundingBoxDescent,\n        actualBoundingBoxLeft: rawResult.actualBoundingBoxLeft,\n        actualBoundingBoxRight: rawResult.actualBoundingBoxRight,\n        alphabeticBaseline: rawResult.alphabeticBaseline,\n        fontBoundingBoxAscent: rawResult.fontBoundingBoxAscent,\n        fontBoundingBoxDescent: rawResult.fontBoundingBoxDescent,\n        hangingBaseline: rawResult.hangingBaseline,\n        ideographicBaseline: rawResult.ideographicBaseline,\n        width: rawResult.width\n      });\n    }\n    return this.measureMap.get(text);\n  }\n};\nvar TextUtils = class {\n  static toFontString({ fontSize = 10, fontStyle, fontWeight, fontFamily, lineHeight }) {\n    let fontString = \"\";\n    if (fontStyle) {\n      fontString += `${fontStyle} `;\n    }\n    if (fontWeight) {\n      fontString += `${fontWeight} `;\n    }\n    fontString += `${fontSize}px`;\n    if (lineHeight) {\n      fontString += `/${lineHeight}px`;\n    }\n    fontString += ` ${fontFamily}`;\n    return fontString.trim();\n  }\n  static getLineHeight(fontSize) {\n    return Math.ceil(fontSize * this.defaultLineHeight);\n  }\n  // Determines vertical offset modifier based on text baseline.\n  static getVerticalModifier(textBaseline) {\n    switch (textBaseline) {\n      case \"hanging\":\n      case \"top\":\n        return 0;\n      case \"middle\":\n        return 0.5;\n      case \"alphabetic\":\n      case \"bottom\":\n      case \"ideographic\":\n      default:\n        return 1;\n    }\n  }\n};\nTextUtils.EllipsisChar = \"\\u2026\";\n// Representation for text clipping.\nTextUtils.defaultLineHeight = 1.15;\n// Normally between 1.1 and 1.2\nTextUtils.lineSplitter = /\\r?\\n/g;\nvar SimpleTextMeasurer = class {\n  constructor(measureTextFn, textBaseline = \"alphabetic\") {\n    this.measureTextFn = measureTextFn;\n    this.textBaseline = textBaseline;\n    // local chars width cache per TextMeasurer\n    this.charMap = /* @__PURE__ */ new Map();\n  }\n  // Measures metrics for a single line of text.\n  getMetrics(text) {\n    const m = this.measureTextFn(text);\n    m.fontBoundingBoxAscent ?? (m.fontBoundingBoxAscent = m.emHeightAscent);\n    m.fontBoundingBoxDescent ?? (m.fontBoundingBoxDescent = m.emHeightDescent);\n    return {\n      width: m.width,\n      height: m.actualBoundingBoxAscent + m.actualBoundingBoxDescent,\n      lineHeight: m.fontBoundingBoxAscent + m.fontBoundingBoxDescent,\n      offsetTop: m.actualBoundingBoxAscent,\n      offsetLeft: m.actualBoundingBoxLeft\n    };\n  }\n  // Calculates aggregated metrics for multiline text.\n  getMultilineMetrics(lines) {\n    let width2 = 0;\n    let height2 = 0;\n    let offsetTop = 0;\n    let offsetLeft = 0;\n    let baselineDistance = 0;\n    const verticalModifier = TextUtils.getVerticalModifier(this.textBaseline);\n    const lineMetrics = [];\n    let index = 0;\n    const length2 = lines.length;\n    for (const line of lines) {\n      const m = this.measureTextFn(line);\n      m.fontBoundingBoxAscent ?? (m.fontBoundingBoxAscent = m.emHeightAscent);\n      m.fontBoundingBoxDescent ?? (m.fontBoundingBoxDescent = m.emHeightDescent);\n      if (width2 < m.width) {\n        width2 = m.width;\n      }\n      if (offsetLeft < m.actualBoundingBoxLeft) {\n        offsetLeft = m.actualBoundingBoxLeft;\n      }\n      if (index === 0) {\n        height2 += m.actualBoundingBoxAscent;\n        offsetTop += m.actualBoundingBoxAscent;\n      } else {\n        baselineDistance += m.fontBoundingBoxAscent;\n      }\n      if (index === length2 - 1) {\n        height2 += m.actualBoundingBoxDescent;\n      } else {\n        baselineDistance += m.fontBoundingBoxDescent;\n      }\n      lineMetrics.push({\n        text: line,\n        width: m.width,\n        height: m.actualBoundingBoxAscent + m.actualBoundingBoxDescent,\n        lineHeight: m.fontBoundingBoxAscent + m.fontBoundingBoxDescent,\n        offsetTop: m.actualBoundingBoxAscent,\n        offsetLeft: m.actualBoundingBoxLeft\n      });\n      index++;\n    }\n    height2 += baselineDistance;\n    offsetTop += baselineDistance * verticalModifier;\n    return { width: width2, height: height2, offsetTop, offsetLeft, lineMetrics };\n  }\n  textWidth(text, estimate) {\n    if (estimate) {\n      let estimatedWidth = 0;\n      for (let i = 0; i < text.length; i++) {\n        estimatedWidth += this.textWidth(text.charAt(i));\n      }\n      return estimatedWidth;\n    }\n    if (text.length > 1) {\n      return this.measureTextFn(text).width;\n    }\n    return this.charMap.get(text) ?? this.charWidth(text);\n  }\n  measureText(text) {\n    return this.getMetrics(text);\n  }\n  // Measures the dimensions of the provided text, handling multiline if needed.\n  measureLines(text) {\n    const lines = typeof text === \"string\" ? text.split(TextUtils.lineSplitter) : text;\n    return this.getMultilineMetrics(lines);\n  }\n  charWidth(char) {\n    const { width: width2 } = this.measureTextFn(char);\n    this.charMap.set(char, width2);\n    return width2;\n  }\n};\n\n// packages/ag-charts-community/src/scene/shape/text.ts\nvar _Text = class _Text extends Shape {\n  constructor() {\n    super(...arguments);\n    this.x = 0;\n    this.y = 0;\n    this.lines = [];\n    this.text = void 0;\n    this.fontSize = 10;\n    this.fontFamily = \"sans-serif\";\n    this.textAlign = _Text.defaultStyles.textAlign;\n    this.textBaseline = _Text.defaultStyles.textBaseline;\n  }\n  onTextChange() {\n    this.lines = this.text?.split(\"\\n\").map((s) => s.trim()) ?? [];\n  }\n  static computeBBox(lines, x, y, opts) {\n    const { offsetTop, offsetLeft, width: width2, height: height2 } = CachedTextMeasurerPool.measureLines(lines, opts);\n    return new BBox(x - offsetLeft, y - offsetTop, width2, height2);\n  }\n  computeBBox() {\n    const { x, y, lines, textBaseline, textAlign } = this;\n    return _Text.computeBBox(lines, x, y, { font: this, textBaseline, textAlign });\n  }\n  isPointInPath(x, y) {\n    const bbox = this.getBBox();\n    return bbox ? bbox.containsPoint(x, y) : false;\n  }\n  render(renderCtx) {\n    const { ctx, forceRender, stats } = renderCtx;\n    if (this.dirty === 0 /* NONE */ && !forceRender) {\n      if (stats)\n        stats.nodesSkipped += nodeCount(this).count;\n      return;\n    }\n    if (!this.lines.length || !this.layerManager) {\n      if (stats)\n        stats.nodesSkipped += nodeCount(this).count;\n      return;\n    }\n    const { fill, stroke, strokeWidth } = this;\n    const { pixelRatio } = this.layerManager.canvas;\n    ctx.font = TextUtils.toFontString(this);\n    ctx.textAlign = this.textAlign;\n    ctx.textBaseline = this.textBaseline;\n    if (fill) {\n      this.applyFill(ctx);\n      ctx.globalAlpha *= this.opacity * this.fillOpacity;\n      const { fillShadow } = this;\n      if (fillShadow?.enabled) {\n        ctx.shadowColor = fillShadow.color;\n        ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n        ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n        ctx.shadowBlur = fillShadow.blur * pixelRatio;\n      }\n      this.renderLines((line, x, y) => ctx.fillText(line, x, y));\n    }\n    if (stroke && strokeWidth) {\n      ctx.strokeStyle = stroke;\n      ctx.lineWidth = strokeWidth;\n      ctx.globalAlpha *= this.opacity * this.strokeOpacity;\n      const { lineDash, lineDashOffset, lineCap, lineJoin } = this;\n      if (lineDash) {\n        ctx.setLineDash(lineDash);\n      }\n      if (lineDashOffset) {\n        ctx.lineDashOffset = lineDashOffset;\n      }\n      if (lineCap) {\n        ctx.lineCap = lineCap;\n      }\n      if (lineJoin) {\n        ctx.lineJoin = lineJoin;\n      }\n      this.renderLines((line, x, y) => ctx.strokeText(line, x, y));\n    }\n    super.render(renderCtx);\n  }\n  renderLines(renderCallback) {\n    const { lines, x, y } = this;\n    const lineHeight = this.lineHeight ?? TextUtils.getLineHeight(this.fontSize);\n    let offsetY = (lineHeight - lineHeight * lines.length) * TextUtils.getVerticalModifier(this.textBaseline);\n    for (const line of lines) {\n      renderCallback(line, x, y + offsetY);\n      offsetY += lineHeight;\n    }\n  }\n  setFont(props) {\n    this.fontFamily = props.fontFamily;\n    this.fontSize = props.fontSize;\n    this.fontStyle = props.fontStyle;\n    this.fontWeight = props.fontWeight;\n  }\n  setAlign(props) {\n    this.textAlign = props.textAlign;\n    this.textBaseline = props.textBaseline;\n  }\n  toSVG() {\n    if (!this.visible || !this.text)\n      return;\n    const element2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n    element2.setAttribute(\"font-family\", this.fontFamily?.split(\",\")[0] ?? \"\");\n    element2.setAttribute(\"font-size\", String(this.fontSize));\n    element2.setAttribute(\"font-style\", this.fontStyle ?? \"\");\n    element2.setAttribute(\"font-weight\", String(this.fontWeight ?? \"\"));\n    element2.setAttribute(\n      \"text-anchor\",\n      {\n        center: \"middle\",\n        left: \"start\",\n        right: \"end\",\n        start: \"start\",\n        end: \"end\"\n      }[this.textAlign ?? \"start\"]\n    );\n    element2.setAttribute(\n      \"alignment-baseline\",\n      {\n        alphabetic: \"alphabetic\",\n        top: \"top\",\n        bottom: \"bottom\",\n        hanging: \"hanging\",\n        middle: \"middle\",\n        ideographic: \"ideographic\"\n      }[this.textBaseline ?? \"alphabetic\"]\n    );\n    element2.setAttribute(\"x\", String(this.x));\n    element2.setAttribute(\"y\", String(this.y));\n    element2.textContent = this.text ?? \"\";\n    return { elements: [element2] };\n  }\n};\n_Text.className = \"Text\";\n_Text.defaultStyles = {\n  ...Shape.defaultStyles,\n  textAlign: \"start\",\n  fontStyle: void 0,\n  fontWeight: void 0,\n  fontSize: 10,\n  fontFamily: \"sans-serif\",\n  textBaseline: \"alphabetic\"\n};\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], _Text.prototype, \"x\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], _Text.prototype, \"y\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */, changeCb: (o) => o.onTextChange() })\n], _Text.prototype, \"text\", 2);\n__decorateClass([\n  SceneChangeDetection()\n], _Text.prototype, \"fontStyle\", 2);\n__decorateClass([\n  SceneChangeDetection()\n], _Text.prototype, \"fontWeight\", 2);\n__decorateClass([\n  SceneChangeDetection()\n], _Text.prototype, \"fontSize\", 2);\n__decorateClass([\n  SceneChangeDetection()\n], _Text.prototype, \"fontFamily\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], _Text.prototype, \"textAlign\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], _Text.prototype, \"textBaseline\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], _Text.prototype, \"lineHeight\", 2);\nvar Text = _Text;\nvar RotatableText = class extends Rotatable(Text) {\n};\nvar TransformableText = class extends Rotatable(Translatable(Text)) {\n};\n\n// packages/ag-charts-community/src/scene/util/labelPlacement.ts\nfunction circleRectOverlap(c, unitCenter, x, y, w, h) {\n  if (c.size === 0) {\n    return false;\n  }\n  let cx = c.x;\n  let cy = c.y;\n  if (unitCenter != null) {\n    cx -= (unitCenter.x - 0.5) * c.size;\n    cy -= (unitCenter.y - 0.5) * c.size;\n  }\n  let edgeX = cx;\n  if (cx < x) {\n    edgeX = x;\n  } else if (cx > x + w) {\n    edgeX = x + w;\n  }\n  let edgeY = cy;\n  if (cy < y) {\n    edgeY = y;\n  } else if (cy > y + h) {\n    edgeY = y + h;\n  }\n  const dx = cx - edgeX;\n  const dy = cy - edgeY;\n  const d = Math.sqrt(dx * dx + dy * dy);\n  return d <= c.size * 0.5;\n}\nfunction rectRectOverlap(r1, x2, y2, w2, h2) {\n  const xOverlap = r1.x + r1.width > x2 && r1.x < x2 + w2;\n  const yOverlap = r1.y + r1.height > y2 && r1.y < y2 + h2;\n  return xOverlap && yOverlap;\n}\nfunction rectContainsRect(r1, r2x, r2y, r2w, r2h) {\n  return r2x + r2w < r1.x + r1.width && r2x > r1.x && r2y > r1.y && r2y + r2h < r1.y + r1.height;\n}\nfunction isPointLabelDatum(x) {\n  return x != null && typeof x.point === \"object\" && typeof x.label === \"object\";\n}\nvar labelPlacements = {\n  top: { x: 0, y: -1 },\n  bottom: { x: 0, y: 1 },\n  left: { x: -1, y: 0 },\n  right: { x: 1, y: 0 },\n  \"top-left\": { x: -1, y: -1 },\n  \"top-right\": { x: 1, y: -1 },\n  \"bottom-left\": { x: -1, y: 1 },\n  \"bottom-right\": { x: 1, y: 1 }\n};\nfunction placeLabels(data, bounds, padding = 5) {\n  const result = [];\n  data = data.map((d) => d.slice().sort((a, b) => b.point.size - a.point.size));\n  for (let j = 0; j < data.length; j++) {\n    const labels = result[j] = [];\n    const datum = data[j];\n    if (!(datum?.length && datum[0].label)) {\n      continue;\n    }\n    for (let index = 0, ln = datum.length; index < ln; index++) {\n      const d = datum[index];\n      const { point, label, marker } = d;\n      const { text, width: width2, height: height2 } = label;\n      const r = point.size * 0.5;\n      let dx = 0;\n      let dy = 0;\n      if (r > 0 && d.placement != null) {\n        const placement = labelPlacements[d.placement];\n        dx = (width2 * 0.5 + r + padding) * placement.x;\n        dy = (height2 * 0.5 + r + padding) * placement.y;\n      }\n      const x = point.x - width2 * 0.5 + dx - ((marker?.center.x ?? 0.5) - 0.5) * point.size;\n      const y = point.y - height2 * 0.5 + dy - ((marker?.center.y ?? 0.5) - 0.5) * point.size;\n      const withinBounds = !bounds || rectContainsRect(bounds, x, y, width2, height2);\n      if (!withinBounds) {\n        continue;\n      }\n      const overlapPoints = data.some(\n        (dataDatums) => dataDatums.some(\n          (dataDatum) => circleRectOverlap(dataDatum.point, dataDatum.marker?.center, x, y, width2, height2)\n        )\n      );\n      if (overlapPoints) {\n        continue;\n      }\n      const overlapLabels = result.some((l2) => l2.some((l3) => rectRectOverlap(l3, x, y, width2, height2)));\n      if (overlapLabels) {\n        continue;\n      }\n      labels.push({ index, text, x, y, width: width2, height: height2, datum: d });\n    }\n  }\n  return result;\n}\nfunction axisLabelsOverlap(data, padding = 0) {\n  const result = [];\n  for (let index = 0; index < data.length; index++) {\n    const datum = data[index];\n    const {\n      point: { x, y },\n      label: { text }\n    } = datum;\n    let { width: width2, height: height2 } = datum.label;\n    width2 += padding;\n    height2 += padding;\n    if (result.some((l) => rectRectOverlap(l, x, y, width2, height2))) {\n      return true;\n    }\n    result.push({ index, text, x, y, width: width2, height: height2, datum });\n  }\n  return false;\n}\n\n// packages/ag-charts-community/src/util/equal.ts\nfunction areArrayNumbersEqual(arrA, arrB) {\n  return arrA.length === arrB.length && arrA.every((item, i) => Number(item) === Number(arrB[i]));\n}\n\n// packages/ag-charts-community/src/util/json.ts\nvar CLASS_INSTANCE_TYPE = \"class-instance\";\nfunction jsonDiff(source, target, skip) {\n  if (isArray(target)) {\n    if (!isArray(source) || source.length !== target.length || target.some((v, i) => jsonDiff(source[i], v) != null)) {\n      return target;\n    }\n  } else if (isPlainObject(target)) {\n    if (!isPlainObject(source)) {\n      return target;\n    }\n    const result = {};\n    const allKeys = /* @__PURE__ */ new Set([\n      ...Object.keys(source),\n      ...Object.keys(target)\n    ]);\n    for (const key of allKeys) {\n      if (source[key] === target[key] || skip?.includes(key)) {\n        continue;\n      }\n      if (typeof source[key] === typeof target[key]) {\n        const diff2 = jsonDiff(source[key], target[key]);\n        if (diff2 !== null) {\n          result[key] = diff2;\n        }\n      } else {\n        result[key] = target[key];\n      }\n    }\n    return Object.keys(result).length ? result : null;\n  } else if (source !== target) {\n    return target;\n  }\n  return null;\n}\nfunction deepClone(source, options) {\n  if (isArray(source)) {\n    return source.map((item) => deepClone(item, options));\n  }\n  if (isPlainObject(source)) {\n    return mapValues(\n      source,\n      (value, key) => options?.shallow?.includes(key) ? shallowClone(value) : deepClone(value, options)\n    );\n  }\n  if (source instanceof Map) {\n    return new Map(deepClone(Array.from(source)));\n  }\n  return shallowClone(source);\n}\nfunction shallowClone(source) {\n  if (isArray(source)) {\n    return [...source];\n  }\n  if (isPlainObject(source)) {\n    return { ...source };\n  }\n  if (isDate(source)) {\n    return new Date(source);\n  }\n  if (isRegExp(source)) {\n    return new RegExp(source.source, source.flags);\n  }\n  return source;\n}\nfunction jsonWalk(json, visit, opts, ...jsons) {\n  if (isArray(json)) {\n    visit(json, ...jsons);\n    json.forEach((node, index) => {\n      jsonWalk(node, visit, opts, ...keyMapper(jsons, index));\n    });\n  } else if (isPlainObject(json)) {\n    visit(json, ...jsons);\n    for (const key of Object.keys(json)) {\n      if (opts?.skip?.includes(key)) {\n        continue;\n      }\n      const value = json[key];\n      if (isArray(value) || isPlainObject(value)) {\n        jsonWalk(value, visit, opts, ...keyMapper(jsons, key));\n      }\n    }\n  }\n}\nfunction jsonApply(target, source, params = {}) {\n  const { path, matcherPath = path?.replace(/(\\[[0-9+]+])/i, \"[]\"), skip = [] } = params;\n  if (target == null) {\n    throw new Error(`AG Charts - target is uninitialised: ${path ?? \"<root>\"}`);\n  }\n  if (source == null) {\n    return target;\n  }\n  if (isProperties(target)) {\n    return target.set(source);\n  }\n  const targetAny = target;\n  const targetType = classify(target);\n  for (const property in source) {\n    if (SKIP_JS_BUILTINS.has(property))\n      continue;\n    const propertyMatcherPath = `${matcherPath ? matcherPath + \".\" : \"\"}${property}`;\n    if (skip.includes(propertyMatcherPath))\n      continue;\n    const newValue = source[property];\n    const propertyPath = `${path ? path + \".\" : \"\"}${property}`;\n    const targetClass = targetAny.constructor;\n    const currentValue = targetAny[property];\n    try {\n      const currentValueType = classify(currentValue);\n      const newValueType = classify(newValue);\n      if (targetType === CLASS_INSTANCE_TYPE && !(property in target)) {\n        Logger.warn(`unable to set [${propertyPath}] in ${targetClass?.name} - property is unknown`);\n        continue;\n      }\n      if (currentValueType != null && newValueType != null && newValueType !== currentValueType && (currentValueType !== CLASS_INSTANCE_TYPE || newValueType !== \"object\")) {\n        Logger.warn(\n          `unable to set [${propertyPath}] in ${targetClass?.name} - can't apply type of [${newValueType}], allowed types are: [${currentValueType}]`\n        );\n        continue;\n      }\n      if (isProperties(currentValue)) {\n        targetAny[property].set(newValue);\n      } else if (newValueType === \"object\") {\n        if (currentValue == null) {\n          targetAny[property] = {};\n        }\n        jsonApply(currentValue ?? targetAny[property], newValue, {\n          ...params,\n          path: propertyPath,\n          matcherPath: propertyMatcherPath\n        });\n      } else {\n        targetAny[property] = newValue;\n      }\n    } catch (error) {\n      Logger.warn(`unable to set [${propertyPath}] in [${targetClass?.name}]; nested error is: ${error.message}`);\n    }\n  }\n  return target;\n}\nfunction keyMapper(data, key) {\n  return data.map((dataObject) => dataObject?.[key]);\n}\nfunction classify(value) {\n  if (value == null) {\n    return null;\n  }\n  if (isHtmlElement(value) || isDate(value)) {\n    return \"primitive\";\n  }\n  if (isArray(value)) {\n    return \"array\";\n  }\n  if (isObject(value)) {\n    return isPlainObject(value) ? \"object\" : CLASS_INSTANCE_TYPE;\n  }\n  if (isFunction(value)) {\n    return \"function\";\n  }\n  return \"primitive\";\n}\n\n// packages/ag-charts-community/src/util/proxy.ts\nfunction ProxyProperty(proxyPath, configMetadata) {\n  const pathArray = isArray(proxyPath) ? proxyPath : proxyPath.split(\".\");\n  if (pathArray.length === 1) {\n    const [property] = pathArray;\n    return addTransformToInstanceProperty(\n      (target, _, value) => target[property] = value,\n      (target) => target[property],\n      configMetadata\n    );\n  }\n  return addTransformToInstanceProperty(\n    (target, _, value) => setPath(target, pathArray, value),\n    (target) => getPath(target, pathArray),\n    configMetadata\n  );\n}\nfunction ProxyOnWrite(proxyProperty) {\n  return addTransformToInstanceProperty((target, _, value) => target[proxyProperty] = value);\n}\nfunction ProxyPropertyOnWrite(childName, childProperty) {\n  return addTransformToInstanceProperty((target, key, value) => target[childName][childProperty ?? key] = value);\n}\nfunction ActionOnSet(opts) {\n  const { newValue: newValueFn, oldValue: oldValueFn, changeValue: changeValueFn } = opts;\n  return addTransformToInstanceProperty((target, _, newValue, oldValue) => {\n    if (newValue !== oldValue) {\n      if (oldValue !== void 0) {\n        oldValueFn?.call(target, oldValue);\n      }\n      if (newValue !== void 0) {\n        newValueFn?.call(target, newValue);\n      }\n      changeValueFn?.call(target, newValue, oldValue);\n    }\n    return newValue;\n  });\n}\nfunction ObserveChanges(observerFn) {\n  return addObserverToInstanceProperty(observerFn);\n}\n\n// packages/ag-charts-community/src/util/stateMachine.ts\nvar debugColor = \"color: green\";\nvar debugQuietColor = \"color: grey\";\nvar _StateMachine = class _StateMachine {\n  constructor(defaultState, states, enterEach) {\n    this.defaultState = defaultState;\n    this.states = states;\n    this.enterEach = enterEach;\n    this.debug = Debug.create(true, \"animation\");\n    this.state = defaultState;\n    this.debug(`%c${this.constructor.name} | init -> ${defaultState}`, debugColor);\n  }\n  transition(event, data) {\n    const shouldTransitionSelf = this.transitionChild(event, data);\n    if (!shouldTransitionSelf || this.state === _StateMachine.child || this.state === _StateMachine.parent) {\n      return;\n    }\n    const currentState = this.state;\n    const currentStateConfig = this.states[this.state];\n    let destination = currentStateConfig[event];\n    const debugPrefix = `%c${this.constructor.name} | ${this.state} -> ${event} ->`;\n    if (Array.isArray(destination)) {\n      destination = destination.find((transition) => {\n        if (!transition.guard)\n          return true;\n        const valid = transition.guard(data);\n        if (!valid) {\n          this.debug(`${debugPrefix} ${transition.target} (guarded)`, debugQuietColor);\n        }\n        return valid;\n      });\n    } else if (typeof destination === \"object\" && !(destination instanceof _StateMachine) && destination.guard && !destination.guard(data)) {\n      this.debug(`${debugPrefix} ${destination.target} (guarded)`, debugQuietColor);\n      return;\n    }\n    if (!destination) {\n      this.debug(`${debugPrefix} ${this.state}`, debugQuietColor);\n      return;\n    }\n    const destinationState = this.getDestinationState(destination);\n    const exitFn = destinationState === this.state ? void 0 : currentStateConfig.onExit;\n    this.debug(`${debugPrefix} ${destinationState}`, debugColor);\n    this.state = destinationState;\n    if (typeof destination === \"function\") {\n      destination(data);\n    } else if (typeof destination === \"object\" && !(destination instanceof _StateMachine)) {\n      destination.action?.(data);\n    }\n    exitFn?.();\n    this.enterEach?.(currentState, destinationState);\n    if (destinationState !== currentState && destinationState !== _StateMachine.child && destinationState !== _StateMachine.parent) {\n      this.states[destinationState].onEnter?.(currentState, data);\n    }\n  }\n  transitionAsync(event, data) {\n    setTimeout(() => {\n      this.transition(event, data);\n    }, 0);\n  }\n  is(value) {\n    if (this.state === _StateMachine.child && this.childState) {\n      return this.childState.is(value);\n    }\n    return this.state === value;\n  }\n  resetHierarchy() {\n    this.debug(\n      `%c${this.constructor.name} | ${this.state} -> [resetHierarchy] -> ${this.defaultState}`,\n      \"color: green\"\n    );\n    this.state = this.defaultState;\n  }\n  transitionChild(event, data) {\n    if (this.state !== _StateMachine.child || !this.childState)\n      return true;\n    this.childState.transition(event, data);\n    if (!this.childState.is(_StateMachine.parent))\n      return true;\n    this.debug(`%c${this.constructor.name} | ${this.state} -> ${event} -> ${this.defaultState}`, debugColor);\n    this.state = this.defaultState;\n    this.states[this.state].onEnter?.();\n    this.childState.resetHierarchy();\n    return false;\n  }\n  getDestinationState(destination) {\n    let state = this.state;\n    if (typeof destination === \"string\") {\n      state = destination;\n    } else if (destination instanceof _StateMachine) {\n      this.childState = destination;\n      state = _StateMachine.child;\n    } else if (typeof destination === \"object\") {\n      if (destination.target instanceof _StateMachine) {\n        this.childState = destination.target;\n        state = _StateMachine.child;\n      } else if (destination.target != null) {\n        state = destination.target;\n      }\n    }\n    return state;\n  }\n};\n_StateMachine.child = \"__child\";\n_StateMachine.parent = \"__parent\";\nvar StateMachine = _StateMachine;\n\n// packages/ag-charts-community/src/util/textWrapper.ts\nvar TextWrapper = class {\n  static wrapText(text, options) {\n    return this.wrapLines(text, options).join(\"\\n\");\n  }\n  static wrapLines(text, options) {\n    const clippedResult = this.textWrap(text, options);\n    if (options.overflow === \"hide\" && clippedResult.some((l) => l.endsWith(TextUtils.EllipsisChar))) {\n      return [];\n    }\n    return clippedResult;\n  }\n  static appendEllipsis(text) {\n    return text.replace(/[.,]{1,5}$/, \"\") + TextUtils.EllipsisChar;\n  }\n  static truncateLine(text, measurer, maxWidth, ellipsisForce) {\n    const ellipsisWidth = measurer.textWidth(TextUtils.EllipsisChar);\n    let estimatedWidth = 0;\n    let i = 0;\n    for (; i < text.length; i++) {\n      const charWidth = measurer.textWidth(text.charAt(i));\n      if (estimatedWidth + charWidth > maxWidth)\n        break;\n      estimatedWidth += charWidth;\n    }\n    if (text.length === i && (!ellipsisForce || estimatedWidth + ellipsisWidth <= maxWidth)) {\n      return ellipsisForce ? text + TextUtils.EllipsisChar : text;\n    }\n    text = text.slice(0, i).trimEnd();\n    while (text.length && measurer.textWidth(text) + ellipsisWidth > maxWidth) {\n      text = text.slice(0, -1).trimEnd();\n    }\n    return text + TextUtils.EllipsisChar;\n  }\n  static textWrap(text, options) {\n    const lines = text.split(TextUtils.lineSplitter);\n    const measurer = CachedTextMeasurerPool.getMeasurer(options);\n    if (options.textWrap === \"never\") {\n      return lines.map((line) => this.truncateLine(line.trimEnd(), measurer, options.maxWidth));\n    }\n    const result = [];\n    const wrapHyphenate = options.textWrap === \"hyphenate\";\n    const wrapOnSpace = options.textWrap == null || options.textWrap === \"on-space\";\n    for (let line of lines) {\n      line = line.trimEnd();\n      if (line === \"\") {\n        result.push(line);\n        continue;\n      }\n      for (let i = 0, estimatedWidth = 0, lastSpaceIndex = 0; i < line.length; i++) {\n        const char = line.charAt(i);\n        estimatedWidth += measurer.textWidth(char);\n        if (char === \" \") {\n          lastSpaceIndex = i;\n        }\n        if (estimatedWidth > options.maxWidth) {\n          if (i === 0)\n            break;\n          const actualWidth = measurer.textWidth(line.slice(0, i + 1));\n          if (actualWidth <= options.maxWidth) {\n            estimatedWidth = actualWidth;\n            continue;\n          }\n          if (lastSpaceIndex) {\n            const nextWord = this.getWordAt(line, lastSpaceIndex + 1);\n            const textWidth = measurer.textWidth(nextWord);\n            if (textWidth <= options.maxWidth) {\n              result.push(line.slice(0, lastSpaceIndex).trimEnd());\n              line = line.slice(lastSpaceIndex).trimStart();\n              i = -1;\n              estimatedWidth = 0;\n              lastSpaceIndex = 0;\n              continue;\n            } else if (wrapOnSpace && textWidth > options.maxWidth) {\n              result.push(\n                line.slice(0, lastSpaceIndex).trimEnd(),\n                this.truncateLine(\n                  line.slice(lastSpaceIndex).trimStart(),\n                  measurer,\n                  options.maxWidth,\n                  true\n                )\n              );\n            }\n          } else if (wrapOnSpace) {\n            result.push(this.truncateLine(line, measurer, options.maxWidth, true));\n          }\n          if (wrapOnSpace) {\n            line = \"\";\n            break;\n          }\n          const postfix = wrapHyphenate ? \"-\" : \"\";\n          let newLine = line.slice(0, i).trim();\n          while (newLine.length && measurer.textWidth(newLine + postfix) > options.maxWidth) {\n            newLine = newLine.slice(0, -1).trimEnd();\n          }\n          result.push(newLine + postfix);\n          if (!newLine.length) {\n            line = \"\";\n            break;\n          }\n          line = line.slice(newLine.length).trimStart();\n          i = -1;\n          estimatedWidth = 0;\n          lastSpaceIndex = 0;\n        }\n      }\n      if (line) {\n        result.push(line);\n      }\n    }\n    this.avoidOrphans(result, measurer, options);\n    return this.clipLines(result, measurer, options);\n  }\n  static getWordAt(text, position) {\n    const nextSpaceIndex = text.indexOf(\" \", position);\n    return nextSpaceIndex === -1 ? text.slice(position) : text.slice(position, nextSpaceIndex);\n  }\n  static clipLines(lines, measurer, options) {\n    if (!options.maxHeight) {\n      return lines;\n    }\n    const { height: height2, lineMetrics } = measurer.measureLines(lines);\n    if (height2 <= options.maxHeight) {\n      return lines;\n    }\n    for (let i = 0, cumulativeHeight = 0; i < lineMetrics.length; i++) {\n      const { lineHeight } = lineMetrics[i];\n      cumulativeHeight += lineHeight;\n      if (cumulativeHeight > options.maxHeight) {\n        if (options.overflow === \"hide\") {\n          return [];\n        }\n        const clippedResults = lines.slice(0, i || 1);\n        const lastLine = clippedResults.pop();\n        return clippedResults.concat(this.truncateLine(lastLine, measurer, options.maxWidth, true));\n      }\n    }\n    return lines;\n  }\n  static avoidOrphans(lines, measurer, options) {\n    if (options.avoidOrphans === false || lines.length < 2)\n      return;\n    const { length: length2 } = lines;\n    const lastLine = lines[length2 - 1];\n    const beforeLast = lines[length2 - 2];\n    if (beforeLast.length < lastLine.length)\n      return;\n    const lastSpaceIndex = beforeLast.lastIndexOf(\" \");\n    if (lastSpaceIndex === -1 || lastSpaceIndex === beforeLast.indexOf(\" \") || lastLine.includes(\" \"))\n      return;\n    const lastWord = beforeLast.slice(lastSpaceIndex + 1);\n    if (measurer.textWidth(lastLine + lastWord) <= options.maxWidth) {\n      lines[length2 - 2] = beforeLast.slice(0, lastSpaceIndex);\n      lines[length2 - 1] = lastWord + \" \" + lastLine;\n    }\n  }\n};\n\n// packages/ag-charts-community/src/module/enterpriseModule.ts\nvar enterpriseModule = {\n  isEnterprise: false\n};\n\n// packages/ag-charts-community/src/util/attributeUtil.ts\nfunction setAttribute(e, qualifiedName, value) {\n  if (value === void 0 || value === \"\") {\n    e?.removeAttribute(qualifiedName);\n  } else {\n    e?.setAttribute(qualifiedName, value.toString());\n  }\n}\nfunction setAttributes(e, attrs) {\n  if (attrs == null)\n    return;\n  let key;\n  for (key in attrs) {\n    if (key === \"class\")\n      continue;\n    setAttribute(e, key, attrs[key]);\n  }\n}\nfunction getAttribute(e, qualifiedName, defaultValue) {\n  if (!(e instanceof HTMLElement))\n    return void 0;\n  const value = e.getAttribute(qualifiedName);\n  if (value === null)\n    return defaultValue;\n  const type = typeof {}[qualifiedName];\n  if (type === \"boolean\")\n    return value === \"true\";\n  if (type === \"number\")\n    return Number(value);\n  if (type === \"string\")\n    return value;\n  return void 0;\n}\nfunction setElementStyle(e, property, value) {\n  if (e == null)\n    return;\n  if (value == null) {\n    e.style.removeProperty(property);\n  } else {\n    e.style.setProperty(property, value);\n  }\n}\n\n// packages/ag-charts-community/src/util/placement.ts\nfunction calculatePlacement(naturalWidth, naturalHeight, container, bounds) {\n  let { top, right, bottom, left, width: width2, height: height2 } = bounds;\n  if (left != null) {\n    if (width2 != null) {\n      right = container.width - left + width2;\n    } else if (right != null) {\n      width2 = container.width - left - right;\n    }\n  } else if (right != null && width2 != null) {\n    left = container.width - right - width2;\n  }\n  if (top != null) {\n    if (height2 != null) {\n      bottom = container.height - top - height2;\n    } else if (bottom != null) {\n      height2 = container.height - bottom - top;\n    }\n  } else if (bottom != null && height2 != null) {\n    top = container.height - bottom - height2;\n  }\n  if (width2 == null) {\n    if (height2 == null) {\n      width2 = naturalWidth;\n      height2 = naturalHeight;\n    } else {\n      width2 = Math.ceil(naturalWidth * height2 / naturalHeight);\n    }\n  } else if (height2 == null) {\n    height2 = Math.ceil(naturalHeight * width2 / naturalWidth);\n  }\n  if (left == null) {\n    if (right == null) {\n      left = Math.floor((container.width - width2) / 2);\n    } else {\n      left = container.width - right - width2;\n    }\n  }\n  if (top == null) {\n    if (bottom == null) {\n      top = Math.floor((container.height - height2) / 2);\n    } else {\n      top = container.height - height2 - bottom;\n    }\n  }\n  return { x: left, y: top, width: width2, height: height2 };\n}\n\n// packages/ag-charts-community/src/chart/tooltip/tooltip.ts\nvar DEFAULT_TOOLTIP_CLASS = \"ag-chart-tooltip\";\nvar DEFAULT_TOOLTIP_DARK_CLASS = \"ag-chart-dark-tooltip\";\nvar EMPTY_TOOLTIP_CONTENT = { html: \"\", ariaLabel: \"\" };\nfunction toAccessibleText(inputHtml) {\n  const lineConverter = (_match, offset4, str) => {\n    if (offset4 === 0 || str[offset4 - 1] !== \".\") {\n      return \". \";\n    }\n    return \" \";\n  };\n  return inputHtml.replace(/<br\\s*\\/?>/g, lineConverter).replace(/<\\/p\\s+>/g, lineConverter).replace(/<\\/li\\s*>/g, lineConverter).replace(/<[^<>]+>/g, \"\").replace(/\\n+/g, \" \").replace(/\\s+/g, \" \");\n}\nfunction toTooltipHtml(input, defaults) {\n  if (typeof input === \"string\") {\n    return { html: input, ariaLabel: input };\n  }\n  const {\n    content = defaults?.content ?? \"\",\n    title = defaults?.title,\n    color = defaults?.color ?? \"white\",\n    backgroundColor = defaults?.backgroundColor ?? \"#888\"\n  } = input;\n  const titleHtml = title ? `<div class=\"${DEFAULT_TOOLTIP_CLASS}-title\"\n        style=\"color: ${color}; background-color: ${backgroundColor}\">${title}</div>` : \"\";\n  const titleAria = title ? `${title}: ` : \"\";\n  const contentHtml = content ? `<div class=\"${DEFAULT_TOOLTIP_CLASS}-content\">${content}</div>` : \"\";\n  return {\n    html: `${titleHtml}${contentHtml}`,\n    ariaLabel: toAccessibleText(`${titleAria}${content}`)\n  };\n}\nvar TooltipPosition = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    /** The type of positioning for the tooltip. By default, the tooltip follows the pointer. */\n    this.type = \"pointer\";\n    /** The horizontal offset in pixels for the position of the tooltip. */\n    this.xOffset = 0;\n    /** The vertical offset in pixels for the position of the tooltip. */\n    this.yOffset = 0;\n  }\n};\n__decorateClass([\n  Validate(\n    UNION(\n      [\n        \"pointer\",\n        \"node\",\n        \"top\",\n        \"right\",\n        \"bottom\",\n        \"left\",\n        \"top-left\",\n        \"top-right\",\n        \"bottom-right\",\n        \"bottom-left\",\n        { value: \"sparkline\", undocumented: true }\n      ],\n      \"a position type\"\n    )\n  )\n], TooltipPosition.prototype, \"type\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], TooltipPosition.prototype, \"xOffset\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], TooltipPosition.prototype, \"yOffset\", 2);\nvar Tooltip = class extends BaseProperties {\n  constructor() {\n    super();\n    this.enabled = true;\n    this.delay = 0;\n    this.range = void 0;\n    this.wrapping = \"hyphenate\";\n    this.position = new TooltipPosition();\n    this.darkTheme = false;\n    this.bounds = \"extended\";\n    this.enableInteraction = false;\n    this.lastVisibilityChange = Date.now();\n    this.wrapTypes = [\"always\", \"hyphenate\", \"on-space\", \"never\"];\n    this.showTimeout = 0;\n    this._showArrow = true;\n  }\n  get interactive() {\n    return this.enableInteraction;\n  }\n  setup(domManager) {\n    this.element = domManager.addChild(\"canvas-overlay\", DEFAULT_TOOLTIP_CLASS);\n    this.element.classList.add(DEFAULT_TOOLTIP_CLASS);\n  }\n  destroy(domManager) {\n    domManager.removeChild(\"canvas-overlay\", DEFAULT_TOOLTIP_CLASS);\n  }\n  isVisible() {\n    return !this.element?.classList.contains(DEFAULT_TOOLTIP_CLASS + \"-hidden\");\n  }\n  /**\n   * Shows tooltip at the given event's coordinates.\n   * If the `html` parameter is missing, moves the existing tooltip to the new position.\n   */\n  show(boundingRect, canvasRect, meta, content, instantly = false) {\n    const { element: element2 } = this;\n    const existingPosition = element2?.getBoundingClientRect();\n    if (content != null && element2 != null) {\n      element2.innerHTML = content.html;\n    } else if (!element2?.innerHTML) {\n      this.toggle(false);\n      return;\n    }\n    const positionType = meta.position?.type ?? this.position.type;\n    const xOffset = meta.position?.xOffset ?? 0;\n    const yOffset = meta.position?.yOffset ?? 0;\n    const tooltipBounds = this.getTooltipBounds({ positionType, meta, yOffset, xOffset, canvasRect });\n    const relativeRect = {\n      x: boundingRect.x - canvasRect.x,\n      y: boundingRect.y - canvasRect.y,\n      width: boundingRect.width,\n      height: boundingRect.height\n    };\n    const position = calculatePlacement(element2.clientWidth, element2.clientHeight, relativeRect, tooltipBounds);\n    const minX = relativeRect.x;\n    const minY = relativeRect.y;\n    const maxX = relativeRect.width - element2.clientWidth - 1 + minX;\n    const maxY = relativeRect.height - element2.clientHeight + minY;\n    const left = clamp(minX, position.x, maxX);\n    const top = clamp(minY, position.y, maxY);\n    let willExistOutsideBoundingRectDuringTransition = false;\n    if (existingPosition != null) {\n      const maxXWithPreviousPosition = relativeRect.width - existingPosition.width - 1 + minX;\n      const maxYWithPreviousPosition = relativeRect.height - existingPosition.height + minY;\n      willExistOutsideBoundingRectDuringTransition = maxXWithPreviousPosition > maxX || maxYWithPreviousPosition > maxY;\n    }\n    const constrained = left !== position.x || top !== position.y;\n    const defaultShowArrow = (positionType === \"node\" || positionType === \"pointer\" || positionType === \"sparkline\") && !constrained && !xOffset && !yOffset;\n    const showArrow = meta.showArrow ?? this.showArrow ?? defaultShowArrow;\n    this.updateShowArrow(showArrow);\n    if (willExistOutsideBoundingRectDuringTransition) {\n      element2.style.transition = \"none\";\n    }\n    element2.style.transform = `translate(${Math.round(left)}px, ${Math.round(top)}px)`;\n    if (willExistOutsideBoundingRectDuringTransition) {\n      element2.style.transition = \"\";\n    }\n    if (meta.enableInteraction) {\n      this.enableInteraction = true;\n      element2.style.pointerEvents = \"auto\";\n      setAttribute(element2, \"aria-hidden\", void 0);\n    } else {\n      this.enableInteraction = false;\n      element2.style.pointerEvents = \"none\";\n      setAttribute(element2, \"aria-hidden\", true);\n    }\n    if (this.delay > 0 && !instantly) {\n      this.toggle(false);\n      this.showTimeout = setTimeout(() => {\n        this.toggle(true);\n      }, this.delay);\n    } else {\n      this.toggle(true);\n    }\n  }\n  toggle(visible) {\n    if (!this.element)\n      return;\n    const { classList } = this.element;\n    const toggleClass = (name, include) => classList.toggle(`${DEFAULT_TOOLTIP_CLASS}-${name}`, include);\n    const wasVisible = this.isVisible();\n    let timeSinceLastVisibilityChangeMs = Infinity;\n    if (!visible) {\n      clearTimeout(this.showTimeout);\n    }\n    if (wasVisible !== visible) {\n      const now = Date.now();\n      timeSinceLastVisibilityChangeMs = now - this.lastVisibilityChange;\n      this.lastVisibilityChange = now;\n    }\n    const animatedMoveThresholdMs = 100;\n    const thrashingThresholdMs = 5;\n    const noAnimation = !wasVisible && visible && timeSinceLastVisibilityChangeMs > animatedMoveThresholdMs;\n    if (timeSinceLastVisibilityChangeMs > thrashingThresholdMs) {\n      toggleClass(\"no-animation\", noAnimation);\n    }\n    toggleClass(\"no-interaction\", !this.enableInteraction);\n    toggleClass(\"hidden\", !visible);\n    toggleClass(\"arrow\", this._showArrow);\n    classList.toggle(DEFAULT_TOOLTIP_DARK_CLASS, this.darkTheme);\n    for (const wrapType of this.wrapTypes) {\n      classList.toggle(`${DEFAULT_TOOLTIP_CLASS}-wrap-${wrapType}`, wrapType === this.wrapping);\n    }\n  }\n  updateShowArrow(show) {\n    this._showArrow = show;\n  }\n  getTooltipBounds(opts) {\n    if (!this.element)\n      return {};\n    const { positionType, meta, yOffset, xOffset, canvasRect } = opts;\n    const { clientWidth: tooltipWidth, clientHeight: tooltipHeight } = this.element;\n    const bounds = { width: tooltipWidth, height: tooltipHeight };\n    switch (positionType) {\n      case \"node\":\n      case \"pointer\": {\n        bounds.top = meta.offsetY + yOffset - tooltipHeight - 8;\n        bounds.left = meta.offsetX + xOffset - tooltipWidth / 2;\n        return bounds;\n      }\n      case \"top\": {\n        bounds.top = yOffset;\n        bounds.left = canvasRect.width / 2 - tooltipWidth / 2 + xOffset;\n        return bounds;\n      }\n      case \"right\": {\n        bounds.top = canvasRect.height / 2 - tooltipHeight / 2 + yOffset;\n        bounds.left = canvasRect.width - tooltipWidth / 2 + xOffset;\n        return bounds;\n      }\n      case \"left\": {\n        bounds.top = canvasRect.height / 2 - tooltipHeight / 2 + yOffset;\n        bounds.left = xOffset;\n        return bounds;\n      }\n      case \"bottom\": {\n        bounds.top = canvasRect.height - tooltipHeight + yOffset;\n        bounds.left = canvasRect.width / 2 - tooltipWidth / 2 + xOffset;\n        return bounds;\n      }\n      case \"top-left\": {\n        bounds.top = yOffset;\n        bounds.left = xOffset;\n        return bounds;\n      }\n      case \"top-right\": {\n        bounds.top = yOffset;\n        bounds.left = canvasRect.width - tooltipWidth + xOffset;\n        return bounds;\n      }\n      case \"bottom-right\": {\n        bounds.top = canvasRect.height - tooltipHeight + yOffset;\n        bounds.left = canvasRect.width - tooltipWidth + xOffset;\n        return bounds;\n      }\n      case \"bottom-left\": {\n        bounds.top = canvasRect.height - tooltipHeight + yOffset;\n        bounds.left = xOffset;\n        return bounds;\n      }\n      case \"sparkline\": {\n        if (enterpriseModule.isEnterprise) {\n          bounds.top = yOffset - tooltipHeight - 8;\n        } else {\n          bounds.top = meta.offsetY + yOffset - tooltipHeight - 8;\n        }\n        bounds.left = meta.offsetX + xOffset - tooltipWidth / 2;\n        return bounds;\n      }\n    }\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], Tooltip.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], Tooltip.prototype, \"showArrow\", 2);\n__decorateClass([\n  ObserveChanges((target, newValue, oldValue) => {\n    if (newValue) {\n      target.element?.classList.add(newValue);\n    }\n    if (oldValue) {\n      target.element?.classList.remove(oldValue);\n    }\n  }),\n  Validate(STRING, { optional: true })\n], Tooltip.prototype, \"class\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Tooltip.prototype, \"delay\", 2);\n__decorateClass([\n  Validate(INTERACTION_RANGE, { optional: true })\n], Tooltip.prototype, \"range\", 2);\n__decorateClass([\n  Validate(TEXT_WRAP)\n], Tooltip.prototype, \"wrapping\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], Tooltip.prototype, \"position\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], Tooltip.prototype, \"darkTheme\", 2);\n__decorateClass([\n  Validate(UNION([\"extended\", \"canvas\"]))\n], Tooltip.prototype, \"bounds\", 2);\n\n// packages/ag-charts-community/src/chart/caption.ts\nvar Caption = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.id = createId(this);\n    this.node = new RotatableText({ zIndex: 1 }).setProperties({\n      textAlign: \"center\",\n      pointerEvents: 1 /* None */\n    });\n    this.enabled = false;\n    this.textAlign = \"center\";\n    this.fontSize = 10;\n    this.fontFamily = \"sans-serif\";\n    this.wrapping = \"always\";\n    this.padding = 0;\n    this.layoutStyle = \"block\";\n    this.truncated = false;\n  }\n  registerInteraction(moduleCtx, where) {\n    const { regionManager, proxyInteractionService, layoutManager } = moduleCtx;\n    const region = regionManager.getRegion(\"root\");\n    const destroyFns = [\n      layoutManager.addListener(\"layout:complete\", () => this.updateA11yText(proxyInteractionService, where)),\n      region.addListener(\"hover\", (event) => this.handleMouseMove(moduleCtx, event)),\n      region.addListener(\"leave\", (event) => this.handleMouseLeave(moduleCtx, event))\n    ];\n    return joinFunctions(...destroyFns);\n  }\n  computeTextWrap(containerWidth, containerHeight) {\n    const { text, padding, wrapping } = this;\n    const maxWidth = Math.min(this.maxWidth ?? Infinity, containerWidth) - padding * 2;\n    const maxHeight = this.maxHeight ?? containerHeight - padding * 2;\n    if (!isFinite(maxWidth) && !isFinite(maxHeight)) {\n      this.node.text = text;\n      return;\n    }\n    const wrappedText = TextWrapper.wrapText(text ?? \"\", { maxWidth, maxHeight, font: this, textWrap: wrapping });\n    this.node.text = wrappedText;\n    this.truncated = wrappedText.includes(TextUtils.EllipsisChar);\n  }\n  updateA11yText(proxyService, where) {\n    if (this.enabled && this.text) {\n      const bbox = Transformable.toCanvas(this.node);\n      if (bbox) {\n        const { id } = this;\n        this.proxyText ?? (this.proxyText = proxyService.createProxyElement({ type: \"text\", id, parent: where }));\n        this.proxyText.textContent = this.text;\n        this.proxyText.updateBounds(bbox);\n      }\n    } else {\n      this.proxyText?.remove();\n      this.proxyText = void 0;\n    }\n  }\n  handleMouseMove(moduleCtx, event) {\n    if (event !== void 0 && this.enabled && this.node.visible && this.truncated) {\n      const { offsetX, offsetY } = event;\n      moduleCtx.tooltipManager.updateTooltip(\n        this.id,\n        { offsetX, offsetY, lastPointerEvent: event, showArrow: false },\n        toTooltipHtml({ content: this.text })\n      );\n    }\n  }\n  handleMouseLeave(moduleCtx, _event) {\n    moduleCtx.tooltipManager.removeTooltip(this.id);\n  }\n};\nCaption.SMALL_PADDING = 10;\nCaption.LARGE_PADDING = 20;\n__decorateClass([\n  Validate(BOOLEAN),\n  ProxyPropertyOnWrite(\"node\", \"visible\")\n], Caption.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true }),\n  ProxyPropertyOnWrite(\"node\")\n], Caption.prototype, \"text\", 2);\n__decorateClass([\n  Validate(TEXT_ALIGN, { optional: true }),\n  ProxyPropertyOnWrite(\"node\")\n], Caption.prototype, \"textAlign\", 2);\n__decorateClass([\n  Validate(FONT_STYLE, { optional: true }),\n  ProxyPropertyOnWrite(\"node\")\n], Caption.prototype, \"fontStyle\", 2);\n__decorateClass([\n  Validate(FONT_WEIGHT, { optional: true }),\n  ProxyPropertyOnWrite(\"node\")\n], Caption.prototype, \"fontWeight\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  ProxyPropertyOnWrite(\"node\")\n], Caption.prototype, \"fontSize\", 2);\n__decorateClass([\n  Validate(STRING),\n  ProxyPropertyOnWrite(\"node\")\n], Caption.prototype, \"fontFamily\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true }),\n  ProxyPropertyOnWrite(\"node\", \"fill\")\n], Caption.prototype, \"color\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], Caption.prototype, \"spacing\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], Caption.prototype, \"maxWidth\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], Caption.prototype, \"maxHeight\", 2);\n__decorateClass([\n  Validate(TEXT_WRAP)\n], Caption.prototype, \"wrapping\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Caption.prototype, \"padding\", 2);\n__decorateClass([\n  Validate(STRING)\n], Caption.prototype, \"layoutStyle\", 2);\n\n// packages/ag-charts-community/src/scene/layer.ts\nvar _Layer = class _Layer extends Group {\n  constructor(opts) {\n    super(opts);\n    this.opts = opts;\n    this.lastBBox = void 0;\n  }\n  static is(value) {\n    return value instanceof _Layer;\n  }\n  markDirty(type = 1 /* TRIVIAL */) {\n    super.markDirty(type, 1 /* TRIVIAL */);\n  }\n  preRender() {\n    const counts = super.preRender();\n    if (counts.nonGroups > 0) {\n      this.layer ?? (this.layer = this._layerManager?.addLayer({\n        name: this.name,\n        zIndex: this.zIndex,\n        zIndexSubOrder: this.zIndexSubOrder,\n        getComputedOpacity: () => this.getComputedOpacity(),\n        getVisibility: () => this.getVisibility()\n      }));\n      if (this.opts?.deriveZIndexFromChildren) {\n        this.deriveZIndexFromChildren();\n      }\n    }\n    return counts;\n  }\n  debugSkip(renderCtx) {\n    super.debugSkip(renderCtx);\n    const { stats } = renderCtx;\n    if (stats) {\n      stats.layersSkipped++;\n      stats.nodesSkipped += nodeCount(this).count;\n    }\n  }\n  render(renderCtx) {\n    if (!this.layer) {\n      return super.render(renderCtx);\n    }\n    const { opts: { name } = {}, _debug: debug3, clipRect } = this;\n    const { isDirty, isChildDirty, isChildLayerDirty } = this.isDirty(renderCtx);\n    const { stats } = renderCtx;\n    let { forceRender, clipBBox } = renderCtx;\n    const currentBBox = this.getBBox();\n    if (!this.lastBBox?.equals(currentBBox)) {\n      forceRender = \"dirtyTransform\";\n      this.lastBBox = currentBBox;\n    }\n    if (!isDirty && !isChildDirty && !isChildLayerDirty && !forceRender) {\n      this.debugSkip(renderCtx);\n      this.markClean({ recursive: false });\n      return;\n    }\n    if (forceRender !== \"dirtyTransform\") {\n      forceRender = isChildDirty || this.dirtyZIndex;\n    }\n    if (forceRender) {\n      this.layer.clear();\n    }\n    if (this.dirtyZIndex) {\n      this.sortChildren(Group.compareChildren);\n    }\n    const children = this.sortedChildren();\n    const renderCtxTransform = renderCtx.ctx.getTransform();\n    const { context: ctx } = this.layer;\n    ctx.save();\n    if (clipBBox) {\n      const { width: width2, height: height2, x, y } = clipBBox;\n      ctx.beginPath();\n      ctx.rect(x, y, width2, height2);\n      ctx.clip();\n      debug3?.(() => ({ name, clipBBox, renderCtx, group: this, ctxTransform: ctx.getTransform() }));\n    }\n    ctx.setTransform(renderCtxTransform);\n    if (this.clipRect) {\n      clipBBox = this.renderClip({ ...renderCtx, ctx });\n    }\n    this.renderChildren(children, { ...renderCtx, ctx, forceRender, clipBBox });\n    super.render(renderCtx, true);\n    if (clipRect) {\n      ctx.restore();\n    }\n    for (const child of this.virtualChildren()) {\n      child.markClean({ recursive: \"virtual\" });\n    }\n    if (stats)\n      stats.layersRendered++;\n    ctx.restore();\n    ctx.verifyDepthZero?.();\n    if (name && stats) {\n      debug3?.({\n        name,\n        renderCtx,\n        result: \"rendered\",\n        skipped: stats.nodesSkipped,\n        counts: nodeCount(this),\n        group: this\n      });\n    }\n  }\n  deriveZIndexFromChildren() {\n    let lastChild;\n    for (const child of this.children()) {\n      if (!child.childNodeCounts.nonGroups)\n        continue;\n      if (!lastChild || Group.compareChildren(lastChild, child) < 0) {\n        lastChild = child;\n      }\n    }\n    this.zIndex = lastChild?.zIndex ?? -Infinity;\n    this.zIndexSubOrder = lastChild?.zIndexSubOrder;\n  }\n  _setLayerManager(layersManager) {\n    if (this.layer) {\n      this._layerManager?.removeLayer(this.layer);\n      this.layer = void 0;\n    }\n    super._setLayerManager(layersManager);\n  }\n  getComputedOpacity() {\n    let opacity = 1;\n    for (const node of this.traverseUp(true)) {\n      if (node instanceof Group) {\n        opacity *= node.opacity;\n      }\n    }\n    return opacity;\n  }\n  getVisibility() {\n    for (const node of this.traverseUp(true)) {\n      if (!node.visible) {\n        return false;\n      }\n    }\n    return true;\n  }\n  onVisibleChange() {\n    if (this.layer) {\n      this.layer.enabled = this.visible;\n    }\n  }\n  onZIndexChange() {\n    super.onZIndexChange();\n    if (this.layer) {\n      this._layerManager?.moveLayer(this.layer, this.zIndex, this.zIndexSubOrder);\n    }\n  }\n};\n_Layer.className = \"Layer\";\nvar Layer = _Layer;\nvar TranslatableLayer = class extends Translatable(Layer) {\n};\n\n// packages/ag-charts-community/src/scene/shape/range.ts\nvar Range = class extends Shape {\n  constructor(opts = {}) {\n    super(opts);\n    this.x1 = 0;\n    this.y1 = 0;\n    this.x2 = 0;\n    this.y2 = 0;\n    this.startLine = false;\n    this.endLine = false;\n    this.isRange = false;\n    this.restoreOwnStyles();\n  }\n  computeBBox() {\n    return new BBox(this.x1, this.y1, this.x2 - this.x1, this.y2 - this.y1);\n  }\n  isPointInPath(_x, _y) {\n    return false;\n  }\n  render(renderCtx) {\n    const { ctx, forceRender, stats } = renderCtx;\n    if (this.dirty === 0 /* NONE */ && !forceRender) {\n      if (stats)\n        stats.nodesSkipped += nodeCount(this).count;\n      return;\n    }\n    let { x1, y1, x2, y2 } = this;\n    x1 = this.align(x1);\n    y1 = this.align(y1);\n    x2 = this.align(x2);\n    y2 = this.align(y2);\n    const { fill, opacity, isRange } = this;\n    const fillActive = !!(isRange && fill);\n    if (fillActive) {\n      const { fillOpacity } = this;\n      this.applyFill(ctx);\n      ctx.globalAlpha = opacity * fillOpacity;\n      ctx.beginPath();\n      ctx.moveTo(x1, y1);\n      ctx.lineTo(x2, y1);\n      ctx.lineTo(x2, y2);\n      ctx.lineTo(x1, y2);\n      ctx.closePath();\n      ctx.fill();\n    }\n    const { stroke, strokeWidth, startLine, endLine } = this;\n    const strokeActive = !!((startLine || endLine) && stroke && strokeWidth);\n    if (strokeActive) {\n      const { strokeOpacity, lineDash, lineDashOffset, lineCap, lineJoin } = this;\n      ctx.strokeStyle = stroke;\n      ctx.globalAlpha = opacity * strokeOpacity;\n      ctx.lineWidth = strokeWidth;\n      if (lineDash) {\n        ctx.setLineDash(lineDash);\n      }\n      if (lineDashOffset) {\n        ctx.lineDashOffset = lineDashOffset;\n      }\n      if (lineCap) {\n        ctx.lineCap = lineCap;\n      }\n      if (lineJoin) {\n        ctx.lineJoin = lineJoin;\n      }\n      ctx.beginPath();\n      if (startLine) {\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y1);\n      }\n      if (endLine) {\n        ctx.moveTo(x2, y2);\n        ctx.lineTo(x1, y2);\n      }\n      ctx.stroke();\n    }\n    this.fillShadow?.markClean();\n    super.render(renderCtx);\n  }\n};\nRange.className = \"Range\";\nRange.defaultStyles = {\n  ...Shape.defaultStyles,\n  strokeWidth: 1\n};\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], Range.prototype, \"x1\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], Range.prototype, \"y1\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], Range.prototype, \"x2\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], Range.prototype, \"y2\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], Range.prototype, \"startLine\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], Range.prototype, \"endLine\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 2 /* MINOR */ })\n], Range.prototype, \"isRange\", 2);\n\n// packages/ag-charts-community/src/chart/label.ts\nvar Label = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = true;\n    this.fontSize = 12;\n    this.fontFamily = \"Verdana, sans-serif\";\n  }\n  getFont() {\n    return TextUtils.toFontString(this);\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], Label.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], Label.prototype, \"color\", 2);\n__decorateClass([\n  Validate(FONT_STYLE, { optional: true })\n], Label.prototype, \"fontStyle\", 2);\n__decorateClass([\n  Validate(FONT_WEIGHT, { optional: true })\n], Label.prototype, \"fontWeight\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Label.prototype, \"fontSize\", 2);\n__decorateClass([\n  Validate(STRING)\n], Label.prototype, \"fontFamily\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], Label.prototype, \"formatter\", 2);\nfunction calculateLabelRotation(opts) {\n  const { parallelFlipRotation = 0, regularFlipRotation = 0 } = opts;\n  const configuredRotation = opts.rotation ? normalizeAngle360(toRadians(opts.rotation)) : 0;\n  const parallelFlipFlag = !configuredRotation && parallelFlipRotation >= 0 && parallelFlipRotation <= Math.PI ? -1 : 1;\n  const regularFlipFlag = !configuredRotation && regularFlipRotation >= 0 && regularFlipRotation <= Math.PI ? -1 : 1;\n  let defaultRotation = 0;\n  if (opts.parallel) {\n    defaultRotation = parallelFlipFlag * Math.PI / 2;\n  } else if (regularFlipFlag === -1) {\n    defaultRotation = Math.PI;\n  }\n  return { configuredRotation, defaultRotation, parallelFlipFlag, regularFlipFlag };\n}\nfunction getLabelSpacing(minSpacing, rotated) {\n  if (!isNaN(minSpacing)) {\n    return minSpacing;\n  }\n  return rotated ? 0 : 10;\n}\nfunction getTextBaseline(parallel, labelRotation, sideFlag, parallelFlipFlag) {\n  if (parallel && !labelRotation) {\n    return sideFlag * parallelFlipFlag === -1 ? \"hanging\" : \"bottom\";\n  }\n  return \"middle\";\n}\nfunction getTextAlign(parallel, labelRotation, labelAutoRotation, sideFlag, regularFlipFlag) {\n  const labelRotated = labelRotation > 0 && labelRotation <= Math.PI;\n  const labelAutoRotated = labelAutoRotation > 0 && labelAutoRotation <= Math.PI;\n  const alignFlag = labelRotated || labelAutoRotated ? -1 : 1;\n  if (parallel) {\n    if (labelRotation || labelAutoRotation) {\n      if (sideFlag * alignFlag === -1) {\n        return \"end\";\n      }\n    } else {\n      return \"center\";\n    }\n  } else if (sideFlag * regularFlipFlag === -1) {\n    return \"end\";\n  }\n  return \"start\";\n}\nfunction calculateLabelBBox(text, bbox, labelMatrix) {\n  const { x: labelX, y: labelY, width: width2, height: height2 } = bbox;\n  const translatedBBox = new BBox(labelX, labelY, 0, 0);\n  labelMatrix.transformBBox(translatedBBox, bbox);\n  const { x, y } = bbox;\n  return {\n    point: { x, y },\n    label: { text, width: width2, height: height2 }\n  };\n}\n\n// packages/ag-charts-community/src/chart/zIndexMap.ts\nvar ZIndexMap = /* @__PURE__ */ ((ZIndexMap2) => {\n  ZIndexMap2[ZIndexMap2[\"SERIES_BACKGROUND\"] = 0] = \"SERIES_BACKGROUND\";\n  ZIndexMap2[ZIndexMap2[\"AXIS_GRID\"] = 1] = \"AXIS_GRID\";\n  ZIndexMap2[ZIndexMap2[\"AXIS\"] = 2] = \"AXIS\";\n  ZIndexMap2[ZIndexMap2[\"SERIES_CROSSLINE_RANGE\"] = 3] = \"SERIES_CROSSLINE_RANGE\";\n  ZIndexMap2[ZIndexMap2[\"SERIES_LAYER\"] = 4] = \"SERIES_LAYER\";\n  ZIndexMap2[ZIndexMap2[\"SERIES_HIGHLIGHT\"] = 5] = \"SERIES_HIGHLIGHT\";\n  ZIndexMap2[ZIndexMap2[\"AXIS_FOREGROUND\"] = 6] = \"AXIS_FOREGROUND\";\n  ZIndexMap2[ZIndexMap2[\"SERIES_CROSSHAIR\"] = 7] = \"SERIES_CROSSHAIR\";\n  ZIndexMap2[ZIndexMap2[\"CHART_OVERLAY\"] = 8] = \"CHART_OVERLAY\";\n  ZIndexMap2[ZIndexMap2[\"SERIES_CROSSLINE_LINE\"] = 9] = \"SERIES_CROSSLINE_LINE\";\n  ZIndexMap2[ZIndexMap2[\"SERIES_ANNOTATION\"] = 10] = \"SERIES_ANNOTATION\";\n  ZIndexMap2[ZIndexMap2[\"CHART_ANNOTATION\"] = 11] = \"CHART_ANNOTATION\";\n  ZIndexMap2[ZIndexMap2[\"CHART_ANNOTATION_FOCUSED\"] = 12] = \"CHART_ANNOTATION_FOCUSED\";\n  ZIndexMap2[ZIndexMap2[\"STATUS_BAR\"] = 13] = \"STATUS_BAR\";\n  ZIndexMap2[ZIndexMap2[\"SERIES_LABEL\"] = 14] = \"SERIES_LABEL\";\n  ZIndexMap2[ZIndexMap2[\"LEGEND\"] = 15] = \"LEGEND\";\n  ZIndexMap2[ZIndexMap2[\"NAVIGATOR\"] = 16] = \"NAVIGATOR\";\n  ZIndexMap2[ZIndexMap2[\"FOREGROUND\"] = 17] = \"FOREGROUND\";\n  return ZIndexMap2;\n})(ZIndexMap || {});\n\n// packages/ag-charts-community/src/util/value.ts\nfunction isStringObject(value) {\n  return value != null && Object.hasOwn(value, \"toString\") && isString(value.toString());\n}\nfunction isNumberObject(value) {\n  return value != null && Object.hasOwn(value, \"valueOf\") && isFiniteNumber(value.valueOf());\n}\nfunction isContinuous(value) {\n  return isFiniteNumber(value) || isValidDate(value) || isNumberObject(value);\n}\nfunction checkDatum(value, isContinuousScale) {\n  return value != null && (!isContinuousScale || isContinuous(value));\n}\nfunction transformIntegratedCategoryValue(value) {\n  if (isStringObject(value) && Object.hasOwn(value, \"id\")) {\n    return value.id;\n  }\n  return value;\n}\n\n// packages/ag-charts-community/src/chart/crossline/crossLine.ts\nvar MATCHING_CROSSLINE_TYPE = (property) => {\n  return property === \"value\" ? predicateWithMessage(\n    (_, ctx) => ctx.target[\"type\"] === \"line\",\n    (ctx) => ctx.target[\"type\"] === \"range\" ? `crossLine type 'range' to have a 'range' property instead of 'value'` : `crossLine property 'type' to be 'line'`\n  ) : predicateWithMessage(\n    (_, ctx) => ctx.target[\"type\"] === \"range\",\n    (ctx) => ctx.target.type === \"line\" ? `crossLine type 'line' to have a 'value' property instead of 'range'` : `crossLine property 'type' to be 'range'`\n  );\n};\nvar validateCrossLineValues = (type, value, range3, scale2, visibilityCheck) => {\n  const lineCrossLine = type === \"line\" && value !== void 0;\n  const rangeCrossLine = type === \"range\" && range3 !== void 0;\n  if (!lineCrossLine && !rangeCrossLine) {\n    return true;\n  }\n  const [start2, end2] = range3 ?? [value, void 0];\n  const isContinuous2 = ContinuousScale.is(scale2) || OrdinalTimeScale.is(scale2);\n  const validStart = checkDatum(start2, isContinuous2) && !isNaN(scale2.convert(start2));\n  const validEnd = checkDatum(end2, isContinuous2) && !isNaN(scale2.convert(end2));\n  if (lineCrossLine && validStart || rangeCrossLine && validStart && validEnd) {\n    return visibilityCheck?.() ?? true;\n  }\n  const message = [`Expecting crossLine`];\n  if (rangeCrossLine) {\n    if (!validStart) {\n      message.push(`range start ${stringify(start2)}`);\n    }\n    if (!validEnd) {\n      message.push(`${validStart ? \"\" : \"and \"}range end ${stringify(end2)}`);\n    }\n  } else {\n    message.push(`value ${stringify(start2)}`);\n  }\n  message.push(`to match the axis scale domain.`);\n  Logger.warnOnce(message.join(\" \"));\n  return false;\n};\n\n// packages/ag-charts-community/src/chart/crossline/crossLineLabelPosition.ts\nvar horizontalCrosslineTranslationDirections = {\n  top: { xTranslationDirection: 0, yTranslationDirection: -1 },\n  bottom: { xTranslationDirection: 0, yTranslationDirection: 1 },\n  left: { xTranslationDirection: -1, yTranslationDirection: 0 },\n  right: { xTranslationDirection: 1, yTranslationDirection: 0 },\n  topLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n  topRight: { xTranslationDirection: -1, yTranslationDirection: -1 },\n  bottomLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n  bottomRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n  inside: { xTranslationDirection: 0, yTranslationDirection: 0 },\n  insideLeft: { xTranslationDirection: 1, yTranslationDirection: 0 },\n  insideRight: { xTranslationDirection: -1, yTranslationDirection: 0 },\n  insideTop: { xTranslationDirection: 0, yTranslationDirection: 1 },\n  insideBottom: { xTranslationDirection: 0, yTranslationDirection: -1 },\n  insideTopLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n  insideBottomLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n  insideTopRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n  insideBottomRight: { xTranslationDirection: -1, yTranslationDirection: -1 }\n};\nvar verticalCrossLineTranslationDirections = {\n  top: { xTranslationDirection: 1, yTranslationDirection: 0 },\n  bottom: { xTranslationDirection: -1, yTranslationDirection: 0 },\n  left: { xTranslationDirection: 0, yTranslationDirection: -1 },\n  right: { xTranslationDirection: 0, yTranslationDirection: 1 },\n  topLeft: { xTranslationDirection: -1, yTranslationDirection: -1 },\n  topRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n  bottomLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n  bottomRight: { xTranslationDirection: 1, yTranslationDirection: 1 },\n  inside: { xTranslationDirection: 0, yTranslationDirection: 0 },\n  insideLeft: { xTranslationDirection: 0, yTranslationDirection: 1 },\n  insideRight: { xTranslationDirection: 0, yTranslationDirection: -1 },\n  insideTop: { xTranslationDirection: -1, yTranslationDirection: 0 },\n  insideBottom: { xTranslationDirection: 1, yTranslationDirection: 0 },\n  insideTopLeft: { xTranslationDirection: -1, yTranslationDirection: 1 },\n  insideBottomLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n  insideTopRight: { xTranslationDirection: -1, yTranslationDirection: -1 },\n  insideBottomRight: { xTranslationDirection: 1, yTranslationDirection: -1 }\n};\nfunction calculateLabelTranslation({\n  yDirection,\n  padding = 0,\n  position = \"top\",\n  bbox\n}) {\n  const crossLineTranslationDirections = yDirection ? horizontalCrosslineTranslationDirections : verticalCrossLineTranslationDirections;\n  const { xTranslationDirection, yTranslationDirection } = crossLineTranslationDirections[position];\n  const xTranslation = xTranslationDirection * (padding + bbox.width / 2);\n  const yTranslation = yTranslationDirection * (padding + bbox.height / 2);\n  return {\n    xTranslation,\n    yTranslation\n  };\n}\nfunction calculateLabelChartPadding({\n  yDirection,\n  bbox,\n  padding = 0,\n  position = \"top\"\n}) {\n  const chartPadding = {};\n  if (position.startsWith(\"inside\"))\n    return chartPadding;\n  if (position === \"top\" && !yDirection) {\n    chartPadding.top = padding + bbox.height;\n  } else if (position === \"bottom\" && !yDirection) {\n    chartPadding.bottom = padding + bbox.height;\n  } else if (position === \"left\" && yDirection) {\n    chartPadding.left = padding + bbox.width;\n  } else if (position === \"right\" && yDirection) {\n    chartPadding.right = padding + bbox.width;\n  }\n  return chartPadding;\n}\nvar POSITION_TOP_COORDINATES = ({ direction, xEnd, yStart, yEnd }) => {\n  if (direction === \"y\" /* Y */) {\n    return { x: xEnd / 2, y: yStart };\n  } else {\n    return { x: xEnd, y: isNaN(yEnd) ? yStart : (yStart + yEnd) / 2 };\n  }\n};\nvar POSITION_LEFT_COORDINATES = ({ direction, xStart, xEnd, yStart, yEnd }) => {\n  if (direction === \"y\" /* Y */) {\n    return { x: xStart, y: isNaN(yEnd) ? yStart : (yStart + yEnd) / 2 };\n  } else {\n    return { x: xEnd / 2, y: yStart };\n  }\n};\nvar POSITION_RIGHT_COORDINATES = ({ direction, xEnd, yStart, yEnd }) => {\n  if (direction === \"y\" /* Y */) {\n    return { x: xEnd, y: isNaN(yEnd) ? yStart : (yStart + yEnd) / 2 };\n  } else {\n    return { x: xEnd / 2, y: isNaN(yEnd) ? yStart : yEnd };\n  }\n};\nvar POSITION_BOTTOM_COORDINATES = ({ direction, xStart, xEnd, yStart, yEnd }) => {\n  if (direction === \"y\" /* Y */) {\n    return { x: xEnd / 2, y: isNaN(yEnd) ? yStart : yEnd };\n  } else {\n    return { x: xStart, y: isNaN(yEnd) ? yStart : (yStart + yEnd) / 2 };\n  }\n};\nvar POSITION_INSIDE_COORDINATES = ({ xEnd, yStart, yEnd }) => {\n  return { x: xEnd / 2, y: isNaN(yEnd) ? yStart : (yStart + yEnd) / 2 };\n};\nvar POSITION_TOP_LEFT_COORDINATES = ({ direction, xStart, xEnd, yStart }) => {\n  if (direction === \"y\" /* Y */) {\n    return { x: xStart / 2, y: yStart };\n  } else {\n    return { x: xEnd, y: yStart };\n  }\n};\nvar POSITION_BOTTOM_LEFT_COORDINATES = ({ direction, xStart, yStart, yEnd }) => {\n  if (direction === \"y\" /* Y */) {\n    return { x: xStart, y: isNaN(yEnd) ? yStart : yEnd };\n  } else {\n    return { x: xStart, y: yStart };\n  }\n};\nvar POSITION_TOP_RIGHT_COORDINATES = ({ direction, xEnd, yStart, yEnd }) => {\n  if (direction === \"y\" /* Y */) {\n    return { x: xEnd, y: yStart };\n  } else {\n    return { x: xEnd, y: isNaN(yEnd) ? yStart : yEnd };\n  }\n};\nvar POSITION_BOTTOM_RIGHT_COORDINATES = ({ direction, xStart, xEnd, yStart, yEnd }) => {\n  if (direction === \"y\" /* Y */) {\n    return { x: xEnd, y: isNaN(yEnd) ? yStart : yEnd };\n  } else {\n    return { x: xStart, y: isNaN(yEnd) ? yStart : yEnd };\n  }\n};\nvar labelDirectionHandling = {\n  top: { c: POSITION_TOP_COORDINATES },\n  bottom: { c: POSITION_BOTTOM_COORDINATES },\n  left: { c: POSITION_LEFT_COORDINATES },\n  right: { c: POSITION_RIGHT_COORDINATES },\n  topLeft: { c: POSITION_TOP_LEFT_COORDINATES },\n  topRight: { c: POSITION_TOP_RIGHT_COORDINATES },\n  bottomLeft: { c: POSITION_BOTTOM_LEFT_COORDINATES },\n  bottomRight: { c: POSITION_BOTTOM_RIGHT_COORDINATES },\n  inside: { c: POSITION_INSIDE_COORDINATES },\n  insideLeft: { c: POSITION_LEFT_COORDINATES },\n  insideRight: { c: POSITION_RIGHT_COORDINATES },\n  insideTop: { c: POSITION_TOP_COORDINATES },\n  insideBottom: { c: POSITION_BOTTOM_COORDINATES },\n  insideTopLeft: { c: POSITION_TOP_LEFT_COORDINATES },\n  insideBottomLeft: { c: POSITION_BOTTOM_LEFT_COORDINATES },\n  insideTopRight: { c: POSITION_TOP_RIGHT_COORDINATES },\n  insideBottomRight: { c: POSITION_BOTTOM_RIGHT_COORDINATES }\n};\n\n// packages/ag-charts-community/src/chart/crossline/cartesianCrossLine.ts\nvar CROSSLINE_LABEL_POSITION = UNION(\n  [\n    \"top\",\n    \"left\",\n    \"right\",\n    \"bottom\",\n    \"topLeft\",\n    \"topRight\",\n    \"bottomLeft\",\n    \"bottomRight\",\n    \"inside\",\n    \"insideLeft\",\n    \"insideRight\",\n    \"insideTop\",\n    \"insideBottom\",\n    \"insideTopLeft\",\n    \"insideBottomLeft\",\n    \"insideTopRight\",\n    \"insideBottomRight\"\n  ],\n  \"crossLine label position\"\n);\nvar CartesianCrossLineLabel = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.fontSize = 14;\n    this.fontFamily = \"Verdana, sans-serif\";\n    this.padding = 5;\n    this.color = \"rgba(87, 87, 87, 1)\";\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], CartesianCrossLineLabel.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], CartesianCrossLineLabel.prototype, \"text\", 2);\n__decorateClass([\n  Validate(FONT_STYLE, { optional: true })\n], CartesianCrossLineLabel.prototype, \"fontStyle\", 2);\n__decorateClass([\n  Validate(FONT_WEIGHT, { optional: true })\n], CartesianCrossLineLabel.prototype, \"fontWeight\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], CartesianCrossLineLabel.prototype, \"fontSize\", 2);\n__decorateClass([\n  Validate(STRING)\n], CartesianCrossLineLabel.prototype, \"fontFamily\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], CartesianCrossLineLabel.prototype, \"padding\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], CartesianCrossLineLabel.prototype, \"color\", 2);\n__decorateClass([\n  Validate(CROSSLINE_LABEL_POSITION, { optional: true })\n], CartesianCrossLineLabel.prototype, \"position\", 2);\n__decorateClass([\n  Validate(DEGREE, { optional: true })\n], CartesianCrossLineLabel.prototype, \"rotation\", 2);\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], CartesianCrossLineLabel.prototype, \"parallel\", 2);\nvar _CartesianCrossLine = class _CartesianCrossLine extends BaseProperties {\n  constructor() {\n    super();\n    this.id = createId(this);\n    this.label = new CartesianCrossLineLabel();\n    this.scale = void 0;\n    this.clippedRange = [-Infinity, Infinity];\n    this.gridLength = 0;\n    this.sideFlag = -1;\n    this.parallelFlipRotation = 0;\n    this.regularFlipRotation = 0;\n    this.direction = \"x\" /* X */;\n    this.group = new Layer({ name: this.id, zIndex: _CartesianCrossLine.LINE_LAYER_ZINDEX });\n    this.labelGroup = new Layer({ name: this.id, zIndex: _CartesianCrossLine.LABEL_LAYER_ZINDEX });\n    this.crossLineRange = new Range();\n    this.crossLineLabel = new TransformableText();\n    this.labelPoint = void 0;\n    this.data = [];\n    this.startLine = false;\n    this.endLine = false;\n    this.isRange = false;\n    this.group.append(this.crossLineRange);\n    this.labelGroup.append(this.crossLineLabel);\n    this.crossLineRange.pointerEvents = 1 /* None */;\n  }\n  update(visible) {\n    const { enabled, data, type, value, range: range3, scale: scale2 } = this;\n    if (!type || !scale2 || !enabled || !visible || !validateCrossLineValues(type, value, range3, scale2) || data.length === 0) {\n      this.group.visible = false;\n      this.labelGroup.visible = false;\n      return;\n    }\n    this.group.visible = visible;\n    this.labelGroup.visible = visible;\n    this.group.zIndex = this.getZIndex(this.isRange);\n    this.updateNodes();\n  }\n  calculateLayout(visible, reversedAxis) {\n    if (!visible)\n      return;\n    const {\n      scale: scale2,\n      gridLength,\n      sideFlag,\n      direction,\n      label: { position = \"top\" },\n      clippedRange,\n      strokeWidth = 0\n    } = this;\n    this.data = [];\n    if (!scale2)\n      return;\n    const bandwidth = scale2.bandwidth ?? 0;\n    const step = scale2.step ?? 0;\n    const padding = (reversedAxis ? -1 : 1) * (scale2 instanceof BandScale ? (step - bandwidth) / 2 : 0);\n    const [xStart, xEnd] = [0, sideFlag * gridLength];\n    let [yStart, yEnd] = this.getRange();\n    const ordinalTimeScalePadding = yEnd === void 0 && OrdinalTimeScale.is(scale2) ? bandwidth / 2 + padding : 0;\n    let [clampedYStart, clampedYEnd] = [\n      Number(scale2.convert(yStart, { clampMode: \"clamped\" })) - padding + ordinalTimeScalePadding,\n      scale2.convert(yEnd, { clampMode: \"clamped\" }) + bandwidth + padding\n    ];\n    clampedYStart = clampArray(clampedYStart, clippedRange);\n    clampedYEnd = clampArray(clampedYEnd, clippedRange);\n    [yStart, yEnd] = [Number(scale2.convert(yStart)) + ordinalTimeScalePadding, scale2.convert(yEnd) + bandwidth];\n    const validRange = (yStart === clampedYStart || yEnd === clampedYEnd || clampedYStart !== clampedYEnd) && Math.abs(clampedYEnd - clampedYStart) > 0;\n    if (validRange && clampedYStart > clampedYEnd) {\n      [clampedYStart, clampedYEnd] = [clampedYEnd, clampedYStart];\n      [yStart, yEnd] = [yEnd, yStart];\n    }\n    if (yStart - padding >= clampedYStart)\n      yStart -= padding;\n    if (yEnd + padding <= clampedYEnd)\n      yEnd += padding;\n    this.isRange = validRange;\n    this.startLine = strokeWidth > 0 && yStart >= clampedYStart && yStart <= clampedYStart + padding;\n    this.endLine = strokeWidth > 0 && yEnd >= clampedYEnd - bandwidth - padding && yEnd <= clampedYEnd;\n    if (!validRange && !this.startLine && !this.endLine)\n      return;\n    this.data = [clampedYStart, clampedYEnd];\n    if (!this.label.enabled)\n      return;\n    const { c = POSITION_TOP_COORDINATES } = labelDirectionHandling[position] ?? {};\n    const { x: labelX, y: labelY } = c({\n      direction,\n      xStart,\n      xEnd,\n      yStart: clampedYStart,\n      yEnd: clampedYEnd\n    });\n    this.labelPoint = {\n      x: labelX,\n      y: labelY\n    };\n  }\n  updateNodes() {\n    this.updateRangeNode();\n    if (this.label.enabled) {\n      this.updateLabel();\n      this.positionLabel();\n    }\n  }\n  updateRangeNode() {\n    const {\n      crossLineRange,\n      sideFlag,\n      gridLength,\n      data,\n      startLine,\n      endLine,\n      isRange,\n      fill,\n      fillOpacity,\n      stroke,\n      strokeWidth,\n      lineDash\n    } = this;\n    crossLineRange.x1 = 0;\n    crossLineRange.x2 = sideFlag * gridLength;\n    crossLineRange.y1 = data[0];\n    crossLineRange.y2 = data[1];\n    crossLineRange.startLine = startLine;\n    crossLineRange.endLine = endLine;\n    crossLineRange.isRange = isRange;\n    crossLineRange.fill = fill;\n    crossLineRange.fillOpacity = fillOpacity ?? 1;\n    crossLineRange.stroke = stroke;\n    crossLineRange.strokeWidth = strokeWidth ?? 1;\n    crossLineRange.strokeOpacity = this.strokeOpacity ?? 1;\n    crossLineRange.lineDash = lineDash;\n  }\n  updateLabel() {\n    const { crossLineLabel, label } = this;\n    if (!label.text)\n      return;\n    crossLineLabel.fontStyle = label.fontStyle;\n    crossLineLabel.fontWeight = label.fontWeight;\n    crossLineLabel.fontSize = label.fontSize;\n    crossLineLabel.fontFamily = label.fontFamily;\n    crossLineLabel.fill = label.color;\n    crossLineLabel.text = label.text;\n  }\n  positionLabel() {\n    const {\n      crossLineLabel,\n      labelPoint: { x = void 0, y = void 0 } = {},\n      label: { parallel, rotation, position = \"top\", padding = 0 },\n      direction,\n      parallelFlipRotation,\n      regularFlipRotation\n    } = this;\n    if (x === void 0 || y === void 0)\n      return;\n    const { defaultRotation, configuredRotation } = calculateLabelRotation({\n      rotation,\n      parallel,\n      regularFlipRotation,\n      parallelFlipRotation\n    });\n    crossLineLabel.rotation = defaultRotation + configuredRotation;\n    crossLineLabel.textBaseline = \"middle\";\n    crossLineLabel.textAlign = \"center\";\n    const bbox = crossLineLabel.getBBox();\n    if (!bbox)\n      return;\n    const yDirection = direction === \"y\" /* Y */;\n    const { xTranslation, yTranslation } = calculateLabelTranslation({\n      yDirection,\n      padding,\n      position,\n      bbox\n    });\n    crossLineLabel.translationX = x + xTranslation;\n    crossLineLabel.translationY = y + yTranslation;\n  }\n  getZIndex(isRange = false) {\n    return isRange ? _CartesianCrossLine.RANGE_LAYER_ZINDEX : _CartesianCrossLine.LINE_LAYER_ZINDEX;\n  }\n  getRange() {\n    const { value, range: range3, scale: scale2 } = this;\n    const isContinuous2 = ContinuousScale.is(scale2) || OrdinalTimeScale.is(scale2);\n    const start2 = range3?.[0] ?? value;\n    let end2 = range3?.[1];\n    if (!isContinuous2 && end2 === void 0) {\n      end2 = start2;\n    }\n    if (isContinuous2 && start2 === end2) {\n      end2 = void 0;\n    }\n    return [start2, end2];\n  }\n  computeLabelBBox() {\n    const { label } = this;\n    if (!label.enabled)\n      return;\n    const tempText = new TransformableText();\n    tempText.fontFamily = label.fontFamily;\n    tempText.fontSize = label.fontSize;\n    tempText.fontStyle = label.fontStyle;\n    tempText.fontWeight = label.fontWeight;\n    tempText.text = label.text;\n    const {\n      labelPoint: { x = void 0, y = void 0 } = {},\n      label: { parallel, rotation, position = \"top\", padding = 0 },\n      direction,\n      parallelFlipRotation,\n      regularFlipRotation\n    } = this;\n    if (x === void 0 || y === void 0)\n      return;\n    const { configuredRotation } = calculateLabelRotation({\n      rotation,\n      parallel,\n      regularFlipRotation,\n      parallelFlipRotation\n    });\n    tempText.rotation = configuredRotation;\n    tempText.textBaseline = \"middle\";\n    tempText.textAlign = \"center\";\n    const bbox = tempText.getBBox();\n    if (!bbox)\n      return;\n    const yDirection = direction === \"y\" /* Y */;\n    const { xTranslation, yTranslation } = calculateLabelTranslation({\n      yDirection,\n      padding,\n      position,\n      bbox\n    });\n    tempText.x = x + xTranslation;\n    tempText.y = y + yTranslation;\n    return tempText.getBBox();\n  }\n  calculatePadding(padding) {\n    const {\n      isRange,\n      startLine,\n      endLine,\n      direction,\n      label: { padding: labelPadding = 0, position = \"top\" }\n    } = this;\n    if (!isRange && !startLine && !endLine)\n      return;\n    const crossLineLabelBBox = this.computeLabelBBox();\n    if (crossLineLabelBBox?.x == null || crossLineLabelBBox?.y == null)\n      return;\n    const chartPadding = calculateLabelChartPadding({\n      yDirection: direction === \"y\" /* Y */,\n      padding: labelPadding,\n      position,\n      bbox: crossLineLabelBBox\n    });\n    padding.left = Math.max(padding.left ?? 0, chartPadding.left ?? 0);\n    padding.right = Math.max(padding.right ?? 0, chartPadding.right ?? 0);\n    padding.top = Math.max(padding.top ?? 0, chartPadding.top ?? 0);\n    padding.bottom = Math.max(padding.bottom ?? 0, chartPadding.bottom ?? 0);\n  }\n};\n_CartesianCrossLine.LINE_LAYER_ZINDEX = 9 /* SERIES_CROSSLINE_LINE */;\n_CartesianCrossLine.RANGE_LAYER_ZINDEX = 3 /* SERIES_CROSSLINE_RANGE */;\n_CartesianCrossLine.LABEL_LAYER_ZINDEX = 14 /* SERIES_LABEL */;\n_CartesianCrossLine.className = \"CrossLine\";\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], _CartesianCrossLine.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(UNION([\"range\", \"line\"], \"a crossLine type\"), { optional: true })\n], _CartesianCrossLine.prototype, \"type\", 2);\n__decorateClass([\n  Validate(AND(MATCHING_CROSSLINE_TYPE(\"range\"), ARRAY.restrict({ length: 2 })), {\n    optional: true\n  })\n], _CartesianCrossLine.prototype, \"range\", 2);\n__decorateClass([\n  Validate(MATCHING_CROSSLINE_TYPE(\"value\"), { optional: true })\n], _CartesianCrossLine.prototype, \"value\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], _CartesianCrossLine.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], _CartesianCrossLine.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], _CartesianCrossLine.prototype, \"stroke\", 2);\n__decorateClass([\n  Validate(NUMBER, { optional: true })\n], _CartesianCrossLine.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], _CartesianCrossLine.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(LINE_DASH, { optional: true })\n], _CartesianCrossLine.prototype, \"lineDash\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], _CartesianCrossLine.prototype, \"label\", 2);\nvar CartesianCrossLine = _CartesianCrossLine;\n\n// packages/ag-charts-community/src/chart/axis/axisGridLine.ts\nvar GRID_STYLE_KEYS = [\"stroke\", \"lineDash\"];\nvar GRID_STYLE = ARRAY_OF(\n  (value) => isObject(value) && Object.keys(value).every((key) => GRID_STYLE_KEYS.includes(key)),\n  \"objects with gridline style properties such as 'stroke' or 'lineDash'\"\n);\nvar AxisGridLine = class {\n  constructor() {\n    this.enabled = true;\n    this.width = 1;\n    this.style = [\n      {\n        stroke: void 0,\n        lineDash: []\n      }\n    ];\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], AxisGridLine.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], AxisGridLine.prototype, \"width\", 2);\n__decorateClass([\n  Validate(GRID_STYLE)\n], AxisGridLine.prototype, \"style\", 2);\n\n// packages/ag-charts-community/src/util/default.ts\nfunction Default(defaultValue, replaces = [void 0]) {\n  return addTransformToInstanceProperty((_, __, v) => {\n    if (replaces.includes(v)) {\n      return isFunction(defaultValue) ? defaultValue(v) : defaultValue;\n    }\n    return v;\n  });\n}\n\n// packages/ag-charts-community/src/chart/axis/axisInterval.ts\nvar TICK_INTERVAL = predicateWithMessage(\n  (value) => isFiniteNumber(value) && value > 0 || value instanceof TimeInterval,\n  `a non-zero positive Number value or, for a time axis, a Time Interval such as 'agCharts.time.month'`\n);\nvar AxisInterval = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.minSpacing = NaN;\n    this.maxSpacing = NaN;\n  }\n};\n__decorateClass([\n  Validate(TICK_INTERVAL, { optional: true })\n], AxisInterval.prototype, \"step\", 2);\n__decorateClass([\n  Validate(ARRAY, { optional: true })\n], AxisInterval.prototype, \"values\", 2);\n__decorateClass([\n  Validate(MIN_SPACING),\n  Default(NaN)\n], AxisInterval.prototype, \"minSpacing\", 2);\n__decorateClass([\n  Validate(MAX_SPACING),\n  Default(NaN)\n], AxisInterval.prototype, \"maxSpacing\", 2);\n\n// packages/ag-charts-community/src/chart/axis/axisLabel.ts\nvar AxisLabel = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = true;\n    this.fontSize = 12;\n    this.fontFamily = \"Verdana, sans-serif\";\n    this.padding = 5;\n    this.minSpacing = NaN;\n    this.color = \"#575757\";\n    this.avoidCollisions = true;\n    this.mirrored = false;\n    this.parallel = false;\n  }\n  /**\n   * The side of the axis line to position the labels on.\n   * -1 = left (default)\n   * 1 = right\n   */\n  getSideFlag() {\n    return this.mirrored ? 1 : -1;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], AxisLabel.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(FONT_STYLE, { optional: true })\n], AxisLabel.prototype, \"fontStyle\", 2);\n__decorateClass([\n  Validate(FONT_WEIGHT, { optional: true })\n], AxisLabel.prototype, \"fontWeight\", 2);\n__decorateClass([\n  Validate(NUMBER.restrict({ min: 1 }))\n], AxisLabel.prototype, \"fontSize\", 2);\n__decorateClass([\n  Validate(STRING)\n], AxisLabel.prototype, \"fontFamily\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], AxisLabel.prototype, \"padding\", 2);\n__decorateClass([\n  Validate(NUMBER_OR_NAN),\n  Default(NaN)\n], AxisLabel.prototype, \"minSpacing\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], AxisLabel.prototype, \"color\", 2);\n__decorateClass([\n  Validate(DEGREE, { optional: true })\n], AxisLabel.prototype, \"rotation\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], AxisLabel.prototype, \"avoidCollisions\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], AxisLabel.prototype, \"mirrored\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], AxisLabel.prototype, \"parallel\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], AxisLabel.prototype, \"formatter\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], AxisLabel.prototype, \"format\", 2);\n\n// packages/ag-charts-community/src/chart/axis/axisLine.ts\nvar AxisLine = class {\n  constructor() {\n    this.enabled = true;\n    this.width = 1;\n    this.stroke = void 0;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], AxisLine.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], AxisLine.prototype, \"width\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], AxisLine.prototype, \"stroke\", 2);\n\n// packages/ag-charts-community/src/chart/axis/axisTick.ts\nvar AxisTick = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = true;\n    this.width = 1;\n    this.size = 6;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], AxisTick.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], AxisTick.prototype, \"width\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], AxisTick.prototype, \"size\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], AxisTick.prototype, \"stroke\", 2);\n\n// packages/ag-charts-community/src/chart/axis/axisTitle.ts\nvar AxisTitle = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.caption = new Caption();\n    this.enabled = false;\n    this.spacing = Caption.SMALL_PADDING;\n    this.fontSize = 10;\n    this.fontFamily = \"sans-serif\";\n    this.wrapping = \"always\";\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], AxisTitle.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], AxisTitle.prototype, \"text\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], AxisTitle.prototype, \"spacing\", 2);\n__decorateClass([\n  Validate(FONT_STYLE, { optional: true })\n], AxisTitle.prototype, \"fontStyle\", 2);\n__decorateClass([\n  Validate(FONT_WEIGHT, { optional: true })\n], AxisTitle.prototype, \"fontWeight\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], AxisTitle.prototype, \"fontSize\", 2);\n__decorateClass([\n  Validate(STRING)\n], AxisTitle.prototype, \"fontFamily\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], AxisTitle.prototype, \"color\", 2);\n__decorateClass([\n  Validate(TEXT_WRAP)\n], AxisTitle.prototype, \"wrapping\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], AxisTitle.prototype, \"formatter\", 2);\n\n// packages/ag-charts-community/src/chart/axis/axisUtil.ts\nfunction prepareAxisAnimationContext(axis) {\n  const [requestedRangeMin, requestedRangeMax] = findMinMax(axis.range);\n  const min = Math.floor(requestedRangeMin);\n  const max = Math.ceil(requestedRangeMax);\n  return { min, max, visible: min !== max };\n}\nvar fullCircle = Math.PI * 2;\nvar halfCircle = fullCircle / 2;\nfunction normaliseEndRotation(start2, end2) {\n  const directDistance = Math.abs(end2 - start2);\n  if (directDistance < halfCircle) {\n    return end2;\n  } else if (start2 > end2) {\n    return end2 + fullCircle;\n  }\n  return end2 - fullCircle;\n}\nfunction prepareAxisAnimationFunctions(ctx) {\n  const outOfBounds = (y, range3) => {\n    const [min = ctx.min, max = ctx.max] = findMinMax(range3 ?? []);\n    return y < min || y > max;\n  };\n  const tick = {\n    fromFn(node, datum, status) {\n      let y = node.y1 + node.translationY;\n      let opacity = node.opacity;\n      if (status === \"added\" || outOfBounds(node.datum.translationY, node.datum.range)) {\n        y = datum.translationY;\n        opacity = 0;\n      }\n      return { y: 0, translationY: y, opacity, phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[status] };\n    },\n    toFn(_node, datum, status) {\n      const y = datum.translationY;\n      let opacity = 1;\n      if (status === \"removed\") {\n        opacity = 0;\n      }\n      return {\n        y: 0,\n        translationY: y,\n        opacity,\n        finish: {\n          // Set explicit y after animation so it's pixel aligned\n          y,\n          translationY: 0\n        }\n      };\n    },\n    applyFn(node, props) {\n      node.setProperties(props);\n      node.visible = !outOfBounds(node.y);\n    }\n  };\n  const label = {\n    fromFn(node, newDatum, status) {\n      const datum = node.previousDatum ?? newDatum;\n      const x = datum.x;\n      const y = datum.y;\n      const rotationCenterX = datum.rotationCenterX;\n      let translationY = Math.round(node.translationY);\n      let rotation = datum.rotation;\n      let opacity = node.opacity;\n      if (status === \"removed\" || outOfBounds(datum.y, datum.range)) {\n        rotation = newDatum.rotation;\n      } else if (status === \"added\" || outOfBounds(node.datum.y, node.datum.range)) {\n        translationY = Math.round(datum.translationY);\n        opacity = 0;\n        rotation = newDatum.rotation;\n      }\n      return {\n        x,\n        y,\n        rotationCenterX,\n        translationY,\n        rotation,\n        opacity,\n        phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[status]\n      };\n    },\n    toFn(node, datum, status) {\n      const x = datum.x;\n      const y = datum.y;\n      const rotationCenterX = datum.rotationCenterX;\n      const translationY = Math.round(datum.translationY);\n      let rotation = 0;\n      let opacity = 1;\n      if (status === \"added\") {\n        opacity = 1;\n        rotation = datum.rotation;\n      } else if (status === \"removed\") {\n        opacity = 0;\n        rotation = datum.rotation;\n      } else {\n        rotation = normaliseEndRotation(node.previousDatum?.rotation ?? datum.rotation, datum.rotation);\n      }\n      return { x, y, rotationCenterX, translationY, rotation, opacity, finish: { rotation: datum.rotation } };\n    }\n  };\n  const line = {\n    fromFn(node, datum) {\n      return {\n        ...node.previousDatum ?? datum,\n        phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[\"updated\"]\n      };\n    },\n    toFn(_node, datum) {\n      return { ...datum };\n    }\n  };\n  const group = {\n    fromFn(node, _datum) {\n      const { rotation, translationX, translationY } = node;\n      return {\n        rotation,\n        translationX,\n        translationY,\n        phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[\"updated\"]\n      };\n    },\n    toFn(_node, datum) {\n      const { rotation, translationX, translationY } = datum;\n      return {\n        rotation,\n        translationX,\n        translationY\n      };\n    }\n  };\n  return { tick, line, label, group };\n}\nfunction resetAxisGroupFn() {\n  return (_node, datum) => {\n    return {\n      rotation: datum.rotation,\n      rotationCenterX: datum.rotationCenterX,\n      rotationCenterY: datum.rotationCenterY,\n      translationX: datum.translationX,\n      translationY: datum.translationY\n    };\n  };\n}\nfunction resetAxisSelectionFn(ctx) {\n  const { visible: rangeVisible, min, max } = ctx;\n  return (_node, datum) => {\n    const y = datum.translationY;\n    const visible = rangeVisible && y >= min && y <= max;\n    return {\n      y,\n      translationY: 0,\n      opacity: 1,\n      visible\n    };\n  };\n}\nfunction resetAxisLabelSelectionFn() {\n  return (_node, datum) => {\n    return {\n      x: datum.x,\n      y: datum.y,\n      translationY: datum.translationY,\n      rotation: datum.rotation,\n      rotationCenterX: datum.rotationCenterX\n    };\n  };\n}\nfunction resetAxisLineSelectionFn() {\n  return (_node, datum) => {\n    return { ...datum };\n  };\n}\n\n// packages/ag-charts-community/src/chart/axis/axis.ts\nvar TranslatableLine = class extends Translatable(Line) {\n};\nvar _Axis = class _Axis {\n  constructor(moduleCtx, scale2) {\n    this.moduleCtx = moduleCtx;\n    this.scale = scale2;\n    this.id = createId(this);\n    this.nice = true;\n    this.reverse = false;\n    this.keys = [];\n    this.interval = new AxisInterval();\n    this.dataDomain = { domain: [], clipped: false };\n    this.layoutConstraints = {\n      stacked: true,\n      align: \"start\",\n      width: 100,\n      unit: \"percent\"\n    };\n    this.boundSeries = [];\n    this.includeInvisibleDomains = false;\n    this.interactionEnabled = true;\n    this.axisGroup = new TransformableGroup({ name: `${this.id}-axis`, zIndex: 2 /* AXIS */ });\n    this.lineNode = this.axisGroup.appendChild(new TranslatableLine({ name: `${this.id}-Axis-line` }));\n    this.tickLineGroup = this.axisGroup.appendChild(\n      new Group({ name: `${this.id}-Axis-tick-lines`, zIndex: 2 /* AXIS */ })\n    );\n    this.tickLabelGroup = this.axisGroup.appendChild(\n      new Group({ name: `${this.id}-Axis-tick-labels`, zIndex: 2 /* AXIS */ })\n    );\n    this.crossLineGroup = new TransformableGroup({ name: `${this.id}-CrossLines` });\n    this.labelGroup = new Group({ name: `${this.id}-Labels`, zIndex: 10 /* SERIES_ANNOTATION */ });\n    this.gridGroup = new TransformableGroup({ name: `${this.id}-Axis-grid` });\n    this.gridLineGroup = this.gridGroup.appendChild(\n      new Group({\n        name: `${this.id}-gridLines`,\n        zIndex: 1 /* AXIS_GRID */\n      })\n    );\n    this.tickLineGroupSelection = Selection.select(this.tickLineGroup, TranslatableLine, false);\n    this.tickLabelGroupSelection = Selection.select(\n      this.tickLabelGroup,\n      TransformableText,\n      false\n    );\n    this.gridLineGroupSelection = Selection.select(this.gridLineGroup, TranslatableLine, false);\n    this._crossLines = [];\n    this.line = new AxisLine();\n    this.tick = new AxisTick();\n    this.gridLine = new AxisGridLine();\n    this.label = this.createLabel();\n    this.defaultTickMinSpacing = _Axis.defaultTickMinSpacing;\n    this.translation = { x: 0, y: 0 };\n    this.rotation = 0;\n    // axis rotation angle in degrees\n    this.layout = {\n      label: {\n        fractionDigits: 0,\n        padding: this.label.padding,\n        format: this.label.format\n      }\n    };\n    this.destroyFns = [];\n    this.range = [0, 1];\n    this.visibleRange = [0, 1];\n    this.title = new AxisTitle();\n    this.gridLength = 0;\n    /**\n     * The distance between the grid ticks and the axis ticks.\n     */\n    this.gridPadding = 0;\n    /**\n     * Is used to avoid collisions between axis labels and series.\n     */\n    this.seriesAreaPadding = 0;\n    this.tickGenerationResult = void 0;\n    this.moduleMap = new ModuleMap();\n    this.range = this.scale.range.slice();\n    this.crossLines.forEach((crossLine) => this.initCrossLine(crossLine));\n    this.axisGroup.appendChild(this.title.caption.node);\n    this.animationManager = moduleCtx.animationManager;\n    this.animationState = new StateMachine(\"empty\", {\n      empty: {\n        update: {\n          target: \"ready\",\n          action: () => this.resetSelectionNodes()\n        },\n        reset: \"empty\"\n      },\n      ready: {\n        update: (data) => this.animateReadyUpdate(data),\n        resize: () => this.resetSelectionNodes(),\n        reset: \"empty\"\n      }\n    });\n    let previousSize = void 0;\n    this.destroyFns.push(\n      this.title.caption.registerInteraction(this.moduleCtx, \"afterend\"),\n      moduleCtx.layoutManager.addListener(\"layout:complete\", (e) => {\n        if (previousSize != null && jsonDiff(e.chart, previousSize) != null) {\n          this.animationState.transition(\"resize\");\n        }\n        previousSize = { ...e.chart };\n      })\n    );\n  }\n  get type() {\n    return this.constructor.type ?? \"\";\n  }\n  set crossLines(value) {\n    const { CrossLineConstructor } = this.constructor;\n    this._crossLines.forEach((crossLine) => this.detachCrossLine(crossLine));\n    this._crossLines = value.map((crossLine) => {\n      const instance = new CrossLineConstructor();\n      instance.set(crossLine);\n      return instance;\n    });\n    this._crossLines.forEach((crossLine) => {\n      this.attachCrossLine(crossLine);\n      this.initCrossLine(crossLine);\n    });\n  }\n  get crossLines() {\n    return this._crossLines;\n  }\n  resetAnimation(phase) {\n    if (phase === \"initial\") {\n      this.animationState.transition(\"reset\");\n    }\n  }\n  attachCrossLine(crossLine) {\n    this.crossLineGroup.appendChild(crossLine.group);\n    this.crossLineGroup.appendChild(crossLine.labelGroup);\n  }\n  detachCrossLine(crossLine) {\n    this.crossLineGroup.removeChild(crossLine.group);\n    this.crossLineGroup.removeChild(crossLine.labelGroup);\n  }\n  destroy() {\n    this.moduleMap.destroy();\n    this.destroyFns.forEach((f) => f());\n  }\n  updateRange() {\n    const { range: rr, visibleRange: vr, scale: scale2 } = this;\n    const span = (rr[1] - rr[0]) / (vr[1] - vr[0]);\n    const shift = span * vr[0];\n    const start2 = rr[0] - shift;\n    scale2.setVisibleRange?.(vr);\n    scale2.range = [start2, start2 + span];\n    this.crossLines.forEach((crossLine) => {\n      crossLine.clippedRange = [rr[0], rr[1]];\n    });\n  }\n  setCrossLinesVisible(visible) {\n    this.crossLineGroup.visible = visible;\n  }\n  attachAxis(axisNode, gridNode) {\n    gridNode.appendChild(this.gridGroup);\n    axisNode.appendChild(this.axisGroup);\n    axisNode.appendChild(this.crossLineGroup);\n    axisNode.appendChild(this.labelGroup);\n  }\n  attachLabel(axisLabelNode) {\n    this.labelGroup.append(axisLabelNode);\n  }\n  detachAxis(axisNode, gridNode) {\n    gridNode.removeChild(this.gridGroup);\n    axisNode.removeChild(this.axisGroup);\n    axisNode.removeChild(this.crossLineGroup);\n    axisNode.removeChild(this.labelGroup);\n  }\n  /**\n   * Checks if a point or an object is in range.\n   * @param x A point (or object's starting point).\n   * @param tolerance Expands the range on both ends by this amount.\n   */\n  inRange(x, tolerance = 0) {\n    const [min, max] = findMinMax(this.range);\n    return x >= min - tolerance && x <= max + tolerance;\n  }\n  onFormatChange(ticks, fractionDigits, _domain, format) {\n    const { scale: scale2 } = this;\n    const logScale = scale2 instanceof LogScale;\n    const defaultFormatter = (formatOffset) => logScale ? String : (x) => typeof x === \"number\" ? x.toFixed(fractionDigits + formatOffset) : String(x);\n    if (format && scale2 && scale2.tickFormat) {\n      try {\n        const formatter = scale2.tickFormat({ ticks, specifier: format });\n        this.labelFormatter = formatter;\n        this.datumFormatter = formatter;\n      } catch (e) {\n        this.labelFormatter = defaultFormatter(0);\n        this.datumFormatter = defaultFormatter(1);\n        Logger.warnOnce(`the axis label format string ${format} is invalid. No formatting will be applied`);\n      }\n    } else {\n      this.labelFormatter = defaultFormatter(0);\n      this.datumFormatter = defaultFormatter(1);\n    }\n  }\n  onGridLengthChange(value, prevValue) {\n    if (prevValue ^ value) {\n      this.onGridVisibilityChange();\n    }\n    this.crossLines.forEach((crossLine) => this.initCrossLine(crossLine));\n  }\n  onGridVisibilityChange() {\n    this.gridLineGroupSelection.clear();\n  }\n  createLabel() {\n    return new AxisLabel();\n  }\n  /**\n   * Creates/removes/updates the scene graph nodes that constitute the axis.\n   */\n  update(animated = true) {\n    if (!this.tickGenerationResult) {\n      return;\n    }\n    const { rotation, parallelFlipRotation, regularFlipRotation } = this.calculateRotations();\n    const sideFlag = this.label.getSideFlag();\n    this.updatePosition();\n    const lineData = this.getAxisLineCoordinates();\n    const { tickData, combinedRotation, textBaseline, textAlign, primaryTickCount } = this.tickGenerationResult;\n    const previousTicks = this.tickLabelGroupSelection.nodes().map((node) => node.datum.tickId);\n    this.updateSelections(lineData, tickData.ticks, {\n      combinedRotation,\n      textAlign,\n      textBaseline,\n      range: this.scale.range\n    });\n    if (!animated || this.animationManager.isSkipped()) {\n      this.resetSelectionNodes();\n    } else {\n      const diff2 = this.calculateUpdateDiff(previousTicks, tickData);\n      this.animationState.transition(\"update\", diff2);\n    }\n    this.updateAxisLine();\n    this.updateLabels();\n    this.updateVisibility();\n    this.updateGridLines(sideFlag);\n    this.updateTickLines();\n    this.updateTitle({ anyTickVisible: tickData.ticks.length > 0 });\n    this.updateCrossLines({ rotation, parallelFlipRotation, regularFlipRotation });\n    this.updateLayoutState(tickData.fractionDigits);\n    return primaryTickCount;\n  }\n  getAxisLineCoordinates() {\n    const [min, max] = findMinMax(this.range);\n    return { x: 0, y1: min, y2: max };\n  }\n  getTickLineCoordinates(datum) {\n    const sideFlag = this.label.getSideFlag();\n    const x = sideFlag * this.getTickSize();\n    const x1 = Math.min(0, x);\n    const x2 = x1 + Math.abs(x);\n    const y = datum.translationY;\n    return { x1, x2, y };\n  }\n  getTickLabelProps(datum, params) {\n    const { label } = this;\n    const { combinedRotation, textBaseline, textAlign, range: range3 } = params;\n    const text = datum.tickLabel;\n    const sideFlag = label.getSideFlag();\n    const labelX = sideFlag * (this.getTickSize() + label.padding + this.seriesAreaPadding);\n    const visible = text !== \"\" && text != null;\n    return {\n      tickId: datum.tickId,\n      translationY: datum.translationY,\n      fill: label.color,\n      fontFamily: label.fontFamily,\n      fontSize: label.fontSize,\n      fontStyle: label.fontStyle,\n      fontWeight: label.fontWeight,\n      rotation: combinedRotation,\n      rotationCenterX: labelX,\n      text,\n      textAlign,\n      textBaseline,\n      visible,\n      x: labelX,\n      y: 0,\n      range: range3\n    };\n  }\n  getTickSize() {\n    return this.tick.enabled ? this.tick.size : 6;\n  }\n  setTitleProps(caption, params) {\n    const { title } = this;\n    if (!title.enabled) {\n      caption.enabled = false;\n      caption.node.visible = false;\n      return;\n    }\n    caption.color = title.color;\n    caption.fontFamily = title.fontFamily;\n    caption.fontSize = title.fontSize;\n    caption.fontStyle = title.fontStyle;\n    caption.fontWeight = title.fontWeight;\n    caption.enabled = title.enabled;\n    caption.wrapping = title.wrapping;\n    const titleNode = caption.node;\n    const padding = (title.spacing ?? 0) + params.spacing;\n    const sideFlag = this.label.getSideFlag();\n    const parallelFlipRotation = normalizeAngle360(this.rotation);\n    const titleRotationFlag = sideFlag === -1 && parallelFlipRotation > Math.PI && parallelFlipRotation < Math.PI * 2 ? -1 : 1;\n    const rotation = titleRotationFlag * sideFlag * Math.PI / 2;\n    const textBaseline = titleRotationFlag === 1 ? \"bottom\" : \"top\";\n    const { range: range3 } = this;\n    const x = Math.floor(titleRotationFlag * sideFlag * (range3[0] + range3[1]) / 2);\n    const y = sideFlag === -1 ? Math.floor(titleRotationFlag * -padding) : Math.floor(-padding);\n    const { callbackCache } = this.moduleCtx;\n    const { formatter = (p) => p.defaultValue } = title;\n    const text = callbackCache.call(formatter, this.getTitleFormatterParams());\n    caption.text = text;\n    titleNode.setProperties({ visible: true, text, textBaseline, x, y, rotation });\n  }\n  calculateLayout(domain, primaryTickCount) {\n    const { rotation, parallelFlipRotation, regularFlipRotation } = this.calculateRotations();\n    const sideFlag = this.label.getSideFlag();\n    const labelX = sideFlag * (this.getTickSize() + this.label.padding + this.seriesAreaPadding);\n    this.updateScale(domain);\n    this.tickGenerationResult = this.generateTicks({\n      primaryTickCount,\n      parallelFlipRotation,\n      regularFlipRotation,\n      labelX,\n      sideFlag\n    });\n    const { tickData, combinedRotation, textBaseline, textAlign, ...ticksResult } = this.tickGenerationResult;\n    this.updateLayoutState(tickData.fractionDigits);\n    const boxes = [];\n    const { x, y1, y2 } = this.getAxisLineCoordinates();\n    const lineBox = new BBox(\n      x + Math.min(sideFlag * this.seriesAreaPadding, 0),\n      y1,\n      this.seriesAreaPadding,\n      y2 - y1\n    );\n    boxes.push(lineBox);\n    if (this.tick.enabled) {\n      tickData.ticks.forEach((datum) => {\n        const { x1, x2, y } = this.getTickLineCoordinates(datum);\n        const tickLineBox = new BBox(x1, y, x2 - x1, 0);\n        boxes.push(tickLineBox);\n      });\n    }\n    if (this.label.enabled) {\n      const tempText = new TransformableText();\n      tickData.ticks.forEach((datum) => {\n        const labelProps = this.getTickLabelProps(datum, {\n          combinedRotation,\n          textAlign,\n          textBaseline,\n          range: this.scale.range\n        });\n        if (!labelProps.visible) {\n          return;\n        }\n        tempText.setProperties({\n          ...labelProps,\n          translationY: Math.round(datum.translationY)\n        });\n        const box = tempText.getBBox();\n        if (box) {\n          boxes.push(box);\n        }\n      });\n    }\n    if (this.title?.enabled) {\n      const caption = new Caption();\n      const spacing = BBox.merge(boxes).width;\n      this.setTitleProps(caption, { spacing });\n      const titleBox = caption.node.getBBox();\n      if (titleBox) {\n        boxes.push(titleBox);\n      }\n    }\n    const bbox = BBox.merge(boxes);\n    const transformedBBox = this.getTransformBox(bbox);\n    const anySeriesActive = this.isAnySeriesActive();\n    this.crossLines.forEach((crossLine) => {\n      var _a;\n      crossLine.sideFlag = -sideFlag;\n      crossLine.direction = rotation === -Math.PI / 2 ? \"x\" /* X */ : \"y\" /* Y */;\n      if (crossLine instanceof CartesianCrossLine) {\n        (_a = crossLine.label).parallel ?? (_a.parallel = this.label.parallel);\n      }\n      crossLine.parallelFlipRotation = parallelFlipRotation;\n      crossLine.regularFlipRotation = regularFlipRotation;\n      crossLine.calculateLayout?.(anySeriesActive, this.reverse);\n    });\n    return {\n      primaryTickCount: ticksResult.primaryTickCount,\n      bbox: transformedBBox\n    };\n  }\n  updateLayoutState(fractionDigits) {\n    this.layout.label = {\n      fractionDigits,\n      padding: this.label.padding,\n      format: this.label.format\n    };\n  }\n  getTransformBox(bbox) {\n    const matrix = new Matrix();\n    const { rotation, translationX, translationY } = this.getAxisTransform();\n    Matrix.updateTransformMatrix(matrix, 1, 1, rotation, translationX, translationY);\n    return matrix.transformBBox(bbox);\n  }\n  setDomain(domain) {\n    this.dataDomain = this.normaliseDataDomain(domain);\n    if (this.reverse) {\n      this.dataDomain.domain.reverse();\n    }\n    this.scale.domain = this.dataDomain.domain;\n  }\n  updateScale(domain) {\n    if (domain) {\n      this.setDomain(domain);\n    } else {\n      this.calculateDomain();\n    }\n    this.updateRange();\n    this.scale.interval = this.interval.step;\n    if (ContinuousScale.is(this.scale)) {\n      this.scale.nice = this.nice;\n      this.scale.update();\n    }\n  }\n  calculateRotations() {\n    const rotation = toRadians(this.rotation);\n    const parallelFlipRotation = normalizeAngle360(rotation);\n    const regularFlipRotation = normalizeAngle360(rotation - Math.PI / 2);\n    return { rotation, parallelFlipRotation, regularFlipRotation };\n  }\n  generateTicks({\n    primaryTickCount,\n    parallelFlipRotation,\n    regularFlipRotation,\n    labelX,\n    sideFlag\n  }) {\n    const {\n      scale: scale2,\n      interval: { minSpacing, maxSpacing },\n      label: { parallel, rotation, fontFamily, fontSize, fontStyle, fontWeight }\n    } = this;\n    const secondaryAxis = primaryTickCount !== void 0;\n    const { defaultRotation, configuredRotation, parallelFlipFlag, regularFlipFlag } = calculateLabelRotation({\n      rotation,\n      parallel,\n      regularFlipRotation,\n      parallelFlipRotation\n    });\n    const initialRotation = configuredRotation + defaultRotation;\n    const labelMatrix = new Matrix();\n    const { maxTickCount } = this.estimateTickCount({ minSpacing, maxSpacing });\n    const continuous = ContinuousScale.is(scale2) || OrdinalTimeScale.is(scale2);\n    const maxIterations = !continuous || isNaN(maxTickCount) ? 10 : maxTickCount;\n    let textAlign = getTextAlign(parallel, configuredRotation, 0, sideFlag, regularFlipFlag);\n    const textBaseline = getTextBaseline(parallel, configuredRotation, sideFlag, parallelFlipFlag);\n    const font = TextUtils.toFontString({ fontFamily, fontSize, fontStyle, fontWeight });\n    const textMeasurer = CachedTextMeasurerPool.getMeasurer({ font });\n    const textProps = {\n      fontFamily,\n      fontSize,\n      fontStyle,\n      fontWeight,\n      textBaseline,\n      textAlign\n    };\n    let tickData = {\n      rawTicks: [],\n      fractionDigits: 0,\n      ticks: [],\n      labelCount: 0\n    };\n    let index = 0;\n    let autoRotation = 0;\n    let labelOverlap = true;\n    let labelData = [];\n    let terminate = false;\n    while (labelOverlap && index <= maxIterations) {\n      if (terminate) {\n        break;\n      }\n      autoRotation = 0;\n      textAlign = getTextAlign(parallel, configuredRotation, 0, sideFlag, regularFlipFlag);\n      const tickStrategies = this.getTickStrategies({ secondaryAxis, index });\n      for (const strategy of tickStrategies) {\n        ({ tickData, index, autoRotation, terminate } = strategy({\n          index,\n          tickData,\n          textProps,\n          labelOverlap,\n          terminate,\n          primaryTickCount\n        }));\n        const rotated = configuredRotation !== 0 || autoRotation !== 0;\n        const labelRotation = initialRotation + autoRotation;\n        const labelSpacing = getLabelSpacing(this.label.minSpacing, rotated);\n        Matrix.updateTransformMatrix(labelMatrix, 1, 1, labelRotation, 0, 0);\n        textAlign = getTextAlign(parallel, configuredRotation, autoRotation, sideFlag, regularFlipFlag);\n        labelData = this.createLabelData(tickData.ticks, labelX, labelMatrix, textMeasurer);\n        labelOverlap = this.label.avoidCollisions ? axisLabelsOverlap(labelData, labelSpacing) : false;\n      }\n    }\n    const combinedRotation = defaultRotation + configuredRotation + autoRotation;\n    if (!secondaryAxis && tickData.rawTicks.length > 0) {\n      primaryTickCount = tickData.rawTicks.length;\n    }\n    return { tickData, primaryTickCount, combinedRotation, textBaseline, textAlign, labelData };\n  }\n  getTickStrategies({\n    index: iteration,\n    secondaryAxis\n  }) {\n    const { scale: scale2, label } = this;\n    const { minSpacing } = this.interval;\n    const continuous = ContinuousScale.is(scale2) || OrdinalTimeScale.is(scale2);\n    const avoidLabelCollisions = label.enabled && label.avoidCollisions;\n    const filterTicks = !continuous && iteration !== 0 && avoidLabelCollisions;\n    const autoRotate = label.autoRotate === true && label.rotation === void 0;\n    const strategies = [];\n    let tickGenerationType;\n    if (this.interval.values) {\n      tickGenerationType = 3 /* VALUES */;\n    } else if (secondaryAxis) {\n      tickGenerationType = 1 /* CREATE_SECONDARY */;\n    } else if (filterTicks) {\n      tickGenerationType = 2 /* FILTER */;\n    } else {\n      tickGenerationType = 0 /* CREATE */;\n    }\n    const tickGenerationStrategy = ({ index, tickData, primaryTickCount, terminate }) => this.createTickData(tickGenerationType, index, tickData, terminate, primaryTickCount);\n    strategies.push(tickGenerationStrategy);\n    if (!continuous && !isNaN(minSpacing)) {\n      const tickFilterStrategy = ({ index, tickData, primaryTickCount, terminate }) => this.createTickData(2 /* FILTER */, index, tickData, terminate, primaryTickCount);\n      strategies.push(tickFilterStrategy);\n    }\n    if (!avoidLabelCollisions) {\n      return strategies;\n    }\n    if (autoRotate) {\n      const autoRotateStrategy = ({ index, tickData, labelOverlap, terminate }) => ({\n        index,\n        tickData,\n        autoRotation: this.getAutoRotation(labelOverlap),\n        terminate\n      });\n      strategies.push(autoRotateStrategy);\n    }\n    return strategies;\n  }\n  createTickData(tickGenerationType, index, tickData, terminate, primaryTickCount) {\n    const { scale: scale2 } = this;\n    const { step, values, minSpacing, maxSpacing } = this.interval;\n    const { maxTickCount, minTickCount, defaultTickCount } = this.estimateTickCount({ minSpacing, maxSpacing });\n    const continuous = ContinuousScale.is(scale2) || OrdinalTimeScale.is(scale2);\n    const maxIterations = !continuous || isNaN(maxTickCount) ? 10 : maxTickCount;\n    let tickCount = continuous ? Math.max(defaultTickCount - index, minTickCount) : maxTickCount;\n    const regenerateTicks = step === void 0 && values === void 0 && tickCount > minTickCount && (continuous || tickGenerationType === 2 /* FILTER */);\n    let unchanged = true;\n    while (unchanged && index <= maxIterations) {\n      const prevTicks = tickData.rawTicks;\n      tickCount = continuous ? Math.max(defaultTickCount - index, minTickCount) : maxTickCount;\n      const { rawTicks, fractionDigits, ticks, labelCount } = this.getTicks({\n        tickGenerationType,\n        previousTicks: prevTicks,\n        tickCount,\n        minTickCount,\n        maxTickCount,\n        primaryTickCount\n      });\n      tickData.rawTicks = rawTicks;\n      tickData.fractionDigits = fractionDigits;\n      tickData.ticks = ticks;\n      tickData.labelCount = labelCount;\n      unchanged = regenerateTicks ? areArrayNumbersEqual(rawTicks, prevTicks) : false;\n      index++;\n    }\n    const shouldTerminate = step !== void 0 || values !== void 0;\n    terminate || (terminate = shouldTerminate);\n    return { tickData, index, autoRotation: 0, terminate };\n  }\n  createLabelData(tickData, labelX, labelMatrix, textMeasurer) {\n    const labelData = [];\n    for (const { tickLabel, translationY } of tickData) {\n      if (!tickLabel)\n        continue;\n      const { width: width2, height: height2 } = textMeasurer.measureLines(tickLabel);\n      const bbox = new BBox(labelX, translationY, width2, height2);\n      const labelDatum = calculateLabelBBox(tickLabel, bbox, labelMatrix);\n      labelData.push(labelDatum);\n    }\n    return labelData;\n  }\n  getAutoRotation(labelOverlap) {\n    return labelOverlap ? normalizeAngle360(toRadians(this.label.autoRotateAngle ?? 0)) : 0;\n  }\n  getTicks({\n    tickGenerationType,\n    previousTicks,\n    tickCount,\n    minTickCount,\n    maxTickCount,\n    primaryTickCount\n  }) {\n    const { range: range3, scale: scale2, visibleRange } = this;\n    let rawTicks;\n    switch (tickGenerationType) {\n      case 3 /* VALUES */:\n        rawTicks = this.interval.values;\n        if (ContinuousScale.is(scale2)) {\n          const [d0, d1] = findMinMax(scale2.getDomain().map(Number));\n          rawTicks = rawTicks.filter((value) => value >= d0 && value <= d1).sort((a, b) => a - b);\n        }\n        break;\n      case 1 /* CREATE_SECONDARY */:\n        if (ContinuousScale.is(scale2)) {\n          rawTicks = this.updateSecondaryAxisTicks(primaryTickCount);\n        } else {\n          rawTicks = this.createTicks(tickCount, minTickCount, maxTickCount);\n        }\n        break;\n      case 2 /* FILTER */:\n        rawTicks = this.filterTicks(previousTicks, tickCount);\n        break;\n      default:\n        rawTicks = this.createTicks(tickCount, minTickCount, maxTickCount);\n        break;\n    }\n    const fractionDigits = rawTicks.reduce(\n      (max, tick) => Math.max(max, typeof tick === \"number\" ? countFractionDigits(tick) : 0),\n      0\n    );\n    const halfBandwidth = (scale2.bandwidth ?? 0) / 2;\n    const ticks = [];\n    let labelCount = 0;\n    const tickIdCounts = /* @__PURE__ */ new Map();\n    const start2 = Math.max(0, Math.floor(visibleRange[0] * rawTicks.length));\n    const end2 = Math.min(rawTicks.length, Math.ceil(visibleRange[1] * rawTicks.length));\n    const filteredTicks = rawTicks.slice(start2, end2);\n    this.onFormatChange(filteredTicks, fractionDigits, rawTicks, this.label.format);\n    for (let i = 0; i < filteredTicks.length; i++) {\n      const tick = filteredTicks[i];\n      const translationY = scale2.convert(tick) + halfBandwidth;\n      if (range3.length > 0 && !this.inRange(translationY, 1e-3))\n        continue;\n      const tickLabel = this.formatTick(tick, fractionDigits, start2 + i);\n      let tickId = tickLabel;\n      if (tickIdCounts.has(tickId)) {\n        const count = tickIdCounts.get(tickId);\n        tickIdCounts.set(tickId, count + 1);\n        tickId = `${tickId}_${count}`;\n      } else {\n        tickIdCounts.set(tickId, 1);\n      }\n      ticks.push({ tick, tickId, tickLabel, translationY: Math.floor(translationY) });\n      if (tickLabel === \"\" || tickLabel == null) {\n        continue;\n      }\n      labelCount++;\n    }\n    return { rawTicks, fractionDigits, ticks, labelCount };\n  }\n  filterTicks(ticks, tickCount) {\n    const { minSpacing, maxSpacing } = this.interval;\n    const tickSpacing = !isNaN(minSpacing) || !isNaN(maxSpacing);\n    const keepEvery = tickSpacing ? Math.ceil(ticks.length / tickCount) : 2;\n    return ticks.filter((_, i) => i % keepEvery === 0);\n  }\n  createTicks(tickCount, minTickCount, maxTickCount) {\n    const { scale: scale2 } = this;\n    if (tickCount && (ContinuousScale.is(scale2) || OrdinalTimeScale.is(scale2))) {\n      scale2.tickCount = tickCount;\n      scale2.minTickCount = minTickCount ?? 0;\n      scale2.maxTickCount = maxTickCount ?? Infinity;\n    }\n    return scale2.ticks?.() ?? [];\n  }\n  estimateTickCount({ minSpacing, maxSpacing }) {\n    if (!this.label.avoidCollisions) {\n      return {\n        minTickCount: ContinuousScale.defaultMaxTickCount,\n        maxTickCount: ContinuousScale.defaultMaxTickCount,\n        defaultTickCount: ContinuousScale.defaultMaxTickCount\n      };\n    }\n    const rangeWithBleed = this.calculateRangeWithBleed();\n    const defaultMinSpacing = Math.max(\n      this.defaultTickMinSpacing,\n      rangeWithBleed / ContinuousScale.defaultMaxTickCount\n    );\n    let clampMaxTickCount = !isNaN(maxSpacing);\n    if (isNaN(minSpacing)) {\n      minSpacing = defaultMinSpacing;\n    }\n    if (isNaN(maxSpacing)) {\n      maxSpacing = rangeWithBleed;\n    }\n    if (minSpacing > maxSpacing) {\n      if (minSpacing === defaultMinSpacing) {\n        minSpacing = maxSpacing;\n      } else {\n        maxSpacing = minSpacing;\n      }\n    }\n    const minRectDistance = 2;\n    clampMaxTickCount && (clampMaxTickCount = minRectDistance < defaultMinSpacing);\n    const maxTickCount = clamp(\n      1,\n      Math.floor(rangeWithBleed / minSpacing),\n      clampMaxTickCount ? Math.min(Math.floor(rangeWithBleed / minRectDistance), 100) : 100\n    );\n    const minTickCount = Math.min(maxTickCount, Math.ceil(rangeWithBleed / maxSpacing));\n    const defaultTickCount = clamp(minTickCount, ContinuousScale.defaultTickCount, maxTickCount);\n    return { minTickCount, maxTickCount, defaultTickCount };\n  }\n  updateVisibility() {\n    if (this.moduleCtx.animationManager.isSkipped()) {\n      this.resetSelectionNodes();\n    }\n    this.tickLineGroup.visible = this.tick.enabled;\n    this.gridLineGroup.visible = this.gridLine.enabled;\n    this.tickLabelGroup.visible = this.label.enabled;\n  }\n  updateCrossLines({\n    rotation,\n    parallelFlipRotation,\n    regularFlipRotation\n  }) {\n    const sideFlag = this.label.getSideFlag();\n    const anySeriesActive = this.isAnySeriesActive();\n    this.crossLines.forEach((crossLine) => {\n      var _a;\n      crossLine.sideFlag = -sideFlag;\n      crossLine.direction = rotation === -Math.PI / 2 ? \"x\" /* X */ : \"y\" /* Y */;\n      if (crossLine instanceof CartesianCrossLine) {\n        (_a = crossLine.label).parallel ?? (_a.parallel = this.label.parallel);\n      }\n      crossLine.parallelFlipRotation = parallelFlipRotation;\n      crossLine.regularFlipRotation = regularFlipRotation;\n      crossLine.update(anySeriesActive);\n    });\n  }\n  updateTickLines() {\n    const { tick, label } = this;\n    const sideFlag = label.getSideFlag();\n    this.tickLineGroupSelection.each((line) => {\n      line.strokeWidth = tick.width;\n      line.stroke = tick.stroke;\n      line.x1 = sideFlag * this.getTickSize();\n      line.x2 = 0;\n    });\n  }\n  calculateAvailableRange() {\n    return findRangeExtent(this.range);\n  }\n  /**\n   * Calculates the available range with an additional \"bleed\" beyond the canvas that encompasses the full axis when\n   * the visible range is only a portion of the axis.\n   */\n  calculateRangeWithBleed() {\n    const visibleScale = 1 / findRangeExtent(this.visibleRange);\n    return round(this.calculateAvailableRange() * visibleScale, 2);\n  }\n  calculateDomain() {\n    const visibleSeries = this.boundSeries.filter((s) => this.includeInvisibleDomains || s.isEnabled());\n    const domains = visibleSeries.flatMap((series) => series.getDomain(this.direction));\n    this.setDomain(domains);\n  }\n  getAxisTransform() {\n    return {\n      rotation: toRadians(this.rotation),\n      translationX: Math.floor(this.translation.x),\n      translationY: Math.floor(this.translation.y)\n    };\n  }\n  updatePosition() {\n    const { crossLineGroup, axisGroup, gridGroup, translation } = this;\n    const { rotation } = this.calculateRotations();\n    const translationX = Math.floor(translation.x);\n    const translationY = Math.floor(translation.y);\n    crossLineGroup.setProperties({ rotation, translationX, translationY });\n    gridGroup.setProperties({ rotation, translationX, translationY });\n    axisGroup.datum = this.getAxisTransform();\n  }\n  updateSecondaryAxisTicks(_primaryTickCount) {\n    throw new Error(\"AG Charts - unexpected call to updateSecondaryAxisTicks() - check axes configuration.\");\n  }\n  updateSelections(lineData, data, params) {\n    const getDatumId = (datum) => datum.tickId;\n    const labelsData = data.map((d) => this.getTickLabelProps(d, params));\n    this.lineNode.datum = lineData;\n    this.gridLineGroupSelection.update(this.gridLength ? data : [], void 0, getDatumId);\n    this.tickLineGroupSelection.update(data, void 0, getDatumId);\n    this.tickLabelGroupSelection.update(labelsData, void 0, getDatumId);\n  }\n  updateAxisLine() {\n    const { enabled, stroke, width: width2 } = this.line;\n    this.lineNode.setProperties({ stroke, strokeWidth: enabled ? width2 : 0 });\n  }\n  updateGridLines(sideFlag) {\n    const {\n      gridLine: { style, width: width2 },\n      gridPadding,\n      gridLength\n    } = this;\n    if (gridLength === 0 || style.length === 0) {\n      return;\n    }\n    this.gridLineGroupSelection.each((line, _, index) => {\n      const { stroke, lineDash } = style[index % style.length];\n      line.setProperties({\n        x1: gridPadding,\n        x2: -sideFlag * gridLength + gridPadding,\n        stroke,\n        strokeWidth: width2,\n        lineDash\n      });\n    });\n  }\n  updateLabels() {\n    if (!this.label.enabled)\n      return;\n    this.tickLabelGroupSelection.each((node, datum) => {\n      node.setProperties(datum, [\n        \"fill\",\n        \"fontFamily\",\n        \"fontSize\",\n        \"fontStyle\",\n        \"fontWeight\",\n        \"text\",\n        \"textAlign\",\n        \"textBaseline\"\n      ]);\n    });\n  }\n  updateTitle(params) {\n    const { title, lineNode, tickLineGroup, tickLabelGroup } = this;\n    let spacing = 0;\n    if (title.enabled && params.anyTickVisible) {\n      const tickBBox = Group.computeChildrenBBox([tickLineGroup, tickLabelGroup, lineNode]);\n      spacing += tickBBox.width + (this.tickLabelGroup.visible ? 0 : this.seriesAreaPadding);\n    }\n    this.setTitleProps(title.caption, { spacing });\n  }\n  // For formatting (nice rounded) tick values.\n  formatTick(datum, fractionDigits, index) {\n    return String(this.getFormatter(index, true)(datum, fractionDigits));\n  }\n  // For formatting arbitrary values between the ticks.\n  formatDatum(datum) {\n    return String(this.getFormatter()(datum));\n  }\n  getFormatter(index = 0, isTickLabel) {\n    const {\n      label,\n      labelFormatter,\n      datumFormatter,\n      moduleCtx: { callbackCache }\n    } = this;\n    if (label.formatter) {\n      return (datum, fractionDigits) => callbackCache.call(label.formatter, { value: datum, index, fractionDigits }) ?? datum;\n    } else if (!isTickLabel && datumFormatter) {\n      return (datum) => callbackCache.call(datumFormatter, datum) ?? String(datum);\n    } else if (labelFormatter) {\n      return (datum) => callbackCache.call(labelFormatter, datum) ?? String(datum);\n    }\n    return (datum) => String(datum);\n  }\n  getBBox() {\n    return this.axisGroup.getBBox();\n  }\n  getRegionNode() {\n    return void 0;\n  }\n  initCrossLine(crossLine) {\n    crossLine.scale = this.scale;\n    crossLine.gridLength = this.gridLength;\n  }\n  isAnySeriesActive() {\n    return this.boundSeries.some((s) => this.includeInvisibleDomains || s.isEnabled());\n  }\n  clipTickLines(x, y, width2, height2) {\n    this.tickLineGroup.setClipRect(new BBox(x, y, width2, height2));\n  }\n  clipGrid(x, y, width2, height2) {\n    this.gridGroup.setClipRect(new BBox(x, y, width2, height2));\n  }\n  getTitleFormatterParams() {\n    const { direction } = this;\n    const boundSeries = [];\n    for (const series of this.boundSeries) {\n      const keys = series.getKeys(direction);\n      const names = series.getNames(direction);\n      for (let idx = 0; idx < keys.length; idx++) {\n        boundSeries.push({ key: keys[idx], name: names[idx] });\n      }\n    }\n    return { direction, boundSeries, defaultValue: this.title?.text };\n  }\n  normaliseDataDomain(d) {\n    return { domain: [...d], clipped: false };\n  }\n  getLayoutState() {\n    return {\n      id: this.id,\n      rect: this.getBBox(),\n      gridPadding: this.gridPadding,\n      seriesAreaPadding: this.seriesAreaPadding,\n      tickSize: this.getTickSize(),\n      direction: this.direction,\n      domain: this.dataDomain.domain,\n      scale: this.scale,\n      ...this.layout\n    };\n  }\n  getModuleMap() {\n    return this.moduleMap;\n  }\n  createModuleContext() {\n    this.axisContext ?? (this.axisContext = this.createAxisContext());\n    return { ...this.moduleCtx, parent: this.axisContext };\n  }\n  createAxisContext() {\n    const { scale: scale2 } = this;\n    return {\n      axisId: this.id,\n      scale: this.scale,\n      direction: this.direction,\n      continuous: ContinuousScale.is(scale2) || OrdinalTimeScale.is(scale2),\n      keys: () => this.boundSeries.flatMap((s) => s.getKeys(this.direction)),\n      seriesKeyProperties: () => this.boundSeries.reduce((keys, series) => {\n        const seriesKeys = series.getKeyProperties(this.direction);\n        seriesKeys.forEach((key) => {\n          if (keys.indexOf(key) < 0) {\n            keys.push(key);\n          }\n        });\n        return keys;\n      }, []),\n      scaleValueFormatter: (specifier) => this.getScaleValueFormatter(specifier),\n      scaleBandwidth: () => scale2.bandwidth ?? 0,\n      scaleDomain: () => scale2.getDomain?.(),\n      scaleConvert: (val) => scale2.convert(val),\n      scaleInvert: OrdinalTimeScale.is(scale2) ? (val) => scale2.invertNearest?.(val) : (val) => scale2.invert?.(val),\n      scaleInvertNearest: (val) => scale2.invertNearest?.(val),\n      scaleStep: () => scale2.step ?? 0,\n      attachLabel: (node) => this.attachLabel(node),\n      inRange: (x, tolerance) => this.inRange(x, tolerance)\n    };\n  }\n  getScaleValueFormatter(format) {\n    const { scale: scale2 } = this;\n    if (format && scale2 && scale2.tickFormat) {\n      try {\n        return scale2.tickFormat({ specifier: format });\n      } catch (e) {\n        Logger.warnOnce(`the format string ${format} is invalid, ignoring.`);\n      }\n    }\n    return this.getFormatter();\n  }\n  animateReadyUpdate(diff2) {\n    const { animationManager } = this.moduleCtx;\n    const selectionCtx = prepareAxisAnimationContext(this);\n    const fns = prepareAxisAnimationFunctions(selectionCtx);\n    fromToMotion(this.id, \"axis-group\", animationManager, [this.axisGroup], fns.group);\n    fromToMotion(this.id, \"line\", animationManager, [this.lineNode], fns.line);\n    fromToMotion(\n      this.id,\n      \"line-paths\",\n      animationManager,\n      [this.gridLineGroupSelection, this.tickLineGroupSelection],\n      fns.tick,\n      (_, d) => d.tickId,\n      diff2\n    );\n    fromToMotion(\n      this.id,\n      \"tick-labels\",\n      animationManager,\n      [this.tickLabelGroupSelection],\n      fns.label,\n      (_, d) => d.tickId,\n      diff2\n    );\n  }\n  resetSelectionNodes() {\n    const { gridLineGroupSelection, tickLineGroupSelection, tickLabelGroupSelection, lineNode } = this;\n    const selectionCtx = prepareAxisAnimationContext(this);\n    resetMotion([this.axisGroup], resetAxisGroupFn());\n    resetMotion([gridLineGroupSelection, tickLineGroupSelection], resetAxisSelectionFn(selectionCtx));\n    resetMotion([tickLabelGroupSelection], resetAxisLabelSelectionFn());\n    resetMotion([lineNode], resetAxisLineSelectionFn());\n  }\n  calculateUpdateDiff(previous, tickData) {\n    const added = /* @__PURE__ */ new Set();\n    const removed = /* @__PURE__ */ new Set();\n    const tickMap = {};\n    const tickCount = Math.max(previous.length, tickData.ticks.length);\n    for (let i = 0; i < tickCount; i++) {\n      const tickDatum = tickData.ticks[i];\n      const prev = previous[i];\n      const tick = tickDatum?.tickId;\n      tickMap[tick ?? prev] = tickDatum;\n      if (prev === tick) {\n        continue;\n      }\n      if (removed.has(tick)) {\n        removed.delete(tick);\n      } else if (tick) {\n        added.add(tick);\n      }\n      if (added.has(prev)) {\n        added.delete(prev);\n      } else if (prev) {\n        removed.add(prev);\n      }\n    }\n    return { changed: added.size > 0 || removed.size > 0, added, removed };\n  }\n  isReversed() {\n    return this.reverse;\n  }\n};\n_Axis.defaultTickMinSpacing = 50;\n_Axis.CrossLineConstructor = CartesianCrossLine;\n__decorateClass([\n  Validate(BOOLEAN)\n], _Axis.prototype, \"nice\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], _Axis.prototype, \"reverse\", 2);\n__decorateClass([\n  Validate(STRING_ARRAY)\n], _Axis.prototype, \"keys\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], _Axis.prototype, \"interval\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], _Axis.prototype, \"title\", 2);\n__decorateClass([\n  ObserveChanges((target, value, oldValue) => target.onGridLengthChange(value, oldValue))\n], _Axis.prototype, \"gridLength\", 2);\nvar Axis = _Axis;\n\n// packages/ag-charts-community/src/chart/axis/cartesianAxisLabel.ts\nvar CartesianAxisLabel = class extends AxisLabel {\n  constructor() {\n    super(...arguments);\n    this.autoRotateAngle = 335;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], CartesianAxisLabel.prototype, \"autoRotate\", 2);\n__decorateClass([\n  Validate(DEGREE)\n], CartesianAxisLabel.prototype, \"autoRotateAngle\", 2);\n\n// packages/ag-charts-community/src/chart/axis/cartesianAxis.ts\nvar _CartesianAxis = class _CartesianAxis extends Axis {\n  constructor() {\n    super(...arguments);\n    this.thickness = 0;\n  }\n  static is(value) {\n    return value instanceof _CartesianAxis;\n  }\n  get direction() {\n    return this.position === \"top\" || this.position === \"bottom\" ? \"x\" /* X */ : \"y\" /* Y */;\n  }\n  updateDirection() {\n    switch (this.position) {\n      case \"top\":\n        this.rotation = -90;\n        this.label.mirrored = true;\n        this.label.parallel = true;\n        break;\n      case \"right\":\n        this.rotation = 0;\n        this.label.mirrored = true;\n        this.label.parallel = false;\n        break;\n      case \"bottom\":\n        this.rotation = -90;\n        this.label.mirrored = false;\n        this.label.parallel = true;\n        break;\n      case \"left\":\n        this.rotation = 0;\n        this.label.mirrored = false;\n        this.label.parallel = false;\n        break;\n    }\n    if (this.axisContext) {\n      this.axisContext.position = this.position;\n      this.axisContext.direction = this.direction;\n    }\n  }\n  update(animated) {\n    this.updateDirection();\n    return super.update(animated);\n  }\n  calculateLayout(domain, primaryTickCount) {\n    this.updateDirection();\n    return super.calculateLayout(domain, primaryTickCount);\n  }\n  createAxisContext() {\n    return { ...super.createAxisContext(), position: this.position };\n  }\n  createLabel() {\n    return new CartesianAxisLabel();\n  }\n  getRegionNode() {\n    return this.axisGroup;\n  }\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], _CartesianAxis.prototype, \"thickness\", 2);\n__decorateClass([\n  Validate(POSITION)\n], _CartesianAxis.prototype, \"position\", 2);\nvar CartesianAxis = _CartesianAxis;\n\n// packages/ag-charts-community/src/chart/axis/categoryAxis.ts\nvar _CategoryAxis = class _CategoryAxis extends CartesianAxis {\n  constructor(moduleCtx, scale2 = new BandScale()) {\n    super(moduleCtx, scale2);\n    this.groupPaddingInner = 0.1;\n    this.includeInvisibleDomains = true;\n  }\n  static is(value) {\n    return value instanceof _CategoryAxis;\n  }\n  normaliseDataDomain(d) {\n    const domain = [];\n    const uniqueValues = /* @__PURE__ */ new Set();\n    for (const v of d) {\n      const key = v instanceof Date ? v.getTime() : v;\n      if (!uniqueValues.has(key)) {\n        uniqueValues.add(key);\n        domain.push(v);\n      }\n    }\n    return { domain, clipped: false };\n  }\n  updateScale(domain) {\n    let { paddingInner, paddingOuter } = this;\n    if (!isFiniteNumber(paddingInner) || !isFiniteNumber(paddingOuter)) {\n      const padding = this.reduceBandScalePadding();\n      paddingInner ?? (paddingInner = padding.inner);\n      paddingOuter ?? (paddingOuter = padding.outer);\n    }\n    this.scale.paddingInner = paddingInner ?? 0;\n    this.scale.paddingOuter = paddingOuter ?? 0;\n    super.updateScale(domain);\n  }\n  reduceBandScalePadding() {\n    return this.boundSeries.reduce(\n      (result, series) => {\n        const padding = series.getBandScalePadding?.();\n        if (padding) {\n          if (result.inner > padding.inner) {\n            result.inner = padding.inner;\n          }\n          if (result.outer < padding.outer) {\n            result.outer = padding.outer;\n          }\n        }\n        return result;\n      },\n      { inner: Infinity, outer: -Infinity }\n    );\n  }\n};\n_CategoryAxis.className = \"CategoryAxis\";\n_CategoryAxis.type = \"category\";\n__decorateClass([\n  Validate(RATIO)\n], _CategoryAxis.prototype, \"groupPaddingInner\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], _CategoryAxis.prototype, \"paddingInner\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], _CategoryAxis.prototype, \"paddingOuter\", 2);\nvar CategoryAxis = _CategoryAxis;\n\n// packages/ag-charts-community/src/chart/axis/tree.ts\nvar TreeNode = class {\n  // current number in sibling group (index)\n  constructor(label = \"\", parent, number2 = 0) {\n    this.x = 0;\n    this.y = 0;\n    this.subtreeLeft = NaN;\n    this.subtreeRight = NaN;\n    this.screenX = 0;\n    this.screenY = 0;\n    this.children = [];\n    this.leafCount = 0;\n    this.prelim = 0;\n    this.mod = 0;\n    this.ancestor = this;\n    this.change = 0;\n    this.shift = 0;\n    this.label = label;\n    this.parent = parent;\n    this.depth = parent ? parent.depth + 1 : 0;\n    this.number = number2;\n  }\n  getLeftSibling() {\n    return this.number > 0 && this.parent ? this.parent.children[this.number - 1] : void 0;\n  }\n  getLeftmostSibling() {\n    return this.number > 0 && this.parent ? this.parent.children[0] : void 0;\n  }\n  // traverse the left contour of a subtree, return the successor of v on this contour\n  nextLeft() {\n    return this.children ? this.children[0] : this.thread;\n  }\n  // traverse the right contour of a subtree, return the successor of v on this contour\n  nextRight() {\n    return this.children ? this.children[this.children.length - 1] : this.thread;\n  }\n  getSiblings() {\n    return this.parent ? this.parent.children.filter((_, i) => i !== this.number) : [];\n  }\n};\nfunction ticksToTree(ticks, pad2 = true) {\n  const root = new TreeNode();\n  let depth = 0;\n  if (pad2) {\n    ticks.forEach((tick) => depth = Math.max(depth, tick.labels.length));\n  }\n  ticks.forEach((tick) => {\n    if (pad2) {\n      while (tick.labels.length < depth) {\n        tick.labels.unshift(\"\");\n      }\n    }\n    insertTick(root, tick);\n  });\n  return root;\n}\nfunction insertTick(root, tick) {\n  const pathParts = tick.labels.slice().reverse();\n  const lastPartIndex = pathParts.length - 1;\n  pathParts.forEach((pathPart, partIndex) => {\n    const children = root.children;\n    const existingNode = children.find((child) => child.label === pathPart);\n    const isNotLeaf = partIndex !== lastPartIndex;\n    if (existingNode && isNotLeaf) {\n      root = existingNode;\n    } else {\n      const node = new TreeNode(pathPart, root);\n      node.number = children.length;\n      children.push(node);\n      if (isNotLeaf) {\n        root = node;\n      }\n    }\n  });\n}\nfunction moveSubtree(wm, wp, shift) {\n  const subtrees = wp.number - wm.number;\n  const ratio2 = shift / subtrees;\n  wp.change -= ratio2;\n  wp.shift += shift;\n  wm.change += ratio2;\n  wp.prelim += shift;\n  wp.mod += shift;\n}\nfunction ancestor(vim, v, defaultAncestor) {\n  return v.getSiblings().indexOf(vim.ancestor) >= 0 ? vim.ancestor : defaultAncestor;\n}\nfunction executeShifts(v) {\n  const children = v.children;\n  if (children) {\n    let shift = 0;\n    let change = 0;\n    for (let i = children.length - 1; i >= 0; i--) {\n      const w = children[i];\n      w.prelim += shift;\n      w.mod += shift;\n      change += w.change;\n      shift += w.shift + change;\n    }\n  }\n}\nfunction apportion(v, defaultAncestor, distance3) {\n  const w = v.getLeftSibling();\n  if (w) {\n    let vop = v;\n    let vip = v;\n    let vim = w;\n    let vom = vip.getLeftmostSibling();\n    let sip = vip.mod;\n    let sop = vop.mod;\n    let sim = vim.mod;\n    let som = vom.mod;\n    while (vim.nextRight() && vip.nextLeft()) {\n      vim = vim.nextRight();\n      vip = vip.nextLeft();\n      vom = vom.nextLeft();\n      vop = vop.nextRight();\n      vop.ancestor = v;\n      const shift = vim.prelim + sim - (vip.prelim + sip) + distance3;\n      if (shift > 0) {\n        moveSubtree(ancestor(vim, v, defaultAncestor), v, shift);\n        sip += shift;\n        sop += shift;\n      }\n      sim += vim.mod;\n      sip += vip.mod;\n      som += vom.mod;\n      sop += vop.mod;\n    }\n    if (vim.nextRight() && !vop.nextRight()) {\n      vop.thread = vim.nextRight();\n      vop.mod += sim - sop;\n    } else {\n      if (vip.nextLeft() && !vom.nextLeft()) {\n        vom.thread = vip.nextLeft();\n        vom.mod += sip - som;\n      }\n      defaultAncestor = v;\n    }\n  }\n  return defaultAncestor;\n}\nfunction firstWalk(node, distance3) {\n  const children = node.children;\n  if (children.length) {\n    let defaultAncestor = children[0];\n    children.forEach((child) => {\n      firstWalk(child, distance3);\n      defaultAncestor = apportion(child, defaultAncestor, distance3);\n    });\n    executeShifts(node);\n    const midpoint = (children[0].prelim + children.at(-1).prelim) / 2;\n    const leftSibling = node.getLeftSibling();\n    if (leftSibling) {\n      node.prelim = leftSibling.prelim + distance3;\n      node.mod = node.prelim - midpoint;\n    } else {\n      node.prelim = midpoint;\n    }\n  } else {\n    const leftSibling = node.getLeftSibling();\n    node.prelim = leftSibling ? leftSibling.prelim + distance3 : 0;\n  }\n}\nvar Dimensions = class {\n  constructor() {\n    this.top = Infinity;\n    this.right = -Infinity;\n    this.bottom = -Infinity;\n    this.left = Infinity;\n  }\n  update(node, xy) {\n    const { x, y } = xy(node);\n    if (x > this.right) {\n      this.right = x;\n    }\n    if (x < this.left) {\n      this.left = x;\n    }\n    if (y > this.bottom) {\n      this.bottom = y;\n    }\n    if (y < this.top) {\n      this.top = y;\n    }\n  }\n};\nfunction secondWalk(v, m, layout) {\n  v.x = v.prelim + m;\n  v.y = v.depth;\n  layout.update(v);\n  v.children.forEach((w) => secondWalk(w, m + v.mod, layout));\n}\nfunction thirdWalk(v) {\n  const children = v.children;\n  let leafCount = 0;\n  children.forEach((w) => {\n    thirdWalk(w);\n    if (w.children.length) {\n      leafCount += w.leafCount;\n    } else {\n      leafCount++;\n    }\n  });\n  v.leafCount = leafCount;\n  if (children.length) {\n    v.subtreeLeft = children[0].subtreeLeft;\n    v.subtreeRight = children[v.children.length - 1].subtreeRight;\n    v.x = (v.subtreeLeft + v.subtreeRight) / 2;\n  } else {\n    v.subtreeLeft = v.x;\n    v.subtreeRight = v.x;\n  }\n}\nfunction treeLayout(root) {\n  const layout = new TreeLayout();\n  firstWalk(root, 1);\n  secondWalk(root, -root.prelim, layout);\n  thirdWalk(root);\n  return layout;\n}\nvar TreeLayout = class {\n  constructor() {\n    this.dimensions = new Dimensions();\n    this.leafCount = 0;\n    this.nodes = [];\n    // One might want to process leaf nodes separately from the rest of the tree.\n    // For example, position labels corresponding to leafs vertically, rather than horizontally.\n    this.leafNodes = [];\n    this.nonLeafNodes = [];\n    this.depth = 0;\n  }\n  update(node) {\n    this.dimensions.update(node, (n) => ({ x: n.x, y: n.y }));\n    if (node.children.length) {\n      this.nonLeafNodes.push(node);\n    } else {\n      this.leafCount++;\n      this.leafNodes.push(node);\n    }\n    if (node.depth > this.depth) {\n      this.depth = node.depth;\n    }\n    this.nodes.push(node);\n  }\n  resize(width2, height2, shiftX = 0, shiftY = 0, flipX = false) {\n    const xSteps = this.leafCount - 1;\n    const ySteps = this.depth;\n    const dimensions = this.dimensions;\n    let scalingX = 1;\n    let scalingY = 1;\n    if (width2 > 0 && xSteps) {\n      const existingSpacingX = (dimensions.right - dimensions.left) / xSteps;\n      const desiredSpacingX = width2 / xSteps;\n      scalingX = desiredSpacingX / existingSpacingX;\n      if (flipX) {\n        scalingX = -scalingX;\n      }\n    }\n    if (height2 > 0 && ySteps) {\n      const existingSpacingY = (dimensions.bottom - dimensions.top) / ySteps;\n      const desiredSpacingY = height2 / ySteps;\n      scalingY = desiredSpacingY / existingSpacingY;\n    }\n    const screenDimensions = new Dimensions();\n    this.nodes.forEach((node) => {\n      node.screenX = node.x * scalingX;\n      node.screenY = node.y * scalingY;\n      screenDimensions.update(node, (n) => ({ x: n.screenX, y: n.screenY }));\n    });\n    const offsetX = -screenDimensions.left;\n    const offsetY = -screenDimensions.top;\n    this.nodes.forEach((node) => {\n      node.screenX += offsetX + shiftX;\n      node.screenY += offsetY + shiftY;\n    });\n  }\n};\n\n// packages/ag-charts-community/src/chart/axis/groupedCategoryAxis.ts\nvar GroupedCategoryAxisLabel = class extends AxisLabel {\n  constructor() {\n    super(...arguments);\n    this.grid = false;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], GroupedCategoryAxisLabel.prototype, \"grid\", 2);\nvar GroupedCategoryAxis = class extends CartesianAxis {\n  constructor(moduleCtx) {\n    const scale2 = new BandScale();\n    scale2.paddingOuter = 0.1;\n    scale2.paddingInner = scale2.paddingOuter * 2;\n    super(moduleCtx, scale2);\n    // Label scale (labels are positioned between ticks, tick count = label count + 1).\n    // We don't call is `labelScale` for consistency with other axes.\n    this.tickScale = new BandScale();\n    this.line = new AxisLine();\n    this.label = new GroupedCategoryAxisLabel();\n    this.labelColor = \"rgba(87, 87, 87, 1)\";\n    this.includeInvisibleDomains = true;\n    const { tickLineGroup, tickLabelGroup, gridLineGroup, tickScale } = this;\n    tickScale.paddingInner = 1;\n    tickScale.paddingOuter = 0;\n    this.gridLineSelection = Selection.select(gridLineGroup, Line);\n    this.axisLineSelection = Selection.select(tickLineGroup, Line);\n    this.separatorSelection = Selection.select(tickLineGroup, Line);\n    this.labelSelection = Selection.select(tickLabelGroup, TransformableText);\n    this.lineNode.visible = false;\n  }\n  updateRange() {\n    const { range: rr, visibleRange: vr, scale: scale2 } = this;\n    const span = (rr[1] - rr[0]) / (vr[1] - vr[0]);\n    const shift = span * vr[0];\n    const start2 = rr[0] - shift;\n    this.tickScale.range = scale2.range = [start2, start2 + span];\n    this.resizeTickTree();\n  }\n  resizeTickTree() {\n    const s = this.scale;\n    const range3 = s.domain.length ? [s.convert(s.domain[0]), s.convert(s.domain[s.domain.length - 1])] : s.range;\n    const layout = this.tickTreeLayout;\n    const lineHeight = this.lineHeight;\n    if (layout) {\n      layout.resize(\n        Math.abs(range3[1] - range3[0]),\n        layout.depth * lineHeight,\n        (Math.min(range3[0], range3[1]) || 0) + (s.bandwidth ?? 0) / 2,\n        -layout.depth * lineHeight,\n        range3[1] - range3[0] < 0\n      );\n    }\n  }\n  get lineHeight() {\n    return this.label.fontSize * 1.5;\n  }\n  /**\n   * The length of the grid. The grid is only visible in case of a non-zero value.\n   */\n  onGridVisibilityChange() {\n    this.gridLineSelection.clear();\n    this.labelSelection.clear();\n  }\n  calculateDomain() {\n    const { direction } = this;\n    let isNumericX = null;\n    const flatDomains = this.boundSeries.filter((s) => s.visible).flatMap((series) => {\n      if (direction === \"y\" /* Y */ || isNumericX) {\n        return series.getDomain(direction);\n      }\n      if (isNumericX === null) {\n        const domain2 = series.getDomain(direction);\n        isNumericX = isNumber(domain2[0]);\n        return domain2;\n      }\n      return [];\n    });\n    this.setDomain(extent(flatDomains) ?? unique(flatDomains));\n    const { domain } = this.dataDomain;\n    this.tickTreeLayout = treeLayout(ticksToTree(domain));\n    this.tickScale.domain = domain.concat(\"\");\n    this.resizeTickTree();\n  }\n  /**\n   * Creates/removes/updates the scene graph nodes that constitute the axis.\n   * Supposed to be called _manually_ after changing _any_ of the axis properties.\n   * This allows to bulk set axis properties before updating the nodes.\n   * The node changes made by this method are rendered on the next animation frame.\n   * We could schedule this method call automatically on the next animation frame\n   * when any of the axis properties change (the way we do when properties of scene graph's\n   * nodes change), but this will mean that we first wait for the next animation\n   * frame to make changes to the nodes of the axis, then wait for another animation\n   * frame to render those changes. It's nice to have everything update automatically,\n   * but this extra level of async indirection will not just introduce an unwanted delay,\n   * it will also make it harder to reason about the program.\n   */\n  update() {\n    if (!this.computedLayout) {\n      return;\n    }\n    this.updatePosition();\n    this.updateTitleCaption();\n    this.updateCategoryLabels();\n    this.updateSeparators();\n    this.updateAxisLines();\n    this.updateCategoryGridLines();\n    this.resetSelectionNodes();\n  }\n  updateTitleCaption() {\n    this.title.caption.node.visible = false;\n  }\n  updateCategoryLabels() {\n    if (!this.computedLayout)\n      return;\n    const { tickLabelLayout } = this.computedLayout;\n    const labelSelection = this.labelSelection.update(tickLabelLayout);\n    labelSelection.each((node, datum) => {\n      node.setProperties(datum);\n    });\n  }\n  updateSeparators() {\n    if (!this.computedLayout)\n      return;\n    const { separatorLayout } = this.computedLayout;\n    const { range: range3 } = this;\n    const epsilon2 = 1e-7;\n    const separatorSelection = this.separatorSelection.update(separatorLayout);\n    separatorSelection.each((line, datum) => {\n      line.x1 = datum.x1;\n      line.x2 = datum.x2;\n      line.y1 = datum.y;\n      line.y2 = datum.y;\n      line.visible = this.tick.enabled && datum.y >= range3[0] - epsilon2 && datum.y <= range3[1] + epsilon2;\n      line.stroke = this.tick.stroke;\n      line.strokeWidth = 1;\n    });\n  }\n  updateAxisLines() {\n    if (!this.computedLayout)\n      return;\n    const { axisLineLayout } = this.computedLayout;\n    const axisLineSelection = this.axisLineSelection.update(axisLineLayout);\n    axisLineSelection.each((line, datum) => {\n      line.setProperties(datum);\n      line.stroke = this.line.stroke;\n      line.strokeWidth = this.line.width;\n    });\n  }\n  updateCategoryGridLines() {\n    const { gridLength, gridLine, label, range: range3, tickScale } = this;\n    const ticks = tickScale.ticks();\n    const sideFlag = label.getSideFlag();\n    const gridSelection = this.gridLineSelection.update(gridLength ? ticks : []);\n    if (gridLength) {\n      const { width: width2, style } = gridLine;\n      const styleCount = style.length;\n      gridSelection.each((line, datum, index) => {\n        const y = Math.round(tickScale.convert(datum));\n        const { stroke, lineDash } = style[index % styleCount];\n        line.visible = gridLine.enabled && y >= range3[0] && y <= range3[1];\n        line.x1 = 0;\n        line.x2 = -sideFlag * gridLength;\n        line.y1 = y;\n        line.y2 = y;\n        line.stroke = stroke;\n        line.strokeWidth = width2;\n        line.lineDash = lineDash;\n      });\n    }\n  }\n  computeLayout() {\n    this.updateDirection();\n    this.calculateDomain();\n    this.updateRange();\n    const {\n      scale: scale2,\n      label,\n      label: { parallel },\n      moduleCtx: { callbackCache },\n      range: range3,\n      title,\n      title: { formatter = (p) => p.defaultValue } = {}\n    } = this;\n    const rangeStart = scale2.range[0];\n    const rangeEnd = scale2.range[1];\n    const rangeLength = Math.abs(rangeEnd - rangeStart);\n    const bandwidth = rangeLength / scale2.domain.length || 0;\n    const keepEvery = Math.ceil(label.fontSize / bandwidth);\n    const rotation = toRadians(this.rotation);\n    const isHorizontal = Math.abs(Math.cos(rotation)) < 1e-8;\n    const sideFlag = label.getSideFlag();\n    const lineHeight = this.lineHeight;\n    const tickTreeLayout = this.tickTreeLayout;\n    const labels = scale2.ticks();\n    const treeLabels = tickTreeLayout ? tickTreeLayout.nodes : [];\n    const isLabelTree = tickTreeLayout ? tickTreeLayout.depth > 1 : false;\n    const isCaptionEnabled = title?.enabled && labels.length > 0;\n    const { defaultRotation, configuredRotation, parallelFlipFlag } = calculateLabelRotation({\n      rotation: label.rotation,\n      parallel,\n      regularFlipRotation: normalizeAngle360(rotation - Math.PI / 2),\n      parallelFlipRotation: normalizeAngle360(rotation)\n    });\n    const tickLabelLayout = [];\n    const copyLabelProps = (node) => {\n      return {\n        fill: node.fill,\n        fontFamily: node.fontFamily,\n        fontSize: node.fontSize,\n        fontStyle: node.fontStyle,\n        fontWeight: node.fontWeight,\n        rotation: node.rotation,\n        rotationCenterX: node.rotationCenterX,\n        rotationCenterY: node.rotationCenterY,\n        text: node.text,\n        textAlign: node.textAlign,\n        textBaseline: node.textBaseline,\n        translationX: node.translationX,\n        translationY: node.translationY,\n        visible: node.visible,\n        x: node.x,\n        y: node.y\n      };\n    };\n    const labelBBoxes = /* @__PURE__ */ new Map();\n    let maxLeafLabelWidth = 0;\n    const tempText = new TransformableText();\n    const setLabelProps = (datum, index) => {\n      if (index === 0) {\n        if (isCaptionEnabled) {\n          const text = callbackCache.call(formatter, this.getTitleFormatterParams());\n          tempText.setProperties({\n            text,\n            fill: title.color,\n            fontFamily: title.fontFamily,\n            fontSize: title.fontSize,\n            fontStyle: title.fontStyle,\n            fontWeight: title.fontWeight,\n            textAlign: \"center\",\n            textBaseline: \"hanging\",\n            translationX: datum.screenY - title.fontSize * 0.25,\n            translationY: datum.screenX\n          });\n          return true;\n        }\n        return false;\n      }\n      tempText.setProperties({\n        fill: label.color,\n        fontFamily: label.fontFamily,\n        fontSize: label.fontSize,\n        fontStyle: label.fontStyle,\n        fontWeight: label.fontWeight,\n        textAlign: \"center\",\n        textBaseline: parallelFlipFlag === -1 ? \"bottom\" : \"hanging\",\n        translationX: datum.screenY - label.fontSize * 0.25,\n        translationY: datum.screenX\n      });\n      if (index % keepEvery !== 0) {\n        return false;\n      }\n      if (datum.screenX < range3[0] || datum.screenX > range3[1]) {\n        return false;\n      }\n      if (label.formatter) {\n        tempText.text = callbackCache.call(label.formatter, {\n          value: String(datum.label),\n          index\n        }) ?? String(datum.label);\n      } else {\n        tempText.text = String(datum.label);\n      }\n      return true;\n    };\n    treeLabels.forEach((datum, index) => {\n      const isVisible = setLabelProps(datum, index);\n      if (!isVisible)\n        return;\n      const bbox2 = tempText.getBBox();\n      if (!bbox2)\n        return;\n      labelBBoxes.set(index, bbox2);\n      const isLeaf = !datum.children.length;\n      if (isLeaf && bbox2.width > maxLeafLabelWidth) {\n        maxLeafLabelWidth = bbox2.width;\n      }\n    });\n    const labelX = sideFlag * label.padding;\n    const labelGrid = this.label.grid;\n    const separatorData = [];\n    treeLabels.forEach((datum, index) => {\n      const isLeaf = !datum.children.length;\n      let visible = setLabelProps(datum, index);\n      tempText.x = labelX;\n      tempText.y = index === 0 && isCaptionEnabled ? title.spacing ?? 0 : 0;\n      tempText.rotationCenterX = labelX;\n      if (isLeaf) {\n        tempText.rotation = configuredRotation;\n        tempText.textAlign = \"end\";\n        tempText.textBaseline = \"middle\";\n      } else {\n        const availableRange = datum.leafCount * bandwidth;\n        const bbox2 = labelBBoxes.get(index);\n        tempText.translationX -= maxLeafLabelWidth - lineHeight + this.label.padding;\n        if (bbox2 && bbox2.width > availableRange) {\n          visible = false;\n          labelBBoxes.delete(index);\n        } else {\n          tempText.rotation = isHorizontal ? defaultRotation : -Math.PI / 2;\n        }\n      }\n      if (datum.parent && isLabelTree) {\n        const y = isLeaf ? datum.screenX - bandwidth / 2 : datum.screenX - datum.leafCount * bandwidth / 2;\n        if (isLeaf) {\n          if (datum.number !== datum.children.length - 1 || labelGrid) {\n            separatorData.push({\n              y,\n              x1: 0,\n              x2: -maxLeafLabelWidth - this.label.padding * 2\n            });\n          }\n        } else {\n          const x = -maxLeafLabelWidth - this.label.padding * 2 + datum.screenY;\n          separatorData.push({\n            y,\n            x1: x + lineHeight,\n            x2: x\n          });\n        }\n      }\n      let props;\n      if (visible) {\n        const bbox2 = Transformable.toCanvas(tempText);\n        if (bbox2) {\n          labelBBoxes.set(index, bbox2);\n        }\n        props = { ...copyLabelProps(tempText), visible };\n      } else {\n        labelBBoxes.delete(index);\n        props = { visible };\n      }\n      tickLabelLayout.push(props);\n    });\n    let minX = 0;\n    separatorData.forEach((d) => minX = Math.min(minX, d.x2));\n    separatorData.push({\n      y: Math.max(rangeStart, rangeEnd),\n      x1: 0,\n      x2: minX\n    });\n    const separatorLayout = [];\n    const separatorBoxes = [];\n    const epsilon2 = 1e-7;\n    separatorData.forEach((datum) => {\n      if (datum.y >= range3[0] - epsilon2 && datum.y <= range3[1] + epsilon2) {\n        const { x1, x2, y } = datum;\n        const separatorBox = new BBox(Math.min(x1, x2), y, Math.abs(x1 - x2), 0);\n        separatorBoxes.push(separatorBox);\n        separatorLayout.push({ x1, x2, y });\n      }\n    });\n    const axisLineLayout = [];\n    const axisLineBoxes = [];\n    const lineCount = tickTreeLayout ? tickTreeLayout.depth + 1 : 1;\n    for (let i = 0; i < lineCount; i++) {\n      const visible = labels.length > 0 && (i === 0 || labelGrid && isLabelTree);\n      const x = i > 0 ? -maxLeafLabelWidth - this.label.padding * 2 - (i - 1) * lineHeight : 0;\n      const lineBox = new BBox(x, Math.min(...range3), 0, Math.abs(range3[1] - range3[0]));\n      axisLineBoxes.push(lineBox);\n      axisLineLayout.push({ x, y1: range3[0], y2: range3[1], visible });\n    }\n    const bbox = BBox.merge(iterate(labelBBoxes.values(), separatorBoxes, axisLineBoxes));\n    const transformedBBox = this.getTransformBox(bbox);\n    return {\n      bbox: transformedBBox,\n      tickLabelLayout,\n      separatorLayout,\n      axisLineLayout\n    };\n  }\n  calculateLayout() {\n    const { axisLineLayout, separatorLayout, tickLabelLayout, bbox } = this.computeLayout();\n    this.computedLayout = { axisLineLayout, separatorLayout, tickLabelLayout };\n    return { bbox, primaryTickCount: void 0 };\n  }\n};\nGroupedCategoryAxis.className = \"GroupedCategoryAxis\";\nGroupedCategoryAxis.type = \"grouped-category\";\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], GroupedCategoryAxis.prototype, \"labelColor\", 2);\n\n// packages/ag-charts-community/src/module/module.ts\nvar BaseModuleInstance = class {\n  constructor() {\n    this.destroyFns = [];\n  }\n  destroy() {\n    for (const destroyFn of this.destroyFns) {\n      destroyFn();\n    }\n  }\n};\nvar ModuleRegistry = class {\n  constructor() {\n    this.modules = [];\n    this.dependencies = /* @__PURE__ */ new Map();\n    this.dependents = /* @__PURE__ */ new Map();\n  }\n  register(...modules) {\n    for (const module of modules) {\n      this.registerDependencies(module);\n      const otherModule = this.modules.find(\n        (other) => module.type === other.type && module.optionsKey === other.optionsKey && module.identifier === other.identifier\n      );\n      if (otherModule) {\n        if (module.packageType === \"enterprise\" && otherModule.packageType === \"community\") {\n          const index = this.modules.indexOf(otherModule);\n          this.modules.splice(index, 1, module);\n        }\n      } else {\n        this.modules.push(module);\n      }\n    }\n  }\n  hasEnterpriseModules() {\n    return this.modules.some((m) => m.packageType === \"enterprise\");\n  }\n  *byType(...types) {\n    const { dependents } = this;\n    const yielded = /* @__PURE__ */ new Set();\n    let count = 0;\n    const maxCount = 3;\n    const modulesByType = this.modules.filter((module) => types.includes(module.type));\n    do {\n      for (const module of modulesByType) {\n        if (yielded.has(module.optionsKey) || dependents.has(module.optionsKey)) {\n          continue;\n        }\n        yield module;\n        yielded.add(module.optionsKey);\n        for (const [key, dependencies] of dependents.entries()) {\n          dependencies.delete(module.optionsKey);\n          if (dependencies.size === 0) {\n            dependents.delete(key);\n          }\n        }\n      }\n      count++;\n    } while (yielded.size < modulesByType.length && count < maxCount);\n    if (dependents.size > 0) {\n      throw new Error(`Could not resolve module dependencies: [${[...dependents.keys()]}]`);\n    }\n  }\n  registerDependencies(module) {\n    if (module.dependencies == null || module.dependencies.length === 0)\n      return;\n    for (const key of module.dependencies) {\n      const dependencies = this.dependencies.get(key) ?? /* @__PURE__ */ new Set();\n      dependencies.add(module.optionsKey);\n      this.dependencies.set(key, dependencies);\n    }\n    this.dependents.set(module.optionsKey, new Set(module.dependencies));\n  }\n};\nvar moduleRegistry = new ModuleRegistry();\n\n// packages/ag-charts-community/src/util/async.ts\nfunction sleep(sleepTimeoutMs) {\n  return new Promise((resolve) => {\n    setTimeout(() => resolve(void 0), sleepTimeoutMs);\n  });\n}\n\n// packages/ag-charts-community/src/util/mutex.ts\nvar Mutex = class {\n  constructor() {\n    this.available = true;\n    this.acquireQueue = [];\n  }\n  acquire(cb) {\n    return new Promise((resolve) => {\n      this.acquireQueue.push([cb, resolve]);\n      if (this.available) {\n        this.dispatchNext().catch((e) => Logger.errorOnce(e));\n      }\n    });\n  }\n  async acquireImmediately(cb) {\n    if (!this.available) {\n      return false;\n    }\n    await this.acquire(cb);\n    return true;\n  }\n  async waitForClearAcquireQueue() {\n    return this.acquire(async () => void 0);\n  }\n  async dispatchNext() {\n    this.available = false;\n    let [next, done] = this.acquireQueue.shift() ?? [];\n    while (next) {\n      try {\n        await next();\n        done?.();\n      } catch (error) {\n        Logger.error(\"mutex callback error\", error);\n        done?.();\n      }\n      [next, done] = this.acquireQueue.shift() ?? [];\n    }\n    this.available = true;\n  }\n};\n\n// packages/ag-charts-community/src/util/observable.ts\nvar Observable = class {\n  constructor() {\n    this.eventListeners = /* @__PURE__ */ new Map();\n  }\n  addEventListener(eventType, listener) {\n    if (typeof listener !== \"function\") {\n      throw new Error(\"AG Charts - listener must be a Function\");\n    }\n    const eventTypeListeners = this.eventListeners.get(eventType);\n    if (eventTypeListeners) {\n      eventTypeListeners.add(listener);\n    } else {\n      this.eventListeners.set(eventType, /* @__PURE__ */ new Set([listener]));\n    }\n  }\n  removeEventListener(type, listener) {\n    this.eventListeners.get(type)?.delete(listener);\n    if (this.eventListeners.size === 0) {\n      this.eventListeners.delete(type);\n    }\n  }\n  hasEventListener(type) {\n    return this.eventListeners.has(type);\n  }\n  clearEventListeners() {\n    this.eventListeners.clear();\n  }\n  fireEvent(event) {\n    this.eventListeners.get(event.type)?.forEach((listener) => listener(event));\n  }\n};\n\n// packages/ag-charts-community/src/util/padding.ts\nvar Padding = class extends BaseProperties {\n  constructor(top = 0, right = top, bottom = top, left = right) {\n    super();\n    this.top = top;\n    this.right = right;\n    this.bottom = bottom;\n    this.left = left;\n  }\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Padding.prototype, \"top\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Padding.prototype, \"right\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Padding.prototype, \"bottom\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Padding.prototype, \"left\", 2);\n\n// packages/ag-charts-community/src/util/render.ts\nfunction debouncedAnimationFrame(cb) {\n  return buildScheduler((innerCb, _delayMs) => getWindow().requestAnimationFrame(innerCb), cb);\n}\nfunction debouncedCallback(cb) {\n  return buildScheduler((innerCb, delayMs = 0) => setTimeout(innerCb, delayMs), cb);\n}\nfunction buildScheduler(scheduleFn, cb) {\n  let scheduleCount = 0;\n  let promiseRunning = false;\n  let awaitingPromise;\n  let awaitingDone;\n  const busy = () => {\n    return promiseRunning;\n  };\n  const done = () => {\n    promiseRunning = false;\n    awaitingDone?.();\n    awaitingDone = void 0;\n    awaitingPromise = void 0;\n    if (scheduleCount > 0) {\n      scheduleFn(scheduleCb);\n    }\n  };\n  const scheduleCb = () => {\n    const count = scheduleCount;\n    scheduleCount = 0;\n    promiseRunning = true;\n    const maybePromise = cb({ count });\n    if (!maybePromise) {\n      done();\n      return;\n    }\n    maybePromise.then(done, done);\n  };\n  return {\n    schedule(delayMs) {\n      if (scheduleCount === 0 && !busy()) {\n        scheduleFn(scheduleCb, delayMs);\n      }\n      scheduleCount++;\n    },\n    async await() {\n      if (!busy()) {\n        return;\n      }\n      if (awaitingPromise == null) {\n        awaitingPromise = new Promise((resolve) => {\n          awaitingDone = resolve;\n        });\n      }\n      while (busy()) {\n        await awaitingPromise;\n      }\n    }\n  };\n}\n\n// packages/ag-charts-community/src/util/eventEmitter.ts\nvar EventEmitter = class {\n  constructor() {\n    this.events = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Registers an event listener.\n   * @param eventName The event name to listen for.\n   * @param listener The callback to be invoked on the event.\n   * @returns A function to unregister the listener.\n   */\n  on(eventName, listener) {\n    if (!this.events.has(eventName)) {\n      this.events.set(eventName, /* @__PURE__ */ new Set());\n    }\n    this.events.get(eventName)?.add(listener);\n    return () => this.off(eventName, listener);\n  }\n  /**\n   * Unregisters an event listener.\n   * @param eventName The event name to stop listening for.\n   * @param listener The callback to be removed.\n   */\n  off(eventName, listener) {\n    const eventListeners = this.events.get(eventName);\n    if (eventListeners) {\n      eventListeners.delete(listener);\n      if (eventListeners.size === 0) {\n        this.events.delete(eventName);\n      }\n    }\n  }\n  /**\n   * Emits an event to all registered listeners.\n   * @param eventName The name of the event to emit.\n   * @param event The event payload.\n   */\n  emit(eventName, event) {\n    this.events.get(eventName)?.forEach((callback2) => callback2(event));\n  }\n  /**\n   * Clears all listeners for a specific event or all events if no event name is provided.\n   * @param eventName (Optional) The name of the event to clear listeners for. If not provided, all listeners for all events are cleared.\n   */\n  clear(eventName) {\n    if (eventName) {\n      this.events.delete(eventName);\n    } else {\n      this.events.clear();\n    }\n  }\n};\n\n// packages/ag-charts-community/src/chart/layout/layoutManager.ts\nvar LayoutElement = /* @__PURE__ */ ((LayoutElement2) => {\n  LayoutElement2[LayoutElement2[\"Caption\"] = 0] = \"Caption\";\n  LayoutElement2[LayoutElement2[\"Legend\"] = 1] = \"Legend\";\n  LayoutElement2[LayoutElement2[\"Toolbar\"] = 2] = \"Toolbar\";\n  LayoutElement2[LayoutElement2[\"Navigator\"] = 3] = \"Navigator\";\n  LayoutElement2[LayoutElement2[\"Overlay\"] = 4] = \"Overlay\";\n  return LayoutElement2;\n})(LayoutElement || {});\nvar LayoutManager = class {\n  constructor() {\n    this.events = new EventEmitter();\n    this.elements = /* @__PURE__ */ new Map();\n  }\n  addListener(eventName, listener) {\n    return this.events.on(eventName, listener);\n  }\n  registerElement(element2, listener) {\n    if (this.elements.has(element2)) {\n      this.elements.get(element2).add(listener);\n    } else {\n      this.elements.set(element2, /* @__PURE__ */ new Set([listener]));\n    }\n    return () => this.elements.get(element2)?.delete(listener);\n  }\n  createContext(width2, height2) {\n    const context = new LayoutContext(width2, height2);\n    for (const element2 of Object.values(LayoutElement)) {\n      if (typeof element2 !== \"number\")\n        continue;\n      this.elements.get(element2)?.forEach((listener) => listener(context));\n    }\n    return context;\n  }\n  emitLayoutComplete(context, options) {\n    const eventType = \"layout:complete\";\n    const { width: width2, height: height2 } = context;\n    this.events.emit(eventType, {\n      type: eventType,\n      axes: options.axes ?? [],\n      chart: { width: width2, height: height2 },\n      clipSeries: options.clipSeries ?? false,\n      series: options.series\n    });\n  }\n};\nvar LayoutContext = class {\n  constructor(width2, height2) {\n    this.width = width2;\n    this.height = height2;\n    this.layoutBox = new BBox(0, 0, width2, height2);\n  }\n};\n\n// packages/ag-charts-community/src/chart/chartCaptions.ts\nvar ChartCaptions = class {\n  constructor() {\n    this.title = new Caption();\n    this.subtitle = new Caption();\n    this.footnote = new Caption();\n  }\n  positionCaptions(ctx) {\n    const { title, subtitle, footnote } = this;\n    const maxHeight = ctx.layoutBox.height / 10;\n    if (title.enabled) {\n      const { spacing = subtitle.enabled ? Caption.SMALL_PADDING : Caption.LARGE_PADDING } = title;\n      this.positionCaption(\"top\", title, ctx.layoutBox, maxHeight);\n      this.shrinkLayoutByCaption(\"top\", title, ctx.layoutBox, spacing);\n    }\n    if (subtitle.enabled) {\n      this.positionCaption(\"top\", subtitle, ctx.layoutBox, maxHeight);\n      this.shrinkLayoutByCaption(\"top\", subtitle, ctx.layoutBox, subtitle.spacing);\n    }\n    if (footnote.enabled) {\n      this.positionCaption(\"bottom\", footnote, ctx.layoutBox, maxHeight);\n      this.shrinkLayoutByCaption(\"bottom\", footnote, ctx.layoutBox, footnote.spacing);\n    }\n  }\n  positionAbsoluteCaptions(ctx) {\n    const { title, subtitle, footnote } = this;\n    const { rect } = ctx.series;\n    for (const caption of [title, subtitle, footnote]) {\n      if (caption.layoutStyle !== \"overlay\")\n        continue;\n      if (caption.textAlign === \"left\") {\n        caption.node.x = rect.x + caption.padding;\n      } else if (caption.textAlign === \"right\") {\n        const bbox = caption.node.getBBox();\n        caption.node.x = rect.x + rect.width - bbox.width - caption.padding;\n      }\n    }\n  }\n  computeX(align, layoutBox) {\n    if (align === \"left\") {\n      return layoutBox.x;\n    } else if (align === \"right\") {\n      return layoutBox.x + layoutBox.width;\n    }\n    return layoutBox.x + layoutBox.width / 2;\n  }\n  positionCaption(vAlign, caption, layoutBox, maxHeight) {\n    const containerHeight = Math.max(TextUtils.getLineHeight(caption.fontSize), maxHeight);\n    caption.node.x = this.computeX(caption.textAlign, layoutBox) + caption.padding;\n    caption.node.y = layoutBox.y + (vAlign === \"top\" ? 0 : layoutBox.height) + caption.padding;\n    caption.node.textBaseline = vAlign;\n    caption.computeTextWrap(layoutBox.width, containerHeight);\n  }\n  shrinkLayoutByCaption(vAlign, caption, layoutBox, spacing = 0) {\n    if (caption.layoutStyle === \"block\") {\n      const bbox = caption.node.getBBox();\n      layoutBox.shrink(\n        vAlign === \"top\" ? Math.ceil(bbox.y - layoutBox.y + bbox.height + spacing) : Math.ceil(layoutBox.y + layoutBox.height - bbox.y + spacing),\n        vAlign\n      );\n    }\n  }\n};\n__decorateClass([\n  Validate(OBJECT)\n], ChartCaptions.prototype, \"title\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], ChartCaptions.prototype, \"subtitle\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], ChartCaptions.prototype, \"footnote\", 2);\n\n// packages/ag-charts-community/src/util/listeners.ts\nvar Listeners = class {\n  constructor() {\n    this.registeredListeners = /* @__PURE__ */ new Map();\n  }\n  addListener(eventType, handler) {\n    const record = { symbol: Symbol(eventType), handler };\n    if (this.registeredListeners.has(eventType)) {\n      this.registeredListeners.get(eventType).push(record);\n    } else {\n      this.registeredListeners.set(eventType, [record]);\n    }\n    return () => this.removeListener(record.symbol);\n  }\n  removeListener(eventSymbol) {\n    for (const [type, listeners] of this.registeredListeners.entries()) {\n      const matchIndex = listeners.findIndex((listener) => listener.symbol === eventSymbol);\n      if (matchIndex >= 0) {\n        listeners.splice(matchIndex, 1);\n        if (listeners.length === 0) {\n          this.registeredListeners.delete(type);\n        }\n        break;\n      }\n    }\n  }\n  dispatch(eventType, ...params) {\n    for (const listener of this.getListenersByType(eventType)) {\n      try {\n        listener.handler(...params);\n      } catch (e) {\n        Logger.errorOnce(e);\n      }\n    }\n  }\n  dispatchWrapHandlers(eventType, wrapFn, ...params) {\n    for (const listener of this.getListenersByType(eventType)) {\n      try {\n        wrapFn(listener.handler, ...params);\n      } catch (e) {\n        Logger.errorOnce(e);\n      }\n    }\n  }\n  getListenersByType(eventType) {\n    return this.registeredListeners.get(eventType) ?? [];\n  }\n  destroy() {\n    this.registeredListeners.clear();\n  }\n};\n\n// packages/ag-charts-community/src/chart/baseManager.ts\nvar BaseManager = class {\n  constructor() {\n    this.listeners = new Listeners();\n    this.destroyFns = [];\n  }\n  addListener(type, handler) {\n    return this.listeners.addListener(type, handler);\n  }\n  destroy() {\n    this.listeners.destroy();\n    this.destroyFns.forEach((fn) => fn());\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/interactionStateListener.ts\nvar InteractionState = /* @__PURE__ */ ((InteractionState2) => {\n  InteractionState2[InteractionState2[\"Default\"] = 32] = \"Default\";\n  InteractionState2[InteractionState2[\"ZoomDrag\"] = 16] = \"ZoomDrag\";\n  InteractionState2[InteractionState2[\"Annotations\"] = 8] = \"Annotations\";\n  InteractionState2[InteractionState2[\"ContextMenu\"] = 4] = \"ContextMenu\";\n  InteractionState2[InteractionState2[\"Animation\"] = 2] = \"Animation\";\n  InteractionState2[InteractionState2[\"AnnotationsSelected\"] = 1] = \"AnnotationsSelected\";\n  InteractionState2[InteractionState2[\"All\"] = 63] = \"All\";\n  return InteractionState2;\n})(InteractionState || {});\nvar InteractionStateListener = class extends BaseManager {\n  // Wrapper to only broadcast events when the InteractionManager is a given state.\n  addListener(type, handler, triggeringStates = 32 /* Default */) {\n    return super.addListener(type, (e) => {\n      const currentState = this.getState();\n      if (currentState & triggeringStates) {\n        handler(e);\n      }\n    });\n  }\n};\n\n// packages/ag-charts-community/src/util/destroy.ts\nvar DestroyFns = class {\n  constructor() {\n    this.destroyFns = [];\n  }\n  destroy() {\n    this.destroyFns.forEach((fn) => fn());\n    this.destroyFns.length = 0;\n  }\n  setFns(destroyFns) {\n    this.destroy();\n    this.destroyFns = destroyFns;\n  }\n};\n\n// packages/ag-charts-community/src/version.ts\nvar VERSION = \"10.3.9\";\n\n// packages/ag-charts-community/src/api/state/historyManager.ts\nvar NOT_FOUND = Symbol(\"previous-memento-not-found\");\nvar HistoryManager = class {\n  constructor(keyNavManager) {\n    this.history = [];\n    this.historyIndex = -1;\n    this.originators = /* @__PURE__ */ new Map();\n    this.clearState = /* @__PURE__ */ new Map();\n    this.maxHistoryLength = 100;\n    this.debug = Debug.create(true, \"history\");\n    this.destroyFns = new DestroyFns();\n    this.destroyFns.setFns([\n      keyNavManager.addListener(\"undo\", this.undo.bind(this), 63 /* All */),\n      keyNavManager.addListener(\"redo\", this.redo.bind(this), 63 /* All */)\n    ]);\n  }\n  destroy() {\n    this.destroyFns.destroy();\n  }\n  addMementoOriginator(originator) {\n    this.originators.set(originator.mementoOriginatorKey, originator);\n    this.clearState.set(originator.mementoOriginatorKey, originator.createMemento());\n    this.debugEvent(\"History add originator:\", originator.mementoOriginatorKey);\n  }\n  clear() {\n    this.debug(`History clear:`, Object.keys(this.originators));\n    this.history = [];\n    this.historyIndex = -1;\n    for (const [mementoOriginatorKey, originator] of this.originators.entries()) {\n      this.clearState.set(mementoOriginatorKey, originator.createMemento());\n    }\n  }\n  record(label, ...originators) {\n    if (this.historyIndex < this.history.length - 1) {\n      this.history = this.history.slice(0, this.historyIndex + 1);\n    }\n    if (this.history.length > this.maxHistoryLength) {\n      this.history = this.history.slice(-this.maxHistoryLength);\n    }\n    const mementos = /* @__PURE__ */ new Map();\n    for (const originator of originators) {\n      if (!this.originators.has(originator.mementoOriginatorKey)) {\n        throw new Error(\n          `Originator [${originator.mementoOriginatorKey}] has not been added to the HistoryManager.`\n        );\n      }\n      mementos.set(originator.mementoOriginatorKey, originator.createMemento());\n    }\n    this.history.push({ label, mementos });\n    this.historyIndex = this.history.length - 1;\n    this.debugEvent(`History record: [${label}]`);\n  }\n  undo() {\n    const undoAction = this.history[this.historyIndex];\n    if (!undoAction)\n      return;\n    for (const mementoOriginatorKey of undoAction.mementos.keys()) {\n      const previousMemento = this.findPreviousMemento(mementoOriginatorKey);\n      if (previousMemento === NOT_FOUND) {\n        throw new Error(`Could not find previous memento for [${mementoOriginatorKey}].`);\n      }\n      this.restoreMemento(mementoOriginatorKey, previousMemento);\n    }\n    this.historyIndex -= 1;\n    this.debugEvent(`History undo: [${undoAction.label}]`);\n  }\n  redo() {\n    const redoAction = this.history[this.historyIndex + 1];\n    if (!redoAction)\n      return;\n    for (const [mementoOriginatorKey, memento] of redoAction.mementos.entries()) {\n      this.restoreMemento(mementoOriginatorKey, memento);\n    }\n    this.historyIndex += 1;\n    this.debugEvent(`History redo: [${redoAction.label}]`);\n  }\n  findPreviousMemento(mementoOriginatorKey) {\n    for (let i = this.historyIndex - 1; i >= 0; i--) {\n      if (this.history[i].mementos.has(mementoOriginatorKey)) {\n        return this.history[i].mementos.get(mementoOriginatorKey);\n      }\n    }\n    if (this.clearState.has(mementoOriginatorKey)) {\n      return this.clearState.get(mementoOriginatorKey);\n    }\n    return NOT_FOUND;\n  }\n  restoreMemento(mementoOriginatorKey, memento) {\n    this.originators.get(mementoOriginatorKey)?.restoreMemento(VERSION, VERSION, memento);\n  }\n  debugEvent(...logContent) {\n    this.debug(\n      ...logContent,\n      this.history.map((action, index) => index === this.historyIndex ? `** ${action.label} **` : action.label)\n    );\n  }\n};\n\n// packages/ag-charts-community/src/api/state/memento.ts\nvar MementoCaretaker = class {\n  constructor(version) {\n    this.version = version.split(\"-\")[0];\n  }\n  save(...originators) {\n    const packet = { version: this.version };\n    for (const originator of Object.values(originators)) {\n      packet[originator.mementoOriginatorKey] = this.encode(originator, originator.createMemento());\n    }\n    return packet;\n  }\n  restore(blob, ...originators) {\n    if (typeof blob !== \"object\") {\n      Logger.warnOnce(`Could not restore data of type [${typeof blob}], expecting an object, ignoring.`);\n      return;\n    }\n    if (blob == null) {\n      Logger.warnOnce(`Could not restore data of type [null], expecting an object, ignoring.`);\n      return;\n    }\n    if (!(\"version\" in blob) || typeof blob.version !== \"string\") {\n      Logger.warnOnce(`Could not restore data, missing [version] string in object, ignoring.`);\n      return;\n    }\n    for (const originator of originators) {\n      if (!(originator.mementoOriginatorKey in blob)) {\n        continue;\n      }\n      const memento = this.decode(originator, blob[originator.mementoOriginatorKey]);\n      if (!originator.guardMemento(memento)) {\n        Logger.warnOnce(\n          `Could not restore [${originator.mementoOriginatorKey}] data, value was invalid, ignoring.`,\n          memento\n        );\n        return;\n      }\n      originator.restoreMemento(this.version, blob.version, memento);\n    }\n  }\n  /**\n   * Encode a memento as a serializable object, encoding any non-serializble types.\n   */\n  encode(originator, memento) {\n    try {\n      return JSON.parse(JSON.stringify(memento, this.encodeTypes));\n    } catch (error) {\n      throw new Error(`Failed to encode [${originator.mementoOriginatorKey}] value [${error}].`, {\n        cause: error\n      });\n    }\n  }\n  /**\n   * Decode an encoded memento, decoding any non-serializable types.\n   */\n  decode(originator, encoded) {\n    try {\n      return JSON.parse(JSON.stringify(encoded), this.decodeTypes);\n    } catch (error) {\n      throw new Error(`Failed to decode [${originator.mementoOriginatorKey}] value [${error}].`, {\n        cause: error\n      });\n    }\n  }\n  encodeTypes(key, value) {\n    if (isDate(this[key])) {\n      return { __type: \"date\", value: String(this[key]) };\n    }\n    return value;\n  }\n  decodeTypes(key, value) {\n    if (isObject(this[key]) && \"__type\" in this[key] && this[key].__type === \"date\") {\n      return new Date(this[key].value);\n    }\n    return value;\n  }\n};\n\n// packages/ag-charts-community/src/api/state/stateManager.ts\nvar StateManager = class {\n  constructor() {\n    this.caretaker = new MementoCaretaker(VERSION);\n    this.state = /* @__PURE__ */ new Map();\n  }\n  setState(originator, value) {\n    if (jsonDiff(this.state.get(originator.mementoOriginatorKey), value) == null) {\n      return;\n    }\n    this.state.set(originator.mementoOriginatorKey, value);\n    this.restoreState(originator);\n  }\n  restoreState(originator) {\n    const { caretaker, state } = this;\n    if (!state.has(originator.mementoOriginatorKey))\n      return;\n    const value = state.get(originator.mementoOriginatorKey);\n    caretaker.restore({ version: caretaker.version, [originator.mementoOriginatorKey]: value }, originator);\n  }\n};\n\n// packages/ag-charts-community/src/styles.css\nvar styles_default = '.ag-charts-wrapper,.ag-charts-wrapper:focus,.ag-charts-wrapper:after,.ag-charts-wrapper:before,.ag-charts-wrapper *,.ag-charts-wrapper *:focus,.ag-charts-wrapper *:after,.ag-charts-wrapper *:before{box-sizing:border-box;outline:none}.ag-charts-wrapper{position:relative;user-select:none}.ag-charts-canvas-center{width:100%;height:100%;position:absolute;touch-action:auto;display:flex;align-items:var(--ag-charts-align);justify-content:var(--ag-charts-justify)}.ag-charts-canvas-container,.ag-charts-canvas{position:relative;user-select:none}.ag-charts-canvas-container>*,.ag-charts-canvas>*{display:block;pointer-events:none}.ag-charts-series-area{opacity:0;pointer-events:auto;position:absolute}.ag-charts-series-area:focus-visible{opacity:1}.ag-charts-canvas-proxy,.ag-charts-canvas-overlay{inset:0;pointer-events:none;position:absolute;user-select:none}.ag-charts-canvas-overlay>*{position:absolute;pointer-events:auto}.ag-charts-theme-default,.ag-charts-theme-default-dark{--ag-charts-active-color: var(--ag-active-color, #2196f3);--ag-charts-background-color: var(--ag-background-color, #fff);--ag-charts-foreground-color: var(--ag-foreground-color, #181d1f);--ag-charts-border-color: var(--ag-border-color, #dddddd);--ag-charts-hover-color: color-mix(in srgb, var(--ag-charts-background-color), var(--ag-charts-active-color) 12%);--ag-charts-font-family: \"Verdana\", sans-serif;--ag-charts-font-size: var(--ag-font-size, 14px);--ag-charts-size: var(--ag-grid-size, 8px);--ag-charts-border: var(--ag-charts-border-color) var(--ag-borders, solid 1px);--ag-charts-border-critical: var(--ag-borders-critical, solid 1px);--ag-charts-layer-ui-overlay: 5;--ag-charts-layer-tooltip: 4;--ag-charts-layer-toolbar: 3;--ag-charts-layer-crosshair: 2;--ag-charts-layer-annotations: 1;--ag-charts-align: center;--ag-charts-justify: center;--ag-charts-axis-label-background-color: #474747;--ag-charts-axis-label-color: #ffffff;--ag-charts-toolbar-foreground-color: var(--ag-header-foreground-color, var(--ag-charts-foreground-color));--ag-charts-toolbar-background-color: var( --ag-header-background-color, color-mix(in srgb, var(--ag-charts-background-color), var(--ag-charts-foreground-color) 2%) );--ag-charts-toolbar-size: 34px;--ag-charts-toolbar-size-small: 24px;--ag-charts-toolbar-border: var(--ag-charts-border-critical, solid 1px) var(--ag-charts-border-color);--ag-charts-toolbar-hover-color: color-mix( in srgb, var(--ag-charts-background-color), var(--ag-charts-active-color) 12% );--ag-charts-toolbar-focus-color: var(--ag-charts-active-color);--ag-charts-toolbar-active-background-color: var(--ag-charts-toolbar-hover-color);--ag-charts-toolbar-active-color: var(--ag-charts-active-color);--ag-charts-toolbar-disabled-foreground-color: var( --ag-disabled-foreground-color, color-mix(in srgb, transparent, var(--ag-charts-toolbar-foreground-color) 50%) );--ag-charts-toolbar-disabled-background-color: color-mix( in srgb, var(--ag-charts-toolbar-background-color), var(--ag-charts-toolbar-foreground-color) 6% );--ag-charts-toolbar-gap: var(--ag-charts-size);--ag-charts-toolbar-font-size: 13px;--ag-charts-toolbar-font-size-small: 12px;--ag-charts-toolbar-button-padding: 6px;--ag-charts-toolbar-button-padding-small: 1px;--ag-charts-popover-background-color: var(--ag-charts-toolbar-background-color);--ag-charts-popover-foreground-color: var(--ag-charts-toolbar-foreground-color);--ag-charts-popover-border: var(--ag-charts-toolbar-border);--ag-charts-popover-border-radius: var(--ag-border-radius, 4px);--ag-charts-popover-active-color: var(--ag-charts-toolbar-active-color);--ag-charts-popover-hover-color: var(--ag-charts-toolbar-hover-color);--ag-charts-popover-active-background-color: var(--ag-charts-toolbar-active-background-color);--ag-charts-popover-font-size: 14px;--ag-charts-popover-font-size-small: var(--ag-charts-toolbar-font-size-small);--ag-charts-dialog-input-group-label-color: color-mix(in srgb, transparent, var(--ag-charts-foreground-color) 55%);--ag-charts-dialog-tab-color--inactive: color-mix(in srgb, transparent, var(--ag-charts-foreground-color) 55%);--ag-charts-button-radius: var(--ag-border-radius, 4px);--ag-charts-focus-border-color: var(--ag-input-focus-border-color, var(--ag-charts-active-color));--ag-charts-focus-border: solid 1px var(--ag-charts-focus-border-color);--ag-charts-focus-border-shadow: var( --ag-input-focus-box-shadow, 0 0 0 3px color-mix(in srgb, transparent, var(--ag-input-focus-border-color, var(--ag-charts-active-color)) 20%) );--ag-charts-focus-box-shadow: var(--box-shadow), 0 0 0 2px #fff8, var(--ag-charts-focus-border-shadow);--ag-charts-icon-font-family: \"agChartsDefault\";--ag-charts-icon-font-weight: normal;--ag-charts-icon-font-color: color-mix(in srgb, transparent, var(--ag-charts-foreground-color), 90%);--ag-charts-icon-size: 20px;--ag-charts-input-background-color: var(--ag-charts-background-color);--ag-charts-input-background-color--hover: var(--ag-charts-hover-color);--ag-charts-input-background-color--active: var(--ag-charts-hover-color);--ag-charts-input-border-color: var(--ag-charts-border-color);--ag-charts-input-border-color--active: var(--ag-charts-active-color);--ag-charts-input-border-radius: var(--ag-border-radius, 4px);--ag-charts-input-color--active: var(--ag-charts-active-color);--ag-charts-input-focus-outline: var(--ag-charts-focus-border);--ag-charts-input-focus-box-shadow: var(--ag-charts-focus-border-shadow);--ag-charts-input-font-family: var(--ag-charts-font-family);--ag-charts-input-font-size: var(--ag-charts-font-size);--ag-charts-input-padding: 8px;--ag-charts-input-padding-large: 10px;--ag-charts-input-placeholder-color: #888888;--ag-charts-input-spacing: 8px;--ag-charts-input-transition-duration: .25s;--ag-charts-input-transition-duration--fast: .1s;--ag-charts-input-transition-timing-function: ease-out;--ag-charts-input-checkbox-background-color: #babbbc;--ag-charts-input-checkbox-background-color--checked: var(--ag-charts-active-color)}.ag-charts-theme-default-dark{--ag-charts-background-color: var(--ag-background-color, color-mix(in srgb, #fff, #182230 97%));--ag-charts-foreground-color: var(--ag-foreground-color, #fff);--ag-charts-border-color: var(--ag-border-color, rgba(255, 255, 255, .16));--ag-charts-hover-color: color-mix(in srgb, var(--ag-charts-background-color), var(--ag-charts-active-color) 18%);--ag-charts-axis-label-background-color: #9caebb;--ag-charts-axis-label-color: #000000;--ag-charts-toolbar-background-color: var(--ag-header-background-color, color-mix(in srgb, #fff, #182230 93%));--ag-charts-toolbar-hover-color: color-mix( in srgb, var(--ag-charts-background-color), var(--ag-charts-active-color) 18% );--ag-charts-dialog-input-group-label-text-color: #ffffff;--ag-charts-focus-border-shadow: var( --ag-input-focus-box-shadow, 0 0 0 3px color-mix(in srgb, transparent, var(--ag-input-focus-border-color, var(--ag-charts-active-color)) 20%) );--ag-charts-input-placeholder-color: #aaaaaa}.ag-charts-icon{display:block;width:var(--ag-charts-icon-size);height:var(--ag-charts-icon-size);speak:none;speak:never;mask:var(--icon) center / contain no-repeat;background-color:currentColor;transition:background-color .25s ease-in-out}.ag-charts-icon-align-center{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNyAxMGg2djFIN3pNNCA3aDEydjFINHptMSA2aDEwdjFINXoiLz48L3N2Zz4=)}.ag-charts-icon-align-left{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNCAxMGg2djFINHptMC0zaDEydjFINHptMCA2aDEwdjFINHoiLz48L3N2Zz4=)}.ag-charts-icon-align-right{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMTAgMTBoNnYxaC02ek00IDdoMTJ2MUg0em0yIDZoMTB2MUg2eiIvPjwvc3ZnPg==)}.ag-charts-icon-arrow-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE1LjI5MyA0LjVIMTIuNXYtMUgxN3Y0aC0xVjUuMjA3bC05LjY0NiA5LjY0Ny0uNzA4LS43MDh6IiBmaWxsPSIjMDAwIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03IDE2YTIuNSAyLjUgMCAxIDEtNSAwIDIuNSAyLjUgMCAwIDEgNSAwbS0yLjUgMS41YTEuNSAxLjUgMCAxIDAgMC0zIDEuNSAxLjUgMCAwIDAgMCAzIiBmaWxsPSIjMDAwIi8+PC9zdmc+)}.ag-charts-icon-arrow-down-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDhMMS41IDhMMTAgMThMMTguNSA4TDE0IDhMMTQgM0w2IDNMNiA4Wk03IDRMNyA5SDMuNjYyNDRMMTAgMTYuNDU2TDE2LjMzNzYgOUwxMyA5TDEzIDRMNyA0WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+Cg==)}.ag-charts-icon-arrow-up-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNCAxMkgxOC41TDEwIDJMMS41IDEySDZMNi4wMDAwMiAxN0gxNFYxMlpNMTMgMTZWMTFIMTYuMzM3NkwxMCAzLjU0NDA1TDMuNjYyNDQgMTFIN0w3LjAwMDAyIDE2SDEzWiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+Cg==)}.ag-charts-icon-callout-annotation{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyA0LjVBMS41IDEuNSAwIDAgMSA0LjUgM2gxMUExLjUgMS41IDAgMCAxIDE3IDQuNXY4YTEuNSAxLjUgMCAwIDEtMS41IDEuNWgtNC41MTRhMjYgMjYgMCAwIDAtMi4wMTcgMS41NGwtLjMxNC4yNmMtLjU1LjQ1Ny0xLjExNS45MjYtMS43NiAxLjQtLjY2OS40OTEtMS41NjItLjAxMi0xLjU2Mi0uOFYxNEg0LjVBMS41IDEuNSAwIDAgMSAzIDEyLjV6TTQuNSA0YS41LjUgMCAwIDAtLjUuNXY4YS41LjUgMCAwIDAgLjUuNWgxLjgzM3YzLjM3MmEzNiAzNiAwIDAgMCAxLjY3OC0xLjMzOGwuMzItLjI2NWEyNiAyNiAwIDAgMSAyLjIyNS0xLjY4NWwuMTI2LS4wODRIMTUuNWEuNS41IDAgMCAwIC41LS41di04YS41LjUgMCAwIDAtLjUtLjV6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-candlestick-series{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNyAxdjNoMnYxMkg3djNINnYtM0g0VjRoMlYxek01IDVoM3YxMEg1ek0xMSAxNFY2aDJWMy4yNWgxVjZoMnY4aC0ydjIuNzVoLTFWMTR6bTEtN2gzdjZoLTN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-close{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNSA1IDEwIDEwTTUgMTUgMTUgNSIgc3Ryb2tlPSIjMDAwIi8+PC9zdmc+)}.ag-charts-icon-comment-annotation{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNy41MTMgMy45OTVhNi41IDYuNSAwIDAgMSA2LjA5OCAxMS40MWMtLjU4OC4zOTMtMS4yMTcuNTM2LTEuODI5LjU4NWExMyAxMyAwIDAgMS0xLjI3LjAxN0EyNyAyNyAwIDAgMCAxMCAxNkg0LjVhLjUuNSAwIDAgMS0uNS0uNVYxMHEwLS4yNDctLjAwNy0uNTEzYy0uMDA4LS40MTYtLjAxNi0uODU3LjAxNy0xLjI2OS4wNS0uNjEyLjE5Mi0xLjI0LjU4NS0xLjgzYTYuNSA2LjUgMCAwIDEgMi45MTgtMi4zOTNtMy41Ni42MWE1LjUgNS41IDAgMCAwLTUuNjQ2IDIuMzRjLS4yNjYuMzk3LS4zNzkuODQyLS40MiAxLjM1NC0uMDMuMzYtLjAyMi43MTgtLjAxNSAxLjEwOFE1IDkuNjg5IDUgMTB2NWg1cS4zMTEuMDAxLjU5My4wMDhjLjM5LjAwNy43NDcuMDE1IDEuMTA4LS4wMTUuNTEyLS4wNDEuOTU3LS4xNTQgMS4zNTUtLjQyYTUuNSA1LjUgMCAwIDAtMS45ODMtOS45NjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-crosshair-add-line{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTEwIDUuNWEuNS41IDAgMCAxIC41LjV2My41aDMuODc1YS41LjUgMCAwIDEgMCAxSDEwLjV2NC4yNWEuNS41IDAgMSAxLTEgMFYxMC41SDUuNjI1YS41LjUgMCAxIDEgMC0xSDkuNVY2YS41LjUgMCAwIDEgLjUtLjUiLz48L3N2Zz4=)}.ag-charts-icon-date-range-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAyaDF2MTZIMnptMTUgMGgxdjE2aC0xeiIgZmlsbD0iIzE4MUQxRiIvPjxwYXRoIGQ9Ik0xMy4xNTcgMTFINXYtMWg3Ljc5M0wxMSA4LjIwN2wuNzA3LS43MDcgMy4xODIgMy4xODItMy4xODIgMy4xODItLjcwNy0uNzA3eiIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==)}.ag-charts-icon-date-price-range-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyAySDJ2MTZoMXptMy41MDcgNC44OUw4LjUgNC44OTVWMTBINXYxaDMuNXY3aDF2LTdoNS4wODhsLTEuOTU3IDEuOTU3LjcwNy43MDcgMy4xODItMy4xODJMMTMuMzM4IDcuM2wtLjcwNy43MDdMMTQuNjI0IDEwSDkuNVY0LjkzMmwxLjk1NyAxLjk1Ny43MDctLjcwN0w4Ljk4MiAzIDUuOCA2LjE4MnoiIGZpbGw9IiMxODFEMUYiLz48L3N2Zz4=)}.ag-charts-icon-delete{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZD0iTTguNDk2IDguOTk2QS41LjUgMCAwIDEgOSA5LjQ5MnY0YS41LjUgMCAxIDEtMSAuMDA4di00YS41LjUgMCAwIDEgLjQ5Ni0uNTA0TTEyIDkuNWEuNS41IDAgMCAwLTEgMHY0YS41LjUgMCAwIDAgMSAweiIvPjxwYXRoIGZpbGw9IiMxMzE3MjIiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYgNVYzLjVBMi41IDIuNSAwIDAgMSA4LjUgMWgzQTIuNSAyLjUgMCAwIDEgMTQgMy41VjVoMi44MzNhLjUuNSAwIDAgMSAwIDFIMTV2MTAuMjVjMCAuNDE1LS4wNjYuODYzLS4zIDEuMjIxLS4yNTcuMzk0LS42NzIuNjEyLTEuMi42MTJoLTdjLS41MjggMC0uOTQzLS4yMTgtMS4yLS42MTItLjIzNC0uMzU4LS4zLS44MDYtLjMtMS4yMjFWNkgzLjMzM2EuNS41IDAgMCAxIDAtMXptMS0xLjVBMS41IDEuNSAwIDAgMSA4LjUgMmgzQTEuNSAxLjUgMCAwIDEgMTMgMy41VjVIN3pNNiAxNi4yNVY2aDh2MTAuMjVjMCAuMzM1LS4wNTkuNTU0LS4xMzguNjc1LS4wNTUuMDg1LS4xNC4xNTgtLjM2Mi4xNThoLTdjLS4yMjIgMC0uMzA3LS4wNzMtLjM2Mi0uMTU4LS4wOC0uMTIxLS4xMzgtLjM0LS4xMzgtLjY3NSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ag-charts-icon-disjoint-channel,.ag-charts-icon-disjoint-channel-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuMDI4IDE3LjQ2YTIuMjUgMi4yNSAwIDAgMC00LjA5Mi0xLjg1bC05LjUxMS0yLjM3OGEyLjI1IDIuMjUgMCAxIDAtLjIyNS45NzRsOS40NzUgMi4zNjlhMi4yNTEgMi4yNTEgMCAwIDAgNC4zNTMuODg2bS0xLjY2Mi0xLjk2NWExLjI1IDEuMjUgMCAxIDEtLjg4NSAyLjMzOCAxLjI1IDEuMjUgMCAwIDEgLjg4NS0yLjMzOE00LjM0MyAxMy42NjlhMS4yNSAxLjI1IDAgMSAwLTIuMzM4LS44ODUgMS4yNSAxLjI1IDAgMCAwIDIuMzM4Ljg4NU0zLjk3IDguNzY5YTIuMjUgMi4yNSAwIDAgMCAxLjQ1NS0yLjExbDkuNTExLTIuMzc4YTIuMjUgMi4yNSAwIDEgMC0uMjYtLjk2NUw1LjIgNS42ODVhMi4yNSAyLjI1IDAgMSAwLTEuMjMgMy4wODRtLjM3My0yLjU0N2ExLjI1IDEuMjUgMCAxIDEtMi4zMzguODg1IDEuMjUgMS4yNSAwIDAgMSAyLjMzOC0uODg1bTEzLjc1LTMuNDM4YTEuMjUgMS4yNSAwIDEgMS0yLjMzOC44ODUgMS4yNSAxLjI1IDAgMCAxIDIuMzM4LS44ODUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-drag-handle{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI1Ljc1IiBjeT0iNy43NSIgcj0iLjc1IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9Ii41Ii8+PGNpcmNsZSBjeD0iOS43NSIgY3k9IjcuNzUiIHI9Ii43NSIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIuNSIvPjxjaXJjbGUgY3g9IjEzLjc1IiBjeT0iNy43NSIgcj0iLjc1IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9Ii41Ii8+PGNpcmNsZSBjeD0iMTMuNzUiIGN5PSIxMS43NSIgcj0iLjc1IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9Ii41Ii8+PGNpcmNsZSBjeD0iOS43NSIgY3k9IjExLjc1IiByPSIuNzUiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iLjUiLz48Y2lyY2xlIGN4PSI1Ljc1IiBjeT0iMTEuNzUiIHI9Ii43NSIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIuNSIvPjwvc3ZnPg==)}.ag-charts-icon-fill-color{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJtOC4wNzEgNC4wNi0uOTI0LS45MjQuNzA3LS43MDcgNy4yODggNy4yODgtNC45NSA0Ljk1YTMuNSAzLjUgMCAwIDEtNC45NSAwbC0xLjQxNC0xLjQxNGEzLjUgMy41IDAgMCAxIDAtNC45NXptLjcwNy43MDhMNC41MzYgOS4wMWEyLjUgMi41IDAgMCAwIDAgMy41MzZMNS45NSAxMy45NmEyLjUgMi41IDAgMCAwIDMuNTM1IDBsNC4yNDMtNC4yNDN6bTYuOSA3LjIwMi0uMzQ1LjM2My0uMzQ0LS4zNjNhLjUuNSAwIDAgMSAuNjg4IDBtLS4zNDUgMS4wOGE4IDggMCAwIDAtLjI4LjMyMyA0LjMgNC4zIDAgMCAwLS40MDkuNTgyYy0uMTEzLjIwMS0uMTQ0LjMyNi0uMTQ0LjM3OGEuODMzLjgzMyAwIDAgMCAxLjY2NyAwYzAtLjA1Mi0uMDMxLS4xNzctLjE0NC0uMzc4YTQuMyA0LjMgMCAwIDAtLjQxLS41ODIgOCA4IDAgMCAwLS4yOC0uMzIybS0uMzQ0LTEuMDguMzQ0LjM2My4zNDQtLjM2My4wMDIuMDAyLjAwNC4wMDQuMDEzLjAxMmE2IDYgMCAwIDEgLjIwNi4yMDhjLjEzMS4xMzYuMzA4LjMyNy40ODUuNTQ1LjE3Ni4yMTUuMzYzLjQ2Ny41MDcuNzI0LjEzNy4yNDMuMjczLjU1My4yNzMuODY4YTEuODMzIDEuODMzIDAgMSAxLTMuNjY3IDBjMC0uMzE1LjEzNi0uNjI1LjI3My0uODY4LjE0NC0uMjU3LjMzLS41MDkuNTA3LS43MjRhOSA5IDAgMCAxIC42NDUtLjcwOGwuMDQ2LS4wNDUuMDEzLS4wMTIuMDA0LS4wMDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-hollow-candlestick-series{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1vcGFjaXR5PSIuMTUiIGQ9Ik01IDVoM3YxMEg1eiIvPjxwYXRoIGZpbGw9IiMxMzE3MjIiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTcgMXYzaDJ2MTJIN3YzSDZ2LTNINFY0aDJWMXpNNSA1aDN2MTBINXptNyAyaDN2NmgtM3ptLTEgN1Y2aDJWMy4yNWgxVjZoMnY4aC0ydjIuNzVoLTFWMTR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-horizontal-line,.ag-charts-icon-horizontal-line-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNLjUgOS41aDcuMzA2YTIuMjUgMi4yNSAwIDAgMSA0LjM4OCAwSDE5LjV2MWgtNy4zMDZhMi4yNSAyLjI1IDAgMCAxLTQuMzg4IDBILjV6bTkuNSAxLjc1YTEuMjUgMS4yNSAwIDEgMCAwLTIuNSAxLjI1IDEuMjUgMCAwIDAgMCAyLjUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-line-color{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTQuMjQyIDIuNzIyYy0uNjEyIDAtMS4yLjI0My0xLjYzMi42NzVsLTEuMzQzIDEuMzQ0YS41LjUgMCAwIDAtLjExMi4xMTJMNC4wNSAxMS45NTljLS4yMDcuMjA3LS4zNi40Ni0uNDQ2Ljc0di4wMDFsLS42OSAyLjc2N3YuMDAyYS44Mi44MiAwIDAgMCAxLjAyMiAxLjAyMWguMDAybDIuNjM0LS44MjJjLjI4LS4wODUuNTM0LS4yMzcuNzQtLjQ0M2w3LjEwNy03LjEwOGEuNS41IDAgMCAwIC4xMTItLjExMmwxLjM0My0xLjM0M2EyLjMwOCAyLjMwOCAwIDAgMC0xLjYzMi0zLjk0TTE0LjEyMiA3bDEuMDQ0LTEuMDQ1YTEuMzA4IDEuMzA4IDAgMSAwLTEuODQ5LTEuODVMMTIuMjcxIDUuMTV6bS0yLjU1OC0xLjE0Mi02LjgwNyA2LjgwOWEuOC44IDAgMCAwLS4xOTYuMzI1bC0uNzUgMi40NjggMi40Ny0uNzQ5YS44LjggMCAwIDAgLjMyNS0uMTk0bDYuODA4LTYuODF6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-line-series{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJtMTcuMzYyIDQuODczLTQuNTk0IDYuNjU0LTQuODUtMy4zMTctNC4yNTEgNi45NzctLjg1NC0uNTJMNy42MTIgNi43OWw0Ljg5OSAzLjM1IDQuMDI4LTUuODM2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ag-charts-icon-line-style-dashed{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMiA5aDR2MUgyem0xMiAwaDR2MWgtNHpNOCA5aDR2MUg4eiIvPjwvc3ZnPg==)}.ag-charts-icon-line-style-dotted{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIyLjUiIGN5PSI5LjUiIHI9Ii41IiBmaWxsPSIjMDAwIi8+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIuNSIgZmlsbD0iIzAwMCIvPjxjaXJjbGUgY3g9IjYuNSIgY3k9IjkuNSIgcj0iLjUiIGZpbGw9IiMwMDAiLz48Y2lyY2xlIGN4PSI4LjUiIGN5PSI5LjUiIHI9Ii41IiBmaWxsPSIjMDAwIi8+PGNpcmNsZSBjeD0iMTAuNSIgY3k9IjkuNSIgcj0iLjUiIGZpbGw9IiMwMDAiLz48Y2lyY2xlIGN4PSIxMi41IiBjeT0iOS41IiByPSIuNSIgZmlsbD0iIzAwMCIvPjxjaXJjbGUgY3g9IjE0LjUiIGN5PSI5LjUiIHI9Ii41IiBmaWxsPSIjMDAwIi8+PGNpcmNsZSBjeD0iMTYuNSIgY3k9IjkuNSIgcj0iLjUiIGZpbGw9IiMwMDAiLz48L3N2Zz4=)}.ag-charts-icon-line-style-solid{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMiA5aDE2djFIMnoiLz48L3N2Zz4=)}.ag-charts-icon-line-with-markers-series{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJtMTguMTk4IDQuODg4LTMuNTU2IDQuOTE4YTIuMjUgMi4yNSAwIDEgMS0zLjg2Ni43NWwtMS40MzItLjlhMi4yNCAyLjI0IDAgMCAxLTIuMDA5LjQzNWwtMy44MjggNi40MjgtLjg2LS41MTJMNi40NSA5LjYyM2EyLjI1IDIuMjUgMCAxIDEgMy41MS0uNzYxbDEuMzI5LjgzNWEyLjI0IDIuMjQgMCAwIDEgMi41NTctLjQ5N2wzLjU0Mi00Ljg5OHptLTQuOTYgNS4xNTNhMS4yNSAxLjI1IDAgMSAwLS42NCAyLjQxOSAxLjI1IDEuMjUgMCAwIDAgLjY0LTIuNDE5TTkuMSA4LjMyMXEuMDY2LS4xOTIuMDY3LS40MDRhMS4yNSAxLjI1IDAgMSAwLS4wNjcuNDA0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-lock,.ag-charts-icon-locked{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAuMjA3IDMuNzY0YTIuODk0IDIuODk0IDAgMCAwLTIuODk1IDIuODk0VjloNS43ODlWNi42NThhMi44OTQgMi44OTQgMCAwIDAtMi44OTUtMi44OTRNMTQuMSA5VjYuNjU4YTMuODk0IDMuODk0IDAgMSAwLTcuNzg5IDB2Mi4zNDlBMi41IDIuNSAwIDAgMCA0IDExLjV2M0EyLjUgMi41IDAgMCAwIDYuNSAxN2g4YTIuNSAyLjUgMCAwIDAgMi41LTIuNXYtM0EyLjUgMi41IDAgMCAwIDE0LjUgOXpNNi41IDEwQTEuNSAxLjUgMCAwIDAgNSAxMS41djNBMS41IDEuNSAwIDAgMCA2LjUgMTZoOGExLjUgMS41IDAgMCAwIDEuNS0xLjV2LTNhMS41IDEuNSAwIDAgMC0xLjUtMS41eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ag-charts-icon-measurer-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibTQuNDYxIDEyLjcxIDEuNTMyLTEuNTMxIDEuNDE0IDEuNDE0LjcwNy0uNzA3TDYuNyAxMC40NzJsMS41MzItMS41MzMgMiAyIC43MDctLjcwNy0yLTIgNi4wMS02LjAxIDIuODMgMi44MjhMNS4wNSAxNy43NzggMi4yMjIgMTQuOTVsMS41MzItMS41MzIgMS40MTQgMS40MTQuNzA3LS43MDd6TS44MDggMTQuOTVsLjcwNy0uNzA3TDE0LjI0MyAxLjUxNWwuNzA3LS43MDcuNzA3LjcwNyAyLjgyOCAyLjgyOC43MDcuNzA3LS43MDcuNzA3TDUuNzU3IDE4LjQ4NWwtLjcwNy43MDctLjcwNy0uNzA3LTIuODI4LTIuODI4em0xMS4wNzgtNi44MzVMMTAuNDcgNi43bC43MDctLjcwNyAxLjQxNSAxLjQxNHptLjgyNC0zLjY1NCAxIDEgLjcwOC0uNzA3LTEtMXoiIGZpbGw9IiMxODFEMUYiLz48L3N2Zz4=)}.ag-charts-icon-note-annotation{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyA0LjVBMS41IDEuNSAwIDAgMSA0LjUgM2gxMUExLjUgMS41IDAgMCAxIDE3IDQuNXY4YTEuNSAxLjUgMCAwIDEtMS41IDEuNWgtMy4yMWwtMS40NjkgMi41N2ExIDEgMCAwIDEtMS42ODIuMDg1TDcuMjQzIDE0SDQuNUExLjUgMS41IDAgMCAxIDMgMTIuNXpNNC41IDRhLjUuNSAwIDAgMC0uNS41djhhLjUuNSAwIDAgMCAuNS41aDMuMjU3bDIuMTk2IDMuMDc0TDExLjcxIDEzaDMuNzlhLjUuNSAwIDAgMCAuNS0uNXYtOGEuNS41IDAgMCAwLS41LS41eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNi41IDYuNUEuNS41IDAgMCAxIDcgNmg2YS41LjUgMCAwIDEgMCAxSDdhLjUuNSAwIDAgMS0uNS0uNU02LjUgOS41QS41LjUgMCAwIDEgNyA5aDZhLjUuNSAwIDAgMSAwIDFIN2EuNS41IDAgMCAxLS41LS41IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-ohlc-series{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZD0iTTEzIDExaC0zdi0xaDNWM2gxdjJoNHYxaC00djExaC0xek02IDE3di0yaDN2LTFINlY0SDV2MUgydjFoM3YxMXoiLz48L3N2Zz4=)}.ag-charts-icon-pan-end{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0ibTYuNjQ2IDEzLjgxMy0uMzUzLjM1NC43MDcuNzA3LjM1NC0uMzU0ek0xMS4xNjYgMTBsLjM1NC4zNTQuMzU0LS4zNTQtLjM1NC0uMzU0ek03LjM1NSA1LjQ4IDcgNS4xMjZsLS43MDcuNzA3LjM1My4zNTR6bTAgOS4wNCA0LjE2Ni00LjE2Ni0uNzA3LS43MDgtNC4xNjcgNC4xNjd6bTQuMTY2LTQuODc0TDcuMzU0IDUuNDhsLS43MDguNzA3IDQuMTY3IDQuMTY3ek0xMy4wODMgNXYxMGgxVjV6Ii8+PC9zdmc+)}.ag-charts-icon-pan-left{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTIuNzkgNS44MzMgOC42MjUgMTBsNC4xNjYgNC4xNjctLjcwNy43MDdMNy4yMSAxMGw0Ljg3My00Ljg3NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-pan-right{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNy4yMSAxNC4xNjcgMTEuMzc2IDEwIDcuMjEgNS44MzNsLjcwNy0uNzA3TDEyLjc5IDEwbC00Ljg3MyA0Ljg3NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-pan-start{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTYgNXYxMGgxVjV6TTkuNjI0IDEwbDQuMTY2LTQuMTY3LS43MDctLjcwN0w4LjIxIDEwbDQuODc0IDQuODc0LjcwNy0uNzA3eiIvPjwvc3ZnPg==)}.ag-charts-icon-parallel-channel,.ag-charts-icon-parallel-channel-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTcuNzIgNS4zMzFBMi4yNSAyLjI1IDAgMSAwIDE0LjcwNSAzLjZsLTkuNDkgNC41NjJhMi4yNSAyLjI1IDAgMSAwIC4yMDkgMS4wMWw5LjY2Mi00LjY0NmEyLjI1IDIuMjUgMCAwIDAgMi42MzQuODA1bS4zNzMtMi41NDdhMS4yNSAxLjI1IDAgMSAxLTIuMzM4Ljg4NSAxLjI1IDEuMjUgMCAwIDEgMi4zMzgtLjg4NU00LjM0MyA4LjY3YTEuMjUgMS4yNSAwIDEgMS0yLjMzOC44ODUgMS4yNSAxLjI1IDAgMCAxIDIuMzM4LS44ODVNNS4zMDcgMTYuNzI4YTIuMjUgMi4yNSAwIDEgMS0uNTI1LS44NThsOS45MjMtNC43N2EyLjI1IDIuMjUgMCAxIDEgLjM4MS45MjZ6bS0uOTY0LjI3NGExLjI1IDEuMjUgMCAxIDEtMi4zMzguODg1IDEuMjUgMS4yNSAwIDAgMSAyLjMzOC0uODg1bTEzLjAyMy01LjEwNmExLjI1IDEuMjUgMCAxIDAtLjg4NS0yLjMzOSAxLjI1IDEuMjUgMCAwIDAgLjg4NSAyLjMzOSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ag-charts-icon-position-bottom{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9Ii4yNSIgZD0iTTMgMTBoMTR2MUgzem0zLTNoOHYxSDZ6Ii8+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTYgMTNoOHYxSDZ6Ii8+PC9zdmc+)}.ag-charts-icon-position-center{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMyAxMGgxNHYxSDN6Ii8+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIuMjUiIGQ9Ik02IDdoOHYxSDZ6bTAgNmg4djFINnoiLz48L3N2Zz4=)}.ag-charts-icon-position-top{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9Ii4yNSIgZD0iTTMgMTBoMTR2MUgzeiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik02IDdoOHYxSDZ6Ii8+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIuMjUiIGQ9Ik02IDEzaDh2MUg2eiIvPjwvc3ZnPg==)}.ag-charts-icon-price-label-annotation{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNC41IDNBMS41IDEuNSAwIDAgMCAzIDQuNVYxM2ExLjUgMS41IDAgMCAwIDEuNSAxLjVoLjgzM3YuMDU3Yy4yNDItLjI5OS41OTctLjUwMyAxLS41NDhWMTMuNUg0LjVBLjUuNSAwIDAgMSA0IDEzVjQuNWEuNS41IDAgMCAxIC41LS41aDExYS41LjUgMCAwIDEgLjUuNXY4YS41LjUgMCAwIDEtLjUuNWgtNC44MThsLS4xMjYuMDg0YTI2IDI2IDAgMCAwLTIuMjI1IDEuNjg1bC0uMzIuMjY1LS4wNjguMDU2YTEuNSAxLjUgMCAwIDEtMi42MDkgMS4zNTRjLjAzMy43NjMuOTA1IDEuMjM4IDEuNTYuNzU2LjY0Ni0uNDc0IDEuMjEtLjk0MyAxLjc2MS0xLjRsLjMxMy0uMjZBMjYgMjYgMCAwIDEgMTAuOTg2IDE0SDE1LjVhMS41IDEuNSAwIDAgMCAxLjUtMS41di04QTEuNSAxLjUgMCAwIDAgMTUuNSAzeiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC43MTYgMTQuODE1YTIuMjUgMi4yNSAwIDEgMS00LjIxIDEuNTkzIDIuMjUgMi4yNSAwIDAgMSA0LjIxLTEuNTkzbS0xLjY2MiAxLjk2NmExLjI1IDEuMjUgMCAxIDAtLjg4NS0yLjMzOSAxLjI1IDEuMjUgMCAwIDAgLjg4NSAyLjMzOSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ag-charts-icon-price-range-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOS4wNDYgMTVWNS44NzdoLjk0MlYxNXoiIGZpbGw9IiMxODFEMUYiLz48cGF0aCBkPSJNOS4wNDYgMTVWNS44NzdoLjk0MlYxNXoiIGZpbGw9IiMxODFEMUYiLz48cGF0aCBkPSJNOS41IDYuMjI4IDcuMTY3IDguMzc2IDYuNSA3Ljc2MiA5LjUgNWwzIDIuNzYyLS42NjcuNjE0eiIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yIDE4di0xaDE2djF6TTIgM1YyaDE2djF6IiBmaWxsPSIjMTgxRDFGIi8+PC9zdmc+)}.ag-charts-icon-reset{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTIuMDQgNC40NDVhNS44MSA1LjgxIDAgMCAwLTcuMjU3IDIuNDUzLjUuNSAwIDAgMS0uODY1LS41MDJBNi44MSA2LjgxIDAgMSAxIDMgOS44MTNhLjUuNSAwIDAgMSAxIDAgNS44MSA1LjgxIDAgMSAwIDguMDQtNS4zNjgiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQuMjg5IDMuMDAyYS41LjUgMCAwIDEgLjUuNXYyLjY1NWgyLjY1NWEuNS41IDAgMCAxIDAgMUg0LjI5YS41LjUgMCAwIDEtLjUtLjVWMy41MDJhLjUuNSAwIDAgMSAuNS0uNSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ag-charts-icon-settings{--icon: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIj48cGF0aCBkPSJNMTAgMTNhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2bTAtMWEyIDIgMCAxIDEtLjAwMS0zLjk5OUEyIDIgMCAwIDEgMTAgMTIiLz48cGF0aCBkPSJNMi4zMSAxNC4zNDVjLS44MTctMS40OTEuMDI3LTIuNDk5LjQ3NC0yLjg2NS41MzEtLjQzNC45NjktLjM2NS45NzItMS40OC0uMDAzLTEuMTE1LS40NDEtMS4wNDYtLjk3Mi0xLjQ4MS0uNDU0LS4zNzEtMS4zMTctMS40MDUtLjQzNC0yLjkzNmwuMDA1LS4wMDljLjg4NC0xLjUyIDIuMjA3LTEuMjkgMi43NTUtMS4wODMuNjQxLjI0My44MDEuNjU2IDEuNzY4LjEwMS45NjQtLjU2LjY4Ni0uOTA0Ljc5Ni0xLjU4Mi4wOTQtLjU3OC41NTktMS44NDMgMi4zMjYtMS44NDNoLjAxYzEuNzU5LjAwNSAyLjIyMiAxLjI2NiAyLjMxNiAxLjg0My4xMS42NzgtLjE2OCAxLjAyMi43OTYgMS41ODIuOTY3LjU1NSAxLjEyNy4xNDIgMS43NjgtLjEwMS41NDktLjIwOCAxLjg3Ni0uNDM4IDIuNzYgMS4wOTJzLjAyIDIuNTY1LS40MzQgMi45MzZjLS41MzEuNDM1LS45NjkuMzY2LS45NzIgMS40ODEuMDAzIDEuMTE1LjQ0MSAxLjA0Ni45NzIgMS40OC40NTQuMzcyIDEuMzE3IDEuNDA2LjQzNCAyLjkzN2wtLjAwNS4wMDljLS44ODQgMS41Mi0yLjIwNyAxLjI5LTIuNzU1IDEuMDgzLS42NDEtLjI0My0uODAxLS42NTYtMS43NjgtLjEwMS0uOTY0LjU2LS42ODYuOTA0LS43OTYgMS41ODEtLjA5NC41NzktLjU1OSAxLjg0NC0yLjMyNiAxLjg0NGgtLjAxYy0xLjc1OS0uMDA1LTIuMjIyLTEuMjY2LTIuMzE2LTEuODQ0LS4xMS0uNjc3LjE2OC0xLjAyMS0uNzk2LTEuNTgxLS45NjctLjU1NS0xLjEyNy0uMTQyLTEuNzY4LjEwMS0uNTQ5LjIwOC0xLjg3Ni40MzgtMi43Ni0xLjA5MmwtLjAyLS4wMzZ6TTkuOTg0IDIuMTYySDEwYzEuMzU1IDAgMS4zNDIgMS4wMzkgMS4zNTMgMS40MjUuMDA4LjMxMi4wNCAxLjE2IDEuMjU5IDEuODcybC4wMTUuMDA4YzEuMjI1LjcgMS45NzYuMzA0IDIuMjUxLjE1NS4zMzctLjE4MyAxLjIyNi0uNzExIDEuOTAyLjQ0NWwuMDA4LjAxNGMuNjc4IDEuMTczLS4yMjkgMS42ODItLjU1OCAxLjg4NC0uMjY2LjE2My0uOTg0LjYxNS0uOTkxIDIuMDI3di4wMTZjLjAwNyAxLjQxMi43MjUgMS44NjQuOTkxIDIuMDI3LjMyOC4yMDEgMS4yMjkuNzA3LjU2NiAxLjg3bC0uMDA4LjAxNGMtLjY3NyAxLjE3NC0xLjU3MS42NDMtMS45MS40NTktLjI3NS0uMTQ5LTEuMDI2LS41NDUtMi4yNTEuMTU0bC0uMDE1LjAwOWMtMS4yMTkuNzEyLTEuMjUxIDEuNTYtMS4yNTkgMS44NzItLjAxMS4zODYuMDAyIDEuNDI1LTEuMzUzIDEuNDI1cy0xLjM0Mi0xLjAzOS0xLjM1My0xLjQyNWMtLjAwOC0uMzEyLS4wNC0xLjE2LTEuMjU5LTEuODcybC0uMDE1LS4wMDljLTEuMjI1LS42OTktMS45NzYtLjMwMy0yLjI1MS0uMTU0LS4zMzYuMTgzLTEuMjE5LjcwNi0xLjg5NC0uNDMybC0uMDE2LS4wMjdjLS42NzgtMS4xNzQuMjI5LTEuNjgyLjU1OC0xLjg4NC4yNjYtLjE2My45ODQtLjYxNS45OTEtMi4wMjd2LS4wMTZjLS4wMDctMS40MTItLjcyNS0xLjg2NC0uOTkxLTIuMDI3LS4zMjgtLjIwMS0xLjIyOS0uNzA3LS41NjYtMS44N2wuMDA4LS4wMTRjLjY3Ny0xLjE3NCAxLjU3MS0uNjQzIDEuOTEtLjQ1OS4yNzUuMTQ5IDEuMDI2LjU0NSAyLjI1MS0uMTU1bC4wMTUtLjAwOGMxLjIxOS0uNzEyIDEuMjUxLTEuNTYgMS4yNTktMS44NzIuMDEtLjM4NC0uMDAyLTEuNDE3IDEuMzM3LTEuNDI1Ii8+PC9zdmc+)}.ag-charts-icon-step-line-series{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzE4MUQxRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNiA0aDV2OGgzVjhoNXYxaC00djRoLTVWNUg3djEwSDJ2LTFoNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-text-annotation{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDRIMTZWN0gxNVY1SDEwLjVWMTVIMTRWMTZINlYxNUg5LjVWNUg1VjdINFY0WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+Cg==)}.ag-charts-icon-trend-line,.ag-charts-icon-trend-line-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4zMTQgMTAuOTM4YTIuMjUgMi4yNSAwIDEgMSAuMDEtMWg5LjM1MmEyLjI1IDIuMjUgMCAxIDEgLjAxIDF6bS0yLjE4OS43MjlhMS4yNSAxLjI1IDAgMSAwIDAtMi41IDEuMjUgMS4yNSAwIDAgMCAwIDIuNW0xMy43NSAwYTEuMjUgMS4yNSAwIDEgMCAwLTIuNSAxLjI1IDEuMjUgMCAwIDAgMCAyLjUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-unlock,.ag-charts-icon-unlocked{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNjUxIDMuNWEyLjg5NCAyLjg5NCAwIDAgMC0yLjg5NCAyLjg5NFY5SDE0LjVhMi41IDIuNSAwIDAgMSAyLjUgMi41djNhMi41IDIuNSAwIDAgMS0yLjUgMi41aC04QTIuNSAyLjUgMCAwIDEgNCAxNC41di0zQTIuNSAyLjUgMCAwIDEgNi41IDloLjI1N1Y2LjM5NGEzLjg5NCAzLjg5NCAwIDEgMSA3Ljc4OSAwIC41LjUgMCAwIDEtMSAwQTIuODk0IDIuODk0IDAgMCAwIDEwLjY1IDMuNU02LjUgMTBBMS41IDEuNSAwIDAgMCA1IDExLjV2M0ExLjUgMS41IDAgMCAwIDYuNSAxNmg4YTEuNSAxLjUgMCAwIDAgMS41LTEuNXYtM2ExLjUgMS41IDAgMCAwLTEuNS0xLjV6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-vertical-line,.ag-charts-icon-vertical-line-drawing{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNSA3LjgwNmEyLjI1IDIuMjUgMCAwIDEgMCA0LjM4OFYxOS41aC0xdi03LjMwNmEyLjI1IDIuMjUgMCAwIDEgMC00LjM4OFYuNWgxem0tLjUuOTQ0YTEuMjUgMS4yNSAwIDEgMSAwIDIuNSAxLjI1IDEuMjUgMCAwIDEgMC0yLjUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-zoom-in{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTEwIDUuNWEuNS41IDAgMCAxIC41LjV2My41aDMuODc1YS41LjUgMCAwIDEgMCAxSDEwLjV2NC4yNWEuNS41IDAgMSAxLTEgMFYxMC41SDUuNjI1YS41LjUgMCAxIDEgMC0xSDkuNVY2YS41LjUgMCAwIDEgLjUtLjUiLz48L3N2Zz4=)}.ag-charts-icon-zoom-out{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS41IDEwYS41LjUgMCAwIDEgLjUtLjVoOGEuNS41IDAgMCAxIDAgMUg2YS41LjUgMCAwIDEtLjUtLjUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-high-low-series{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNyA0aDJ2MTJINFY0aDNNNSA1aDN2MTBINXpNMTEgMTRWNmg1djhoLTVtMS03aDN2NmgtM3oiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-icon-hlc-series{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzEzMTcyMiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJtMTguMTYzIDEuODM3LTUuMzM0IDExLjYyMUw2Ljk1NyA4LjEybC00LjE5OSA5LjYyMi0uOTE2LS40IDQuNzU2LTEwLjlMMTIuNDkgMTEuOCAxNy4yNTQgMS40MnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iLjQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuODI1IDIuNzA0LjU1IDEzLjc4NWwuOTAyLjQzIDQuNzI0LTkuOTE5IDYuMDM0IDUuMDI5IDMuMjU1LTguMTQtLjkyOC0uMzctMi43NDUgNi44NnptNy44NTIgMTQuNjM2IDUuNzgtMTMuMTM5LS45MTUtLjQwMi01LjIxOSAxMS44Ni02LjAwNS01LjUwNC0zLjI3OCA3LjY0OC45Mi4zOTQgMi43MjItNi4zNTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ag-charts-icon-zoom-in-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04Ljc1IDQuNWEuNzUuNzUgMCAwIDAtMS41IDB2Mi43NUg0LjVhLjc1Ljc1IDAgMCAwIDAgMS41aDIuNzV2Mi43NWEuNzUuNzUgMCAwIDAgMS41IDBWOC43NWgyLjc1YS43NS43NSAwIDAgMCAwLTEuNUg4Ljc1VjQuNVoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=)}.ag-charts-icon-zoom-out-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjc1IDhhLjc1Ljc1IDAgMCAxIC43NS0uNzVoN2EuNzUuNzUgMCAwIDEgMCAxLjVoLTdBLjc1Ljc1IDAgMCAxIDMuNzUgOFoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=)}.ag-charts-icon-zoom-in-alt,.ag-charts-icon-zoom-in-alt-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLXpvb20taW4iPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48bGluZSB4MT0iMjEiIHgyPSIxNi42NSIgeTE9IjIxIiB5Mj0iMTYuNjUiLz48bGluZSB4MT0iMTEiIHgyPSIxMSIgeTE9IjgiIHkyPSIxNCIvPjxsaW5lIHgxPSI4IiB4Mj0iMTQiIHkxPSIxMSIgeTI9IjExIi8+PC9zdmc+)}.ag-charts-icon-zoom-out-alt,.ag-charts-icon-zoom-out-alt-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLXpvb20tb3V0Ij48Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4Ii8+PGxpbmUgeDE9IjIxIiB4Mj0iMTYuNjUiIHkxPSIyMSIgeTI9IjE2LjY1Ii8+PGxpbmUgeDE9IjgiIHgyPSIxNCIgeTE9IjExIiB5Mj0iMTEiLz48L3N2Zz4=)}.ag-charts-icon-reset-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjQxMiA0LjA1OCAyLjc1IDIuMzk2VjYuNzVoLjc0NGEuNzYuNzYgMCAwIDAgLjAxMiAwaDMuNTk4TDUuNDc4IDUuMTI1YTQuMTI1IDQuMTI1IDAgMCAxIDIuNTIzLS44NzUgMy43NSAzLjc1IDAgMSAxLTMuMTE5IDUuODMzLjc1Ljc1IDAgMCAwLTEuMjQ3LjgzNEE1LjI1IDUuMjUgMCAxIDAgOCAyLjc1aC0uMDAzYTUuNjI1IDUuNjI1IDAgMCAwLTMuNTg1IDEuMzA4WiIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==)}.ag-charts-icon-pan-left-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC4wMyA0LjQ3YS43NS43NSAwIDAgMSAwIDEuMDZMNy41NiA4bDIuNDcgMi40N2EuNzUuNzUgMCAxIDEtMS4wNiAxLjA2bC0zLTNhLjc1Ljc1IDAgMCAxIDAtMS4wNmwzLTNhLjc1Ljc1IDAgMCAxIDEuMDYgMFoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=)}.ag-charts-icon-pan-right-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01Ljk3IDExLjUzYS43NS43NSAwIDAgMSAwLTEuMDZMOC40NCA4IDUuOTcgNS41M2EuNzUuNzUgMCAwIDEgMS4wNi0xLjA2bDMgM2EuNzUuNzUgMCAwIDEgMCAxLjA2bC0zIDNhLjc1Ljc1IDAgMCAxLTEuMDYgMFoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=)}.ag-charts-icon-pan-start-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNoZXZyb24tZmlyc3QiPjxwYXRoIGQ9Im0xNyAxOC02LTYgNi02Ii8+PHBhdGggZD0iTTcgNnYxMiIvPjwvc3ZnPg==)}.ag-charts-icon-pan-end-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLWNoZXZyb24tbGFzdCI+PHBhdGggZD0ibTcgMTggNi02LTYtNiIvPjxwYXRoIGQ9Ik0xNyA2djEyIi8+PC9zdmc+)}.ag-charts-icon-trend-line-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBjeD0iMi41IiBjeT0iOCIgcj0iMS43NSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjxjaXJjbGUgY3g9IjEzLjUiIGN5PSI4IiByPSIxLjc1IiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHBhdGggc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQgOGg4Ii8+PC9zdmc+)}.ag-charts-icon-horizontal-line-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC4zODYgOC43NWEyLjUwMSAyLjUwMSAwIDAgMS00Ljc3MiAwSC43NWEuNzUuNzUgMCAwIDEgMC0xLjVoNC44NjRhMi41MDEgMi41MDEgMCAwIDEgNC43NzIgMGg0Ljg2NGEuNzUuNzUgMCAwIDEgMCAxLjVoLTQuODY0Wk05IDhhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwWiIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==)}.ag-charts-icon-vertical-line-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04Ljc1IDUuNjE0YTIuNTAxIDIuNTAxIDAgMCAxIDAgNC43NzJ2NC44NjRhLjc1Ljc1IDAgMCAxLTEuNSAwdi00Ljg2NGEyLjUwMSAyLjUwMSAwIDAgMSAwLTQuNzcyVi43NWEuNzUuNzUgMCAwIDEgMS41IDB2NC44NjRaTTggN2ExIDEgMCAxIDEgMCAyIDEgMSAwIDAgMSAwLTJaIiBmaWxsPSIjMDAwIi8+PC9zdmc+)}.ag-charts-icon-parallel-channel-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC40MjQgNC45MmEyLjUgMi41IDAgMSAwLTMuMzc3LTIuMTRsLTYuNjMgMi45YTIuNTAxIDIuNTAxIDAgMSAwIC42MDcgMS4zNzJsNi41ODUtMi44OGEyLjUwMSAyLjUwMSAwIDAgMCAyLjgxNS43NDhabS4wNS0yLjY5M2ExIDEgMCAxIDEtMS44Ny43MDggMSAxIDAgMCAxIDEuODctLjcwOFptLTExIDQuNzVhMSAxIDAgMSAxLTEuODcuNzA4IDEgMSAwIDAgMSAxLjg3LS43MDhabTEuNTUgNi4wNzVhMi41MDEgMi41MDEgMCAxIDEtLjYwNy0xLjM3Mmw2LjYzLTIuOWEyLjUwMSAyLjUwMSAwIDEgMSAuNTYyIDEuMzkxbC02LjU4NSAyLjg4Wm0tMS41NS0uMDc1YTEgMSAwIDEgMS0xLjg3LjcwOCAxIDEgMCAwIDEgMS44Ny0uNzA4Wm0xMC40Mi0zLjQ2YTEgMSAwIDEgMC0uNzA5LTEuODcgMSAxIDAgMCAwIC43MDggMS44N1oiIGZpbGw9IiMwMDAiLz48L3N2Zz4=)}.ag-charts-icon-disjoint-channel-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC40MjQgNC45MmEyLjUgMi41IDAgMSAwLTMuMzgzLTIuNDUzTDQuNjkgNC4wNTVhMi41IDIuNSAwIDEgMCAuMzQ0IDEuNDZsNi4zOTItMS41OThhMi41MDEgMi41MDEgMCAwIDAgMyAxLjAwM1ptLjA1LTIuNjkzYTEgMSAwIDEgMS0xLjg3LjcwOCAxIDEgMCAwIDEgMS44Ny0uNzA4Wm0tMTEgMi43NWExIDEgMCAxIDEtMS44Ny43MDggMSAxIDAgMCAxIDEuODctLjcwOFptMS41NiA1LjQyYTIuNSAyLjUgMCAxIDAtLjM0NSAxLjQ2MWw2LjM1MiAxLjU4OGEyLjUgMi41IDAgMSAwIC4zODQtMS40NWwtNi4zOTItMS41OThabS0xLjU2LjUzOGExIDEgMCAxIDAtMS44Ny0uNzA4IDEgMSAwIDAgMCAxLjg3LjcwOFptMTAuNDIgMS40NjFhMSAxIDAgMSAxLS43MDkgMS44NyAxIDEgMCAwIDEgLjcwOC0xLjg3WiIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==)}.ag-charts-icon-line-color-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEyLjc4OC41ODNhMi42MyAyLjYzIDAgMCAwLTEuODYuNzdMOS41NDQgMi43MzhhLjc1Ny43NTcgMCAwIDAtLjE0LjE0TDIuMDMyIDEwLjI1di4wMDFjLS4yNDIuMjQxLS40Mi41MzgtLjUyLjg2NGwtLjAwMi4wMDItLjg4IDIuOTAyLS4wMDEuMDAzYTEuMDgzIDEuMDgzIDAgMCAwIDEuMzUgMS4zNDdoLjAwMWwyLjkwMi0uODhoLjAwMWMuMzI2LS4xLjYyMy0uMjc3Ljg2NS0uNTE4di0uMDAxbDcuMzc1LTcuMzc2YS43NjMuNzYzIDAgMCAwIC4xMzktLjEzOWwxLjM4NC0xLjM4NEEyLjYzIDIuNjMgMCAwIDAgMTIuNzg4LjU4M1ptLS4xMjYgNC4zNTIuOTI0LS45MjRhMS4xMyAxLjEzIDAgMCAwLTEuNTk3LTEuNTk3bC0uOTI0LjkyNCAxLjU5NyAxLjU5N1ptLTIuNjU3LS41MzYtNi45MTMgNi45MTRIMy4wOWEuNTgzLjU4MyAwIDAgMC0uMTQ2LjI0MmwtLjY1MyAyLjE1MyAyLjE1NS0uNjU0YS41ODMuNTgzIDAgMCAwIC4yNDEtLjE0NGw2LjkxNC02LjkxNC0xLjU5Ny0xLjU5N1oiIGZpbGw9IiMwMDAiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDE2djE2SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+)}.ag-charts-icon-delete-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjA4MyAyLjY2N2MwLS4wOS4wNTMtLjI0Mi4xOTctLjM4Ny4xNDUtLjE0NC4yOTctLjE5Ny4zODctLjE5N2gyLjY2N2MuMDg5IDAgLjI0MS4wNTMuMzg2LjE5Ny4xNDUuMTQ1LjE5Ny4yOTcuMTk3LjM4N3YuNTgzSDYuMDg0di0uNTgzWk01LjMzIDQuNzVIMTEuOTE3djguNTgzYzAgLjA5LS4wNTIuMjQyLS4xOTcuMzg3LS4xNDUuMTQ0LS4yOTcuMTk3LS4zODYuMTk3SDQuNjY3Yy0uMDkgMC0uMjQyLS4wNTMtLjM4Ny0uMTk3LS4xNDQtLjE0NS0uMTk3LS4yOTctLjE5Ny0uMzg3VjQuNzVINS4zM1ptLS43NDUtMS41di0uNTgzYzAtLjU3OC4yOC0xLjA5Mi42MzYtMS40NDcuMzU1LS4zNTYuODctLjYzNyAxLjQ0Ny0uNjM3aDIuNjY3Yy41NzcgMCAxLjA5MS4yODEgMS40NDcuNjM3LjM1NS4zNTUuNjM2Ljg3LjYzNiAxLjQ0N3YuNTgzSDE0YS43NS43NSAwIDAgMSAwIDEuNWgtLjU4M3Y4LjU4M2MwIC41NzgtLjI4MSAxLjA5Mi0uNjM2IDEuNDQ3LS4zNTYuMzU2LS44Ny42MzctMS40NDcuNjM3SDQuNjY3Yy0uNTc3IDAtMS4wOTItLjI4MS0xLjQ0Ny0uNjM3LS4zNTUtLjM1NS0uNjM3LS44Ny0uNjM3LTEuNDQ3VjQuNzVIMmEuNzUuNzUgMCAwIDEgMC0xLjVoMi41ODNabTIuMDgzIDMuMzMzYS43NS43NSAwIDAgMSAuNzUuNzV2NGEuNzUuNzUgMCAxIDEtMS41IDB2LTRhLjc1Ljc1IDAgMCAxIC43NS0uNzVabTMuNDE3Ljc1YS43NS43NSAwIDAgMC0xLjUgMHY0YS43NS43NSAwIDEgMCAxLjUgMHYtNFoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=)}.ag-charts-icon-lock-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjE3MyAyLjg0YTIuNTgzIDIuNTgzIDAgMCAxIDQuNDEgMS44Mjd2MS45MTZINS40MTZWNC42NjdjMC0uNjg1LjI3My0xLjM0My43NTctMS44MjdaTTMuOTE3IDYuNTgzVjQuNjY3YTQuMDgzIDQuMDgzIDAgMCAxIDguMTY2IDB2MS45MTZoLjU4NGMxLjE1IDAgMi4wODMuOTMzIDIuMDgzIDIuMDg0djQuNjY2YzAgMS4xNS0uOTMzIDIuMDg0LTIuMDgzIDIuMDg0SDMuMzMzYTIuMDgzIDIuMDgzIDAgMCAxLTIuMDgzLTIuMDg0VjguNjY3YzAtMS4xNTEuOTMzLTIuMDg0IDIuMDgzLTIuMDg0aC41ODNabTcuNDE2IDEuNWgtOGEuNTgzLjU4MyAwIDAgMC0uNTgzLjU4NHY0LjY2NmMwIC4zMjIuMjYxLjU4NC41ODMuNTg0aDkuMzM0YS41ODMuNTgzIDAgMCAwIC41ODMtLjU4NFY4LjY2N2EuNTgzLjU4MyAwIDAgMC0uNTgzLS41ODRoLTEuMzM0WiIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==)}.ag-charts-icon-unlock-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjkyMyAyLjg0YTIuNTgzIDIuNTgzIDAgMCAxIDMuNjUzIDAgMyAzIDAgMCAxIC41Ny43OThjLjEzNC4yNzguMTcuNDc0LjE3LjU0NWEuNzUuNzUgMCAwIDAgMS41IDBjMC0uMzgxLS4xMzItLjgwOS0uMzItMS4xOThhNC41MDEgNC41MDEgMCAwIDAtLjg1OS0xLjIwNiA0LjA4MyA0LjA4MyAwIDAgMC02Ljk3IDIuODg4djEuOTE2aC0uNTg0QzIuOTMzIDYuNTgzIDIgNy41MTYgMiA4LjY2N3Y0LjY2NmMwIDEuMTUuOTMzIDIuMDg0IDIuMDgzIDIuMDg0aDkuMzM0YzEuMTUgMCAyLjA4My0uOTMzIDIuMDgzLTIuMDg0VjguNjY3YzAtMS4xNTEtLjkzMy0yLjA4NC0yLjA4My0yLjA4NGgtNy4yNVY0LjY2N2MwLS42ODUuMjcyLTEuMzQzLjc1Ni0xLjgyN1pNNS40MTcgOC4wODNINC4wODJhLjU4My41ODMgMCAwIDAtLjU4My41ODR2NC42NjZjMCAuMzIyLjI2MS41ODQuNTgzLjU4NGg5LjMzNGEuNTgzLjU4MyAwIDAgMCAuNTgzLS41ODRWOC42NjdhLjU4My41ODMgMCAwIDAtLjU4My0uNTg0aC04WiIgZmlsbD0iIzAwMCIvPjwvc3ZnPg==)}.ag-charts-icon-plus-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLXBsdXMiPjxwYXRoIGQ9Ik01IDEyaDE0Ii8+PHBhdGggZD0iTTEyIDV2MTQiLz48L3N2Zz4=)}.ag-charts-icon-crossline-add-line-legacy{--icon: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOC43NSA0LjVhLjc1Ljc1IDAgMCAwLTEuNSAwdjIuNzVINC41YS43NS43NSAwIDAgMCAwIDEuNWgyLjc1djIuNzVhLjc1Ljc1IDAgMCAwIDEuNSAwVjguNzVoMi43NWEuNzUuNzUgMCAwIDAgMC0xLjVIOC43NXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.ag-charts-input{--input-layer-active: 1;--input-layer-focus: 2;color:inherit;font-family:var(--ag-charts-input-font-family);font-size:var(--ag-charts-input-font-size);transition-duration:var(--ag-charts-input-transition-duration);transition-property:none;transition-timing-function:var(--ag-charts-input-transition-timing-function)}.ag-charts-input:focus-visible{outline:var(--ag-charts-input-focus-outline);box-shadow:var(--ag-charts-input-focus-box-shadow);z-index:var(--input-layer-focus)}.ag-charts-button{background:var(--ag-charts-input-background-color);border:1px solid var(--ag-charts-input-border-color);border-radius:var(--ag-charts-input-border-radius);cursor:pointer;padding:var(--ag-charts-input-padding);transition-property:background,border-color}.ag-charts-button:hover{background:var(--ag-charts-input-background-color--hover)}.ag-charts-button:has(.ag-charts-icon){padding:2px}.ag-charts-checkbox{appearance:none;background:var(--ag-charts-input-checkbox-background-color);border-radius:9px;cursor:pointer;height:18px;margin:0;transition-duration:var(--ag-charts-input-transition-duration--fast);transition-property:margin;width:29px}.ag-charts-checkbox:before{display:block;background:var(--ag-charts-input-background-color);border-radius:7px;content:\" \";height:14px;margin:2px;transition-duration:var(--ag-charts-input-transition-duration--fast);transition-property:margin;transition-timing-function:var(--ag-charts-input-transition-easing);width:14px}.ag-charts-checkbox:checked{background:var(--ag-charts-input-checkbox-background-color--checked)}.ag-charts-checkbox:checked:before{margin-left:13px}.ag-charts-select{background:var(--ag-charts-input-background-color);border:1px solid var(--ag-charts-input-border-color);border-radius:var(--ag-charts-input-border-radius);padding:3px 2px 4px;font-size:inherit}.ag-charts-textarea{--line-height: 1.38;background:var(--ag-charts-input-background-color);border:1px solid var(--ag-charts-input-border-color);border-radius:var(--ag-charts-input-border-radius);line-height:var(--line-height);font-family:var(--ag-charts-input-font-family);font-size:var(--ag-charts-input-font-size);padding:var(--ag-charts-input-padding-large) var(--ag-charts-input-padding)}.ag-charts-textarea[placeholder]:empty:before{color:var(--ag-charts-input-placeholder);content:attr(placeholder)}.ag-charts-proxy-container{pointer-events:none;position:absolute}.ag-charts-proxy-elem{-webkit-appearance:none;appearance:none;background:none;border:none;color:#0000;overflow:hidden;pointer-events:none;position:absolute}.ag-charts-proxy-elem::-moz-range-thumb,.ag-charts-proxy-elem::-moz-range-track{opacity:0}.ag-charts-proxy-elem::-webkit-slider-runnable-track,.ag-charts-proxy-elem::-webkit-slider-thumb{opacity:0}.ag-charts-proxy-elem:focus-visible{outline:var(--ag-charts-focus-border);box-shadow:var(--ag-charts-focus-border-shadow)}.ag-charts-focus-indicator{position:absolute;display:block;pointer-events:none;user-select:none;width:100%;height:100%}.ag-charts-focus-indicator>div{position:absolute;outline:var(--ag-charts-focus-border);outline-width:2px;box-shadow:var(--ag-charts-focus-border-shadow)}.ag-charts-focus-indicator>svg{width:100%;height:100%;fill:none;stroke:var(--ag-charts-focus-border-color);stroke-width:2px}.ag-charts-toolbar{align-items:center;background:none;border:none;display:flex;flex-wrap:nowrap;opacity:1;position:absolute;transform:translateY(0);transition:opacity .2s ease-in-out,transform .2s ease-in-out}.ag-charts-toolbar--hidden,.ag-charts-toolbar--prevent-flash{visibility:hidden}.ag-charts-toolbar--floating-hidden{opacity:0;transition:opacity .4s ease-in-out}.ag-charts-toolbar--small{--ag-charts-toolbar-size: var(--ag-charts-toolbar-size-small);--ag-charts-toolbar-font-size: var(--ag-charts-toolbar-font-size-small);--ag-charts-toolbar-button-padding: var(--ag-charts-toolbar-button-padding-small)}.ag-charts-toolbar--top,.ag-charts-toolbar--bottom{flex-direction:row;width:100%}.ag-charts-toolbar--left,.ag-charts-toolbar--right{flex-direction:column}.ag-charts-toolbar--floating,.ag-charts-toolbar--floating-top,.ag-charts-toolbar--floating-bottom{background:none;border:none;flex-direction:row;pointer-events:none;width:100%}.ag-charts-toolbar--floating{padding:0;width:auto;z-index:var(--ag-charts-layer-toolbar)}.ag-charts-toolbar--floating-top{height:calc(var(--ag-charts-toolbar-size) + 10px);padding-top:10px}.ag-charts-toolbar--floating-bottom{height:calc(var(--ag-charts-toolbar-size) + 10px);padding-bottom:10px;overflow:hidden}.ag-charts-toolbar__align{display:flex;flex-direction:inherit;flex-wrap:inherit;gap:var(--ag-charts-toolbar-gap);max-width:100%;width:100%}.ag-charts-toolbar__align--start{justify-content:start}.ag-charts-toolbar__align--center{justify-content:center}.ag-charts-toolbar__align--end{justify-content:end}.ag-charts-toolbar__align--center,.ag-charts-toolbar__align--end{margin-left:auto}.ag-charts-toolbar--left .ag-charts-toolbar__align--center,.ag-charts-toolbar--left .ag-charts-toolbar__align--end,.ag-charts-toolbar--right .ag-charts-toolbar__align--center,.ag-charts-toolbar--right .ag-charts-toolbar__align--end{margin-left:0;margin-top:auto}.ag-charts-toolbar--floating-top .ag-charts-toolbar__align,.ag-charts-toolbar--floating-bottom .ag-charts-toolbar__align{transition:transform .4s ease-in-out;width:auto}.ag-charts-toolbar__section{display:inherit;flex-direction:inherit;flex-wrap:inherit;justify-content:inherit;max-width:inherit;width:inherit}.ag-charts-toolbar__button{align-items:center;background:var(--ag-charts-toolbar-background-color);border:var(--ag-charts-toolbar-border);color:var(--ag-charts-toolbar-foreground-color);display:flex;font:var(--ag-charts-toolbar-font-size) var(--ag-charts-font-family);justify-content:center;margin:0 0 0 -1px;min-height:var(--ag-charts-toolbar-size);min-width:var(--ag-charts-toolbar-size);padding:var(--ag-charts-toolbar-button-padding);pointer-events:all;position:relative;white-space:nowrap;--stroke-width-color: var(--ag-charts-toolbar-foreground-color)}.ag-charts-toolbar__no-pointer-events{pointer-events:none}.ag-charts-toolbar__button--drag-handle{min-width:24px;padding-left:0;padding-right:0}.ag-charts-toolbar__button--with-transition{transition:background-color .25s ease-in-out,border-color .25s ease-in-out,color .25s ease-in-out}.ag-charts-toolbar__button[data-toolbar-group=ranges]{padding:var(--ag-charts-toolbar-button-padding) calc(var(--ag-charts-toolbar-button-padding) * 1.5)}.ag-charts-toolbar--top,.ag-charts-toolbar--bottom,.ag-charts-toolbar--floating,.ag-charts-toolbar--floating-top,.ag-charts-toolbar--floating-bottom{.ag-charts-toolbar__button--first{border-bottom-left-radius:var(--ag-charts-button-radius);border-top-left-radius:var(--ag-charts-button-radius);margin:0}.ag-charts-toolbar__button--last{border-bottom-right-radius:var(--ag-charts-button-radius);border-top-right-radius:var(--ag-charts-button-radius)}}.ag-charts-toolbar--left,.ag-charts-toolbar--right{.ag-charts-toolbar__button{border-radius:0;margin:-1px 0 0;max-width:100%}.ag-charts-toolbar__button--first{border-top-left-radius:var(--ag-charts-button-radius);border-top-right-radius:var(--ag-charts-button-radius);margin:0}.ag-charts-toolbar__button--last{border-bottom-left-radius:var(--ag-charts-button-radius);border-bottom-right-radius:var(--ag-charts-button-radius)}}.ag-charts-toolbar__button--hidden-value,.ag-charts-toolbar__button--hidden-toggled{display:none}.ag-charts-toolbar__button:hover:not([aria-disabled=true],.ag-charts-toolbar__button--drag-handle){background:var(--ag-charts-toolbar-hover-color);z-index:1}.ag-charts-toolbar__button:focus-visible{outline:var(--ag-charts-focus-border);box-shadow:var(--ag-charts-focus-border-shadow);z-index:calc(var(--ag-charts-layer-ui-overlay) + 1)}.ag-charts-toolbar__button.ag-charts-toolbar__button--active{background:var(--ag-charts-toolbar-active-background-color);border-color:var(--ag-charts-toolbar-active-color);color:var(--ag-charts-toolbar-active-color);z-index:2;--stroke-width-color: var(--ag-charts-toolbar-active-color)}.ag-charts-toolbar__button[aria-disabled=true]{background:var(--ag-charts-toolbar-disabled-background-color);color:var(--ag-charts-toolbar-disabled-foreground-color)}.ag-charts-toolbar__button:not([aria-disabled=true]){cursor:pointer}.ag-charts-toolbar__button.ag-charts-toolbar__button--drag-handle{cursor:grab}.ag-charts-toolbar__button.ag-charts-toolbar__button--dragging{cursor:grabbing}.ag-charts-toolbar__button--fill-visible:after{content:\"\";display:block;position:absolute;bottom:3px;left:5px;right:5px;height:4px;border-radius:99px;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ag-charts-foreground-color) 10%,transparent);background:var(--fill)}.ag-charts-toolbar__button--fill-visible[aria-disabled=true]:after{filter:grayscale(1);opacity:.5}.ag-charts-toolbar__button--stroke-width-visible:before{content:\"\";height:min(var(--strokeWidth),20px);width:12px;background:var(--stroke-width-color);margin-right:var(--ag-charts-toolbar-button-padding)}.ag-charts-toolbar__button--stroke-width-visible[aria-disabled=true]:before{filter:grayscale(1);opacity:.5}.ag-charts-toolbar__icon+.ag-charts-toolbar__label{margin-left:var(--ag-charts-toolbar-gap)}.ag-charts-toolbar__icon,.ag-charts-toolbar__label{pointer-events:none}.ag-chart-overlay{color:#181d1f;pointer-events:none}.ag-chart-overlay.ag-chart-dark-overlay{color:#fff}.ag-chart-overlay--loading{color:#8c8c8c}.ag-chart-overlay__loading-background{background:#fff;pointer-events:none}.ag-chart-overlay.ag-chart-dark-overlay .ag-chart-overlay__loading-background{background:#192232}.ag-chart-tooltip{transition:transform .1s ease;width:max-content;z-index:99999;font:12px Verdana,sans-serif;color:#464646;box-shadow:0 4px 8px #00000014}.ag-chart-tooltip-wrap-always{overflow-wrap:break-word;word-break:break-word;hyphens:none}.ag-chart-tooltip-wrap-hyphenate{overflow-wrap:break-word;word-break:break-word;hyphens:auto}.ag-chart-tooltip-wrap-on-space{overflow-wrap:normal;word-break:normal}.ag-chart-tooltip-wrap-never{white-space:pre;text-overflow:ellipsis}.ag-chart-tooltip-no-interaction{pointer-events:none;user-select:none}.ag-chart-tooltip-no-animation{transition:none!important}.ag-chart-tooltip-hidden{visibility:hidden}.ag-chart-tooltip-title{overflow:hidden;position:relative;padding:8px 14px;border-top-left-radius:2px;border-top-right-radius:2px;color:#fff;background-color:#888;z-index:1;text-overflow:inherit}.ag-chart-tooltip-title:only-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.ag-chart-tooltip-content{overflow:hidden;padding:6px 14px;line-height:1.7em;background:#fff;border-bottom-left-radius:2px;border-bottom-right-radius:2px;border:1px solid rgba(0,0,0,.15);text-overflow:inherit}.ag-chart-tooltip-arrow:before{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid #d9d9d9;border-left-color:transparent;border-right-color:transparent;border-bottom-color:transparent;width:0;height:0;margin:0 auto}.ag-chart-tooltip-arrow:after{content:\"\";position:absolute;top:calc(100% - 1px);left:50%;transform:translate(-50%);border:5px solid white;border-left-color:transparent;border-right-color:transparent;border-bottom-color:transparent;width:0;height:0;margin:0 auto}\\n';\n\n// packages/ag-charts-community/src/util/keynavUtil.ts\nfunction addRemovableEventListener(destroyFns, elem, type, listener) {\n  elem.addEventListener(type, listener);\n  const remover = () => elem.removeEventListener(type, listener);\n  destroyFns.push(remover);\n  return remover;\n}\nfunction addEscapeEventListener(destroyFns, elem, onEscape) {\n  addRemovableEventListener(destroyFns, elem, \"keydown\", (event) => {\n    if (event.key === \"Escape\") {\n      onEscape(event);\n    }\n  });\n}\nfunction addMouseCloseListener(destroyFns, menu, hideCallback) {\n  const self = addRemovableEventListener(destroyFns, window, \"mousedown\", (event) => {\n    if ([0, 2].includes(event.button) && !containsPoint(menu, event)) {\n      hideCallback();\n      self();\n    }\n  });\n  return self;\n}\nfunction containsPoint(container, event) {\n  if (event.target instanceof Element) {\n    const { x, y, width: width2, height: height2 } = container.getBoundingClientRect();\n    const { clientX: ex, clientY: ey } = event;\n    return ex >= x && ey >= y && ex <= x + width2 && ey <= y + height2;\n  }\n  return false;\n}\nfunction hasNoModifiers(event) {\n  return !(event.shiftKey || event.altKey || event.ctrlKey || event.metaKey);\n}\nfunction matchesKey(event, key, ...morekeys) {\n  return hasNoModifiers(event) && (event.key === key || morekeys.some((altkey) => event.key === altkey));\n}\nfunction linkTwoButtons(destroyFns, src, dst, key) {\n  if (!dst)\n    return;\n  addRemovableEventListener(destroyFns, src, \"keydown\", (event) => {\n    if (matchesKey(event, key)) {\n      dst.focus();\n    }\n  });\n}\nfunction linkThreeButtons(destroyFns, curr, next, nextKey, prev, prevKey) {\n  linkTwoButtons(destroyFns, curr, prev, prevKey);\n  linkTwoButtons(destroyFns, curr, next, nextKey);\n  addRemovableEventListener(destroyFns, curr, \"keydown\", (event) => {\n    if (matchesKey(event, nextKey, prevKey)) {\n      event.preventDefault();\n    }\n  });\n}\nvar PREV_NEXT_KEYS = {\n  horizontal: { nextKey: \"ArrowRight\", prevKey: \"ArrowLeft\" },\n  vertical: { nextKey: \"ArrowDown\", prevKey: \"ArrowUp\" }\n};\nfunction initToolbarKeyNav(opts) {\n  opts.toolbar.role = \"toolbar\";\n  opts.toolbar.ariaOrientation = opts.orientation;\n  opts.toolbar.ariaHidden = (opts.buttons.length === 0).toString();\n  return initRovingTabIndex(opts);\n}\nfunction initRovingTabIndex(opts) {\n  const { orientation, buttons, wrapAround = false, onEscape, onFocus, onBlur } = opts;\n  const { nextKey, prevKey } = PREV_NEXT_KEYS[orientation];\n  const setTabIndices = (event) => {\n    if (event.target && \"tabIndex\" in event.target) {\n      buttons.forEach((b) => b.tabIndex = -1);\n      event.target.tabIndex = 0;\n    }\n  };\n  const [c, m] = wrapAround ? [buttons.length, buttons.length] : [0, Infinity];\n  const destroyFns = [];\n  for (let i = 0; i < buttons.length; i++) {\n    const prev = buttons[(c + i - 1) % m];\n    const curr = buttons[i];\n    const next = buttons[(c + i + 1) % m];\n    addRemovableEventListener(destroyFns, curr, \"focus\", setTabIndices);\n    if (onFocus)\n      addRemovableEventListener(destroyFns, curr, \"focus\", onFocus);\n    if (onBlur)\n      addRemovableEventListener(destroyFns, curr, \"blur\", onBlur);\n    if (onEscape)\n      addEscapeEventListener(destroyFns, curr, onEscape);\n    linkThreeButtons(destroyFns, curr, prev, prevKey, next, nextKey);\n    curr.tabIndex = i === 0 ? 0 : -1;\n  }\n  return destroyFns;\n}\nvar MenuCloserImp = class {\n  constructor(menu, lastFocus, closeCallback) {\n    this.lastFocus = lastFocus;\n    this.closeCallback = closeCallback;\n    this.destroyFns = [];\n    this.destroyFns.push(addMouseCloseListener(this.destroyFns, menu, () => this.close()));\n  }\n  close() {\n    this.destroyFns.forEach((d) => d());\n    this.destroyFns.length = 0;\n    this.closeCallback();\n    this.finishClosing();\n  }\n  finishClosing() {\n    this.destroyFns.forEach((d) => d());\n    this.destroyFns.length = 0;\n    setAttribute(this.lastFocus, \"aria-expanded\", false);\n    this.lastFocus?.focus();\n    this.lastFocus = void 0;\n  }\n};\nfunction initMenuKeyNav(opts) {\n  const { sourceEvent, orientation, menu, buttons, closeCallback, autoCloseOnBlur = false } = opts;\n  const { nextKey, prevKey } = PREV_NEXT_KEYS[orientation];\n  const lastFocus = getLastFocus(sourceEvent);\n  setAttribute(lastFocus, \"aria-expanded\", true);\n  const menuCloser = new MenuCloserImp(menu, lastFocus, closeCallback);\n  const onEscape = () => menuCloser.close();\n  const { destroyFns } = menuCloser;\n  menu.role = \"menu\";\n  menu.ariaOrientation = orientation;\n  destroyFns.push(...initRovingTabIndex({ orientation, buttons, onEscape, wrapAround: true }));\n  menu.tabIndex = -1;\n  addEscapeEventListener(destroyFns, menu, onEscape);\n  addRemovableEventListener(destroyFns, menu, \"keydown\", (ev) => {\n    if (ev.target === menu && (ev.key === nextKey || ev.key === prevKey)) {\n      ev.preventDefault();\n      buttons[0]?.focus();\n    }\n  });\n  if (autoCloseOnBlur) {\n    const handler = (ev) => {\n      const buttonArray = buttons;\n      const isLeavingMenu = !buttonArray.includes(ev.relatedTarget);\n      if (isLeavingMenu) {\n        onEscape();\n      }\n    };\n    for (const button of buttons) {\n      addRemovableEventListener(destroyFns, button, \"blur\", handler);\n    }\n  }\n  buttons[0]?.focus();\n  return menuCloser;\n}\nfunction makeAccessibleClickListener(element2, onclick) {\n  return (event) => {\n    if (element2.ariaDisabled === \"true\") {\n      return event.preventDefault();\n    }\n    onclick(event);\n  };\n}\nfunction isButtonClickEvent(event) {\n  if (\"button\" in event) {\n    return event.button === 0;\n  }\n  return hasNoModifiers(event) && (event.code === \"Space\" || event.key === \"Enter\");\n}\nfunction getLastFocus(sourceEvent) {\n  if (sourceEvent?.target instanceof HTMLElement && \"tabindex\" in sourceEvent.target.attributes) {\n    return sourceEvent.target;\n  }\n  return void 0;\n}\nfunction stopPageScrolling(element2) {\n  const handler = (event) => {\n    if (event.defaultPrevented)\n      return;\n    const shouldPrevent = getAttribute(event.target, \"data-preventdefault\", true);\n    if (shouldPrevent && matchesKey(event, \"ArrowRight\", \"ArrowLeft\", \"ArrowDown\", \"ArrowUp\")) {\n      event.preventDefault();\n    }\n  };\n  element2.addEventListener(\"keydown\", handler);\n  return () => element2.removeEventListener(\"keydown\", handler);\n}\n\n// packages/ag-charts-community/src/util/sizeMonitor.ts\nvar SizeMonitor = class {\n  constructor() {\n    this.elements = /* @__PURE__ */ new Map();\n    this.documentReady = false;\n    this.queuedObserveRequests = [];\n    this.onLoad = () => {\n      this.documentReady = true;\n      this.queuedObserveRequests.forEach(([el, cb]) => this.observe(el, cb));\n      this.queuedObserveRequests = [];\n    };\n    if (typeof ResizeObserver === \"undefined\")\n      return;\n    this.resizeObserver = new ResizeObserver((entries) => {\n      for (const {\n        target,\n        contentRect: { width: width2, height: height2 }\n      } of entries) {\n        const entry = this.elements.get(target);\n        this.checkSize(entry, target, width2, height2);\n      }\n    });\n    this.documentReady = getDocument(\"readyState\") === \"complete\";\n    if (!this.documentReady) {\n      getWindow()?.addEventListener(\"load\", this.onLoad);\n    }\n  }\n  destroy() {\n    getWindow()?.removeEventListener(\"load\", this.onLoad);\n    this.resizeObserver?.disconnect();\n    this.resizeObserver = null;\n  }\n  checkSize(entry, element2, width2, height2) {\n    if (!entry)\n      return;\n    if (width2 !== entry.size?.width || height2 !== entry.size?.height) {\n      entry.size = { width: width2, height: height2 };\n      entry.cb(entry.size, element2);\n    }\n  }\n  // Only a single callback is supported.\n  observe(element2, cb) {\n    if (!this.documentReady) {\n      this.queuedObserveRequests.push([element2, cb]);\n      return;\n    }\n    if (this.elements.has(element2)) {\n      this.removeFromQueue(element2);\n    } else {\n      this.resizeObserver?.observe(element2);\n    }\n    const entry = { cb };\n    this.elements.set(element2, entry);\n  }\n  unobserve(element2) {\n    this.resizeObserver?.unobserve(element2);\n    this.elements.delete(element2);\n    this.removeFromQueue(element2);\n    if (!this.elements.size) {\n      this.destroy();\n    }\n  }\n  removeFromQueue(element2) {\n    this.queuedObserveRequests = this.queuedObserveRequests.filter(([el]) => el !== element2);\n  }\n};\n\n// packages/ag-charts-community/src/dom/domLayout.html\nvar domLayout_default = '<div role=\"presentation\" class=\"ag-charts-wrapper ag-charts-styles\" data-ag-charts><div role=\"presentation\" class=\"ag-charts-canvas-center\"><div role=\"presentation\" class=\"ag-charts-canvas-container\"><div role=\"presentation\" class=\"ag-charts-canvas\" aria-hidden=\"true\"></div><div role=\"figure\" class=\"ag-charts-canvas-proxy\"><div role=\"img\" class=\"ag-charts-series-area\" tabindex=\"-1\"></div></div><div role=\"presentation\" class=\"ag-charts-canvas-overlay\"></div></div></div></div>';\n\n// packages/ag-charts-community/src/dom/domManager.ts\nvar DOM_ELEMENT_CLASSES = [\n  \"styles\",\n  \"canvas\",\n  \"canvas-center\",\n  \"canvas-overlay\",\n  \"canvas-proxy\",\n  \"series-area\"\n];\nvar domElementConfig = /* @__PURE__ */ new Map([\n  [\"styles\", { childElementType: \"style\" }],\n  [\"canvas\", { childElementType: \"canvas\" }],\n  [\"canvas-proxy\", { childElementType: \"div\" }],\n  [\"canvas-overlay\", { childElementType: \"div\" }],\n  [\"canvas-center\", { childElementType: \"div\" }],\n  [\"series-area\", { childElementType: \"div\" }]\n]);\nfunction setupObserver(element2, cb) {\n  if (typeof IntersectionObserver === \"undefined\")\n    return;\n  const observer = new IntersectionObserver(\n    (entries) => {\n      for (const entry of entries) {\n        if (entry.target === element2) {\n          cb(entry.intersectionRatio);\n        }\n      }\n    },\n    { root: element2 }\n  );\n  observer.observe(element2);\n  return observer;\n}\nvar NULL_DOMRECT = {\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n  top: 0,\n  bottom: 0,\n  left: 0,\n  right: 0,\n  toJSON() {\n    return NULL_DOMRECT;\n  }\n};\nvar DOMManager = class extends BaseManager {\n  constructor(container, styleContainer) {\n    super();\n    this.styles = /* @__PURE__ */ new Map();\n    this.container = void 0;\n    this.containerSize = void 0;\n    this.sizeMonitor = new SizeMonitor();\n    const templateEl = createElement(\"div\");\n    templateEl.innerHTML = domLayout_default;\n    this.element = templateEl.children.item(0);\n    this.styleRootElement = styleContainer;\n    this.rootElements = DOM_ELEMENT_CLASSES.reduce(\n      (r, c) => {\n        const cssClass = `ag-charts-${c}`;\n        const el = this.element.classList.contains(cssClass) ? this.element : this.element.querySelector(`.${cssClass}`);\n        if (!el)\n          throw new Error(`AG Charts - unable to find DOM element ${cssClass}`);\n        r[c] = { element: el, children: /* @__PURE__ */ new Map(), listeners: [] };\n        return r;\n      },\n      {}\n    );\n    let hidden = false;\n    this.observer = setupObserver(this.element, (intersectionRatio) => {\n      if (intersectionRatio === 0 && !hidden) {\n        this.listeners.dispatch(\"hidden\", { type: \"hidden\" });\n      }\n      hidden = intersectionRatio === 0;\n    });\n    this.setSizeOptions();\n    this.addStyles(\"ag-charts-community\", styles_default);\n    if (container) {\n      this.setContainer(container);\n    }\n    this.destroyFns.push(stopPageScrolling(this.element));\n  }\n  destroy() {\n    super.destroy();\n    this.observer?.unobserve(this.element);\n    if (this.container) {\n      this.sizeMonitor.unobserve(this.container);\n    }\n    Object.values(this.rootElements).forEach((el) => {\n      el.children.forEach((c) => c.remove());\n      el.element.remove();\n    });\n    this.element.remove();\n  }\n  setSizeOptions(minWidth = 300, minHeight = 300, optionsWidth, optionsHeight) {\n    const { style } = this.element;\n    style.width = `${optionsWidth ?? minWidth}px`;\n    style.height = `${optionsHeight ?? minHeight}px`;\n  }\n  updateContainerSize() {\n    const { style: centerStyle } = this.rootElements[\"canvas-center\"].element;\n    centerStyle.width = `${this.containerSize?.width ?? 0}px`;\n    centerStyle.height = `${this.containerSize?.height ?? 0}px`;\n  }\n  setContainer(newContainer) {\n    if (newContainer === this.container)\n      return;\n    if (this.container) {\n      this.container.removeChild(this.element);\n      this.sizeMonitor.unobserve(this.container);\n    }\n    const isShadowDom = this.getShadowDocumentRoot(newContainer) != null;\n    if (!isShadowDom) {\n      for (const id of this.rootElements[\"styles\"].children.keys()) {\n        this.removeChild(\"styles\", id);\n      }\n    }\n    this.container = newContainer;\n    for (const [id, styles] of this.styles) {\n      this.addStyles(id, styles);\n    }\n    newContainer.appendChild(this.element);\n    this.sizeMonitor.observe(newContainer, (size) => {\n      this.containerSize = size;\n      this.updateContainerSize();\n      this.listeners.dispatch(\"resize\", { type: \"resize\" });\n    });\n    this.listeners.dispatch(\"container-changed\", { type: \"container-changed\" });\n  }\n  setThemeClass(themeClassName) {\n    const themeClassNamePrefix = \"ag-charts-theme-\";\n    this.element.classList.forEach((className) => {\n      if (className.startsWith(themeClassNamePrefix) && className !== themeClassName) {\n        this.element.classList.remove(className);\n      }\n    });\n    this.element.classList.add(themeClassName);\n  }\n  setTabIndex(tabIndex) {\n    this.rootElements[\"series-area\"].element.tabIndex = tabIndex;\n  }\n  updateCanvasLabel(ariaLabel) {\n    setAttribute(this.rootElements[\"canvas-proxy\"].element, \"aria-label\", ariaLabel);\n  }\n  getEventElement(defaultElem, eventType) {\n    const events = [\"focus\", \"blur\", \"keydown\", \"keyup\"];\n    return events.includes(eventType) ? this.rootElements[\"series-area\"].element : defaultElem;\n  }\n  addEventListener(type, listener, options) {\n    this.getEventElement(this.element, type).addEventListener(type, listener, options);\n  }\n  removeEventListener(type, listener, options) {\n    this.getEventElement(this.element, type).removeEventListener(type, listener, options);\n  }\n  /** Get the main chart area client bound rect. */\n  getBoundingClientRect() {\n    return this.rootElements[\"canvas\"].element.getBoundingClientRect();\n  }\n  /**\n   * Get the client bounding rect for overlay elements that might float outside the bounds of the\n   * main chart area.\n   */\n  getOverlayClientRect() {\n    const window2 = getWindow();\n    const windowBBox = new BBox(0, 0, window2.innerWidth, window2.innerHeight);\n    const container = this.getRawOverlayClientRect();\n    const containerBBox = BBox.fromDOMRect(container ?? this.getBoundingClientRect());\n    return windowBBox.intersection(containerBBox)?.toDOMRect() ?? NULL_DOMRECT;\n  }\n  getRawOverlayClientRect() {\n    let element2 = this.element;\n    while (element2 != null) {\n      const styleMap = element2.computedStyleMap?.();\n      const overflowX = styleMap?.get(\"overflow-x\")?.toString();\n      const overflowY = styleMap?.get(\"overflow-y\")?.toString();\n      if (overflowX != null && overflowX !== \"visible\" || overflowY && overflowY !== \"visible\") {\n        return element2.getBoundingClientRect();\n      }\n      element2 = element2.parentElement;\n    }\n    const docRoot = this.getShadowDocumentRoot();\n    if (docRoot) {\n      return docRoot.getBoundingClientRect();\n    }\n  }\n  getShadowDocumentRoot(current = this.container) {\n    const docRoot = current?.ownerDocument?.body ?? getDocument(\"body\");\n    while (current != null) {\n      if (current === docRoot) {\n        return void 0;\n      }\n      if (current.parentNode instanceof DocumentFragment) {\n        return current;\n      }\n      current = current.parentNode;\n    }\n    return this.container;\n  }\n  getChildBoundingClientRect(type) {\n    const { children } = this.rootElements[type];\n    const childRects = [];\n    for (const child of children.values()) {\n      childRects.push(BBox.fromDOMRect(child.getBoundingClientRect()));\n    }\n    return BBox.merge(childRects);\n  }\n  calculateCanvasPosition(el) {\n    let x = 0;\n    let y = 0;\n    const { x: cx = 0, y: cy = 0 } = this.getChildBoundingClientRect(\"canvas\") ?? {};\n    const elRect = el.getBoundingClientRect();\n    x = elRect.x - cx;\n    y = elRect.y - cy;\n    return { x, y };\n  }\n  isManagedChildDOMElement(el, domElementClass, id) {\n    const { children } = this.rootElements[domElementClass];\n    const search = children?.get(id);\n    return search != null && el.contains(search);\n  }\n  isEventOverElement(event) {\n    const element2 = event.target;\n    return element2 != null && this.element.contains(element2);\n  }\n  addStyles(id, styles) {\n    const dataAttribute = \"data-ag-charts\";\n    this.styles.set(id, styles);\n    if (this.container == null)\n      return;\n    const checkId = (el) => {\n      return el.getAttribute(dataAttribute) === id;\n    };\n    const addStyleElement = (el) => {\n      for (const child of el.children) {\n        if (checkId(child))\n          return;\n      }\n      const styleEl = createElement(\"style\");\n      el.appendChild(styleEl);\n      return styleEl;\n    };\n    let styleElement;\n    if (this.styleRootElement) {\n      styleElement = addStyleElement(this.styleRootElement);\n    } else {\n      const documentRoot = this.getShadowDocumentRoot(this.container);\n      if (documentRoot != null) {\n        styleElement = this.addChild(\"styles\", id);\n      } else {\n        styleElement = addStyleElement(getDocument(\"head\"));\n      }\n    }\n    if (styleElement == null || checkId(styleElement))\n      return;\n    styleElement.setAttribute(dataAttribute, id);\n    styleElement.innerHTML = styles;\n  }\n  removeStyles(id) {\n    this.removeChild(\"styles\", id);\n  }\n  updateCursor(style) {\n    this.element.style.cursor = style;\n  }\n  getCursor() {\n    return this.element.style.cursor;\n  }\n  addChild(domElementClass, id, child, insert) {\n    const { element: element2, children, listeners } = this.rootElements[domElementClass];\n    if (!children) {\n      throw new Error(\"AG Charts - unable to create DOM elements after destroy()\");\n    }\n    if (children.has(id)) {\n      return children.get(id);\n    }\n    const { childElementType = \"div\" } = domElementConfig.get(domElementClass) ?? {};\n    if (child && child.tagName.toLowerCase() !== childElementType.toLowerCase()) {\n      throw new Error(\"AG Charts - mismatching DOM element type\");\n    }\n    const newChild = child ?? createElement(childElementType);\n    for (const [type, fn, opts] of listeners) {\n      newChild.addEventListener(type, fn, opts);\n    }\n    children.set(id, newChild);\n    if (insert) {\n      const queryResult = element2.querySelector(insert.query);\n      if (queryResult == null) {\n        throw new Error(`AG Charts - addChild query failed ${insert.query}`);\n      }\n      queryResult.insertAdjacentElement(insert.where, newChild);\n    } else {\n      element2?.appendChild(newChild);\n    }\n    return newChild;\n  }\n  removeChild(domElementClass, id) {\n    const { children } = this.rootElements[domElementClass];\n    if (!children)\n      return;\n    children.get(id)?.remove();\n    children.delete(id);\n  }\n  incrementDataCounter(name) {\n    const { dataset } = this.element;\n    dataset[name] ?? (dataset[name] = \"0\");\n    dataset[name] = String(Number(dataset[name]) + 1);\n  }\n  setDataBoolean(name, value) {\n    this.element.dataset[name] = String(value);\n  }\n  getIconClassNames(icon) {\n    return `ag-charts-icon ag-charts-icon-${icon}`;\n  }\n};\n\n// packages/ag-charts-community/src/scene/polyRoots.ts\nfunction linearRoot(a, b) {\n  const t = -b / a;\n  return a !== 0 && t >= 0 && t <= 1 ? [t] : [];\n}\nfunction quadraticRoots(a, b, c) {\n  if (a === 0) {\n    return linearRoot(b, c);\n  }\n  const D = b * b - 4 * a * c;\n  const roots = [];\n  if (D === 0) {\n    const t = -b / (2 * a);\n    if (t >= 0 && t <= 1) {\n      roots.push(t);\n    }\n  } else if (D > 0) {\n    const rD = Math.sqrt(D);\n    const t1 = (-b - rD) / (2 * a);\n    const t2 = (-b + rD) / (2 * a);\n    if (t1 >= 0 && t1 <= 1) {\n      roots.push(t1);\n    }\n    if (t2 >= 0 && t2 <= 1) {\n      roots.push(t2);\n    }\n  }\n  return roots;\n}\nfunction cubicRoots(a, b, c, d) {\n  if (a === 0) {\n    return quadraticRoots(b, c, d);\n  }\n  const A = b / a;\n  const B = c / a;\n  const C = d / a;\n  const Q = (3 * B - A * A) / 9;\n  const R = (9 * A * B - 27 * C - 2 * A * A * A) / 54;\n  const D = Q * Q * Q + R * R;\n  const third = 1 / 3;\n  const roots = [];\n  if (D >= 0) {\n    const rD = Math.sqrt(D);\n    const S = Math.sign(R + rD) * Math.pow(Math.abs(R + rD), third);\n    const T = Math.sign(R - rD) * Math.pow(Math.abs(R - rD), third);\n    const Im = Math.abs(Math.sqrt(3) * (S - T) / 2);\n    const t = -third * A + (S + T);\n    if (t >= 0 && t <= 1) {\n      roots.push(t);\n    }\n    if (Im === 0) {\n      const t2 = -third * A - (S + T) / 2;\n      if (t2 >= 0 && t2 <= 1) {\n        roots.push(t2);\n      }\n    }\n  } else {\n    const theta = Math.acos(R / Math.sqrt(-Q * Q * Q));\n    const thirdA = third * A;\n    const twoSqrtQ = 2 * Math.sqrt(-Q);\n    const t1 = twoSqrtQ * Math.cos(third * theta) - thirdA;\n    const t2 = twoSqrtQ * Math.cos(third * (theta + 2 * Math.PI)) - thirdA;\n    const t3 = twoSqrtQ * Math.cos(third * (theta + 4 * Math.PI)) - thirdA;\n    if (t1 >= 0 && t1 <= 1) {\n      roots.push(t1);\n    }\n    if (t2 >= 0 && t2 <= 1) {\n      roots.push(t2);\n    }\n    if (t3 >= 0 && t3 <= 1) {\n      roots.push(t3);\n    }\n  }\n  return roots;\n}\n\n// packages/ag-charts-community/src/scene/intersection.ts\nfunction segmentIntersection(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {\n  const d = (ax2 - ax1) * (by2 - by1) - (ay2 - ay1) * (bx2 - bx1);\n  if (d === 0) {\n    return 0;\n  }\n  const ua = ((bx2 - bx1) * (ay1 - by1) - (ax1 - bx1) * (by2 - by1)) / d;\n  const ub = ((ax2 - ax1) * (ay1 - by1) - (ay2 - ay1) * (ax1 - bx1)) / d;\n  if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n    return 1;\n  }\n  return 0;\n}\nfunction cubicSegmentIntersections(px1, py1, px2, py2, px3, py3, px4, py4, x1, y1, x2, y2) {\n  let intersections = 0;\n  const A = y1 - y2;\n  const B = x2 - x1;\n  const C = x1 * (y2 - y1) - y1 * (x2 - x1);\n  const bx = bezierCoefficients(px1, px2, px3, px4);\n  const by = bezierCoefficients(py1, py2, py3, py4);\n  const a = A * bx[0] + B * by[0];\n  const b = A * bx[1] + B * by[1];\n  const c = A * bx[2] + B * by[2];\n  const d = A * bx[3] + B * by[3] + C;\n  const roots = cubicRoots(a, b, c, d);\n  for (const t of roots) {\n    const tt = t * t;\n    const ttt = t * tt;\n    const x = bx[0] * ttt + bx[1] * tt + bx[2] * t + bx[3];\n    const y = by[0] * ttt + by[1] * tt + by[2] * t + by[3];\n    let s;\n    if (x1 === x2) {\n      s = (y - y1) / (y2 - y1);\n    } else {\n      s = (x - x1) / (x2 - x1);\n    }\n    if (s >= 0 && s <= 1) {\n      intersections++;\n    }\n  }\n  return intersections;\n}\nfunction bezierCoefficients(P1, P2, P3, P4) {\n  return [\n    // B\u00E9zier expressed as matrix operations:\n    -P1 + 3 * P2 - 3 * P3 + P4,\n    //                 |-1  3 -3  1| |P1|\n    3 * P1 - 6 * P2 + 3 * P3,\n    //   [t^3 t^2 t 1] | 3 -6  3  0| |P2|\n    -3 * P1 + 3 * P2,\n    //                 |-3  3  0  0| |P3|\n    P1\n    //                 | 1  0  0  0| |P4|\n  ];\n}\nfunction arcIntersections(cx, cy, r, startAngle, endAngle, counterClockwise, x1, y1, x2, y2) {\n  if (isNaN(cx) || isNaN(cy)) {\n    return 0;\n  }\n  if (counterClockwise) {\n    [endAngle, startAngle] = [startAngle, endAngle];\n  }\n  const k = (y2 - y1) / (x2 - x1);\n  const y0 = y1 - k * x1;\n  const a = Math.pow(k, 2) + 1;\n  const b = 2 * (k * (y0 - cy) - cx);\n  const c = Math.pow(cx, 2) + Math.pow(y0 - cy, 2) - Math.pow(r, 2);\n  const d = Math.pow(b, 2) - 4 * a * c;\n  if (d < 0) {\n    return 0;\n  }\n  const i1x = (-b + Math.sqrt(d)) / 2 / a;\n  const i2x = (-b - Math.sqrt(d)) / 2 / a;\n  let intersections = 0;\n  [i1x, i2x].forEach((x) => {\n    const isXInsideLine = x >= Math.min(x1, x2) && x <= Math.max(x1, x2);\n    if (!isXInsideLine) {\n      return;\n    }\n    const y = k * x + y0;\n    const adjacent = x - cx;\n    const opposite = y - cy;\n    const angle2 = Math.atan2(opposite, adjacent);\n    if (isBetweenAngles(angle2, startAngle, endAngle)) {\n      intersections++;\n    }\n  });\n  return intersections;\n}\n\n// packages/ag-charts-community/src/scene/util/bezier.ts\nfunction evaluateBezier(p0, p1, p2, p3, t) {\n  return (1 - t) ** 3 * p0 + 3 * (1 - t) ** 2 * t * p1 + 3 * (1 - t) * t ** 2 * p2 + t ** 3 * p3;\n}\nfunction solveBezier(p0, p1, p2, p3, value) {\n  if (value <= Math.min(p0, p3)) {\n    return p0 < p3 ? 0 : 1;\n  } else if (value >= Math.max(p0, p3)) {\n    return p0 < p3 ? 1 : 0;\n  }\n  let t0 = 0;\n  let t1 = 1;\n  let t = NaN;\n  for (let i = 0; i < 12; i += 1) {\n    t = (t0 + t1) / 2;\n    const curveValue = evaluateBezier(p0, p1, p2, p3, t);\n    if (curveValue < value) {\n      t0 = t;\n    } else {\n      t1 = t;\n    }\n  }\n  return t;\n}\nfunction splitBezier(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y, t) {\n  const x01 = (1 - t) * p0x + t * p1x;\n  const y01 = (1 - t) * p0y + t * p1y;\n  const x12 = (1 - t) * p1x + t * p2x;\n  const y12 = (1 - t) * p1y + t * p2y;\n  const x23 = (1 - t) * p2x + t * p3x;\n  const y23 = (1 - t) * p2y + t * p3y;\n  const x012 = (1 - t) * x01 + t * x12;\n  const y012 = (1 - t) * y01 + t * y12;\n  const x123 = (1 - t) * x12 + t * x23;\n  const y123 = (1 - t) * y12 + t * y23;\n  const x0123 = (1 - t) * x012 + t * x123;\n  const y0123 = (1 - t) * y012 + t * y123;\n  return [\n    [\n      { x: p0x, y: p0y },\n      { x: x01, y: y01 },\n      { x: x012, y: y012 },\n      { x: x0123, y: y0123 }\n    ],\n    [\n      { x: x0123, y: y0123 },\n      { x: x123, y: y123 },\n      { x: x23, y: y23 },\n      { x: p3x, y: p3y }\n    ]\n  ];\n}\nfunction calculateDerivativeExtrema(p0, p1, p2, p3) {\n  const a = -p0 + 3 * p1 - 3 * p2 + p3;\n  const b = 3 * p0 - 6 * p1 + 3 * p2;\n  const c = -3 * p0 + 3 * p1;\n  if (a === 0) {\n    if (b !== 0) {\n      const t = -c / b;\n      if (t > 0 && t < 1) {\n        return [t];\n      }\n    }\n    return [];\n  }\n  const discriminant = b * b - 4 * a * c;\n  if (discriminant >= 0) {\n    const sqrtDiscriminant = Math.sqrt(discriminant);\n    const t1 = (-b + sqrtDiscriminant) / (2 * a);\n    const t2 = (-b - sqrtDiscriminant) / (2 * a);\n    return [t1, t2].filter((t) => t > 0 && t < 1);\n  }\n  return [];\n}\nfunction calculateDerivativeExtremaXY(sx, sy, cp1x, cp1y, cp2x, cp2y, x, y) {\n  const tx = calculateDerivativeExtrema(sx, cp1x, cp2x, x);\n  const ty = calculateDerivativeExtrema(sy, cp1y, cp2y, y);\n  return [...tx, ...ty];\n}\n\n// packages/ag-charts-community/src/scene/extendedPath2D.ts\nvar ExtendedPath2D = class {\n  constructor() {\n    // The methods of this class will likely be called many times per animation frame,\n    // and any allocation can trigger a GC cycle during animation, so we attempt\n    // to minimize the number of allocations.\n    this.path2d = new Path2D();\n    this.previousCommands = [];\n    this.previousParams = [];\n    this.previousClosedPath = false;\n    this.commands = [];\n    this.params = [];\n    this.openedPath = false;\n    this.closedPath = false;\n  }\n  isDirty() {\n    return this.closedPath !== this.previousClosedPath || this.previousCommands.length !== this.commands.length || this.previousParams.length !== this.params.length || this.previousCommands.toString() !== this.commands.toString() || this.previousParams.toString() !== this.params.toString();\n  }\n  getPath2D() {\n    return this.path2d;\n  }\n  moveTo(x, y) {\n    this.openedPath = true;\n    this.path2d.moveTo(x, y);\n    this.commands.push(0 /* Move */);\n    this.params.push(x, y);\n  }\n  lineTo(x, y) {\n    if (this.openedPath) {\n      this.path2d.lineTo(x, y);\n      this.commands.push(1 /* Line */);\n      this.params.push(x, y);\n    } else {\n      this.moveTo(x, y);\n    }\n  }\n  rect(x, y, width2, height2) {\n    this.moveTo(x, y);\n    this.lineTo(x + width2, y);\n    this.lineTo(x + width2, y + height2);\n    this.lineTo(x, y + height2);\n    this.closePath();\n  }\n  roundRect(x, y, width2, height2, radii) {\n    radii = Math.min(radii, width2 / 2, height2 / 2);\n    this.moveTo(x, y + radii);\n    this.arc(x + radii, y + radii, radii, Math.PI, 1.5 * Math.PI);\n    this.lineTo(x + radii, y);\n    this.lineTo(x + width2 - radii, y);\n    this.arc(x + width2 - radii, y + radii, radii, 1.5 * Math.PI, 2 * Math.PI);\n    this.lineTo(x + width2, y + radii);\n    this.lineTo(x + width2, y + height2 - radii);\n    this.arc(x + width2 - radii, y + height2 - radii, radii, 0, Math.PI / 2);\n    this.lineTo(x + width2 - radii, y + height2);\n    this.lineTo(x + radii, y + height2);\n    this.arc(x + +radii, y + height2 - radii, radii, Math.PI / 2, Math.PI);\n    this.lineTo(x, y + height2 - radii);\n    this.closePath();\n  }\n  arc(x, y, r, sAngle, eAngle, counterClockwise) {\n    this.openedPath = true;\n    this.path2d.arc(x, y, r, sAngle, eAngle, counterClockwise);\n    this.commands.push(2 /* Arc */);\n    this.params.push(x, y, r, sAngle, eAngle, counterClockwise ? 1 : 0);\n  }\n  cubicCurveTo(cx1, cy1, cx2, cy2, x, y) {\n    if (!this.openedPath) {\n      this.moveTo(cx1, cy1);\n    }\n    this.path2d.bezierCurveTo(cx1, cy1, cx2, cy2, x, y);\n    this.commands.push(3 /* Curve */);\n    this.params.push(cx1, cy1, cx2, cy2, x, y);\n  }\n  closePath() {\n    if (this.openedPath) {\n      this.path2d.closePath();\n      this.commands.push(4 /* ClosePath */);\n      this.openedPath = false;\n      this.closedPath = true;\n    }\n  }\n  clear(trackChanges) {\n    if (trackChanges) {\n      this.previousCommands = this.commands;\n      this.previousParams = this.params;\n      this.previousClosedPath = this.closedPath;\n    }\n    this.path2d = new Path2D();\n    this.openedPath = false;\n    this.closedPath = false;\n    this.commands = [];\n    this.params = [];\n  }\n  isPointInPath(x, y) {\n    const commands = this.commands;\n    const params = this.params;\n    const cn = commands.length;\n    const ox = -1e4;\n    const oy = -1e4;\n    let sx = NaN;\n    let sy = NaN;\n    let px = 0;\n    let py = 0;\n    let intersectionCount = 0;\n    for (let ci = 0, pi = 0; ci < cn; ci++) {\n      switch (commands[ci]) {\n        case 0 /* Move */:\n          intersectionCount += segmentIntersection(sx, sy, px, py, ox, oy, x, y);\n          px = params[pi++];\n          sx = px;\n          py = params[pi++];\n          sy = py;\n          break;\n        case 1 /* Line */:\n          intersectionCount += segmentIntersection(px, py, params[pi++], params[pi++], ox, oy, x, y);\n          px = params[pi - 2];\n          py = params[pi - 1];\n          break;\n        case 3 /* Curve */:\n          intersectionCount += cubicSegmentIntersections(\n            px,\n            py,\n            params[pi++],\n            params[pi++],\n            params[pi++],\n            params[pi++],\n            params[pi++],\n            params[pi++],\n            ox,\n            oy,\n            x,\n            y\n          );\n          px = params[pi - 2];\n          py = params[pi - 1];\n          break;\n        case 2 /* Arc */: {\n          const cx = params[pi++];\n          const cy = params[pi++];\n          const r = params[pi++];\n          const startAngle = params[pi++];\n          const endAngle = params[pi++];\n          const counterClockwise = Boolean(params[pi++]);\n          intersectionCount += arcIntersections(\n            cx,\n            cy,\n            r,\n            startAngle,\n            endAngle,\n            counterClockwise,\n            ox,\n            oy,\n            x,\n            y\n          );\n          if (!isNaN(sx)) {\n            const startX = cx + Math.cos(startAngle) * r;\n            const startY = cy + Math.sin(startAngle) * r;\n            intersectionCount += segmentIntersection(px, py, startX, startY, ox, oy, x, y);\n          }\n          px = cx + Math.cos(endAngle) * r;\n          py = cy + Math.sin(endAngle) * r;\n          break;\n        }\n        case 4 /* ClosePath */:\n          intersectionCount += segmentIntersection(sx, sy, px, py, ox, oy, x, y);\n          break;\n      }\n    }\n    return intersectionCount % 2 === 1;\n  }\n  distanceSquared(x, y) {\n    let best = Infinity;\n    const commands = this.commands;\n    const params = this.params;\n    const cn = commands.length;\n    let sx = NaN;\n    let sy = NaN;\n    let px = 0;\n    let py = 0;\n    for (let ci = 0, pi = 0; ci < cn; ci++) {\n      switch (commands[ci]) {\n        case 0 /* Move */:\n          px = sx = params[pi++];\n          py = sy = params[pi++];\n          break;\n        case 1 /* Line */: {\n          const nx = params[pi++];\n          const ny = params[pi++];\n          best = lineDistanceSquared(x, y, px, py, nx, ny, best);\n          break;\n        }\n        case 3 /* Curve */:\n          Logger.error(\"Command.Curve distanceSquare not implemented\");\n          break;\n        case 2 /* Arc */: {\n          const cx = params[pi++];\n          const cy = params[pi++];\n          const r = params[pi++];\n          const startAngle = params[pi++];\n          const endAngle = params[pi++];\n          const startX = cx + Math.cos(startAngle) * r;\n          const startY = cy + Math.sin(startAngle) * r;\n          const counterClockwise = Boolean(params[pi++]);\n          best = lineDistanceSquared(x, y, px, py, startX, startY, best);\n          best = arcDistanceSquared(x, y, cx, cy, r, startAngle, endAngle, counterClockwise, best);\n          px = cx + Math.cos(endAngle) * r;\n          py = cy + Math.sin(endAngle) * r;\n          break;\n        }\n        case 4 /* ClosePath */:\n          best = lineDistanceSquared(x, y, px, py, sx, sy, best);\n          break;\n      }\n    }\n    return best;\n  }\n  getPoints() {\n    const { commands, params } = this;\n    const coords = [];\n    let pi = 0;\n    for (const command of commands) {\n      switch (command) {\n        case 0 /* Move */:\n        case 1 /* Line */:\n          coords.push({ x: params[pi++], y: params[pi++] });\n          break;\n        case 3 /* Curve */:\n          pi += 4;\n          coords.push({ x: params[pi++], y: params[pi++] });\n          break;\n        case 2 /* Arc */:\n          coords.push({ x: params[pi++], y: params[pi++] });\n          pi += 4;\n          break;\n        case 4 /* ClosePath */:\n          break;\n      }\n    }\n    return coords;\n  }\n  // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d\n  toSVG(transform = (x, y) => ({ x, y })) {\n    const buffer = [];\n    const { commands, params } = this;\n    const addCommand = (command, ...points) => {\n      buffer.push(command);\n      for (let i = 0; i < points.length; i += 2) {\n        const { x, y } = transform(points[i], points[i + 1]);\n        buffer.push(x, y);\n      }\n    };\n    let pi = 0;\n    for (const command of commands) {\n      switch (command) {\n        case 0 /* Move */:\n          addCommand(\"M\", params[pi++], params[pi++]);\n          break;\n        case 1 /* Line */:\n          addCommand(\"L\", params[pi++], params[pi++]);\n          break;\n        case 3 /* Curve */:\n          addCommand(\"C\", params[pi++], params[pi++], params[pi++], params[pi++], params[pi++], params[pi++]);\n          break;\n        case 2 /* Arc */: {\n          const cx = params[pi++];\n          const cy = params[pi++];\n          const r = params[pi++];\n          const A0 = params[pi++];\n          const A1 = params[pi++];\n          const ccw = params[pi++];\n          let sweep = ccw ? A0 - A1 : A1 - A0;\n          if (sweep < 0) {\n            sweep += Math.ceil(-sweep / (2 * Math.PI)) * 2 * Math.PI;\n          }\n          if (ccw) {\n            sweep = -sweep;\n          }\n          const arcSections = Math.max(Math.ceil(Math.abs(sweep) / (Math.PI / 2)), 1);\n          const step = sweep / arcSections;\n          const h = 4 / 3 * Math.tan(step / 4);\n          const move = buffer.length === 0 ? \"M\" : \"L\";\n          addCommand(move, cx + Math.cos(A0) * r, cy + Math.sin(A0) * r);\n          for (let i = 0; i < arcSections; i += 1) {\n            const a0 = A0 + step * (i + 0);\n            const a1 = A0 + step * (i + 1);\n            const rSinStart = r * Math.sin(a0);\n            const rCosStart = r * Math.cos(a0);\n            const rSinEnd = r * Math.sin(a1);\n            const rCosEnd = r * Math.cos(a1);\n            addCommand(\n              \"C\",\n              cx + rCosStart - h * rSinStart,\n              cy + rSinStart + h * rCosStart,\n              cx + rCosEnd + h * rSinEnd,\n              cy + rSinEnd - h * rCosEnd,\n              cx + rCosEnd,\n              cy + rSinEnd\n            );\n          }\n          break;\n        }\n        case 4 /* ClosePath */:\n          buffer.push(\"Z\");\n          break;\n      }\n    }\n    return buffer.join(\" \");\n  }\n  computeBBox() {\n    const { commands, params } = this;\n    let [top, left, right, bot] = [Infinity, Infinity, -Infinity, -Infinity];\n    let [sx, sy] = [NaN, NaN];\n    let [mx, my] = [NaN, NaN];\n    const joinPoint = (x, y, updatestart) => {\n      top = Math.min(y, top);\n      left = Math.min(x, left);\n      right = Math.max(x, right);\n      bot = Math.max(y, bot);\n      if (updatestart) {\n        [sx, sy] = [x, y];\n      }\n    };\n    let pi = 0;\n    for (const command of commands) {\n      switch (command) {\n        case 0 /* Move */:\n          joinPoint(params[pi++], params[pi++], true);\n          [mx, my] = [sx, sy];\n          break;\n        case 1 /* Line */:\n          joinPoint(params[pi++], params[pi++], true);\n          break;\n        case 3 /* Curve */: {\n          const cp1x = params[pi++];\n          const cp1y = params[pi++];\n          const cp2x = params[pi++];\n          const cp2y = params[pi++];\n          const x = params[pi++];\n          const y = params[pi++];\n          joinPoint(x, y, true);\n          const Ts = calculateDerivativeExtremaXY(sx, sy, cp1x, cp1y, cp2x, cp2y, x, y);\n          Ts.forEach((t) => {\n            const px = evaluateBezier(sx, cp1x, cp2x, x, t);\n            const py = evaluateBezier(sy, cp1y, cp2y, y, t);\n            joinPoint(px, py);\n          });\n          break;\n        }\n        case 2 /* Arc */: {\n          const cx = params[pi++];\n          const cy = params[pi++];\n          const r = params[pi++];\n          let A0 = normalizeAngle360(params[pi++]);\n          let A1 = normalizeAngle360(params[pi++]);\n          const ccw = params[pi++];\n          if (ccw) {\n            [A0, A1] = [A1, A0];\n          }\n          const joinAngle = (angle2, updatestart) => {\n            const px = cx + r * Math.cos(angle2);\n            const py = cy + r * Math.sin(angle2);\n            joinPoint(px, py, updatestart);\n          };\n          joinAngle(A0);\n          joinAngle(A1, true);\n          const criticalAngles = [0, Math.PI / 2, Math.PI, 3 * Math.PI / 2];\n          for (const crit of criticalAngles) {\n            if (A0 < A1 && A0 <= crit && crit <= A1 || A0 > A1 && (A0 <= crit || crit <= A1)) {\n              joinAngle(crit);\n            }\n          }\n          break;\n        }\n        case 4 /* ClosePath */:\n          [sx, sy] = [mx, my];\n          break;\n      }\n    }\n    return new BBox(left, top, right - left, bot - top);\n  }\n};\n\n// packages/ag-charts-community/src/scene/shape/path.ts\nfunction ScenePathChangeDetection(opts) {\n  const { redraw = 3 /* MAJOR */, changeCb, convertor } = opts ?? {};\n  return SceneChangeDetection({ redraw, type: \"path\", convertor, changeCb });\n}\nvar Path = class extends Shape {\n  constructor() {\n    super(...arguments);\n    /**\n     * Declare a path to retain for later rendering and hit testing\n     * using custom Path2D class. Think of it as a TypeScript version\n     * of the native Path2D (with some differences) that works in all browsers.\n     */\n    this.path = new ExtendedPath2D();\n    this._clipX = NaN;\n    this._clipY = NaN;\n    this.clip = false;\n    /**\n     * The path only has to be updated when certain attributes change.\n     * For example, if transform attributes (such as `translationX`)\n     * are changed, we don't have to update the path. The `dirtyPath` flag\n     * is how we keep track if the path has to be updated or not.\n     */\n    this._dirtyPath = true;\n  }\n  set clipX(value) {\n    this._clipX = value;\n    this.dirtyPath = true;\n  }\n  set clipY(value) {\n    this._clipY = value;\n    this.dirtyPath = true;\n  }\n  set dirtyPath(value) {\n    if (this._dirtyPath !== value) {\n      this._dirtyPath = value;\n      if (value) {\n        this.markDirty(3 /* MAJOR */);\n      }\n    }\n  }\n  get dirtyPath() {\n    return this._dirtyPath;\n  }\n  checkPathDirty() {\n    if (this._dirtyPath) {\n      return;\n    }\n    this.dirtyPath = this.path.isDirty() || (this.fillShadow?.isDirty() ?? false) || (this._clipPath?.isDirty() ?? false);\n  }\n  isPointInPath(x, y) {\n    this.updatePathIfDirty();\n    return this.path.closedPath && this.path.isPointInPath(x, y);\n  }\n  distanceSquared(x, y) {\n    return this.distanceSquaredTransformedPoint(x, y);\n  }\n  svgPathData(transform) {\n    if (this.dirtyPath) {\n      this.updatePath();\n      this.dirtyPath = false;\n    }\n    return this.path.toSVG(transform);\n  }\n  distanceSquaredTransformedPoint(x, y) {\n    this.updatePathIfDirty();\n    if (this.path.closedPath && this.path.isPointInPath(x, y)) {\n      return 0;\n    }\n    return this.path.distanceSquared(x, y);\n  }\n  isDirtyPath() {\n    return false;\n  }\n  updatePath() {\n  }\n  updatePathIfDirty() {\n    if (this.dirtyPath || this.isDirtyPath()) {\n      this.updatePath();\n      this.dirtyPath = false;\n    }\n  }\n  preRender() {\n    this.updatePathIfDirty();\n    return super.preRender();\n  }\n  render(renderCtx) {\n    const { ctx, forceRender, stats } = renderCtx;\n    if (this.dirty === 0 /* NONE */ && !forceRender) {\n      if (stats)\n        stats.nodesSkipped += nodeCount(this).count;\n      return;\n    }\n    if (this.clip && !isNaN(this._clipX) && !isNaN(this._clipY)) {\n      ctx.save();\n      const margin = this.strokeWidth / 2;\n      this._clipPath ?? (this._clipPath = new ExtendedPath2D());\n      this._clipPath.clear();\n      this._clipPath.rect(-margin, -margin, this._clipX + margin, this._clipY + margin + margin);\n      ctx.clip(this._clipPath?.getPath2D());\n      if (this._clipX > 0 && this._clipY > 0) {\n        this.drawPath(ctx);\n      }\n      ctx.restore();\n    } else {\n      this._clipPath = void 0;\n      this.drawPath(ctx);\n    }\n    this.fillShadow?.markClean();\n    super.render(renderCtx);\n  }\n  drawPath(ctx) {\n    this.fillStroke(ctx, this.path.getPath2D());\n  }\n  toSVG() {\n    if (!this.visible)\n      return;\n    const element2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    element2.setAttribute(\"d\", this.svgPathData());\n    element2.setAttribute(\"fill\", typeof this.fill === \"string\" ? this.fill : \"none\");\n    element2.setAttribute(\"fill-opacity\", String(this.fillOpacity));\n    if (this.stroke != null) {\n      element2.setAttribute(\"stroke\", this.stroke);\n      element2.setAttribute(\"stroke-opacity\", String(this.strokeOpacity));\n      element2.setAttribute(\"stroke-width\", String(this.strokeWidth));\n    }\n    return {\n      elements: [element2]\n    };\n  }\n};\nPath.className = \"Path\";\n__decorateClass([\n  ScenePathChangeDetection()\n], Path.prototype, \"clip\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Path.prototype, \"clipX\", 1);\n__decorateClass([\n  ScenePathChangeDetection()\n], Path.prototype, \"clipY\", 1);\n\n// packages/ag-charts-community/src/dom/focusIndicator.ts\nvar FOCUS_INDICATOR_CSS_CLASS = \"ag-charts-focus-indicator\";\nvar FocusIndicator = class {\n  constructor(domManager) {\n    this.domManager = domManager;\n    this.div = getDocument().createElement(\"div\");\n    this.svg = getDocument().createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    this.path = getDocument().createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    this.svg.append(this.path);\n    this.element = domManager.addChild(\"series-area\", FOCUS_INDICATOR_CSS_CLASS);\n    this.element.classList.add(FOCUS_INDICATOR_CSS_CLASS);\n    this.element.ariaHidden = \"true\";\n    this.element.append(this.svg);\n  }\n  destroy() {\n    this.domManager.removeStyles(FOCUS_INDICATOR_CSS_CLASS);\n    this.domManager.removeChild(\"series-area\", FOCUS_INDICATOR_CSS_CLASS);\n  }\n  updateBounds(bounds) {\n    if (bounds === void 0) {\n    } else if (bounds instanceof Path) {\n      const transform = (x, y) => Transformable.toCanvasPoint(bounds, x, y);\n      this.path.setAttribute(\"d\", bounds.svgPathData(transform));\n      this.show(this.svg);\n    } else {\n      setElementBBox(this.div, bounds);\n      this.show(this.div);\n    }\n  }\n  show(child) {\n    this.element.innerHTML = \"\";\n    this.element.append(child);\n  }\n  getFocusableElement() {\n    const focusable = this.element.parentElement;\n    if (focusable == null || focusable.tabIndex !== 0 && focusable.tabIndex !== -1)\n      throw new Error(\"AG Charts - the focus indicator must be a child of a focusable element\");\n    return focusable;\n  }\n  // Use with caution! The focus must be visible when using the keyboard.\n  overrideFocusVisible(focusVisible) {\n    const opacity = { true: \"1\", false: \"0\", undefined: \"\" };\n    this.getFocusableElement().style.setProperty(\"opacity\", opacity[`${focusVisible}`]);\n  }\n  // Get the `:focus-visible` CSS state.\n  isFocusVisible() {\n    const focusable = this.getFocusableElement();\n    return focusable != null && getWindow().getComputedStyle(focusable).opacity === \"1\";\n  }\n};\n\n// packages/ag-charts-community/src/dom/boundedText.ts\nvar BoundedText = class {\n  set textContent(text) {\n    this.textElement.textContent = text;\n    const bboxCalculator = this.textElement;\n    const bbox = bboxCalculator.getBBox?.();\n    if (bbox) {\n      this.svgElement.setAttribute(\"viewBox\", `${bbox.x} ${bbox.y} ${bbox.width} ${bbox.height}`);\n    }\n  }\n  get textContent() {\n    return this.textElement.textContent;\n  }\n  constructor() {\n    this.textElement = createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n    this.textElement.role = \"presentation\";\n    this.svgElement = createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    this.svgElement.appendChild(this.textElement);\n    this.svgElement.style.width = \"100%\";\n    this.svgElement.style.opacity = \"0\";\n    this.svgElement.role = \"presentation\";\n    this.boundedContainer = createElement(\"div\");\n    this.boundedContainer.appendChild(this.svgElement);\n    this.boundedContainer.role = \"presentation\";\n  }\n  remove() {\n    this.boundedContainer.remove();\n  }\n  getContainer() {\n    return this.boundedContainer;\n  }\n  updateBounds(bounds) {\n    setElementBBox(this.boundedContainer, bounds);\n  }\n};\n\n// packages/ag-charts-community/src/dom/proxyInteractionService.ts\nfunction checkType(type, meta) {\n  return meta.params?.type === type;\n}\nfunction allocateResult(type) {\n  if (\"button\" === type) {\n    return createElement(\"button\");\n  } else if (\"slider\" === type) {\n    return createElement(\"input\");\n  } else if ([\"toolbar\", \"group\", \"list\"].includes(type)) {\n    return createElement(\"div\");\n  } else if (\"text\" === type) {\n    return new BoundedText();\n  } else if (\"listswitch\" === type) {\n    return { button: createElement(\"button\"), listitem: createElement(\"div\") };\n  } else {\n    throw Error(\"AG Charts - error allocating meta\");\n  }\n}\nfunction allocateMeta(params) {\n  const meta = { params, result: void 0 };\n  meta.result = allocateResult(meta.params.type);\n  return meta;\n}\nvar ProxyInteractionService = class {\n  constructor(localeManager, domManager) {\n    this.localeManager = localeManager;\n    this.domManager = domManager;\n    this.destroyFns = [];\n  }\n  destroy() {\n    this.destroyFns.forEach((fn) => fn());\n  }\n  addLocalisation(fn) {\n    fn();\n    this.destroyFns.push(this.localeManager.addListener(\"locale-changed\", fn));\n  }\n  createProxyContainer(args) {\n    const meta = allocateMeta(args);\n    const { params, result: div } = meta;\n    this.domManager.addChild(\"canvas-proxy\", params.id, div);\n    div.classList.add(...params.classList, \"ag-charts-proxy-container\");\n    div.role = params.type;\n    if (\"ariaOrientation\" in params) {\n      div.ariaOrientation = params.ariaOrientation;\n    }\n    if (typeof params.ariaHidden === \"boolean\") {\n      div.ariaHidden = params.ariaHidden.toString();\n    }\n    this.addLocalisation(() => {\n      div.ariaLabel = this.localeManager.t(params.ariaLabel.id, params.ariaLabel.params);\n    });\n    return div;\n  }\n  createProxyElement(args) {\n    const meta = allocateMeta(args);\n    if (checkType(\"button\", meta)) {\n      const { params, result: button } = meta;\n      this.initInteract(params, button);\n      button.style.pointerEvents = \"auto\";\n      if (typeof params.textContent === \"string\") {\n        button.textContent = params.textContent;\n      } else {\n        const { textContent } = params;\n        this.addLocalisation(() => {\n          button.textContent = this.localeManager.t(textContent.id, textContent.params);\n        });\n      }\n      this.setParent(params, button);\n    }\n    if (checkType(\"slider\", meta)) {\n      const { params, result: slider } = meta;\n      this.initInteract(params, slider);\n      slider.type = \"range\";\n      slider.role = \"presentation\";\n      slider.style.margin = \"0px\";\n      slider.ariaOrientation = params.ariaOrientation;\n      this.addLocalisation(() => {\n        slider.ariaLabel = this.localeManager.t(params.ariaLabel.id, params.ariaLabel.params);\n      });\n      this.setParent(params, slider);\n    }\n    if (checkType(\"text\", meta)) {\n      const { params, result: text } = meta;\n      this.initElement(params, text.getContainer());\n      this.setParent(params, text.getContainer());\n    }\n    if (checkType(\"listswitch\", meta)) {\n      const {\n        params,\n        result: { button, listitem }\n      } = meta;\n      this.initInteract(params, button);\n      button.style.width = \"100%\";\n      button.style.height = \"100%\";\n      button.textContent = params.textContent;\n      button.role = \"switch\";\n      button.ariaChecked = params.ariaChecked.toString();\n      button.style.pointerEvents = \"auto\";\n      button.setAttribute(\"aria-describedby\", params.ariaDescribedBy);\n      listitem.role = \"listitem\";\n      listitem.style.position = \"absolute\";\n      listitem.replaceChildren(button);\n      this.setParent(params, listitem);\n    }\n    return meta.result;\n  }\n  initElement(params, element2) {\n    const { id } = params;\n    element2.id = id;\n    element2.classList.toggle(\"ag-charts-proxy-elem\", true);\n  }\n  initInteract(params, element2) {\n    const { onclick, ondblclick, onmouseenter, onmouseleave, oncontextmenu, onchange, onfocus, onblur, tabIndex } = params;\n    this.initElement(params, element2);\n    if (tabIndex !== void 0) {\n      element2.tabIndex = tabIndex;\n    }\n    if (onclick) {\n      element2.addEventListener(\"click\", onclick);\n    }\n    if (ondblclick) {\n      element2.addEventListener(\"dblclick\", ondblclick);\n    }\n    if (onmouseenter) {\n      element2.addEventListener(\"mouseenter\", onmouseenter);\n    }\n    if (onmouseleave) {\n      element2.addEventListener(\"mouseleave\", onmouseleave);\n    }\n    if (oncontextmenu) {\n      element2.addEventListener(\"contextmenu\", oncontextmenu);\n    }\n    if (onfocus) {\n      element2.addEventListener(\"focus\", onfocus);\n    }\n    if (onblur) {\n      element2.addEventListener(\"blur\", onblur);\n    }\n    if (onchange) {\n      element2.addEventListener(\"change\", onchange);\n    }\n  }\n  setParent(params, element2) {\n    const { id, parent } = params;\n    if (typeof parent === \"string\") {\n      const insert = { where: parent, query: \".ag-charts-series-area\" };\n      this.domManager.addChild(\"canvas-proxy\", id, element2, insert);\n    } else {\n      parent.appendChild(element2);\n    }\n  }\n};\n\n// packages/ag-charts-community/src/locale/defaultMessageFormatter.ts\nvar messageRegExp = /\\$\\{(\\w+)}(?:\\[(\\w+)])?/gi;\nvar formatters = {\n  number: new Intl.NumberFormat(\"en-US\"),\n  percent: new Intl.NumberFormat(\"en-US\", { style: \"percent\", minimumFractionDigits: 2, maximumFractionDigits: 2 }),\n  date: new Intl.DateTimeFormat(\"en-US\", { dateStyle: \"full\" }),\n  time: new Intl.DateTimeFormat(\"en-US\", { timeStyle: \"full\" }),\n  datetime: new Intl.DateTimeFormat(\"en-US\", { dateStyle: \"full\", timeStyle: \"full\" })\n};\nvar defaultMessageFormatter = ({ defaultValue, variables }) => {\n  return defaultValue?.replaceAll(messageRegExp, (_, match, format) => {\n    const value = variables[match];\n    const formatter = format != null ? formatters[format] : null;\n    if (format != null && formatter == null) {\n      Logger.warnOnce(`Format style [${format}] is not supported`);\n    }\n    if (formatter != null) {\n      return formatter.format(value);\n    } else if (typeof value === \"number\") {\n      return formatters.number.format(value);\n    } else if (value instanceof Date) {\n      return formatters.datetime.format(value);\n    }\n    return String(value);\n  });\n};\n\n// packages/ag-charts-community/src/locale/localeManager.ts\nvar LocaleManager = class extends Listeners {\n  constructor() {\n    super(...arguments);\n    this.localeText = void 0;\n    this.getLocaleText = void 0;\n  }\n  setLocaleText(localeText) {\n    if (this.localeText !== localeText) {\n      this.localeText = localeText;\n      this.dispatch(\"locale-changed\");\n    }\n  }\n  setLocaleTextFormatter(getLocaleText) {\n    this.getLocaleText = getLocaleText;\n    if (this.getLocaleText !== getLocaleText) {\n      this.getLocaleText = getLocaleText;\n      this.dispatch(\"locale-changed\");\n    }\n  }\n  t(key, variables = {}) {\n    const { localeText = AG_CHARTS_LOCALE_EN_US, getLocaleText } = this;\n    const defaultValue = localeText[key];\n    return getLocaleText?.({ key, defaultValue, variables }) ?? defaultMessageFormatter({ key, defaultValue, variables }) ?? key;\n  }\n};\n\n// packages/ag-charts-community/src/util/userAgent.ts\nfunction hasConstrainedCanvasMemory() {\n  if (typeof navigator === \"undefined\") {\n    return false;\n  }\n  const iPhoneOSMatch = /\\(iPhone; CPU iPhone OS (\\d+_\\d+_\\d+) like Mac OS X\\)/.exec(navigator.userAgent);\n  if (iPhoneOSMatch == null) {\n    return false;\n  }\n  const [major, minor] = iPhoneOSMatch[1].split(\"_\").map(Number);\n  return major < 16 || major === 16 && minor < 6;\n}\n\n// packages/ag-charts-community/src/scene/canvas/hdpiCanvas.ts\nvar _HdpiCanvas = class _HdpiCanvas {\n  constructor(options) {\n    this.enabled = true;\n    this.width = 600;\n    this.height = 300;\n    const { width: width2, height: height2, pixelRatio, canvasElement, willReadFrequently = false } = options;\n    this.pixelRatio = hasConstrainedCanvasMemory() ? 1 : pixelRatio ?? getWindow(\"devicePixelRatio\");\n    this.element = canvasElement ?? createElement(\"canvas\");\n    this.element.style.display = \"block\";\n    this.element.style.width = (width2 ?? this.width) + \"px\";\n    this.element.style.height = (height2 ?? this.height) + \"px\";\n    this.element.width = Math.round((width2 ?? this.width) * this.pixelRatio);\n    this.element.height = Math.round((height2 ?? this.height) * this.pixelRatio);\n    this.context = this.element.getContext(\"2d\", { willReadFrequently });\n    this.onEnabledChange();\n    this.resize(width2 ?? 0, height2 ?? 0);\n    _HdpiCanvas.debugContext(this.context);\n  }\n  static is(value) {\n    return value instanceof _HdpiCanvas;\n  }\n  drawImage(context, dx = 0, dy = 0) {\n    return context.drawImage(this.context.canvas, dx, dy);\n  }\n  toDataURL(type) {\n    return this.element.toDataURL(type);\n  }\n  resize(width2, height2) {\n    if (!(width2 > 0 && height2 > 0))\n      return;\n    const { element: element2, context, pixelRatio } = this;\n    element2.width = Math.round(width2 * pixelRatio);\n    element2.height = Math.round(height2 * pixelRatio);\n    context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    element2.style.width = width2 + \"px\";\n    element2.style.height = height2 + \"px\";\n    this.width = width2;\n    this.height = height2;\n  }\n  clear() {\n    this.context.save();\n    this.context.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    this.context.clearRect(0, 0, this.width, this.height);\n    this.context.restore();\n  }\n  destroy() {\n    this.element.remove();\n    this.element.width = 0;\n    this.element.height = 0;\n    this.context.clearRect(0, 0, 0, 0);\n    Object.freeze(this);\n  }\n  onEnabledChange() {\n    if (this.element) {\n      this.element.style.display = this.enabled ? \"\" : \"none\";\n    }\n  }\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  static debugContext(ctx) {\n    if (Debug.check(\"canvas\")) {\n      const save = ctx.save.bind(ctx);\n      const restore = ctx.restore.bind(ctx);\n      let depth = 0;\n      Object.assign(ctx, {\n        save() {\n          save();\n          depth++;\n        },\n        restore() {\n          if (depth === 0) {\n            throw new Error(\"AG Charts - Unable to restore() past depth 0\");\n          }\n          restore();\n          depth--;\n        },\n        verifyDepthZero() {\n          if (depth !== 0) {\n            throw new Error(`AG Charts - Save/restore depth is non-zero: ${depth}`);\n          }\n        }\n      });\n    }\n  }\n};\n__decorateClass([\n  ObserveChanges((target) => target.onEnabledChange())\n], _HdpiCanvas.prototype, \"enabled\", 2);\nvar HdpiCanvas = _HdpiCanvas;\n\n// packages/ag-charts-community/src/scene/layersManager.ts\nvar LayersManager = class _LayersManager {\n  constructor(canvas, markDirty) {\n    this.canvas = canvas;\n    this.markDirty = markDirty;\n    this.debug = Debug.create(true, \"scene\");\n    this.layersMap = /* @__PURE__ */ new Map();\n    this.nextZIndex = 0;\n    this.nextLayerId = 0;\n  }\n  static sortLayers(a, b) {\n    return compoundAscending(\n      [a.zIndex, ...a.zIndexSubOrder ?? [void 0, void 0], a.id],\n      [b.zIndex, ...b.zIndexSubOrder ?? [void 0, void 0], b.id],\n      ascendingStringNumberUndefined\n    );\n  }\n  get size() {\n    return this.layersMap.size;\n  }\n  forEach(callback2) {\n    Array.from(this.layersMap.values()).sort(_LayersManager.sortLayers).forEach(callback2);\n  }\n  resize(width2, height2) {\n    this.canvas.resize(width2, height2);\n    this.layersMap.forEach(({ canvas }) => canvas.resize(width2, height2));\n  }\n  addLayer(opts) {\n    const { width: width2, height: height2, pixelRatio } = this.canvas;\n    const { zIndex = this.nextZIndex++, name, zIndexSubOrder, getComputedOpacity, getVisibility } = opts;\n    const canvas = new HdpiCanvas({ width: width2, height: height2, pixelRatio });\n    if (zIndex >= this.nextZIndex) {\n      this.nextZIndex = zIndex + 1;\n    }\n    this.layersMap.set(canvas, {\n      id: this.nextLayerId++,\n      name,\n      canvas,\n      zIndex,\n      zIndexSubOrder,\n      getComputedOpacity,\n      getVisibility\n    });\n    this.debug(\"Scene.addLayer() - layers\", this.layersMap);\n    return canvas;\n  }\n  removeLayer(canvas) {\n    if (this.layersMap.has(canvas)) {\n      this.layersMap.delete(canvas);\n      canvas.destroy();\n      this.markDirty();\n      this.debug(\"Scene.removeLayer() -  layers\", this.layersMap);\n    }\n  }\n  moveLayer(canvas, newZIndex, newZIndexSubOrder) {\n    const layer = this.layersMap.get(canvas);\n    if (layer) {\n      layer.zIndex = newZIndex;\n      layer.zIndexSubOrder = newZIndexSubOrder;\n      this.markDirty();\n      this.debug(\"Scene.moveLayer() -  layers\", this.layersMap);\n    }\n  }\n  clear() {\n    this.layersMap.clear();\n  }\n};\n\n// packages/ag-charts-community/src/scene/spriteRenderer.ts\nvar _SpriteRenderer = class _SpriteRenderer {\n  constructor() {\n    this.offscreenCanvas = typeof OffscreenCanvas !== \"undefined\" ? new OffscreenCanvas(0, 0) : createElement(\"canvas\");\n    _SpriteRenderer.offscreenCanvasCount++;\n    const ctx = this.offscreenCanvas.getContext(\"2d\");\n    if (ctx == null)\n      throw new TypeError(`AG Charts - invalid 2d context`);\n    this.renderCtx = {\n      ctx,\n      devicePixelRatio: 1,\n      forceRender: true,\n      resized: false,\n      debugNodes: {}\n    };\n  }\n  resize({ spritePixelRatio, spriteWidth, spriteHeight }) {\n    this.offscreenCanvas.width = Math.max(spriteWidth, 0) * spritePixelRatio;\n    this.offscreenCanvas.height = Math.max(spriteHeight, 0) * spritePixelRatio;\n  }\n  renderSprite(nodes, opts) {\n    nodes = toIterable(nodes);\n    const {\n      renderCtx,\n      renderCtx: { ctx },\n      offscreenCanvas\n    } = this;\n    const { scale: scale2 = 1, translateX = 0, translateY = 0 } = opts ?? {};\n    ctx.resetTransform();\n    ctx.clearRect(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n    ctx.save();\n    ctx.beginPath();\n    ctx.setTransform(scale2, 0, 0, scale2, translateX, translateY);\n    for (const node of nodes) {\n      node.preRender();\n      node.render(renderCtx);\n    }\n    ctx.closePath();\n    ctx.restore();\n    if (\"transferToImageBitmap\" in this.offscreenCanvas) {\n      return this.offscreenCanvas.transferToImageBitmap();\n    }\n    const canvas = createElement(\"canvas\");\n    canvas.style.display = \"block\";\n    canvas.style.width = offscreenCanvas.width + \"px\";\n    canvas.style.height = offscreenCanvas.height + \"px\";\n    canvas.getContext(\"2d\")?.putImageData(ctx.getImageData(0, 0, offscreenCanvas.width, offscreenCanvas.height), 0, 0);\n    return canvas;\n  }\n};\n_SpriteRenderer.offscreenCanvasCount = 0;\nvar SpriteRenderer = _SpriteRenderer;\n\n// packages/ag-charts-community/src/scene/sceneDebug.ts\nfunction debugStats(layersManager, debugSplitTimes, ctx, renderCtxStats, extraDebugStats = {}, seriesRect = BBox.zero) {\n  if (!Debug.check(\"scene:stats\" /* SCENE_STATS */, \"scene:stats:verbose\" /* SCENE_STATS_VERBOSE */))\n    return;\n  const { layersRendered = 0, layersSkipped = 0, nodesRendered = 0, nodesSkipped = 0 } = renderCtxStats ?? {};\n  const end2 = performance.now();\n  const { start: start2, ...durations } = debugSplitTimes;\n  const splits = Object.entries(durations).map(([n, t]) => {\n    return time(n, t);\n  }).filter((v) => v != null).join(\" + \");\n  const extras = Object.entries(extraDebugStats).map(([k, v]) => `${k}: ${v}`).join(\" ; \");\n  const detailedStats = Debug.check(\"scene:stats:verbose\" /* SCENE_STATS_VERBOSE */);\n  const stats = [\n    `${time(\"\\u23F1\\uFE0F\", start2, end2)} (${splits})`,\n    `${extras}`,\n    `Layers: ${detailedStats ? pct(layersRendered, layersSkipped) : layersManager.size}; Sprites: ${SpriteRenderer.offscreenCanvasCount}`,\n    detailedStats ? `Nodes: ${pct(nodesRendered, nodesSkipped)}` : null\n  ].filter(isString);\n  const measurer = new SimpleTextMeasurer((t) => ctx.measureText(t));\n  const statsSize = new Map(stats.map((t) => [t, measurer.measureLines(t)]));\n  const width2 = Math.max(...Array.from(statsSize.values(), (s) => s.width));\n  const height2 = accumulate(statsSize.values(), (s) => s.height);\n  const x = 2 + seriesRect.x;\n  ctx.save();\n  ctx.fillStyle = \"white\";\n  ctx.fillRect(x, 0, width2, height2);\n  ctx.fillStyle = \"black\";\n  let y = 0;\n  for (const [stat, size] of statsSize.entries()) {\n    y += size.height;\n    ctx.fillText(stat, x, y);\n  }\n  ctx.restore();\n}\nfunction prepareSceneNodeHighlight(ctx) {\n  const config = toArray(getWindow(\"agChartsSceneDebug\"));\n  const result = [];\n  for (const name of config) {\n    if (name === \"layout\") {\n      result.push(\"seriesRoot\", \"legend\", \"root\", /.*Axis-\\d+-axis.*/);\n    } else {\n      result.push(name);\n    }\n  }\n  ctx.debugNodeSearch = result;\n}\nfunction debugSceneNodeHighlight(ctx, debugNodes) {\n  ctx.save();\n  for (const [name, node] of Object.entries(debugNodes)) {\n    const bbox = Transformable.toCanvas(node);\n    if (!bbox) {\n      Logger.log(`Scene.render() - no bbox for debugged node [${name}].`);\n      continue;\n    }\n    ctx.globalAlpha = 0.8;\n    ctx.strokeStyle = \"red\";\n    ctx.lineWidth = 1;\n    ctx.strokeRect(bbox.x, bbox.y, bbox.width, bbox.height);\n    ctx.fillStyle = \"red\";\n    ctx.strokeStyle = \"white\";\n    ctx.font = \"16px sans-serif\";\n    ctx.textBaseline = \"top\";\n    ctx.textAlign = \"left\";\n    ctx.lineWidth = 2;\n    ctx.strokeText(name, bbox.x, bbox.y, bbox.width);\n    ctx.fillText(name, bbox.x, bbox.y, bbox.width);\n  }\n  ctx.restore();\n}\nvar skippedProperties = /* @__PURE__ */ new Set();\nvar allowedProperties = /* @__PURE__ */ new Set([\n  \"gradient\",\n  // '_datum',\n  \"zIndex\",\n  \"clipRect\",\n  \"cachedBBox\",\n  \"childNodeCounts\",\n  \"path\",\n  \"__zIndex\",\n  \"name\",\n  \"__scalingCenterX\",\n  \"__scalingCenterY\",\n  \"__rotationCenterX\",\n  \"__rotationCenterY\",\n  \"_previousDatum\",\n  \"__fill\",\n  \"__lineDash\",\n  \"borderPath\",\n  \"borderClipPath\",\n  \"_clipPath\"\n]);\nfunction nodeProps(node) {\n  const { ...allProps } = node;\n  for (const prop in allProps) {\n    if (allowedProperties.has(prop))\n      continue;\n    if (typeof allProps[prop] === \"number\")\n      continue;\n    if (typeof allProps[prop] === \"string\")\n      continue;\n    if (typeof allProps[prop] === \"boolean\")\n      continue;\n    skippedProperties.add(prop);\n    delete allProps[prop];\n  }\n  return allProps;\n}\nfunction buildTree(node, mode) {\n  if (!Debug.check(true, \"scene\" /* SCENE */)) {\n    return {};\n  }\n  const { parentNode } = node;\n  let order = 0;\n  return {\n    node: mode === \"json\" ? nodeProps(node) : node,\n    name: node.name ?? node.id,\n    dirty: RedrawType[node.dirty],\n    ...parentNode?.isVirtual ? {\n      virtualParentDirty: RedrawType[parentNode.dirty],\n      virtualParent: parentNode\n    } : {},\n    ...Array.from(node.children(false), (c) => buildTree(c, mode)).reduce(\n      (result, childTree) => {\n        let { name: treeNodeName } = childTree;\n        const {\n          node: {\n            visible,\n            opacity,\n            zIndex,\n            zIndexSubOrder,\n            translationX,\n            translationY,\n            rotation,\n            scalingX,\n            scalingY\n          },\n          node: childNode,\n          virtualParent\n        } = childTree;\n        if (!visible || opacity <= 0) {\n          treeNodeName = `(${treeNodeName})`;\n        }\n        if (Layer.is(childNode)) {\n          treeNodeName = `*${treeNodeName}*`;\n        }\n        const subOrder = zIndexSubOrder?.map((v) => typeof v === \"function\" ? `${v()} (fn)` : v).join(\" / \");\n        const key = [\n          `${(order++).toString().padStart(3, \"0\")}|`,\n          `${treeNodeName ?? \"<unknown>\"}`,\n          `z: ${zIndex}`,\n          subOrder && `zo: ${subOrder}`,\n          virtualParent && `(virtual parent)`,\n          translationX && `x: ${translationX}`,\n          translationY && `y: ${translationY}`,\n          rotation && `r: ${rotation}`,\n          scalingX != null && scalingX !== 1 && `sx: ${scalingX}`,\n          scalingY != null && scalingY !== 1 && `sy: ${scalingY}`\n        ].filter((v) => !!v).join(\" \");\n        let selectedKey = key;\n        let index = 1;\n        while (result[selectedKey] != null && index < 100) {\n          selectedKey = `${key} (${index++})`;\n        }\n        result[selectedKey] = childTree;\n        return result;\n      },\n      {}\n    )\n  };\n}\nfunction buildDirtyTree(node) {\n  if (node.dirty === 0 /* NONE */) {\n    return { dirtyTree: {}, paths: [] };\n  }\n  const childrenDirtyTree = Array.from(node.children(), (c) => buildDirtyTree(c)).filter((c) => c.paths.length > 0);\n  const name = Group.is(node) ? node.name ?? node.id : node.id;\n  const paths = childrenDirtyTree.length ? childrenDirtyTree.flatMap((c) => c.paths).map((p) => `${name}.${p}`) : [name];\n  return {\n    dirtyTree: {\n      name,\n      node,\n      dirty: RedrawType[node.dirty],\n      ...childrenDirtyTree.map((c) => c.dirtyTree).filter((t) => t.dirty != null).reduce((result, childTree) => {\n        result[childTree.name ?? \"<unknown>\"] = childTree;\n        return result;\n      }, {})\n    },\n    paths\n  };\n}\nfunction pct(rendered, skipped) {\n  const total = rendered + skipped;\n  return `${rendered} / ${total} (${Math.round(100 * rendered / total)}%)`;\n}\nfunction time(name, start2, end2) {\n  const duration = end2 != null ? end2 - start2 : start2;\n  return `${name}: ${Math.round(duration * 100) / 100}ms`;\n}\nfunction accumulate(iterator, mapper) {\n  let sum2 = 0;\n  for (const item of iterator) {\n    sum2 += mapper(item);\n  }\n  return sum2;\n}\n\n// packages/ag-charts-community/src/scene/scene.ts\nvar Scene = class {\n  constructor(canvasOptions) {\n    this.debug = Debug.create(true, \"scene\" /* SCENE */);\n    this.id = createId(this);\n    this.root = null;\n    this.pendingSize = null;\n    this.isDirty = false;\n    this.canvas = new HdpiCanvas(canvasOptions);\n    this.layersManager = new LayersManager(this.canvas, () => {\n      this.isDirty = true;\n    });\n  }\n  get width() {\n    return this.pendingSize?.[0] ?? this.canvas.width;\n  }\n  get height() {\n    return this.pendingSize?.[1] ?? this.canvas.height;\n  }\n  /** @deprecated v10.2.0 Only used by AG Grid Sparklines */\n  setContainer(value) {\n    const { element: element2 } = this.canvas;\n    element2.parentElement?.removeChild(element2);\n    value.appendChild(element2);\n    return this;\n  }\n  setRoot(node) {\n    if (this.root === node) {\n      return this;\n    }\n    this.isDirty = true;\n    this.root?._setLayerManager();\n    this.root = node;\n    if (node) {\n      node.visible = true;\n      node._setLayerManager(this.layersManager);\n    }\n    return this;\n  }\n  attachNode(node) {\n    this.appendChild(node);\n    return () => this.removeChild(node);\n  }\n  appendChild(node) {\n    this.root?.appendChild(node);\n    return this;\n  }\n  removeChild(node) {\n    this.root?.removeChild(node);\n    return this;\n  }\n  download(fileName, fileFormat) {\n    downloadUrl(this.canvas.toDataURL(fileFormat), fileName?.trim() ?? \"image\");\n  }\n  /** NOTE: Integrated Charts undocumented image download method. */\n  getDataURL(fileFormat) {\n    return this.canvas.toDataURL(fileFormat);\n  }\n  resize(width2, height2) {\n    width2 = Math.round(width2);\n    height2 = Math.round(height2);\n    if (width2 > 0 && height2 > 0 && (width2 !== this.width || height2 !== this.height)) {\n      this.pendingSize = [width2, height2];\n      this.isDirty = true;\n      return true;\n    }\n    return false;\n  }\n  async render(opts) {\n    const { debugSplitTimes = { start: performance.now() }, extraDebugStats, seriesRect } = opts ?? {};\n    const { canvas, canvas: { context: ctx } = {}, root, pendingSize } = this;\n    if (!ctx) {\n      return;\n    }\n    const renderStartTime = performance.now();\n    if (pendingSize) {\n      this.layersManager.resize(...pendingSize);\n      this.pendingSize = null;\n    }\n    if (root && !root.visible) {\n      this.isDirty = false;\n      return;\n    }\n    if (root && !this.isDirty) {\n      if (this.debug.check()) {\n        this.debug(\"Scene.render() - no-op\", {\n          redrawType: RedrawType[root.dirty],\n          tree: buildTree(root, \"console\")\n        });\n      }\n      debugStats(this.layersManager, debugSplitTimes, ctx, void 0, extraDebugStats, seriesRect);\n      return;\n    }\n    const renderCtx = {\n      ctx,\n      devicePixelRatio: this.canvas.pixelRatio ?? 1,\n      forceRender: true,\n      resized: Boolean(pendingSize),\n      debugNodes: {}\n    };\n    if (Debug.check(\"scene:stats:verbose\" /* SCENE_STATS_VERBOSE */)) {\n      renderCtx.stats = { layersRendered: 0, layersSkipped: 0, nodesRendered: 0, nodesSkipped: 0 };\n    }\n    prepareSceneNodeHighlight(renderCtx);\n    let canvasCleared = false;\n    if (!root || root.dirty >= 1 /* TRIVIAL */) {\n      canvasCleared = true;\n      canvas.clear();\n    }\n    if (root && Debug.check(\"scene:dirtyTree\" /* SCENE_DIRTY_TREE */)) {\n      const { dirtyTree, paths } = buildDirtyTree(root);\n      Debug.create(\"scene:dirtyTree\" /* SCENE_DIRTY_TREE */)(\"Scene.render() - dirtyTree\", { dirtyTree, paths });\n    }\n    if (root && canvasCleared) {\n      if (root.visible) {\n        root.preRender();\n      }\n      if (this.debug.check()) {\n        const tree = buildTree(root, \"console\");\n        this.debug(\"Scene.render() - before\", {\n          redrawType: RedrawType[root.dirty],\n          canvasCleared,\n          tree\n        });\n      }\n      if (root.visible) {\n        ctx.save();\n        root.render(renderCtx);\n        ctx.restore();\n      }\n    }\n    debugSplitTimes[\"\\u270D\\uFE0F\"] = performance.now() - renderStartTime;\n    if (this.layersManager.size && canvasCleared) {\n      const layerRenderStart = performance.now();\n      ctx.save();\n      ctx.resetTransform();\n      this.layersManager.forEach((layer) => {\n        if (layer.canvas.enabled && layer.getVisibility()) {\n          ctx.globalAlpha = layer.getComputedOpacity();\n          layer.canvas.drawImage(ctx);\n        }\n      });\n      ctx.restore();\n      debugSplitTimes[\"\\u26D9\"] = performance.now() - layerRenderStart;\n    }\n    ctx.verifyDepthZero?.();\n    this.isDirty = false;\n    debugStats(this.layersManager, debugSplitTimes, ctx, renderCtx.stats, extraDebugStats, seriesRect);\n    debugSceneNodeHighlight(ctx, renderCtx.debugNodes);\n    if (root && this.debug.check()) {\n      this.debug(\"Scene.render() - after\", {\n        redrawType: RedrawType[root.dirty],\n        tree: buildTree(root, \"console\"),\n        canvasCleared\n      });\n    }\n  }\n  toSVG() {\n    const svg = this.root?.toSVG();\n    if (svg == null)\n      return;\n    const root = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    root.setAttribute(\"width\", String(this.width));\n    root.setAttribute(\"height\", String(this.height));\n    if (svg.defs != null) {\n      const defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n      defs.append(...svg.defs);\n      root.append(defs);\n    }\n    root.append(...svg.elements);\n    return root.outerHTML;\n  }\n  /** Alternative to destroy() that preserves re-usable resources. */\n  strip() {\n    const { context, pixelRatio } = this.canvas;\n    context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    this.layersManager.clear();\n    this.setRoot(null);\n    this.isDirty = false;\n  }\n  destroy() {\n    this.strip();\n    this.canvas.destroy();\n    Object.assign(this, { canvas: void 0 });\n  }\n};\nScene.className = \"Scene\";\n\n// packages/ag-charts-community/src/util/callbackCache.ts\nvar CallbackCache = class {\n  constructor() {\n    this.cache = /* @__PURE__ */ new WeakMap();\n  }\n  call(fn, ...params) {\n    let serialisedParams;\n    let paramCache = this.cache.get(fn);\n    try {\n      serialisedParams = JSON.stringify(params);\n    } catch (e) {\n      return this.invoke(fn, params, paramCache);\n    }\n    if (paramCache == null) {\n      paramCache = /* @__PURE__ */ new Map();\n      this.cache.set(fn, paramCache);\n    }\n    if (!paramCache.has(serialisedParams)) {\n      return this.invoke(fn, params, paramCache, serialisedParams);\n    }\n    return paramCache.get(serialisedParams);\n  }\n  invoke(fn, params, paramCache, serialisedParams) {\n    try {\n      const result = fn(...params);\n      if (paramCache && serialisedParams != null) {\n        paramCache.set(serialisedParams, result);\n      }\n      return result;\n    } catch (e) {\n      Logger.warnOnce(`User callback errored, ignoring`, e);\n      return;\n    }\n  }\n  invalidateCache() {\n    this.cache = /* @__PURE__ */ new WeakMap();\n  }\n};\n\n// packages/ag-charts-community/src/chart/annotation/annotationManager.ts\nvar AnnotationManager = class extends BaseManager {\n  constructor(annotationRoot) {\n    super();\n    this.annotationRoot = annotationRoot;\n    this.mementoOriginatorKey = \"annotations\";\n    this.annotations = [];\n  }\n  createMemento() {\n    return this.annotations;\n  }\n  guardMemento(blob) {\n    return isArray(blob);\n  }\n  restoreMemento(_version, _mementoVersion, memento) {\n    this.annotations = this.cleanData(memento).map((annotation) => {\n      const annotationTheme = this.getAnnotationTypeStyles(annotation.type);\n      return mergeDefaults(annotation, annotationTheme);\n    });\n    this.listeners.dispatch(\"restore-annotations\", {\n      type: \"restore-annotations\",\n      annotations: this.annotations\n    });\n  }\n  updateData(annotations2) {\n    this.annotations = this.cleanData(annotations2 ?? []);\n  }\n  attachNode(node) {\n    this.annotationRoot.append(node);\n    return () => {\n      this.annotationRoot?.removeChild(node);\n      return this;\n    };\n  }\n  setAnnotationStyles(styles) {\n    this.styles = styles;\n  }\n  getAnnotationTypeStyles(type) {\n    return this.styles?.[type];\n  }\n  cleanData(annotations2) {\n    for (const annotation of annotations2) {\n      if (\"textAlign\" in annotation)\n        delete annotation.textAlign;\n    }\n    return annotations2;\n  }\n};\n\n// packages/ag-charts-community/src/chart/axis/axisManager.ts\nvar AxisManager = class {\n  constructor(sceneRoot) {\n    this.sceneRoot = sceneRoot;\n    this.axes = /* @__PURE__ */ new Map();\n    this.axisGridGroup = new Layer({ name: \"Axes-Grids\", zIndex: 1 /* AXIS_GRID */ });\n    this.axisGroup = new Layer({ name: \"Axes\", zIndex: 2 /* AXIS */ });\n    this.sceneRoot.appendChild(this.axisGroup);\n    this.sceneRoot.appendChild(this.axisGridGroup);\n  }\n  updateAxes(oldAxes, newAxes) {\n    for (const axis of oldAxes) {\n      if (newAxes.includes(axis))\n        continue;\n      axis.detachAxis(this.axisGroup, this.axisGridGroup);\n      axis.destroy();\n    }\n    for (const axis of newAxes) {\n      if (oldAxes?.includes(axis))\n        continue;\n      axis.attachAxis(this.axisGroup, this.axisGridGroup);\n    }\n    this.axes.clear();\n    for (const axis of newAxes) {\n      const ctx = axis.createAxisContext();\n      if (this.axes.has(ctx.direction)) {\n        this.axes.get(ctx.direction)?.push(ctx);\n      } else {\n        this.axes.set(ctx.direction, [ctx]);\n      }\n    }\n  }\n  getAxisContext(direction) {\n    return this.axes.get(direction) ?? [];\n  }\n  destroy() {\n    this.axes.clear();\n    this.sceneRoot.removeChild(this.axisGroup);\n    this.sceneRoot.removeChild(this.axisGridGroup);\n  }\n};\n\n// packages/ag-charts-community/src/chart/data/dataService.ts\nvar DataService = class extends Listeners {\n  constructor(animationManager) {\n    super();\n    this.animationManager = animationManager;\n    this.dispatchOnlyLatest = true;\n    this.dispatchThrottle = 0;\n    this.requestThrottle = 300;\n    this.isLoadingInitialData = false;\n    this.isLoadingData = false;\n    this.freshRequests = [];\n    this.requestCounter = 0;\n    this.debug = Debug.create(true, \"data-model\", \"data-source\");\n    this.throttledFetch = this.createThrottledFetch(this.requestThrottle);\n    this.throttledDispatch = this.createThrottledDispatch(this.dispatchThrottle);\n  }\n  updateCallback(dataSourceCallback) {\n    if (typeof dataSourceCallback !== \"function\")\n      return;\n    this.debug(\"DataService - updated data source callback\");\n    this.dataSourceCallback = dataSourceCallback;\n    this.isLoadingInitialData = true;\n    this.animationManager.skip();\n    this.dispatch(\"data-source-change\");\n  }\n  clearCallback() {\n    this.dataSourceCallback = void 0;\n  }\n  load(params) {\n    this.isLoadingData = true;\n    this.throttledFetch(params);\n  }\n  isLazy() {\n    return this.dataSourceCallback != null;\n  }\n  isLoading() {\n    return this.isLazy() && (this.isLoadingInitialData || this.isLoadingData);\n  }\n  createThrottledFetch(requestThrottle) {\n    return throttle((params) => this.fetch(params), requestThrottle, {\n      leading: false,\n      trailing: true\n    });\n  }\n  createThrottledDispatch(dispatchThrottle) {\n    return throttle(\n      (id, data) => {\n        this.debug(`DataService - dispatching 'data-load' | ${id}`);\n        this.dispatch(\"data-load\", { type: \"data-load\", data });\n      },\n      dispatchThrottle,\n      {\n        leading: true,\n        trailing: true\n      }\n    );\n  }\n  async fetch(params) {\n    if (!this.dataSourceCallback) {\n      throw new Error(\"DataService - [dataSource.getData] callback not initialised\");\n    }\n    const start2 = performance.now();\n    const id = this.requestCounter++;\n    this.debug(`DataService - requesting | ${id}`);\n    this.freshRequests.push(id);\n    let response;\n    try {\n      response = await this.dataSourceCallback(params);\n      this.debug(`DataService - response | ${performance.now() - start2}ms | ${id}`);\n    } catch (error) {\n      this.debug(`DataService - request failed | ${id}`);\n      Logger.errorOnce(`DataService - request failed | [${error}]`);\n    }\n    this.isLoadingInitialData = false;\n    const requestIndex = this.freshRequests.findIndex((rid) => rid === id);\n    if (requestIndex === -1 || this.dispatchOnlyLatest && requestIndex !== this.freshRequests.length - 1) {\n      this.debug(`DataService - discarding stale request | ${id}`);\n      return;\n    }\n    this.freshRequests = this.freshRequests.slice(requestIndex + 1);\n    if (this.freshRequests.length === 0) {\n      this.isLoadingData = false;\n    }\n    if (Array.isArray(response)) {\n      this.throttledDispatch(id, response);\n    } else {\n      this.dispatch(\"data-error\");\n    }\n  }\n};\n__decorateClass([\n  ActionOnSet({\n    newValue(dispatchThrottle) {\n      this.throttledDispatch = this.createThrottledDispatch(dispatchThrottle);\n    }\n  })\n], DataService.prototype, \"dispatchThrottle\", 2);\n__decorateClass([\n  ActionOnSet({\n    newValue(requestThrottle) {\n      this.throttledFetch = this.createThrottledFetch(requestThrottle);\n    }\n  })\n], DataService.prototype, \"requestThrottle\", 2);\n\n// packages/ag-charts-community/src/chart/interaction/animationBatch.ts\nvar AnimationBatch = class {\n  constructor(maxAnimationTime) {\n    this.maxAnimationTime = maxAnimationTime;\n    this.debug = Debug.create(true, \"animation\");\n    this.controllers = /* @__PURE__ */ new Map();\n    this.stoppedCbs = /* @__PURE__ */ new Set();\n    this.currentPhase = 0;\n    this.phases = new Map(PHASE_ORDER.map((p) => [p, []]));\n    this.skipAnimations = false;\n    this.animationTimeConsumed = 0;\n    /** Guard against premature animation execution. */\n    this.isReady = false;\n  }\n  get size() {\n    return this.controllers.size;\n  }\n  get consumedTimeMs() {\n    return this.animationTimeConsumed;\n  }\n  isActive() {\n    return this.controllers.size > 0;\n  }\n  getActiveControllers() {\n    return this.phases.get(PHASE_ORDER[this.currentPhase]) ?? [];\n  }\n  checkOverlappingId(id) {\n    if (id != null && this.controllers.has(id)) {\n      this.controllers.get(id).stop();\n      this.debug(`Skipping animation batch due to update of existing animation: ${id}`);\n      this.skip();\n    }\n  }\n  addAnimation(animation) {\n    if (animation.isComplete)\n      return;\n    const animationPhaseIdx = PHASE_ORDER.indexOf(animation.phase);\n    if (animationPhaseIdx < this.currentPhase) {\n      this.debug(`Skipping animation due to being for an earlier phase`, animation.id);\n      animation.stop();\n      return;\n    }\n    this.controllers.set(animation.id, animation);\n    this.phases.get(animation.phase)?.push(animation);\n  }\n  removeAnimation(animation) {\n    this.controllers.delete(animation.id);\n    const phase = this.phases.get(animation.phase);\n    const index = phase?.indexOf(animation);\n    if (index != null && index >= 0) {\n      phase?.splice(index, 1);\n    }\n  }\n  progress(deltaTime) {\n    if (!this.isReady)\n      return;\n    let unusedTime = deltaTime === 0 ? 0.01 : deltaTime;\n    const refresh = () => {\n      const phase2 = PHASE_ORDER[this.currentPhase];\n      return {\n        phaseControllers: [...this.getActiveControllers()],\n        phase: phase2,\n        phaseMeta: PHASE_METADATA[phase2]\n      };\n    };\n    let { phase, phaseControllers, phaseMeta } = refresh();\n    const arePhasesComplete = () => PHASE_ORDER[this.currentPhase] == null;\n    const progressPhase = () => {\n      ({ phase, phaseControllers, phaseMeta } = refresh());\n      while (!arePhasesComplete() && phaseControllers.length === 0) {\n        this.currentPhase++;\n        ({ phase, phaseControllers, phaseMeta } = refresh());\n        this.debug(`AnimationBatch - phase changing to ${phase}`, { unusedTime }, phaseControllers);\n      }\n    };\n    const total = this.controllers.size;\n    this.debug(`AnimationBatch - ${deltaTime}ms; phase ${phase} with ${phaseControllers?.length} of ${total}`);\n    do {\n      const phaseDeltaTime = unusedTime;\n      const skipPhase = phaseMeta.skipIfNoEarlierAnimations && this.animationTimeConsumed === 0;\n      let completeCount = 0;\n      for (const controller of phaseControllers) {\n        if (skipPhase) {\n          controller.stop();\n        } else {\n          unusedTime = Math.min(controller.update(phaseDeltaTime), unusedTime);\n        }\n        if (controller.isComplete) {\n          completeCount++;\n          this.removeAnimation(controller);\n        }\n      }\n      this.animationTimeConsumed += phaseDeltaTime - unusedTime;\n      this.debug(`AnimationBatch - updated ${phaseControllers.length} controllers; ${completeCount} completed`);\n      this.debug(`AnimationBatch - animationTimeConsumed: ${this.animationTimeConsumed}`);\n      progressPhase();\n    } while (unusedTime > 0 && !arePhasesComplete());\n    if (this.animationTimeConsumed > this.maxAnimationTime) {\n      this.debug(`Animation batch exceeded max animation time, skipping`, [...this.controllers]);\n      this.stop();\n    }\n  }\n  ready() {\n    if (this.isReady)\n      return;\n    this.isReady = true;\n    this.debug(`AnimationBatch - ready; skipped: ${this.skipAnimations}`, [...this.controllers]);\n    let skipAll = true;\n    for (const [, controller] of this.controllers) {\n      if (controller.duration > 0 && PHASE_METADATA[controller.phase].skipIfNoEarlierAnimations !== true) {\n        skipAll = false;\n        break;\n      }\n    }\n    if (!skipAll) {\n      for (const [, controller] of this.controllers) {\n        if (controller.autoplay) {\n          controller.play(true);\n        }\n      }\n    }\n  }\n  skip(skip = true) {\n    if (this.skipAnimations === false && skip === true) {\n      for (const controller of this.controllers.values()) {\n        controller.stop();\n      }\n      this.controllers.clear();\n    }\n    this.skipAnimations = skip;\n  }\n  play() {\n    for (const controller of this.controllers.values()) {\n      controller.play();\n    }\n  }\n  pause() {\n    for (const controller of this.controllers.values()) {\n      controller.pause();\n    }\n  }\n  stop() {\n    for (const controller of this.controllers.values()) {\n      try {\n        controller.stop();\n        this.removeAnimation(controller);\n      } catch (error) {\n        Logger.error(\"Error during animation stop\", error);\n      }\n    }\n    this.dispatchStopped();\n  }\n  stopByAnimationId(id) {\n    if (id != null && this.controllers.has(id)) {\n      const controller = this.controllers.get(id);\n      if (controller) {\n        controller.stop();\n        this.removeAnimation(controller);\n      }\n    }\n  }\n  stopByAnimationGroupId(id) {\n    for (const controller of this.controllers.values()) {\n      if (controller.groupId === id) {\n        this.stopByAnimationId(controller.id);\n      }\n    }\n  }\n  dispatchStopped() {\n    this.stoppedCbs.forEach((cb) => cb());\n    this.stoppedCbs.clear();\n  }\n  isSkipped() {\n    return this.skipAnimations;\n  }\n  destroy() {\n    this.stop();\n    this.controllers.clear();\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/preventableEvent.ts\nfunction buildPreventable(obj) {\n  const self = {\n    ...obj,\n    preventDefault() {\n      self.sourceEvent?.preventDefault();\n    }\n  };\n  return self;\n}\nfunction dispatchTypedEvent(listeners, event) {\n  listeners.dispatchWrapHandlers(event.type, (handler, e) => handler(e), buildPreventable(event));\n}\n\n// packages/ag-charts-community/src/chart/interaction/interactionManager.ts\nvar DRAG_INTERACTION_TYPES = [\"drag-start\", \"drag\", \"drag-end\"];\nvar POINTER_INTERACTION_TYPES = [\n  ...DRAG_INTERACTION_TYPES,\n  \"click\",\n  \"dblclick\",\n  \"contextmenu\",\n  \"hover\",\n  \"leave\",\n  \"enter\",\n  \"page-left\",\n  \"wheel\"\n];\nvar FOCUS_INTERACTION_TYPES = [\"blur\", \"focus\"];\nvar KEY_INTERACTION_TYPES = [\"keydown\", \"keyup\"];\nvar SHADOW_DOM_HANDLERS = [\"mousemove\", \"mouseup\"];\nvar WINDOW_EVENT_HANDLERS = [\"pagehide\", \"mousemove\", \"mouseup\"];\nvar EVENT_HANDLERS = [\n  \"dblclick\",\n  \"contextmenu\",\n  \"mousedown\",\n  \"mouseleave\",\n  \"mouseenter\",\n  \"touchstart\",\n  \"touchmove\",\n  \"touchend\",\n  \"touchcancel\",\n  \"wheel\",\n  \"blur\",\n  \"focus\",\n  \"keydown\",\n  \"keyup\"\n];\nfunction isPointerEvent(type) {\n  return POINTER_INTERACTION_TYPES.includes(type);\n}\nfunction isFocusEvent(type) {\n  return FOCUS_INTERACTION_TYPES.includes(type);\n}\nfunction isKeyEvent(type) {\n  return KEY_INTERACTION_TYPES.includes(type);\n}\nvar _InteractionManager = class _InteractionManager extends InteractionStateListener {\n  constructor(keyboardOptions, domManager) {\n    super();\n    this.keyboardOptions = keyboardOptions;\n    this.domManager = domManager;\n    this.debug = Debug.create(true, \"interaction\");\n    this.eventHandler = (event) => this.processEvent(event);\n    this.mouseDown = false;\n    this.touchDown = false;\n    this.clickHistory = [{ offsetX: NaN, offsetY: NaN, type: \"mousedown\" }];\n    this.dblclickHistory = [\n      { offsetX: NaN, offsetY: NaN, type: \"mousedown\" },\n      { offsetX: NaN, offsetY: NaN, type: \"mouseup\" },\n      { offsetX: NaN, offsetY: NaN, type: \"mousedown\" }\n    ];\n    this.stateQueue = 32 /* Default */ | 2 /* Animation */;\n    this.rootElement = this.domManager.getShadowDocumentRoot();\n    for (const type of EVENT_HANDLERS) {\n      if (type.startsWith(\"touch\") || type === \"wheel\") {\n        this.domManager.addEventListener(type, this.eventHandler, { passive: false });\n      } else {\n        this.domManager.addEventListener(type, this.eventHandler);\n      }\n    }\n    for (const type of WINDOW_EVENT_HANDLERS) {\n      getWindow().addEventListener(type, this.eventHandler);\n    }\n    this.containerChanged(true);\n    this.domManager.addListener(\"container-changed\", () => this.containerChanged());\n  }\n  containerChanged(force = false) {\n    const newRoot = this.domManager.getShadowDocumentRoot();\n    if (!force && newRoot === this.rootElement)\n      return;\n    for (const type of SHADOW_DOM_HANDLERS) {\n      this.rootElement?.removeEventListener(type, this.eventHandler);\n    }\n    this.rootElement = newRoot;\n    this.debug(\"[InteractionManager] Switching rootElement to:\", this.rootElement);\n    for (const type of SHADOW_DOM_HANDLERS) {\n      this.rootElement?.addEventListener(type, this.eventHandler);\n    }\n  }\n  destroy() {\n    super.destroy();\n    for (const type of WINDOW_EVENT_HANDLERS) {\n      getWindow().removeEventListener(type, this.eventHandler);\n    }\n    for (const type of SHADOW_DOM_HANDLERS) {\n      this.rootElement?.removeEventListener(type, this.eventHandler);\n    }\n    for (const type of EVENT_HANDLERS) {\n      this.domManager.removeEventListener(type, this.eventHandler);\n    }\n    this.domManager.removeStyles(\"interactionManager\");\n  }\n  pushState(state) {\n    this.stateQueue |= state;\n  }\n  popState(state) {\n    this.stateQueue &= ~state;\n  }\n  getState() {\n    return this.stateQueue & -this.stateQueue;\n  }\n  processEvent(event) {\n    this.debug(\"Received raw event\", event);\n    let types = this.decideInteractionEventTypes(event);\n    if (types != null && !Array.isArray(types)) {\n      types = [types];\n    }\n    for (const type of types ?? []) {\n      this.dispatchEvent(event, type).catch((e) => Logger.errorOnce(e));\n    }\n  }\n  async dispatchEvent(event, type) {\n    if (isPointerEvent(type)) {\n      this.dispatchPointerEvent(event, type);\n      return;\n    }\n    const { relatedElement, targetElement } = this.extractElements(event);\n    if (isFocusEvent(type)) {\n      const sourceEvent = event;\n      this.dispatchTypedEvent(this.listeners, { type, sourceEvent, relatedElement, targetElement });\n    } else if (isKeyEvent(type)) {\n      const sourceEvent = event;\n      this.dispatchTypedEvent(this.listeners, { type, sourceEvent, relatedElement, targetElement });\n    }\n  }\n  dispatchTypedEvent(listeners, event) {\n    const preventableEvent = buildPreventable(event);\n    this.debug(\"Dispatching typed event\", preventableEvent, this.getState());\n    listeners.dispatchWrapHandlers(event.type, (handler, e) => handler(e), preventableEvent);\n  }\n  extractElements(event) {\n    let relatedElement;\n    let targetElement;\n    if (\"relatedTarget\" in event && event[\"relatedTarget\"] instanceof HTMLElement) {\n      relatedElement = event[\"relatedTarget\"];\n    }\n    if (\"target\" in event && event[\"target\"] instanceof HTMLElement) {\n      targetElement = event[\"target\"];\n    }\n    return { relatedElement, targetElement };\n  }\n  dispatchPointerEvent(event, type) {\n    const coords = this.calculateCoordinates(event);\n    if (coords == null)\n      return;\n    const pointerEvent = this.buildPointerEvent({ type, event, ...coords });\n    this.debug(\"Dispatching pointer event\", pointerEvent, this.getState());\n    dispatchTypedEvent(this.listeners, pointerEvent);\n  }\n  getEventHTMLTarget(event) {\n    if (event.target instanceof HTMLElement) {\n      return event.target;\n    } else if (event.currentTarget instanceof HTMLElement) {\n      return event.currentTarget;\n    }\n    return void 0;\n  }\n  recordDown(event) {\n    if (event instanceof MouseEvent) {\n      partialAssign([\"offsetX\", \"offsetY\"], this.clickHistory[0], event);\n      partialAssign([\"offsetX\", \"offsetY\"], this.dblclickHistory[2], this.dblclickHistory[0]);\n      partialAssign([\"offsetX\", \"offsetY\"], this.dblclickHistory[0], event);\n    }\n    this.dragPreStartElement = this.getEventHTMLTarget(event);\n  }\n  recordUp(event) {\n    if (event instanceof MouseEvent) {\n      partialAssign([\"offsetX\", \"offsetY\"], this.dblclickHistory[1], event);\n    }\n    this.dragPreStartElement = void 0;\n    if (this.dragStartElement) {\n      this.dragStartElement = void 0;\n      return true;\n    }\n    return false;\n  }\n  decideInteractionEventTypes(event) {\n    const dragStart = \"drag-start\";\n    switch (event.type) {\n      case \"blur\":\n      case \"focus\":\n      case \"keydown\":\n      case \"keyup\":\n        return this.keyboardOptions.enabled ? event.type : void 0;\n      case \"dblclick\":\n        return event.type;\n      case \"contextmenu\":\n      case \"wheel\":\n        return event.type;\n      case \"mousedown\":\n        if (!this.isEventOverElement(event)) {\n          return;\n        }\n        this.mouseDown = true;\n        this.recordDown(event);\n        return;\n      case \"touchstart\":\n        if (!this.isEventOverElement(event)) {\n          return;\n        }\n        this.touchDown = true;\n        this.recordDown(event);\n        return;\n      case \"touchmove\":\n      case \"mousemove\":\n        if (!this.mouseDown && !this.touchDown && !this.isEventOverElement(event)) {\n          return;\n        }\n        if (!this.mouseDown && !this.touchDown)\n          return \"hover\";\n        if (this.dragStartElement)\n          return \"drag\";\n        this.dragStartElement = this.dragPreStartElement;\n        this.dragPreStartElement = void 0;\n        return [dragStart, \"drag\"];\n      case \"mouseup\":\n        if (!this.mouseDown && !this.isEventOverElement(event)) {\n          return;\n        }\n        this.mouseDown = false;\n        return this.recordUp(event) ? \"drag-end\" : \"click\";\n      case \"touchend\":\n        if (!this.touchDown && !this.isEventOverElement(event)) {\n          return;\n        }\n        this.touchDown = false;\n        return this.recordUp(event) ? \"drag-end\" : \"click\";\n      case \"mouseleave\":\n      case \"touchcancel\":\n        return \"leave\";\n      case \"mouseenter\":\n        return \"enter\";\n      case \"pagehide\":\n        return \"page-left\";\n    }\n  }\n  isEventOverElement(event) {\n    return this.domManager.isEventOverElement(event);\n  }\n  calculateCoordinates(event) {\n    if (event instanceof MouseEvent) {\n      return this.getMouseEventCoords(event);\n    } else if (typeof TouchEvent !== \"undefined\" && event instanceof TouchEvent) {\n      const lastTouch = event.touches[0] ?? event.changedTouches[0];\n      const { clientX, clientY, pageX, pageY } = lastTouch;\n      return { ..._InteractionManager.NULL_COORDS, clientX, clientY, pageX, pageY };\n    } else if (event instanceof PageTransitionEvent) {\n      if (event.persisted) {\n        return;\n      }\n      return _InteractionManager.NULL_COORDS;\n    }\n  }\n  getMouseEventCoords(event) {\n    const { clientX, clientY, pageX, pageY } = event;\n    let { offsetX, offsetY } = event;\n    const target = this.getEventHTMLTarget(event);\n    const { x = 0, y = 0 } = target ? this.domManager.calculateCanvasPosition(target) : {};\n    if (this.dragStartElement != null && event.target !== this.dragStartElement) {\n      const offsetDragStart = this.domManager.calculateCanvasPosition(this.dragStartElement);\n      offsetX -= offsetDragStart.x - x;\n      offsetY -= offsetDragStart.y - y;\n    } else {\n      offsetX += x;\n      offsetY += y;\n    }\n    return { clientX, clientY, pageX, pageY, offsetX, offsetY };\n  }\n  isWheelEvent(event) {\n    return event.type === \"wheel\";\n  }\n  buildPointerEvent(opts) {\n    const { type, event, clientX, clientY } = opts;\n    let { offsetX, offsetY, pageX, pageY } = opts;\n    if (!isFiniteNumber(offsetX) || !isFiniteNumber(offsetY)) {\n      const rect = this.domManager.getBoundingClientRect();\n      offsetX = clientX - rect.left;\n      offsetY = clientY - rect.top;\n    }\n    if (!isFiniteNumber(pageX) || !isFiniteNumber(pageY)) {\n      const pageRect = this.rootElement?.getBoundingClientRect();\n      pageX = clientX - (pageRect?.left ?? 0);\n      pageY = clientY - (pageRect?.top ?? 0);\n    }\n    let [deltaX, deltaY] = [NaN, NaN];\n    if (this.isWheelEvent(event)) {\n      const factor = event.deltaMode === 0 ? 0.01 : 1;\n      deltaX = event.deltaX * factor;\n      deltaY = event.deltaY * factor;\n    }\n    let pointerHistory = [];\n    if (event.type === \"click\") {\n      pointerHistory = this.clickHistory;\n    } else if (event.type === \"dblclick\") {\n      pointerHistory = this.dblclickHistory;\n    }\n    const { relatedElement, targetElement } = this.extractElements(event);\n    const button = \"button\" in event ? Number(event.button) : 0;\n    const builtEvent = {\n      type,\n      offsetX,\n      offsetY,\n      pageX,\n      pageY,\n      deltaX,\n      deltaY,\n      button,\n      pointerHistory,\n      sourceEvent: event,\n      relatedElement,\n      targetElement\n    };\n    this.debug(\"InteractionManager - builtEvent: \", builtEvent, this.getState());\n    return builtEvent;\n  }\n};\n_InteractionManager.NULL_COORDS = {\n  clientX: -Infinity,\n  clientY: -Infinity,\n  pageX: -Infinity,\n  pageY: -Infinity,\n  offsetX: -Infinity,\n  offsetY: -Infinity\n};\nvar InteractionManager = _InteractionManager;\n\n// packages/ag-charts-community/src/chart/interaction/animationManager.ts\nfunction validAnimationDuration(testee) {\n  if (testee == null)\n    return true;\n  return !isNaN(testee) && testee >= 0 && testee <= 2;\n}\nvar AnimationManager = class {\n  constructor(interactionManager, chartUpdateMutex) {\n    this.interactionManager = interactionManager;\n    this.chartUpdateMutex = chartUpdateMutex;\n    this.defaultDuration = 1e3;\n    this.batch = new AnimationBatch(this.defaultDuration * 1.5);\n    this.debug = Debug.create(true, \"animation\");\n    this.events = new EventEmitter();\n    this.rafAvailable = typeof requestAnimationFrame !== \"undefined\";\n    this.isPlaying = true;\n    this.requestId = null;\n    this.skipAnimations = true;\n    this.currentAnonymousAnimationId = 0;\n  }\n  addListener(eventName, listener) {\n    return this.events.on(eventName, listener);\n  }\n  /**\n   * Create an animation to tween a value between the `from` and `to` properties. If an animation already exists\n   * with the same `id`, immediately stop it.\n   */\n  animate(opts) {\n    const batch = this.batch;\n    try {\n      batch.checkOverlappingId(opts.id);\n    } catch (error) {\n      this.failsafeOnError(error);\n      return;\n    }\n    let { id } = opts;\n    if (id == null) {\n      id = `__${this.currentAnonymousAnimationId}`;\n      this.currentAnonymousAnimationId += 1;\n    }\n    const skip = this.isSkipped() || opts.phase === \"none\";\n    if (skip) {\n      this.debug(\"AnimationManager - skipping animation\");\n    }\n    const { delay, duration } = opts;\n    if (!validAnimationDuration(delay)) {\n      throw new Error(`Animation delay of ${delay} is unsupported (${id})`);\n    }\n    if (!validAnimationDuration(duration)) {\n      throw new Error(`Animation duration of ${duration} is unsupported (${id})`);\n    }\n    const animation = new Animation({\n      ...opts,\n      id,\n      skip,\n      autoplay: this.isPlaying ? opts.autoplay : false,\n      phase: opts.phase,\n      defaultDuration: this.defaultDuration\n    });\n    if (this.forceTimeJump(animation, this.defaultDuration)) {\n      return;\n    }\n    this.batch.addAnimation(animation);\n    return animation;\n  }\n  play() {\n    if (this.isPlaying) {\n      return;\n    }\n    this.isPlaying = true;\n    this.debug(\"AnimationManager.play()\");\n    try {\n      this.batch.play();\n    } catch (error) {\n      this.failsafeOnError(error);\n    }\n    this.requestAnimation();\n  }\n  pause() {\n    if (!this.isPlaying) {\n      return;\n    }\n    this.isPlaying = false;\n    this.cancelAnimation();\n    this.debug(\"AnimationManager.pause()\");\n    try {\n      this.batch.pause();\n    } catch (error) {\n      this.failsafeOnError(error);\n    }\n  }\n  stop() {\n    this.isPlaying = false;\n    this.cancelAnimation();\n    this.debug(\"AnimationManager.stop()\");\n    this.batch.stop();\n  }\n  stopByAnimationId(id) {\n    try {\n      this.batch.stopByAnimationId(id);\n    } catch (error) {\n      this.failsafeOnError(error);\n    }\n  }\n  stopByAnimationGroupId(id) {\n    try {\n      this.batch.stopByAnimationGroupId(id);\n    } catch (error) {\n      this.failsafeOnError(error);\n    }\n  }\n  reset() {\n    if (this.isPlaying) {\n      this.stop();\n      this.play();\n    } else {\n      this.stop();\n    }\n  }\n  skip(skip = true) {\n    this.skipAnimations = skip;\n  }\n  isSkipped() {\n    return !this.rafAvailable || this.skipAnimations || this.batch.isSkipped();\n  }\n  isActive() {\n    return this.isPlaying && this.batch.isActive();\n  }\n  skipCurrentBatch() {\n    if (this.debug.check()) {\n      this.debug(`AnimationManager - skipCurrentBatch()`, { stack: new Error().stack });\n    }\n    this.batch.skip();\n  }\n  /** Mocking point for tests to guarantee that animation updates happen. */\n  isSkippingFrames() {\n    return true;\n  }\n  /** Mocking point for tests to capture requestAnimationFrame callbacks. */\n  scheduleAnimationFrame(cb) {\n    this.requestId = getWindow().requestAnimationFrame(cb);\n  }\n  /** Mocking point for tests to skip animations to a specific point in time. */\n  forceTimeJump(_animation, _defaultDuration) {\n    return false;\n  }\n  requestAnimation() {\n    if (!this.rafAvailable)\n      return;\n    if (!this.batch.isActive() || this.requestId !== null)\n      return;\n    let prevTime;\n    const onAnimationFrame = async (time2) => {\n      const executeAnimationFrame = async () => {\n        const deltaTime = time2 - (prevTime ?? time2);\n        prevTime = time2;\n        this.debug(\"AnimationManager - onAnimationFrame()\", {\n          controllersCount: this.batch.size,\n          deltaTime\n        });\n        this.interactionManager.pushState(2 /* Animation */);\n        try {\n          this.batch.progress(deltaTime);\n        } catch (error) {\n          this.failsafeOnError(error);\n        }\n        this.events.emit(\"animation-frame\", {\n          type: \"animation-frame\",\n          deltaMs: deltaTime\n        });\n      };\n      if (this.isSkippingFrames()) {\n        await this.chartUpdateMutex.acquireImmediately(executeAnimationFrame);\n      } else {\n        await this.chartUpdateMutex.acquire(executeAnimationFrame);\n      }\n      if (this.batch.isActive()) {\n        this.scheduleAnimationFrame(onAnimationFrame);\n      } else {\n        this.batch.stop();\n        this.events.emit(\"animation-stop\", {\n          type: \"animation-stop\",\n          deltaMs: this.batch.consumedTimeMs\n        });\n      }\n    };\n    this.events.emit(\"animation-start\", {\n      type: \"animation-start\",\n      deltaMs: 0\n    });\n    this.scheduleAnimationFrame(onAnimationFrame);\n  }\n  cancelAnimation() {\n    if (this.requestId === null)\n      return;\n    cancelAnimationFrame(this.requestId);\n    this.requestId = null;\n    this.startBatch();\n  }\n  failsafeOnError(error, cancelAnimation = true) {\n    Logger.error(\"Error during animation, skipping animations\", error);\n    if (cancelAnimation) {\n      this.cancelAnimation();\n    }\n  }\n  startBatch(skipAnimations) {\n    this.debug(`AnimationManager - startBatch() with skipAnimations=${skipAnimations}.`);\n    this.reset();\n    this.batch.destroy();\n    this.batch = new AnimationBatch(this.defaultDuration * 1.5);\n    if (skipAnimations === true) {\n      this.batch.skip();\n    }\n  }\n  endBatch() {\n    if (this.batch.isActive()) {\n      this.batch.ready();\n      this.requestAnimation();\n    } else {\n      this.interactionManager.popState(2 /* Animation */);\n      if (this.batch.isSkipped()) {\n        this.batch.skip(false);\n      }\n    }\n  }\n  onBatchStop(cb) {\n    this.batch.stoppedCbs.add(cb);\n  }\n  destroy() {\n    this.stop();\n    this.events.clear();\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/chartEventManager.ts\nvar ChartEventManager = class extends BaseManager {\n  legendItemClick(series, itemId, enabled, legendItemName) {\n    const event = {\n      type: \"legend-item-click\",\n      series,\n      itemId,\n      enabled,\n      legendItemName\n    };\n    this.listeners.dispatch(\"legend-item-click\", event);\n  }\n  legendItemDoubleClick(series, itemId, enabled, numVisibleItems, legendItemName) {\n    const event = {\n      type: \"legend-item-double-click\",\n      series,\n      itemId,\n      enabled,\n      legendItemName,\n      numVisibleItems\n    };\n    this.listeners.dispatch(\"legend-item-double-click\", event);\n  }\n  axisHover(axisId, direction) {\n    const event = {\n      type: \"axis-hover\",\n      axisId,\n      direction\n    };\n    this.listeners.dispatch(\"axis-hover\", event);\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/contextMenuRegistry.ts\nvar ContextMenuRegistry = class _ContextMenuRegistry {\n  constructor(regionManager) {\n    this.defaultActions = [];\n    this.disabledActions = /* @__PURE__ */ new Set();\n    this.hiddenActions = /* @__PURE__ */ new Set();\n    this.listeners = new Listeners();\n    const { Default: Default2, ContextMenu } = InteractionState;\n    this.destroyFns = [regionManager.listenAll(\"contextmenu\", (e) => this.onContextMenu(e), Default2 | ContextMenu)];\n  }\n  destroy() {\n    this.destroyFns.forEach((d) => d());\n  }\n  onContextMenu(event) {\n    const type = _ContextMenuRegistry.toContextType(event.region);\n    if (type === \"all\") {\n      this.dispatchContext(\"all\", event, {});\n    }\n  }\n  static toContextType(region) {\n    if (region === \"legend\" || region === \"series\") {\n      return region;\n    }\n    return \"all\";\n  }\n  static check(type, event) {\n    return event.type === type;\n  }\n  static checkCallback(desiredType, type, _callback) {\n    return desiredType === type;\n  }\n  dispatchContext(type, pointerEvent, context, position) {\n    const { sourceEvent } = pointerEvent;\n    const x = position?.x ?? pointerEvent.offsetX;\n    const y = position?.y ?? pointerEvent.offsetY;\n    sourceEvent.stopPropagation();\n    this.listeners.dispatch(\"\", buildPreventable({ type, x, y, context, sourceEvent }));\n  }\n  addListener(handler) {\n    return this.listeners.addListener(\"\", handler);\n  }\n  filterActions(type) {\n    return this.defaultActions.filter((action) => {\n      return action.id && !this.hiddenActions.has(action.id) && [\"all\", type].includes(action.type);\n    });\n  }\n  registerDefaultAction(action) {\n    const didAdd = action.id != null && !this.defaultActions.some(({ id }) => id === action.id);\n    if (didAdd) {\n      this.defaultActions.push(action);\n    }\n    return () => {\n      const index = didAdd ? this.defaultActions.findIndex(({ id }) => id === action.id) : -1;\n      if (index !== -1) {\n        this.defaultActions.splice(index, 1);\n      }\n    };\n  }\n  enableAction(actionId) {\n    this.disabledActions.delete(actionId);\n  }\n  disableAction(actionId) {\n    this.disabledActions.add(actionId);\n  }\n  showAction(actionId) {\n    this.hiddenActions.add(actionId);\n  }\n  hideAction(actionId) {\n    this.hiddenActions.delete(actionId);\n  }\n  isDisabled(actionId) {\n    return this.disabledActions.has(actionId);\n  }\n};\n\n// packages/ag-charts-community/src/util/stateTracker.ts\nvar StateTracker = class extends Map {\n  constructor(defaultValue, defaultState) {\n    super();\n    this.defaultValue = defaultValue;\n    this.defaultState = defaultState;\n  }\n  set(key, value) {\n    this.delete(key);\n    if (typeof value !== \"undefined\") {\n      super.set(key, value);\n    }\n    return this;\n  }\n  stateId() {\n    return Array.from(this.keys()).pop() ?? this.defaultState;\n  }\n  stateValue() {\n    return Array.from(this.values()).pop() ?? this.defaultValue;\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/cursorManager.ts\nvar Cursor = /* @__PURE__ */ ((Cursor2) => {\n  Cursor2[\"Auto\"] = \"auto\";\n  Cursor2[\"Default\"] = \"default\";\n  Cursor2[\"Grab\"] = \"grab\";\n  Cursor2[\"Grabbing\"] = \"grabbing\";\n  Cursor2[\"Move\"] = \"move\";\n  Cursor2[\"NotAllowed\"] = \"not-allowed\";\n  Cursor2[\"Pointer\"] = \"pointer\";\n  Cursor2[\"EWResize\"] = \"ew-resize\";\n  Cursor2[\"NSResize\"] = \"ns-resize\";\n  Cursor2[\"ZoomIn\"] = \"zoom-in\";\n  Cursor2[\"ZoomOut\"] = \"zoom-out\";\n  return Cursor2;\n})(Cursor || {});\nvar CursorManager = class {\n  constructor(domManager) {\n    this.domManager = domManager;\n    this.stateTracker = new StateTracker(\"default\");\n  }\n  updateCursor(callerId, style) {\n    this.stateTracker.set(callerId, style);\n    this.domManager.updateCursor(this.stateTracker.stateValue());\n  }\n  getCursor() {\n    return this.domManager.getCursor();\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/gestureDetector.ts\nfunction distanceSquared(finger1, finger2) {\n  const dx = finger1.screenX - finger2.screenX;\n  const dy = finger1.screenY - finger2.screenY;\n  return dx * dx + dy * dy;\n}\nfunction distance(finger1, finger2) {\n  return Math.sqrt(distanceSquared(finger1, finger2));\n}\nvar MIN_DISTANCE_TO_START_PINCH = 1;\nvar GestureDetector = class extends BaseManager {\n  constructor(domManager) {\n    super();\n    this.domManager = domManager;\n    this.touchstart = (event) => this.onTouchStart(event);\n    this.touchmove = (event) => this.onTouchMove(event);\n    this.touchend = (event) => this.onTouchEnd(event);\n    this.touchcancel = (event) => this.onTouchCancel(event);\n    this.pinch = {\n      finger1: { identifier: NaN, screenX: NaN, screenY: NaN },\n      finger2: { identifier: NaN, screenX: NaN, screenY: NaN },\n      origin: { x: NaN, y: NaN },\n      distance: NaN,\n      status: 0 /* Off */\n    };\n    this.domManager.addEventListener(\"touchstart\", this.touchstart, { passive: true });\n    this.domManager.addEventListener(\"touchmove\", this.touchmove, { passive: false });\n    this.domManager.addEventListener(\"touchend\", this.touchend);\n    this.domManager.addEventListener(\"touchcancel\", this.touchcancel);\n  }\n  destroy() {\n    this.domManager.removeEventListener(\"touchstart\", this.touchstart);\n    this.domManager.removeEventListener(\"touchmove\", this.touchmove);\n    this.domManager.removeEventListener(\"touchend\", this.touchend);\n    this.domManager.removeEventListener(\"touchcancel\", this.touchcancel);\n  }\n  findPinchTouches(moveEvent) {\n    const { touches } = moveEvent;\n    const { finger1, finger2 } = this.pinch;\n    if (this.pinch.status !== 0 /* Off */ && touches.length === 2) {\n      if (touches[0].identifier === finger1.identifier && touches[1].identifier === finger2.identifier) {\n        return [touches[0], touches[1]];\n      }\n      if (touches[0].identifier === finger2.identifier && touches[1].identifier === finger1.identifier) {\n        return [touches[1], touches[0]];\n      }\n    }\n  }\n  copyTouchData(event) {\n    const keys = [\"identifier\", \"screenX\", \"screenY\"];\n    partialAssign(keys, this.pinch.finger1, event.touches[0]);\n    partialAssign(keys, this.pinch.finger2, event.touches[1]);\n    this.pinch.distance = distance(this.pinch.finger1, this.pinch.finger2);\n  }\n  dispatchPinchEvent(type, deltaDistance, sourceEvent) {\n    const { finger1, finger2, origin: origin3 } = this.pinch;\n    this.listeners.dispatch(type, buildPreventable({ sourceEvent, type, finger1, finger2, deltaDistance, origin: origin3 }));\n  }\n  onTouchStart(event) {\n    this.stopPinchTracking(event);\n    const { pinch } = this;\n    if (event.touches.length === 2) {\n      pinch.status = 1 /* Initialized */;\n      this.copyTouchData(event);\n      pinch.origin.x = (event.touches[0].clientX + event.touches[1].clientX) / 2;\n      pinch.origin.y = (event.touches[0].clientY + event.touches[1].clientY) / 2;\n    }\n  }\n  onTouchMove(event) {\n    const pinchTouches = this.findPinchTouches(event);\n    if (pinchTouches !== void 0) {\n      const [touch1, touch2] = pinchTouches;\n      const { pinch } = this;\n      const newDistance = distance(touch1, touch2);\n      const deltaDistance = newDistance - pinch.distance;\n      if (pinch.status === 1 /* Initialized */) {\n        if (Math.abs(deltaDistance) > MIN_DISTANCE_TO_START_PINCH) {\n          pinch.status = 2 /* Running */;\n          this.copyTouchData(event);\n          this.dispatchPinchEvent(\"pinch-start\", 0, event);\n        }\n      } else if (pinch.status === 2 /* Running */) {\n        pinch.distance = newDistance;\n        this.copyTouchData(event);\n        this.dispatchPinchEvent(\"pinch-move\", deltaDistance, event);\n      } else {\n        Logger.error(`unexpected pinch.status: ${pinch.status}`);\n      }\n    }\n  }\n  onTouchEnd(event) {\n    this.stopPinchTracking(event);\n  }\n  onTouchCancel(event) {\n    this.stopPinchTracking(event);\n  }\n  stopPinchTracking(event) {\n    const { pinch } = this;\n    if (pinch.status === 2 /* Running */) {\n      this.dispatchPinchEvent(\"pinch-end\", 0, event);\n    }\n    this.pinch.status = 0 /* Off */;\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/highlightManager.ts\nvar HighlightManager = class extends BaseManager {\n  constructor() {\n    super(...arguments);\n    this.highlightStates = new StateTracker();\n  }\n  updateHighlight(callerId, highlightedDatum) {\n    const { activeHighlight: previousHighlight } = this;\n    this.highlightStates.set(callerId, highlightedDatum);\n    this.activeHighlight = this.highlightStates.stateValue();\n    if (!this.isEqual(this.activeHighlight, previousHighlight)) {\n      this.listeners.dispatch(\"highlight-change\", {\n        type: \"highlight-change\",\n        currentHighlight: this.activeHighlight,\n        previousHighlight,\n        callerId\n      });\n    }\n  }\n  getActiveHighlight() {\n    return this.activeHighlight;\n  }\n  isEqual(a, b) {\n    return a === b || a != null && b != null && a?.series === b?.series && a?.itemId === b?.itemId && a?.datum === b?.datum;\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/keyNavManager.ts\nvar KeyNavManager = class extends InteractionStateListener {\n  constructor(focusIndicator, interactionManager, mode) {\n    super();\n    this.focusIndicator = focusIndicator;\n    this.interactionManager = interactionManager;\n    // This is the \"second last\" input event. It can be useful for keydown\n    // events that for which don't to set the isFocusVisible state\n    // (e.g. Backspace/Delete key on FC annotations, see AG-13041).\n    //\n    // Use with caution! The focus indicator must ALWAYS be visible for\n    // keyboard-only users.\n    this.previousInputDevice = \"keyboard\";\n    const mouseStates = 32 /* Default */ | 8 /* Annotations */ | 1 /* AnnotationsSelected */;\n    this.destroyFns.push(\n      interactionManager.addListener(\"click\", () => this.onClick(), mouseStates),\n      interactionManager.addListener(\"hover\", () => this.onMouse(), mouseStates),\n      interactionManager.addListener(\"drag-start\", () => this.onMouse(), mouseStates),\n      interactionManager.addListener(\"blur\", (e) => this.onBlur(e), 63 /* All */),\n      interactionManager.addListener(\"focus\", (e) => this.onFocus(e), 63 /* All */),\n      interactionManager.addListener(\"keydown\", (e) => this.onKeyDown(e), 63 /* All */)\n    );\n    this.focusIndicator.overrideFocusVisible(mode === \"integrated\" ? false : void 0);\n  }\n  getState() {\n    return this.interactionManager.getState();\n  }\n  destroy() {\n    super.destroy();\n  }\n  onClick() {\n    this.focusIndicator.overrideFocusVisible(false);\n    this.previousInputDevice = \"mouse\";\n  }\n  onMouse() {\n    this.previousInputDevice = \"mouse\";\n  }\n  onBlur(event) {\n    this.focusIndicator.overrideFocusVisible(void 0);\n    this.dispatch(\"blur\", 0, event);\n  }\n  onFocus(event) {\n    this.dispatch(\"focus\", 0, event);\n  }\n  onKeyDown(event) {\n    const state = this.getState();\n    const { key, code, altKey, shiftKey, metaKey, ctrlKey } = event.sourceEvent;\n    if (ctrlKey || metaKey) {\n      if (key === \"y\" || key === \"z\" && shiftKey) {\n        this.focusIndicator.overrideFocusVisible(this.previousInputDevice === \"keyboard\");\n        return this.dispatch(\"redo\", 0, event);\n      } else if (key === \"z\") {\n        this.focusIndicator.overrideFocusVisible(this.previousInputDevice === \"keyboard\");\n        return this.dispatch(\"undo\", 0, event);\n      }\n    }\n    if (state & (8 /* Annotations */ | 1 /* AnnotationsSelected */)) {\n      this.focusIndicator.overrideFocusVisible(false);\n      return;\n    }\n    switch (key) {\n      case \"+\":\n        return this.dispatch(\"nav-zoom\", 1, event);\n      case \"-\":\n        return this.dispatch(\"nav-zoom\", -1, event);\n    }\n    if (altKey || shiftKey || metaKey || ctrlKey)\n      return;\n    this.focusIndicator.overrideFocusVisible(true);\n    switch (code) {\n      case \"ArrowDown\":\n        return this.dispatch(\"nav-vert\", 1, event);\n      case \"ArrowUp\":\n        return this.dispatch(\"nav-vert\", -1, event);\n      case \"ArrowLeft\":\n        return this.dispatch(\"nav-hori\", -1, event);\n      case \"ArrowRight\":\n        return this.dispatch(\"nav-hori\", 1, event);\n      case \"ZoomIn\":\n      case \"Add\":\n        return this.dispatch(\"nav-zoom\", 1, event);\n      case \"ZoomOut\":\n      case \"Substract\":\n        return this.dispatch(\"nav-zoom\", -1, event);\n      case \"Space\":\n      case \"Enter\":\n        return this.dispatch(\"submit\", 0, event);\n    }\n  }\n  dispatch(type, delta4, sourceEvent) {\n    const { previousInputDevice } = this;\n    dispatchTypedEvent(this.listeners, { type, delta: delta4, sourceEvent, previousInputDevice });\n    const sharedKbmTypes = [\"redo\", \"undo\", \"nav-zoom\"];\n    if (sourceEvent.type === \"keydown\" && !sharedKbmTypes.includes(type)) {\n      this.previousInputDevice = \"keyboard\";\n    }\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/regions.ts\nvar REGIONS = /* @__PURE__ */ ((REGIONS2) => {\n  REGIONS2[\"NAVIGATOR\"] = \"navigator\";\n  REGIONS2[\"ROOT\"] = \"root\";\n  REGIONS2[\"SERIES\"] = \"series\";\n  REGIONS2[\"HORIZONTAL_AXES\"] = \"horizontal-axes\";\n  REGIONS2[\"VERTICAL_AXES\"] = \"vertical-axes\";\n  return REGIONS2;\n})(REGIONS || {});\nvar NodeRegionBBoxProvider = class {\n  constructor(node, overrideId) {\n    this.node = node;\n    this.overrideId = overrideId;\n  }\n  get id() {\n    return this.overrideId ?? this.node.id;\n  }\n  get visible() {\n    return this.node.visible;\n  }\n  toCanvasBBox() {\n    return Transformable.toCanvas(this.node);\n  }\n  fromCanvasPoint(x, y) {\n    return Transformable.fromCanvasPoint(this.node, x, y);\n  }\n};\nvar SimpleRegionBBoxProvider = class extends NodeRegionBBoxProvider {\n  constructor(node, bboxFn, overrideId) {\n    super(node, overrideId);\n    this.bboxFn = bboxFn;\n  }\n  toCanvasBBox() {\n    return this.bboxFn();\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/regionManager.ts\nvar RegionListeners = class extends Listeners {\n};\nfunction addHandler(listeners, interactionManager, type, handler, triggeringStates = 32 /* Default */) {\n  return listeners?.addListener(type, (e) => {\n    const currentState = interactionManager.getState();\n    if (currentState & triggeringStates) {\n      handler(e);\n    }\n  }) ?? (() => {\n  });\n}\nfunction nodeToBBoxProvider(node) {\n  if (node instanceof Node) {\n    return new NodeRegionBBoxProvider(node);\n  }\n  if (node instanceof NodeRegionBBoxProvider) {\n    return node;\n  }\n  return new NodeRegionBBoxProvider(node.node, node.id);\n}\nfunction getTooltipContainer(target) {\n  if (target == null || !(target instanceof HTMLElement))\n    return void 0;\n  let current = target;\n  while (current != null && !current?.classList.contains(\"ag-charts-wrapper\")) {\n    if (current.classList.contains(\"ag-chart-tooltip\")) {\n      return current;\n    }\n    current = current.parentElement;\n  }\n  return void 0;\n}\nfunction shouldIgnore(event) {\n  const { type, sourceEvent } = event;\n  const { id, className, classList, ariaHidden } = sourceEvent?.target ?? {};\n  if (!(classList instanceof DOMTokenList))\n    return \"leave\";\n  const dragTypes = DRAG_INTERACTION_TYPES;\n  if (\n    // Handle drag event on the axis 'add horizontal line annotation' button as canvas events.\n    classList.contains(\"ag-charts-annotations__axis-button-icon\") && !dragTypes.includes(type) || className === \"ag-charts-series-area\" || className === \"ag-charts-canvas-proxy\" || className === \"ag-charts-proxy-elem\" && !id?.toString().startsWith(\"ag-charts-legend-item-\") || // legend <buttons>\n    sourceEvent?.target instanceof HTMLCanvasElement\n  ) {\n    return \"none\";\n  }\n  if (getTooltipContainer(sourceEvent.target) && ariaHidden !== \"true\") {\n    return \"wait\";\n  }\n  return \"leave\";\n}\nvar RegionManager = class {\n  constructor(interactionManager) {\n    this.interactionManager = interactionManager;\n    this.debug = Debug.create(true, \"region\");\n    this.isDragging = false;\n    this.leftCanvas = false;\n    this.regions = /* @__PURE__ */ new Map();\n    this.destroyFns = [];\n    this.allRegionsListeners = new RegionListeners();\n    this.destroyFns.push(\n      ...POINTER_INTERACTION_TYPES.map(\n        (eventName) => interactionManager.addListener(eventName, this.processPointerEvent.bind(this), 63 /* All */)\n      )\n    );\n  }\n  destroy() {\n    this.destroyFns.forEach((fn) => fn());\n    this.current = void 0;\n    for (const region of this.regions.values()) {\n      region.listeners.destroy();\n    }\n    this.regions.clear();\n  }\n  addRegion(name, ...nodes) {\n    if (this.regions.has(name)) {\n      throw new Error(`AG Charts - Region: ${name} already exists`);\n    }\n    const region = {\n      properties: { name, bboxproviders: nodes.map(nodeToBBoxProvider) },\n      listeners: new RegionListeners()\n    };\n    this.regions.set(name, region);\n    return this.makeObserver(region);\n  }\n  updateRegion(name, ...nodes) {\n    const region = this.regions.get(name);\n    if (region) {\n      region.properties.bboxproviders = nodes.map(nodeToBBoxProvider);\n    } else {\n      throw new Error(\"AG Charts - unknown region: \" + name);\n    }\n  }\n  getRegion(name) {\n    return this.makeObserver(this.regions.get(name));\n  }\n  listenAll(type, handler, triggeringStates = 32 /* Default */) {\n    return addHandler(this.allRegionsListeners, this.interactionManager, type, handler, triggeringStates);\n  }\n  // This method return a wrapper object that matches the interface of InteractionManager.addListener.\n  // The intent is to allow the InteractionManager and RegionManager to be used almost interchangeably.\n  makeObserver(region) {\n    const { interactionManager } = this;\n    class ObservableRegionImplementation {\n      addListener(type, handler, triggeringStates = 32 /* Default */) {\n        return addHandler(region?.listeners, interactionManager, type, handler, triggeringStates);\n      }\n    }\n    return new ObservableRegionImplementation();\n  }\n  checkPointerHistory(targetRegion, event) {\n    for (const historyEvent of event.pointerHistory) {\n      const { region: historyRegion } = this.pickRegion(historyEvent.offsetX, historyEvent.offsetY) ?? {};\n      if (targetRegion.properties.name !== historyRegion?.properties.name) {\n        return false;\n      }\n    }\n    return true;\n  }\n  // Create and dispatch a copy of the InteractionEvent.\n  dispatch(current, partialEvent) {\n    if (current == null)\n      return;\n    const mainBBoxProvider = current.region.properties.bboxproviders[0];\n    let regionOffsetX = 0;\n    let regionOffsetY = 0;\n    if (\"offsetX\" in partialEvent && \"offsetY\" in partialEvent) {\n      ({ x: regionOffsetX, y: regionOffsetY } = mainBBoxProvider.fromCanvasPoint(\n        partialEvent.offsetX,\n        partialEvent.offsetY\n      ));\n    } else {\n      const regionBBox = mainBBoxProvider.toCanvasBBox();\n      regionOffsetX = regionBBox.width / 2;\n      regionOffsetY = regionBBox.height / 2;\n    }\n    const event = buildPreventable({\n      ...partialEvent,\n      region: current.region.properties.name,\n      bboxProviderId: current.bboxProvider?.id,\n      regionOffsetX,\n      regionOffsetY\n    });\n    this.debug(\"Dispatching region event: \", event);\n    this.allRegionsListeners.dispatch(event.type, event);\n    current.region.listeners.dispatch(event.type, event);\n  }\n  // Process events during a drag action. Returns false if this event should follow the standard\n  // RegionManager.processEvent flow, or true if this event already processed by this function.\n  handleDragging(event) {\n    const { current } = this;\n    switch (event.type) {\n      case \"drag-start\":\n        this.isDragging = true;\n        this.leftCanvas = false;\n        break;\n      case \"leave\":\n        this.leftCanvas = true;\n        return this.isDragging;\n      case \"enter\":\n        this.leftCanvas = false;\n        return this.isDragging;\n      case \"drag\":\n        if (this.isDragging) {\n          this.dispatch(current, event);\n          return true;\n        }\n        break;\n      case \"drag-end\":\n        if (this.isDragging) {\n          this.isDragging = false;\n          this.dispatch(current, event);\n          if (this.leftCanvas) {\n            this.dispatch(current, { ...event, type: \"leave\" });\n          }\n          return true;\n        }\n        break;\n    }\n    return false;\n  }\n  processPointerEvent(event) {\n    if (this.handleDragging(event)) {\n      return;\n    }\n    const { current } = this;\n    const ignore = shouldIgnore(event);\n    let newCurrent;\n    switch (ignore) {\n      case \"wait\":\n        return;\n      case \"none\":\n        newCurrent = this.pickRegion(event.offsetX, event.offsetY);\n        break;\n      case \"leave\":\n        newCurrent = void 0;\n        break;\n    }\n    const newRegion = newCurrent?.region;\n    if (current !== void 0 && newRegion?.properties.name !== current.region.properties.name) {\n      this.dispatch(current, { ...event, type: \"leave\" });\n    }\n    if (newRegion !== void 0 && newRegion.properties.name !== current?.region.properties.name) {\n      this.dispatch(newCurrent, { ...event, type: \"enter\" });\n    }\n    if (newRegion !== void 0 && this.checkPointerHistory(newRegion, event)) {\n      this.dispatch(newCurrent, event);\n    }\n    this.current = newCurrent;\n  }\n  pickRegion(x, y) {\n    let currentArea = Infinity;\n    let currentRegion;\n    let currentBBoxProvider;\n    for (const region of this.regions.values()) {\n      for (const provider of region.properties.bboxproviders) {\n        if (provider.visible === false)\n          continue;\n        const bbox = provider.toCanvasBBox();\n        const area2 = bbox.width * bbox.height;\n        if (area2 < currentArea && bbox.containsPoint(x, y)) {\n          currentArea = area2;\n          currentRegion = region;\n          currentBBoxProvider = provider;\n        }\n      }\n    }\n    return currentRegion ? { region: currentRegion, bboxProvider: currentBBoxProvider } : void 0;\n  }\n};\n\n// packages/ag-charts-community/src/chart/toolbar/toolbarTypes.ts\nvar TOOLBAR_ALIGNMENTS = [\"start\", \"center\", \"end\"];\nvar TOOLBAR_GROUPS = [\"seriesType\", \"annotations\", \"annotationOptions\", \"ranges\", \"zoom\"];\nvar TOOLBAR_GROUP_ORDERING = {\n  seriesType: 0,\n  annotations: 1,\n  annotationOptions: 2,\n  ranges: 3,\n  zoom: 4\n};\nvar ToolbarPosition = /* @__PURE__ */ ((ToolbarPosition2) => {\n  ToolbarPosition2[\"Top\"] = \"top\";\n  ToolbarPosition2[\"Left\"] = \"left\";\n  ToolbarPosition2[\"Right\"] = \"right\";\n  ToolbarPosition2[\"Bottom\"] = \"bottom\";\n  ToolbarPosition2[\"Floating\"] = \"floating\";\n  ToolbarPosition2[\"FloatingTop\"] = \"floating-top\";\n  ToolbarPosition2[\"FloatingBottom\"] = \"floating-bottom\";\n  return ToolbarPosition2;\n})(ToolbarPosition || {});\nvar TOOLBAR_POSITIONS = Object.values(ToolbarPosition);\nfunction isAnimatingFloatingPosition(position) {\n  return [\"floating-top\" /* FloatingTop */, \"floating-bottom\" /* FloatingBottom */].includes(position);\n}\n\n// packages/ag-charts-community/src/chart/interaction/toolbarManager.ts\nvar ToolbarManager = class extends BaseManager {\n  static isGroup(group, event) {\n    return event.group === group;\n  }\n  static isChildElement(domManager, element2) {\n    for (const position of TOOLBAR_POSITIONS) {\n      if (domManager.isManagedChildDOMElement(element2, \"canvas-overlay\", `toolbar-${position}`)) {\n        return true;\n      }\n    }\n    return false;\n  }\n  pressButton(group, id, value, rect, sourceEvent) {\n    this.listeners.dispatch(\"button-pressed\", { type: \"button-pressed\", group, id, value, rect, sourceEvent });\n  }\n  cancel(group) {\n    this.listeners.dispatch(\"cancelled\", { type: \"cancelled\", group });\n  }\n  toggleButton(group, id, options) {\n    const { active = false, enabled = true, visible = true, checked = false } = options;\n    this.listeners.dispatch(\"button-toggled\", {\n      type: \"button-toggled\",\n      group,\n      id,\n      active,\n      enabled,\n      visible,\n      checked\n    });\n  }\n  updateButton(group, id, options) {\n    this.listeners.dispatch(\"button-updated\", { type: \"button-updated\", group, id, ...options });\n  }\n  toggleGroup(caller, group, options) {\n    const { active, visible } = options;\n    this.listeners.dispatch(\"group-toggled\", { type: \"group-toggled\", caller, group, active, visible });\n  }\n  updateGroup(group) {\n    this.listeners.dispatch(\"group-updated\", { type: \"group-updated\", group });\n  }\n  groupMoved(group) {\n    this.listeners.dispatch(\"group-moved\", { type: \"group-moved\", group });\n  }\n  changeFloatingAnchor(group, anchor) {\n    this.listeners.dispatch(\"floating-anchor-changed\", {\n      type: \"floating-anchor-changed\",\n      group,\n      anchor\n    });\n  }\n  buttonMoved(group, value, rect, groupRect) {\n    this.listeners.dispatch(\"button-moved\", { type: \"button-moved\", group, value, rect, groupRect });\n  }\n  proxyGroupOptions(caller, group, options) {\n    this.listeners.dispatch(\"proxy-group-options\", { type: \"proxy-group-options\", caller, group, options });\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/tooltipManager.ts\nvar TooltipManager = class {\n  constructor(domManager, tooltip) {\n    this.domManager = domManager;\n    this.tooltip = tooltip;\n    this.stateTracker = new StateTracker();\n    this.suppressState = new StateTracker(false);\n    this.appliedState = null;\n    tooltip.setup(domManager);\n    domManager.addListener(\"hidden\", () => this.tooltip.toggle(false));\n  }\n  updateTooltip(callerId, meta, content) {\n    if (!this.tooltip.enabled)\n      return;\n    content ?? (content = this.stateTracker.get(callerId)?.content);\n    this.stateTracker.set(callerId, { content, meta });\n    this.applyStates();\n  }\n  removeTooltip(callerId) {\n    if (!this.tooltip.enabled)\n      return;\n    this.stateTracker.delete(callerId);\n    this.applyStates();\n  }\n  suppressTooltip(callerId) {\n    this.suppressState.set(callerId, true);\n  }\n  unsuppressTooltip(callerId) {\n    this.suppressState.delete(callerId);\n  }\n  getTooltipMeta(callerId) {\n    return this.stateTracker.get(callerId)?.meta;\n  }\n  destroy() {\n    this.domManager.removeStyles(\"tooltip\");\n  }\n  applyStates() {\n    const id = this.stateTracker.stateId();\n    const state = id ? this.stateTracker.get(id) : null;\n    if (this.suppressState.stateValue() || state?.meta == null || state?.content == null) {\n      this.appliedState = null;\n      this.tooltip.toggle(false);\n      return;\n    }\n    const canvasRect = this.domManager.getBoundingClientRect();\n    const boundingRect = this.tooltip.bounds === \"extended\" ? this.domManager.getOverlayClientRect() : canvasRect;\n    if (this.appliedState?.content === state?.content) {\n      const renderInstantly = this.tooltip.isVisible();\n      this.tooltip.show(boundingRect, canvasRect, state?.meta, null, renderInstantly);\n    } else {\n      this.tooltip.show(boundingRect, canvasRect, state?.meta, state?.content);\n    }\n    this.appliedState = state;\n  }\n  static makeTooltipMeta(event, datum) {\n    const { offsetX, offsetY } = event;\n    const tooltip = datum.series.properties.tooltip;\n    const meta = {\n      offsetX,\n      offsetY,\n      enableInteraction: tooltip.interaction?.enabled ?? false,\n      lastPointerEvent: { type: event.type, offsetX, offsetY },\n      showArrow: tooltip.showArrow,\n      position: {\n        type: tooltip.position.type,\n        xOffset: tooltip.position.xOffset,\n        yOffset: tooltip.position.yOffset\n      }\n    };\n    const refPoint = datum.yBar?.upperPoint ?? datum.midPoint ?? datum.series.datumMidPoint?.(datum);\n    if ((tooltip.position.type === \"node\" || tooltip.position.type === \"sparkline\") && refPoint) {\n      const { x, y } = refPoint;\n      const point = Transformable.toCanvasPoint(datum.series.contentGroup, x, y);\n      return {\n        ...meta,\n        offsetX: Math.round(point.x),\n        offsetY: Math.round(point.y)\n      };\n    }\n    return meta;\n  }\n};\n\n// packages/ag-charts-community/src/chart/interaction/zoomManager.ts\nvar ZoomManager = class extends BaseManager {\n  constructor() {\n    super(...arguments);\n    this.mementoOriginatorKey = \"zoom\";\n    this.axisZoomManagers = /* @__PURE__ */ new Map();\n    this.state = new StateTracker(void 0, \"initial\");\n    this.rejectCallbacks = /* @__PURE__ */ new Map();\n  }\n  addLayoutListeners(layoutManager) {\n    this.destroyFns.push(\n      layoutManager.addListener(\"layout:complete\", (event) => {\n        this.axes = event.axes;\n      })\n    );\n  }\n  createMemento() {\n    const zoom2 = this.getDefinedZoom();\n    return {\n      rangeX: this.getRangeDirection(zoom2, \"x\" /* X */),\n      rangeY: this.getRangeDirection(zoom2, \"y\" /* Y */),\n      ratioX: { start: zoom2.x.min, end: zoom2.x.max },\n      ratioY: { start: zoom2.y.min, end: zoom2.y.max }\n    };\n  }\n  guardMemento(blob) {\n    return isObject(blob) && (blob.ratioX != null || blob.ratioY != null || blob.rangeX != null || blob.rangeY != null);\n  }\n  restoreMemento(_version, _mementoVersion, memento) {\n    this.listeners.dispatch(\"restore-zoom\", { ...memento, type: \"restore-zoom\" });\n  }\n  updateAxes(axes) {\n    const zoomManagers = new Map(axes.map((axis) => [axis.id, this.axisZoomManagers.get(axis.id)]));\n    this.axisZoomManagers.clear();\n    for (const axis of axes) {\n      this.axisZoomManagers.set(axis.id, zoomManagers.get(axis.id) ?? new AxisZoomManager(axis));\n    }\n    if (this.state.size > 0 && axes.length > 0) {\n      this.updateZoom(this.state.stateId(), this.state.stateValue());\n    }\n  }\n  updateZoom(callerId, newZoom, canChangeInitial = true, rejectCallback) {\n    if (rejectCallback) {\n      this.rejectCallbacks.set(callerId, rejectCallback);\n    }\n    if (this.axisZoomManagers.size === 0) {\n      const stateId = this.state.stateId();\n      if (stateId === \"initial\" || stateId === callerId || canChangeInitial) {\n        this.state.set(callerId, newZoom);\n        if (stateId !== callerId) {\n          this.rejectCallbacks.get(stateId)?.(callerId);\n        }\n      } else {\n        rejectCallback?.(stateId);\n      }\n      return;\n    }\n    this.state.set(callerId, newZoom);\n    this.axisZoomManagers.forEach((axis) => {\n      axis.updateZoom(callerId, newZoom?.[axis.getDirection()]);\n    });\n    this.applyChanges(callerId);\n  }\n  updateAxisZoom(callerId, axisId, newZoom) {\n    this.axisZoomManagers.get(axisId)?.updateZoom(callerId, newZoom);\n    this.applyChanges(callerId);\n  }\n  // Fire this event to signal to listeners that the view is changing through a zoom and/or pan change.\n  fireZoomPanStartEvent(callerId) {\n    this.listeners.dispatch(\"zoom-pan-start\", { type: \"zoom-pan-start\", callerId });\n  }\n  getZoom() {\n    let x;\n    let y;\n    this.axisZoomManagers.forEach((axis) => {\n      if (axis.getDirection() === \"x\" /* X */) {\n        x ?? (x = axis.getZoom());\n      } else if (axis.getDirection() === \"y\" /* Y */) {\n        y ?? (y = axis.getZoom());\n      }\n    });\n    if (x || y) {\n      return { x, y };\n    }\n  }\n  getAxisZoom(axisId) {\n    return this.axisZoomManagers.get(axisId)?.getZoom() ?? { min: 0, max: 1 };\n  }\n  getAxisZooms() {\n    const axes = {};\n    for (const [axisId, axis] of this.axisZoomManagers.entries()) {\n      axes[axisId] = {\n        direction: axis.getDirection(),\n        zoom: axis.getZoom()\n      };\n    }\n    return axes;\n  }\n  applyChanges(callerId) {\n    const changed = Array.from(this.axisZoomManagers.values(), (axis) => axis.applyChanges()).some(Boolean);\n    if (!changed) {\n      return;\n    }\n    const axes = {};\n    for (const [axisId, axis] of this.axisZoomManagers.entries()) {\n      axes[axisId] = axis.getZoom();\n    }\n    this.listeners.dispatch(\"zoom-change\", { type: \"zoom-change\", ...this.getZoom(), axes, callerId });\n  }\n  getRangeDirection(zoom2, direction) {\n    for (const axis of this.axes ?? []) {\n      if (axis.direction !== direction)\n        continue;\n      const domain = axis.scale.getDomain?.();\n      const d0 = axis.scale.convert?.(domain?.at(0));\n      const d1 = axis.scale.convert?.(domain?.at(-1));\n      if (!isFiniteNumber(d0) || !isFiniteNumber(d1))\n        return;\n      let start2;\n      let end2;\n      if (d0 <= d1) {\n        const diff2 = d1 - d0;\n        start2 = axis.scale.invert?.(0);\n        end2 = axis.scale.invert?.(d0 + diff2 * zoom2[direction].max);\n      } else {\n        const diff2 = d0 - d1;\n        start2 = axis.scale.invert?.(d0 - diff2 * zoom2[direction].min);\n        end2 = axis.scale.invert?.(0);\n      }\n      return { start: start2, end: end2 };\n    }\n  }\n  getDefinedZoom() {\n    const zoom2 = this.getZoom();\n    return {\n      x: { min: zoom2?.x?.min ?? 0, max: zoom2?.x?.max ?? 1 },\n      y: { min: zoom2?.y?.min ?? 0, max: zoom2?.y?.max ?? 1 }\n    };\n  }\n};\nvar AxisZoomManager = class {\n  constructor(axis) {\n    this.axis = axis;\n    const [min = 0, max = 1] = axis.visibleRange;\n    this.state = new StateTracker({ min, max });\n    this.currentZoom = this.state.stateValue();\n  }\n  getDirection() {\n    return this.axis.direction;\n  }\n  updateZoom(callerId, newZoom) {\n    this.state.set(callerId, newZoom);\n  }\n  getZoom() {\n    return deepClone(this.state.stateValue());\n  }\n  applyChanges() {\n    const prevZoom = this.currentZoom;\n    this.currentZoom = this.state.stateValue();\n    return prevZoom.min !== this.currentZoom.min || prevZoom.max !== this.currentZoom.max;\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/seriesStateManager.ts\nvar SeriesStateManager = class {\n  constructor() {\n    this.groups = {};\n  }\n  registerSeries({ internalId, seriesGrouping, visible, type }) {\n    var _a;\n    if (!seriesGrouping)\n      return;\n    (_a = this.groups)[type] ?? (_a[type] = {});\n    this.groups[type][internalId] = { grouping: seriesGrouping, visible };\n  }\n  updateSeries({ internalId, seriesGrouping, visible, type }) {\n    if (!seriesGrouping)\n      return;\n    const entry = this.groups[type]?.[internalId];\n    if (entry) {\n      entry.grouping = seriesGrouping;\n      entry.visible = visible;\n    }\n  }\n  deregisterSeries({ internalId, type }) {\n    if (this.groups[type]) {\n      delete this.groups[type][internalId];\n    }\n    if (this.groups[type] && Object.keys(this.groups[type]).length === 0) {\n      delete this.groups[type];\n    }\n  }\n  getVisiblePeerGroupIndex({ type, seriesGrouping, visible }) {\n    if (!seriesGrouping)\n      return { visibleGroupCount: visible ? 1 : 0, visibleSameStackCount: visible ? 1 : 0, index: 0 };\n    const visibleGroupsSet = /* @__PURE__ */ new Set();\n    const visibleSameStackSet = /* @__PURE__ */ new Set();\n    for (const entry of Object.values(this.groups[type] ?? {})) {\n      if (!entry.visible)\n        continue;\n      visibleGroupsSet.add(entry.grouping.groupIndex);\n      if (entry.grouping.groupIndex === seriesGrouping.groupIndex) {\n        visibleSameStackSet.add(entry.grouping.stackIndex);\n      }\n    }\n    const visibleGroups = Array.from(visibleGroupsSet);\n    visibleGroups.sort((a, b) => a - b);\n    return {\n      visibleGroupCount: visibleGroups.length,\n      visibleSameStackCount: visibleSameStackSet.size,\n      index: visibleGroups.indexOf(seriesGrouping.groupIndex)\n    };\n  }\n};\n\n// packages/ag-charts-community/src/chart/chartUpdateType.ts\nvar ChartUpdateType = /* @__PURE__ */ ((ChartUpdateType2) => {\n  ChartUpdateType2[ChartUpdateType2[\"FULL\"] = 0] = \"FULL\";\n  ChartUpdateType2[ChartUpdateType2[\"UPDATE_DATA\"] = 1] = \"UPDATE_DATA\";\n  ChartUpdateType2[ChartUpdateType2[\"PROCESS_DATA\"] = 2] = \"PROCESS_DATA\";\n  ChartUpdateType2[ChartUpdateType2[\"PERFORM_LAYOUT\"] = 3] = \"PERFORM_LAYOUT\";\n  ChartUpdateType2[ChartUpdateType2[\"SERIES_UPDATE\"] = 4] = \"SERIES_UPDATE\";\n  ChartUpdateType2[ChartUpdateType2[\"PRE_SCENE_RENDER\"] = 5] = \"PRE_SCENE_RENDER\";\n  ChartUpdateType2[ChartUpdateType2[\"SCENE_RENDER\"] = 6] = \"SCENE_RENDER\";\n  ChartUpdateType2[ChartUpdateType2[\"NONE\"] = 7] = \"NONE\";\n  return ChartUpdateType2;\n})(ChartUpdateType || {});\n\n// packages/ag-charts-community/src/chart/updateService.ts\nvar UpdateService = class extends Listeners {\n  constructor(updateCallback) {\n    super();\n    this.updateCallback = updateCallback;\n  }\n  update(type = 0 /* FULL */, options) {\n    this.updateCallback(type, options);\n  }\n  dispatchUpdateComplete(rects) {\n    this.dispatch(\"update-complete\", {\n      type: \"update-complete\",\n      minRect: rects?.minRect,\n      minVisibleRect: rects?.minVisibleRect\n    });\n  }\n  dispatchPreDomUpdate() {\n    this.dispatch(\"pre-dom-update\", { type: \"pre-dom-update\" });\n  }\n  dispatchPreSceneRender(rects) {\n    this.dispatch(\"pre-scene-render\", { type: \"pre-scene-render\", ...rects });\n  }\n};\n\n// packages/ag-charts-community/src/chart/chartContext.ts\nvar ChartContext = class {\n  constructor(chart, vars) {\n    this.callbackCache = new CallbackCache();\n    this.chartEventManager = new ChartEventManager();\n    this.highlightManager = new HighlightManager();\n    this.layoutManager = new LayoutManager();\n    this.localeManager = new LocaleManager();\n    this.seriesStateManager = new SeriesStateManager();\n    this.stateManager = new StateManager();\n    this.toolbarManager = new ToolbarManager();\n    this.zoomManager = new ZoomManager();\n    const { scene, root, syncManager, container, updateCallback, updateMutex, pixelRatio, styleContainer } = vars;\n    this.chartService = chart;\n    this.syncManager = syncManager;\n    this.domManager = new DOMManager(container, styleContainer);\n    const canvasElement = this.domManager.addChild(\n      \"canvas\",\n      \"scene-canvas\",\n      scene?.canvas.element\n    );\n    this.scene = scene ?? new Scene({ pixelRatio, canvasElement });\n    this.scene.setRoot(root);\n    this.axisManager = new AxisManager(root);\n    this.annotationManager = new AnnotationManager(chart.annotationRoot);\n    this.cursorManager = new CursorManager(this.domManager);\n    this.interactionManager = new InteractionManager(chart.keyboard, this.domManager);\n    this.focusIndicator = new FocusIndicator(this.domManager);\n    this.keyNavManager = new KeyNavManager(this.focusIndicator, this.interactionManager, chart.mode);\n    this.regionManager = new RegionManager(this.interactionManager);\n    this.contextMenuRegistry = new ContextMenuRegistry(this.regionManager);\n    this.gestureDetector = new GestureDetector(this.domManager);\n    this.updateService = new UpdateService(updateCallback);\n    this.proxyInteractionService = new ProxyInteractionService(this.localeManager, this.domManager);\n    this.historyManager = new HistoryManager(this.keyNavManager);\n    this.animationManager = new AnimationManager(this.interactionManager, updateMutex);\n    this.dataService = new DataService(this.animationManager);\n    this.tooltipManager = new TooltipManager(this.domManager, chart.tooltip);\n    this.zoomManager.addLayoutListeners(this.layoutManager);\n  }\n  destroy() {\n    this.animationManager.destroy();\n    this.highlightManager.destroy();\n    this.axisManager.destroy();\n    this.callbackCache.invalidateCache();\n    this.chartEventManager.destroy();\n    this.contextMenuRegistry.destroy();\n    this.domManager.destroy();\n    this.highlightManager.destroy();\n    this.interactionManager.destroy();\n    this.keyNavManager.destroy();\n    this.focusIndicator.destroy();\n    this.proxyInteractionService.destroy();\n    this.regionManager.destroy();\n    this.syncManager.destroy();\n    this.tooltipManager.destroy();\n    this.zoomManager.destroy();\n  }\n};\n\n// packages/ag-charts-community/src/chart/chartHighlight.ts\nvar ChartHighlight = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.range = \"tooltip\";\n  }\n};\n__decorateClass([\n  Validate(UNION([\"tooltip\", \"node\"], \"a range\"))\n], ChartHighlight.prototype, \"range\", 2);\n\n// packages/ag-charts-community/src/chart/data/dataDomain.ts\nvar DiscreteDomain = class _DiscreteDomain {\n  constructor() {\n    this.domain = /* @__PURE__ */ new Set();\n  }\n  static is(value) {\n    return value instanceof _DiscreteDomain;\n  }\n  extend(val) {\n    this.domain.add(val);\n  }\n  getDomain() {\n    return Array.from(this.domain);\n  }\n};\nvar ContinuousDomain = class _ContinuousDomain {\n  constructor() {\n    this.domain = [Infinity, -Infinity];\n  }\n  static is(value) {\n    return value instanceof _ContinuousDomain;\n  }\n  static extendDomain(values, domain = [Infinity, -Infinity]) {\n    for (const value of values) {\n      if (typeof value !== \"number\") {\n        continue;\n      }\n      if (domain[0] > value) {\n        domain[0] = value;\n      }\n      if (domain[1] < value) {\n        domain[1] = value;\n      }\n    }\n    return domain;\n  }\n  extend(value) {\n    if (this.domain[0] > value) {\n      this.domain[0] = value;\n    }\n    if (this.domain[1] < value) {\n      this.domain[1] = value;\n    }\n  }\n  getDomain() {\n    return [...this.domain];\n  }\n};\n\n// packages/ag-charts-community/src/chart/data/dataModel.ts\nfunction toKeyString(keys) {\n  return keys.map((key) => isObject(key) ? JSON.stringify(key) : key).join(\"-\");\n}\nfunction round2(val) {\n  const accuracy = 1e4;\n  if (Number.isInteger(val)) {\n    return val;\n  } else if (Math.abs(val) > accuracy) {\n    return Math.trunc(val);\n  }\n  return Math.round(val * accuracy) / accuracy;\n}\nfunction fixNumericExtent(extent2) {\n  if (extent2 == null) {\n    return [];\n  }\n  const [min, max] = extent2.map(Number);\n  if (min === 0 && max === 0) {\n    return [0, 1];\n  }\n  return isFiniteNumber(min) && isFiniteNumber(max) ? [min, max] : [];\n}\nfunction getMissCount(scopeProvider, missMap) {\n  return missMap?.get(scopeProvider.id) ?? 0;\n}\nvar INVALID_VALUE = Symbol(\"invalid\");\nfunction getPathComponents(path) {\n  const components = [];\n  let matchIndex = 0;\n  let matchGroup;\n  const regExp = /((?:(?:^|\\.)\\s*\\w+|\\[\\s*(?:'(?:[^']|\\\\')*'|\"(?:[^\"]|\\\\\")*\"|-?\\d+)\\s*\\])\\s*)/g;\n  while (matchGroup = regExp.exec(path)) {\n    if (matchGroup.index !== matchIndex) {\n      return;\n    }\n    matchIndex = matchGroup.index + matchGroup[0].length;\n    const match = matchGroup[1].trim();\n    if (match.startsWith(\".\")) {\n      components.push(match.slice(1).trim());\n    } else if (match.startsWith(\"[\")) {\n      const accessor = match.slice(1, -1).trim();\n      if (accessor.startsWith(`'`)) {\n        components.push(accessor.slice(1, -1).replace(/\\\\'/g, `'`));\n      } else if (accessor.startsWith(`\"`)) {\n        components.push(accessor.slice(1, -1).replace(/\\\\\"/g, `\"`));\n      } else {\n        components.push(accessor);\n      }\n    } else {\n      components.push(match);\n    }\n  }\n  if (matchIndex !== path.length)\n    return;\n  return components;\n}\nfunction createPathAccessor(components) {\n  return (datum) => {\n    let current = datum;\n    for (const component of components) {\n      current = current[component];\n    }\n    return current;\n  };\n}\nvar DataModel = class {\n  constructor(opts, mode = \"standalone\") {\n    this.opts = opts;\n    this.mode = mode;\n    this.debug = Debug.create(true, \"data-model\");\n    this.scopeCache = /* @__PURE__ */ new Map();\n    this.keys = [];\n    this.values = [];\n    this.aggregates = [];\n    this.groupProcessors = [];\n    this.propertyProcessors = [];\n    this.reducers = [];\n    this.processors = [];\n    let keys = true;\n    for (const next of opts.props) {\n      if (next.type === \"key\" && !keys) {\n        throw new Error(\"AG Charts - internal config error: keys must come before values.\");\n      }\n      if (next.type === \"value\" && keys) {\n        keys = false;\n      }\n    }\n    const verifyMatchGroupId = ({ matchGroupIds = [] }) => {\n      for (const matchGroupId of matchGroupIds) {\n        if (this.values.every((def) => def.groupId !== matchGroupId)) {\n          throw new Error(\n            `AG Charts - internal config error: matchGroupIds properties must match defined groups (${matchGroupId}).`\n          );\n        }\n      }\n    };\n    for (const def of opts.props) {\n      switch (def.type) {\n        case \"key\":\n          this.keys.push({ ...def, index: this.keys.length, missing: /* @__PURE__ */ new Map() });\n          break;\n        case \"value\":\n          if (def.property == null) {\n            throw new Error(\n              `AG Charts - internal config error: no properties specified for value definitions: ${JSON.stringify(\n                def\n              )}`\n            );\n          }\n          this.values.push({ ...def, index: this.values.length, missing: /* @__PURE__ */ new Map() });\n          break;\n        case \"aggregate\":\n          verifyMatchGroupId(def);\n          this.aggregates.push({ ...def, index: this.aggregates.length });\n          break;\n        case \"group-value-processor\":\n          verifyMatchGroupId(def);\n          this.groupProcessors.push({ ...def, index: this.groupProcessors.length });\n          break;\n        case \"property-value-processor\":\n          this.propertyProcessors.push({ ...def, index: this.propertyProcessors.length });\n          break;\n        case \"reducer\":\n          this.reducers.push({ ...def, index: this.reducers.length });\n          break;\n        case \"processor\":\n          this.processors.push({ ...def, index: this.processors.length });\n          break;\n      }\n    }\n  }\n  resolveProcessedDataDefById(scope, searchId) {\n    const def = this.scopeCache.get(scope.id)?.get(searchId);\n    if (!def) {\n      throw new Error(`AG Charts - didn't find property definition for [${searchId}, ${scope.id}]`);\n    }\n    return { index: def.index, def };\n  }\n  resolveProcessedDataIndexById(scope, searchId) {\n    return this.resolveProcessedDataDefById(scope, searchId).index;\n  }\n  resolveProcessedDataDefsByIds(scope, searchIds) {\n    return searchIds.map((searchId) => [searchId, this.resolveProcessedDataDefById(scope, searchId)]);\n  }\n  resolveProcessedDataDefsValues(defs, { keys, values }) {\n    const result = {};\n    for (const [searchId, { index, def }] of defs) {\n      const processedData = def.type === \"key\" ? keys : values;\n      result[searchId] = processedData[index];\n    }\n    return result;\n  }\n  getDomain(scope, searchId, type = \"value\", processedData) {\n    const domains = this.getDomainsByType(type, processedData);\n    return domains?.[this.resolveProcessedDataIndexById(scope, searchId)] ?? [];\n  }\n  getDomainsByType(type, processedData) {\n    switch (type) {\n      case \"key\":\n        return processedData.domain.keys;\n      case \"value\":\n        return processedData.domain.values;\n      case \"aggregate\":\n        return processedData.domain.aggValues;\n      case \"group-value-processor\":\n        return processedData.domain.groups;\n      default:\n        return null;\n    }\n  }\n  processData(data, sources) {\n    const {\n      opts: { groupByKeys, groupByFn },\n      aggregates,\n      groupProcessors,\n      reducers,\n      processors,\n      propertyProcessors\n    } = this;\n    const start2 = performance.now();\n    if (groupByKeys && this.keys.length === 0) {\n      return;\n    }\n    let processedData = this.extractData(data, sources);\n    if (groupByKeys) {\n      processedData = this.groupData(processedData);\n    } else if (groupByFn) {\n      processedData = this.groupData(processedData, groupByFn(processedData));\n    }\n    if (groupProcessors.length > 0) {\n      this.postProcessGroups(processedData);\n    }\n    if (aggregates.length > 0) {\n      this.aggregateData(processedData);\n    }\n    if (propertyProcessors.length > 0) {\n      this.postProcessProperties(processedData);\n    }\n    if (reducers.length > 0) {\n      this.reduceData(processedData);\n    }\n    if (processors.length > 0) {\n      this.postProcessData(processedData);\n    }\n    if (data.length > 0) {\n      for (const def of iterate(this.keys, this.values)) {\n        for (const [scope, missCount] of def.missing) {\n          if (missCount >= data.length) {\n            const scopeHint = scope == null ? \"\" : ` for ${scope}`;\n            Logger.warnOnce(`the key '${def.property}' was not found in any data element${scopeHint}.`);\n          }\n        }\n      }\n    }\n    const end2 = performance.now();\n    processedData.time = end2 - start2;\n    if (this.debug.check()) {\n      logProcessedData(processedData);\n    }\n    this.scopeCache.clear();\n    for (const def of iterate(this.keys, this.values, this.aggregates)) {\n      if (!def.idsMap)\n        continue;\n      for (const [scope, ids] of def.idsMap) {\n        for (const id of ids) {\n          if (!this.scopeCache.has(scope)) {\n            this.scopeCache.set(scope, /* @__PURE__ */ new Map([[id, def]]));\n          } else if (this.scopeCache.get(scope)?.has(id)) {\n            throw new Error(\"duplicate definition ids on the same scope are not allowed.\");\n          } else {\n            this.scopeCache.get(scope).set(id, def);\n          }\n        }\n      }\n    }\n    return processedData;\n  }\n  valueGroupIdxLookup({ matchGroupIds }) {\n    const result = [];\n    for (const [index, def] of this.values.entries()) {\n      if (!matchGroupIds || def.groupId && matchGroupIds.includes(def.groupId)) {\n        result.push(index);\n      }\n    }\n    return result;\n  }\n  valueIdxLookup(scopes, prop) {\n    const noScopesToMatch = scopes == null || scopes.length === 0;\n    const propId = typeof prop === \"string\" ? prop : prop.id;\n    const hasMatchingScopeId = (def) => {\n      if (def.idsMap) {\n        for (const [scope, ids] of def.idsMap) {\n          if (scopes?.includes(scope) && ids.has(propId)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    const result = this.values.findIndex((def) => {\n      const validDefScopes = def.scopes == null || noScopesToMatch && !def.scopes.length || def.scopes.some((s) => scopes?.includes(s));\n      return validDefScopes && (def.property === propId || def.id === propId || hasMatchingScopeId(def));\n    });\n    if (result === -1) {\n      throw new Error(\n        `AG Charts - configuration error, unknown property ${JSON.stringify(prop)} in scope(s) ${JSON.stringify(\n          scopes\n        )}`\n      );\n    }\n    return result;\n  }\n  extractData(data, sources) {\n    const { dataDomain, processValue, scopes, allScopesHaveSameDefs } = this.initDataDomainProcessor();\n    const sourcesById = new Map(sources?.map((s) => [s.id, s]));\n    const { keys: keyDefs, values: valueDefs } = this;\n    const resultData = new Array(data.length);\n    let resultDataIdx = 0;\n    let partialValidDataCount = 0;\n    for (const [datumIdx, datum] of data.entries()) {\n      const sourceDatums = {};\n      const validScopes = scopes.size > 0 ? new Set(scopes) : void 0;\n      const keys = new Array(keyDefs.length);\n      let keyIdx = 0;\n      let key;\n      for (const def of keyDefs) {\n        key = processValue(def, datum, key);\n        if (key === INVALID_VALUE)\n          break;\n        if (keys) {\n          keys[keyIdx++] = key;\n        }\n      }\n      if (key === INVALID_VALUE)\n        continue;\n      const values = valueDefs.length > 0 ? new Array(valueDefs.length) : void 0;\n      let value;\n      for (const [valueDefIdx, def] of valueDefs.entries()) {\n        for (const scope of def.scopes ?? scopes) {\n          const source = sourcesById.get(scope);\n          const valueDatum = source?.data[datumIdx] ?? datum;\n          value = processValue(def, valueDatum, value, scope);\n          if (value === INVALID_VALUE || !values)\n            continue;\n          if (source != null && def.includeProperty !== false) {\n            const property = def.includeProperty && def.id != null ? def.id : def.property;\n            sourceDatums[scope] ?? (sourceDatums[scope] = {});\n            sourceDatums[scope][property] = value;\n          }\n          values[valueDefIdx] = value;\n        }\n        if (value === INVALID_VALUE) {\n          if (allScopesHaveSameDefs)\n            break;\n          for (const scope of def.scopes ?? scopes) {\n            validScopes?.delete(scope);\n          }\n          if (validScopes?.size === 0)\n            break;\n        }\n      }\n      if (value === INVALID_VALUE && allScopesHaveSameDefs)\n        continue;\n      if (validScopes?.size === 0)\n        continue;\n      const result = { datum: { ...datum, ...sourceDatums }, keys, values };\n      if (!allScopesHaveSameDefs && validScopes && validScopes.size < scopes.size) {\n        partialValidDataCount++;\n        result.validScopes = new Set(validScopes);\n      }\n      resultData[resultDataIdx++] = result;\n    }\n    resultData.length = resultDataIdx;\n    const propertyDomain = (def) => {\n      const defDomain = dataDomain.get(def);\n      const result = defDomain.getDomain();\n      if (ContinuousDomain.is(defDomain) && result[0] > result[1]) {\n        return [];\n      }\n      return result;\n    };\n    return {\n      type: \"ungrouped\",\n      input: { count: data.length },\n      data: resultData,\n      domain: {\n        keys: keyDefs.map(propertyDomain),\n        values: valueDefs.map(propertyDomain)\n      },\n      defs: {\n        allScopesHaveSameDefs,\n        keys: keyDefs,\n        values: valueDefs\n      },\n      partialValidDataCount,\n      time: 0\n    };\n  }\n  groupData(data, groupingFn) {\n    const processedData = /* @__PURE__ */ new Map();\n    for (const dataEntry of data.data) {\n      const { keys, values, datum, validScopes } = dataEntry;\n      const group = groupingFn?.(dataEntry) ?? keys;\n      const groupStr = toKeyString(group);\n      if (processedData.has(groupStr)) {\n        const existingData = processedData.get(groupStr);\n        existingData.values.push(values);\n        existingData.datum.push(datum);\n        if (validScopes != null && existingData.validScopes != null) {\n          for (const scope of existingData.validScopes) {\n            if (!validScopes.has(scope)) {\n              existingData.validScopes.delete(scope);\n            }\n          }\n        }\n      } else {\n        processedData.set(groupStr, {\n          keys: group,\n          values: [values],\n          datum: [datum],\n          validScopes\n        });\n      }\n    }\n    const resultData = new Array(processedData.size);\n    const resultGroups = new Array(processedData.size);\n    let dataIndex = 0;\n    for (const { keys, values, datum, validScopes } of processedData.values()) {\n      if (validScopes?.size === 0)\n        continue;\n      resultGroups[dataIndex] = keys;\n      resultData[dataIndex++] = {\n        keys,\n        values,\n        datum,\n        validScopes\n      };\n    }\n    return {\n      ...data,\n      type: \"grouped\",\n      data: resultData,\n      domain: {\n        ...data.domain,\n        groups: resultGroups\n      }\n    };\n  }\n  aggregateData(processedData) {\n    const isUngrouped = processedData.type === \"ungrouped\";\n    processedData.domain.aggValues = [];\n    for (const [index, def] of this.aggregates.entries()) {\n      const indices = this.valueGroupIdxLookup(def);\n      const domain = [Infinity, -Infinity];\n      for (const datum of processedData.data) {\n        datum.aggValues ?? (datum.aggValues = new Array(this.aggregates.length));\n        if (datum.validScopes)\n          continue;\n        const values = isUngrouped ? [datum.values] : datum.values;\n        let groupAggValues = def.groupAggregateFunction?.() ?? [Infinity, -Infinity];\n        for (const distinctValues of values) {\n          const valuesToAgg = indices.map((valueIdx) => distinctValues[valueIdx]);\n          const valuesAgg = def.aggregateFunction(valuesToAgg, datum.keys);\n          if (valuesAgg) {\n            groupAggValues = def.groupAggregateFunction?.(valuesAgg, groupAggValues) ?? ContinuousDomain.extendDomain(valuesAgg, groupAggValues);\n          }\n        }\n        const finalValues = (def.finalFunction?.(groupAggValues) ?? groupAggValues).map((v) => round2(v));\n        datum.aggValues[index] = finalValues;\n        ContinuousDomain.extendDomain(finalValues, domain);\n      }\n      processedData.domain.aggValues.push(domain);\n    }\n  }\n  postProcessGroups(processedData) {\n    const { groupProcessors } = this;\n    const affectedIndices = /* @__PURE__ */ new Set();\n    const updatedDomains = /* @__PURE__ */ new Map();\n    const groupProcessorIndices = /* @__PURE__ */ new Map();\n    const groupProcessorInitFns = /* @__PURE__ */ new Map();\n    for (const processor of groupProcessors) {\n      const indices = this.valueGroupIdxLookup(processor);\n      groupProcessorIndices.set(processor, indices);\n      groupProcessorInitFns.set(processor, processor.adjust());\n      for (const idx of indices) {\n        const valueDef = this.values[idx];\n        const isDiscrete = valueDef.valueType === \"category\";\n        affectedIndices.add(idx);\n        updatedDomains.set(idx, isDiscrete ? new DiscreteDomain() : new ContinuousDomain());\n      }\n    }\n    const updateDomains = (values) => {\n      for (const valueIndex of affectedIndices) {\n        updatedDomains.get(valueIndex)?.extend(values[valueIndex]);\n      }\n    };\n    for (const group of processedData.data) {\n      for (const processor of groupProcessors) {\n        if (group.validScopes)\n          continue;\n        const valueIndexes = groupProcessorIndices.get(processor) ?? [];\n        const adjustFn = groupProcessorInitFns.get(processor)?.();\n        if (!adjustFn)\n          continue;\n        if (processedData.type === \"grouped\") {\n          for (const values of group.values) {\n            if (values) {\n              adjustFn(values, valueIndexes);\n            }\n          }\n        } else if (group.values) {\n          adjustFn(group.values, valueIndexes);\n        }\n      }\n      if (processedData.type === \"grouped\") {\n        for (const values of group.values) {\n          updateDomains(values);\n        }\n      } else {\n        updateDomains(group.values);\n      }\n    }\n    for (const [idx, dataDomain] of updatedDomains) {\n      processedData.domain.values[idx] = dataDomain.getDomain();\n    }\n  }\n  postProcessProperties(processedData) {\n    for (const { adjust, property, scopes } of this.propertyProcessors) {\n      adjust()(processedData, this.valueIdxLookup(scopes, property));\n    }\n  }\n  reduceData(processedData) {\n    processedData.reduced ?? (processedData.reduced = {});\n    for (const def of this.reducers) {\n      const reducer = def.reducer();\n      let accValue = def.initialValue;\n      for (const datum of processedData.data) {\n        if (!datum.validScopes || def.scopes?.some((s) => datum.validScopes?.has(s))) {\n          accValue = reducer(accValue, datum);\n        }\n      }\n      processedData.reduced[def.property] = accValue;\n    }\n  }\n  postProcessData(processedData) {\n    processedData.reduced ?? (processedData.reduced = {});\n    for (const def of this.processors) {\n      processedData.reduced[def.property] = def.calculate(processedData);\n    }\n  }\n  initDataDomainProcessor() {\n    const { keys: keyDefs, values: valueDefs } = this;\n    const scopes = /* @__PURE__ */ new Set();\n    for (const valueDef of valueDefs) {\n      if (!valueDef.scopes)\n        continue;\n      for (const scope of valueDef.scopes) {\n        scopes.add(scope);\n      }\n    }\n    const dataDomain = /* @__PURE__ */ new Map();\n    const processorFns = /* @__PURE__ */ new Map();\n    let allScopesHaveSameDefs = true;\n    const initDataDomain = () => {\n      for (const def of iterate(keyDefs, valueDefs)) {\n        if (def.valueType === \"category\") {\n          dataDomain.set(def, new DiscreteDomain());\n        } else {\n          dataDomain.set(def, new ContinuousDomain());\n          allScopesHaveSameDefs && (allScopesHaveSameDefs = (def.scopes ?? []).length === scopes.size);\n        }\n      }\n    };\n    initDataDomain();\n    const accessors = this.buildAccessors(iterate(keyDefs, valueDefs));\n    const processValue = (def, datum, previousDatum, scope) => {\n      let valueInDatum;\n      let value;\n      if (accessors.has(def.property)) {\n        try {\n          value = accessors.get(def.property)(datum);\n        } catch (error) {\n        }\n        valueInDatum = value != null;\n      } else {\n        valueInDatum = def.property in datum;\n        value = valueInDatum ? datum[def.property] : def.missingValue;\n      }\n      if (def.forceValue != null) {\n        const valueNegative = valueInDatum && isNegative(value);\n        value = valueNegative ? -1 * def.forceValue : def.forceValue;\n        valueInDatum = true;\n      }\n      const missingValueDef = \"missingValue\" in def;\n      if (!valueInDatum && !missingValueDef) {\n        const missCount = def.missing.get(scope) ?? 0;\n        def.missing.set(scope, missCount + 1);\n      }\n      if (!dataDomain.has(def)) {\n        initDataDomain();\n      }\n      if (valueInDatum && def.validation?.(value, datum) === false) {\n        if (\"invalidValue\" in def) {\n          value = def.invalidValue;\n        } else {\n          if (this.mode !== \"integrated\") {\n            Logger.warnOnce(\n              `invalid value of type [${typeof value}] for [${def.scopes} / ${def.id}] ignored:`,\n              `[${value}]`\n            );\n          }\n          return INVALID_VALUE;\n        }\n      }\n      if (def.processor) {\n        if (!processorFns.has(def)) {\n          processorFns.set(def, def.processor());\n        }\n        value = processorFns.get(def)?.(value, previousDatum === INVALID_VALUE ? void 0 : previousDatum);\n      }\n      dataDomain.get(def)?.extend(value);\n      return value;\n    };\n    return { dataDomain, processValue, initDataDomain, scopes, allScopesHaveSameDefs };\n  }\n  buildAccessors(defs) {\n    const result = /* @__PURE__ */ new Map();\n    if (this.mode === \"integrated\") {\n      return result;\n    }\n    for (const def of defs) {\n      const isPath = def.property.includes(\".\") || def.property.includes(\"[\");\n      if (!isPath)\n        continue;\n      const components = getPathComponents(def.property);\n      if (components == null) {\n        Logger.warnOnce(\"Invalid property path [%s]\", def.property);\n        continue;\n      }\n      const accessor = createPathAccessor(components);\n      result.set(def.property, accessor);\n    }\n    return result;\n  }\n};\nfunction logProcessedData(processedData) {\n  const logValues = (name, data) => {\n    if (data.length > 0) {\n      Logger.log(`DataModel.processData() - ${name}`);\n      Logger.table(data);\n    }\n  };\n  Logger.log(\"DataModel.processData() - processedData\", processedData);\n  logValues(\"Key Domains\", processedData.domain.keys);\n  logValues(\"Group Domains\", processedData.domain.groups ?? []);\n  logValues(\"Value Domains\", processedData.domain.values);\n  logValues(\"Aggregate Domains\", processedData.domain.aggValues ?? []);\n  if (processedData.type === \"grouped\") {\n    const flattenedValues = processedData.data.reduce((acc, next) => {\n      const keys = next.keys ?? [];\n      const aggValues = next.aggValues ?? [];\n      const skipKeys = next.keys.map(() => void 0);\n      const skipAggValues = aggValues?.map(() => void 0);\n      acc.push(\n        ...next.values.map((v, i) => [\n          ...i === 0 ? keys : skipKeys,\n          ...v ?? [],\n          ...i == 0 ? aggValues : skipAggValues\n        ])\n      );\n      return acc;\n    }, []);\n    logValues(\"Values\", flattenedValues);\n  } else {\n    const flattenedValues = processedData.data.reduce((acc, next) => {\n      const aggValues = next.aggValues ?? [];\n      acc.push([...next.keys, ...next.values, ...aggValues]);\n      return acc;\n    }, []);\n    logValues(\"Values\", flattenedValues);\n  }\n}\n\n// packages/ag-charts-community/src/chart/data/dataController.ts\nvar _DataController = class _DataController {\n  constructor(mode) {\n    this.mode = mode;\n    this.debug = Debug.create(true, \"data-model\");\n    this.requested = [];\n    this.status = \"setup\";\n  }\n  async request(id, data, opts) {\n    if (this.status !== \"setup\") {\n      throw new Error(`AG Charts - data request after data setup phase.`);\n    }\n    return new Promise((resolve, reject) => {\n      this.requested.push({ id, opts, data, resolve, reject });\n    });\n  }\n  execute() {\n    if (this.status !== \"setup\") {\n      throw new Error(`AG Charts - data request after data setup phase.`);\n    }\n    this.status = \"executed\";\n    this.debug(\"DataController.execute() - requested\", this.requested);\n    const valid = this.validateRequests(this.requested);\n    this.debug(\"DataController.execute() - validated\", valid);\n    const merged = this.mergeRequested(valid);\n    this.debug(\"DataController.execute() - merged\", merged);\n    if (this.debug.check()) {\n      getWindow().processedData = [];\n    }\n    const scopes = this.requested.map(({ id }) => id);\n    const needsValueExtraction = this.hasMultipleDataSources(valid);\n    for (const { opts, data, resolves, rejects, ids } of merged) {\n      try {\n        const dataModel = new DataModel(opts, this.mode);\n        const processedData = dataModel.processData(data, valid);\n        if (this.debug.check()) {\n          getWindow(\"processedData\").push(processedData);\n        }\n        if (processedData?.partialValidDataCount === 0) {\n          resolves.forEach(\n            (resolve, requestIdx) => resolve({\n              dataModel,\n              processedData: this.processScopedData(\n                ids[requestIdx],\n                processedData,\n                scopes,\n                needsValueExtraction\n              )\n            })\n          );\n        } else if (processedData) {\n          this.splitResult(dataModel, processedData, ids, resolves);\n        } else {\n          rejects.forEach((cb) => cb(new Error(`AG Charts - no processed data generated`)));\n        }\n      } catch (error) {\n        rejects.forEach((cb) => cb(error));\n      }\n    }\n  }\n  hasMultipleDataSources(validRequests) {\n    if (validRequests.length) {\n      const [{ data }, ...restRequests] = validRequests;\n      return restRequests.some((v) => data !== v.data);\n    }\n    return false;\n  }\n  processScopedData(id, processedData, ids, needsValueExtraction) {\n    const extractDatum = (datum) => {\n      if (Array.isArray(datum)) {\n        return datum.map(extractDatum);\n      }\n      const extracted = needsValueExtraction ? { ...datum, ...datum[id] } : datum;\n      for (const otherId of ids) {\n        delete extracted[otherId];\n      }\n      return extracted;\n    };\n    const extractValues = (values) => {\n      if (Array.isArray(values)) {\n        return values.map(extractValues);\n      }\n      return values?.[id] ?? values;\n    };\n    return {\n      ...processedData,\n      data: processedData.data.map((datum) => ({\n        ...datum,\n        datum: extractDatum(datum.datum),\n        values: needsValueExtraction ? datum.values?.map(extractValues) : datum.values\n      }))\n    };\n  }\n  validateRequests(requested) {\n    const valid = [];\n    for (const [index, request] of requested.entries()) {\n      if (index > 0 && request.data.length !== requested[0].data.length && request.opts.groupByData === false) {\n        request.reject(\n          new Error(\"all series[].data arrays must be of the same length and have matching keys.\")\n        );\n      } else {\n        valid.push(request);\n      }\n    }\n    return valid;\n  }\n  mergeRequested(requested) {\n    const grouped = [];\n    for (const request of requested) {\n      const match = grouped.find(_DataController.groupMatch(request));\n      if (match) {\n        match.push(request);\n      } else {\n        grouped.push([request]);\n      }\n    }\n    return grouped.map(_DataController.mergeRequests);\n  }\n  splitResult(dataModel, processedData, scopes, resolves) {\n    for (let i = 0; i < scopes.length; i++) {\n      const scope = scopes[i];\n      const resolve = resolves[i];\n      resolve({\n        dataModel,\n        processedData: {\n          ...processedData,\n          data: processedData.data.filter(({ validScopes }) => validScopes?.has(scope) ?? true)\n        }\n      });\n    }\n  }\n  static groupMatch({ data, opts }) {\n    function keys(props) {\n      return props.filter((p) => p.type === \"key\").map((p) => p.property).join(\";\");\n    }\n    return ([group]) => (opts.groupByData === false || group.data === data) && group.opts.groupByKeys === opts.groupByKeys && group.opts.groupByFn === opts.groupByFn && keys(group.opts.props) === keys(opts.props);\n  }\n  static mergeRequests(requests) {\n    return requests.reduce(\n      (result, { id, data, resolve, reject, opts: { props, ...opts } }) => {\n        result.ids.push(id);\n        result.rejects.push(reject);\n        result.resolves.push(resolve);\n        result.data ?? (result.data = data);\n        result.opts ?? (result.opts = { ...opts, props: [] });\n        for (const prop of props) {\n          const clone2 = { ...prop, scopes: [id] };\n          _DataController.createIdsMap(id, clone2);\n          const match = result.opts.props.find(\n            (existing) => existing.type === clone2.type && _DataController.deepEqual(existing, clone2)\n          );\n          if (!match) {\n            result.opts.props.push(clone2);\n            continue;\n          }\n          match.scopes ?? (match.scopes = []);\n          match.scopes.push(...clone2.scopes ?? []);\n          if ((match.type === \"key\" || match.type === \"value\") && clone2.idsMap?.size) {\n            _DataController.mergeIdsMap(clone2.idsMap, match.idsMap);\n          }\n        }\n        return result;\n      },\n      { ids: [], rejects: [], resolves: [], data: null, opts: null }\n    );\n  }\n  static mergeIdsMap(fromMap, toMap) {\n    for (const [scope, ids] of fromMap) {\n      const toMapValue = toMap.get(scope);\n      if (toMapValue != null) {\n        for (const id of ids) {\n          toMapValue.add(id);\n        }\n      } else {\n        toMap.set(scope, new Set(ids));\n      }\n    }\n  }\n  static createIdsMap(scope, prop) {\n    if (prop.id == null)\n      return;\n    prop.idsMap ?? (prop.idsMap = /* @__PURE__ */ new Map());\n    if (prop.idsMap.has(scope)) {\n      prop.idsMap.get(scope).add(prop.id);\n    } else {\n      prop.idsMap.set(scope, /* @__PURE__ */ new Set([prop.id]));\n    }\n  }\n  static deepEqual(a, b) {\n    if (a === b) {\n      return true;\n    }\n    if (a && b && typeof a == \"object\" && typeof b == \"object\") {\n      if (a.constructor !== b.constructor) {\n        return false;\n      }\n      let i, length2;\n      if (Array.isArray(a)) {\n        length2 = a.length;\n        if (length2 !== b.length) {\n          return false;\n        }\n        for (i = length2 - 1; i >= 0; i--) {\n          if (!_DataController.deepEqual(a[i], b[i])) {\n            return false;\n          }\n        }\n        return true;\n      }\n      const keys = Object.keys(a);\n      length2 = keys.length;\n      if (length2 !== Object.keys(b).length) {\n        return false;\n      }\n      for (i = length2 - 1; i >= 0; i--) {\n        const key = keys[i];\n        if (!_DataController.skipKeys.has(key) && (!Object.hasOwn(b, key) || !_DataController.deepEqual(a[key], b[key]))) {\n          return false;\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n};\n// optimized version of deep equality for `mergeRequests` which can potentially loop over 1M times\n_DataController.skipKeys = /* @__PURE__ */ new Set([\"id\", \"idsMap\", \"type\", \"scopes\"]);\nvar DataController = _DataController;\n\n// packages/ag-charts-community/src/chart/factory/axisRegistry.ts\nvar AxisRegistry = class {\n  constructor() {\n    this.axesMap = /* @__PURE__ */ new Map();\n    this.hidden = /* @__PURE__ */ new Set();\n    this.themeTemplates = /* @__PURE__ */ new Map();\n  }\n  register(axisType, module) {\n    this.axesMap.set(axisType, module.moduleFactory);\n    if (module.themeTemplate) {\n      this.setThemeTemplate(axisType, module.themeTemplate);\n    }\n    if (module.hidden) {\n      this.hidden.add(axisType);\n    }\n  }\n  create(axisType, moduleContext) {\n    const axisFactory = this.axesMap.get(axisType);\n    if (axisFactory) {\n      return axisFactory(moduleContext);\n    }\n    throw new Error(`AG Charts - unknown axis type: ${axisType}`);\n  }\n  has(axisType) {\n    return this.axesMap.has(axisType);\n  }\n  keys() {\n    return this.axesMap.keys();\n  }\n  publicKeys() {\n    return [...this.keys()].filter((k) => !this.hidden.has(k));\n  }\n  setThemeTemplate(axisType, themeTemplate) {\n    this.themeTemplates.set(axisType, themeTemplate);\n    return this;\n  }\n  getThemeTemplate(axisType) {\n    return this.themeTemplates.get(axisType);\n  }\n};\nvar axisRegistry = new AxisRegistry();\n\n// packages/ag-charts-community/src/chart/factory/expectedEnterpriseModules.ts\nvar EXPECTED_ENTERPRISE_MODULES = [\n  {\n    type: \"root\",\n    optionsKey: \"animation\",\n    chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"]\n  },\n  { type: \"root\", optionsKey: \"annotations\", chartTypes: [\"cartesian\"] },\n  {\n    type: \"root\",\n    optionsKey: \"background\",\n    chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"],\n    optionsInnerKey: \"image\"\n  },\n  {\n    type: \"root\",\n    optionsKey: \"foreground\",\n    chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"],\n    optionsInnerKey: \"image\"\n  },\n  {\n    type: \"root\",\n    optionsKey: \"chartToolbar\",\n    chartTypes: [\"cartesian\"]\n  },\n  {\n    type: \"root\",\n    optionsKey: \"contextMenu\",\n    chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"]\n  },\n  { type: \"root\", optionsKey: \"statusBar\", chartTypes: [\"cartesian\"], identifier: \"status-bar\" },\n  {\n    type: \"root\",\n    optionsKey: \"dataSource\",\n    chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"]\n  },\n  { type: \"root\", optionsKey: \"sync\", chartTypes: [\"cartesian\"] },\n  { type: \"root\", optionsKey: \"zoom\", chartTypes: [\"cartesian\", \"topology\"] },\n  {\n    type: \"legend\",\n    optionsKey: \"gradientLegend\",\n    chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"],\n    identifier: \"gradient\"\n  },\n  { type: \"root\", optionsKey: \"navigator\", chartTypes: [\"cartesian\"], optionsInnerKey: \"miniChart\" },\n  { type: \"axis\", optionsKey: \"axes[]\", chartTypes: [\"polar\"], identifier: \"angle-category\" },\n  { type: \"axis\", optionsKey: \"axes[]\", chartTypes: [\"polar\"], identifier: \"angle-number\" },\n  { type: \"axis\", optionsKey: \"axes[]\", chartTypes: [\"polar\"], identifier: \"radius-category\" },\n  { type: \"axis\", optionsKey: \"axes[]\", chartTypes: [\"polar\"], identifier: \"radius-number\" },\n  { type: \"axis\", optionsKey: \"axes[]\", chartTypes: [\"cartesian\"], identifier: \"ordinal-time\" },\n  { type: \"axis-option\", optionsKey: \"crosshair\", chartTypes: [\"cartesian\"] },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"box-plot\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"candlestick\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"cone-funnel\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"funnel\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"ohlc\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"bullet\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"heatmap\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"range-area\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"range-bar\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"cartesian\"], identifier: \"waterfall\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"polar\"], identifier: \"nightingale\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"polar\"], identifier: \"radar-area\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"polar\"], identifier: \"radar-line\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"polar\"], identifier: \"radial-bar\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"polar\"], identifier: \"radial-column\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"hierarchy\"], identifier: \"sunburst\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"hierarchy\"], identifier: \"treemap\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"topology\"], identifier: \"map-shape\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"topology\"], identifier: \"map-line\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"topology\"], identifier: \"map-marker\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"topology\"], identifier: \"map-shape-background\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"topology\"], identifier: \"map-line-background\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"flow-proportion\"], identifier: \"chord\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"flow-proportion\"], identifier: \"sankey\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"standalone\"], identifier: \"pyramid\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"gauge\"], identifier: \"linear-gauge\" },\n  { type: \"series\", optionsKey: \"series[]\", chartTypes: [\"gauge\"], identifier: \"radial-gauge\" },\n  { type: \"series-option\", optionsKey: \"errorBar\", chartTypes: [\"cartesian\"], identifier: \"error-bars\" }\n];\nfunction isEnterpriseSeriesType(type) {\n  return EXPECTED_ENTERPRISE_MODULES.some((s) => s.type === \"series\" && s.identifier === type);\n}\nfunction getEnterpriseSeriesChartTypes(type) {\n  return EXPECTED_ENTERPRISE_MODULES.find((s) => s.type === \"series\" && s.identifier === type)?.chartTypes;\n}\nfunction isEnterpriseCartesian(seriesType2) {\n  const type = getEnterpriseSeriesChartTypes(seriesType2)?.find((v) => v === \"cartesian\");\n  return type === \"cartesian\";\n}\nfunction isEnterprisePolar(seriesType2) {\n  const type = getEnterpriseSeriesChartTypes(seriesType2)?.find((v) => v === \"polar\");\n  return type === \"polar\";\n}\nfunction isEnterpriseHierarchy(seriesType2) {\n  const type = getEnterpriseSeriesChartTypes(seriesType2)?.find((v) => v === \"hierarchy\");\n  return type === \"hierarchy\";\n}\nfunction isEnterpriseTopology(seriesType2) {\n  const type = getEnterpriseSeriesChartTypes(seriesType2)?.find((v) => v === \"topology\");\n  return type === \"topology\";\n}\nfunction isEnterpriseFlowProportion(seriesType2) {\n  const type = getEnterpriseSeriesChartTypes(seriesType2)?.find((v) => v === \"flow-proportion\");\n  return type === \"flow-proportion\";\n}\nfunction isEnterpriseStandalone(seriesType2) {\n  const type = getEnterpriseSeriesChartTypes(seriesType2)?.find((v) => v === \"standalone\");\n  return type === \"standalone\";\n}\nfunction isEnterpriseGauge(seriesType2) {\n  const type = getEnterpriseSeriesChartTypes(seriesType2)?.find((v) => v === \"gauge\");\n  return type === \"gauge\";\n}\nfunction isEnterpriseModule(module) {\n  return module.packageType === \"enterprise\";\n}\nfunction verifyIfModuleExpected(module) {\n  if (!isEnterpriseModule(module)) {\n    throw new Error(\"AG Charts - internal configuration error, only enterprise modules need verification.\");\n  }\n  const stub = EXPECTED_ENTERPRISE_MODULES.find((s) => {\n    return s.type === module.type && s.optionsKey === module.optionsKey && s.identifier === module.identifier && module.chartTypes.every((t) => s.chartTypes.includes(t));\n  });\n  if (stub) {\n    stub.useCount ?? (stub.useCount = 0);\n    stub.useCount++;\n  }\n  return stub != null;\n}\nfunction getUnusedExpectedModules() {\n  return EXPECTED_ENTERPRISE_MODULES.filter(({ useCount }) => useCount == null || useCount === 0);\n}\n\n// packages/ag-charts-community/src/chart/factory/legendRegistry.ts\nvar LegendRegistry = class {\n  constructor() {\n    this.legendMap = /* @__PURE__ */ new Map();\n    this.themeTemplates = /* @__PURE__ */ new Map();\n  }\n  register(legendType, { optionsKey, moduleFactory, themeTemplate }) {\n    this.legendMap.set(legendType, { optionsKey, moduleFactory });\n    this.themeTemplates.set(optionsKey, themeTemplate);\n  }\n  create(legendType, moduleContext) {\n    const legendFactory = this.legendMap.get(legendType)?.moduleFactory;\n    if (legendFactory) {\n      return legendFactory(moduleContext);\n    }\n    throw new Error(`AG Charts - unknown legend type: ${legendType}`);\n  }\n  getThemeTemplates() {\n    return Object.fromEntries(this.themeTemplates);\n  }\n  getKeys() {\n    return Array.from(this.legendMap.entries()).reduce(\n      (result, [legendType, record]) => {\n        result[legendType] = record.optionsKey;\n        return result;\n      },\n      {}\n    );\n  }\n};\nvar legendRegistry = new LegendRegistry();\n\n// packages/ag-charts-community/src/chart/factory/chartTypes.ts\nvar ChartTypes = class extends Map {\n  get(seriesType2) {\n    return super.get(seriesType2) ?? \"unknown\";\n  }\n  isCartesian(seriesType2) {\n    return this.get(seriesType2) === \"cartesian\";\n  }\n  isPolar(seriesType2) {\n    return this.get(seriesType2) === \"polar\";\n  }\n  isHierarchy(seriesType2) {\n    return this.get(seriesType2) === \"hierarchy\";\n  }\n  isTopology(seriesType2) {\n    return this.get(seriesType2) === \"topology\";\n  }\n  isFlowProportion(seriesType2) {\n    return this.get(seriesType2) === \"flow-proportion\";\n  }\n  isStandalone(seriesType2) {\n    return this.get(seriesType2) === \"standalone\";\n  }\n  isGauge(seriesType2) {\n    return this.get(seriesType2) === \"gauge\";\n  }\n  get seriesTypes() {\n    return Array.from(this.keys());\n  }\n  get cartesianTypes() {\n    return this.seriesTypes.filter((t) => this.isCartesian(t));\n  }\n  get polarTypes() {\n    return this.seriesTypes.filter((t) => this.isPolar(t));\n  }\n  get hierarchyTypes() {\n    return this.seriesTypes.filter((t) => this.isHierarchy(t));\n  }\n  get topologyTypes() {\n    return this.seriesTypes.filter((t) => this.isTopology(t));\n  }\n  get flowProportionTypes() {\n    return this.seriesTypes.filter((t) => this.isFlowProportion(t));\n  }\n  get standaloneTypes() {\n    return this.seriesTypes.filter((t) => this.isStandalone(t));\n  }\n  get gaugeTypes() {\n    return this.seriesTypes.filter((t) => this.isGauge(t));\n  }\n};\nvar ChartDefaults = class extends Map {\n  set(chartType2, defaults) {\n    return super.set(chartType2, mergeDefaults(defaults, this.get(chartType2)));\n  }\n};\nvar chartTypes = new ChartTypes();\nvar publicChartTypes = new ChartTypes();\nvar chartDefaults = new ChartDefaults();\n\n// packages/ag-charts-community/src/chart/factory/seriesRegistry.ts\nvar SeriesRegistry = class {\n  constructor() {\n    this.seriesMap = /* @__PURE__ */ new Map();\n    this.themeTemplates = /* @__PURE__ */ new Map();\n  }\n  register(seriesType2, {\n    chartTypes: [chartType2],\n    moduleFactory,\n    tooltipDefaults,\n    defaultAxes,\n    themeTemplate,\n    paletteFactory,\n    solo,\n    stackable,\n    groupable,\n    stackedByDefault,\n    hidden\n  }) {\n    this.setThemeTemplate(seriesType2, themeTemplate);\n    this.seriesMap.set(seriesType2, {\n      moduleFactory,\n      tooltipDefaults,\n      defaultAxes,\n      paletteFactory,\n      solo,\n      stackable,\n      groupable,\n      stackedByDefault\n    });\n    chartTypes.set(seriesType2, chartType2);\n    if (!hidden) {\n      publicChartTypes.set(seriesType2, chartType2);\n    }\n  }\n  create(seriesType2, moduleContext) {\n    const seriesFactory = this.seriesMap.get(seriesType2)?.moduleFactory;\n    if (seriesFactory) {\n      return seriesFactory(moduleContext);\n    }\n    throw new Error(`AG Charts - unknown series type: ${seriesType2}`);\n  }\n  cloneDefaultAxes(seriesType2, options) {\n    const defaultAxes = this.seriesMap.get(seriesType2)?.defaultAxes;\n    if (defaultAxes == null)\n      return null;\n    const axes = typeof defaultAxes === \"function\" ? defaultAxes(options) : defaultAxes;\n    return { axes: deepClone(axes) };\n  }\n  setThemeTemplate(seriesType2, themeTemplate) {\n    const currentTemplate = this.themeTemplates.get(seriesType2);\n    this.themeTemplates.set(seriesType2, mergeDefaults(themeTemplate, currentTemplate));\n  }\n  getThemeTemplate(seriesType2) {\n    return this.themeTemplates.get(seriesType2);\n  }\n  getPaletteFactory(seriesType2) {\n    return this.seriesMap.get(seriesType2)?.paletteFactory;\n  }\n  getTooltipDefauls(seriesType2) {\n    return this.seriesMap.get(seriesType2)?.tooltipDefaults;\n  }\n  isSolo(seriesType2) {\n    return this.seriesMap.get(seriesType2)?.solo ?? false;\n  }\n  isGroupable(seriesType2) {\n    return this.seriesMap.get(seriesType2)?.groupable ?? false;\n  }\n  isStackable(seriesType2) {\n    return this.seriesMap.get(seriesType2)?.stackable ?? false;\n  }\n  isStackedByDefault(seriesType2) {\n    return this.seriesMap.get(seriesType2)?.stackedByDefault ?? false;\n  }\n};\nvar seriesRegistry = new SeriesRegistry();\n\n// packages/ag-charts-community/src/chart/interaction/syncManager.ts\nvar _SyncManager = class _SyncManager extends BaseManager {\n  constructor(chart) {\n    super();\n    this.chart = chart;\n  }\n  subscribe(groupId = _SyncManager.DEFAULT_GROUP) {\n    let syncGroup = this.get(groupId);\n    if (!syncGroup) {\n      syncGroup = /* @__PURE__ */ new Set();\n      _SyncManager.chartsGroups.set(groupId, syncGroup);\n    }\n    syncGroup.add(this.chart);\n    return this;\n  }\n  unsubscribe(groupId = _SyncManager.DEFAULT_GROUP) {\n    this.get(groupId)?.delete(this.chart);\n    return this;\n  }\n  getChart() {\n    return this.chart;\n  }\n  getGroup(groupId = _SyncManager.DEFAULT_GROUP) {\n    const syncGroup = this.get(groupId);\n    return syncGroup ? Array.from(syncGroup) : [];\n  }\n  getGroupSiblings(groupId = _SyncManager.DEFAULT_GROUP) {\n    return this.getGroup(groupId).filter((chart) => chart !== this.chart);\n  }\n  get(groupId) {\n    return _SyncManager.chartsGroups.get(groupId);\n  }\n};\n_SyncManager.chartsGroups = /* @__PURE__ */ new Map();\n_SyncManager.DEFAULT_GROUP = Symbol(\"sync-group-default\");\nvar SyncManager = _SyncManager;\n\n// packages/ag-charts-community/src/chart/keyboard.ts\nvar Keyboard = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = false;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], Keyboard.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], Keyboard.prototype, \"tabIndex\", 2);\n\n// packages/ag-charts-community/src/chart/mapping/prepareAxis.ts\nvar CartesianAxisPositions = [\"top\", \"right\", \"bottom\", \"left\"];\nfunction isAxisPosition(position) {\n  return typeof position === \"string\" && CartesianAxisPositions.includes(position);\n}\nfunction guessInvalidPositions(axes) {\n  const invalidAxes = [];\n  const usedPositions = [];\n  const guesses = [...CartesianAxisPositions];\n  for (const axis of axes) {\n    if (axis instanceof CartesianAxis) {\n      if (isAxisPosition(axis.position)) {\n        usedPositions.push(axis.position);\n      } else {\n        invalidAxes.push(axis);\n      }\n    }\n  }\n  for (const axis of invalidAxes) {\n    let nextGuess;\n    do {\n      nextGuess = guesses.pop();\n    } while (nextGuess && usedPositions.includes(nextGuess));\n    if (nextGuess == null)\n      break;\n    axis.position = nextGuess;\n  }\n}\n\n// packages/ag-charts-community/src/chart/mapping/prepareSeries.ts\nvar MATCHING_KEYS = [\"direction\", \"xKey\", \"yKey\", \"sizeKey\", \"angleKey\", \"radiusKey\", \"normalizedTo\"];\nfunction matchSeriesOptions(series, optSeries, oldOptsSeries) {\n  const generateKey = (type, i, opts) => {\n    const result = [type];\n    for (const key of MATCHING_KEYS) {\n      if (key in i && i[key] != null)\n        result.push(`${key}=${i[key]}`);\n    }\n    if (opts?.seriesGrouping) {\n      result.push(`seriesGrouping.groupId=${opts?.seriesGrouping.groupId}`);\n    }\n    return result.join(\";\");\n  };\n  const seriesMap = /* @__PURE__ */ new Map();\n  let idx = 0;\n  for (const s of series) {\n    const key = generateKey(s.type, s.properties, oldOptsSeries?.[idx]);\n    if (!seriesMap.has(key)) {\n      seriesMap.set(key, []);\n    }\n    seriesMap.get(key)?.push([s, idx++]);\n  }\n  const optsMap = /* @__PURE__ */ new Map();\n  for (const o of optSeries) {\n    const key = generateKey(o.type, o, o);\n    if (!optsMap.has(key)) {\n      optsMap.set(key, []);\n    }\n    optsMap.get(key)?.push(o);\n  }\n  const overlap = [...seriesMap.keys()].some((k) => optsMap.has(k));\n  if (!overlap) {\n    return { status: \"no-overlap\", oldKeys: seriesMap.keys(), newKeys: optsMap.keys() };\n  }\n  const changes = [];\n  let targetIdx = -1;\n  for (const [key, optArray] of optsMap.entries()) {\n    for (const opts of optArray) {\n      targetIdx++;\n      const seriesArray = seriesMap.get(key);\n      if (seriesArray == null || seriesArray.length < 1) {\n        changes.push({ opts, idx: targetIdx, status: \"add\" });\n        seriesMap.delete(key);\n        continue;\n      }\n      const [outputSeries, outputIdx] = seriesArray.shift();\n      const previousOpts = oldOptsSeries?.[outputIdx] ?? {};\n      const diff2 = jsonDiff(previousOpts, opts ?? {});\n      const { groupIndex, stackIndex } = diff2?.seriesGrouping ?? {};\n      if (groupIndex != null || stackIndex != null) {\n        changes.push({ opts, series: outputSeries, diff: diff2, idx: outputIdx, status: \"series-grouping\" });\n      } else if (diff2) {\n        changes.push({ opts, series: outputSeries, diff: diff2, idx: outputIdx, status: \"update\" });\n      } else {\n        changes.push({ opts, series: outputSeries, idx: outputIdx, status: \"no-op\" });\n      }\n      if (seriesArray.length === 0) {\n        seriesMap.delete(key);\n      }\n    }\n  }\n  for (const seriesArray of seriesMap.values()) {\n    for (const [outputSeries, outputIdx] of seriesArray) {\n      changes.push({ series: outputSeries, idx: outputIdx, status: \"remove\" });\n    }\n  }\n  return { status: \"overlap\", changes };\n}\n\n// packages/ag-charts-community/src/chart/mapping/types.ts\nfunction optionsType(input) {\n  const { series } = input;\n  if (!series)\n    return;\n  return series[0]?.type ?? \"line\";\n}\nfunction isAgCartesianChartOptions(input) {\n  const specifiedType = optionsType(input);\n  if (specifiedType == null) {\n    return false;\n  }\n  return chartTypes.isCartesian(specifiedType) || isEnterpriseCartesian(specifiedType);\n}\nfunction isAgPolarChartOptions(input) {\n  const specifiedType = optionsType(input);\n  if (specifiedType == null) {\n    return false;\n  }\n  if (specifiedType === \"polar\") {\n    Logger.warnOnce(`type '${specifiedType}' is deprecated, use a series type instead`);\n    return true;\n  }\n  return chartTypes.isPolar(specifiedType) || isEnterprisePolar(specifiedType);\n}\nfunction isAgHierarchyChartOptions(input) {\n  const specifiedType = optionsType(input);\n  if (specifiedType == null) {\n    return false;\n  }\n  if (specifiedType === \"hierarchy\") {\n    Logger.warnOnce(`type '${specifiedType}' is deprecated, use a series type instead`);\n    return true;\n  }\n  return chartTypes.isHierarchy(specifiedType) || isEnterpriseHierarchy(specifiedType);\n}\nfunction isAgTopologyChartOptions(input) {\n  const specifiedType = optionsType(input);\n  if (specifiedType == null) {\n    return false;\n  }\n  if (specifiedType === \"topology\") {\n    Logger.warnOnce(`type '${specifiedType}' is deprecated, use a series type instead`);\n    return true;\n  }\n  return chartTypes.isTopology(specifiedType) || isEnterpriseTopology(specifiedType);\n}\nfunction isAgFlowProportionChartOptions(input) {\n  const specifiedType = optionsType(input);\n  if (specifiedType == null) {\n    return false;\n  }\n  if (specifiedType === \"flow-proportion\") {\n    Logger.warnOnce(`type '${specifiedType}' is deprecated, use a series type instead`);\n    return true;\n  }\n  return chartTypes.isFlowProportion(specifiedType) || isEnterpriseFlowProportion(specifiedType);\n}\nfunction isAgStandaloneChartOptions(input) {\n  const specifiedType = optionsType(input);\n  if (specifiedType == null) {\n    return false;\n  }\n  if (specifiedType === \"standalone\") {\n    Logger.warnOnce(`type '${specifiedType}' is deprecated, use a series type instead`);\n    return true;\n  }\n  return chartTypes.isStandalone(specifiedType) || isEnterpriseStandalone(specifiedType);\n}\nfunction isAgGaugeChartOptions(input) {\n  const specifiedType = optionsType(input);\n  if (specifiedType == null) {\n    return false;\n  }\n  if (specifiedType === \"gauge\") {\n    Logger.warnOnce(`type '${specifiedType}' is deprecated, use a series type instead`);\n    return true;\n  }\n  return chartTypes.isGauge(specifiedType) || isEnterpriseGauge(specifiedType);\n}\nfunction isAgPolarChartOptionsWithSeriesBasedLegend(input) {\n  const specifiedType = optionsType(input);\n  return isAgPolarChartOptions(input) && specifiedType !== \"pie\" && specifiedType !== \"donut\";\n}\nfunction isSeriesOptionType(input) {\n  if (input == null) {\n    return false;\n  }\n  return chartTypes.has(input);\n}\nfunction isAxisOptionType(input) {\n  if (input == null) {\n    return false;\n  }\n  return axisRegistry.has(input);\n}\n\n// packages/ag-charts-community/src/chart/modulesManager.ts\nvar ModulesManager = class extends ModuleMap {\n  applyOptions(options) {\n    for (const m of this.moduleMap.values()) {\n      if (m.module.optionsKey in options && isProperties(m.moduleInstance)) {\n        m.moduleInstance.set(options[m.module.optionsKey]);\n      }\n    }\n  }\n  *legends() {\n    for (const { module, moduleInstance } of this.moduleMap.values()) {\n      if (module.type !== \"legend\")\n        continue;\n      yield {\n        legendType: module.identifier,\n        legend: moduleInstance\n      };\n    }\n  }\n};\n\n// packages/ag-charts-community/src/chart/overlay/overlay.ts\nvar DEFAULT_OVERLAY_CLASS = \"ag-chart-overlay\";\nvar DEFAULT_OVERLAY_DARK_CLASS = \"ag-chart-dark-overlay\";\nvar Overlay = class extends BaseProperties {\n  constructor(className, defaultMessageId) {\n    super();\n    this.className = className;\n    this.defaultMessageId = defaultMessageId;\n  }\n  getText(localeManager) {\n    return localeManager.t(this.text ?? this.defaultMessageId);\n  }\n  getElement(animationManager, localeManager, rect) {\n    this.content?.remove();\n    this.focusBox = rect;\n    if (this.renderer) {\n      const htmlContent = this.renderer();\n      if (htmlContent instanceof HTMLElement) {\n        this.content = htmlContent;\n      } else {\n        const tempDiv = createElement(\"div\");\n        tempDiv.innerHTML = htmlContent;\n        this.content = tempDiv.firstElementChild;\n      }\n    } else {\n      const content = createElement(\"div\", {\n        display: \"flex\",\n        alignItems: \"center\",\n        justifyContent: \"center\",\n        boxSizing: \"border-box\",\n        height: \"100%\",\n        margin: \"8px\",\n        font: \"12px Verdana, sans-serif\"\n      });\n      content.innerText = this.getText(localeManager);\n      this.content = content;\n      animationManager?.animate({\n        from: 0,\n        to: 1,\n        id: \"overlay\",\n        phase: \"add\",\n        groupId: \"opacity\",\n        onUpdate(value) {\n          content.style.opacity = String(value);\n        },\n        onStop() {\n          content.style.opacity = \"1\";\n        }\n      });\n    }\n    return this.content;\n  }\n  removeElement(cleanup = () => this.content?.remove(), animationManager) {\n    if (!this.content)\n      return;\n    if (animationManager) {\n      const { content } = this;\n      animationManager.animate({\n        from: 1,\n        to: 0,\n        phase: \"remove\",\n        id: \"overlay\",\n        groupId: \"opacity\",\n        onUpdate(value) {\n          content.style.opacity = String(value);\n        },\n        onStop() {\n          cleanup?.();\n        }\n      });\n    } else {\n      cleanup?.();\n    }\n    this.content = void 0;\n    this.focusBox = void 0;\n  }\n};\n__decorateClass([\n  Validate(STRING, { optional: true })\n], Overlay.prototype, \"text\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], Overlay.prototype, \"renderer\", 2);\n\n// packages/ag-charts-community/src/chart/overlay/chartOverlays.ts\nvar ChartOverlays = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.darkTheme = false;\n    this.loading = new Overlay(\"ag-chart-loading-overlay\", \"overlayLoadingData\");\n    this.noData = new Overlay(\"ag-chart-no-data-overlay\", \"overlayNoData\");\n    this.noVisibleSeries = new Overlay(\"ag-chart-no-visible-series\", \"overlayNoVisibleSeries\");\n  }\n  getFocusInfo(localeManager) {\n    for (const overlay of [this.loading, this.noData, this.noVisibleSeries]) {\n      if (overlay.focusBox !== void 0) {\n        return { text: overlay.getText(localeManager), rect: overlay.focusBox };\n      }\n    }\n    return void 0;\n  }\n  destroy() {\n    this.loading.removeElement();\n    this.noData.removeElement();\n    this.noVisibleSeries.removeElement();\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], ChartOverlays.prototype, \"darkTheme\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], ChartOverlays.prototype, \"loading\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], ChartOverlays.prototype, \"noData\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], ChartOverlays.prototype, \"noVisibleSeries\", 2);\n\n// packages/ag-charts-community/src/chart/overlay/loadingSpinner.ts\nfunction getLoadingSpinner(text, defaultDuration) {\n  const { animationDuration } = PHASE_METADATA[\"add\"];\n  const duration = animationDuration * defaultDuration;\n  const container = createElement(\"div\", `${DEFAULT_OVERLAY_CLASS}--loading`, {\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    flexDirection: \"column\",\n    height: \"100%\",\n    boxSizing: \"border-box\",\n    font: \"13px Verdana, sans-serif\",\n    // FONT_SIZE.MEDIUM\n    userSelect: \"none\",\n    animation: `ag-charts-loading ${duration}ms linear 50ms both`\n  });\n  const matrix = createElement(\"span\", {\n    width: \"45px\",\n    height: \"40px\",\n    backgroundImage: [\n      \"linear-gradient(#0000 calc(1 * 100% / 6), #ccc 0 calc(3 * 100% / 6), #0000 0), \",\n      \"linear-gradient(#0000 calc(2 * 100% / 6), #ccc 0 calc(4 * 100% / 6), #0000 0), \",\n      \"linear-gradient(#0000 calc(3 * 100% / 6), #ccc 0 calc(5 * 100% / 6), #0000 0)\"\n    ].join(\"\"),\n    backgroundSize: \"10px 400%\",\n    backgroundRepeat: \"no-repeat\",\n    animation: \"ag-charts-loading-matrix 1s infinite linear\"\n  });\n  const label = createElement(\"p\", { marginTop: \"1em\" });\n  label.innerText = text;\n  const background = createElement(\"div\", `${DEFAULT_OVERLAY_CLASS}__loading-background`, {\n    position: \"absolute\",\n    inset: \"0\",\n    opacity: \"0.5\",\n    zIndex: \"-1\"\n  });\n  const animationStyles = createElement(\"style\");\n  animationStyles.innerText = [\n    \"@keyframes ag-charts-loading { from { opacity: 0 } to { opacity: 1 } }\",\n    \"@keyframes ag-charts-loading-matrix {\",\n    \"0% { background-position: 0% 0%, 50% 0%, 100% 0%; }\",\n    \"100% { background-position: 0% 100%, 50% 100%, 100% 100%; }\",\n    \"}\"\n  ].join(\" \");\n  container.replaceChildren(animationStyles, matrix, label, background);\n  return container;\n}\n\n// packages/ag-charts-community/src/chart/series/series.ts\nvar SeriesNodePickMode = /* @__PURE__ */ ((SeriesNodePickMode2) => {\n  SeriesNodePickMode2[SeriesNodePickMode2[\"EXACT_SHAPE_MATCH\"] = 0] = \"EXACT_SHAPE_MATCH\";\n  SeriesNodePickMode2[SeriesNodePickMode2[\"NEAREST_NODE\"] = 1] = \"NEAREST_NODE\";\n  SeriesNodePickMode2[SeriesNodePickMode2[\"AXIS_ALIGNED\"] = 2] = \"AXIS_ALIGNED\";\n  return SeriesNodePickMode2;\n})(SeriesNodePickMode || {});\nvar CROSS_FILTER_MARKER_FILL_OPACITY_FACTOR = 0.25;\nvar CROSS_FILTER_MARKER_STROKE_OPACITY_FACTOR = 0.125;\nvar SeriesNodeEvent = class {\n  constructor(type, event, { datum }, series) {\n    this.type = type;\n    this.event = event;\n    this.datum = datum;\n    this.seriesId = series.id;\n  }\n};\nvar SeriesGroupingChangedEvent = class {\n  constructor(series, seriesGrouping, oldGrouping) {\n    this.series = series;\n    this.seriesGrouping = seriesGrouping;\n    this.oldGrouping = oldGrouping;\n    this.type = \"groupingChanged\";\n  }\n};\nvar Series = class extends Observable {\n  constructor(seriesOpts) {\n    super();\n    this.destroyFns = [];\n    this.seriesGrouping = void 0;\n    this.NodeEvent = SeriesNodeEvent;\n    this.internalId = createId(this);\n    // The group node that contains all the nodes used to render this series.\n    this.rootGroup = new Group({ name: \"seriesRoot\", isVirtual: true });\n    this.axes = {\n      [\"x\" /* X */]: void 0,\n      [\"y\" /* Y */]: void 0\n    };\n    this.directions = [\"x\" /* X */, \"y\" /* Y */];\n    // Flag to determine if we should recalculate node data.\n    this.nodeDataRefresh = true;\n    this.moduleMap = new ModuleMap();\n    this._declarationOrder = -1;\n    this.seriesListeners = new Listeners();\n    this._pickNodeCache = new LRUCache();\n    const {\n      moduleCtx,\n      pickModes,\n      directionKeys = {},\n      directionNames = {},\n      contentGroupVirtual = true,\n      canHaveAxes = false\n    } = seriesOpts;\n    this.ctx = moduleCtx;\n    this.directionKeys = directionKeys;\n    this.directionNames = directionNames;\n    this.canHaveAxes = canHaveAxes;\n    this.contentGroup = this.rootGroup.appendChild(\n      new TranslatableGroup({\n        name: `${this.internalId}-content`,\n        isVirtual: contentGroupVirtual,\n        zIndex: 4 /* SERIES_LAYER */,\n        zIndexSubOrder: this.getGroupZIndexSubOrder(\"data\")\n      })\n    );\n    this.highlightGroup = new TranslatableGroup({\n      name: `${this.internalId}-highlight`,\n      isVirtual: contentGroupVirtual,\n      zIndex: 4 /* SERIES_LAYER */,\n      zIndexSubOrder: this.getGroupZIndexSubOrder(\"highlight\")\n    });\n    this.highlightNode = this.highlightGroup.appendChild(new Group({ name: \"highlightNode\", zIndex: 0 }));\n    this.highlightLabel = this.highlightGroup.appendChild(new Group({ name: \"highlightLabel\", zIndex: 10 }));\n    this.pickModes = pickModes;\n    this.labelGroup = this.rootGroup.appendChild(\n      new TranslatableGroup({\n        name: `${this.internalId}-series-labels`,\n        zIndex: 14 /* SERIES_LABEL */\n      })\n    );\n    this.annotationGroup = new Group({\n      name: `${this.id}-annotation`,\n      isVirtual: contentGroupVirtual,\n      zIndex: 4 /* SERIES_LAYER */,\n      zIndexSubOrder: this.getGroupZIndexSubOrder(\"annotation\")\n    });\n  }\n  get pickModeAxis() {\n    return \"main\";\n  }\n  get id() {\n    return this.properties?.id ?? this.internalId;\n  }\n  get type() {\n    return this.constructor.type ?? \"\";\n  }\n  get data() {\n    return this._data ?? this._chartData;\n  }\n  set visible(value) {\n    this.properties.visible = value;\n    this.visibleMaybeChanged();\n  }\n  get visible() {\n    return this.properties.visible;\n  }\n  get hasData() {\n    return this.data != null && this.data.length > 0;\n  }\n  get tooltipEnabled() {\n    return this.properties.tooltip?.enabled ?? false;\n  }\n  onDataChange() {\n    this.nodeDataRefresh = true;\n    this._pickNodeCache.clear();\n  }\n  setOptionsData(input) {\n    this._data = input;\n    this.onDataChange();\n  }\n  setChartData(input) {\n    this._chartData = input;\n    if (this.data === input) {\n      this.onDataChange();\n    }\n  }\n  onSeriesGroupingChange(prev, next) {\n    const { internalId, type, visible } = this;\n    if (prev) {\n      this.ctx.seriesStateManager.deregisterSeries(this);\n    }\n    if (next) {\n      this.ctx.seriesStateManager.registerSeries({ internalId, type, visible, seriesGrouping: next });\n    }\n    this.fireEvent(new SeriesGroupingChangedEvent(this, next, prev));\n  }\n  getBandScalePadding() {\n    return { inner: 1, outer: 0 };\n  }\n  getGroupZIndexSubOrder(type, subIndex = 0) {\n    let mainAdjust = 0;\n    switch (type) {\n      case \"data\":\n      case \"paths\":\n        break;\n      case \"labels\":\n        mainAdjust += 2e4;\n        break;\n      case \"marker\":\n        mainAdjust += 1e4;\n        break;\n      case \"highlight\":\n        subIndex += 15e3;\n        break;\n      case \"annotation\":\n        mainAdjust += 15e3;\n        break;\n    }\n    const main = () => this._declarationOrder + mainAdjust;\n    return [main, subIndex];\n  }\n  addListener(type, listener) {\n    return this.seriesListeners.addListener(type, listener);\n  }\n  dispatch(type, event) {\n    this.seriesListeners.dispatch(type, event);\n  }\n  addChartEventListeners() {\n    return;\n  }\n  destroy() {\n    this.destroyFns.forEach((f) => f());\n    this.destroyFns = [];\n    this.ctx.seriesStateManager.deregisterSeries(this);\n  }\n  getDirectionValues(direction, properties) {\n    const resolvedDirection = this.resolveKeyDirection(direction);\n    const keys = properties?.[resolvedDirection];\n    const values = [];\n    if (!keys) {\n      return values;\n    }\n    const addValues = (...items) => {\n      for (const value of items) {\n        if (Array.isArray(value)) {\n          addValues(...value);\n        } else if (typeof value === \"object\") {\n          addValues(...Object.values(value));\n        } else {\n          values.push(value);\n        }\n      }\n    };\n    addValues(...keys.map((key) => this.properties[key]));\n    return values;\n  }\n  getKeys(direction) {\n    return this.getDirectionValues(direction, this.directionKeys);\n  }\n  getKeyProperties(direction) {\n    return this.directionKeys[this.resolveKeyDirection(direction)] ?? [];\n  }\n  getNames(direction) {\n    return this.getDirectionValues(direction, this.directionNames);\n  }\n  resolveKeyDirection(direction) {\n    return direction;\n  }\n  // The union of the series domain ('community') and series-option domains ('enterprise').\n  getDomain(direction) {\n    const seriesDomain = this.getSeriesDomain(direction);\n    const moduleDomains = this.moduleMap.mapModules((module) => module.getDomain(direction));\n    return seriesDomain.concat(moduleDomains.flat());\n  }\n  // Indicate that something external changed and we should recalculate nodeData.\n  markNodeDataDirty() {\n    this.nodeDataRefresh = true;\n    this._pickNodeCache.clear();\n    this.visibleMaybeChanged();\n  }\n  visibleMaybeChanged() {\n    this.ctx.seriesStateManager.updateSeries(this);\n  }\n  getOpacity() {\n    const defaultOpacity = 1;\n    const { dimOpacity = 1, enabled = true } = this.properties.highlightStyle.series;\n    if (!enabled || dimOpacity === defaultOpacity) {\n      return defaultOpacity;\n    }\n    switch (this.isItemIdHighlighted()) {\n      case 0 /* None */:\n      case 1 /* This */:\n        return defaultOpacity;\n      case 2 /* Other */:\n      default:\n        return dimOpacity;\n    }\n  }\n  getStrokeWidth(defaultStrokeWidth) {\n    const { strokeWidth, enabled = true } = this.properties.highlightStyle.series;\n    if (!enabled || strokeWidth === void 0) {\n      return defaultStrokeWidth;\n    }\n    switch (this.isItemIdHighlighted()) {\n      case 1 /* This */:\n        return strokeWidth;\n      case 0 /* None */:\n      case 2 /* Other */:\n        return defaultStrokeWidth;\n    }\n  }\n  isItemIdHighlighted() {\n    const series = this.ctx.highlightManager?.getActiveHighlight()?.series;\n    if (series == null) {\n      return 0 /* None */;\n    }\n    if (series !== this) {\n      return 2 /* Other */;\n    }\n    return 1 /* This */;\n  }\n  getModuleTooltipParams() {\n    return this.moduleMap.mapModules((module) => module.getTooltipParams()).reduce((total, current) => Object.assign(total, current), {});\n  }\n  pickNode(point, intent, exactMatchOnly = false) {\n    const { pickModes, pickModeAxis, visible, rootGroup } = this;\n    if (!visible || !rootGroup.visible)\n      return;\n    if (intent === \"highlight\" && !this.properties.highlight.enabled)\n      return;\n    if (intent === \"highlight-tooltip\" && !this.properties.highlight.enabled)\n      return;\n    let maxDistance = Infinity;\n    if (intent === \"tooltip\" || intent === \"highlight-tooltip\") {\n      const { tooltip } = this.properties;\n      maxDistance = typeof tooltip.range === \"number\" ? tooltip.range : Infinity;\n      exactMatchOnly || (exactMatchOnly = tooltip.range === \"exact\");\n    } else if (intent === \"event\" || intent === \"context-menu\") {\n      const { nodeClickRange } = this.properties;\n      maxDistance = typeof nodeClickRange === \"number\" ? nodeClickRange : Infinity;\n      exactMatchOnly || (exactMatchOnly = nodeClickRange === \"exact\");\n    }\n    const selectedPickModes = pickModes.filter(\n      (m) => !exactMatchOnly || m === 0 /* EXACT_SHAPE_MATCH */\n    );\n    const { x, y } = point;\n    const key = JSON.stringify({ x, y, maxDistance, selectedPickModes });\n    if (this._pickNodeCache.has(key)) {\n      return this._pickNodeCache.get(key);\n    }\n    for (const pickMode of selectedPickModes) {\n      let match;\n      switch (pickMode) {\n        case 0 /* EXACT_SHAPE_MATCH */:\n          match = this.pickNodeExactShape(point);\n          break;\n        case 1 /* NEAREST_NODE */:\n          match = this.pickNodeClosestDatum(point);\n          break;\n        case 2 /* AXIS_ALIGNED */:\n          match = pickMode != null ? this.pickNodeMainAxisFirst(point, pickModeAxis === \"main-category\") : void 0;\n          break;\n      }\n      if (match && match.distance <= maxDistance) {\n        return this._pickNodeCache.set(key, { pickMode, match: match.datum, distance: match.distance });\n      }\n    }\n    return this._pickNodeCache.set(key, void 0);\n  }\n  pickNodeExactShape(point) {\n    const match = this.contentGroup.pickNode(point.x, point.y);\n    if (match && match.datum.missing !== true) {\n      return { datum: match.datum, distance: 0 };\n    }\n    return void 0;\n  }\n  pickNodeClosestDatum(_point) {\n    throw new Error(\"AG Charts - Series.pickNodeClosestDatum() not implemented\");\n  }\n  pickNodeNearestDistantObject(point, items) {\n    const match = nearestSquared(point.x, point.y, items);\n    if (match.nearest !== void 0 && match.nearest.datum.missing !== true) {\n      return { datum: match.nearest.datum, distance: Math.sqrt(match.distanceSquared) };\n    }\n    return void 0;\n  }\n  pickNodeMainAxisFirst(_point, _requireCategoryAxis) {\n    throw new Error(\"AG Charts - Series.pickNodeMainAxisFirst() not implemented\");\n  }\n  fireNodeClickEvent(event, datum) {\n    this.fireEvent(new this.NodeEvent(\"nodeClick\", event, datum, this));\n  }\n  fireNodeDoubleClickEvent(event, datum) {\n    this.fireEvent(new this.NodeEvent(\"nodeDoubleClick\", event, datum, this));\n  }\n  createNodeContextMenuActionEvent(event, datum) {\n    return new this.NodeEvent(\"nodeContextMenuAction\", event, datum, this);\n  }\n  toggleSeriesItem(itemId, enabled) {\n    this.visible = enabled;\n    this.nodeDataRefresh = true;\n    this._pickNodeCache.clear();\n    this.dispatch(\"visibility-changed\", { itemId, enabled });\n  }\n  isEnabled() {\n    return this.visible;\n  }\n  getModuleMap() {\n    return this.moduleMap;\n  }\n  createModuleContext() {\n    return { ...this.ctx, series: this };\n  }\n  getLabelText(label, params, defaultFormatter = String) {\n    if (label.formatter) {\n      return this.ctx.callbackCache.call(label.formatter, { seriesId: this.id, ...params }) ?? defaultFormatter(params.value);\n    }\n    return defaultFormatter(params.value);\n  }\n  getMarkerStyle(marker, params, defaultStyle = marker.getStyle()) {\n    const defaultSize = { size: params.datum.point?.size ?? 0 };\n    const markerStyle = mergeDefaults(defaultSize, defaultStyle);\n    if (marker.itemStyler) {\n      const style = this.ctx.callbackCache.call(marker.itemStyler, {\n        seriesId: this.id,\n        ...markerStyle,\n        ...params,\n        datum: params.datum.datum\n      });\n      return mergeDefaults(style, markerStyle);\n    }\n    return markerStyle;\n  }\n  updateMarkerStyle(markerNode, marker, params, defaultStyle = marker.getStyle(), { applyTranslation = true, selected = true } = {}) {\n    const { point } = params.datum;\n    const activeStyle = this.getMarkerStyle(marker, params, defaultStyle);\n    const visible = this.visible && activeStyle.size > 0 && point && !isNaN(point.x) && !isNaN(point.y);\n    if (applyTranslation) {\n      markerNode.setProperties({ visible, ...activeStyle, translationX: point?.x, translationY: point?.y });\n    } else {\n      markerNode.setProperties({ visible, ...activeStyle });\n    }\n    if (!selected) {\n      markerNode.fillOpacity *= CROSS_FILTER_MARKER_FILL_OPACITY_FACTOR;\n      markerNode.strokeOpacity *= CROSS_FILTER_MARKER_STROKE_OPACITY_FACTOR;\n    }\n    if (typeof marker.shape === \"function\" && !markerNode.dirtyPath) {\n      markerNode.path.clear(true);\n      markerNode.updatePath();\n      markerNode.checkPathDirty();\n      const bb = markerNode.getBBox();\n      if (point !== void 0 && bb.isFinite()) {\n        const center2 = bb.computeCenter();\n        const [dx, dy] = [\"x\", \"y\"].map(\n          (key) => (activeStyle.strokeWidth ?? 0) + Math.abs(center2[key] - point[key])\n        );\n        const customSize = Math.max(bb.width + dx, bb.height + dy);\n        point.focusSize = customSize;\n      }\n    }\n  }\n  getMinRects(_width, _height) {\n    return;\n  }\n  get nodeDataDependencies() {\n    return this._nodeDataDependencies ?? { seriesRectWidth: NaN, seriesRectHeight: NaN };\n  }\n  checkResize(newSeriesRect) {\n    const { width: seriesRectWidth, height: seriesRectHeight } = newSeriesRect ?? { width: NaN, height: NaN };\n    const newNodeDataDependencies = newSeriesRect ? { seriesRectWidth, seriesRectHeight } : void 0;\n    const resize = jsonDiff(this.nodeDataDependencies, newNodeDataDependencies) != null;\n    if (resize) {\n      this._nodeDataDependencies = newNodeDataDependencies;\n      this.markNodeDataDirty();\n    }\n    return resize;\n  }\n  pickFocus(_opts) {\n    return void 0;\n  }\n};\nSeries.highlightedZIndex = 1e12;\n__decorateClass([\n  ActionOnSet({\n    changeValue: function(newVal, oldVal) {\n      this.onSeriesGroupingChange(oldVal, newVal);\n    }\n  })\n], Series.prototype, \"seriesGrouping\", 2);\n\n// packages/ag-charts-community/src/chart/keyboardUtil.ts\nfunction computeCenter(bboxOrPath) {\n  if (bboxOrPath == null)\n    return;\n  if (bboxOrPath instanceof BBox) {\n    return bboxOrPath.computeCenter();\n  }\n  return Transformable.toCanvas(bboxOrPath).computeCenter();\n}\nfunction drawPickedFocus(focusIndicator, pick) {\n  const { bounds, showFocusBox } = pick;\n  if (showFocusBox) {\n    focusIndicator?.updateBounds(bounds);\n  }\n}\nfunction makeKeyboardPointerEvent(focusIndicator, pick) {\n  drawPickedFocus(focusIndicator, pick);\n  const { x: offsetX, y: offsetY } = computeCenter(pick.bounds) ?? {};\n  if (offsetX !== void 0 && offsetY !== void 0) {\n    return { type: \"keyboard\", offsetX, offsetY };\n  }\n  return void 0;\n}\n\n// packages/ag-charts-community/src/chart/series/util.ts\nfunction convertValuesToScaleByDefs({\n  defs,\n  values,\n  xAxis,\n  yAxis\n}) {\n  if (!(xAxis && yAxis)) {\n    throw new Error(\"Axes must be defined\");\n  }\n  const result = {};\n  for (const [searchId, { def }] of defs) {\n    if (Object.hasOwn(values, searchId)) {\n      const { scale: scale2 } = def.type === \"key\" ? xAxis : yAxis;\n      result[searchId] = Math.round(scale2.convert(values[searchId]));\n    }\n  }\n  return result;\n}\nfunction pickNode(inputSeries, point, intent, exactMatchOnly) {\n  const reverseSeries = [...inputSeries].reverse();\n  let result;\n  for (const series of reverseSeries) {\n    if (!series.visible || !series.rootGroup.visible) {\n      continue;\n    }\n    const { match, distance: distance3 } = series.pickNode(point, intent, exactMatchOnly) ?? {};\n    if (!match || distance3 == null) {\n      continue;\n    }\n    if (!result || result.distance > distance3) {\n      result = { series, distance: distance3, datum: match };\n    }\n    if (distance3 === 0) {\n      break;\n    }\n  }\n  return result;\n}\n\n// packages/ag-charts-community/src/chart/series/seriesAreaManager.ts\nvar SeriesAreaAriaLabel = class {\n  constructor(element2, id) {\n    this.element = element2;\n    this.id = id;\n    element2.id = id;\n    element2.style.display = \"none\";\n    setAttribute(element2.parentElement, \"aria-labelledby\", id);\n  }\n  layoutComplete(event) {\n    this.element.parentElement.style.width = `${event.chart.width}px`;\n    this.element.parentElement.style.height = `${event.chart.height}px`;\n  }\n  set text(text) {\n    this.element.textContent = text;\n  }\n};\nvar SeriesAreaManager = class extends BaseManager {\n  constructor(chart) {\n    super();\n    this.chart = chart;\n    this.id = createId(this);\n    this.series = [];\n    this.highlight = {\n      /** Last received event that still needs to be applied. */\n      pendingHoverEvent: void 0,\n      /** Last applied event. */\n      appliedHoverEvent: void 0,\n      /** Last applied event, which has been temporarily stashed during the main chart update cycle. */\n      stashedHoverEvent: void 0\n    };\n    this.tooltip = {\n      lastHover: void 0\n    };\n    /**\n     * A11y Requirements for Tooltip/Highlight (see AG-13051 for details):\n     *\n     *   -   When the series-area is blurred, always the mouse to update the tooltip/highlight.\n     *\n     *   -   When the series-area receives a `focus` event, use `:focus-visible` to guess the input device.\n     *       (this is decided by the browser).\n     *\n     *   -   For keyboard users, `focus` and `keydown` events always updates & shows the tooltip/highlight on\n     *       the currently (or newly) focused datum.\n     *\n     *   -   For keyboard users, `mousemove` events update the tooltip/highlight iff `pickNode` finds a match\n     *       for the mouse event offsets.\n     */\n    this.hoverDevice = \"mouse\";\n    this.focus = {\n      sortedSeries: [],\n      series: void 0,\n      seriesIndex: 0,\n      datumIndex: 0,\n      datum: void 0\n    };\n    this.hoverScheduler = debouncedAnimationFrame(() => {\n      if (!this.tooltip.lastHover && !this.highlight.pendingHoverEvent)\n        return;\n      if (this.chart.getUpdateType() <= 4 /* SERIES_UPDATE */) {\n        this.hoverScheduler.schedule();\n        return;\n      }\n      if (this.highlight.pendingHoverEvent) {\n        this.handleHoverHighlight(false);\n      }\n      if (this.tooltip.lastHover) {\n        this.handleHoverTooltip(this.tooltip.lastHover, false);\n      }\n    });\n    const seriesRegion = chart.ctx.regionManager.getRegion(\"series\" /* SERIES */);\n    const horizontalAxesRegion = chart.ctx.regionManager.getRegion(\"horizontal-axes\" /* HORIZONTAL_AXES */);\n    const verticalAxesRegion = chart.ctx.regionManager.getRegion(\"vertical-axes\" /* VERTICAL_AXES */);\n    const mouseMoveStates = 32 /* Default */ | 8 /* Annotations */ | 1 /* AnnotationsSelected */;\n    const keyState = 32 /* Default */ | 2 /* Animation */;\n    const labelEl = chart.ctx.domManager.addChild(\"series-area\", \"series-area-aria-label\");\n    this.ariaLabel = new SeriesAreaAriaLabel(labelEl, `${this.id}-aria-label`);\n    this.destroyFns.push(\n      () => chart.ctx.domManager.removeChild(\"series-area\", \"series-area-aria-label\"),\n      seriesRegion.addListener(\"contextmenu\", (event) => this.onContextMenu(event), 63 /* All */),\n      seriesRegion.addListener(\"drag\", (event) => this.onHoverLikeEvent(event), mouseMoveStates),\n      seriesRegion.addListener(\"hover\", (event) => this.onHover(event), mouseMoveStates),\n      seriesRegion.addListener(\"leave\", () => this.onLeave(), mouseMoveStates),\n      horizontalAxesRegion.addListener(\"hover\", (event) => this.onHover(event), mouseMoveStates),\n      horizontalAxesRegion.addListener(\"leave\", () => this.onLeave()),\n      verticalAxesRegion.addListener(\"hover\", (event) => this.onHover(event), mouseMoveStates),\n      verticalAxesRegion.addListener(\"leave\", () => this.onLeave()),\n      chart.ctx.animationManager.addListener(\"animation-start\", () => this.clearAll()),\n      chart.ctx.domManager.addListener(\"resize\", () => this.clearAll()),\n      chart.ctx.highlightManager.addListener(\"highlight-change\", (event) => this.changeHighlightDatum(event)),\n      chart.ctx.keyNavManager.addListener(\"blur\", () => this.onBlur()),\n      chart.ctx.keyNavManager.addListener(\"focus\", (event) => this.onFocus(event), keyState),\n      chart.ctx.keyNavManager.addListener(\"nav-hori\", (event) => this.onNavHori(event), keyState),\n      chart.ctx.keyNavManager.addListener(\"nav-vert\", (event) => this.onNavVert(event), keyState),\n      chart.ctx.keyNavManager.addListener(\"submit\", (event) => this.onSubmit(event), keyState),\n      chart.ctx.layoutManager.addListener(\"layout:complete\", (event) => this.layoutComplete(event)),\n      chart.ctx.regionManager.listenAll(\"click\", (event) => this.onClick(event)),\n      chart.ctx.regionManager.listenAll(\"dblclick\", (event) => this.onClick(event)),\n      chart.ctx.updateService.addListener(\"pre-scene-render\", () => this.preSceneRender()),\n      chart.ctx.zoomManager.addListener(\"zoom-change\", () => this.clearAll()),\n      chart.ctx.zoomManager.addListener(\"zoom-pan-start\", () => this.clearAll())\n    );\n  }\n  dataChanged() {\n    var _a;\n    (_a = this.highlight).stashedHoverEvent ?? (_a.stashedHoverEvent = this.highlight.appliedHoverEvent);\n    this.chart.ctx.tooltipManager.removeTooltip(this.id);\n    this.chart.ctx.focusIndicator.updateBounds(void 0);\n    this.clearHighlight();\n  }\n  preSceneRender() {\n    this.refreshFocus();\n    if (this.highlight.stashedHoverEvent != null) {\n      this.highlight.pendingHoverEvent = this.highlight.stashedHoverEvent;\n      this.highlight.stashedHoverEvent = void 0;\n      this.handleHoverHighlight(true);\n    }\n    if (this.tooltip.lastHover != null) {\n      this.handleHoverTooltip(this.tooltip.lastHover, true);\n    }\n  }\n  update(type, opts) {\n    this.chart.ctx.updateService.update(type, opts);\n  }\n  seriesChanged(series) {\n    this.focus.sortedSeries = [...series].sort((a, b) => {\n      let fpA = a.properties.focusPriority ?? Infinity;\n      let fpB = b.properties.focusPriority ?? Infinity;\n      if (fpA === fpB) {\n        [fpA, fpB] = [a._declarationOrder, b._declarationOrder];\n      }\n      if (fpA < fpB) {\n        return -1;\n      } else if (fpA > fpB) {\n        return 1;\n      }\n      return 0;\n    });\n    this.series = series;\n  }\n  layoutComplete(event) {\n    this.seriesRect = event.series.rect;\n    this.hoverRect = event.series.paddedRect;\n    this.ariaLabel.layoutComplete(event);\n  }\n  onContextMenu(event) {\n    const { Default: Default2, ContextMenu } = InteractionState;\n    let pickedNode;\n    let position;\n    if (this.chart.ctx.focusIndicator.isFocusVisible()) {\n      pickedNode = this.chart.ctx.highlightManager.getActiveHighlight();\n      if (pickedNode && this.seriesRect && pickedNode.midPoint) {\n        position = Transformable.toCanvasPoint(\n          pickedNode.series.contentGroup,\n          pickedNode.midPoint.x,\n          pickedNode.midPoint.y\n        );\n      }\n    } else if (this.chart.ctx.interactionManager.getState() & (Default2 | ContextMenu)) {\n      const match = pickNode(this.series, { x: event.regionOffsetX, y: event.regionOffsetY }, \"context-menu\");\n      if (match) {\n        this.chart.ctx.highlightManager.updateHighlight(this.id);\n        pickedNode = match.datum;\n      }\n    }\n    this.clearAll();\n    this.chart.ctx.contextMenuRegistry.dispatchContext(\"series\", event, { pickedNode }, position);\n  }\n  onLeave() {\n    this.chart.ctx.cursorManager.updateCursor(this.id);\n    if (!this.chart.ctx.focusIndicator.isFocusVisible())\n      this.clearAll();\n  }\n  onHover(event) {\n    this.hoverDevice = \"mouse\";\n    this.onHoverLikeEvent(event);\n  }\n  onHoverLikeEvent(event) {\n    if (excludesType(event, \"drag\")) {\n      this.tooltip.lastHover = event;\n    }\n    this.highlight.pendingHoverEvent = event;\n    this.hoverScheduler.schedule();\n    if (this.chart.ctx.interactionManager.getState() === 32 /* Default */) {\n      const { regionOffsetX, regionOffsetY } = event;\n      const found = pickNode(this.series, { x: regionOffsetX, y: regionOffsetY }, \"event\");\n      if (found?.series.hasEventListener(\"nodeClick\") || found?.series.hasEventListener(\"nodeDoubleClick\")) {\n        this.chart.ctx.cursorManager.updateCursor(this.id, \"pointer\");\n      } else {\n        this.chart.ctx.cursorManager.updateCursor(this.id);\n      }\n    }\n  }\n  onClick(event) {\n    this.hoverDevice = \"mouse\";\n    this.onHoverLikeEvent(event);\n    if (this.seriesRect?.containsPoint(event.offsetX, event.offsetY) && this.checkSeriesNodeClick(event)) {\n      this.update(4 /* SERIES_UPDATE */);\n      event.preventDefault();\n      return;\n    }\n    const newEvent = { type: event.type === \"click\" ? \"click\" : \"doubleClick\", event: event.sourceEvent };\n    this.chart.fireEvent(newEvent);\n  }\n  onFocus(event) {\n    this.hoverDevice = this.chart.ctx.focusIndicator.isFocusVisible() ? \"keyboard\" : \"mouse\";\n    this.handleFocus(0, 0);\n    event.preventDefault();\n  }\n  onBlur() {\n    this.hoverDevice = \"mouse\";\n    this.clearAll();\n  }\n  onNavVert(event) {\n    this.hoverDevice = \"keyboard\";\n    this.focus.seriesIndex += event.delta;\n    this.handleFocus(event.delta, 0);\n    event.preventDefault();\n  }\n  onNavHori(event) {\n    this.hoverDevice = \"keyboard\";\n    this.focus.datumIndex += event.delta;\n    this.handleFocus(0, event.delta);\n    event.preventDefault();\n  }\n  onSubmit(event) {\n    const { series, datum } = this.focus;\n    const sourceEvent = event.sourceEvent.sourceEvent;\n    if (series !== void 0 && datum !== void 0) {\n      series.fireNodeClickEvent(sourceEvent, datum);\n    } else {\n      this.chart.fireEvent({\n        type: \"click\",\n        event: sourceEvent\n      });\n    }\n    event.preventDefault();\n  }\n  checkSeriesNodeClick(event) {\n    let point = { x: event.regionOffsetX, y: event.regionOffsetY };\n    if (event.region !== \"series\") {\n      point = Transformable.fromCanvasPoint(this.chart.seriesRoot, event.offsetX, event.offsetY);\n    }\n    const result = pickNode(this.series, point, \"event\");\n    if (result == null)\n      return false;\n    if (event.type === \"click\") {\n      result.series.fireNodeClickEvent(event.sourceEvent, result.datum);\n      return true;\n    }\n    if (event.type === \"dblclick\") {\n      event.preventZoomDblClick = result.distance === 0;\n      result.series.fireNodeDoubleClickEvent(event.sourceEvent, result.datum);\n      return true;\n    }\n    return false;\n  }\n  refreshFocus() {\n    if (this.chart.ctx.focusIndicator.isFocusVisible()) {\n      this.handleSeriesFocus(0, 0);\n    }\n  }\n  handleFocus(seriesIndexDelta, datumIndexDelta) {\n    const overlayFocus = this.chart.overlays.getFocusInfo(this.chart.ctx.localeManager);\n    if (overlayFocus == null) {\n      this.handleSeriesFocus(seriesIndexDelta, datumIndexDelta);\n    } else {\n      this.chart.ctx.focusIndicator.updateBounds(overlayFocus.rect);\n    }\n  }\n  handleSeriesFocus(otherIndexDelta, datumIndexDelta) {\n    if (this.chart.chartType === \"hierarchy\") {\n      this.handleHierarchySeriesFocus(otherIndexDelta, datumIndexDelta);\n      return;\n    }\n    const { focus, seriesRect } = this;\n    const visibleSeries = focus.sortedSeries.filter((s) => s.visible);\n    if (visibleSeries.length === 0)\n      return;\n    focus.seriesIndex = clamp(0, focus.seriesIndex, visibleSeries.length - 1);\n    focus.series = visibleSeries[focus.seriesIndex];\n    const { datumIndex, seriesIndex: otherIndex } = focus;\n    const pick = focus.series.pickFocus({ datumIndex, datumIndexDelta, otherIndex, otherIndexDelta, seriesRect });\n    this.updatePickedFocus(pick);\n  }\n  handleHierarchySeriesFocus(otherIndexDelta, datumIndexDelta) {\n    this.focus.series = this.focus.sortedSeries[0];\n    const {\n      focus: { series, seriesIndex: otherIndex, datumIndex },\n      seriesRect\n    } = this;\n    if (series === void 0)\n      return;\n    const pick = series.pickFocus({ datumIndex, datumIndexDelta, otherIndex, otherIndexDelta, seriesRect });\n    this.updatePickedFocus(pick);\n  }\n  updatePickedFocus(pick) {\n    const { focus } = this;\n    if (pick === void 0 || focus.series === void 0)\n      return;\n    const { datum, datumIndex } = pick;\n    focus.datumIndex = datumIndex;\n    focus.datum = datum;\n    if (this.chart.ctx.focusIndicator.isFocusVisible()) {\n      this.chart.ctx.animationManager.reset();\n    }\n    const keyboardEvent = makeKeyboardPointerEvent(this.chart.ctx.focusIndicator, pick);\n    if (keyboardEvent !== void 0 && this.hoverDevice === \"keyboard\") {\n      this.tooltip.lastHover = void 0;\n      this.highlight.appliedHoverEvent = void 0;\n      this.highlight.pendingHoverEvent = void 0;\n      this.highlight.stashedHoverEvent = void 0;\n      const html = focus.series.getTooltipHtml(datum);\n      const meta = TooltipManager.makeTooltipMeta(keyboardEvent, datum);\n      this.chart.ctx.highlightManager.updateHighlight(this.id, datum);\n      this.chart.ctx.tooltipManager.updateTooltip(this.id, meta, html);\n      this.ariaLabel.text = this.getDatumAriaText(datum, html);\n    }\n  }\n  getDatumAriaText(datum, html) {\n    const description = html.ariaLabel;\n    return this.chart.ctx.localeManager.t(\"ariaAnnounceHoverDatum\", {\n      datum: datum.series.getDatumAriaText?.(datum, description) ?? description\n    });\n  }\n  clearHighlight() {\n    this.highlight.pendingHoverEvent = void 0;\n    this.highlight.appliedHoverEvent = void 0;\n    this.chart.ctx.highlightManager.updateHighlight(this.id);\n  }\n  clearTooltip() {\n    this.chart.ctx.tooltipManager.removeTooltip(this.id);\n    this.tooltip.lastHover = void 0;\n  }\n  clearAll() {\n    this.clearHighlight();\n    this.clearTooltip();\n    this.chart.ctx.focusIndicator.updateBounds(void 0);\n  }\n  handleHoverHighlight(redisplay) {\n    this.highlight.appliedHoverEvent = this.highlight.pendingHoverEvent;\n    this.highlight.pendingHoverEvent = void 0;\n    const event = this.highlight.appliedHoverEvent;\n    if (!event)\n      return;\n    const state = this.chart.ctx.interactionManager.getState();\n    if (state !== 32 /* Default */ && state !== 8 /* Annotations */ && state !== 1 /* AnnotationsSelected */)\n      return;\n    const { offsetX, offsetY } = event;\n    if (redisplay ? this.chart.ctx.animationManager.isActive() : !this.hoverRect?.containsPoint(offsetX, offsetY)) {\n      this.clearHighlight();\n      return;\n    }\n    let pickCoords = { x: event.regionOffsetX, y: event.regionOffsetY };\n    if (event.region !== \"series\") {\n      pickCoords = Transformable.fromCanvasPoint(this.chart.seriesRoot, offsetX, offsetY);\n    }\n    const { range: range3 } = this.chart.highlight;\n    const intent = range3 === \"tooltip\" ? \"highlight-tooltip\" : \"highlight\";\n    const found = pickNode(this.series, pickCoords, intent);\n    if (found) {\n      this.chart.ctx.highlightManager.updateHighlight(this.id, found.datum);\n      this.hoverDevice = \"mouse\";\n      return;\n    }\n    this.chart.ctx.highlightManager.updateHighlight(this.id);\n  }\n  handleHoverTooltip(event, redisplay) {\n    const state = this.chart.ctx.interactionManager.getState();\n    if (state !== 32 /* Default */ && state !== 8 /* Annotations */ && state !== 1 /* AnnotationsSelected */)\n      return;\n    const { offsetX, offsetY, targetElement, regionOffsetX, regionOffsetY } = event;\n    if (redisplay ? this.chart.ctx.animationManager.isActive() : !this.hoverRect?.containsPoint(offsetX, offsetY)) {\n      if (this.hoverDevice == \"mouse\")\n        this.clearTooltip();\n      return;\n    }\n    if (targetElement && this.chart.tooltip.interactive && this.chart.ctx.domManager.isManagedChildDOMElement(targetElement, \"canvas-overlay\", DEFAULT_TOOLTIP_CLASS)) {\n      return;\n    }\n    let pickCoords = { x: regionOffsetX, y: regionOffsetY };\n    if (event.region !== \"series\") {\n      pickCoords = Transformable.fromCanvasPoint(this.chart.seriesRoot, offsetX, offsetY);\n    }\n    const pick = pickNode(this.series, pickCoords, \"tooltip\");\n    if (!pick) {\n      if (this.hoverDevice == \"mouse\")\n        this.clearTooltip();\n      return;\n    }\n    this.hoverDevice = \"mouse\";\n    const html = pick.series.getTooltipHtml(pick.datum);\n    const tooltipEnabled = this.chart.tooltip.enabled && pick.series.tooltipEnabled;\n    const shouldUpdateTooltip = tooltipEnabled && html != null;\n    if (shouldUpdateTooltip) {\n      const meta = TooltipManager.makeTooltipMeta(event, pick.datum);\n      this.chart.ctx.tooltipManager.updateTooltip(this.id, meta, html);\n    }\n  }\n  changeHighlightDatum(event) {\n    const seriesToUpdate = /* @__PURE__ */ new Set();\n    const { series: newSeries = void 0, datum: newDatum } = event.currentHighlight ?? {};\n    const { series: lastSeries = void 0, datum: lastDatum } = event.previousHighlight ?? {};\n    if (lastSeries) {\n      seriesToUpdate.add(lastSeries);\n    }\n    if (newSeries) {\n      seriesToUpdate.add(newSeries);\n    }\n    if (lastSeries?.properties.cursor && lastDatum) {\n      this.chart.ctx.cursorManager.updateCursor(lastSeries.id);\n    }\n    if (newSeries?.properties.cursor && newSeries?.properties.cursor !== \"default\" && newDatum) {\n      this.chart.ctx.cursorManager.updateCursor(newSeries.id, newSeries.properties.cursor);\n    }\n    const updateAll = newSeries == null || lastSeries == null;\n    if (updateAll) {\n      this.update(4 /* SERIES_UPDATE */);\n    } else {\n      this.update(4 /* SERIES_UPDATE */, { seriesToUpdate });\n    }\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/seriesLayerManager.ts\nvar SERIES_THRESHOLD_FOR_AGGRESSIVE_LAYER_REDUCTION = 30;\nvar SeriesLayerManager = class {\n  constructor(seriesRoot, highlightRoot, annotationRoot) {\n    this.seriesRoot = seriesRoot;\n    this.highlightRoot = highlightRoot;\n    this.annotationRoot = annotationRoot;\n    this.groups = {};\n    this.series = {};\n    this.expectedSeriesCount = 1;\n    this.mode = \"normal\";\n  }\n  setSeriesCount(count) {\n    this.expectedSeriesCount = count;\n  }\n  requestGroup(seriesConfig) {\n    var _a, _b;\n    const {\n      internalId,\n      type,\n      rootGroup: seriesRootGroup,\n      highlightGroup: seriesHighlightGroup,\n      annotationGroup: seriesAnnotationGroup,\n      seriesGrouping\n    } = seriesConfig;\n    const { groupIndex = internalId } = seriesGrouping ?? {};\n    if (this.series[internalId] != null) {\n      throw new Error(`AG Charts - series already has an allocated layer: ${this.series[internalId]}`);\n    }\n    if (Object.keys(this.series).length === 0) {\n      this.mode = this.expectedSeriesCount >= SERIES_THRESHOLD_FOR_AGGRESSIVE_LAYER_REDUCTION ? \"aggressive-grouping\" : \"normal\";\n    }\n    (_a = this.groups)[type] ?? (_a[type] = {});\n    const lookupIndex = this.lookupIdx(groupIndex);\n    const groupInfo = (_b = this.groups[type])[lookupIndex] ?? (_b[lookupIndex] = {\n      type,\n      id: lookupIndex,\n      seriesIds: [],\n      group: this.seriesRoot.appendChild(\n        new Layer({\n          name: `${type}-content`,\n          zIndex: 4 /* SERIES_LAYER */,\n          zIndexSubOrder: seriesConfig.getGroupZIndexSubOrder(\"data\")\n        })\n      ),\n      highlight: this.highlightRoot.appendChild(\n        new Group({\n          name: `${type}-highlight`,\n          zIndex: 4 /* SERIES_LAYER */,\n          zIndexSubOrder: seriesConfig.getGroupZIndexSubOrder(\"highlight\")\n        })\n      ),\n      annotation: this.annotationRoot.appendChild(\n        new Group({\n          name: `${type}-annotation`,\n          zIndex: 4 /* SERIES_LAYER */,\n          zIndexSubOrder: seriesConfig.getGroupZIndexSubOrder(\"annotation\")\n        })\n      )\n    });\n    this.series[internalId] = { layerState: groupInfo, seriesConfig };\n    groupInfo.seriesIds.push(internalId);\n    groupInfo.group.appendChild(seriesRootGroup);\n    groupInfo.highlight.appendChild(seriesHighlightGroup);\n    groupInfo.annotation.appendChild(seriesAnnotationGroup);\n    return groupInfo.group;\n  }\n  changeGroup(seriesConfig) {\n    const { internalId, seriesGrouping, type, rootGroup, highlightGroup, annotationGroup, oldGrouping } = seriesConfig;\n    const { groupIndex = internalId } = seriesGrouping ?? {};\n    if (this.groups[type]?.[groupIndex]?.seriesIds.includes(internalId)) {\n      return;\n    }\n    if (this.series[internalId] != null) {\n      this.releaseGroup({\n        internalId,\n        seriesGrouping: oldGrouping,\n        type,\n        rootGroup,\n        highlightGroup,\n        annotationGroup\n      });\n    }\n    this.requestGroup(seriesConfig);\n  }\n  releaseGroup(seriesConfig) {\n    const { internalId, rootGroup, highlightGroup, annotationGroup, type } = seriesConfig;\n    if (this.series[internalId] == null) {\n      throw new Error(`AG Charts - series doesn't have an allocated layer: ${internalId}`);\n    }\n    const groupInfo = this.series[internalId]?.layerState;\n    if (groupInfo) {\n      groupInfo.seriesIds = groupInfo.seriesIds.filter((v) => v !== internalId);\n      groupInfo.group.removeChild(rootGroup);\n      groupInfo.highlight.removeChild(highlightGroup);\n      groupInfo.annotation.removeChild(annotationGroup);\n    }\n    if (groupInfo?.seriesIds.length === 0) {\n      this.seriesRoot.removeChild(groupInfo.group);\n      this.highlightRoot.removeChild(groupInfo.highlight);\n      this.annotationRoot.removeChild(groupInfo.annotation);\n      delete this.groups[groupInfo.type][groupInfo.id];\n      delete this.groups[type][internalId];\n    } else if (groupInfo?.seriesIds.length > 0) {\n      const leadSeriesConfig = this.series[groupInfo?.seriesIds?.[0]]?.seriesConfig;\n      groupInfo.group.zIndexSubOrder = leadSeriesConfig?.getGroupZIndexSubOrder(\"data\");\n      groupInfo.highlight.zIndexSubOrder = leadSeriesConfig?.getGroupZIndexSubOrder(\"highlight\");\n      groupInfo.annotation.zIndexSubOrder = leadSeriesConfig?.getGroupZIndexSubOrder(\"annotation\");\n    }\n    delete this.series[internalId];\n  }\n  lookupIdx(groupIndex) {\n    if (this.mode === \"normal\") {\n      return groupIndex;\n    }\n    if (typeof groupIndex === \"string\") {\n      groupIndex = Number(groupIndex.split(\"-\").at(-1));\n      if (!groupIndex) {\n        return 0;\n      }\n    }\n    return Math.floor(\n      clamp(0, groupIndex / this.expectedSeriesCount, 1) * SERIES_THRESHOLD_FOR_AGGRESSIVE_LAYER_REDUCTION\n    );\n  }\n  destroy() {\n    for (const groups of Object.values(this.groups)) {\n      for (const groupInfo of Object.values(groups)) {\n        this.seriesRoot.removeChild(groupInfo.group);\n        this.highlightRoot.removeChild(groupInfo.highlight);\n        this.annotationRoot.removeChild(groupInfo.annotation);\n      }\n    }\n    this.groups = {};\n    this.series = {};\n  }\n};\n\n// packages/ag-charts-community/src/chart/update/dataWindowProcessor.ts\nvar DataWindowProcessor = class {\n  constructor(chart, dataService, updateService, zoomManager) {\n    this.chart = chart;\n    this.dataService = dataService;\n    this.updateService = updateService;\n    this.zoomManager = zoomManager;\n    this.dirtyZoom = false;\n    this.dirtyDataSource = false;\n    this.lastAxisZooms = /* @__PURE__ */ new Map();\n    this.destroyFns = [];\n    this.destroyFns.push(\n      this.dataService.addListener(\"data-source-change\", () => this.onDataSourceChange()),\n      this.dataService.addListener(\"data-load\", () => this.onDataLoad()),\n      this.dataService.addListener(\"data-error\", () => this.onDataError()),\n      this.updateService.addListener(\"update-complete\", () => this.onUpdateComplete()),\n      this.zoomManager.addListener(\"zoom-change\", () => this.onZoomChange())\n    );\n  }\n  destroy() {\n    this.destroyFns.forEach((cb) => cb());\n  }\n  onDataLoad() {\n    this.updateService.update(1 /* UPDATE_DATA */);\n  }\n  onDataError() {\n    this.updateService.update(3 /* PERFORM_LAYOUT */);\n  }\n  onDataSourceChange() {\n    this.dirtyDataSource = true;\n  }\n  onUpdateComplete() {\n    if (!this.dirtyZoom && !this.dirtyDataSource)\n      return;\n    this.updateWindow().catch((e) => Logger.errorOnce(e));\n  }\n  onZoomChange() {\n    this.dirtyZoom = true;\n  }\n  async updateWindow() {\n    if (!this.dataService.isLazy())\n      return;\n    const axis = this.getValidAxis();\n    let window2;\n    let shouldRefresh = true;\n    if (axis) {\n      const zoom2 = this.zoomManager.getAxisZoom(axis.id);\n      window2 = this.getAxisWindow(axis, zoom2);\n      shouldRefresh = this.shouldRefresh(axis, zoom2);\n    }\n    this.dirtyZoom = false;\n    this.dirtyDataSource = false;\n    if (!shouldRefresh)\n      return;\n    this.dataService.load({ windowStart: window2?.min, windowEnd: window2?.max });\n  }\n  getValidAxis() {\n    return this.chart.axes.find((axis) => axis.type === \"time\");\n  }\n  shouldRefresh(axis, zoom2) {\n    if (this.dirtyDataSource)\n      return true;\n    if (!this.dirtyZoom)\n      return false;\n    const lastZoom = this.lastAxisZooms.get(axis.id);\n    if (lastZoom && zoom2.min === lastZoom.min && zoom2.max === lastZoom.max) {\n      return false;\n    }\n    this.lastAxisZooms.set(axis.id, zoom2);\n    return true;\n  }\n  getAxisWindow(axis, zoom2) {\n    const domain = axis.scale.getDomain?.();\n    if (!zoom2 || !domain || domain.length === 0 || isNaN(Number(domain[0])))\n      return;\n    const diff2 = Number(domain[1]) - Number(domain[0]);\n    const min = new Date(Number(domain[0]) + diff2 * zoom2.min);\n    const max = new Date(Number(domain[0]) + diff2 * zoom2.max);\n    return { min, max };\n  }\n};\n\n// packages/ag-charts-community/src/chart/update/overlaysProcessor.ts\nvar OverlaysProcessor = class {\n  constructor(chartLike, overlays, dataService, layoutManager, localeManager, animationManager, domManager) {\n    this.chartLike = chartLike;\n    this.overlays = overlays;\n    this.dataService = dataService;\n    this.layoutManager = layoutManager;\n    this.localeManager = localeManager;\n    this.animationManager = animationManager;\n    this.domManager = domManager;\n    this.destroyFns = [];\n    this.overlayElem = this.domManager.addChild(\"canvas-overlay\", \"overlay\");\n    this.overlayElem.role = \"status\";\n    this.overlayElem.ariaAtomic = \"false\";\n    this.overlayElem.ariaLive = \"polite\";\n    this.overlayElem.classList.toggle(DEFAULT_OVERLAY_CLASS);\n    this.destroyFns.push(this.layoutManager.addListener(\"layout:complete\", (e) => this.onLayoutComplete(e)));\n  }\n  destroy() {\n    this.destroyFns.forEach((cb) => cb());\n    this.domManager.removeStyles(\"overlays\");\n    this.domManager.removeChild(\"canvas-overlay\", \"overlay\");\n  }\n  onLayoutComplete({ series: { rect } }) {\n    const isLoading = this.dataService.isLoading();\n    const hasData = this.chartLike.series.some((s) => s.hasData);\n    const anySeriesVisible = this.chartLike.series.some((s) => s.visible);\n    if (this.overlays.darkTheme) {\n      this.overlayElem.classList.add(DEFAULT_OVERLAY_DARK_CLASS);\n    } else {\n      this.overlayElem.classList.remove(DEFAULT_OVERLAY_DARK_CLASS);\n    }\n    this.overlayElem.style.left = `${rect.x}px`;\n    this.overlayElem.style.top = `${rect.y}px`;\n    this.overlayElem.style.width = `${rect.width}px`;\n    this.overlayElem.style.height = `${rect.height}px`;\n    const loadingShown = isLoading;\n    const noDataShown = !isLoading && !hasData;\n    const noVisibleSeriesShown = hasData && !anySeriesVisible;\n    if (loadingShown) {\n      this.showOverlay(this.overlays.loading, rect);\n    } else {\n      this.hideOverlay(this.overlays.loading);\n    }\n    if (noDataShown) {\n      this.showOverlay(this.overlays.noData, rect);\n    } else {\n      this.hideOverlay(this.overlays.noData);\n    }\n    if (noVisibleSeriesShown) {\n      this.showOverlay(this.overlays.noVisibleSeries, rect);\n    } else {\n      this.hideOverlay(this.overlays.noVisibleSeries);\n    }\n    const shown = loadingShown || noDataShown || noVisibleSeriesShown;\n    setAttribute(this.overlayElem, \"aria-hidden\", !shown);\n  }\n  showOverlay(overlay, seriesRect) {\n    const element2 = overlay.getElement(this.animationManager, this.localeManager, seriesRect);\n    this.overlayElem.appendChild(element2);\n  }\n  hideOverlay(overlay) {\n    overlay.removeElement(() => {\n      this.overlayElem.innerText = \"\\xA0\";\n    }, this.animationManager);\n  }\n};\n\n// packages/ag-charts-community/src/chart/chart.ts\nvar debug = Debug.create(true, \"opts\");\nvar SeriesArea = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.padding = new Padding(0);\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], SeriesArea.prototype, \"clip\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], SeriesArea.prototype, \"padding\", 2);\nvar _Chart = class _Chart extends Observable {\n  constructor(options, resources) {\n    var _a;\n    super();\n    this.id = createId(this);\n    this.seriesRoot = new TranslatableGroup({ name: `${this.id}-series-root` });\n    this.highlightRoot = new TranslatableLayer({\n      name: `${this.id}-highlight-root`,\n      zIndex: 5 /* SERIES_HIGHLIGHT */,\n      deriveZIndexFromChildren: true\n      // TODO remove feature\n    });\n    this.annotationRoot = new TranslatableLayer({\n      name: `${this.id}-annotation-root`,\n      zIndex: 10 /* SERIES_ANNOTATION */\n    });\n    this.debug = Debug.create();\n    this.extraDebugStats = {};\n    this.data = [];\n    this._firstAutoSize = true;\n    this.padding = new Padding(20);\n    this.seriesArea = new SeriesArea();\n    this.keyboard = new Keyboard();\n    this.mode = \"standalone\";\n    this.chartCaptions = new ChartCaptions();\n    this.destroyed = false;\n    this._destroyFns = [];\n    // Used to prevent infinite update loops when syncing charts.\n    this.skipSync = false;\n    this.chartAnimationPhase = \"initial\";\n    this.modulesManager = new ModulesManager();\n    this.processors = [];\n    this.queuedUserOptions = [];\n    this._pendingFactoryUpdatesCount = 0;\n    this._performUpdateNoRenderCount = 0;\n    this._performUpdateSkipAnimations = false;\n    this.performUpdateType = 7 /* NONE */;\n    this.updateShortcutCount = 0;\n    this.seriesToUpdate = /* @__PURE__ */ new Set();\n    this.updateMutex = new Mutex();\n    this.updateRequestors = {};\n    this.performUpdateTrigger = debouncedCallback(async ({ count }) => {\n      if (this.destroyed)\n        return;\n      this.updateMutex.acquire(async () => {\n        try {\n          await this.performUpdate(count);\n        } catch (error) {\n          Logger.error(\"update error\", error);\n        }\n      }).catch((e) => Logger.errorOnce(e));\n    });\n    this._performUpdateSplits = {};\n    this.axes = [];\n    this.series = [];\n    this.onSeriesNodeClick = (event) => {\n      this.fireEvent({ ...event, type: \"seriesNodeClick\" });\n    };\n    this.onSeriesNodeDoubleClick = (event) => {\n      this.fireEvent({ ...event, type: \"seriesNodeDoubleClick\" });\n    };\n    this.seriesGroupingChanged = (event) => {\n      if (!(event instanceof SeriesGroupingChangedEvent))\n        return;\n      const { series, seriesGrouping, oldGrouping } = event;\n      if (series.rootGroup.isRoot())\n        return;\n      this.seriesLayerManager.changeGroup({\n        internalId: series.internalId,\n        type: series.type,\n        rootGroup: series.rootGroup,\n        highlightGroup: series.highlightGroup,\n        annotationGroup: series.annotationGroup,\n        getGroupZIndexSubOrder: (type) => series.getGroupZIndexSubOrder(type),\n        seriesGrouping,\n        oldGrouping\n      });\n    };\n    this.chartOptions = options;\n    const scene = resources?.scene;\n    const container = resources?.container ?? options.processedOptions.container ?? void 0;\n    const styleContainer = resources?.styleContainer ?? options.specialOverrides.styleContainer;\n    const root = new Group({ name: \"root\" });\n    const titleGroup = new Layer({ name: \"titles\", zIndex: 14 /* SERIES_LABEL */ });\n    root.visible = false;\n    root.append(titleGroup);\n    root.append(this.seriesRoot);\n    root.append(this.highlightRoot);\n    root.append(this.annotationRoot);\n    titleGroup.append(this.title.node);\n    titleGroup.append(this.subtitle.node);\n    titleGroup.append(this.footnote.node);\n    this.tooltip = new Tooltip();\n    this.seriesLayerManager = new SeriesLayerManager(this.seriesRoot, this.highlightRoot, this.annotationRoot);\n    this.mode = options.userOptions.mode ?? this.mode;\n    const ctx = this.ctx = new ChartContext(this, {\n      scene,\n      root,\n      container,\n      styleContainer,\n      syncManager: new SyncManager(this),\n      pixelRatio: options.specialOverrides.overrideDevicePixelRatio,\n      updateCallback: (type = 0 /* FULL */, opts) => this.update(type, opts),\n      updateMutex: this.updateMutex\n    });\n    this._destroyFns.push(\n      ctx.domManager.addListener(\"resize\", () => this.parentResize(ctx.domManager.containerSize))\n    );\n    this.overlays = new ChartOverlays();\n    (_a = this.overlays.loading).renderer ?? (_a.renderer = () => getLoadingSpinner(this.overlays.loading.getText(ctx.localeManager), ctx.animationManager.defaultDuration));\n    this.processors = [\n      new DataWindowProcessor(this, ctx.dataService, ctx.updateService, ctx.zoomManager),\n      new OverlaysProcessor(\n        this,\n        this.overlays,\n        ctx.dataService,\n        ctx.layoutManager,\n        ctx.localeManager,\n        ctx.animationManager,\n        ctx.domManager\n      )\n    ];\n    this.highlight = new ChartHighlight();\n    this.container = container;\n    const moduleContext = this.getModuleContext();\n    ctx.regionManager.addRegion(\n      \"series\" /* SERIES */,\n      this.seriesRoot,\n      new SimpleRegionBBoxProvider(this.seriesRoot, () => this.seriesRect ?? BBox.zero),\n      this.ctx.axisManager.axisGridGroup\n    );\n    ctx.regionManager.addRegion(\"horizontal-axes\" /* HORIZONTAL_AXES */);\n    ctx.regionManager.addRegion(\"vertical-axes\" /* VERTICAL_AXES */);\n    ctx.regionManager.addRegion(\"root\", root);\n    ctx.domManager.setDataBoolean(\"animating\", false);\n    this.seriesAreaManager = new SeriesAreaManager(this.initSeriesAreaDependencies());\n    this._destroyFns.push(\n      ctx.layoutManager.registerElement(0 /* Caption */, (e) => {\n        e.layoutBox.shrink(this.padding.toJson());\n        this.chartCaptions.positionCaptions(e);\n      }),\n      ctx.layoutManager.addListener(\"layout:complete\", (e) => this.chartCaptions.positionAbsoluteCaptions(e)),\n      ctx.dataService.addListener(\"data-load\", (event) => {\n        this.data = event.data;\n      }),\n      this.title.registerInteraction(moduleContext, \"beforebegin\"),\n      this.subtitle.registerInteraction(moduleContext, \"beforebegin\"),\n      this.footnote.registerInteraction(moduleContext, \"afterend\"),\n      ctx.interactionManager.addListener(\"page-left\", () => this.destroy()),\n      ctx.animationManager.addListener(\"animation-frame\", () => {\n        this.update(6 /* SCENE_RENDER */);\n      }),\n      ctx.animationManager.addListener(\"animation-start\", () => ctx.domManager.setDataBoolean(\"animating\", true)),\n      ctx.animationManager.addListener(\"animation-stop\", () => ctx.domManager.setDataBoolean(\"animating\", false)),\n      ctx.zoomManager.addListener(\"zoom-change\", () => {\n        this.series.forEach((s) => s.animationState?.transition(\"updateData\"));\n        const skipAnimations = this.chartAnimationPhase !== \"initial\";\n        this.update(3 /* PERFORM_LAYOUT */, { forceNodeDataRefresh: true, skipAnimations });\n      })\n    );\n    this.parentResize(ctx.domManager.containerSize);\n  }\n  static getInstance(element2) {\n    return _Chart.chartsInstances.get(element2);\n  }\n  /** NOTE: This is exposed for use by Integrated charts only. */\n  get canvasElement() {\n    return this.ctx.scene.canvas.element;\n  }\n  download(fileName, fileFormat) {\n    this.ctx.scene.download(fileName, fileFormat);\n  }\n  getCanvasDataURL(fileFormat) {\n    return this.ctx.scene.getDataURL(fileFormat);\n  }\n  toSVG() {\n    return this.ctx.scene.toSVG();\n  }\n  getOptions() {\n    return this.queuedUserOptions.at(-1) ?? this.chartOptions.userOptions;\n  }\n  initSeriesAreaDependencies() {\n    const { ctx, tooltip, highlight, overlays, seriesRoot } = this;\n    const chartType2 = this.getChartType();\n    const fireEvent = this.fireEvent.bind(this);\n    const getUpdateType = () => this.performUpdateType;\n    return { fireEvent, getUpdateType, chartType: chartType2, ctx, tooltip, highlight, overlays, seriesRoot };\n  }\n  getModuleContext() {\n    return this.ctx;\n  }\n  getCaptionText() {\n    return [this.title, this.subtitle, this.footnote].filter((caption) => caption.enabled && caption.text).map((caption) => caption.text).join(\". \");\n  }\n  getAriaLabel() {\n    return this.ctx.localeManager.t(\"ariaAnnounceChart\", { seriesCount: this.series.length });\n  }\n  resetAnimations() {\n    this.chartAnimationPhase = \"initial\";\n    for (const series of this.series) {\n      series.resetAnimation(this.chartAnimationPhase);\n    }\n    for (const axis of this.axes) {\n      axis.resetAnimation(this.chartAnimationPhase);\n    }\n    this.animationRect = void 0;\n    this.ctx.animationManager.reset();\n  }\n  skipAnimations() {\n    this.ctx.animationManager.skipCurrentBatch();\n    this._performUpdateSkipAnimations = true;\n  }\n  destroy(opts) {\n    if (this.destroyed) {\n      return;\n    }\n    const keepTransferableResources = opts?.keepTransferableResources;\n    let result;\n    this.performUpdateType = 7 /* NONE */;\n    this._destroyFns.forEach((fn) => fn());\n    this.processors.forEach((p) => p.destroy());\n    this.tooltip.destroy(this.ctx.domManager);\n    this.overlays.destroy();\n    this.modulesManager.destroy();\n    if (keepTransferableResources) {\n      this.ctx.scene.strip();\n      result = {\n        container: this.container,\n        scene: this.ctx.scene\n      };\n    } else {\n      this.ctx.scene.destroy();\n      this.container = void 0;\n    }\n    this.destroySeries(this.series);\n    this.seriesLayerManager.destroy();\n    this.axes.forEach((a) => a.destroy());\n    this.axes = [];\n    this.animationRect = void 0;\n    this.ctx.destroy();\n    this.destroyed = true;\n    Object.freeze(this);\n    return result;\n  }\n  requestFactoryUpdate(cb) {\n    if (this.destroyed)\n      return;\n    this._pendingFactoryUpdatesCount++;\n    this.updateMutex.acquire(async () => {\n      if (this.destroyed)\n        return;\n      await cb(this);\n      if (this.destroyed)\n        return;\n      this._pendingFactoryUpdatesCount--;\n    }).catch((e) => Logger.errorOnce(e));\n  }\n  update(type = 0 /* FULL */, opts) {\n    const {\n      forceNodeDataRefresh = false,\n      skipAnimations,\n      seriesToUpdate = this.series,\n      newAnimationBatch\n    } = opts ?? {};\n    if (forceNodeDataRefresh) {\n      this.series.forEach((series) => series.markNodeDataDirty());\n    }\n    for (const series of seriesToUpdate) {\n      this.seriesToUpdate.add(series);\n    }\n    if (skipAnimations) {\n      this.ctx.animationManager.skipCurrentBatch();\n      this._performUpdateSkipAnimations = true;\n    }\n    if (newAnimationBatch && this.ctx.animationManager.isActive()) {\n      this._performUpdateSkipAnimations = true;\n    }\n    this.skipSync = opts?.skipSync ?? false;\n    if (this.debug.check()) {\n      let stack = new Error().stack ?? \"<unknown>\";\n      stack = stack.replace(/\\([^)]*/g, \"\");\n      this.updateRequestors[stack] = type;\n    }\n    if (type < this.performUpdateType) {\n      this.performUpdateType = type;\n      this.ctx.domManager.setDataBoolean(\"updatePending\", true);\n      this.performUpdateTrigger.schedule(opts?.backOffMs);\n    }\n  }\n  async performUpdate(count) {\n    const { performUpdateType, extraDebugStats, _performUpdateSplits: splits, ctx } = this;\n    const seriesToUpdate = [...this.seriesToUpdate];\n    this.performUpdateType = 7 /* NONE */;\n    this.seriesToUpdate.clear();\n    if (this.updateShortcutCount === 0 && performUpdateType < 6 /* SCENE_RENDER */) {\n      ctx.animationManager.startBatch(this._performUpdateSkipAnimations);\n      ctx.animationManager.onBatchStop(() => this.chartAnimationPhase = \"ready\");\n    }\n    this.debug(\"Chart.performUpdate() - start\", ChartUpdateType[performUpdateType]);\n    let previousSplit = performance.now();\n    splits.start ?? (splits.start = previousSplit);\n    const updateSplits = (splitName) => {\n      splits[splitName] ?? (splits[splitName] = 0);\n      splits[splitName] += performance.now() - previousSplit;\n      previousSplit = performance.now();\n    };\n    let updateDeferred = false;\n    switch (performUpdateType) {\n      case 0 /* FULL */:\n        this.ctx.updateService.dispatchPreDomUpdate();\n        this.updateDOM();\n      case 1 /* UPDATE_DATA */:\n        await this.updateData();\n        updateSplits(\"\\u2B07\\uFE0F\");\n      case 2 /* PROCESS_DATA */:\n        await this.processData();\n        this.seriesAreaManager.dataChanged();\n        updateSplits(\"\\u{1F3ED}\");\n      case 3 /* PERFORM_LAYOUT */:\n        if (this.checkUpdateShortcut(3 /* PERFORM_LAYOUT */))\n          break;\n        if (!this.checkFirstAutoSize(seriesToUpdate)) {\n          updateDeferred = true;\n          break;\n        }\n        await this.processLayout();\n        updateSplits(\"\\u2316\");\n      case 4 /* SERIES_UPDATE */: {\n        if (this.checkUpdateShortcut(4 /* SERIES_UPDATE */))\n          break;\n        const { seriesRect } = this;\n        await Promise.all(seriesToUpdate.map((series) => series.update({ seriesRect })));\n        updateSplits(\"\\u{1F914}\");\n        this.updateAriaLabels();\n      }\n      case 5 /* PRE_SCENE_RENDER */:\n        if (this.checkUpdateShortcut(5 /* PRE_SCENE_RENDER */))\n          break;\n        ctx.updateService.dispatchPreSceneRender(this.getMinRects());\n        updateSplits(\"\\u2196\");\n      case 6 /* SCENE_RENDER */:\n        if (this.checkUpdateShortcut(6 /* SCENE_RENDER */))\n          break;\n        ctx.animationManager.endBatch();\n        extraDebugStats[\"updateShortcutCount\"] = this.updateShortcutCount;\n        await ctx.scene.render({ debugSplitTimes: splits, extraDebugStats, seriesRect: this.seriesRect });\n        this.extraDebugStats = {};\n        for (const key in splits) {\n          delete splits[key];\n        }\n        this.ctx.domManager.incrementDataCounter(\"sceneRenders\");\n      case 7 /* NONE */:\n        this.updateShortcutCount = 0;\n        this.updateRequestors = {};\n        this._performUpdateSkipAnimations = false;\n        ctx.animationManager.endBatch();\n    }\n    if (!updateDeferred) {\n      ctx.updateService.dispatchUpdateComplete(this.getMinRects());\n      this.ctx.domManager.setDataBoolean(\"updatePending\", false);\n    }\n    const end2 = performance.now();\n    this.debug(\"Chart.performUpdate() - end\", {\n      chart: this,\n      durationMs: Math.round((end2 - splits[\"start\"]) * 100) / 100,\n      count,\n      performUpdateType: ChartUpdateType[performUpdateType]\n    });\n  }\n  updateThemeClassName() {\n    const { theme } = this.chartOptions.processedOptions;\n    const themeClassNamePrefix = \"ag-charts-theme-\";\n    const validThemeClassNames = [`${themeClassNamePrefix}default`, `${themeClassNamePrefix}default-dark`];\n    let themeClassName = validThemeClassNames[0];\n    let isDark = false;\n    if (typeof theme === \"string\") {\n      themeClassName = theme.replace(\"ag-\", themeClassNamePrefix);\n      isDark = theme.includes(\"-dark\");\n    } else if (typeof theme?.baseTheme === \"string\") {\n      themeClassName = theme.baseTheme.replace(\"ag-\", themeClassNamePrefix);\n      isDark = theme.baseTheme.includes(\"-dark\");\n    }\n    if (!validThemeClassNames.includes(themeClassName)) {\n      themeClassName = isDark ? validThemeClassNames[1] : validThemeClassNames[0];\n    }\n    this.ctx.domManager.setThemeClass(themeClassName);\n  }\n  updateDOM() {\n    this.updateThemeClassName();\n    const { enabled, tabIndex } = this.keyboard;\n    this.ctx.domManager.setTabIndex(enabled ? tabIndex ?? 0 : -1);\n  }\n  updateAriaLabels() {\n    this.ctx.domManager.updateCanvasLabel(this.getAriaLabel());\n  }\n  checkUpdateShortcut(checkUpdateType) {\n    const maxShortcuts = 3;\n    if (this.updateShortcutCount > maxShortcuts) {\n      Logger.warn(\n        `exceeded the maximum number of simultaneous updates (${maxShortcuts + 1}), discarding changes and rendering`,\n        this.updateRequestors\n      );\n      return false;\n    }\n    if (this.performUpdateType <= checkUpdateType) {\n      this.updateShortcutCount++;\n      return true;\n    }\n    return false;\n  }\n  checkFirstAutoSize(seriesToUpdate) {\n    if (this.width != null && this.height != null) {\n    } else if (!this._lastAutoSize) {\n      const count = this._performUpdateNoRenderCount++;\n      const backOffMs = (count + 1) ** 2 * 40;\n      if (count < 8) {\n        this.update(3 /* PERFORM_LAYOUT */, { seriesToUpdate, backOffMs });\n        this.debug(\"Chart.checkFirstAutoSize() - backing off until first size update\", backOffMs);\n        return false;\n      }\n      this.debug(\"Chart.checkFirstAutoSize() - timeout for first size update.\");\n    }\n    this._performUpdateNoRenderCount = 0;\n    return true;\n  }\n  onAxisChange(newValue, oldValue) {\n    if (oldValue == null && newValue.length === 0)\n      return;\n    this.ctx.axisManager.updateAxes(oldValue ?? [], newValue);\n  }\n  onSeriesChange(newValue, oldValue) {\n    const seriesToDestroy = oldValue?.filter((series) => !newValue.includes(series)) ?? [];\n    this.destroySeries(seriesToDestroy);\n    this.seriesLayerManager?.setSeriesCount(newValue.length);\n    for (const series of newValue) {\n      if (oldValue?.includes(series))\n        continue;\n      if (series.rootGroup.isRoot()) {\n        this.seriesLayerManager.requestGroup(series);\n      }\n      const chart = this;\n      series.chart = {\n        get mode() {\n          return chart.mode;\n        },\n        get isMiniChart() {\n          return false;\n        },\n        get seriesRect() {\n          return chart.seriesRect;\n        },\n        placeLabels(padding) {\n          return chart.placeLabels(padding);\n        }\n      };\n      series.resetAnimation(this.chartAnimationPhase);\n      this.addSeriesListeners(series);\n      series.addChartEventListeners();\n    }\n    this.seriesAreaManager?.seriesChanged(newValue);\n  }\n  destroySeries(allSeries) {\n    allSeries?.forEach((series) => {\n      series.removeEventListener(\"nodeClick\", this.onSeriesNodeClick);\n      series.removeEventListener(\"nodeDoubleClick\", this.onSeriesNodeDoubleClick);\n      series.removeEventListener(\"groupingChanged\", this.seriesGroupingChanged);\n      series.destroy();\n      this.seriesLayerManager.releaseGroup(series);\n      series.chart = void 0;\n    });\n  }\n  addSeriesListeners(series) {\n    if (this.hasEventListener(\"seriesNodeClick\")) {\n      series.addEventListener(\"nodeClick\", this.onSeriesNodeClick);\n    }\n    if (this.hasEventListener(\"seriesNodeDoubleClick\")) {\n      series.addEventListener(\"nodeDoubleClick\", this.onSeriesNodeDoubleClick);\n    }\n    series.addEventListener(\"groupingChanged\", this.seriesGroupingChanged);\n  }\n  assignSeriesToAxes() {\n    for (const axis of this.axes) {\n      axis.boundSeries = this.series.filter((s) => s.axes[axis.direction] === axis);\n    }\n  }\n  assignAxesToSeries() {\n    const directionToAxesMap = groupBy(this.axes, (axis) => axis.direction);\n    this.series.forEach((series) => {\n      series.directions.forEach((direction) => {\n        const directionAxes = directionToAxesMap[direction];\n        if (!directionAxes) {\n          Logger.warnOnce(\n            `no available axis for direction [${direction}]; check series and axes configuration.`\n          );\n          return;\n        }\n        const seriesKeys = series.getKeys(direction);\n        const newAxis = directionAxes.find(\n          (axis) => !axis.keys.length || seriesKeys.some((key) => axis.keys.includes(key))\n        );\n        if (!newAxis) {\n          Logger.warnOnce(\n            `no matching axis for direction [${direction}] and keys [${seriesKeys}]; check series and axes configuration.`\n          );\n          return;\n        }\n        series.axes[direction] = newAxis;\n      });\n    });\n  }\n  parentResize(size) {\n    if (size == null || this.width != null && this.height != null)\n      return;\n    let { width: width2, height: height2 } = size;\n    width2 = Math.floor(width2);\n    height2 = Math.floor(height2);\n    if (width2 === 0 && height2 === 0)\n      return;\n    const [autoWidth = 0, authHeight = 0] = this._lastAutoSize ?? [];\n    if (autoWidth === width2 && authHeight === height2)\n      return;\n    this._lastAutoSize = [width2, height2];\n    this.resize(\"SizeMonitor\", {});\n  }\n  resize(source, opts) {\n    const { scene, animationManager } = this.ctx;\n    const { inWidth, inHeight, inMinWidth, inMinHeight } = opts;\n    this.ctx.domManager.setSizeOptions(\n      inMinWidth ?? this.minWidth,\n      inMinHeight ?? this.minHeight,\n      inWidth ?? this.width,\n      inHeight ?? this.height\n    );\n    const width2 = inWidth ?? this.width ?? this._lastAutoSize?.[0];\n    const height2 = inHeight ?? this.height ?? this._lastAutoSize?.[1];\n    this.debug(`Chart.resize() from ${source}`, { width: width2, height: height2, stack: new Error().stack });\n    if (width2 == null || height2 == null || !isFiniteNumber(width2) || !isFiniteNumber(height2))\n      return;\n    if (scene.resize(width2, height2)) {\n      animationManager.reset();\n      let skipAnimations = true;\n      if ((this.width == null || this.height == null) && this._firstAutoSize) {\n        skipAnimations = false;\n        this._firstAutoSize = false;\n      }\n      this.update(3 /* PERFORM_LAYOUT */, { forceNodeDataRefresh: true, skipAnimations });\n    }\n  }\n  async updateData() {\n    this.series.forEach((s) => s.setChartData(this.data));\n    const modulePromises = this.modulesManager.mapModules((m) => m.updateData?.(this.data));\n    await Promise.all(modulePromises);\n  }\n  async processData() {\n    if (this.series.some((s) => s.canHaveAxes)) {\n      this.assignAxesToSeries();\n      this.assignSeriesToAxes();\n    }\n    const dataController = new DataController(this.mode);\n    const seriesPromises = this.series.map((s) => s.processData(dataController));\n    const modulePromises = this.modulesManager.mapModules((m) => m.processData?.(dataController));\n    dataController.execute();\n    await Promise.all([...seriesPromises, ...modulePromises]);\n    for (const { legendType, legend } of this.modulesManager.legends()) {\n      legend.data = this.getLegendData(legendType, this.mode !== \"integrated\");\n    }\n  }\n  placeLabels(padding) {\n    const visibleSeries = [];\n    const data = [];\n    for (const series of this.series) {\n      if (!series.visible)\n        continue;\n      const labelData = series.getLabelData();\n      if (isPointLabelDatum(labelData?.[0])) {\n        data.push(labelData);\n        visibleSeries.push(series);\n      }\n    }\n    const { seriesRect } = this;\n    const { top, right, bottom, left } = this.seriesArea.padding;\n    const labels = seriesRect && data.length > 0 ? placeLabels(\n      data,\n      {\n        x: -left,\n        y: -top,\n        width: seriesRect.width + left + right,\n        height: seriesRect.height + top + bottom\n      },\n      padding\n    ) : [];\n    return new Map(labels.map((l, i) => [visibleSeries[i], l]));\n  }\n  getLegendData(legendType, warnConflicts) {\n    var _a;\n    const legendData = this.series.filter((s) => s.properties.showInLegend).flatMap((s) => s.getLegendData(legendType));\n    const isCategoryLegendData = (data) => data.every((d) => d.legendType === \"category\");\n    if (warnConflicts && isCategoryLegendData(legendData)) {\n      const seriesMarkerFills = {};\n      const seriesTypeMap = new Map(this.series.map((s) => [s.id, s.type]));\n      for (const {\n        seriesId,\n        symbols: [{ marker }],\n        label\n      } of legendData) {\n        if (marker.fill == null)\n          continue;\n        const seriesType2 = seriesTypeMap.get(seriesId);\n        const markerFill = seriesMarkerFills[seriesType2] ?? (seriesMarkerFills[seriesType2] = {});\n        markerFill[_a = label.text] ?? (markerFill[_a] = marker.fill);\n        if (markerFill[label.text] !== marker.fill) {\n          Logger.warnOnce(\n            `legend item '${label.text}' has multiple fill colors, this may cause unexpected behaviour.`\n          );\n        }\n      }\n    }\n    return legendData;\n  }\n  async processLayout() {\n    const oldRect = this.animationRect;\n    const { width: width2, height: height2 } = this.ctx.scene;\n    const ctx = this.ctx.layoutManager.createContext(width2, height2);\n    await this.performLayout(ctx);\n    if (oldRect && !this.animationRect?.equals(oldRect)) {\n      this.ctx.animationManager.skipCurrentBatch();\n    }\n    this.debug(\"Chart.performUpdate() - seriesRect\", this.seriesRect);\n  }\n  async waitForUpdate(timeoutMs = 1e4, failOnTimeout = false) {\n    const start2 = performance.now();\n    if (this._pendingFactoryUpdatesCount > 0) {\n      await this.updateMutex.waitForClearAcquireQueue();\n    }\n    while (this.performUpdateType !== 7 /* NONE */) {\n      if (performance.now() - start2 > timeoutMs) {\n        const message = `Chart.waitForUpdate() timeout of ${timeoutMs} reached - first chart update taking too long.`;\n        if (failOnTimeout) {\n          throw new Error(message);\n        } else {\n          Logger.warnOnce(message);\n        }\n      }\n      await sleep(50);\n    }\n    await this.updateMutex.waitForClearAcquireQueue();\n  }\n  getMinRects() {\n    const { width: width2, height: height2 } = this.ctx.scene;\n    const minRects = this.series.map((series) => series.getMinRects(width2, height2)).filter(isDefined);\n    if (minRects.length === 0)\n      return;\n    let maxWidth = 0;\n    let maxHeight = 0;\n    let maxVisibleWidth = 0;\n    let maxVisibleHeight = 0;\n    for (const { minRect: minRect2, minVisibleRect: minVisibleRect2 } of minRects) {\n      maxWidth = Math.max(maxWidth, minRect2.width);\n      maxHeight = Math.max(maxHeight, minRect2.height);\n      maxVisibleWidth = Math.max(maxVisibleWidth, minVisibleRect2.width);\n      maxVisibleHeight = Math.max(maxVisibleHeight, minVisibleRect2.height);\n    }\n    const minRect = new BBox(0, 0, maxWidth, maxHeight);\n    let minVisibleRect = minRect.clone();\n    if (maxVisibleWidth > 0 && maxVisibleHeight > 0) {\n      minVisibleRect = new BBox(0, 0, maxVisibleWidth, maxVisibleHeight);\n    }\n    return { minRect, minVisibleRect };\n  }\n  filterMiniChartSeries(series) {\n    return series?.filter((s) => s.showInMiniChart !== false);\n  }\n  applyOptions(newChartOptions) {\n    const isDifferentOpts = newChartOptions !== this.chartOptions;\n    const oldOpts = isDifferentOpts ? this.chartOptions.processedOptions : {};\n    const newOpts = newChartOptions.processedOptions;\n    const deltaOptions = newChartOptions.diffOptions(oldOpts);\n    if (deltaOptions == null)\n      return;\n    debug(\"Chart.applyOptions() - applying delta\", deltaOptions);\n    const modulesChanged = this.applyModules(newOpts);\n    const skip = [\n      \"type\",\n      \"data\",\n      \"series\",\n      \"listeners\",\n      \"preset\",\n      \"theme\",\n      \"legend.listeners\",\n      \"navigator.miniChart.series\",\n      \"navigator.miniChart.label\",\n      \"locale.localeText\",\n      \"axes\",\n      \"topology\",\n      \"nodes\",\n      \"initialState\",\n      \"styleContainer\"\n    ];\n    if (deltaOptions.listeners) {\n      this.registerListeners(this, deltaOptions.listeners);\n    }\n    jsonApply(this, deltaOptions, { skip });\n    let forceNodeDataRefresh = false;\n    let seriesStatus = \"no-op\";\n    if (deltaOptions.series != null) {\n      seriesStatus = this.applySeries(this, deltaOptions.series, oldOpts?.series);\n      forceNodeDataRefresh = true;\n    }\n    if (seriesStatus === \"replaced\") {\n      this.resetAnimations();\n    }\n    if (this.applyAxes(this, newOpts, oldOpts, seriesStatus, [], true)) {\n      forceNodeDataRefresh = true;\n    }\n    if (deltaOptions.data) {\n      this.data = deltaOptions.data;\n    }\n    if (deltaOptions.legend?.listeners && this.modulesManager.isEnabled(\"legend\")) {\n      Object.assign(this.legend.listeners, deltaOptions.legend.listeners);\n    }\n    if (deltaOptions.locale?.localeText) {\n      this.modulesManager.getModule(\"locale\").localeText = deltaOptions.locale?.localeText;\n    }\n    this.chartOptions = newChartOptions;\n    const navigatorModule = this.modulesManager.getModule(\"navigator\");\n    const zoomModule = this.modulesManager.getModule(\"zoom\");\n    if (!navigatorModule?.enabled && !zoomModule?.enabled) {\n      this.ctx.zoomManager.updateZoom(\"chart\");\n    }\n    const miniChart = navigatorModule?.miniChart;\n    const miniChartSeries = newOpts.navigator?.miniChart?.series ?? newOpts.series;\n    if (miniChart?.enabled === true && miniChartSeries != null) {\n      this.applyMiniChartOptions(miniChart, miniChartSeries, newOpts, oldOpts);\n    } else if (miniChart?.enabled === false) {\n      miniChart.series = [];\n      miniChart.axes = [];\n    }\n    this.ctx.annotationManager.setAnnotationStyles(newChartOptions.annotationThemes);\n    forceNodeDataRefresh || (forceNodeDataRefresh = this.shouldForceNodeDataRefresh(deltaOptions, seriesStatus));\n    const majorChange = forceNodeDataRefresh || modulesChanged;\n    const updateType = majorChange ? 0 /* FULL */ : 3 /* PERFORM_LAYOUT */;\n    this.maybeResetAnimations(seriesStatus);\n    debug(\"Chart.applyOptions() - update type\", ChartUpdateType[updateType], {\n      seriesStatus,\n      forceNodeDataRefresh\n    });\n    this.update(updateType, { forceNodeDataRefresh, newAnimationBatch: true });\n    if (deltaOptions.initialState || deltaOptions.theme) {\n      this.applyInitialState(newChartOptions.userOptions.initialState);\n    }\n  }\n  applyInitialState(initialState) {\n    const {\n      ctx: { annotationManager, historyManager, stateManager }\n    } = this;\n    if (initialState?.annotations != null) {\n      const annotations2 = initialState.annotations.map((annotation) => {\n        const annotationTheme = annotationManager.getAnnotationTypeStyles(annotation.type);\n        return mergeDefaults(annotation, annotationTheme);\n      });\n      stateManager.setState(annotationManager, annotations2);\n    }\n    if (initialState != null) {\n      historyManager.clear();\n    }\n  }\n  maybeResetAnimations(seriesStatus) {\n    if (this.mode !== \"standalone\")\n      return;\n    switch (seriesStatus) {\n      case \"series-grouping-change\":\n      case \"replaced\":\n        this.resetAnimations();\n        break;\n      default:\n    }\n  }\n  shouldForceNodeDataRefresh(deltaOptions, seriesStatus) {\n    const seriesDataUpdate = !!deltaOptions.data || seriesStatus === \"data-change\" || seriesStatus === \"replaced\";\n    const legendKeys = legendRegistry.getKeys();\n    const optionsHaveLegend = Object.values(legendKeys).some(\n      (legendKey) => deltaOptions[legendKey] != null\n    );\n    const otherRefreshUpdate = deltaOptions.title != null && deltaOptions.subtitle != null;\n    return seriesDataUpdate || optionsHaveLegend || otherRefreshUpdate;\n  }\n  applyMiniChartOptions(miniChart, miniChartSeries, completeOptions, oldOpts) {\n    const oldSeries = oldOpts?.navigator?.miniChart?.series ?? oldOpts?.series;\n    const miniChartSeriesStatus = this.applySeries(\n      miniChart,\n      this.filterMiniChartSeries(miniChartSeries),\n      this.filterMiniChartSeries(oldSeries)\n    );\n    this.applyAxes(miniChart, completeOptions, oldOpts, miniChartSeriesStatus, [\n      \"axes[].tick\",\n      \"axes[].thickness\",\n      \"axes[].title\",\n      \"axes[].crosshair\",\n      \"axes[].gridLine\",\n      \"axes[].label\"\n    ]);\n    const series = miniChart.series;\n    for (const s of series) {\n      s.properties.id = void 0;\n    }\n    const axes = miniChart.axes;\n    const horizontalAxis = axes.find((axis) => axis.direction === \"x\" /* X */);\n    for (const axis of axes) {\n      axis.gridLine.enabled = false;\n      axis.label.enabled = axis === horizontalAxis;\n      axis.tick.enabled = false;\n      axis.interactionEnabled = false;\n    }\n    if (horizontalAxis != null) {\n      const miniChartOpts = completeOptions.navigator?.miniChart;\n      const labelOptions = miniChartOpts?.label;\n      const intervalOptions = miniChartOpts?.label?.interval;\n      horizontalAxis.line.enabled = false;\n      horizontalAxis.label.set(\n        without(labelOptions, [\"interval\", \"rotation\", \"minSpacing\", \"autoRotate\", \"autoRotateAngle\"])\n      );\n      horizontalAxis.tick.set(\n        without(intervalOptions, [\"enabled\", \"width\", \"size\", \"color\", \"interval\", \"step\"])\n      );\n      const step = intervalOptions?.step;\n      if (step != null) {\n        horizontalAxis.interval.step = step;\n      }\n    }\n  }\n  applyModules(options) {\n    const { type: chartType2 } = this.constructor;\n    let modulesChanged = false;\n    for (const module of moduleRegistry.byType(\"root\", \"legend\")) {\n      const isConfigured = options[module.optionsKey] != null;\n      const shouldBeEnabled = isConfigured && module.chartTypes.includes(chartType2);\n      if (shouldBeEnabled === this.modulesManager.isEnabled(module))\n        continue;\n      if (shouldBeEnabled) {\n        this.modulesManager.addModule(module, (m) => m.moduleFactory(this.getModuleContext()));\n        if (module.type === \"legend\") {\n          this.modulesManager.getModule(module)?.attachLegend(this.ctx.scene);\n        }\n        this[module.optionsKey] = this.modulesManager.getModule(module);\n      } else {\n        this.modulesManager.removeModule(module);\n        delete this[module.optionsKey];\n      }\n      modulesChanged = true;\n    }\n    return modulesChanged;\n  }\n  initSeriesDeclarationOrder(series) {\n    for (let idx = 0; idx < series.length; idx++) {\n      series[idx]._declarationOrder = idx;\n    }\n  }\n  applySeries(chart, optSeries, oldOptSeries) {\n    if (!optSeries) {\n      return \"no-change\";\n    }\n    const matchResult = matchSeriesOptions(chart.series, optSeries, oldOptSeries);\n    if (matchResult.status === \"no-overlap\") {\n      debug(`Chart.applySeries() - creating new series instances, status: ${matchResult.status}`, matchResult);\n      chart.series = optSeries.map((opts) => this.createSeries(opts));\n      this.initSeriesDeclarationOrder(chart.series);\n      return \"replaced\";\n    }\n    debug(`Chart.applySeries() - matchResult`, matchResult);\n    const seriesInstances = [];\n    let dataChanged = false;\n    let groupingChanged = false;\n    let isUpdated = false;\n    for (const change of matchResult.changes) {\n      groupingChanged || (groupingChanged = change.status === \"series-grouping\");\n      dataChanged || (dataChanged = change.diff?.data != null);\n      isUpdated || (isUpdated = change.status !== \"no-op\");\n      switch (change.status) {\n        case \"add\": {\n          const newSeries = this.createSeries(change.opts);\n          seriesInstances.push(newSeries);\n          debug(`Chart.applySeries() - created new series`, newSeries);\n          break;\n        }\n        case \"remove\":\n          debug(`Chart.applySeries() - removing series at previous idx ${change.idx}`, change.series);\n          break;\n        case \"no-op\":\n          seriesInstances.push(change.series);\n          debug(`Chart.applySeries() - no change to series at previous idx ${change.idx}`, change.series);\n          break;\n        case \"series-grouping\":\n        case \"update\":\n        default: {\n          const { series, diff: diff2, idx } = change;\n          debug(`Chart.applySeries() - applying series diff previous idx ${idx}`, diff2, series);\n          this.applySeriesValues(series, diff2);\n          series.markNodeDataDirty();\n          seriesInstances.push(series);\n        }\n      }\n    }\n    this.initSeriesDeclarationOrder(seriesInstances);\n    debug(`Chart.applySeries() - final series instances`, seriesInstances);\n    chart.series = seriesInstances;\n    if (groupingChanged) {\n      return \"series-grouping-change\";\n    }\n    if (dataChanged) {\n      return \"data-change\";\n    }\n    return isUpdated ? \"updated\" : \"no-op\";\n  }\n  applyAxes(chart, options, oldOpts, seriesStatus, skip = [], registerRegions = false) {\n    if (!(\"axes\" in options) || !options.axes) {\n      return false;\n    }\n    skip = [\"axes[].type\", ...skip];\n    const { axes } = options;\n    const forceRecreate = seriesStatus === \"replaced\";\n    const matchingTypes = !forceRecreate && chart.axes.length === axes.length && chart.axes.every((a, i) => a.type === axes[i].type);\n    if (matchingTypes && isAgCartesianChartOptions(oldOpts)) {\n      chart.axes.forEach((axis, index) => {\n        const previousOpts = oldOpts.axes?.[index] ?? {};\n        const axisDiff = jsonDiff(previousOpts, axes[index]);\n        debug(`Chart.applyAxes() - applying axis diff idx ${index}`, axisDiff);\n        const path = `axes[${index}]`;\n        jsonApply(axis, axisDiff, { path, skip });\n      });\n      return true;\n    }\n    debug(`Chart.applyAxes() - creating new axes instances; seriesStatus: ${seriesStatus}`);\n    chart.axes = this.createAxis(axes, skip);\n    const axisGroups = {\n      [\"x\" /* X */]: [],\n      [\"y\" /* Y */]: []\n    };\n    chart.axes.forEach((axis) => {\n      const { id } = axis;\n      const node = axis.getRegionNode();\n      if (node != null) {\n        axisGroups[axis.direction].push({ id, node });\n      }\n    });\n    if (registerRegions) {\n      this.ctx.regionManager.updateRegion(\"horizontal-axes\" /* HORIZONTAL_AXES */, ...axisGroups[\"x\" /* X */]);\n      this.ctx.regionManager.updateRegion(\"vertical-axes\" /* VERTICAL_AXES */, ...axisGroups[\"y\" /* Y */]);\n    }\n    return true;\n  }\n  createSeries(seriesOptions) {\n    const seriesInstance = seriesRegistry.create(seriesOptions.type, this.getModuleContext());\n    this.applySeriesOptionModules(seriesInstance, seriesOptions);\n    this.applySeriesValues(seriesInstance, seriesOptions);\n    return seriesInstance;\n  }\n  applySeriesOptionModules(series, options) {\n    const moduleContext = series.createModuleContext();\n    const moduleMap = series.getModuleMap();\n    for (const module of moduleRegistry.byType(\"series-option\")) {\n      if (module.optionsKey in options && module.seriesTypes.includes(series.type)) {\n        moduleMap.addModule(module, (m) => m.moduleFactory(moduleContext));\n      }\n    }\n  }\n  applySeriesValues(target, options) {\n    const moduleMap = target.getModuleMap();\n    const { type: _, data, listeners, seriesGrouping, showInMiniChart: __, ...seriesOptions } = options;\n    for (const moduleDef of EXPECTED_ENTERPRISE_MODULES) {\n      if (moduleDef.type !== \"series-option\")\n        continue;\n      if (moduleDef.optionsKey in seriesOptions) {\n        const module = moduleMap.getModule(moduleDef.optionsKey);\n        if (module) {\n          const moduleOptions = seriesOptions[moduleDef.optionsKey];\n          delete seriesOptions[moduleDef.optionsKey];\n          module.properties.set(moduleOptions);\n        }\n      }\n    }\n    target.properties.set(seriesOptions);\n    if (\"data\" in options) {\n      target.setOptionsData(data);\n    }\n    if (listeners) {\n      this.registerListeners(target, listeners);\n    }\n    if (\"seriesGrouping\" in options) {\n      if (seriesGrouping == null) {\n        target.seriesGrouping = void 0;\n      } else {\n        target.seriesGrouping = { ...target.seriesGrouping, ...seriesGrouping };\n      }\n    }\n  }\n  createAxis(options, skip) {\n    const newAxes = [];\n    const moduleContext = this.getModuleContext();\n    for (let index = 0; index < options.length; index++) {\n      const axisOptions = options[index];\n      const axis = axisRegistry.create(axisOptions.type, moduleContext);\n      this.applyAxisModules(axis, axisOptions);\n      jsonApply(axis, axisOptions, { path: `axes[${index}]`, skip });\n      newAxes.push(axis);\n    }\n    guessInvalidPositions(newAxes);\n    return newAxes;\n  }\n  applyAxisModules(axis, options) {\n    const moduleContext = axis.createModuleContext();\n    const moduleMap = axis.getModuleMap();\n    for (const module of moduleRegistry.byType(\"axis-option\")) {\n      const shouldBeEnabled = options[module.optionsKey] != null;\n      if (shouldBeEnabled === moduleMap.isEnabled(module))\n        continue;\n      if (shouldBeEnabled) {\n        moduleMap.addModule(module, (m) => m.moduleFactory(moduleContext));\n        axis[module.optionsKey] = moduleMap.getModule(module);\n      } else {\n        moduleMap.removeModule(module);\n        delete axis[module.optionsKey];\n      }\n    }\n  }\n  registerListeners(source, listeners) {\n    source.clearEventListeners();\n    for (const [property, listener] of Object.entries(listeners)) {\n      if (isFunction(listener)) {\n        source.addEventListener(property, listener);\n      }\n    }\n  }\n};\n_Chart.chartsInstances = /* @__PURE__ */ new WeakMap();\n__decorateClass([\n  ActionOnSet({\n    newValue(value) {\n      if (this.destroyed)\n        return;\n      this.ctx.domManager.setContainer(value);\n      _Chart.chartsInstances.set(value, this);\n    },\n    oldValue(value) {\n      _Chart.chartsInstances.delete(value);\n    }\n  })\n], _Chart.prototype, \"container\", 2);\n__decorateClass([\n  ActionOnSet({\n    newValue(value) {\n      this.resize(\"width option\", { inWidth: value });\n    }\n  })\n], _Chart.prototype, \"width\", 2);\n__decorateClass([\n  ActionOnSet({\n    newValue(value) {\n      this.resize(\"height option\", { inHeight: value });\n    }\n  })\n], _Chart.prototype, \"height\", 2);\n__decorateClass([\n  ActionOnSet({\n    newValue(value) {\n      this.resize(\"minWidth option\", { inMinWidth: value });\n    }\n  })\n], _Chart.prototype, \"minWidth\", 2);\n__decorateClass([\n  ActionOnSet({\n    newValue(value) {\n      this.resize(\"minHeight option\", { inMinHeight: value });\n    }\n  })\n], _Chart.prototype, \"minHeight\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], _Chart.prototype, \"padding\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], _Chart.prototype, \"seriesArea\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], _Chart.prototype, \"keyboard\", 2);\n__decorateClass([\n  Validate(UNION([\"standalone\", \"integrated\"], \"a chart mode\"))\n], _Chart.prototype, \"mode\", 2);\n__decorateClass([\n  ProxyProperty(\"chartCaptions.title\")\n], _Chart.prototype, \"title\", 2);\n__decorateClass([\n  ProxyProperty(\"chartCaptions.subtitle\")\n], _Chart.prototype, \"subtitle\", 2);\n__decorateClass([\n  ProxyProperty(\"chartCaptions.footnote\")\n], _Chart.prototype, \"footnote\", 2);\n__decorateClass([\n  ActionOnSet({\n    changeValue(newValue, oldValue) {\n      this.onAxisChange(newValue, oldValue);\n    }\n  })\n], _Chart.prototype, \"axes\", 2);\n__decorateClass([\n  ActionOnSet({\n    changeValue(newValue, oldValue) {\n      this.onSeriesChange(newValue, oldValue);\n    }\n  })\n], _Chart.prototype, \"series\", 2);\nvar Chart = _Chart;\n\n// packages/ag-charts-community/src/scene/util/quadtree.ts\nvar QuadtreeNearest = class {\n  constructor(capacity, maxdepth, boundary) {\n    this.root = new QuadtreeNodeNearest(capacity, maxdepth, boundary);\n  }\n  clear(boundary) {\n    this.root.clear(boundary);\n  }\n  addValue(hitTester, value) {\n    const elem = {\n      hitTester,\n      value,\n      distanceSquared: (x, y) => {\n        return hitTester.distanceSquared(x, y);\n      }\n    };\n    this.root.addElem(elem);\n  }\n  find(x, y) {\n    const arg = { best: { nearest: void 0, distanceSquared: Infinity } };\n    this.root.find(x, y, arg);\n    return arg.best;\n  }\n};\nvar QuadtreeSubdivisions = class {\n  constructor(nw, ne, sw, se) {\n    this.nw = nw;\n    this.ne = ne;\n    this.sw = sw;\n    this.se = se;\n  }\n  addElem(elem) {\n    this.nw.addElem(elem);\n    this.ne.addElem(elem);\n    this.sw.addElem(elem);\n    this.se.addElem(elem);\n  }\n  find(x, y, arg) {\n    this.nw.find(x, y, arg);\n    this.ne.find(x, y, arg);\n    this.sw.find(x, y, arg);\n    this.se.find(x, y, arg);\n  }\n};\nvar QuadtreeNode = class {\n  constructor(capacity, maxdepth, boundary) {\n    this.capacity = capacity;\n    this.maxdepth = maxdepth;\n    this.boundary = boundary ?? BBox.NaN;\n    this.elems = [];\n    this.subdivisions = void 0;\n  }\n  clear(boundary) {\n    this.elems.length = 0;\n    this.boundary = boundary;\n    this.subdivisions = void 0;\n  }\n  addElem(e) {\n    if (this.addCondition(e)) {\n      if (this.subdivisions === void 0) {\n        if (this.maxdepth === 0 || this.elems.length < this.capacity) {\n          this.elems.push(e);\n        } else {\n          this.subdivide(e);\n        }\n      } else {\n        this.subdivisions.addElem(e);\n      }\n    }\n  }\n  find(x, y, arg) {\n    if (this.findCondition(x, y, arg)) {\n      if (this.subdivisions === void 0) {\n        this.findAction(x, y, arg);\n      } else {\n        this.subdivisions.find(x, y, arg);\n      }\n    }\n  }\n  subdivide(newElem) {\n    this.subdivisions = this.makeSubdivisions();\n    for (const e of this.elems) {\n      this.subdivisions.addElem(e);\n    }\n    this.subdivisions.addElem(newElem);\n    this.elems.length = 0;\n  }\n  makeSubdivisions() {\n    const { x, y, width: width2, height: height2 } = this.boundary;\n    const { capacity } = this;\n    const depth = this.maxdepth - 1;\n    const halfWidth = width2 / 2;\n    const halfHeight = height2 / 2;\n    const nwBoundary = new BBox(x, y, halfWidth, halfHeight);\n    const neBoundary = new BBox(x + halfWidth, y, halfWidth, halfHeight);\n    const swBoundary = new BBox(x, y + halfHeight, halfWidth, halfHeight);\n    const seBoundary = new BBox(x + halfWidth, y + halfHeight, halfWidth, halfHeight);\n    return new QuadtreeSubdivisions(\n      this.child(capacity, depth, nwBoundary),\n      this.child(capacity, depth, neBoundary),\n      this.child(capacity, depth, swBoundary),\n      this.child(capacity, depth, seBoundary)\n    );\n  }\n};\nvar QuadtreeNodeNearest = class _QuadtreeNodeNearest extends QuadtreeNode {\n  addCondition(e) {\n    const { x, y } = e.hitTester.midPoint;\n    return this.boundary.containsPoint(x, y);\n  }\n  findCondition(x, y, arg) {\n    const { best } = arg;\n    return best.distanceSquared !== 0 && this.boundary.distanceSquared(x, y) < best.distanceSquared;\n  }\n  findAction(x, y, arg) {\n    const other = nearestSquared(x, y, this.elems, arg.best.distanceSquared);\n    if (other.nearest !== void 0 && other.distanceSquared < arg.best.distanceSquared) {\n      arg.best = other;\n    }\n  }\n  child(capacity, depth, boundary) {\n    return new _QuadtreeNodeNearest(capacity, depth, boundary);\n  }\n};\n\n// packages/ag-charts-community/src/chart/marker/marker.ts\nvar BUILTIN_MARKERS = [\n  \"ArrowDown\",\n  \"ArrowUp\",\n  \"Circle\",\n  \"Cross\",\n  \"Diamond\",\n  \"Heart\",\n  \"MapPin\",\n  \"Plus\",\n  \"Square\",\n  \"Star\",\n  \"Triangle\"\n];\nvar DEFAULT_CENTER_POINT = Object.freeze({ x: 0.5, y: 0.5 });\nvar InternalMarker = class extends Path {\n  constructor() {\n    super(...arguments);\n    this.x = 0;\n    this.y = 0;\n    this.size = 12;\n  }\n  isBuiltIn() {\n    return BUILTIN_MARKERS.includes(this.constructor.className ?? \"\");\n  }\n  computeBBox() {\n    if (!this.isBuiltIn()) {\n      return this.path.computeBBox();\n    }\n    const { x, y, size } = this;\n    const { center: center2 } = this.constructor;\n    return new BBox(x - size * center2.x, y - size * center2.y, size, size);\n  }\n  applyPath(s, moves) {\n    const { path } = this;\n    let { x, y } = this;\n    path.clear();\n    for (const { x: mx, y: my, t } of moves) {\n      x += mx * s;\n      y += my * s;\n      if (t === \"move\") {\n        path.moveTo(x, y);\n      } else {\n        path.lineTo(x, y);\n      }\n    }\n    path.closePath();\n  }\n  executeFill(ctx, path) {\n    if (!path)\n      return;\n    return super.executeFill(ctx, path);\n  }\n  executeStroke(ctx, path) {\n    if (!path)\n      return;\n    return super.executeStroke(ctx, path);\n  }\n};\n__decorateClass([\n  ScenePathChangeDetection()\n], InternalMarker.prototype, \"x\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], InternalMarker.prototype, \"y\", 2);\n__decorateClass([\n  ScenePathChangeDetection({ convertor: Math.abs })\n], InternalMarker.prototype, \"size\", 2);\nvar Marker = class extends Rotatable(Scalable(Translatable(InternalMarker))) {\n};\nMarker.center = DEFAULT_CENTER_POINT;\n\n// packages/ag-charts-community/src/chart/marker/circle.ts\nvar Circle = class extends Marker {\n  updatePath() {\n    const { x, y, path, size } = this;\n    const r = size / 2;\n    path.clear();\n    path.arc(x, y, r, 0, Math.PI * 2);\n    path.closePath();\n  }\n};\nCircle.className = \"Circle\";\n\n// packages/ag-charts-community/src/chart/marker/cross.ts\nvar _Cross = class _Cross extends Marker {\n  updatePath() {\n    const s = this.size / 4.2;\n    super.applyPath(s, _Cross.moves);\n  }\n};\n_Cross.className = \"Cross\";\n_Cross.moves = [\n  { x: -1, y: 0, t: \"move\" },\n  { x: -1, y: -1 },\n  { x: 1, y: -1 },\n  { x: 1, y: 1 },\n  { x: 1, y: -1 },\n  { x: 1, y: 1 },\n  { x: -1, y: 1 },\n  { x: 1, y: 1 },\n  { x: -1, y: 1 },\n  { x: -1, y: -1 },\n  { x: -1, y: 1 },\n  { x: -1, y: -1 }\n];\nvar Cross = _Cross;\n\n// packages/ag-charts-community/src/chart/marker/diamond.ts\nvar _Diamond = class _Diamond extends Marker {\n  updatePath() {\n    const s = this.size / 2;\n    super.applyPath(s, _Diamond.moves);\n  }\n};\n_Diamond.className = \"Diamond\";\n_Diamond.moves = [\n  { x: 0, y: -1, t: \"move\" },\n  { x: 1, y: 1 },\n  { x: -1, y: 1 },\n  { x: -1, y: -1 },\n  { x: 1, y: -1 }\n];\nvar Diamond = _Diamond;\n\n// packages/ag-charts-community/src/chart/marker/heart.ts\nvar Heart = class extends Marker {\n  rad(degree2) {\n    return degree2 / 180 * Math.PI;\n  }\n  updatePath() {\n    const { x, path, size, rad } = this;\n    const r = size / 4;\n    const y = this.y + r / 2;\n    path.clear();\n    path.arc(x - r, y - r, r, rad(130), rad(330));\n    path.arc(x + r, y - r, r, rad(220), rad(50));\n    path.lineTo(x, y + r);\n    path.closePath();\n  }\n};\nHeart.className = \"Heart\";\n\n// packages/ag-charts-community/src/chart/marker/pin.ts\nvar Pin = class extends Marker {\n  updatePath() {\n    const { path, x, y } = this;\n    const s = this.size;\n    const cx = 0.5;\n    const cy = 1;\n    path.clear();\n    path.moveTo(x + (0.15625 - cx) * s, y + (0.34375 - cy) * s);\n    path.cubicCurveTo(\n      x + (0.15625 - cx) * s,\n      y + (0.151491 - cy) * s,\n      x + (0.307741 - cx) * s,\n      y + (0 - cy) * s,\n      x + (0.5 - cx) * s,\n      y + (0 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.692259 - cx) * s,\n      y + (0 - cy) * s,\n      x + (0.84375 - cx) * s,\n      y + (0.151491 - cy) * s,\n      x + (0.84375 - cx) * s,\n      y + (0.34375 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.84375 - cx) * s,\n      y + (0.493824 - cy) * s,\n      x + (0.784625 - cx) * s,\n      y + (0.600181 - cy) * s,\n      x + (0.716461 - cx) * s,\n      y + (0.695393 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.699009 - cx) * s,\n      y + (0.719769 - cy) * s,\n      x + (0.681271 - cx) * s,\n      y + (0.743104 - cy) * s,\n      x + (0.663785 - cx) * s,\n      y + (0.766105 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.611893 - cx) * s,\n      y + (0.834367 - cy) * s,\n      x + (0.562228 - cx) * s,\n      y + (0.899699 - cy) * s,\n      x + (0.528896 - cx) * s,\n      y + (0.980648 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.524075 - cx) * s,\n      y + (0.992358 - cy) * s,\n      x + (0.512663 - cx) * s,\n      y + (1 - cy) * s,\n      x + (0.5 - cx) * s,\n      y + (1 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.487337 - cx) * s,\n      y + (1 - cy) * s,\n      x + (0.475925 - cx) * s,\n      y + (0.992358 - cy) * s,\n      x + (0.471104 - cx) * s,\n      y + (0.980648 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.487337 - cx) * s,\n      y + (1 - cy) * s,\n      x + (0.475925 - cx) * s,\n      y + (0.992358 - cy) * s,\n      x + (0.471104 - cx) * s,\n      y + (0.980648 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.437772 - cx) * s,\n      y + (0.899699 - cy) * s,\n      x + (0.388107 - cx) * s,\n      y + (0.834367 - cy) * s,\n      x + (0.336215 - cx) * s,\n      y + (0.766105 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.318729 - cx) * s,\n      y + (0.743104 - cy) * s,\n      x + (0.300991 - cx) * s,\n      y + (0.719769 - cy) * s,\n      x + (0.283539 - cx) * s,\n      y + (0.695393 - cy) * s\n    );\n    path.cubicCurveTo(\n      x + (0.215375 - cx) * s,\n      y + (0.600181 - cy) * s,\n      x + (0.15625 - cx) * s,\n      y + (0.493824 - cy) * s,\n      x + (0.15625 - cx) * s,\n      y + (0.34375 - cy) * s\n    );\n    path.closePath();\n  }\n};\nPin.className = \"MapPin\";\nPin.center = { x: 0.5, y: 1 };\n\n// packages/ag-charts-community/src/chart/marker/plus.ts\nvar _Plus = class _Plus extends Marker {\n  updatePath() {\n    const s = this.size / 3;\n    super.applyPath(s, _Plus.moves);\n  }\n};\n_Plus.className = \"Plus\";\n_Plus.moves = [\n  { x: -0.5, y: -0.5, t: \"move\" },\n  { x: 0, y: -1 },\n  { x: 1, y: 0 },\n  { x: 0, y: 1 },\n  { x: 1, y: 0 },\n  { x: 0, y: 1 },\n  { x: -1, y: 0 },\n  { x: 0, y: 1 },\n  { x: -1, y: 0 },\n  { x: 0, y: -1 },\n  { x: -1, y: 0 },\n  { x: 0, y: -1 }\n];\nvar Plus = _Plus;\n\n// packages/ag-charts-community/src/chart/marker/square.ts\nvar Square = class extends Marker {\n  updatePath() {\n    const { path, x, y } = this;\n    const hs = this.size / 2;\n    path.clear();\n    path.moveTo(this.align(x - hs), this.align(y - hs));\n    path.lineTo(this.align(x + hs), this.align(y - hs));\n    path.lineTo(this.align(x + hs), this.align(y + hs));\n    path.lineTo(this.align(x - hs), this.align(y + hs));\n    path.closePath();\n  }\n};\nSquare.className = \"Square\";\n\n// packages/ag-charts-community/src/chart/marker/star.ts\nvar Star = class extends Marker {\n  updatePath() {\n    const { x, y, path, size } = this;\n    const spikes = 5;\n    const innerRadius = size / 2;\n    const rotation = Math.PI / 2;\n    path.clear();\n    for (let i = 0; i < spikes * 2; i++) {\n      const radius = i % 2 === 0 ? size : innerRadius;\n      const angle2 = i * Math.PI / spikes - rotation;\n      const xCoordinate = x + Math.cos(angle2) * radius;\n      const yCoordinate = y + Math.sin(angle2) * radius;\n      path.lineTo(xCoordinate, yCoordinate);\n    }\n    path.closePath();\n  }\n};\nStar.className = \"Star\";\n\n// packages/ag-charts-community/src/chart/marker/triangle.ts\nvar _Triangle = class _Triangle extends Marker {\n  updatePath() {\n    const s = this.size * 1.1;\n    super.applyPath(s, _Triangle.moves);\n  }\n};\n_Triangle.className = \"Triangle\";\n_Triangle.moves = [\n  { x: 0, y: -0.48, t: \"move\" },\n  { x: 0.5, y: 0.87 },\n  { x: -1, y: 0 }\n];\nvar Triangle = _Triangle;\n\n// packages/ag-charts-community/src/chart/marker/util.ts\nvar MARKER_SHAPES = {\n  circle: Circle,\n  cross: Cross,\n  diamond: Diamond,\n  heart: Heart,\n  pin: Pin,\n  plus: Plus,\n  square: Square,\n  star: Star,\n  triangle: Triangle\n};\nvar MARKER_SUPPORTED_SHAPES = Object.keys(MARKER_SHAPES);\nfunction isMarkerShape(shape) {\n  return typeof shape === \"string\" && MARKER_SUPPORTED_SHAPES.includes(shape);\n}\nfunction getMarker(shape = Square) {\n  if (isMarkerShape(shape)) {\n    return MARKER_SHAPES[shape];\n  }\n  if (typeof shape === \"function\") {\n    return shape;\n  }\n  return Square;\n}\n\n// packages/ag-charts-community/src/chart/series/dataModelSeries.ts\nvar DataModelSeries = class extends Series {\n  constructor() {\n    super(...arguments);\n    this.showFocusBox = true;\n  }\n  getScaleInformation({\n    xScale,\n    yScale\n  }) {\n    const isContinuousX = ContinuousScale.is(xScale);\n    const isContinuousY = ContinuousScale.is(yScale);\n    return { isContinuousX, isContinuousY, xScaleType: xScale?.type, yScaleType: yScale?.type };\n  }\n  getModulePropertyDefinitions() {\n    const xScale = this.axes[\"x\" /* X */]?.scale;\n    const yScale = this.axes[\"y\" /* Y */]?.scale;\n    return this.moduleMap.mapModules((mod2) => mod2.getPropertyDefinitions(this.getScaleInformation({ xScale, yScale }))).flat();\n  }\n  // Request data, but with message dispatching to series-options (modules).\n  async requestDataModel(dataController, data, opts) {\n    opts.props.push(...this.getModulePropertyDefinitions());\n    const { dataModel, processedData } = await dataController.request(this.id, data ?? [], opts);\n    this.dataModel = dataModel;\n    this.processedData = processedData;\n    this.dispatch(\"data-processed\", { dataModel, processedData });\n    return { dataModel, processedData };\n  }\n  isProcessedDataAnimatable() {\n    const validationResults = this.processedData?.reduced?.animationValidation;\n    if (!validationResults) {\n      return true;\n    }\n    const { orderedKeys, uniqueKeys } = validationResults;\n    return orderedKeys && uniqueKeys;\n  }\n  checkProcessedDataAnimatable() {\n    if (!this.isProcessedDataAnimatable()) {\n      this.ctx.animationManager.skipCurrentBatch();\n    }\n  }\n  pickFocus(opts) {\n    const nodeData = this.getNodeData();\n    if (nodeData === void 0 || nodeData.length === 0) {\n      return;\n    }\n    const datumIndex = this.computeFocusDatumIndex(opts, nodeData);\n    if (datumIndex === void 0) {\n      return;\n    }\n    const { showFocusBox } = this;\n    const datum = nodeData[datumIndex];\n    const derivedOpts = { ...opts, datumIndex };\n    const bounds = this.computeFocusBounds(derivedOpts);\n    if (bounds !== void 0) {\n      return { bounds, showFocusBox, datum, datumIndex };\n    }\n  }\n  computeFocusDatumIndex(opts, nodeData) {\n    const isDatumEnabled = (datumIndex2) => {\n      const { missing = false, enabled = true, focusable = true } = nodeData[datumIndex2];\n      return !missing && enabled && focusable;\n    };\n    const searchBackward = (datumIndex2) => {\n      while (datumIndex2 >= 0 && !isDatumEnabled(datumIndex2)) {\n        datumIndex2--;\n      }\n      return datumIndex2 === -1 ? void 0 : datumIndex2;\n    };\n    const searchForward = (datumIndex2) => {\n      while (datumIndex2 < nodeData.length && !isDatumEnabled(datumIndex2)) {\n        datumIndex2++;\n      }\n      return datumIndex2 === nodeData.length ? void 0 : datumIndex2;\n    };\n    let datumIndex;\n    const clampedIndex = clamp(0, opts.datumIndex, nodeData.length - 1);\n    if (opts.datumIndexDelta < 0) {\n      datumIndex = searchBackward(clampedIndex);\n    } else if (opts.datumIndexDelta > 0) {\n      datumIndex = searchForward(clampedIndex);\n    } else {\n      datumIndex = searchForward(clampedIndex) ?? searchBackward(clampedIndex);\n    }\n    if (datumIndex === void 0) {\n      if (opts.datumIndexDelta === 0) {\n        return;\n      } else {\n        return opts.datumIndex - opts.datumIndexDelta;\n      }\n    } else {\n      return datumIndex;\n    }\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/seriesProperties.ts\nvar SeriesItemHighlightStyle = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.fill = \"rgba(255,255,255, 0.33)\";\n    this.stroke = `rgba(0, 0, 0, 0.4)`;\n    this.strokeWidth = 2;\n  }\n};\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], SeriesItemHighlightStyle.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], SeriesItemHighlightStyle.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], SeriesItemHighlightStyle.prototype, \"stroke\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], SeriesItemHighlightStyle.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], SeriesItemHighlightStyle.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(LINE_DASH, { optional: true })\n], SeriesItemHighlightStyle.prototype, \"lineDash\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], SeriesItemHighlightStyle.prototype, \"lineDashOffset\", 2);\nvar SeriesHighlightStyle = class extends BaseProperties {\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], SeriesHighlightStyle.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], SeriesHighlightStyle.prototype, \"dimOpacity\", 2);\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], SeriesHighlightStyle.prototype, \"enabled\", 2);\nvar TextHighlightStyle = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.color = \"black\";\n  }\n};\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], TextHighlightStyle.prototype, \"color\", 2);\nvar HighlightProperties = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = true;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], HighlightProperties.prototype, \"enabled\", 2);\nvar HighlightStyle = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.item = new SeriesItemHighlightStyle();\n    this.series = new SeriesHighlightStyle();\n    this.text = new TextHighlightStyle();\n  }\n};\n__decorateClass([\n  Validate(OBJECT)\n], HighlightStyle.prototype, \"item\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], HighlightStyle.prototype, \"series\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], HighlightStyle.prototype, \"text\", 2);\nvar SeriesProperties = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.visible = true;\n    this.focusPriority = Infinity;\n    this.showInLegend = true;\n    this.cursor = \"default\";\n    this.nodeClickRange = \"exact\";\n    this.highlight = new HighlightProperties();\n    this.highlightStyle = new HighlightStyle();\n  }\n};\n__decorateClass([\n  Validate(STRING, { optional: true })\n], SeriesProperties.prototype, \"id\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], SeriesProperties.prototype, \"visible\", 2);\n__decorateClass([\n  Validate(REAL_NUMBER, { optional: true })\n], SeriesProperties.prototype, \"focusPriority\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], SeriesProperties.prototype, \"showInLegend\", 2);\n__decorateClass([\n  Validate(STRING)\n], SeriesProperties.prototype, \"cursor\", 2);\n__decorateClass([\n  Validate(INTERACTION_RANGE)\n], SeriesProperties.prototype, \"nodeClickRange\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], SeriesProperties.prototype, \"highlight\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], SeriesProperties.prototype, \"highlightStyle\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/cartesianSeries.ts\nvar DEFAULT_CARTESIAN_DIRECTION_KEYS = {\n  [\"x\" /* X */]: [\"xKey\"],\n  [\"y\" /* Y */]: [\"yKey\"]\n};\nvar DEFAULT_CARTESIAN_DIRECTION_NAMES = {\n  [\"x\" /* X */]: [\"xName\"],\n  [\"y\" /* Y */]: [\"yName\"]\n};\nvar CartesianSeriesNodeEvent = class extends SeriesNodeEvent {\n  constructor(type, nativeEvent, datum, series) {\n    super(type, nativeEvent, datum, series);\n    this.xKey = series.properties.xKey;\n    this.yKey = series.properties.yKey;\n  }\n};\nvar CartesianSeriesProperties = class extends SeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.pickOutsideVisibleMinorAxis = false;\n  }\n};\n__decorateClass([\n  Validate(STRING, { optional: true })\n], CartesianSeriesProperties.prototype, \"legendItemName\", 2);\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], CartesianSeriesProperties.prototype, \"pickOutsideVisibleMinorAxis\", 2);\nvar CartesianSeries = class extends DataModelSeries {\n  constructor({\n    pathsPerSeries = [\"path\"],\n    hasMarkers = false,\n    hasHighlightedLabels = false,\n    pathsZIndexSubOrderOffset = [],\n    datumSelectionGarbageCollection = true,\n    markerSelectionGarbageCollection = true,\n    animationAlwaysUpdateSelections = false,\n    animationResetFns,\n    directionKeys,\n    directionNames,\n    ...otherOpts\n  }) {\n    super({\n      directionKeys,\n      directionNames,\n      canHaveAxes: true,\n      ...otherOpts\n    });\n    this.NodeEvent = CartesianSeriesNodeEvent;\n    this.dataNodeGroup = this.contentGroup.appendChild(\n      new Group({\n        name: `${this.id}-series-dataNodes`,\n        zIndex: 4 /* SERIES_LAYER */,\n        zIndexSubOrder: this.getGroupZIndexSubOrder(\"data\")\n      })\n    );\n    this.markerGroup = this.contentGroup.appendChild(\n      new Group({\n        name: `${this.id}-series-markers`,\n        zIndex: 4 /* SERIES_LAYER */,\n        zIndexSubOrder: this.getGroupZIndexSubOrder(\"marker\")\n      })\n    );\n    this.labelGroup = this.contentGroup.appendChild(\n      new TranslatableGroup({\n        name: `${this.id}-series-labels`,\n        zIndex: 14 /* SERIES_LABEL */,\n        zIndexSubOrder: this.getGroupZIndexSubOrder(\"labels\")\n      })\n    );\n    this.labelSelection = Selection.select(this.labelGroup, Text);\n    this.highlightSelection = Selection.select(\n      this.highlightNode,\n      () => this.opts.hasMarkers ? this.markerFactory() : this.nodeFactory()\n    );\n    this.highlightLabelSelection = Selection.select(this.highlightLabel, Text);\n    this.annotationSelections = /* @__PURE__ */ new Set();\n    this.minRectsCache = {\n      dirtyNodeData: true\n    };\n    this.debug = Debug.create();\n    if (!directionKeys || !directionNames)\n      throw new Error(`Unable to initialise series type ${this.type}`);\n    this.opts = {\n      pathsPerSeries,\n      hasMarkers,\n      hasHighlightedLabels,\n      pathsZIndexSubOrderOffset,\n      directionKeys,\n      directionNames,\n      animationResetFns,\n      animationAlwaysUpdateSelections,\n      datumSelectionGarbageCollection,\n      markerSelectionGarbageCollection\n    };\n    this.paths = [];\n    for (let index = 0; index < pathsPerSeries.length; index++) {\n      this.paths[index] = new Path({ name: `${this.id}-${pathsPerSeries[index]}` });\n      this.paths[index].zIndex = 4 /* SERIES_LAYER */;\n      this.paths[index].zIndexSubOrder = this.getGroupZIndexSubOrder(\"paths\", index);\n      this.contentGroup.appendChild(this.paths[index]);\n    }\n    this.datumSelection = Selection.select(\n      this.dataNodeGroup,\n      () => this.nodeFactory(),\n      datumSelectionGarbageCollection\n    );\n    this.markerSelection = Selection.select(\n      this.markerGroup,\n      () => this.markerFactory(),\n      markerSelectionGarbageCollection\n    );\n    this.animationState = new StateMachine(\n      \"empty\",\n      {\n        empty: {\n          update: {\n            target: \"ready\",\n            action: (data) => this.animateEmptyUpdateReady(data)\n          },\n          reset: \"empty\",\n          skip: \"ready\",\n          disable: \"disabled\"\n        },\n        ready: {\n          updateData: \"waiting\",\n          clear: \"clearing\",\n          highlight: (data) => this.animateReadyHighlight(data),\n          highlightMarkers: (data) => this.animateReadyHighlightMarkers(data),\n          resize: (data) => this.animateReadyResize(data),\n          reset: \"empty\",\n          skip: \"ready\",\n          disable: \"disabled\"\n        },\n        waiting: {\n          update: {\n            target: \"ready\",\n            action: (data) => {\n              if (this.ctx.animationManager.isSkipped()) {\n                this.resetAllAnimation(data);\n              } else {\n                this.animateWaitingUpdateReady(data);\n              }\n            }\n          },\n          reset: \"empty\",\n          skip: \"ready\",\n          disable: \"disabled\"\n        },\n        disabled: {\n          update: (data) => this.resetAllAnimation(data),\n          reset: \"empty\"\n        },\n        clearing: {\n          update: {\n            target: \"empty\",\n            action: (data) => this.animateClearingUpdateEmpty(data)\n          },\n          reset: \"empty\",\n          skip: \"ready\"\n        }\n      },\n      () => this.checkProcessedDataAnimatable()\n    );\n  }\n  get contextNodeData() {\n    return this._contextNodeData;\n  }\n  getNodeData() {\n    return this.contextNodeData?.nodeData;\n  }\n  resetAnimation(phase) {\n    if (phase === \"initial\") {\n      this.animationState.transition(\"reset\");\n    } else if (phase === \"ready\") {\n      this.animationState.transition(\"skip\");\n    } else if (phase === \"disabled\") {\n      this.animationState.transition(\"disable\");\n    }\n  }\n  addChartEventListeners() {\n    this.destroyFns.push(\n      this.ctx.chartEventManager.addListener(\"legend-item-click\", (event) => this.onLegendItemClick(event)),\n      this.ctx.chartEventManager.addListener(\n        \"legend-item-double-click\",\n        (event) => this.onLegendItemDoubleClick(event)\n      )\n    );\n  }\n  destroy() {\n    super.destroy();\n    this._contextNodeData = void 0;\n  }\n  async update({ seriesRect }) {\n    const { visible, _contextNodeData: previousContextData } = this;\n    const series = this.ctx.highlightManager?.getActiveHighlight()?.series;\n    const seriesHighlighted = series === this;\n    const resize = this.checkResize(seriesRect);\n    const highlightItems = await this.updateHighlightSelection(seriesHighlighted);\n    await this.updateSelections(visible);\n    await this.updateNodes(highlightItems, seriesHighlighted, visible);\n    const animationData = this.getAnimationData(seriesRect, previousContextData);\n    if (!animationData)\n      return;\n    if (resize) {\n      this.animationState.transition(\"resize\", animationData);\n    }\n    this.animationState.transition(\"update\", animationData);\n  }\n  async updateSelections(anySeriesItemEnabled) {\n    var _a;\n    const animationSkipUpdate = !this.opts.animationAlwaysUpdateSelections && this.ctx.animationManager.isSkipped();\n    if (!anySeriesItemEnabled && animationSkipUpdate) {\n      return;\n    }\n    if (!this.nodeDataRefresh && !this.isPathOrSelectionDirty()) {\n      return;\n    }\n    if (this.nodeDataRefresh) {\n      this.nodeDataRefresh = false;\n      this.debug(`CartesianSeries.updateSelections() - calling createNodeData() for`, this.id);\n      this.markQuadtreeDirty();\n      this._contextNodeData = await this.createNodeData();\n      const animationValid = this.isProcessedDataAnimatable();\n      if (this._contextNodeData) {\n        (_a = this._contextNodeData).animationValid ?? (_a.animationValid = animationValid);\n      }\n      this.minRectsCache.dirtyNodeData = true;\n      const { dataModel, processedData } = this;\n      if (dataModel !== void 0 && processedData !== void 0) {\n        this.dispatch(\"data-update\", { dataModel, processedData });\n      }\n    }\n    await this.updateSeriesSelections();\n  }\n  async updateSeriesSelections(seriesHighlighted) {\n    const { datumSelection, labelSelection, markerSelection, paths } = this;\n    const contextData = this._contextNodeData;\n    if (!contextData)\n      return;\n    const { nodeData, labelData, itemId } = contextData;\n    await this.updatePaths({ seriesHighlighted, itemId, contextData, paths });\n    this.datumSelection = await this.updateDatumSelection({ nodeData, datumSelection });\n    this.labelSelection = await this.updateLabelSelection({ labelData, labelSelection });\n    if (this.opts.hasMarkers) {\n      this.markerSelection = await this.updateMarkerSelection({ nodeData, markerSelection });\n    }\n  }\n  markerFactory() {\n    const MarkerShape = getMarker();\n    return new MarkerShape();\n  }\n  getGroupZIndexSubOrder(type, subIndex = 0) {\n    const result = super.getGroupZIndexSubOrder(type, subIndex);\n    if (type === \"paths\") {\n      const [superFn] = result;\n      const pathOffset = this.opts.pathsZIndexSubOrderOffset[subIndex] ?? 0;\n      result[0] = isFunction(superFn) ? () => Number(superFn()) + pathOffset : Number(superFn) + pathOffset;\n    }\n    return result;\n  }\n  async updateNodes(highlightedItems, seriesHighlighted, anySeriesItemEnabled) {\n    const {\n      highlightSelection,\n      highlightLabelSelection,\n      opts: { hasMarkers, hasHighlightedLabels }\n    } = this;\n    const animationEnabled = !this.ctx.animationManager.isSkipped();\n    const visible = this.visible && this._contextNodeData != null && anySeriesItemEnabled;\n    this.rootGroup.visible = animationEnabled || visible;\n    this.contentGroup.visible = animationEnabled || visible;\n    this.highlightGroup.visible = (animationEnabled || visible) && seriesHighlighted;\n    const opacity = this.getOpacity();\n    if (hasMarkers) {\n      await this.updateMarkerNodes({\n        markerSelection: highlightSelection,\n        isHighlight: true\n      });\n      this.animationState.transition(\"highlightMarkers\", highlightSelection);\n    } else {\n      await this.updateDatumNodes({\n        datumSelection: highlightSelection,\n        isHighlight: true\n      });\n      this.animationState.transition(\"highlight\", highlightSelection);\n    }\n    if (hasHighlightedLabels) {\n      await this.updateLabelNodes({ labelSelection: highlightLabelSelection });\n    }\n    const { dataNodeGroup, markerGroup, datumSelection, labelSelection, markerSelection, paths, labelGroup } = this;\n    const { itemId } = this.contextNodeData ?? {};\n    dataNodeGroup.opacity = opacity;\n    dataNodeGroup.visible = animationEnabled || visible;\n    labelGroup.visible = visible;\n    if (hasMarkers) {\n      markerGroup.opacity = opacity;\n      markerGroup.zIndex = dataNodeGroup.zIndex >= 4 /* SERIES_LAYER */ ? dataNodeGroup.zIndex : dataNodeGroup.zIndex + 1;\n      markerGroup.visible = visible;\n    }\n    if (labelGroup) {\n      labelGroup.opacity = opacity;\n    }\n    await this.updatePathNodes({\n      seriesHighlighted,\n      itemId,\n      paths,\n      opacity,\n      visible,\n      animationEnabled\n    });\n    if (!dataNodeGroup.visible) {\n      return;\n    }\n    await this.updateDatumNodes({ datumSelection, highlightedItems, isHighlight: false });\n    await this.updateLabelNodes({ labelSelection });\n    if (hasMarkers) {\n      await this.updateMarkerNodes({ markerSelection, isHighlight: false });\n    }\n  }\n  getHighlightLabelData(labelData, highlightedItem) {\n    const labelItems = labelData.filter(\n      (ld) => ld.datum === highlightedItem.datum && ld.itemId === highlightedItem.itemId\n    );\n    return labelItems.length === 0 ? void 0 : labelItems;\n  }\n  getHighlightData(_nodeData, highlightedItem) {\n    return highlightedItem ? [highlightedItem] : void 0;\n  }\n  async updateHighlightSelection(seriesHighlighted) {\n    const { highlightSelection, highlightLabelSelection, _contextNodeData: contextNodeData } = this;\n    if (!contextNodeData)\n      return;\n    const highlightedDatum = this.ctx.highlightManager?.getActiveHighlight();\n    const item = seriesHighlighted && highlightedDatum?.datum ? highlightedDatum : void 0;\n    let labelItems;\n    let highlightItems;\n    if (item != null) {\n      const labelsEnabled = this.isLabelEnabled();\n      const { labelData, nodeData } = contextNodeData;\n      highlightItems = this.getHighlightData(nodeData, item);\n      labelItems = labelsEnabled ? this.getHighlightLabelData(labelData, item) : void 0;\n    }\n    this.highlightSelection = await this.updateHighlightSelectionItem({\n      items: highlightItems,\n      highlightSelection\n    });\n    this.highlightLabelSelection = await this.updateHighlightSelectionLabel({\n      items: labelItems,\n      highlightLabelSelection\n    });\n    return highlightItems;\n  }\n  markQuadtreeDirty() {\n    this.quadtree = void 0;\n  }\n  *datumNodesIter() {\n    for (const { node } of this.datumSelection) {\n      if (node.datum.missing === true)\n        continue;\n      yield node;\n    }\n  }\n  getQuadTree() {\n    if (this.quadtree === void 0) {\n      const { width: width2, height: height2 } = this.ctx.scene.canvas;\n      const canvasRect = new BBox(0, 0, width2, height2);\n      this.quadtree = new QuadtreeNearest(100, 10, canvasRect);\n      this.initQuadTree(this.quadtree);\n    }\n    return this.quadtree;\n  }\n  initQuadTree(_quadtree) {\n  }\n  pickNodeExactShape(point) {\n    const result = super.pickNodeExactShape(point);\n    if (result) {\n      return result;\n    }\n    const { x, y } = point;\n    const {\n      opts: { hasMarkers }\n    } = this;\n    let match;\n    const { dataNodeGroup, markerGroup } = this;\n    match = dataNodeGroup.pickNode(x, y);\n    if (!match && hasMarkers) {\n      match = markerGroup?.pickNode(x, y);\n    }\n    if (match && match.datum.missing !== true) {\n      return { datum: match.datum, distance: 0 };\n    }\n    for (const mod2 of this.moduleMap.modules()) {\n      const { datum } = mod2.pickNodeExact(point) ?? {};\n      if (datum == null)\n        continue;\n      if (datum?.missing === true)\n        continue;\n      return { datum, distance: 0 };\n    }\n  }\n  pickNodeClosestDatum(point) {\n    const { x, y } = point;\n    const { axes, _contextNodeData: contextNodeData } = this;\n    if (!contextNodeData)\n      return;\n    const xAxis = axes[\"x\" /* X */];\n    const yAxis = axes[\"y\" /* Y */];\n    const hitPoint = { x, y };\n    let minDistance = Infinity;\n    let closestDatum;\n    for (const datum of contextNodeData.nodeData) {\n      const { point: { x: datumX = NaN, y: datumY = NaN } = {} } = datum;\n      if (isNaN(datumX) || isNaN(datumY)) {\n        continue;\n      }\n      const isInRange = xAxis?.inRange(datumX) && yAxis?.inRange(datumY);\n      if (!isInRange) {\n        continue;\n      }\n      const distance3 = Math.max((hitPoint.x - datumX) ** 2 + (hitPoint.y - datumY) ** 2, 0);\n      if (distance3 < minDistance) {\n        minDistance = distance3;\n        closestDatum = datum;\n      }\n    }\n    for (const mod2 of this.moduleMap.modules()) {\n      const modPick = mod2.pickNodeNearest(point);\n      if (modPick !== void 0 && modPick.distanceSquared < minDistance) {\n        minDistance = modPick.distanceSquared;\n        closestDatum = modPick.datum;\n        break;\n      }\n    }\n    if (closestDatum) {\n      const distance3 = Math.max(Math.sqrt(minDistance) - (closestDatum.point?.size ?? 0), 0);\n      return { datum: closestDatum, distance: distance3 };\n    }\n  }\n  pickNodeMainAxisFirst(point, requireCategoryAxis) {\n    const { x, y } = point;\n    const { axes, _contextNodeData: contextNodeData } = this;\n    const { pickOutsideVisibleMinorAxis } = this.properties;\n    if (!contextNodeData)\n      return;\n    const xAxis = axes[\"x\" /* X */];\n    const yAxis = axes[\"y\" /* Y */];\n    const directions2 = [xAxis, yAxis].filter(CategoryAxis.is).map((a) => a.direction);\n    if (requireCategoryAxis && directions2.length === 0)\n      return;\n    const [majorDirection = \"x\" /* X */] = directions2;\n    const hitPointCoords = [x, y];\n    if (majorDirection !== \"x\" /* X */)\n      hitPointCoords.reverse();\n    const minDistance = [Infinity, Infinity];\n    let closestDatum;\n    for (const datum of contextNodeData.nodeData) {\n      const { x: datumX = NaN, y: datumY = NaN } = datum.point ?? datum.midPoint ?? {};\n      if (isNaN(datumX) || isNaN(datumY) || datum.missing === true)\n        continue;\n      const visible = [xAxis?.inRange(datumX), yAxis?.inRange(datumY)];\n      if (majorDirection !== \"x\" /* X */) {\n        visible.reverse();\n      }\n      if (!visible[0] || !pickOutsideVisibleMinorAxis && !visible[1])\n        continue;\n      const datumPoint = [datumX, datumY];\n      if (majorDirection !== \"x\" /* X */) {\n        datumPoint.reverse();\n      }\n      let newMinDistance = true;\n      for (let i = 0; i < datumPoint.length; i++) {\n        const dist = Math.abs(datumPoint[i] - hitPointCoords[i]);\n        if (dist > minDistance[i]) {\n          newMinDistance = false;\n          break;\n        } else if (dist < minDistance[i]) {\n          minDistance[i] = dist;\n          minDistance.fill(Infinity, i + 1, minDistance.length);\n        }\n      }\n      if (newMinDistance) {\n        closestDatum = datum;\n      }\n    }\n    if (closestDatum) {\n      let closestDistanceSquared = Math.max(\n        minDistance[0] ** 2 + minDistance[1] ** 2 - (closestDatum.point?.size ?? 0),\n        0\n      );\n      for (const mod2 of this.moduleMap.modules()) {\n        const modPick = mod2.pickNodeMainAxisFirst(point);\n        if (modPick !== void 0 && modPick.distanceSquared < closestDistanceSquared) {\n          closestDatum = modPick.datum;\n          closestDistanceSquared = modPick.distanceSquared;\n          break;\n        }\n      }\n      return { datum: closestDatum, distance: Math.sqrt(closestDistanceSquared) };\n    }\n  }\n  onLegendItemClick(event) {\n    const { legendItemName } = this.properties;\n    const { enabled, itemId, series } = event;\n    const matchedLegendItemName = legendItemName != null && legendItemName === event.legendItemName;\n    if (series.id === this.id || matchedLegendItemName) {\n      this.toggleSeriesItem(itemId, enabled);\n    }\n  }\n  onLegendItemDoubleClick(event) {\n    const { enabled, itemId, series, numVisibleItems } = event;\n    const { legendItemName } = this.properties;\n    const matchedLegendItemName = legendItemName != null && legendItemName === event.legendItemName;\n    if (series.id === this.id || matchedLegendItemName) {\n      this.toggleSeriesItem(itemId, true);\n    } else if (enabled && numVisibleItems === 1) {\n      this.toggleSeriesItem(itemId, true);\n    } else {\n      this.toggleSeriesItem(itemId, false);\n    }\n  }\n  isPathOrSelectionDirty() {\n    return false;\n  }\n  getLabelData() {\n    return [];\n  }\n  shouldFlipXY() {\n    return false;\n  }\n  /**\n   * Get the minimum bounding box that contains any adjacent two nodes. The axes are treated independently, so this\n   * may not represent the same two points for both directions. The dimensions represent the greatest distance\n   * between any two adjacent nodes.\n   */\n  getMinRects(width2, height2) {\n    const { dirtyNodeData, sizeCache, minRect, minVisibleRect } = this.minRectsCache;\n    const newSizeCache = JSON.stringify({ width: width2, height: height2 });\n    const dirtySize = newSizeCache !== sizeCache;\n    if (!dirtySize && !dirtyNodeData && minRect && minVisibleRect) {\n      return { minRect, minVisibleRect };\n    }\n    const rects = this.computeMinRects(width2, height2);\n    this.minRectsCache = {\n      dirtyNodeData: false,\n      sizeCache: newSizeCache,\n      minRect: rects?.minRect,\n      minVisibleRect: rects?.minVisibleRect\n    };\n    return rects;\n  }\n  computeMinRects(width2, height2) {\n    const context = this._contextNodeData;\n    if (!context?.nodeData.length) {\n      return;\n    }\n    const { nodeData } = context;\n    const minRectXs = Array(nodeData.length);\n    const minRectYs = Array(nodeData.length);\n    for (const [i, { midPoint }] of nodeData.entries()) {\n      minRectXs[i] = midPoint?.x ?? 0;\n      minRectYs[i] = midPoint?.y ?? 0;\n    }\n    minRectXs.sort((a, b) => a - b);\n    minRectYs.sort((a, b) => a - b);\n    let zeroX, widthX, zeroY, heightY;\n    let maxWidth = 0;\n    let maxHeight = 0;\n    for (let i = 1; i < nodeData.length; i++) {\n      if (minRectXs[i] >= 0)\n        zeroX ?? (zeroX = i);\n      if (minRectXs[i] > width2)\n        widthX ?? (widthX = i);\n      if (minRectYs[i] >= 0)\n        zeroY ?? (zeroY = i);\n      if (minRectYs[i] > height2)\n        heightY ?? (heightY = i);\n      maxWidth = Math.max(maxWidth, minRectXs[i] - minRectXs[i - 1]);\n      maxHeight = Math.max(maxHeight, minRectYs[i] - minRectYs[i - 1]);\n    }\n    widthX ?? (widthX = nodeData.length);\n    heightY ?? (heightY = nodeData.length);\n    const minVisibleRectXs = zeroX != null && widthX != null ? minRectXs.slice(zeroX, widthX) : [];\n    const minVisibleRectYs = zeroY != null && heightY != null ? minRectYs.slice(zeroY, heightY) : [];\n    let maxVisibleWidth = 0;\n    let maxVisibleHeight = 0;\n    for (let i = 1; i < Math.max(minVisibleRectXs.length, minVisibleRectYs.length); i++) {\n      const x1 = minVisibleRectXs[i];\n      const x2 = minVisibleRectXs[i - 1];\n      const y1 = minVisibleRectYs[i];\n      const y2 = minVisibleRectYs[i - 1];\n      if (x1 != null && x2 != null) {\n        maxVisibleWidth = Math.max(maxVisibleWidth, x1 - x2);\n      }\n      if (y1 != null && y2 != null) {\n        maxVisibleHeight = Math.max(maxVisibleHeight, y1 - y2);\n      }\n    }\n    const minRect = new BBox(0, 0, maxWidth, maxHeight);\n    const minVisibleRect = new BBox(0, 0, maxVisibleWidth, maxVisibleHeight);\n    return { minRect, minVisibleRect };\n  }\n  updateHighlightSelectionItem(opts) {\n    const {\n      opts: { hasMarkers }\n    } = this;\n    const { items, highlightSelection } = opts;\n    const nodeData = items ?? [];\n    if (hasMarkers) {\n      const markerSelection = highlightSelection;\n      return this.updateMarkerSelection({ nodeData, markerSelection });\n    } else {\n      return this.updateDatumSelection({\n        nodeData,\n        datumSelection: highlightSelection\n      });\n    }\n  }\n  updateHighlightSelectionLabel(opts) {\n    return this.updateLabelSelection({\n      labelData: opts.items ?? [],\n      labelSelection: opts.highlightLabelSelection\n    });\n  }\n  async updateDatumSelection(opts) {\n    return opts.datumSelection;\n  }\n  async updateDatumNodes(_opts) {\n  }\n  async updateMarkerSelection(opts) {\n    return opts.markerSelection;\n  }\n  async updateMarkerNodes(_opts) {\n  }\n  async updatePaths(opts) {\n    opts.paths.forEach((p) => p.visible = false);\n  }\n  async updatePathNodes(opts) {\n    const { paths, opacity, visible } = opts;\n    for (const path of paths) {\n      path.opacity = opacity;\n      path.visible = visible;\n    }\n  }\n  resetPathAnimation(data) {\n    const { path } = this.opts?.animationResetFns ?? {};\n    if (path) {\n      data.paths.forEach((paths) => {\n        resetMotion([paths], path);\n      });\n    }\n  }\n  resetDatumAnimation(data) {\n    const { datum } = this.opts?.animationResetFns ?? {};\n    if (datum) {\n      resetMotion([data.datumSelection], datum);\n    }\n  }\n  resetLabelAnimation(data) {\n    const { label } = this.opts?.animationResetFns ?? {};\n    if (label) {\n      resetMotion([data.labelSelection], label);\n    }\n  }\n  resetMarkerAnimation(data) {\n    const { marker } = this.opts?.animationResetFns ?? {};\n    if (marker && this.opts.hasMarkers) {\n      resetMotion([data.markerSelection], marker);\n    }\n  }\n  resetAllAnimation(data) {\n    this.ctx.animationManager.stopByAnimationGroupId(this.id);\n    this.resetPathAnimation(data);\n    this.resetDatumAnimation(data);\n    this.resetLabelAnimation(data);\n    this.resetMarkerAnimation(data);\n    if (data.contextData?.animationValid === false) {\n      this.ctx.animationManager.skipCurrentBatch();\n    }\n  }\n  animateEmptyUpdateReady(data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation(data);\n  }\n  animateWaitingUpdateReady(data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation(data);\n  }\n  animateReadyHighlight(data) {\n    const { datum } = this.opts?.animationResetFns ?? {};\n    if (datum) {\n      resetMotion([data], datum);\n    }\n  }\n  animateReadyHighlightMarkers(data) {\n    const { marker } = this.opts?.animationResetFns ?? {};\n    if (marker) {\n      resetMotion([data], marker);\n    }\n  }\n  animateReadyResize(data) {\n    this.resetAllAnimation(data);\n  }\n  animateClearingUpdateEmpty(data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation(data);\n  }\n  animationTransitionClear() {\n    const animationData = this.getAnimationData();\n    if (!animationData)\n      return;\n    this.animationState.transition(\"clear\", animationData);\n  }\n  getAnimationData(seriesRect, previousContextData) {\n    const { _contextNodeData: contextData } = this;\n    if (!contextData)\n      return;\n    const animationData = {\n      datumSelection: this.datumSelection,\n      markerSelection: this.markerSelection,\n      labelSelection: this.labelSelection,\n      annotationSelections: [...this.annotationSelections],\n      contextData,\n      previousContextData,\n      paths: this.paths,\n      seriesRect\n    };\n    return animationData;\n  }\n  calculateScaling() {\n    const result = {};\n    for (const direction of Object.values(ChartAxisDirection)) {\n      const axis = this.axes[direction];\n      if (!axis)\n        continue;\n      if (axis.scale instanceof LogScale) {\n        const { range: range3, domain } = axis.scale;\n        result[direction] = {\n          type: \"log\",\n          convert: (d) => axis.scale.convert(d),\n          domain: [domain[0], domain[1]],\n          range: [range3[0], range3[1]]\n        };\n      } else if (axis.scale instanceof ContinuousScale) {\n        const { range: range3 } = axis.scale;\n        const domain = axis.scale.getDomain();\n        result[direction] = {\n          type: \"continuous\",\n          domain: [domain[0], domain[1]],\n          range: [range3[0], range3[1]]\n        };\n      } else if (axis.scale) {\n        const { domain } = axis.scale;\n        result[direction] = {\n          type: \"category\",\n          domain,\n          range: domain.map((d) => axis.scale.convert(d))\n        };\n      }\n    }\n    return result;\n  }\n};\n\n// packages/ag-charts-community/src/chart/cartesianChart.ts\nvar directions = [\"top\", \"right\", \"bottom\", \"left\"];\nvar CartesianChart = class extends Chart {\n  constructor(options, resources) {\n    super(options, resources);\n    /** Integrated Charts feature state - not used in Standalone Charts. */\n    this.paired = true;\n    this.firstSeriesTranslation = true;\n    this.lastUpdateClipRect = void 0;\n    this._lastCrossLineIds = void 0;\n    this._lastAxisAreaWidths = /* @__PURE__ */ new Map();\n    this._lastClipSeries = false;\n    this._lastVisibility = {\n      crossLines: true,\n      series: true\n    };\n  }\n  onAxisChange(newValue, oldValue) {\n    super.onAxisChange(newValue, oldValue);\n    this.ctx?.zoomManager.updateAxes(newValue);\n  }\n  destroySeries(series) {\n    super.destroySeries(series);\n    this.firstSeriesTranslation = true;\n  }\n  getChartType() {\n    return \"cartesian\";\n  }\n  setRootClipRects(clipRect) {\n    const { seriesRoot, annotationRoot, highlightRoot } = this;\n    seriesRoot.setClipRect(clipRect);\n    highlightRoot.setClipRect(clipRect);\n    annotationRoot.setClipRect(clipRect);\n  }\n  performLayout(ctx) {\n    const { firstSeriesTranslation, seriesRoot, annotationRoot, highlightRoot } = this;\n    const { seriesRect, visibility, clipSeries } = this.updateAxes(ctx.layoutBox);\n    this.seriesRoot.visible = visibility.series;\n    this.seriesRect = seriesRect;\n    this.animationRect = ctx.layoutBox;\n    const { x, y } = seriesRect;\n    if (firstSeriesTranslation) {\n      for (const group of [seriesRoot, annotationRoot, highlightRoot]) {\n        group.translationX = Math.floor(x);\n        group.translationY = Math.floor(y);\n      }\n      this.firstSeriesTranslation = false;\n    } else {\n      const { translationX, translationY } = seriesRoot;\n      staticFromToMotion(\n        this.id,\n        \"seriesRect\",\n        this.ctx.animationManager,\n        [seriesRoot, highlightRoot, annotationRoot],\n        { translationX, translationY },\n        { translationX: Math.floor(x), translationY: Math.floor(y) },\n        { phase: \"update\" }\n      );\n    }\n    const seriesPaddedRect = seriesRect.clone().grow(this.seriesArea.padding);\n    const clipRect = this.seriesArea.clip || clipSeries ? seriesPaddedRect : void 0;\n    const { lastUpdateClipRect } = this;\n    this.lastUpdateClipRect = clipRect;\n    if (this.ctx.animationManager.isActive() && lastUpdateClipRect != null) {\n      this.ctx.animationManager.animate({\n        id: this.id,\n        groupId: \"clip-rect\",\n        phase: \"update\",\n        from: lastUpdateClipRect,\n        to: seriesPaddedRect,\n        onUpdate: (interpolatedClipRect) => this.setRootClipRects(interpolatedClipRect),\n        onComplete: () => this.setRootClipRects(clipRect)\n      });\n    } else {\n      this.setRootClipRects(clipRect);\n    }\n    this.ctx.layoutManager.emitLayoutComplete(ctx, {\n      axes: this.axes.map((axis) => axis.getLayoutState()),\n      series: {\n        rect: seriesRect,\n        paddedRect: seriesPaddedRect,\n        visible: visibility.series,\n        shouldFlipXY: this.shouldFlipXY()\n      },\n      clipSeries\n    });\n  }\n  updateAxes(layoutBox) {\n    const crossLineIds = this.axes.flatMap((axis) => axis.crossLines ?? []).map((crossLine) => crossLine.id);\n    const axesValid = this._lastCrossLineIds != null && this._lastCrossLineIds.length === crossLineIds.length && this._lastCrossLineIds.every((id, index) => crossLineIds[index] === id);\n    let axisAreaWidths;\n    let clipSeries;\n    let visibility;\n    if (axesValid) {\n      axisAreaWidths = new Map(this._lastAxisAreaWidths.entries());\n      clipSeries = this._lastClipSeries;\n      visibility = { ...this._lastVisibility };\n    } else {\n      axisAreaWidths = /* @__PURE__ */ new Map();\n      clipSeries = false;\n      visibility = { crossLines: true, series: true };\n      this._lastCrossLineIds = crossLineIds;\n    }\n    const liveAxisWidths = new Set(this.axes.map((a) => a.position));\n    for (const position of axisAreaWidths.keys()) {\n      if (!liveAxisWidths.has(position)) {\n        axisAreaWidths.delete(position);\n      }\n    }\n    const stableOutputs = (otherAxisWidths, otherClipSeries, otherVisibility) => {\n      if ([...otherAxisWidths.keys()].some((k) => !axisAreaWidths.has(k))) {\n        return false;\n      }\n      if (visibility.crossLines !== otherVisibility.crossLines || visibility.series !== otherVisibility.series || clipSeries !== otherClipSeries) {\n        return false;\n      }\n      for (const [p, w] of axisAreaWidths.entries()) {\n        const otherW = otherAxisWidths.get(p);\n        if ((w != null || otherW != null) && w !== otherW) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const ceilValues = (map) => {\n      for (const [key, value] of map.entries()) {\n        if (value && Math.abs(value) === Infinity) {\n          map.set(key, 0);\n          continue;\n        }\n        map.set(key, value != null ? Math.ceil(value) : value);\n      }\n      return map;\n    };\n    let lastPassAxisAreaWidths = /* @__PURE__ */ new Map();\n    let lastPassVisibility = {};\n    let lastPassClipSeries = false;\n    let seriesRect = this.seriesRect?.clone();\n    let count = 0;\n    do {\n      axisAreaWidths = new Map(lastPassAxisAreaWidths.entries());\n      clipSeries = lastPassClipSeries;\n      Object.assign(visibility, lastPassVisibility);\n      const result = this.updateAxesPass(axisAreaWidths, layoutBox.clone(), seriesRect);\n      lastPassAxisAreaWidths = ceilValues(result.axisAreaWidths);\n      lastPassVisibility = result.visibility;\n      lastPassClipSeries = result.clipSeries;\n      ({ seriesRect } = result);\n      if (count++ > 10) {\n        Logger.warn(\"unable to find stable axis layout.\");\n        break;\n      }\n    } while (!stableOutputs(lastPassAxisAreaWidths, lastPassClipSeries, lastPassVisibility));\n    this.axes.forEach((axis) => {\n      axis.update();\n    });\n    const clipRectPadding = 5;\n    this.axes.forEach((axis) => {\n      axis.setCrossLinesVisible(visibility.crossLines);\n      if (!seriesRect) {\n        return;\n      }\n      axis.clipGrid(\n        seriesRect.x,\n        seriesRect.y,\n        seriesRect.width + clipRectPadding,\n        seriesRect.height + clipRectPadding\n      );\n      switch (axis.position) {\n        case \"left\":\n        case \"right\":\n          axis.clipTickLines(\n            layoutBox.x,\n            seriesRect.y,\n            layoutBox.width + clipRectPadding,\n            seriesRect.height + clipRectPadding\n          );\n          break;\n        case \"top\":\n        case \"bottom\":\n          axis.clipTickLines(\n            seriesRect.x,\n            layoutBox.y,\n            seriesRect.width + clipRectPadding,\n            layoutBox.height + clipRectPadding\n          );\n          break;\n      }\n    });\n    this._lastAxisAreaWidths = axisAreaWidths;\n    this._lastVisibility = visibility;\n    this._lastClipSeries = clipSeries;\n    return { seriesRect, visibility, clipSeries };\n  }\n  updateAxesPass(axisAreaWidths, bounds, lastPassSeriesRect) {\n    const axisWidths = /* @__PURE__ */ new Map();\n    const axisGroups = /* @__PURE__ */ new Map();\n    const visibility = {\n      series: true,\n      crossLines: true\n    };\n    let clipSeries = false;\n    const primaryTickCounts = {};\n    const paddedBounds = this.applySeriesPadding(bounds);\n    const crossLinePadding = lastPassSeriesRect ? this.buildCrossLinePadding(axisAreaWidths) : {};\n    const axisAreaBound = this.buildAxisBound(paddedBounds, axisAreaWidths, crossLinePadding, visibility);\n    const seriesRect = this.buildSeriesRect(axisAreaBound, axisAreaWidths);\n    for (const axis of this.axes) {\n      const { position = \"left\" } = axis;\n      const { clipSeries: newClipSeries, axisThickness } = this.calculateAxisDimensions({\n        axis,\n        seriesRect,\n        primaryTickCounts,\n        clipSeries\n      });\n      axisWidths.set(axis.id, axisThickness);\n      if (!axisGroups.has(position))\n        axisGroups.set(position, []);\n      axisGroups.get(position)?.push(axis);\n      clipSeries = clipSeries || newClipSeries;\n    }\n    const newAxisAreaWidths = /* @__PURE__ */ new Map();\n    const axisOffsets = /* @__PURE__ */ new Map();\n    for (const [position, axes] of axisGroups.entries()) {\n      const isVertical = position === \"left\" || position === \"right\";\n      newAxisAreaWidths.set(position, this.calculateAxisArea(axes, axisWidths, axisOffsets, isVertical));\n    }\n    for (const [position, axes] of axisGroups.entries()) {\n      this.positionAxes({\n        axes,\n        position,\n        axisWidths,\n        axisOffsets,\n        axisAreaWidths: newAxisAreaWidths,\n        axisBound: axisAreaBound,\n        seriesRect\n      });\n    }\n    return { clipSeries, seriesRect, axisAreaWidths: newAxisAreaWidths, visibility };\n  }\n  buildCrossLinePadding(axisAreaSize) {\n    const crossLinePadding = {};\n    this.axes.forEach((axis) => {\n      axis.crossLines?.forEach((crossLine) => {\n        crossLine.calculatePadding?.(crossLinePadding);\n      });\n    });\n    for (const [side, padding = 0] of Object.entries(crossLinePadding)) {\n      crossLinePadding[side] = Math.max(padding - (axisAreaSize.get(side) ?? 0), 0);\n    }\n    return crossLinePadding;\n  }\n  applySeriesPadding(bounds) {\n    const paddedRect = bounds.clone();\n    directions.forEach((dir) => {\n      const padding = this.seriesArea.padding[dir];\n      const axis = this.axes.findLast((a) => a.position === dir);\n      if (axis) {\n        axis.seriesAreaPadding = padding;\n      } else {\n        paddedRect.shrink(padding, dir);\n      }\n    });\n    return paddedRect;\n  }\n  buildAxisBound(bounds, axisAreaWidths, crossLinePadding, visibility) {\n    const result = bounds.clone();\n    const { top = 0, right = 0, bottom = 0, left = 0 } = crossLinePadding;\n    const horizontalPadding = left + right;\n    const verticalPadding = top + bottom;\n    const totalWidth = (axisAreaWidths.get(\"left\") ?? 0) + (axisAreaWidths.get(\"right\") ?? 0) + horizontalPadding;\n    const totalHeight = (axisAreaWidths.get(\"top\") ?? 0) + (axisAreaWidths.get(\"bottom\") ?? 0) + verticalPadding;\n    if (result.width <= totalWidth || result.height <= totalHeight) {\n      visibility.crossLines = false;\n      visibility.series = false;\n      return result;\n    }\n    result.x += left;\n    result.y += top;\n    result.width -= horizontalPadding;\n    result.height -= verticalPadding;\n    return result;\n  }\n  buildSeriesRect(axisBound, axisAreaWidths) {\n    const result = axisBound.clone();\n    result.x += axisAreaWidths.get(\"left\") ?? 0;\n    result.y += axisAreaWidths.get(\"top\") ?? 0;\n    result.width -= (axisAreaWidths.get(\"left\") ?? 0) + (axisAreaWidths.get(\"right\") ?? 0);\n    result.height -= (axisAreaWidths.get(\"top\") ?? 0) + (axisAreaWidths.get(\"bottom\") ?? 0);\n    result.width = Math.max(0, result.width);\n    result.height = Math.max(0, result.height);\n    return result;\n  }\n  clampToOutsideSeriesRect(seriesRect, value, dimension, direction) {\n    const { x, y, width: width2, height: height2 } = seriesRect;\n    const clampBounds = [x, y, x + width2, y + height2];\n    const compareTo = clampBounds[(dimension === \"x\" ? 0 : 1) + (direction === 1 ? 0 : 2)];\n    const clampFn = direction === 1 ? Math.min : Math.max;\n    return clampFn(value, compareTo);\n  }\n  calculateAxisDimensions(opts) {\n    const { axis, seriesRect, primaryTickCounts } = opts;\n    let { clipSeries } = opts;\n    const { position = \"left\", direction } = axis;\n    this.sizeAxis(axis, seriesRect, position);\n    const syncedDomain = this.getSyncedDomain(axis);\n    const layout = axis.calculateLayout(syncedDomain, axis.nice ? primaryTickCounts[direction] : void 0);\n    const isVertical = direction === \"y\" /* Y */;\n    primaryTickCounts[direction] ?? (primaryTickCounts[direction] = layout.primaryTickCount);\n    clipSeries || (clipSeries = axis.dataDomain.clipped || axis.visibleRange[0] > 0 || axis.visibleRange[1] < 1);\n    let axisThickness;\n    if (axis.thickness != null && axis.thickness > 0) {\n      axisThickness = axis.thickness;\n    } else {\n      axisThickness = isVertical ? layout.bbox.width : layout.bbox.height;\n    }\n    axisThickness = Math.ceil(axisThickness);\n    return { clipSeries, axisThickness };\n  }\n  getSyncedDomain(axis) {\n    const syncModule = this.modulesManager.getModule(\"sync\");\n    if (!syncModule?.enabled)\n      return;\n    const syncedDomain = syncModule.getSyncedDomain(axis);\n    if (syncedDomain && axis.dataDomain.domain.length) {\n      let shouldUpdate;\n      const { domain } = axis.scale;\n      if (ContinuousScale.is(axis.scale)) {\n        const [min, max] = findMinMax(syncedDomain);\n        shouldUpdate = min !== domain[0] || max !== domain[1];\n      } else {\n        shouldUpdate = !arraysEqual(syncedDomain, domain);\n      }\n      if (shouldUpdate && !this.skipSync) {\n        syncModule.updateSiblings();\n      }\n    }\n    return syncedDomain;\n  }\n  sizeAxis(axis, seriesRect, position) {\n    const isCategory = axis instanceof CategoryAxis || axis instanceof GroupedCategoryAxis;\n    const isLeftRight = position === \"left\" || position === \"right\";\n    let { min, max } = this.ctx.zoomManager.getAxisZoom(axis.id);\n    const { width: width2, height: height2 } = seriesRect;\n    const minStart = 0;\n    const maxEnd = isLeftRight ? height2 : width2;\n    let start2 = minStart;\n    let end2 = maxEnd;\n    const { width: axisWidth, unit, align } = axis.layoutConstraints;\n    if (unit === \"px\") {\n      end2 = start2 + axisWidth;\n    } else {\n      end2 = end2 * axisWidth / 100;\n    }\n    if (align === \"end\") {\n      start2 = maxEnd - (end2 - start2);\n      end2 = maxEnd;\n    }\n    if (isCategory && isLeftRight) {\n      [min, max] = [1 - max, 1 - min];\n    } else if (isLeftRight) {\n      [start2, end2] = [end2, start2];\n    }\n    axis.range = [start2, end2];\n    axis.visibleRange = [min, max];\n    axis.gridLength = isLeftRight ? width2 : height2;\n  }\n  calculateAxisArea(axes, axisWidths, axisOffsets, isVertical) {\n    const { width: width2, height: height2, canvas } = this.ctx.scene;\n    let currentOffset = isVertical ? height2 % canvas.pixelRatio : width2 % canvas.pixelRatio;\n    let totalAxisWidth = 0;\n    for (const axis of axes) {\n      axisOffsets.set(axis.id, currentOffset);\n      const axisThickness = axisWidths.get(axis.id) ?? 0;\n      totalAxisWidth = Math.max(totalAxisWidth, currentOffset + axisThickness);\n      if (axis.layoutConstraints.stacked) {\n        currentOffset += axisThickness + 15;\n      }\n    }\n    return totalAxisWidth;\n  }\n  positionAxes(opts) {\n    const { axes, axisBound, axisWidths, axisOffsets, axisAreaWidths, seriesRect, position } = opts;\n    const axisAreaWidth = axisAreaWidths.get(position) ?? 0;\n    let mainDimension = \"x\";\n    let minorDimension = \"y\";\n    let direction = 1;\n    let axisBoundMainOffset = 0;\n    if (position === \"top\" || position === \"bottom\") {\n      mainDimension = \"y\";\n      minorDimension = \"x\";\n      axisBoundMainOffset += 1;\n    }\n    axisBoundMainOffset += axisBound[mainDimension];\n    if (position === \"right\" || position === \"bottom\") {\n      direction = -1;\n      axisBoundMainOffset += mainDimension === \"x\" ? axisBound.width : axisBound.height;\n    }\n    for (const axis of axes) {\n      const minorOffset = axisAreaWidths.get(minorDimension === \"x\" ? \"left\" : \"top\") ?? 0;\n      axis.translation[minorDimension] = axisBound[minorDimension] + minorOffset;\n      const axisThickness = axisWidths.get(axis.id) ?? 0;\n      const axisOffset = axisOffsets.get(axis.id) ?? 0;\n      axis.translation[mainDimension] = this.clampToOutsideSeriesRect(\n        seriesRect,\n        axisBoundMainOffset + direction * (axisOffset + axisThickness),\n        mainDimension,\n        direction\n      );\n      axis.gridPadding = axisAreaWidth - axisOffset - axisThickness;\n      axis.updatePosition();\n    }\n  }\n  shouldFlipXY() {\n    return this.series.every((series) => series instanceof CartesianSeries && series.shouldFlipXY());\n  }\n};\nCartesianChart.className = \"CartesianChart\";\nCartesianChart.type = \"cartesian\";\n\n// packages/ag-charts-community/src/chart/chartProxy.ts\nvar _AgChartInstanceProxy = class _AgChartInstanceProxy {\n  constructor(chart, factoryApi, licenseManager) {\n    this.factoryApi = factoryApi;\n    this.licenseManager = licenseManager;\n    this.chart = chart;\n  }\n  static isInstance(x) {\n    if (x instanceof _AgChartInstanceProxy) {\n      return true;\n    }\n    if (x.constructor?.name === \"AgChartInstanceProxy\" && x.chart != null) {\n      return true;\n    }\n    return x.chart != null && this.validateImplementation(x);\n  }\n  static validateImplementation(x) {\n    const chartProps = [\"getOptions\", \"destroy\"];\n    const signatureProps = Object.keys(Object.getPrototypeOf(x) ?? {});\n    return chartProps.every((prop) => signatureProps.includes(prop));\n  }\n  async update(options) {\n    this.factoryApi.update(options, this);\n    await this.chart.waitForUpdate();\n  }\n  async updateDelta(deltaOptions) {\n    this.factoryApi.updateUserDelta(this, deltaOptions);\n    await this.chart.waitForUpdate();\n  }\n  getOptions() {\n    const options = deepClone(this.chart.getOptions());\n    for (const key in options) {\n      if (key.startsWith(\"_\")) {\n        delete options[key];\n      }\n    }\n    return options;\n  }\n  waitForUpdate() {\n    return this.chart.waitForUpdate();\n  }\n  async download(opts) {\n    const clone2 = await this.prepareResizedChart(this, opts);\n    try {\n      clone2.chart.download(opts?.fileName, opts?.fileFormat);\n    } finally {\n      clone2.destroy();\n    }\n  }\n  async __toSVG(opts) {\n    const clone2 = await this.prepareResizedChart(this, { width: 600, height: 300, ...opts });\n    try {\n      return clone2.chart.toSVG();\n    } finally {\n      clone2.destroy();\n    }\n  }\n  async getImageDataURL(opts) {\n    const clone2 = await this.prepareResizedChart(this, opts);\n    try {\n      return clone2.chart.getCanvasDataURL(opts?.fileFormat);\n    } finally {\n      clone2.destroy();\n    }\n  }\n  getState() {\n    const {\n      factoryApi: { caretaker },\n      chart: {\n        ctx: { annotationManager }\n      }\n    } = this;\n    return caretaker.save(annotationManager);\n  }\n  async setState(state) {\n    const {\n      factoryApi: { caretaker },\n      chart: {\n        ctx: { annotationManager }\n      }\n    } = this;\n    caretaker.restore(state, annotationManager);\n    await this.chart.waitForUpdate();\n  }\n  resetAnimations() {\n    this.chart.resetAnimations();\n  }\n  skipAnimations() {\n    this.chart.skipAnimations();\n  }\n  destroy() {\n    this.chart.publicApi = void 0;\n    this.chart.destroy();\n  }\n  async prepareResizedChart(proxy, opts = {}) {\n    const { chart } = proxy;\n    const width2 = opts.width ?? chart.width ?? chart.ctx.scene.canvas.width;\n    const height2 = opts.height ?? chart.height ?? chart.ctx.scene.canvas.height;\n    const state = proxy.getState();\n    const isEnterprise = moduleRegistry.hasEnterpriseModules();\n    const processedOverrides = {\n      ...chart.chartOptions.processedOverrides,\n      container: document.createElement(\"div\"),\n      width: width2,\n      height: height2\n    };\n    const userOptions = chart.getOptions();\n    if (isEnterprise) {\n      processedOverrides.animation = { enabled: false };\n      if (isAgCartesianChartOptions(userOptions)) {\n        processedOverrides.toolbar = { enabled: false };\n      }\n      if (this.licenseManager?.isDisplayWatermark()) {\n        processedOverrides.foreground = {\n          text: this.licenseManager.getWatermarkMessage(),\n          image: {\n            url: `data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU4IiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgMjU4IDQwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMjUuNzc5IDI4LjY1N0gxMy4zNTlMMTEuMTczIDM0LjAxMkg1LjY3Mjk3TDE3LjE4MiA3LjA1OTk5SDIxLjk1M0wzMy40NjIgMzQuMDEySDI3Ljk2MkwyNS43NzYgMjguNjU3SDI1Ljc3OVpNMjQuMDY4IDI0LjM5N0wxOS41ODggMTMuNDM0TDE1LjEwNyAyNC4zOTdIMjQuMDY4Wk02Mi4wOTIgMTguODIzSDQ5LjgxN1YyMy4wODZINTYuNzc1QzU2LjU1NSAyNS4yMjIgNTUuNzU1IDI2LjkyNyA1NC4zNzIgMjguMjAyQzUyLjk4OSAyOS40NzYgNTEuMTY2IDMwLjExNSA0OC45MDkgMzAuMTE1QzQ3LjYyMiAzMC4xMTUgNDYuNDUgMjkuODg1IDQ1LjM5MyAyOS40MjNDNDQuMzU4MyAyOC45NzgxIDQzLjQzMjYgMjguMzEzOCA0Mi42OCAyNy40NzZDNDEuOTI3IDI2LjYzOSA0MS4zNDQgMjUuNjMxIDQwLjkzMSAyNC40NTNDNDAuNTE5IDIzLjI3NSA0MC4zMTEgMjEuOTcgNDAuMzExIDIwLjUzN0M0MC4zMTEgMTkuMTA1IDQwLjUxNiAxNy44IDQwLjkzMSAxNi42MjFDNDEuMzQ0IDE1LjQ0MyA0MS45MjcgMTQuNDM2IDQyLjY4IDEzLjU5OEM0My40Mzc2IDEyLjc1NzcgNDQuMzY5NiAxMi4wOTMyIDQ1LjQxMSAxMS42NTFDNDYuNDc4IDExLjE4OSA0Ny42NTYgMTAuOTYgNDguOTQ2IDEwLjk2QzUxLjYxMiAxMC45NiA1My42MzcgMTEuNjAyIDU1LjAyIDEyLjg4NUw1OC4zIDkuNjA0OTlDNTUuODE3IDcuNjY5OTkgNTIuNjc2IDYuNjk5OTkgNDguODcyIDYuNjk5OTlDNDYuNzYgNi42OTk5OSA0NC44NTMgNy4wMzQ5OSA0My4xNTQgNy43MDA5OUM0MS40NTUgOC4zNjc5OSAzOS45OTggOS4zMDM5OSAzOC43ODMgMTAuNTA0QzM3LjU2NyAxMS43MDcgMzYuNjM0IDEzLjE1OCAzNS45NzcgMTQuODU3QzM1LjMxOSAxNi41NTYgMzQuOTk0IDE4LjQ1MSAzNC45OTQgMjAuNTRDMzQuOTk0IDIyLjYzIDM1LjMyOSAyNC40OTQgMzUuOTk1IDI2LjIwNUMzNi42NjIgMjcuOTE2IDM3LjYwNSAyOS4zNzQgMzguODE3IDMwLjU3N0M0MC4wMzIgMzEuNzggNDEuNDg2IDMyLjcxMyA0My4xODggMzMuMzgzQzQ0Ljg4OCAzNC4wNDkgNDYuNzgyIDM0LjM4NCA0OC44NzIgMzQuMzg0QzUwLjk2MSAzNC4zODQgNTIuNzUgMzQuMDQ5IDU0LjM5IDMzLjM4M0M1Ni4wMzEgMzIuNzE2IDU3LjQyNiAzMS43OCA1OC41NzkgMzAuNTc3QzU5LjczMyAyOS4zNzQgNjAuNjE5IDI3LjkxNiA2MS4yMzkgMjYuMjA1QzYxLjg2IDI0LjQ5NCA2Mi4xNyAyMi42MDUgNjIuMTcgMjAuNTRDNjIuMTY5NiAxOS45Njg4IDYyLjE0NDUgMTkuMzk4IDYyLjA5NSAxOC44MjlMNjIuMDkyIDE4LjgyM1pNMTUxLjgxIDE2Ljk4MUMxNTMuNDEgMTQuNjA5IDE1Ny40MTkgMTQuMzU4IDE1OS4wMjIgMTQuMzU4VjE4LjkxQzE1Ni45NTcgMTguOTEgMTU0Ljk4NSAxOC45OTYgMTUzLjc1NyAxOS44OTJDMTUyLjUyOSAyMC43OTIgMTUxLjkxOSAyMS45ODIgMTUxLjkxOSAyMy40NjRWMzMuOTlIMTQ2Ljk2NFYxNC4zNThIMTUxLjczNkwxNTEuODEgMTYuOTgxWk0xNDMuMDExIDE0LjM2MVYzNC4wMzFIMTM4LjI0TDEzOC4xMzEgMzEuMDQ1QzEzNy40NjYgMzIuMDc2IDEzNi41NTEgMzIuOTIxOSAxMzUuNDcxIDMzLjUwNEMxMzQuMzc2IDM0LjA5OSAxMzMuMDY4IDM0LjM5NiAxMzEuNTM2IDM0LjM5NkMxMzAuMiAzNC4zOTYgMTI4Ljk2MyAzNC4xNTIgMTI3LjgyMiAzMy42NjhDMTI2LjcgMzMuMTk2NCAxMjUuNjg5IDMyLjQ5NSAxMjQuODU1IDMxLjYwOUMxMjQuMDE4IDMwLjcyMiAxMjMuMzU0IDI5LjY2MiAxMjIuODcxIDI4LjQyMkMxMjIuMzg0IDI3LjE4NSAxMjIuMTQyIDI1LjgxMSAxMjIuMTQyIDI0LjMwNEMxMjIuMTQyIDIyLjc5OCAxMjIuMzg0IDIxLjM3OCAxMjIuODcxIDIwLjExNkMxMjMuMzU3IDE4Ljg1NCAxMjQuMDE4IDE3Ljc3MiAxMjQuODU1IDE2Ljg3M0MxMjUuNjg4IDE1Ljk3NjQgMTI2LjY5OCAxNS4yNjM2IDEyNy44MjIgMTQuNzhDMTI4Ljk2MyAxNC4yODEgMTMwLjIwMyAxNC4wMzMgMTMxLjUzNiAxNC4wMzNDMTMzLjA0MyAxNC4wMzMgMTM0LjMzIDE0LjMxOCAxMzUuMzk3IDE0Ljg4OEMxMzYuNDYyIDE1LjQ1ODkgMTM3LjM3NSAxNi4yNzggMTM4LjA1NyAxNy4yNzZWMTQuMzYxSDE0My4wMTFaTTEzMi42MzEgMzAuMTMzQzEzNC4yNTYgMzAuMTMzIDEzNS41NjcgMjkuNTk0IDEzNi41NjUgMjguNTEyQzEzNy41NjEgMjcuNDMgMTM4LjA2IDI1Ljk5MSAxMzguMDYgMjQuMTk2QzEzOC4wNiAyMi40MDEgMTM3LjU2MSAyMC45OSAxMzYuNTY1IDE5Ljg5OUMxMzUuNTcgMTguODA3IDEzNC4yNTkgMTguMjU4IDEzMi42MzEgMTguMjU4QzEzMS4wMDMgMTguMjU4IDEyOS43MjkgMTguODA0IDEyOC43MzQgMTkuODk5QzEyNy43MzggMjAuOTkzIDEyNy4yMzkgMjIuNDM4IDEyNy4yMzkgMjQuMjMzQzEyNy4yMzkgMjYuMDI4IDEyNy43MzUgMjcuNDMzIDEyOC43MzQgMjguNTE1QzEyOS43MjkgMjkuNTk0IDEzMS4wMjggMzAuMTM2IDEzMi42MzEgMzAuMTM2VjMwLjEzM1pNOTMuNjk4IDI3Ljg3NkM5My41Nzk1IDI4LjAwMjUgOTMuNDU2NCAyOC4xMjQ2IDkzLjMyOSAyOC4yNDJDOTEuOTQ3IDI5LjUxNiA5MC4xMjMgMzAuMTU1IDg3Ljg2NiAzMC4xNTVDODYuNTggMzAuMTU1IDg1LjQwOCAyOS45MjYgODQuMzUgMjkuNDY0QzgzLjMxNTUgMjkuMDE4OSA4Mi4zODk4IDI4LjM1NDYgODEuNjM3IDI3LjUxN0M4MC44ODQgMjYuNjc5IDgwLjMwMSAyNS42NzIgNzkuODg5IDI0LjQ5NEM3OS40NzYgMjMuMzE1IDc5LjI2OSAyMi4wMSA3OS4yNjkgMjAuNTc4Qzc5LjI2OSAxOS4xNDUgNzkuNDczIDE3Ljg0IDc5Ljg4OSAxNi42NjJDODAuMzAxIDE1LjQ4NCA4MC44ODQgMTQuNDc2IDgxLjYzNyAxMy42MzlDODIuMzk0OSAxMi43OTg3IDgzLjMyNzMgMTIuMTM0MiA4NC4zNjkgMTEuNjkyQzg1LjQzNiAxMS4yMyA4Ni42MTQgMTEgODcuOTAzIDExQzkwLjU3IDExIDkyLjU5NSAxMS42NDIgOTMuOTc3IDEyLjkyNkw5Ny4yNTggOS42NDQ5OUM5NC43NzQgNy43MTA5OSA5MS42MzMgNi43Mzk5OSA4Ny44MjkgNi43Mzk5OUM4NS43MTggNi43Mzk5OSA4My44MTEgNy4wNzQ5OSA4Mi4xMTIgNy43NDE5OUM4MC40MTMgOC40MDc5OSA3OC45NTYgOS4zNDQ5OSA3Ny43NCAxMC41NDVDNzYuNTI1IDExLjc0NyA3NS41OTIgMTMuMTk5IDc0LjkzNCAxNC44OThDNzQuMjc3IDE2LjU5NyA3My45NTEgMTguNDkxIDczLjk1MSAyMC41ODFDNzMuOTUxIDIyLjY3IDc0LjI4NiAyNC41MzQgNzQuOTUzIDI2LjI0NUM3NS42MTkgMjcuOTU3IDc2LjU2MiAyOS40MTQgNzcuNzc0IDMwLjYxN0M3OC45OSAzMS44MiA4MC40NDQgMzIuNzUzIDgyLjE0NiAzMy40MjNDODMuODQ1IDM0LjA5IDg1LjczOSAzNC40MjQgODcuODI5IDM0LjQyNEM4OS45MTkgMzQuNDI0IDkxLjcwOCAzNC4wOSA5My4zNDggMzMuNDIzQzk0LjcxOCAzMi44NjUgOTUuOTE4IDMyLjEyMSA5Ni45NDggMzEuMTkxQzk3LjE0OSAzMS4wMDggOTcuMzQ4IDMwLjgxNSA5Ny41MzcgMzAuNjJMOTMuNzAxIDI3Ljg4NUw5My42OTggMjcuODc2Wk0xMTAuODAyIDE0LjAxNUMxMDkuMTk5IDE0LjAxNSAxMDYuODM2IDE0LjQ3MSAxMDUuNjExIDE2LjE1OEwxMDUuNTM3IDYuMDE1OTlIMTAwLjc2NVYzMy45MzlIMTA1LjcyVjIyLjY0MUMxMDUuNzcxIDIxLjQ2MDcgMTA2LjI4OCAyMC4zNDg4IDEwNy4xNTcgMTkuNTQ4OUMxMDguMDI3IDE4Ljc0OTEgMTA5LjE3OCAxOC4zMjY2IDExMC4zNTggMTguMzc0QzExMy4zOTcgMTguMzc0IDExNC4yNjggMjEuMTU5IDExNC4yNjggMjIuNjQxVjMzLjkzOUgxMTkuMjIzVjIxLjA1OUMxMTkuMjIzIDIxLjA1OSAxMTkuMTQyIDE0LjAxNSAxMTAuODAyIDE0LjAxNVpNMTczLjc2MyAxNC4zNThIMTY5Ljk5OVY4LjcxNDk5SDE2NS4wNDhWMTQuMzU4SDE2MS4yODRWMTguOTE2SDE2NS4wNDhWMzQuMDAzSDE2OS45OTlWMTguOTE2SDE3My43NjNWMTQuMzU4Wk0xOTAuNzg3IDI1LjI2MkMxOTAuMTI5IDI0LjUwMTQgMTg5LjMwNyAyMy44OTk0IDE4OC4zODQgMjMuNTAxQzE4Ny40ODggMjMuMTE3IDE4Ni4zMzEgMjIuNzMyIDE4NC45NDggMjIuMzY0QzE4NC4xNjUgMjIuMTQzOSAxODMuMzkgMjEuODk3OCAxODIuNjIzIDIxLjYyNkMxODIuMTYzIDIxLjQ2MjEgMTgxLjc0MSAyMS4yMDY2IDE4MS4zODMgMjAuODc1QzE4MS4yMzUgMjAuNzQyMSAxODEuMTE4IDIwLjU3ODkgMTgxLjAzOSAyMC4zOTY0QzE4MC45NjEgMjAuMjE0IDE4MC45MjIgMjAuMDE2NiAxODAuOTI3IDE5LjgxOEMxODAuOTI3IDE5LjI3MiAxODEuMTU2IDE4Ljg0NCAxODEuNjI1IDE4LjUxQzE4Mi4xMjEgMTguMTU2IDE4Mi44NjIgMTcuOTc2IDE4My44MjYgMTcuOTc2QzE4NC43OSAxNy45NzYgMTg1LjU4NyAxOC4yMDkgMTg2LjE0OCAxOC42NjhDMTg2LjcwNiAxOS4xMjQgMTg3LjAwNyAxOS43MjUgMTg3LjA3MiAyMC41TDE4Ny4wOTQgMjAuNzgySDE5MS42MzNMMTkxLjYxNyAyMC40NkMxOTEuNTIxIDE4LjQ4NSAxOTAuNzcxIDE2LjkgMTg5LjM4NSAxNS43NUMxODguMDEyIDE0LjYxMiAxODYuMTg1IDE0LjAzMyAxODMuOTYyIDE0LjAzM0MxODIuNDc3IDE0LjAzMyAxODEuMTQxIDE0LjI4NyAxNzkuOTk0IDE0Ljc4NkMxNzguODMxIDE1LjI5MSAxNzcuOTI2IDE1Ljk5NSAxNzcuMjk2IDE2Ljg4MkMxNzYuNjczIDE3Ljc0NTUgMTc2LjMzOCAxOC43ODQgMTc2LjM0MSAxOS44NDlDMTc2LjM0MSAyMS4xNjcgMTc2LjY5OCAyMi4yNDkgMTc3LjM5OSAyMy4wNjRDMTc4LjA2IDIzLjg0MzIgMTc4Ljg5OCAyNC40NTM0IDE3OS44NDIgMjQuODQ0QzE4MC43NDQgMjUuMjE2IDE4MS45MjggMjUuNjA3IDE4My4zNjEgMjZDMTg0LjgwNiAyNi40MSAxODUuODcyIDI2Ljc4NSAxODYuNTMgMjcuMTIzQzE4Ny4xIDI3LjQxNCAxODcuMzc5IDI3Ljg0NSAxODcuMzc5IDI4LjQ0NEMxODcuMzc5IDI5LjA0MiAxODcuMTIyIDI5LjQ2NyAxODYuNTk1IDI5LjgzOUMxODYuMDQzIDMwLjIyNiAxODUuMjM3IDMwLjQyNSAxODQuMjAxIDMwLjQyNUMxODMuMTY2IDMwLjQyNSAxODIuMzk0IDMwLjE3NCAxODEuNzQ5IDI5LjY3NEMxODEuMTEzIDI5LjE4MSAxODAuNzcyIDI4LjU4OSAxODAuNzEgMjcuODY0TDE4MC42ODUgMjcuNTgySDE3Ni4wMTNMMTc2LjAyNSAyNy45MDFDMTc2LjA2NyAyOS4wOTU1IDE3Ni40NzIgMzAuMjQ4NyAxNzcuMTg4IDMxLjIwNkMxNzcuOTA3IDMyLjE4IDE3OC44OTMgMzIuOTU4IDE4MC4xMTggMzMuNTE5QzE4MS4zMzYgMzQuMDc3IDE4Mi43MzIgMzQuMzYyIDE4NC4yNjYgMzQuMzYyQzE4NS44MDEgMzQuMzYyIDE4Ny4xMDkgMzQuMTA4IDE4OC4yMzggMzMuNjA5QzE4OS4zNzYgMzMuMTA0IDE5MC4yNzIgMzIuMzk0IDE5MC45MDEgMzEuNDk0QzE5MS41MzQgMzAuNTkyIDE5MS44NTMgMjkuNTU0IDE5MS44NTMgMjguNDAzQzE5MS44MjggMjcuMTEgMTkxLjQ2NiAyNi4wNTMgMTkwLjc3NyAyNS4yNjJIMTkwLjc4N1oiIGZpbGw9IiM5QjlCOUIiLz4KPHBhdGggZD0iTTI0MS45ODIgMjUuNjU4MlYxNy43MTE3SDIyOC40NDFMMjIwLjQ5NCAyNS42NTgySDI0MS45ODJaIiBmaWxsPSIjOUI5QjlCIi8+CjxwYXRoIGQ9Ik0yNTcuMjM5IDUuOTUwODFIMjQwLjI2NUwyMzIuMjU1IDEzLjg5NzNIMjU3LjIzOVY1Ljk1MDgxWiIgZmlsbD0iIzlCOUI5QiIvPgo8cGF0aCBkPSJNMjEyLjYxMSAzMy42MDQ4TDIxNi42OCAyOS41MzYxSDIzMC40MTJWMzcuNDgyN0gyMTIuNjExVjMzLjYwNDhaIiBmaWxsPSIjOUI5QjlCIi8+CjxwYXRoIGQ9Ik0yMTUuNTk5IDIxLjc4MDNIMjI0LjM3MkwyMzIuMzgyIDEzLjgzMzdIMjE1LjU5OVYyMS43ODAzWiIgZmlsbD0iIzlCOUI5QiIvPgo8cGF0aCBkPSJNMjA2IDMzLjYwNDdIMjEyLjYxMUwyMjAuNDk0IDI1LjY1ODJIMjA2VjMzLjYwNDdaIiBmaWxsPSIjOUI5QjlCIi8+CjxwYXRoIGQ9Ik0yNDAuMjY1IDUuOTUwODFMMjM2LjE5NyAxMC4wMTk0SDIxMC4yNTlWMi4wNzI4OEgyNDAuMjY1VjUuOTUwODFaIiBmaWxsPSIjOUI5QjlCIi8+Cjwvc3ZnPgo=`,\n            width: 170,\n            height: 25,\n            right: 25,\n            bottom: 50,\n            opacity: 0.7\n          }\n        };\n      }\n    }\n    const specialOverrides = { ...chart.chartOptions.specialOverrides };\n    const optionsMetadata = { ...chart.chartOptions.optionMetadata };\n    if (opts.width != null && opts.height != null) {\n      specialOverrides.overrideDevicePixelRatio = 1;\n    }\n    const cloneProxy = await this.factoryApi.create(\n      userOptions,\n      processedOverrides,\n      specialOverrides,\n      optionsMetadata\n    );\n    await cloneProxy.setState(state);\n    cloneProxy.chart.ctx.zoomManager.updateZoom(\"chartProxy\", chart.ctx.zoomManager.getZoom());\n    chart.series.forEach((series, index) => {\n      if (!series.visible) {\n        cloneProxy.chart.series[index].visible = false;\n      }\n    });\n    cloneProxy.chart.update(0 /* FULL */, { forceNodeDataRefresh: true });\n    await cloneProxy.waitForUpdate();\n    return cloneProxy;\n  }\n};\n_AgChartInstanceProxy.chartInstances = /* @__PURE__ */ new WeakMap();\n__decorateClass([\n  ActionOnSet({\n    oldValue(chart) {\n      if (!chart.destroyed) {\n        chart.publicApi = void 0;\n      }\n      _AgChartInstanceProxy.chartInstances.delete(chart);\n    },\n    newValue(chart) {\n      chart.publicApi = this;\n      _AgChartInstanceProxy.chartInstances.set(chart, this);\n    }\n  })\n], _AgChartInstanceProxy.prototype, \"chart\", 2);\nvar AgChartInstanceProxy = _AgChartInstanceProxy;\n\n// packages/ag-charts-community/src/locale/locale.ts\nvar Locale = class extends BaseModuleInstance {\n  constructor(ctx) {\n    super();\n    this.ctx = ctx;\n    this.localeText = void 0;\n  }\n};\n__decorateClass([\n  ObserveChanges((target) => {\n    target.ctx.localeManager.setLocaleText(target.localeText);\n  }),\n  Validate(PLAIN_OBJECT, { optional: true })\n], Locale.prototype, \"localeText\", 2);\n__decorateClass([\n  ObserveChanges((target) => {\n    target.ctx.localeManager.setLocaleTextFormatter(target.getLocaleText);\n  }),\n  Validate(FUNCTION, { optional: true })\n], Locale.prototype, \"getLocaleText\", 2);\n\n// packages/ag-charts-community/src/locale/localeModule.ts\nvar LocaleModule = {\n  type: \"root\",\n  optionsKey: \"locale\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"],\n  moduleFactory: (ctx) => new Locale(ctx)\n};\n\n// packages/ag-charts-community/src/scale/linearScale.ts\nvar LinearScale = class extends ContinuousScale {\n  constructor() {\n    super([0, 1], [0, 1]);\n    this.type = \"number\";\n  }\n  toDomain(d) {\n    return d;\n  }\n  ticks() {\n    const count = this.tickCount ?? ContinuousScale.defaultTickCount;\n    if (!this.domain || this.domain.length < 2 || count < 1 || !this.domain.every(isFinite)) {\n      return [];\n    }\n    this.refresh();\n    const [d0, d1] = this.getDomain();\n    if (this.interval) {\n      const step = Math.abs(this.interval);\n      if (!isDenseInterval((d1 - d0) / step, this.getPixelRange())) {\n        return range(d0, d1, step);\n      }\n    }\n    return createTicks(d0, d1, count, this.minTickCount, this.maxTickCount);\n  }\n  update() {\n    if (!this.domain || this.domain.length < 2) {\n      return;\n    }\n    if (this.nice) {\n      this.updateNiceDomain();\n    }\n  }\n  getTickStep(start2, stop) {\n    return this.interval ?? tickStep(start2, stop, this.tickCount, this.minTickCount, this.maxTickCount);\n  }\n  /**\n   * Extends the domain so that it starts and ends on nice round values.\n   */\n  updateNiceDomain() {\n    const count = this.tickCount;\n    if (count < 1) {\n      this.niceDomain = [...this.domain];\n      return;\n    }\n    let [start2, stop] = this.domain;\n    if (count === 1) {\n      [start2, stop] = niceTicksDomain(start2, stop);\n    } else {\n      const roundStart = start2 > stop ? Math.ceil : Math.floor;\n      const roundStop = stop < start2 ? Math.floor : Math.ceil;\n      const maxAttempts = 4;\n      for (let i = 0; i < maxAttempts; i++) {\n        const prev0 = start2;\n        const prev1 = stop;\n        const step = this.getTickStep(start2, stop);\n        const [d0, d1] = this.domain;\n        if (step >= 1) {\n          start2 = roundStart(d0 / step) * step;\n          stop = roundStop(d1 / step) * step;\n        } else {\n          const s = 1 / step;\n          start2 = roundStart(d0 * s) / s;\n          stop = roundStop(d1 * s) / s;\n        }\n        if (start2 === prev0 && stop === prev1) {\n          break;\n        }\n      }\n    }\n    this.niceDomain = [start2, stop];\n  }\n  tickFormat({ ticks: specifiedTicks, specifier }) {\n    return tickFormat(specifiedTicks ?? this.ticks(), specifier);\n  }\n};\n\n// packages/ag-charts-community/src/util/secondaryAxisTicks.ts\nfunction calculateNiceSecondaryAxis(domain, primaryTickCount, reverse) {\n  let [start2, stop] = findMinMax(domain);\n  start2 = calculateNiceStart(Math.floor(start2), stop, primaryTickCount);\n  const step = getTickStep(start2, stop, primaryTickCount);\n  const segments = primaryTickCount - 1;\n  stop = start2 + segments * step;\n  const d = reverse ? [stop, start2] : [start2, stop];\n  const ticks = getTicks(start2, step, primaryTickCount);\n  return { domain: d, ticks };\n}\nfunction calculateNiceStart(a, b, count) {\n  const rawStep = Math.abs(b - a) / (count - 1);\n  const order = Math.floor(Math.log10(rawStep));\n  const magnitude = Math.pow(10, order);\n  return Math.floor(a / magnitude) * magnitude;\n}\nfunction getTicks(start2, step, count) {\n  const stepPower = Math.floor(Math.log10(step));\n  const fractionDigits = step > 0 && step < 1 ? Math.abs(stepPower) : 0;\n  const f = Math.pow(10, fractionDigits);\n  const ticks = [];\n  for (let i = 0; i < count; i++) {\n    const tick = start2 + step * i;\n    ticks[i] = Math.round(tick * f) / f;\n  }\n  return ticks;\n}\nfunction getTickStep(start2, stop, count) {\n  const segments = count - 1;\n  const rawStep = (stop - start2) / segments;\n  return calculateNextNiceStep(rawStep);\n}\nfunction calculateNextNiceStep(rawStep) {\n  const order = Math.floor(Math.log10(rawStep));\n  const magnitude = Math.pow(10, order);\n  const step = rawStep / magnitude * 10;\n  if (step > 0 && step <= 1) {\n    return magnitude / 10;\n  }\n  if (step > 1 && step <= 2) {\n    return 2 * magnitude / 10;\n  }\n  if (step > 1 && step <= 5) {\n    return 5 * magnitude / 10;\n  }\n  if (step > 5 && step <= 10) {\n    return 10 * magnitude / 10;\n  }\n  if (step > 10 && step <= 20) {\n    return 20 * magnitude / 10;\n  }\n  if (step > 20 && step <= 40) {\n    return 40 * magnitude / 10;\n  }\n  if (step > 40 && step <= 50) {\n    return 50 * magnitude / 10;\n  }\n  if (step > 50 && step <= 100) {\n    return 100 * magnitude / 10;\n  }\n  return step;\n}\n\n// packages/ag-charts-community/src/chart/axis/numberAxis.ts\nvar NumberAxis = class extends CartesianAxis {\n  constructor(moduleCtx, scale2 = new LinearScale()) {\n    super(moduleCtx, scale2);\n    this.min = NaN;\n    this.max = NaN;\n  }\n  normaliseDataDomain(d) {\n    const { min, max } = this;\n    const { extent: extent2, clipped } = normalisedExtentWithMetadata(d, min, max);\n    return { domain: extent2, clipped };\n  }\n  updateSecondaryAxisTicks(primaryTickCount) {\n    if (this.dataDomain == null) {\n      throw new Error(\"AG Charts - dataDomain not calculated, cannot perform tick calculation.\");\n    }\n    if (this.dataDomain.domain.length === 0) {\n      return [];\n    }\n    const { domain, ticks } = calculateNiceSecondaryAxis(\n      this.dataDomain.domain,\n      primaryTickCount ?? 0,\n      this.reverse\n    );\n    this.scale.nice = false;\n    this.scale.domain = domain;\n    this.scale.update();\n    return ticks;\n  }\n};\nNumberAxis.className = \"NumberAxis\";\nNumberAxis.type = \"number\";\n__decorateClass([\n  Validate(AND(NUMBER_OR_NAN, LESS_THAN(\"max\"))),\n  Default(NaN)\n], NumberAxis.prototype, \"min\", 2);\n__decorateClass([\n  Validate(AND(NUMBER_OR_NAN, GREATER_THAN(\"min\"))),\n  Default(NaN)\n], NumberAxis.prototype, \"max\", 2);\n\n// packages/ag-charts-community/src/chart/axis/logAxis.ts\nvar NON_ZERO_NUMBER = predicateWithMessage((value) => isNumber(value) && value !== 0, \"a non-zero number\");\nvar LogAxis = class extends NumberAxis {\n  constructor(moduleCtx) {\n    super(moduleCtx, new LogScale());\n    this.min = NaN;\n    this.max = NaN;\n  }\n  normaliseDataDomain(d) {\n    const { min, max } = this;\n    const { extent: extent2, clipped } = normalisedExtentWithMetadata(d, min, max);\n    const isInverted = extent2[0] > extent2[1];\n    const crossesZero = extent2[0] < 0 && extent2[1] > 0;\n    const hasZeroExtent = extent2[0] === 0 && extent2[1] === 0;\n    const invalidDomain = isInverted || crossesZero || hasZeroExtent;\n    if (invalidDomain) {\n      if (crossesZero) {\n        Logger.warn(\n          `the data domain crosses zero, the chart data cannot be rendered. See log axis documentation for more information.`\n        );\n      } else if (hasZeroExtent) {\n        Logger.warn(`the data domain has 0 extent, no data is rendered.`);\n      }\n    }\n    if (extent2[0] === 0) {\n      extent2[0] = 1;\n    }\n    if (extent2[1] === 0) {\n      extent2[1] = -1;\n    }\n    return { domain: extent2, clipped };\n  }\n  set base(value) {\n    this.scale.base = value;\n  }\n  get base() {\n    return this.scale.base;\n  }\n};\nLogAxis.className = \"LogAxis\";\nLogAxis.type = \"log\";\n__decorateClass([\n  Validate(AND(NUMBER_OR_NAN, NON_ZERO_NUMBER, LESS_THAN(\"max\"))),\n  Default(NaN)\n], LogAxis.prototype, \"min\", 2);\n__decorateClass([\n  Validate(AND(NUMBER_OR_NAN, NON_ZERO_NUMBER, GREATER_THAN(\"min\"))),\n  Default(NaN)\n], LogAxis.prototype, \"max\", 2);\n\n// packages/ag-charts-community/src/chart/axis/timeAxis.ts\nvar TimeAxis = class extends CartesianAxis {\n  constructor(moduleCtx) {\n    super(moduleCtx, new TimeScale());\n    this.min = void 0;\n    this.max = void 0;\n  }\n  normaliseDataDomain(d) {\n    let { min, max } = this;\n    let clipped = false;\n    if (typeof min === \"number\") {\n      min = new Date(min);\n    }\n    if (typeof max === \"number\") {\n      max = new Date(max);\n    }\n    if (d.length > 2) {\n      d = extent(d)?.map((x) => new Date(x)) ?? [];\n    }\n    if (min instanceof Date) {\n      clipped || (clipped = min > d[0]);\n      d = [min, d[1]];\n    }\n    if (max instanceof Date) {\n      clipped || (clipped = max < d[1]);\n      d = [d[0], max];\n    }\n    if (d[0] > d[1]) {\n      d = [];\n    }\n    return { domain: d, clipped };\n  }\n  onFormatChange(ticks, fractionDigits, domain, format) {\n    if (format) {\n      super.onFormatChange(ticks, fractionDigits, domain, format);\n    } else {\n      this.labelFormatter = this.scale.tickFormat({ ticks, domain });\n      this.datumFormatter = this.scale.tickFormat({ ticks, domain, formatOffset: 1 });\n    }\n  }\n};\nTimeAxis.className = \"TimeAxis\";\nTimeAxis.type = \"time\";\n__decorateClass([\n  Validate(AND(DATE_OR_DATETIME_MS, LESS_THAN(\"max\")), { optional: true })\n], TimeAxis.prototype, \"min\", 2);\n__decorateClass([\n  Validate(AND(DATE_OR_DATETIME_MS, GREATER_THAN(\"min\")), { optional: true })\n], TimeAxis.prototype, \"max\", 2);\n\n// packages/ag-charts-community/src/scene/util/corner.ts\nvar drawCorner = (path, { x0, y0, x1, y1, cx, cy }, cornerRadius, move) => {\n  if (move) {\n    path.moveTo(x0, y0);\n  }\n  if (x0 !== x1 || y0 !== y1) {\n    const r0 = Math.atan2(y0 - cy, x0 - cx);\n    const r1 = Math.atan2(y1 - cy, x1 - cx);\n    path.arc(cx, cy, cornerRadius, r0, r1);\n  } else {\n    path.lineTo(x0, y0);\n  }\n};\n\n// packages/ag-charts-community/src/scene/shape/rect.ts\nvar epsilon = 1e-6;\nvar cornerEdges = (leadingEdge, trailingEdge, leadingInset, trailingInset, cornerRadius) => {\n  let leadingClipped = false;\n  let trailingClipped = false;\n  let leading0 = trailingInset - Math.sqrt(Math.max(cornerRadius ** 2 - leadingInset ** 2, 0));\n  let leading1 = 0;\n  let trailing0 = 0;\n  let trailing1 = leadingInset - Math.sqrt(Math.max(cornerRadius ** 2 - trailingInset ** 2, 0));\n  if (leading0 > leadingEdge) {\n    leadingClipped = true;\n    leading0 = leadingEdge;\n    leading1 = leadingInset - Math.sqrt(Math.max(cornerRadius ** 2 - (trailingInset - leadingEdge) ** 2));\n  } else if (leading0 < epsilon) {\n    leading0 = 0;\n  }\n  if (trailing1 > trailingEdge) {\n    trailingClipped = true;\n    trailing0 = trailingInset - Math.sqrt(Math.max(cornerRadius ** 2 - (leadingInset - trailingEdge) ** 2));\n    trailing1 = trailingEdge;\n  } else if (trailing1 < epsilon) {\n    trailing1 = 0;\n  }\n  return { leading0, leading1, trailing0, trailing1, leadingClipped, trailingClipped };\n};\nvar insetCornerRadiusRect = (path, x, y, width2, height2, cornerRadii, clipBBox) => {\n  let {\n    topLeft: topLeftCornerRadius,\n    topRight: topRightCornerRadius,\n    bottomRight: bottomRightCornerRadius,\n    bottomLeft: bottomLeftCornerRadius\n  } = cornerRadii;\n  const maxVerticalCornerRadius = Math.max(\n    topLeftCornerRadius + bottomLeftCornerRadius,\n    topRightCornerRadius + bottomRightCornerRadius\n  );\n  const maxHorizontalCornerRadius = Math.max(\n    topLeftCornerRadius + topRightCornerRadius,\n    bottomLeftCornerRadius + bottomRightCornerRadius\n  );\n  if (maxVerticalCornerRadius <= 0 && maxHorizontalCornerRadius <= 0) {\n    if (clipBBox == null) {\n      path.rect(x, y, width2, height2);\n    } else {\n      path.rect(clipBBox.x, clipBBox.y, clipBBox.width, clipBBox.height);\n    }\n    return;\n  } else if (clipBBox == null && topLeftCornerRadius === topRightCornerRadius && topLeftCornerRadius === bottomRightCornerRadius && topLeftCornerRadius === bottomLeftCornerRadius) {\n    path.roundRect(x, y, width2, height2, topLeftCornerRadius);\n    return;\n  }\n  if (width2 < 0) {\n    x += width2;\n    width2 = Math.abs(width2);\n  }\n  if (height2 < 0) {\n    y += height2;\n    height2 = Math.abs(height2);\n  }\n  if (width2 <= 0 || height2 <= 0)\n    return;\n  if (clipBBox == null) {\n    clipBBox = new BBox(x, y, width2, height2);\n  } else {\n    const x0 = Math.max(x, clipBBox.x);\n    const x1 = Math.min(x + width2, clipBBox.x + clipBBox.width);\n    const y0 = Math.max(y, clipBBox.y);\n    const y1 = Math.min(y + height2, clipBBox.y + clipBBox.height);\n    clipBBox = new BBox(x0, y0, x1 - x0, y1 - y0);\n  }\n  const borderScale = Math.max(maxVerticalCornerRadius / height2, maxHorizontalCornerRadius / width2, 1);\n  if (borderScale > 1) {\n    topLeftCornerRadius /= borderScale;\n    topRightCornerRadius /= borderScale;\n    bottomRightCornerRadius /= borderScale;\n    bottomLeftCornerRadius /= borderScale;\n  }\n  let drawTopLeftCorner = true;\n  let drawTopRightCorner = true;\n  let drawBottomRightCorner = true;\n  let drawBottomLeftCorner = true;\n  let topLeftCorner;\n  let topRightCorner;\n  let bottomRightCorner;\n  let bottomLeftCorner;\n  if (drawTopLeftCorner) {\n    const nodes = cornerEdges(\n      clipBBox.height,\n      clipBBox.width,\n      Math.max(x + topLeftCornerRadius - clipBBox.x, 0),\n      Math.max(y + topLeftCornerRadius - clipBBox.y, 0),\n      topLeftCornerRadius\n    );\n    if (nodes.leadingClipped)\n      drawBottomLeftCorner = false;\n    if (nodes.trailingClipped)\n      drawTopRightCorner = false;\n    const x0 = Math.max(clipBBox.x + nodes.leading1, clipBBox.x);\n    const y0 = Math.max(clipBBox.y + nodes.leading0, clipBBox.y);\n    const x1 = Math.max(clipBBox.x + nodes.trailing1, clipBBox.x);\n    const y1 = Math.max(clipBBox.y + nodes.trailing0, clipBBox.y);\n    const cx = x + topLeftCornerRadius;\n    const cy = y + topLeftCornerRadius;\n    topLeftCorner = { x0, y0, x1, y1, cx, cy };\n  }\n  if (drawTopRightCorner) {\n    const nodes = cornerEdges(\n      clipBBox.width,\n      clipBBox.height,\n      Math.max(y + topRightCornerRadius - clipBBox.y, 0),\n      Math.max(clipBBox.x + clipBBox.width - (x + width2 - topRightCornerRadius), 0),\n      topRightCornerRadius\n    );\n    if (nodes.leadingClipped)\n      drawTopLeftCorner = false;\n    if (nodes.trailingClipped)\n      drawBottomRightCorner = false;\n    const x0 = Math.min(clipBBox.x + clipBBox.width - nodes.leading0, clipBBox.x + clipBBox.width);\n    const y0 = Math.max(clipBBox.y + nodes.leading1, clipBBox.y);\n    const x1 = Math.min(clipBBox.x + clipBBox.width - nodes.trailing0, clipBBox.x + clipBBox.width);\n    const y1 = Math.max(clipBBox.y + nodes.trailing1, clipBBox.y);\n    const cx = x + width2 - topRightCornerRadius;\n    const cy = y + topRightCornerRadius;\n    topRightCorner = { x0, y0, x1, y1, cx, cy };\n  }\n  if (drawBottomRightCorner) {\n    const nodes = cornerEdges(\n      clipBBox.height,\n      clipBBox.width,\n      Math.max(clipBBox.x + clipBBox.width - (x + width2 - bottomRightCornerRadius), 0),\n      Math.max(clipBBox.y + clipBBox.height - (y + height2 - bottomRightCornerRadius), 0),\n      bottomRightCornerRadius\n    );\n    if (nodes.leadingClipped)\n      drawTopRightCorner = false;\n    if (nodes.trailingClipped)\n      drawBottomLeftCorner = false;\n    const x0 = Math.min(clipBBox.x + clipBBox.width - nodes.leading1, clipBBox.x + clipBBox.width);\n    const y0 = Math.min(clipBBox.y + clipBBox.height - nodes.leading0, clipBBox.y + clipBBox.height);\n    const x1 = Math.min(clipBBox.x + clipBBox.width - nodes.trailing1, clipBBox.x + clipBBox.width);\n    const y1 = Math.min(clipBBox.y + clipBBox.height - nodes.trailing0, clipBBox.y + clipBBox.height);\n    const cx = x + width2 - bottomRightCornerRadius;\n    const cy = y + height2 - bottomRightCornerRadius;\n    bottomRightCorner = { x0, y0, x1, y1, cx, cy };\n  }\n  if (drawBottomLeftCorner) {\n    const nodes = cornerEdges(\n      clipBBox.width,\n      clipBBox.height,\n      Math.max(clipBBox.y + clipBBox.height - (y + height2 - bottomLeftCornerRadius), 0),\n      Math.max(x + bottomLeftCornerRadius - clipBBox.x, 0),\n      bottomLeftCornerRadius\n    );\n    if (nodes.leadingClipped)\n      drawBottomRightCorner = false;\n    if (nodes.trailingClipped)\n      drawTopLeftCorner = false;\n    const x0 = Math.max(clipBBox.x + nodes.leading0, clipBBox.x);\n    const y0 = Math.min(clipBBox.y + clipBBox.height - nodes.leading1, clipBBox.y + clipBBox.height);\n    const x1 = Math.max(clipBBox.x + nodes.trailing0, clipBBox.x);\n    const y1 = Math.min(clipBBox.y + clipBBox.height - nodes.trailing1, clipBBox.y + clipBBox.height);\n    const cx = x + bottomLeftCornerRadius;\n    const cy = y + height2 - bottomLeftCornerRadius;\n    bottomLeftCorner = { x0, y0, x1, y1, cx, cy };\n  }\n  let didMove = false;\n  if (drawTopLeftCorner && topLeftCorner != null) {\n    drawCorner(path, topLeftCorner, topLeftCornerRadius, !didMove);\n    didMove || (didMove = true);\n  }\n  if (drawTopRightCorner && topRightCorner != null) {\n    drawCorner(path, topRightCorner, topRightCornerRadius, !didMove);\n    didMove || (didMove = true);\n  }\n  if (drawBottomRightCorner && bottomRightCorner != null) {\n    drawCorner(path, bottomRightCorner, bottomRightCornerRadius, !didMove);\n    didMove || (didMove = true);\n  }\n  if (drawBottomLeftCorner && bottomLeftCorner != null) {\n    drawCorner(path, bottomLeftCorner, bottomLeftCornerRadius, !didMove);\n    didMove || (didMove = true);\n  }\n  path.closePath();\n};\nvar Rect = class extends Path {\n  constructor() {\n    super(...arguments);\n    this.borderPath = new ExtendedPath2D();\n    this.x = 0;\n    this.y = 0;\n    this.width = 10;\n    this.height = 10;\n    this.topLeftCornerRadius = 0;\n    this.topRightCornerRadius = 0;\n    this.bottomRightCornerRadius = 0;\n    this.bottomLeftCornerRadius = 0;\n    this.clipBBox = void 0;\n    this.crisp = false;\n    this.lastUpdatePathStrokeWidth = Shape.defaultStyles.strokeWidth;\n    this.effectiveStrokeWidth = Shape.defaultStyles.strokeWidth;\n    this.hittester = super.isPointInPath;\n    this.distanceCalculator = super.distanceSquaredTransformedPoint;\n    /**\n     * When the rectangle's width or height is less than a pixel\n     * and crisp mode is on, the rectangle will still fit into the pixel,\n     * but will be less opaque to make an effect of holding less space.\n     */\n    this.microPixelEffectOpacity = 1;\n  }\n  set cornerRadius(cornerRadius) {\n    this.topLeftCornerRadius = cornerRadius;\n    this.topRightCornerRadius = cornerRadius;\n    this.bottomRightCornerRadius = cornerRadius;\n    this.bottomLeftCornerRadius = cornerRadius;\n  }\n  isDirtyPath() {\n    return this.lastUpdatePathStrokeWidth !== this.strokeWidth || Boolean(this.path.isDirty() || this.borderPath.isDirty());\n  }\n  updatePath() {\n    const {\n      path,\n      borderPath,\n      crisp,\n      topLeftCornerRadius: topLeft,\n      topRightCornerRadius: topRight,\n      bottomRightCornerRadius: bottomRight,\n      bottomLeftCornerRadius: bottomLeft\n    } = this;\n    let { x, y, width: w, height: h, strokeWidth, clipBBox } = this;\n    const pixelRatio = this.layerManager?.canvas.pixelRatio ?? 1;\n    const pixelSize = 1 / pixelRatio;\n    let microPixelEffectOpacity = 1;\n    path.clear(true);\n    borderPath.clear(true);\n    if (crisp) {\n      if (w <= pixelSize) {\n        microPixelEffectOpacity *= w / pixelSize;\n      }\n      if (h <= pixelSize) {\n        microPixelEffectOpacity *= h / pixelSize;\n      }\n      w = this.align(x, w);\n      h = this.align(y, h);\n      x = this.align(x);\n      y = this.align(y);\n      clipBBox = clipBBox != null ? new BBox(\n        this.align(clipBBox.x),\n        this.align(clipBBox.y),\n        this.align(clipBBox.x, clipBBox.width),\n        this.align(clipBBox.y, clipBBox.height)\n      ) : void 0;\n    }\n    if (strokeWidth) {\n      if (w < pixelSize) {\n        const lx = x + pixelSize / 2;\n        borderPath.moveTo(lx, y);\n        borderPath.lineTo(lx, y + h);\n        strokeWidth = pixelSize;\n        this.borderClipPath = void 0;\n      } else if (h < pixelSize) {\n        const ly = y + pixelSize / 2;\n        borderPath.moveTo(x, ly);\n        borderPath.lineTo(x + w, ly);\n        strokeWidth = pixelSize;\n        this.borderClipPath = void 0;\n      } else if (strokeWidth < w && strokeWidth < h) {\n        const halfStrokeWidth = strokeWidth / 2;\n        x += halfStrokeWidth;\n        y += halfStrokeWidth;\n        w -= strokeWidth;\n        h -= strokeWidth;\n        const adjustedClipBBox = clipBBox?.clone().shrink(halfStrokeWidth);\n        const cornerRadii = {\n          topLeft: topLeft > 0 ? topLeft - strokeWidth : 0,\n          topRight: topRight > 0 ? topRight - strokeWidth : 0,\n          bottomRight: bottomRight > 0 ? bottomRight - strokeWidth : 0,\n          bottomLeft: bottomLeft > 0 ? bottomLeft - strokeWidth : 0\n        };\n        this.borderClipPath = void 0;\n        if (w > 0 && h > 0 && (adjustedClipBBox == null || adjustedClipBBox?.width > 0 && adjustedClipBBox?.height > 0)) {\n          insetCornerRadiusRect(path, x, y, w, h, cornerRadii, adjustedClipBBox);\n          insetCornerRadiusRect(borderPath, x, y, w, h, cornerRadii, adjustedClipBBox);\n        }\n      } else {\n        this.borderClipPath = this.borderClipPath ?? new ExtendedPath2D();\n        this.borderClipPath.clear(true);\n        this.borderClipPath.rect(x, y, w, h);\n        borderPath.rect(x, y, w, h);\n      }\n    } else {\n      const cornerRadii = { topLeft, topRight, bottomRight, bottomLeft };\n      this.borderClipPath = void 0;\n      insetCornerRadiusRect(path, x, y, w, h, cornerRadii, clipBBox);\n    }\n    if ([topLeft, topRight, bottomRight, bottomLeft].every((r) => r === 0)) {\n      const bbox = this.getBBox();\n      this.hittester = bbox.containsPoint.bind(bbox);\n      this.distanceSquared = (hitX, hitY) => this.getBBox().distanceSquared(hitX, hitY);\n    } else {\n      this.hittester = super.isPointInPath;\n      this.distanceCalculator = super.distanceSquaredTransformedPoint;\n    }\n    this.effectiveStrokeWidth = strokeWidth;\n    this.lastUpdatePathStrokeWidth = strokeWidth;\n    this.microPixelEffectOpacity = microPixelEffectOpacity;\n  }\n  computeBBox() {\n    const { x, y, width: width2, height: height2, clipBBox } = this;\n    return clipBBox?.clone() ?? new BBox(x, y, width2, height2);\n  }\n  isPointInPath(x, y) {\n    return this.hittester(x, y);\n  }\n  get midPoint() {\n    return { x: this.x + this.width / 2, y: this.y + this.height / 2 };\n  }\n  distanceSquared(x, y) {\n    return this.distanceCalculator(x, y);\n  }\n  applyFillAlpha(ctx) {\n    const { fillOpacity, microPixelEffectOpacity, opacity } = this;\n    ctx.globalAlpha *= opacity * fillOpacity * microPixelEffectOpacity;\n  }\n  renderStroke(ctx) {\n    const { stroke, effectiveStrokeWidth } = this;\n    if (stroke && effectiveStrokeWidth) {\n      const { globalAlpha } = ctx;\n      const {\n        strokeOpacity,\n        lineDash,\n        lineDashOffset,\n        lineCap,\n        lineJoin,\n        borderPath,\n        borderClipPath,\n        opacity,\n        microPixelEffectOpacity\n      } = this;\n      if (borderClipPath) {\n        ctx.clip(borderClipPath.getPath2D());\n      }\n      ctx.strokeStyle = stroke;\n      ctx.globalAlpha *= opacity * strokeOpacity * microPixelEffectOpacity;\n      ctx.lineWidth = effectiveStrokeWidth;\n      if (lineDash) {\n        ctx.setLineDash(lineDash);\n      }\n      if (lineDashOffset) {\n        ctx.lineDashOffset = lineDashOffset;\n      }\n      if (lineCap) {\n        ctx.lineCap = lineCap;\n      }\n      if (lineJoin) {\n        ctx.lineJoin = lineJoin;\n      }\n      ctx.stroke(borderPath.getPath2D());\n      ctx.globalAlpha = globalAlpha;\n    }\n  }\n};\nRect.className = \"Rect\";\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"x\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"y\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"width\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"height\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"topLeftCornerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"topRightCornerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"bottomRightCornerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"bottomLeftCornerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"clipBBox\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Rect.prototype, \"crisp\", 2);\n\n// packages/ag-charts-community/src/chart/background/background.ts\nvar Background = class extends BaseModuleInstance {\n  constructor(ctx) {\n    super();\n    this.ctx = ctx;\n    this.rectNode = new Rect();\n    this.textNode = new Text();\n    this.fill = \"white\";\n    this.node = this.createNode();\n    this.node.append([this.rectNode, this.textNode]);\n    this.visible = true;\n    this.destroyFns.push(\n      ctx.scene.attachNode(this.node),\n      ctx.layoutManager.addListener(\"layout:complete\", (e) => this.onLayoutComplete(e))\n    );\n  }\n  createNode() {\n    return new Group({ name: \"background\", zIndex: 0 /* SERIES_BACKGROUND */ });\n  }\n  onLayoutComplete(e) {\n    const { width: width2, height: height2 } = e.chart;\n    this.rectNode.width = width2;\n    this.rectNode.height = height2;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN),\n  ProxyPropertyOnWrite(\"node\", \"visible\")\n], Background.prototype, \"visible\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true }),\n  ProxyPropertyOnWrite(\"rectNode\", \"fill\")\n], Background.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(OBJECT, { optional: true })\n], Background.prototype, \"image\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true }),\n  ProxyPropertyOnWrite(\"textNode\")\n], Background.prototype, \"text\", 2);\n\n// packages/ag-charts-community/src/chart/background/backgroundModule.ts\nvar BackgroundModule = {\n  type: \"root\",\n  optionsKey: \"background\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"],\n  moduleFactory: (ctx) => new Background(ctx)\n};\n\n// packages/ag-charts-community/src/chart/gridLayout.ts\nfunction gridLayout({\n  orientation,\n  bboxes,\n  maxHeight,\n  maxWidth,\n  itemPaddingY = 0,\n  itemPaddingX = 0,\n  forceResult = false\n}) {\n  const horizontal = orientation === \"horizontal\";\n  const primary = {\n    max: horizontal ? maxWidth : maxHeight,\n    fn: horizontal ? (b) => b.width : (b) => b.height,\n    padding: horizontal ? itemPaddingX : itemPaddingY\n  };\n  const secondary = {\n    max: horizontal ? maxHeight : maxWidth,\n    fn: horizontal ? (b) => b.height : (b) => b.width,\n    padding: horizontal ? itemPaddingY : itemPaddingX\n  };\n  let processedBBoxCount = 0;\n  const rawPages = [];\n  while (processedBBoxCount < bboxes.length) {\n    const unprocessedBBoxes = bboxes.slice(processedBBoxCount);\n    const result = processBBoxes(unprocessedBBoxes, processedBBoxCount, primary, secondary, forceResult);\n    if (!result) {\n      return;\n    }\n    processedBBoxCount += result.processedBBoxCount;\n    rawPages.push(result.pageIndices);\n  }\n  return buildPages(rawPages, orientation, bboxes, itemPaddingY, itemPaddingX);\n}\nfunction processBBoxes(bboxes, indexOffset, primary, secondary, forceResult) {\n  const minGuess = 1;\n  let startingGuess = estimateStartingGuess(bboxes, primary);\n  if (startingGuess < minGuess) {\n    if (!forceResult) {\n      return;\n    }\n    startingGuess = minGuess;\n  }\n  let guess = startingGuess;\n  while (guess >= minGuess) {\n    const pageIndices = calculatePage(bboxes, indexOffset, guess, primary, secondary, forceResult);\n    if (pageIndices == null && guess <= minGuess) {\n      return;\n    }\n    if (pageIndices == null) {\n      guess--;\n      continue;\n    }\n    if (typeof pageIndices === \"number\") {\n      if (pageIndices <= minGuess) {\n        return;\n      }\n      guess = pageIndices < guess && pageIndices > minGuess ? pageIndices : guess;\n      guess--;\n      continue;\n    }\n    const processedBBoxCount = pageIndices.length * pageIndices[0].length;\n    return { processedBBoxCount, pageIndices };\n  }\n}\nfunction calculatePage(bboxes, indexOffset, primaryCount, primary, secondary, forceResult) {\n  const result = [];\n  let sumSecondary = 0;\n  let currentMaxSecondary = 0;\n  let currentPrimaryIndices = [];\n  const maxPrimaryValues = [];\n  for (let bboxIndex = 0; bboxIndex < bboxes.length; bboxIndex++) {\n    const primaryValueIdx = (bboxIndex + primaryCount) % primaryCount;\n    if (primaryValueIdx === 0) {\n      sumSecondary += currentMaxSecondary;\n      currentMaxSecondary = 0;\n      if (currentPrimaryIndices.length > 0) {\n        result.push(currentPrimaryIndices);\n      }\n      currentPrimaryIndices = [];\n    }\n    const primaryValue = primary.fn(bboxes[bboxIndex]) + primary.padding;\n    maxPrimaryValues[primaryValueIdx] = Math.max(maxPrimaryValues[primaryValueIdx] ?? 0, primaryValue);\n    currentMaxSecondary = Math.max(currentMaxSecondary, secondary.fn(bboxes[bboxIndex]) + secondary.padding);\n    const currentSecondaryDimension = sumSecondary + currentMaxSecondary;\n    const returnResult = !forceResult || result.length > 0;\n    if (currentSecondaryDimension > secondary.max && returnResult) {\n      currentPrimaryIndices = [];\n      break;\n    }\n    const sumPrimary = maxPrimaryValues.reduce((sum2, next) => sum2 + next, 0);\n    if (sumPrimary > primary.max && !forceResult) {\n      if (maxPrimaryValues.length < primaryCount) {\n        return maxPrimaryValues.length;\n      }\n      return;\n    }\n    currentPrimaryIndices.push(bboxIndex + indexOffset);\n  }\n  if (currentPrimaryIndices.length > 0) {\n    result.push(currentPrimaryIndices);\n  }\n  return result.length > 0 ? result : void 0;\n}\nfunction buildPages(rawPages, orientation, bboxes, itemPaddingY, itemPaddingX) {\n  let maxPageWidth = 0;\n  let maxPageHeight = 0;\n  const pages = rawPages.map((indices) => {\n    if (orientation === \"horizontal\") {\n      indices = transpose(indices);\n    }\n    let endIndex = 0;\n    const columns = indices.map((colIndices) => {\n      const colBBoxes = colIndices.map((bboxIndex) => {\n        endIndex = Math.max(bboxIndex, endIndex);\n        return bboxes[bboxIndex];\n      });\n      let columnHeight = 0;\n      let columnWidth = 0;\n      colBBoxes.forEach((bbox) => {\n        columnHeight += bbox.height + itemPaddingY;\n        columnWidth = Math.max(columnWidth, bbox.width + itemPaddingX);\n      });\n      return {\n        indices: colIndices,\n        bboxes: colBBoxes,\n        columnHeight: Math.ceil(columnHeight),\n        columnWidth: Math.ceil(columnWidth)\n      };\n    });\n    let pageWidth = 0;\n    let pageHeight = 0;\n    columns.forEach((column) => {\n      pageWidth += column.columnWidth;\n      pageHeight = Math.max(pageHeight, column.columnHeight);\n    });\n    maxPageWidth = Math.max(pageWidth, maxPageWidth);\n    maxPageHeight = Math.max(pageHeight, maxPageHeight);\n    return {\n      columns,\n      startIndex: indices[0][0],\n      endIndex,\n      pageWidth,\n      pageHeight\n    };\n  });\n  return { pages, maxPageWidth, maxPageHeight };\n}\nfunction transpose(data) {\n  const result = [];\n  for (const _ of data[0]) {\n    result.push([]);\n  }\n  data.forEach((innerData, dataIdx) => {\n    innerData.forEach((item, itemIdx) => {\n      result[itemIdx][dataIdx] = item;\n    });\n  });\n  return result;\n}\nfunction estimateStartingGuess(bboxes, primary) {\n  const n = bboxes.length;\n  let primarySum = 0;\n  for (let bboxIndex = 0; bboxIndex < n; bboxIndex++) {\n    primarySum += primary.fn(bboxes[bboxIndex]) + primary.padding;\n    if (primarySum > primary.max) {\n      const ratio2 = n / bboxIndex;\n      if (ratio2 < 2) {\n        return Math.ceil(n / 2);\n      }\n      return bboxIndex;\n    }\n  }\n  return n;\n}\n\n// packages/ag-charts-community/src/scene/image.ts\nvar Image = class extends Node {\n  constructor(sourceImage) {\n    super();\n    this.sourceImage = sourceImage;\n    this.x = 0;\n    this.y = 0;\n    this.width = 0;\n    this.height = 0;\n    this.opacity = 1;\n  }\n  updateBitmap(newBitmap, bitmapPixelRatio, x, y) {\n    this.sourceImage = newBitmap;\n    this.width = newBitmap.width / bitmapPixelRatio;\n    this.height = newBitmap.height / bitmapPixelRatio;\n    this.x = x / bitmapPixelRatio;\n    this.y = y / bitmapPixelRatio;\n    this.markDirty(3 /* MAJOR */);\n  }\n  render(renderCtx) {\n    const { ctx, forceRender, stats } = renderCtx;\n    if (this.dirty === 0 /* NONE */ && !forceRender) {\n      if (stats)\n        stats.nodesSkipped++;\n      return;\n    }\n    const image = this.sourceImage;\n    if (!image)\n      return;\n    ctx.globalAlpha = this.opacity;\n    ctx.drawImage(image, 0, 0, image.width, image.height, this.x, this.y, this.width, this.height);\n    super.render(renderCtx);\n  }\n};\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Image.prototype, \"x\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Image.prototype, \"y\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Image.prototype, \"width\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Image.prototype, \"height\", 2);\n__decorateClass([\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], Image.prototype, \"opacity\", 2);\n\n// packages/ag-charts-community/src/chart/legendMarkerLabel.ts\nvar LegendMarkerLabel = class extends Translatable(Group) {\n  constructor() {\n    super({ name: \"markerLabelGroup\" });\n    this.label = new Text();\n    this.symbolsGroup = new Group({\n      name: \"legend-markerLabel-symbols\"\n    });\n    this.bitmap = new Image();\n    this.bitmapDirty = true;\n    this.enabled = true;\n    this.pageIndex = NaN;\n    this._markers = [];\n    this._lines = [];\n    const { markers, label, lines } = this;\n    label.textBaseline = \"middle\";\n    label.fontSize = 12;\n    label.fontFamily = \"Verdana, sans-serif\";\n    label.fill = \"black\";\n    label.y = 1;\n    this.updateSymbols(markers, lines);\n    this.append([this.symbolsGroup, label]);\n  }\n  destroy() {\n    super.destroy();\n    this.destroyProxyButton();\n  }\n  destroyProxyButton() {\n    this.proxyButton?.button.remove();\n    this.proxyButton?.listitem.remove();\n    this.proxyButton = void 0;\n  }\n  get markers() {\n    return this._markers;\n  }\n  get lines() {\n    return this._lines;\n  }\n  updateSymbols(markers, lines) {\n    if (arraysEqual(this._markers, markers) && arraysEqual(this._lines, lines))\n      return;\n    this.bitmapDirty = true;\n    this._markers = markers;\n    this._lines = lines;\n    this.symbolsGroup.clear();\n    this.symbolsGroup.append([this.bitmap, ...lines, ...markers]);\n  }\n  setEnabled(enabled) {\n    this.enabled = enabled;\n    this.refreshVisibilities();\n  }\n  refreshVisibilities() {\n    const opacity = this.enabled ? 1 : 0.5;\n    this.label.opacity = opacity;\n    this.opacity = opacity;\n    this.bitmap.opacity = opacity;\n    this.setBitmapVisibility(!this.enabled);\n  }\n  setBitmapVisibility(visible) {\n    const { lines, markers } = this;\n    [lines, markers].forEach((shapes) => shapes.forEach((shape) => shape.visible = !visible));\n    this.bitmap.visible = visible;\n  }\n  // The BBox of this.bitmap is `spritePadding` pixels bigger in each direction than BBox of the markers and lines.\n  // This padding allows the SpriteRenderer to draw antialiasing pixels that can extend beyond the shapes' bounds.\n  update(spriteRenderer, { spriteAAPadding, spritePixelRatio: scale2 }, dimensionProps) {\n    const { markers, lines } = this;\n    let spriteX = 0;\n    let spriteY = 0;\n    let shift = 0;\n    for (let i = 0; i < Math.max(markers.length, lines.length); i++) {\n      const { length: length2, spacing, isCustomMarker } = dimensionProps[i] ?? 0;\n      const marker = markers[i];\n      const line = lines[i];\n      const size = marker?.size ?? 0;\n      let lineTop = Infinity;\n      let lineX1 = Infinity;\n      let lineX2 = Infinity;\n      let markerTop = Infinity;\n      let markerLeft = Infinity;\n      if (marker) {\n        const center2 = marker.constructor.center;\n        const radius = (size + marker.strokeWidth) / 2;\n        if (isCustomMarker) {\n          marker.x = 0;\n          marker.y = 0;\n          marker.translationX = (center2.x - 0.5) * size + length2 / 2 + shift;\n          marker.translationY = (center2.y - 0.5) * size;\n          markerTop = marker.translationY - radius;\n          markerLeft = marker.translationX - radius;\n        } else {\n          marker.x = (center2.x - 0.5) * size + length2 / 2 + shift;\n          marker.y = (center2.y - 0.5) * size;\n          markerTop = marker.y - radius;\n          markerLeft = marker.x - radius;\n        }\n      }\n      if (line) {\n        line.x1 = shift;\n        line.x2 = shift + length2;\n        line.y1 = 0;\n        line.y2 = 0;\n        line.markDirty(3 /* MAJOR */);\n        lineTop = -line.strokeWidth / 2;\n        lineX1 = line.x1;\n        lineX2 = line.x2;\n      }\n      shift += spacing + Math.max(length2, size);\n      spriteX = Math.min(spriteX, lineX1, lineX2, markerLeft);\n      spriteY = Math.min(spriteY, lineTop, markerTop);\n    }\n    const lastSymbolProps = dimensionProps.at(-1);\n    const lastLine = this.lines.at(-1);\n    const lastMarker = this.markers.at(-1);\n    const lineEnd = lastLine ? lastLine.x2 : -Infinity;\n    const markerEnd = (lastMarker?.x ?? 0) + (lastMarker?.size ?? 0) / 2;\n    this.label.x = Math.max(lineEnd, markerEnd) + (lastSymbolProps?.spacing ?? 0);\n    if (this.bitmapDirty) {\n      this.setBitmapVisibility(false);\n      const translateX = (spriteAAPadding + spriteX) * scale2;\n      const translateY = (spriteAAPadding - spriteY) * scale2;\n      const sprite = spriteRenderer.renderSprite(this.symbolsGroup, {\n        scale: scale2,\n        translateX: Math.floor(translateX),\n        translateY: Math.floor(translateY)\n      });\n      this.bitmap.updateBitmap(sprite, scale2, Math.ceil(-translateX), Math.ceil(-translateY));\n      this.bitmapDirty = false;\n      this.refreshVisibilities();\n    }\n    if (dimensionProps.length < 2) {\n      return;\n    }\n    const bbox = this.symbolsGroup.getBBox();\n    const clippedWidth = Math.max(lastMarker?.size ?? 0, lastSymbolProps?.length ?? 0);\n    const clipRect = new BBox(bbox.x + clippedWidth / 2, bbox.y, clippedWidth, bbox.height);\n    this.symbolsGroup.setClipRect(clipRect);\n  }\n  computeBBox() {\n    const { label, lines, markers } = this;\n    return this.toParent(Group.computeChildrenBBox(iterate([label], lines, markers), false));\n  }\n};\nLegendMarkerLabel.className = \"MarkerLabel\";\n__decorateClass([\n  ProxyPropertyOnWrite(\"label\")\n], LegendMarkerLabel.prototype, \"text\", 2);\n__decorateClass([\n  ProxyPropertyOnWrite(\"label\")\n], LegendMarkerLabel.prototype, \"fontStyle\", 2);\n__decorateClass([\n  ProxyPropertyOnWrite(\"label\")\n], LegendMarkerLabel.prototype, \"fontWeight\", 2);\n__decorateClass([\n  ProxyPropertyOnWrite(\"label\")\n], LegendMarkerLabel.prototype, \"fontSize\", 2);\n__decorateClass([\n  ProxyPropertyOnWrite(\"label\")\n], LegendMarkerLabel.prototype, \"fontFamily\", 2);\n__decorateClass([\n  ProxyPropertyOnWrite(\"label\", \"fill\")\n], LegendMarkerLabel.prototype, \"color\", 2);\n\n// packages/ag-charts-community/src/chart/pagination/pagination.ts\nvar PaginationLabel = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.color = \"black\";\n    this.fontStyle = void 0;\n    this.fontWeight = void 0;\n    this.fontSize = 12;\n    this.fontFamily = \"Verdana, sans-serif\";\n  }\n};\n__decorateClass([\n  Validate(COLOR_STRING)\n], PaginationLabel.prototype, \"color\", 2);\n__decorateClass([\n  Validate(FONT_STYLE, { optional: true })\n], PaginationLabel.prototype, \"fontStyle\", 2);\n__decorateClass([\n  Validate(FONT_WEIGHT, { optional: true })\n], PaginationLabel.prototype, \"fontWeight\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PaginationLabel.prototype, \"fontSize\", 2);\n__decorateClass([\n  Validate(STRING)\n], PaginationLabel.prototype, \"fontFamily\", 2);\nvar PaginationMarkerStyle = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.size = 15;\n    this.fill = void 0;\n    this.fillOpacity = void 0;\n    this.stroke = void 0;\n    this.strokeWidth = 1;\n    this.strokeOpacity = 1;\n  }\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PaginationMarkerStyle.prototype, \"size\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], PaginationMarkerStyle.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], PaginationMarkerStyle.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], PaginationMarkerStyle.prototype, \"stroke\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PaginationMarkerStyle.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO)\n], PaginationMarkerStyle.prototype, \"strokeOpacity\", 2);\nvar PaginationMarker = class extends BaseProperties {\n  constructor(parent) {\n    super();\n    this.parent = parent;\n    this.shape = Triangle;\n    this.size = 15;\n    this.padding = 8;\n  }\n};\n__decorateClass([\n  ActionOnSet({\n    changeValue() {\n      if (this.parent.marker === this) {\n        this.parent.onMarkerShapeChange();\n      }\n    }\n  })\n], PaginationMarker.prototype, \"shape\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PaginationMarker.prototype, \"size\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PaginationMarker.prototype, \"padding\", 2);\nvar Pagination = class extends BaseProperties {\n  constructor(chartUpdateCallback, pageUpdateCallback) {\n    super();\n    this.chartUpdateCallback = chartUpdateCallback;\n    this.pageUpdateCallback = pageUpdateCallback;\n    this.id = createId(this);\n    this.marker = new PaginationMarker(this);\n    this.activeStyle = new PaginationMarkerStyle();\n    this.inactiveStyle = new PaginationMarkerStyle();\n    this.highlightStyle = new PaginationMarkerStyle();\n    this.label = new PaginationLabel();\n    this.group = new TranslatableGroup({ name: \"pagination\" });\n    this.labelNode = new Text();\n    this.destroyFns = [];\n    this.totalPages = 0;\n    this.currentPage = 0;\n    this.translationX = 0;\n    this.translationY = 0;\n    this.nextButtonDisabled = false;\n    this.previousButtonDisabled = false;\n    this._visible = true;\n    this._enabled = true;\n    this._orientation = \"vertical\";\n    this._nextButton = new Triangle();\n    this._previousButton = new Triangle();\n    this.labelNode.setProperties({\n      textBaseline: \"middle\",\n      fontSize: 12,\n      fontFamily: \"Verdana, sans-serif\",\n      fill: \"black\",\n      y: 1\n    });\n    this.group.append([this.nextButton, this.previousButton, this.labelNode]);\n    this.update();\n    this.updateMarkers();\n  }\n  destroy() {\n    this.destroyFns.forEach((f) => f());\n  }\n  set visible(value) {\n    this._visible = value;\n    this.updateGroupVisibility();\n  }\n  get visible() {\n    return this._visible;\n  }\n  set enabled(value) {\n    this._enabled = value;\n    this.updateGroupVisibility();\n  }\n  get enabled() {\n    return this._enabled;\n  }\n  updateGroupVisibility() {\n    this.group.visible = this.enabled && this.visible;\n  }\n  set orientation(value) {\n    this._orientation = value;\n    switch (value) {\n      case \"horizontal\": {\n        this.previousButton.rotation = -Math.PI / 2;\n        this.nextButton.rotation = Math.PI / 2;\n        break;\n      }\n      case \"vertical\":\n      default: {\n        this.previousButton.rotation = 0;\n        this.nextButton.rotation = Math.PI;\n      }\n    }\n  }\n  get orientation() {\n    return this._orientation;\n  }\n  set nextButton(value) {\n    if (this._nextButton !== value) {\n      this.group.removeChild(this._nextButton);\n      this._nextButton = value;\n      this.group.appendChild(value);\n    }\n  }\n  get nextButton() {\n    return this._nextButton;\n  }\n  set previousButton(value) {\n    if (this._previousButton !== value) {\n      this.group.removeChild(this._previousButton);\n      this._previousButton = value;\n      this.group.appendChild(value);\n    }\n  }\n  get previousButton() {\n    return this._previousButton;\n  }\n  update() {\n    this.updateLabel();\n    this.updatePositions();\n    this.enableOrDisableButtons();\n  }\n  updatePositions() {\n    this.group.translationX = this.translationX;\n    this.group.translationY = this.translationY;\n    this.updateLabelPosition();\n    this.updateNextButtonPosition();\n  }\n  updateLabelPosition() {\n    const { size: markerSize, padding: markerPadding } = this.marker;\n    this.nextButton.size = markerSize;\n    this.previousButton.size = markerSize;\n    this.labelNode.x = markerSize / 2 + markerPadding;\n  }\n  updateNextButtonPosition() {\n    const labelBBox = this.labelNode.getBBox();\n    this.nextButton.translationX = labelBBox.width + (this.marker.size / 2 + this.marker.padding) * 2;\n  }\n  updateLabel() {\n    const {\n      currentPage,\n      totalPages: pages,\n      labelNode,\n      label: { color, fontStyle, fontWeight, fontSize, fontFamily }\n    } = this;\n    labelNode.text = `${currentPage + 1} / ${pages}`;\n    labelNode.fill = color;\n    labelNode.fontStyle = fontStyle;\n    labelNode.fontWeight = fontWeight;\n    labelNode.fontSize = fontSize;\n    labelNode.fontFamily = fontFamily;\n  }\n  updateMarkers() {\n    const {\n      nextButton,\n      previousButton,\n      nextButtonDisabled,\n      previousButtonDisabled,\n      activeStyle,\n      inactiveStyle,\n      highlightStyle,\n      highlightActive\n    } = this;\n    const buttonStyle = (button, disabled) => {\n      if (disabled) {\n        return inactiveStyle;\n      } else if (button === highlightActive) {\n        return highlightStyle;\n      }\n      return activeStyle;\n    };\n    this.updateMarker(nextButton, buttonStyle(\"next\", nextButtonDisabled));\n    this.updateMarker(previousButton, buttonStyle(\"previous\", previousButtonDisabled));\n  }\n  updateMarker(marker, style) {\n    const { size } = this.marker;\n    marker.size = size;\n    marker.fill = style.fill;\n    marker.fillOpacity = style.fillOpacity ?? 1;\n    marker.stroke = style.stroke;\n    marker.strokeWidth = style.strokeWidth;\n    marker.strokeOpacity = style.strokeOpacity;\n  }\n  enableOrDisableButtons() {\n    const { currentPage, totalPages } = this;\n    const zeroPagesToDisplay = totalPages === 0;\n    const onLastPage = currentPage === totalPages - 1;\n    const onFirstPage = currentPage === 0;\n    this.nextButtonDisabled = onLastPage || zeroPagesToDisplay;\n    this.previousButtonDisabled = onFirstPage || zeroPagesToDisplay;\n  }\n  setPage(pageNumber) {\n    pageNumber = clamp(0, pageNumber, this.totalPages - 1);\n    if (this.currentPage !== pageNumber) {\n      this.currentPage = pageNumber;\n      this.onPaginationChanged();\n    }\n  }\n  getCursor(node) {\n    return { previous: this.previousButtonDisabled, next: this.nextButtonDisabled }[node] ? void 0 : \"pointer\";\n  }\n  onClick(event, node) {\n    event.preventDefault();\n    if (node === \"next\" && !this.nextButtonDisabled) {\n      this.incrementPage();\n      this.onPaginationChanged();\n    } else if (node === \"previous\" && !this.previousButtonDisabled) {\n      this.decrementPage();\n      this.onPaginationChanged();\n    }\n  }\n  onMouseHover(node) {\n    this.highlightActive = node;\n    this.updateMarkers();\n    this.chartUpdateCallback(6 /* SCENE_RENDER */);\n  }\n  onPaginationChanged() {\n    this.pageUpdateCallback(this.currentPage);\n  }\n  incrementPage() {\n    this.currentPage = Math.min(this.currentPage + 1, this.totalPages - 1);\n  }\n  decrementPage() {\n    this.currentPage = Math.max(this.currentPage - 1, 0);\n  }\n  onMarkerShapeChange() {\n    const Marker2 = Rotatable(getMarker(this.marker.shape || Triangle));\n    this.previousButton = new Marker2();\n    this.nextButton = new Marker2();\n    this.updatePositions();\n    this.updateMarkers();\n    this.chartUpdateCallback(6 /* SCENE_RENDER */);\n  }\n  attachPagination(node) {\n    node.append(this.group);\n  }\n  getBBox() {\n    return this.group.getBBox();\n  }\n  computeCSSBounds() {\n    const prev = Transformable.toCanvas(this.previousButton);\n    const next = Transformable.toCanvas(this.nextButton);\n    return { prev, next };\n  }\n};\nPagination.className = \"Pagination\";\n__decorateClass([\n  Validate(OBJECT)\n], Pagination.prototype, \"marker\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], Pagination.prototype, \"activeStyle\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], Pagination.prototype, \"inactiveStyle\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], Pagination.prototype, \"highlightStyle\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], Pagination.prototype, \"label\", 2);\n\n// packages/ag-charts-community/src/chart/legend.ts\nvar LegendLabel = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.maxLength = void 0;\n    this.color = \"black\";\n    this.fontStyle = void 0;\n    this.fontWeight = void 0;\n    this.fontSize = 12;\n    this.fontFamily = \"Verdana, sans-serif\";\n  }\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], LegendLabel.prototype, \"maxLength\", 2);\n__decorateClass([\n  Validate(COLOR_STRING)\n], LegendLabel.prototype, \"color\", 2);\n__decorateClass([\n  Validate(FONT_STYLE, { optional: true })\n], LegendLabel.prototype, \"fontStyle\", 2);\n__decorateClass([\n  Validate(FONT_WEIGHT, { optional: true })\n], LegendLabel.prototype, \"fontWeight\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], LegendLabel.prototype, \"fontSize\", 2);\n__decorateClass([\n  Validate(STRING)\n], LegendLabel.prototype, \"fontFamily\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], LegendLabel.prototype, \"formatter\", 2);\nvar LegendMarker = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.size = 15;\n    this.padding = 8;\n  }\n};\n__decorateClass([\n  ObserveChanges((target) => target.parent?.onMarkerShapeChange())\n], LegendMarker.prototype, \"shape\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], LegendMarker.prototype, \"size\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], LegendMarker.prototype, \"padding\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], LegendMarker.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], LegendMarker.prototype, \"enabled\", 2);\nvar LegendLine = class extends BaseProperties {\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], LegendLine.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], LegendLine.prototype, \"length\", 2);\nvar LegendItem = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.paddingX = 16;\n    this.paddingY = 8;\n    this.showSeriesStroke = false;\n    this.marker = new LegendMarker();\n    this.label = new LegendLabel();\n    this.line = new LegendLine();\n  }\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], LegendItem.prototype, \"maxWidth\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], LegendItem.prototype, \"paddingX\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], LegendItem.prototype, \"paddingY\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], LegendItem.prototype, \"showSeriesStroke\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], LegendItem.prototype, \"marker\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], LegendItem.prototype, \"label\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], LegendItem.prototype, \"line\", 2);\nvar LegendListeners = class extends BaseProperties {\n};\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], LegendListeners.prototype, \"legendItemClick\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], LegendListeners.prototype, \"legendItemDoubleClick\", 2);\nvar ID_LEGEND_VISIBILITY = \"legend-visibility\";\nvar ID_LEGEND_OTHER_SERIES = \"legend-other-series\";\nvar LegendItemEvent = class {\n  constructor(type, enabled, itemId, seriesId, event) {\n    this.type = type;\n    this.enabled = enabled;\n    this.itemId = itemId;\n    this.seriesId = seriesId;\n    this.event = event;\n    this.defaultPrevented = false;\n  }\n  preventDefault() {\n    this.defaultPrevented = true;\n  }\n};\nvar Legend = class extends BaseProperties {\n  constructor(ctx) {\n    super();\n    this.ctx = ctx;\n    this.id = createId(this);\n    this.group = new TranslatableLayer({ name: \"legend\", zIndex: 15 /* LEGEND */ });\n    this.itemSelection = Selection.select(\n      this.group,\n      LegendMarkerLabel\n    );\n    this.spriteRenderer = void 0;\n    this.oldSize = [0, 0];\n    this.pages = [];\n    this.maxPageSize = [0, 0];\n    /** Item index to track on re-pagination, so current page updates appropriately. */\n    this.paginationTrackingIndex = 0;\n    this.truncatedItems = /* @__PURE__ */ new Set();\n    this._data = [];\n    this._symbolsDirty = true;\n    this.toggleSeries = true;\n    this.item = new LegendItem();\n    this.listeners = new LegendListeners();\n    this.enabled = true;\n    this.position = \"bottom\";\n    this.spacing = 20;\n    this.destroyFns = [];\n    this.proxyLegendDirty = true;\n    this.proxyLegendToolbarDestroyFns = new DestroyFns();\n    this.size = [0, 0];\n    this._visible = true;\n    this.item.marker.parent = this;\n    this.pagination = new Pagination(\n      (type) => ctx.updateService.update(type),\n      (page) => this.updatePageNumber(page)\n    );\n    this.pagination.attachPagination(this.group);\n    this.destroyFns.push(\n      ctx.contextMenuRegistry.registerDefaultAction({\n        id: ID_LEGEND_VISIBILITY,\n        type: \"legend\",\n        label: \"contextMenuToggleSeriesVisibility\",\n        action: (params) => this.contextToggleVisibility(params)\n      }),\n      ctx.contextMenuRegistry.registerDefaultAction({\n        id: ID_LEGEND_OTHER_SERIES,\n        type: \"legend\",\n        label: \"contextMenuToggleOtherSeries\",\n        action: (params) => this.contextToggleOtherSeries(params)\n      })\n    );\n    this.destroyFns.push(\n      ctx.layoutManager.registerElement(1 /* Legend */, (e) => this.positionLegend(e)),\n      ctx.localeManager.addListener(\"locale-changed\", () => this.onLocaleChanged()),\n      () => this.group.remove()\n    );\n    this.proxyLegendToolbar = this.ctx.proxyInteractionService.createProxyContainer({\n      type: \"list\",\n      id: `${this.id}-toolbar`,\n      classList: [\"ag-charts-proxy-legend-toolbar\"],\n      ariaLabel: { id: \"ariaLabelLegend\" },\n      ariaHidden: true\n    });\n    this.proxyLegendPagination = this.ctx.proxyInteractionService.createProxyContainer({\n      type: \"group\",\n      id: `${this.id}-pagination`,\n      classList: [\"ag-charts-proxy-legend-pagination\"],\n      ariaLabel: { id: \"ariaLabelLegendPagination\" },\n      ariaOrientation: \"horizontal\",\n      ariaHidden: true\n    });\n    this.proxyLegendItemDescription = createElement(\"p\");\n    this.proxyLegendItemDescription.style.display = \"none\";\n    this.proxyLegendItemDescription.id = `${this.id}-ariaDescription`;\n    this.proxyLegendItemDescription.textContent = this.getItemAriaDescription();\n    this.proxyLegendToolbar.append(this.proxyLegendItemDescription);\n  }\n  set data(value) {\n    this.onDataUpdate(this._data, value);\n    this._data = value;\n    this._symbolsDirty = true;\n    this.updateGroupVisibility();\n  }\n  get data() {\n    return this._data;\n  }\n  destroy() {\n    this.ctx.domManager.removeChild(\"canvas-overlay\", `${this.id}-toolbar`);\n    this.ctx.domManager.removeChild(\"canvas-overlay\", `${this.id}-pagination`);\n    this.destroyFns.forEach((f) => f());\n    this.pagination.destroy();\n    this.itemSelection.clear();\n    this.proxyLegendToolbarDestroyFns.destroy();\n  }\n  initLegendItemToolbar() {\n    if (!this.proxyLegendDirty)\n      return;\n    this.itemSelection.each((markerLabel, _, i) => {\n      markerLabel.destroyProxyButton();\n      markerLabel.proxyButton ?? (markerLabel.proxyButton = this.ctx.proxyInteractionService.createProxyElement({\n        type: \"listswitch\",\n        id: `ag-charts-legend-item-${i}`,\n        textContent: this.getItemAriaText(i),\n        ariaChecked: !!markerLabel.datum.enabled,\n        ariaDescribedBy: this.proxyLegendItemDescription.id,\n        parent: this.proxyLegendToolbar,\n        // Retrieve the datum from the node rather than from the method parameter.\n        // The method parameter `datum` gets destroyed when the data is refreshed\n        // using Series.getLegendData(). But the scene node will stay the same.\n        onclick: (ev) => this.onClick(ev, markerLabel.datum, markerLabel.proxyButton.button),\n        ondblclick: (ev) => this.onDoubleClick(ev, markerLabel.datum),\n        onmouseenter: (ev) => this.onHover(ev, markerLabel),\n        onmouseleave: () => this.onLeave(),\n        oncontextmenu: (ev) => this.onContextClick(ev, markerLabel),\n        onblur: () => this.onLeave(),\n        onfocus: (ev) => this.onHover(ev, markerLabel)\n      }));\n    });\n    const buttons = this.itemSelection.nodes().map((markerLabel) => markerLabel.proxyButton?.button).filter(isDefined);\n    this.proxyLegendToolbarDestroyFns.setFns([\n      ...initRovingTabIndex({ orientation: \"horizontal\", buttons }),\n      ...initRovingTabIndex({ orientation: \"vertical\", buttons })\n    ]);\n    this.proxyLegendToolbar.ariaHidden = (buttons.length === 0).toString();\n    this.proxyLegendDirty = false;\n  }\n  onDataUpdate(oldData, newData) {\n    this.proxyLegendDirty = oldData.length !== newData.length || oldData.some((_v, index, _a) => {\n      const [newValue, oldValue] = [newData[index], oldData[index]];\n      return newValue.id !== oldValue.id;\n    });\n  }\n  onMarkerShapeChange() {\n    this.itemSelection.clear();\n    this.group.markDirty(2 /* MINOR */);\n  }\n  getOrientation() {\n    if (this.orientation !== void 0) {\n      return this.orientation;\n    }\n    switch (this.position) {\n      case \"right\":\n      case \"left\":\n        return \"vertical\";\n      case \"bottom\":\n      case \"top\":\n        return \"horizontal\";\n    }\n  }\n  set visible(value) {\n    this._visible = value;\n    this.updateGroupVisibility();\n  }\n  get visible() {\n    return this._visible;\n  }\n  updateGroupVisibility() {\n    this.group.visible = this.enabled && this.visible && this.data.length > 0;\n  }\n  attachLegend(scene) {\n    scene.appendChild(this.group);\n  }\n  getItemLabel(datum) {\n    const {\n      ctx: { callbackCache }\n    } = this;\n    const { formatter } = this.item.label;\n    if (formatter) {\n      return callbackCache.call(formatter, {\n        itemId: datum.itemId,\n        value: datum.label.text,\n        seriesId: datum.seriesId\n      });\n    }\n    return datum.label.text;\n  }\n  /**\n   * The method is given the desired size of the legend, which only serves as a hint.\n   * The vertically oriented legend will take as much horizontal space as needed, but will\n   * respect the height constraints, and the horizontal legend will take as much vertical\n   * space as needed in an attempt not to exceed the given width.\n   * After the layout is done, the {@link size} will contain the actual size of the legend.\n   * If the actual size is not the same as the previous actual size, the legend will fire\n   * the 'layoutChange' event to communicate that another layout is needed, and the above\n   * process should be repeated.\n   * @param width\n   * @param height\n   */\n  calcLayout(width2, height2) {\n    const {\n      paddingX,\n      paddingY,\n      label,\n      maxWidth,\n      label: { maxLength = Infinity, fontStyle, fontWeight, fontSize, fontFamily }\n    } = this.item;\n    const data = [...this.data];\n    if (this.reverseOrder) {\n      data.reverse();\n    }\n    this.itemSelection.update(data);\n    this.initLegendItemToolbar();\n    const bboxes = [];\n    const font = TextUtils.toFontString(label);\n    const itemMaxWidthPercentage = 0.8;\n    const maxItemWidth = maxWidth ?? width2 * itemMaxWidthPercentage;\n    const spriteDims = this.calculateSpriteDimensions();\n    this.spriteRenderer ?? (this.spriteRenderer = new SpriteRenderer());\n    this.spriteRenderer.resize(spriteDims);\n    this.itemSelection.each((markerLabel, datum) => {\n      markerLabel.fontStyle = fontStyle;\n      markerLabel.fontWeight = fontWeight;\n      markerLabel.fontSize = fontSize;\n      markerLabel.fontFamily = fontFamily;\n      const paddedSymbolWidth = this.updateMarkerLabel(this.spriteRenderer, markerLabel, datum, spriteDims);\n      const id = datum.itemId ?? datum.id;\n      const labelText = this.getItemLabel(datum);\n      const text = (labelText ?? \"<unknown>\").replace(/\\r?\\n/g, \" \");\n      markerLabel.text = this.truncate(text, maxLength, maxItemWidth, paddedSymbolWidth, font, id);\n      bboxes.push(markerLabel.getBBox());\n    });\n    this._symbolsDirty = false;\n    width2 = Math.max(1, width2);\n    height2 = Math.max(1, height2);\n    if (!isFinite(width2)) {\n      return {};\n    }\n    const size = this.size;\n    const oldSize = this.oldSize;\n    size[0] = width2;\n    size[1] = height2;\n    if (size[0] !== oldSize[0] || size[1] !== oldSize[1]) {\n      oldSize[0] = size[0];\n      oldSize[1] = size[1];\n    }\n    const { pages, maxPageHeight, maxPageWidth } = this.updatePagination(bboxes, width2, height2);\n    const oldPages = this.pages;\n    this.pages = pages;\n    this.maxPageSize = [maxPageWidth - paddingX, maxPageHeight - paddingY];\n    const pageNumber = this.pagination.currentPage;\n    const page = this.pages[pageNumber];\n    if (this.pages.length < 1 || !page) {\n      this.visible = false;\n      return { oldPages };\n    }\n    this.visible = true;\n    this.updatePositions(pageNumber);\n    this.update();\n    return { oldPages };\n  }\n  isCustomMarker(markerEnabled, shape) {\n    return markerEnabled && shape !== void 0 && typeof shape !== \"string\";\n  }\n  calcSymbolsEnabled(symbol) {\n    const { showSeriesStroke, marker } = this.item;\n    const markerEnabled = !!marker.enabled || !showSeriesStroke || (symbol.marker.enabled ?? true);\n    const lineEnabled = !!(symbol.line && showSeriesStroke);\n    const isCustomMarker = this.isCustomMarker(markerEnabled, symbol.marker.shape);\n    return { markerEnabled, lineEnabled, isCustomMarker };\n  }\n  calcSymbolsLengths(symbol) {\n    const { marker, line } = this.item;\n    const { markerEnabled, lineEnabled } = this.calcSymbolsEnabled(symbol);\n    const { strokeWidth: markerStrokeWidth } = this.getMarkerStyles(symbol);\n    const { strokeWidth: lineStrokeWidth } = lineEnabled ? this.getLineStyles(symbol) : { strokeWidth: 0 };\n    let customMarkerSize;\n    const { shape } = symbol.marker;\n    if (this.isCustomMarker(markerEnabled, shape)) {\n      const tmpShape = new shape();\n      tmpShape.updatePath();\n      const bbox = tmpShape.getBBox();\n      customMarkerSize = Math.max(bbox.width, bbox.height);\n    }\n    const markerLength = markerEnabled ? marker.size : 0;\n    const lineLength = lineEnabled ? line.length ?? 25 : 0;\n    return { markerLength, markerStrokeWidth, lineLength, lineStrokeWidth, customMarkerSize };\n  }\n  calculateSpriteDimensions() {\n    let spriteAAPadding = 0;\n    let spriteWidth = 0;\n    let spriteHeight = 0;\n    let markerWidth = 0;\n    this.itemSelection.each((_, datum) => {\n      datum.symbols.forEach((symbol) => {\n        const {\n          markerLength,\n          markerStrokeWidth,\n          lineLength,\n          lineStrokeWidth,\n          customMarkerSize = -Infinity\n        } = this.calcSymbolsLengths(symbol);\n        const markerTotalLength = markerLength + markerStrokeWidth;\n        markerWidth = Math.max(markerWidth, lineLength, customMarkerSize, markerLength);\n        spriteWidth = Math.max(spriteWidth, lineLength, customMarkerSize, markerTotalLength);\n        spriteHeight = Math.max(spriteHeight, lineStrokeWidth, markerTotalLength);\n        spriteAAPadding = Math.max(spriteAAPadding, markerStrokeWidth + 0.5);\n      });\n    });\n    spriteWidth += spriteAAPadding * 2;\n    spriteHeight += spriteAAPadding * 2;\n    const spritePixelRatio = getWindow().devicePixelRatio;\n    return { spritePixelRatio, spriteAAPadding, spriteWidth, spriteHeight, markerWidth };\n  }\n  updateMarkerLabel(spriteRenderer, markerLabel, datum, spriteDims) {\n    const { marker: itemMarker, paddingX } = this.item;\n    const { markerWidth } = spriteDims;\n    const dimensionProps = [];\n    let paddedSymbolWidth = paddingX;\n    if (this._symbolsDirty) {\n      const markers = [];\n      const lines = [];\n      datum.symbols.forEach((symbol) => {\n        const { shape: markerShape = symbol.marker.shape } = itemMarker;\n        const MarkerCtr = getMarker(markerShape);\n        lines.push(new Line({ zIndex: 0 }));\n        markers.push(new MarkerCtr({ zIndex: 1 }));\n      });\n      markerLabel.updateSymbols(markers, lines);\n    }\n    datum.symbols.forEach((symbol, i) => {\n      const spacing = symbol.marker.padding ?? itemMarker.padding;\n      const { markerEnabled, lineEnabled, isCustomMarker } = this.calcSymbolsEnabled(symbol);\n      markerLabel.markers[i].size = markerEnabled || !lineEnabled ? itemMarker.size : 0;\n      dimensionProps.push({ length: markerWidth, spacing, isCustomMarker });\n      if (markerEnabled || lineEnabled) {\n        paddedSymbolWidth += spacing + markerWidth;\n      }\n      const marker = markerLabel.markers[i];\n      const line = markerLabel.lines[i];\n      if (marker) {\n        const { strokeWidth, fill, stroke, fillOpacity, strokeOpacity } = this.getMarkerStyles(symbol);\n        marker.fill = fill;\n        marker.stroke = stroke;\n        marker.strokeWidth = strokeWidth;\n        marker.fillOpacity = fillOpacity;\n        marker.strokeOpacity = strokeOpacity;\n      }\n      if (line) {\n        const lineStyles = this.getLineStyles(symbol);\n        line.stroke = lineStyles.stroke;\n        line.strokeOpacity = lineStyles.strokeOpacity;\n        line.strokeWidth = lineStyles.strokeWidth;\n        line.lineDash = lineStyles.lineDash;\n      }\n    });\n    markerLabel.update(spriteRenderer, spriteDims, dimensionProps);\n    return paddedSymbolWidth;\n  }\n  truncate(text, maxCharLength, maxItemWidth, paddedMarkerWidth, font, id) {\n    let addEllipsis = false;\n    if (text.length > maxCharLength) {\n      text = text.substring(0, maxCharLength);\n      addEllipsis = true;\n    }\n    const measurer = CachedTextMeasurerPool.getMeasurer({ font });\n    const result = TextWrapper.truncateLine(text, measurer, maxItemWidth - paddedMarkerWidth, addEllipsis);\n    if (result.endsWith(TextUtils.EllipsisChar)) {\n      this.truncatedItems.add(id);\n    } else {\n      this.truncatedItems.delete(id);\n    }\n    return result;\n  }\n  updatePagination(bboxes, width2, height2) {\n    const orientation = this.getOrientation();\n    const trackingIndex = Math.min(this.paginationTrackingIndex, bboxes.length);\n    this.pagination.orientation = orientation;\n    this.pagination.translationX = 0;\n    this.pagination.translationY = 0;\n    const { pages, maxPageHeight, maxPageWidth, paginationBBox, paginationVertical } = this.calculatePagination(\n      bboxes,\n      width2,\n      height2\n    );\n    const newCurrentPage = pages.findIndex((p) => p.endIndex >= trackingIndex);\n    this.pagination.currentPage = clamp(0, newCurrentPage, pages.length - 1);\n    const { paddingX: itemPaddingX, paddingY: itemPaddingY } = this.item;\n    const paginationComponentPadding = 8;\n    const legendItemsWidth = maxPageWidth - itemPaddingX;\n    const legendItemsHeight = maxPageHeight - itemPaddingY;\n    let paginationX = 0;\n    let paginationY = -paginationBBox.y - this.item.marker.size / 2;\n    if (paginationVertical) {\n      paginationY += legendItemsHeight + paginationComponentPadding;\n    } else {\n      paginationX += -paginationBBox.x + legendItemsWidth + paginationComponentPadding;\n      paginationY += (legendItemsHeight - paginationBBox.height) / 2;\n    }\n    this.pagination.translationX = paginationX;\n    this.pagination.translationY = paginationY;\n    this.pagination.update();\n    this.pagination.updateMarkers();\n    let pageIndex = 0;\n    this.itemSelection.each((markerLabel, _, nodeIndex) => {\n      if (nodeIndex > (pages[pageIndex]?.endIndex ?? Infinity)) {\n        pageIndex++;\n      }\n      markerLabel.pageIndex = pageIndex;\n    });\n    return {\n      maxPageHeight,\n      maxPageWidth,\n      pages\n    };\n  }\n  updateItemProxyButtons() {\n    const pointer = this.toggleSeries ? \"pointer\" : void 0;\n    const maxHeight = Math.max(...this.itemSelection.nodes().map((l) => l.getBBox().height));\n    this.itemSelection.each((l) => {\n      if (l.proxyButton) {\n        const { listitem, button } = l.proxyButton;\n        const visible = l.pageIndex === this.pagination.currentPage;\n        let bbox = Transformable.toCanvas(l);\n        if (bbox.height !== maxHeight) {\n          const margin = (maxHeight - bbox.height) / 2;\n          bbox = { x: bbox.x, y: bbox.y - margin, height: maxHeight, width: bbox.width };\n        }\n        setElementStyle(button, \"pointer-events\", visible ? \"auto\" : \"none\");\n        setElementStyle(button, \"cursor\", pointer);\n        setElementBBox(listitem, bbox);\n      }\n    });\n  }\n  updatePaginationProxyButtons(oldPages) {\n    this.proxyLegendPagination.style.display = this.pagination.visible ? \"block\" : \"none\";\n    const oldNeedsButtons = (oldPages?.length ?? this.pages.length) > 1;\n    const newNeedsButtons = this.pages.length > 1;\n    if (oldNeedsButtons !== newNeedsButtons) {\n      if (newNeedsButtons) {\n        this.proxyPrevButton = this.ctx.proxyInteractionService.createProxyElement({\n          type: \"button\",\n          id: `${this.id}-prev-page`,\n          textContent: { id: \"ariaLabelLegendPagePrevious\" },\n          tabIndex: 0,\n          parent: this.proxyLegendPagination,\n          onclick: (ev) => this.pagination.onClick(ev, \"previous\"),\n          onmouseenter: () => this.pagination.onMouseHover(\"previous\"),\n          onmouseleave: () => this.pagination.onMouseHover(void 0)\n        });\n        this.proxyNextButton ?? (this.proxyNextButton = this.ctx.proxyInteractionService.createProxyElement({\n          type: \"button\",\n          id: `${this.id}-next-page`,\n          textContent: { id: \"ariaLabelLegendPageNext\" },\n          tabIndex: 0,\n          parent: this.proxyLegendPagination,\n          onclick: (ev) => this.pagination.onClick(ev, \"next\"),\n          onmouseenter: () => this.pagination.onMouseHover(\"next\"),\n          onmouseleave: () => this.pagination.onMouseHover(void 0)\n        }));\n        this.proxyLegendPagination.ariaHidden = \"false\";\n      } else {\n        this.proxyNextButton?.remove();\n        this.proxyPrevButton?.remove();\n        [this.proxyNextButton, this.proxyPrevButton] = [void 0, void 0];\n        this.proxyLegendPagination.ariaHidden = \"true\";\n      }\n    }\n    const { prev, next } = this.pagination.computeCSSBounds();\n    setElementBBox(this.proxyPrevButton, prev);\n    setElementBBox(this.proxyNextButton, next);\n    setElementStyle(this.proxyNextButton, \"cursor\", this.pagination.getCursor(\"next\"));\n    setElementStyle(this.proxyPrevButton, \"cursor\", this.pagination.getCursor(\"previous\"));\n  }\n  calculatePagination(bboxes, width2, height2) {\n    const { paddingX: itemPaddingX, paddingY: itemPaddingY } = this.item;\n    const orientation = this.getOrientation();\n    const paginationVertical = [\"left\", \"right\"].includes(this.position);\n    let paginationBBox = this.pagination.getBBox();\n    let lastPassPaginationBBox = new BBox(0, 0, 0, 0);\n    let pages = [];\n    let maxPageWidth = 0;\n    let maxPageHeight = 0;\n    let count = 0;\n    const stableOutput = (bbox) => {\n      return bbox.width === paginationBBox.width && bbox.height === paginationBBox.height;\n    };\n    const forceResult = this.maxWidth !== void 0 && this.maxHeight !== void 0;\n    do {\n      if (count++ > 10) {\n        Logger.warn(\"unable to find stable legend layout.\");\n        break;\n      }\n      paginationBBox = lastPassPaginationBBox;\n      const maxWidth = width2 - (paginationVertical ? 0 : paginationBBox.width);\n      const maxHeight = height2 - (paginationVertical ? paginationBBox.height : 0);\n      const layout = gridLayout({\n        orientation,\n        bboxes,\n        maxHeight,\n        maxWidth,\n        itemPaddingY,\n        itemPaddingX,\n        forceResult\n      });\n      pages = layout?.pages ?? [];\n      maxPageWidth = layout?.maxPageWidth ?? 0;\n      maxPageHeight = layout?.maxPageHeight ?? 0;\n      const totalPages = pages.length;\n      this.pagination.visible = totalPages > 1;\n      this.pagination.totalPages = totalPages;\n      this.pagination.update();\n      this.pagination.updateMarkers();\n      lastPassPaginationBBox = this.pagination.getBBox();\n      if (!this.pagination.visible) {\n        break;\n      }\n    } while (!stableOutput(lastPassPaginationBBox));\n    return { maxPageWidth, maxPageHeight, pages, paginationBBox: lastPassPaginationBBox, paginationVertical };\n  }\n  updatePositions(pageNumber = 0) {\n    const {\n      item: { paddingY },\n      itemSelection,\n      pages\n    } = this;\n    if (pages.length < 1 || !pages[pageNumber]) {\n      return;\n    }\n    const { columns, startIndex: visibleStart, endIndex: visibleEnd } = pages[pageNumber];\n    let x = 0;\n    let y = 0;\n    const columnCount = columns.length;\n    const rowCount = columns[0].indices.length;\n    const horizontal = this.getOrientation() === \"horizontal\";\n    const itemHeight = columns[0].bboxes[0].height + paddingY;\n    const rowSumColumnWidths = [];\n    itemSelection.each((markerLabel, _, i) => {\n      if (i < visibleStart || i > visibleEnd) {\n        markerLabel.visible = false;\n        return;\n      }\n      const pageIndex = i - visibleStart;\n      let columnIndex;\n      let rowIndex;\n      if (horizontal) {\n        columnIndex = pageIndex % columnCount;\n        rowIndex = Math.floor(pageIndex / columnCount);\n      } else {\n        columnIndex = Math.floor(pageIndex / rowCount);\n        rowIndex = pageIndex % rowCount;\n      }\n      markerLabel.visible = true;\n      const column = columns[columnIndex];\n      if (!column) {\n        return;\n      }\n      y = Math.floor(itemHeight * rowIndex);\n      x = Math.floor(rowSumColumnWidths[rowIndex] ?? 0);\n      rowSumColumnWidths[rowIndex] = (rowSumColumnWidths[rowIndex] ?? 0) + column.columnWidth;\n      markerLabel.translationX = x;\n      markerLabel.translationY = y;\n    });\n    this.updateItemProxyButtons();\n  }\n  updatePageNumber(pageNumber) {\n    const { pages } = this;\n    const { startIndex, endIndex } = pages[pageNumber];\n    if (startIndex === 0) {\n      this.paginationTrackingIndex = 0;\n    } else if (pageNumber === pages.length - 1) {\n      this.paginationTrackingIndex = endIndex;\n    } else {\n      this.paginationTrackingIndex = Math.floor((startIndex + endIndex) / 2);\n    }\n    this.pagination.update();\n    this.pagination.updateMarkers();\n    this.updatePositions(pageNumber);\n    setElementStyle(this.proxyNextButton, \"cursor\", this.pagination.getCursor(\"next\"));\n    setElementStyle(this.proxyPrevButton, \"cursor\", this.pagination.getCursor(\"previous\"));\n    this.ctx.updateService.update(6 /* SCENE_RENDER */);\n  }\n  update() {\n    const {\n      label: { color }\n    } = this.item;\n    this.itemSelection.each((markerLabel, datum) => {\n      markerLabel.setEnabled(datum.enabled);\n      markerLabel.color = color;\n    });\n    this.updateContextMenu();\n  }\n  updateContextMenu() {\n    const {\n      toggleSeries,\n      ctx: { contextMenuRegistry }\n    } = this;\n    if (toggleSeries) {\n      contextMenuRegistry.hideAction(ID_LEGEND_VISIBILITY);\n      contextMenuRegistry.hideAction(ID_LEGEND_OTHER_SERIES);\n    } else {\n      contextMenuRegistry.showAction(ID_LEGEND_VISIBILITY);\n      contextMenuRegistry.showAction(ID_LEGEND_OTHER_SERIES);\n    }\n  }\n  getLineStyles(datum) {\n    const { stroke, strokeOpacity = 1, strokeWidth, lineDash } = datum.line ?? {};\n    const defaultLineStrokeWidth = Math.min(2, strokeWidth ?? 1);\n    return {\n      stroke,\n      strokeOpacity,\n      strokeWidth: this.item.line.strokeWidth ?? defaultLineStrokeWidth,\n      lineDash\n    };\n  }\n  getMarkerStyles(datum) {\n    const { fill, stroke, strokeOpacity = 1, fillOpacity = 1, strokeWidth } = datum.marker;\n    const defaultLineStrokeWidth = Math.min(2, strokeWidth ?? 1);\n    return {\n      fill,\n      stroke,\n      strokeOpacity,\n      fillOpacity,\n      strokeWidth: this.item.marker.strokeWidth ?? defaultLineStrokeWidth\n    };\n  }\n  computePagedBBox() {\n    const actualBBox = Group.computeChildrenBBox(this.group.children());\n    if (this.pages.length > 1) {\n      const [maxPageWidth, maxPageHeight] = this.maxPageSize;\n      actualBBox.height = Math.max(maxPageHeight, actualBBox.height);\n      actualBBox.width = Math.max(maxPageWidth, actualBBox.width);\n    }\n    return actualBBox;\n  }\n  findNode(params) {\n    const { datum, proxyButton } = this.itemSelection.select((ml) => ml.datum?.itemId === params.itemId)[0] ?? {};\n    if (datum === void 0 || proxyButton === void 0) {\n      throw new Error(`AG Charts - Missing required properties { datum: ${datum}, proxyButton: ${proxyButton} }`);\n    }\n    return { datum, proxyButton };\n  }\n  contextToggleVisibility(params) {\n    const { datum, proxyButton } = this.findNode(params);\n    this.doClick(params.event, datum, proxyButton.button);\n  }\n  contextToggleOtherSeries(params) {\n    this.doDoubleClick(params.event, this.findNode(params).datum);\n  }\n  onContextClick(sourceEvent, node) {\n    const legendItem = node.datum;\n    if (this.preventHidingAll && this.contextMenuDatum?.enabled && this.getVisibleItemCount() <= 1) {\n      this.ctx.contextMenuRegistry.disableAction(ID_LEGEND_VISIBILITY);\n    } else {\n      this.ctx.contextMenuRegistry.enableAction(ID_LEGEND_VISIBILITY);\n    }\n    const { button, offsetX, offsetY } = sourceEvent;\n    const { x: canvasOffsetX, y: canvasOffsetY } = Transformable.toCanvasPoint(node, offsetX, offsetY);\n    const event = {\n      type: \"contextmenu\",\n      sourceEvent,\n      button,\n      offsetX: canvasOffsetX,\n      offsetY: canvasOffsetY,\n      deltaX: 0,\n      deltaY: 0,\n      pageX: NaN,\n      pageY: NaN,\n      preventDefault: () => sourceEvent.preventDefault(),\n      pointerHistory: []\n    };\n    this.ctx.contextMenuRegistry.dispatchContext(\"legend\", event, { legendItem });\n  }\n  onClick(event, datum, proxyButton) {\n    if (this.doClick(event, datum, proxyButton)) {\n      event.preventDefault();\n    }\n  }\n  getVisibleItemCount() {\n    return this.ctx.chartService.series.flatMap((s) => s.getLegendData(\"category\")).filter((d) => d.enabled).length;\n  }\n  doClick(event, datum, proxyButton) {\n    const {\n      listeners: { legendItemClick },\n      ctx: { chartService, highlightManager },\n      preventHidingAll,\n      toggleSeries\n    } = this;\n    if (!datum) {\n      return false;\n    }\n    const { id, itemId, enabled } = datum;\n    const series = chartService.series.find((s) => s.id === id);\n    if (!series) {\n      return false;\n    }\n    let newEnabled = enabled;\n    const clickEvent = new LegendItemEvent(\"click\", newEnabled, itemId, series.id, event);\n    legendItemClick?.(clickEvent);\n    if (clickEvent.defaultPrevented)\n      return true;\n    if (toggleSeries) {\n      newEnabled = !enabled;\n      if (preventHidingAll && !newEnabled) {\n        const numVisibleItems = this.getVisibleItemCount();\n        if (numVisibleItems < 2) {\n          newEnabled = true;\n        }\n      }\n      proxyButton.ariaChecked = newEnabled.toString();\n      this.ctx.chartEventManager.legendItemClick(series, itemId, newEnabled, datum.legendItemName);\n    }\n    if (newEnabled) {\n      highlightManager.updateHighlight(this.id, {\n        series,\n        itemId,\n        datum: void 0\n      });\n    } else {\n      highlightManager.updateHighlight(this.id);\n    }\n    this.ctx.updateService.update(2 /* PROCESS_DATA */, { forceNodeDataRefresh: true });\n    return true;\n  }\n  onDoubleClick(event, datum) {\n    if (this.doDoubleClick(event, datum)) {\n      event.preventDefault();\n    }\n  }\n  doDoubleClick(event, datum) {\n    const {\n      listeners: { legendItemDoubleClick },\n      ctx: { chartService },\n      toggleSeries\n    } = this;\n    if (chartService.mode === \"integrated\") {\n      return false;\n    }\n    if (!datum) {\n      return false;\n    }\n    const { id, itemId, seriesId } = datum;\n    const series = chartService.series.find((s) => s.id === id);\n    if (!series) {\n      return false;\n    }\n    const doubleClickEvent = new LegendItemEvent(\"dblclick\", true, itemId, series.id, event);\n    legendItemDoubleClick?.(doubleClickEvent);\n    if (doubleClickEvent.defaultPrevented)\n      return true;\n    if (toggleSeries) {\n      const legendData = chartService.series.flatMap((s) => s.getLegendData(\"category\"));\n      const numVisibleItems = legendData.filter((d) => d.enabled).length;\n      const clickedItem = legendData.find((d) => d.itemId === itemId && d.seriesId === seriesId);\n      this.ctx.chartEventManager.legendItemDoubleClick(\n        series,\n        itemId,\n        clickedItem?.enabled ?? false,\n        numVisibleItems,\n        clickedItem?.legendItemName\n      );\n    }\n    this.ctx.updateService.update(2 /* PROCESS_DATA */, { forceNodeDataRefresh: true });\n    return true;\n  }\n  toTooltipMeta(event, node) {\n    let lastPointerEvent;\n    if (event instanceof FocusEvent) {\n      const { x, y } = Transformable.toCanvas(node).computeCenter();\n      lastPointerEvent = { type: \"keyboard\", offsetX: x, offsetY: y };\n    } else {\n      event.preventDefault();\n      const { x, y } = Transformable.toCanvasPoint(node, event.offsetX, event.offsetY);\n      lastPointerEvent = { type: \"hover\", offsetX: x, offsetY: y };\n    }\n    const { offsetX, offsetY } = lastPointerEvent;\n    return { offsetX, offsetY, lastPointerEvent, showArrow: false };\n  }\n  onHover(event, node) {\n    if (!this.enabled)\n      throw new Error(\"AG Charts - onHover handler called on disabled legend\");\n    this.pagination.setPage(node.pageIndex);\n    const datum = node.datum;\n    const series = datum ? this.ctx.chartService.series.find((s) => s.id === datum?.id) : void 0;\n    if (datum && this.truncatedItems.has(datum.itemId ?? datum.id)) {\n      const meta = this.toTooltipMeta(event, node);\n      this.ctx.tooltipManager.updateTooltip(this.id, meta, toTooltipHtml({ content: this.getItemLabel(datum) }));\n    } else {\n      this.ctx.tooltipManager.removeTooltip(this.id);\n    }\n    if (datum?.enabled && series) {\n      this.updateHighlight({ series, itemId: datum?.itemId, datum: void 0 });\n    } else {\n      this.updateHighlight();\n    }\n  }\n  onLeave() {\n    this.ctx.tooltipManager.removeTooltip(this.id);\n    this.updateHighlight();\n  }\n  updateHighlight(datum) {\n    const state = this.ctx.interactionManager.getState();\n    if (state === 32 /* Default */) {\n      this.ctx.highlightManager.updateHighlight(this.id, datum);\n    } else if (state === 2 /* Animation */) {\n      this.pendingHighlightDatum = datum;\n      this.ctx.animationManager.onBatchStop(() => {\n        this.ctx.highlightManager.updateHighlight(this.id, this.pendingHighlightDatum);\n      });\n    }\n  }\n  onLocaleChanged() {\n    this.itemSelection.each(({ proxyButton }, _, i) => {\n      if (proxyButton?.button != null) {\n        proxyButton.button.textContent = this.getItemAriaText(i);\n      }\n    });\n    this.proxyLegendItemDescription.textContent = this.getItemAriaDescription();\n  }\n  getItemAriaText(nodeIndex) {\n    const datum = this.data[nodeIndex];\n    const label = datum && this.getItemLabel(datum);\n    const lm = this.ctx.localeManager;\n    if (nodeIndex >= 0 && label) {\n      const index = nodeIndex + 1;\n      const count = this.data.length;\n      return lm.t(\"ariaLabelLegendItem\", { label, index, count });\n    }\n    return lm.t(\"ariaLabelLegendItemUnknown\");\n  }\n  getItemAriaDescription() {\n    return this.ctx.localeManager.t(\"ariaDescriptionLegendItem\");\n  }\n  positionLegend(ctx) {\n    setElementStyle(this.proxyLegendToolbar, \"display\", this.visible && this.enabled ? void 0 : \"none\");\n    if (!this.enabled || !this.data.length)\n      return;\n    const { layoutBox } = ctx;\n    const { x, y, width: width2, height: height2 } = layoutBox;\n    const [legendWidth, legendHeight] = this.calculateLegendDimensions(layoutBox);\n    const { oldPages } = this.calcLayout(legendWidth, legendHeight);\n    const legendBBox = this.computePagedBBox();\n    const calculateTranslationPerpendicularDimension = () => {\n      switch (this.position) {\n        case \"top\":\n        case \"left\":\n          return 0;\n        case \"bottom\":\n          return height2 - legendBBox.height;\n        case \"right\":\n        default:\n          return width2 - legendBBox.width;\n      }\n    };\n    if (this.visible) {\n      const legendPadding = this.spacing;\n      let translationX;\n      let translationY;\n      switch (this.position) {\n        case \"top\":\n        case \"bottom\":\n          translationX = (width2 - legendBBox.width) / 2;\n          translationY = calculateTranslationPerpendicularDimension();\n          layoutBox.shrink(legendBBox.height + legendPadding, this.position);\n          break;\n        case \"left\":\n        case \"right\":\n        default:\n          translationX = calculateTranslationPerpendicularDimension();\n          translationY = (height2 - legendBBox.height) / 2;\n          layoutBox.shrink(legendBBox.width + legendPadding, this.position);\n      }\n      this.group.translationX = Math.floor(x + translationX - legendBBox.x);\n      this.group.translationY = Math.floor(y + translationY - legendBBox.y);\n      this.proxyLegendToolbar.ariaOrientation = this.getOrientation();\n    }\n    this.updateItemProxyButtons();\n    this.updatePaginationProxyButtons(oldPages);\n  }\n  calculateLegendDimensions(shrinkRect) {\n    const { width: width2, height: height2 } = shrinkRect;\n    const aspectRatio = width2 / height2;\n    const maxCoefficient = 0.5;\n    const minHeightCoefficient = 0.2;\n    const minWidthCoefficient = 0.25;\n    let legendWidth, legendHeight;\n    switch (this.position) {\n      case \"top\":\n      case \"bottom\": {\n        const heightCoefficient = aspectRatio < 1 ? Math.min(maxCoefficient, minHeightCoefficient * (1 / aspectRatio)) : minHeightCoefficient;\n        legendWidth = this.maxWidth ? Math.min(this.maxWidth, width2) : width2;\n        legendHeight = this.maxHeight ? Math.min(this.maxHeight, height2) : Math.round(height2 * heightCoefficient);\n        break;\n      }\n      case \"left\":\n      case \"right\":\n      default: {\n        const widthCoefficient = aspectRatio > 1 ? Math.min(maxCoefficient, minWidthCoefficient * aspectRatio) : minWidthCoefficient;\n        legendWidth = this.maxWidth ? Math.min(this.maxWidth, width2) : Math.round(width2 * widthCoefficient);\n        legendHeight = this.maxHeight ? Math.min(this.maxHeight, height2) : height2;\n      }\n    }\n    return [legendWidth, legendHeight];\n  }\n};\nLegend.className = \"Legend\";\n__decorateClass([\n  Validate(BOOLEAN)\n], Legend.prototype, \"toggleSeries\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], Legend.prototype, \"pagination\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], Legend.prototype, \"item\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], Legend.prototype, \"listeners\", 2);\n__decorateClass([\n  ObserveChanges((target) => target.updateGroupVisibility()),\n  Validate(BOOLEAN)\n], Legend.prototype, \"enabled\", 2);\n__decorateClass([\n  ObserveChanges((target) => target.proxyLegendDirty = true),\n  Validate(POSITION)\n], Legend.prototype, \"position\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], Legend.prototype, \"maxWidth\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], Legend.prototype, \"maxHeight\", 2);\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], Legend.prototype, \"reverseOrder\", 2);\n__decorateClass([\n  Validate(UNION([\"horizontal\", \"vertical\"], \"an orientation\"), { optional: true })\n], Legend.prototype, \"orientation\", 2);\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], Legend.prototype, \"preventHidingAll\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Legend.prototype, \"spacing\", 2);\n\n// packages/ag-charts-community/src/chart/legendModule.ts\nvar CommunityLegendModule = {\n  type: \"legend\",\n  optionsKey: \"legend\",\n  identifier: \"category\",\n  chartTypes: [\"cartesian\", \"polar\", \"hierarchy\", \"topology\", \"flow-proportion\", \"standalone\", \"gauge\"],\n  moduleFactory: (ctx) => new Legend(ctx),\n  packageType: \"community\"\n};\n\n// packages/ag-charts-community/src/chart/navigator/shapes/rangeHandle.ts\nvar RangeHandle = class extends Path {\n  constructor() {\n    super(...arguments);\n    this.zIndex = 3;\n    this.centerX = 0;\n    this.centerY = 0;\n    this.width = 8;\n    this.height = 16;\n    this.gripLineGap = 2;\n    this.gripLineLength = 8;\n  }\n  setCenter(x, y) {\n    this.dirtyPath = true;\n    if (this.centerX !== x || this.centerY !== y) {\n      this.centerX = x;\n      this.centerY = y;\n      this.markDirty(3 /* MAJOR */);\n    }\n  }\n  static align(minHandle, maxHandle, x, y, width2, height2, min, max) {\n    const handlePixelAlign = minHandle.strokeWidth / 2;\n    const minHandleX = minHandle.align(x + width2 * min) + handlePixelAlign;\n    const maxHandleX = minHandleX + minHandle.align(x + width2 * min, width2 * (max - min)) - 2 * handlePixelAlign;\n    const handleY = minHandle.align(y + height2 / 2) + handlePixelAlign;\n    minHandle.setCenter(minHandleX, handleY);\n    maxHandle.setCenter(maxHandleX, handleY);\n  }\n  computeBBox() {\n    const { centerX, centerY, width: width2, height: height2 } = this;\n    const x = centerX - width2 / 2;\n    const y = centerY - height2 / 2;\n    return new BBox(x, y, width2, height2);\n  }\n  isPointInPath(x, y) {\n    const bbox = this.getBBox();\n    return bbox.containsPoint(x, y);\n  }\n  updatePath() {\n    const { centerX, centerY, path, strokeWidth, gripLineGap, gripLineLength } = this;\n    const pixelRatio = this.layerManager?.canvas?.pixelRatio ?? 1;\n    path.clear();\n    const halfWidth = Math.floor(this.width / 2 * pixelRatio) / pixelRatio;\n    const halfHeight = Math.floor(this.height / 2 * pixelRatio) / pixelRatio;\n    path.moveTo(centerX - halfWidth, centerY - halfHeight);\n    path.lineTo(centerX + halfWidth, centerY - halfHeight);\n    path.lineTo(centerX + halfWidth, centerY + halfHeight);\n    path.lineTo(centerX - halfWidth, centerY + halfHeight);\n    path.closePath();\n    const dx = Math.floor((gripLineGap + strokeWidth) / 2 * pixelRatio) / pixelRatio;\n    const dy = Math.floor(gripLineLength / 2 * pixelRatio) / pixelRatio;\n    path.moveTo(centerX - dx, centerY - dy);\n    path.lineTo(centerX - dx, centerY + dy);\n    path.moveTo(centerX + dx, centerY - dy);\n    path.lineTo(centerX + dx, centerY + dy);\n  }\n};\nRangeHandle.className = \"RangeHandle\";\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */, type: \"path\" })\n], RangeHandle.prototype, \"width\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */, type: \"path\" })\n], RangeHandle.prototype, \"height\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */, type: \"path\" })\n], RangeHandle.prototype, \"gripLineGap\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */, type: \"path\" })\n], RangeHandle.prototype, \"gripLineLength\", 2);\n\n// packages/ag-charts-community/src/chart/navigator/shapes/rangeMask.ts\nvar RangeMask = class extends Path {\n  constructor() {\n    super(...arguments);\n    this.zIndex = 2;\n    this.x = 0;\n    this.y = 0;\n    this.width = 200;\n    this.height = 30;\n    this.min = 0;\n    this.max = 1;\n  }\n  layout(x, y, width2, height2) {\n    if (x !== this.x || y !== this.y || width2 !== this.width || this.height !== height2) {\n      this.x = x;\n      this.y = y;\n      this.width = width2;\n      this.height = height2;\n      this.dirtyPath = true;\n      this.markDirty(3 /* MAJOR */);\n    }\n  }\n  update(min, max) {\n    min = isNaN(min) ? this.min : min;\n    max = isNaN(max) ? this.max : max;\n    if (min !== this.min || max !== this.max) {\n      this.min = min;\n      this.max = max;\n      this.dirtyPath = true;\n      this.markDirty(3 /* MAJOR */);\n    }\n  }\n  computeBBox() {\n    const { x, y, width: width2, height: height2 } = this;\n    return new BBox(x, y, width2, height2);\n  }\n  computeVisibleRangeBBox() {\n    const { x, y, width: width2, height: height2, min, max } = this;\n    const minX = x + width2 * min;\n    const maxX = x + width2 * max;\n    return new BBox(minX, y, maxX - minX, height2);\n  }\n  updatePath() {\n    const { path, x, y, width: width2, height: height2, min, max, strokeWidth } = this;\n    const pixelAlign = strokeWidth / 2;\n    path.clear();\n    const ax = this.align(x) + pixelAlign;\n    const ay = this.align(y) + pixelAlign;\n    const axw = ax + this.align(x, width2) - 2 * pixelAlign;\n    const ayh = ay + this.align(y, height2) - 2 * pixelAlign;\n    path.moveTo(ax, ay);\n    path.lineTo(axw, ay);\n    path.lineTo(axw, ayh);\n    path.lineTo(ax, ayh);\n    path.closePath();\n    const minX = this.align(x + width2 * min) + pixelAlign;\n    const maxX = minX + this.align(x + width2 * min, width2 * (max - min)) - 2 * pixelAlign;\n    path.moveTo(minX, ay);\n    path.lineTo(minX, ayh);\n    path.lineTo(maxX, ayh);\n    path.lineTo(maxX, ay);\n    path.closePath();\n  }\n};\nRangeMask.className = \"RangeMask\";\n\n// packages/ag-charts-community/src/chart/navigator/shapes/rangeSelector.ts\nvar RangeSelector = class extends Layer {\n  constructor(children) {\n    super({ name: \"rangeSelectorGroup\", zIndex: 16 /* NAVIGATOR */ });\n    this.x = 0;\n    this.y = 0;\n    this.width = 200;\n    this.height = 30;\n    this.lOffset = 0;\n    this.rOffset = 0;\n    this.background = this.appendChild(new TranslatableGroup({ name: \"navigator-background\", zIndex: 1 }));\n    this.append(children);\n  }\n  layout(x, y, width2, height2, lOffset, rOffset) {\n    this.x = x;\n    this.y = y;\n    this.width = width2;\n    this.height = height2;\n    this.lOffset = lOffset;\n    this.rOffset = rOffset;\n    this.background.translationX = x;\n    this.background.translationY = y;\n    this.markDirty(3 /* MAJOR */);\n  }\n  updateBackground(oldGroup, newGroup) {\n    if (oldGroup != null) {\n      this.background.removeChild(oldGroup);\n    }\n    if (newGroup != null) {\n      this.background.appendChild(newGroup);\n    }\n    this.markDirty(3 /* MAJOR */);\n  }\n  computeBBox() {\n    const { x, y, width: width2, height: height2, lOffset, rOffset } = this;\n    return new BBox(x - lOffset, y, width2 + (lOffset + rOffset), height2);\n  }\n};\n\n// packages/ag-charts-community/src/chart/navigator/navigator.ts\nvar Navigator = class extends BaseModuleInstance {\n  constructor(ctx) {\n    super();\n    this.ctx = ctx;\n    this.miniChart = void 0;\n    this.enabled = false;\n    this.mask = new RangeMask();\n    this.minHandle = new RangeHandle();\n    this.maxHandle = new RangeHandle();\n    this.maskVisibleRange = {\n      id: \"navigator-mask-visible-range\",\n      getBBox: () => this.mask.computeVisibleRangeBBox(),\n      toCanvasBBox: () => this.mask.computeVisibleRangeBBox(),\n      fromCanvasPoint: (x, y) => ({ x, y })\n    };\n    this.height = 30;\n    this.spacing = 10;\n    this.x = 0;\n    this.y = 0;\n    this.width = 0;\n    this.rangeSelector = new RangeSelector([this.mask, this.minHandle, this.maxHandle]);\n    this._min = 0;\n    this._max = 1;\n    this.minRange = 1e-3;\n    const region = ctx.regionManager.addRegion(\"navigator\", this.rangeSelector);\n    const dragStates = 32 /* Default */ | 2 /* Animation */ | 16 /* ZoomDrag */;\n    this.destroyFns.push(\n      ctx.scene.attachNode(this.rangeSelector),\n      region.addListener(\"hover\", (event) => this.onHover(event), dragStates),\n      region.addListener(\"drag-start\", (event) => this.onDragStart(event), dragStates),\n      region.addListener(\"drag\", (event) => this.onDrag(event), dragStates),\n      region.addListener(\"drag-end\", (event) => this.onDragEnd(event), dragStates),\n      region.addListener(\"leave\", (event) => this.onLeave(event), dragStates),\n      this.ctx.localeManager.addListener(\"locale-changed\", () => this.updateZoom()),\n      this.ctx.layoutManager.registerElement(3 /* Navigator */, (e) => this.onLayoutStart(e)),\n      this.ctx.layoutManager.addListener(\"layout:complete\", (e) => this.onLayoutComplete(e)),\n      ctx.zoomManager.addListener(\"zoom-change\", (event) => this.onZoomChange(event))\n    );\n    this.proxyNavigatorToolbar = this.ctx.proxyInteractionService.createProxyContainer({\n      type: \"toolbar\",\n      id: `navigator-toolbar`,\n      classList: [\"ag-charts-proxy-navigator-toolbar\"],\n      ariaOrientation: \"vertical\",\n      ariaLabel: { id: \"ariaLabelNavigator\" }\n    });\n    this.updateGroupVisibility();\n    this.proxyNavigatorElements = [\n      this.ctx.proxyInteractionService.createProxyElement({\n        type: \"slider\",\n        id: \"ag-charts-navigator-min\",\n        ariaLabel: { id: \"ariaLabelNavigatorMinimum\" },\n        ariaOrientation: \"horizontal\",\n        parent: this.proxyNavigatorToolbar,\n        onchange: (ev) => this.onMinSliderChange(ev)\n      }),\n      this.ctx.proxyInteractionService.createProxyElement({\n        type: \"slider\",\n        id: \"ag-charts-navigator-pan\",\n        ariaLabel: { id: \"ariaLabelNavigatorRange\" },\n        ariaOrientation: \"horizontal\",\n        parent: this.proxyNavigatorToolbar,\n        onchange: (ev) => this.onPanSliderChange(ev)\n      }),\n      this.ctx.proxyInteractionService.createProxyElement({\n        type: \"slider\",\n        id: \"ag-charts-navigator-max\",\n        ariaLabel: { id: \"ariaLabelNavigatorMaximum\" },\n        ariaOrientation: \"horizontal\",\n        parent: this.proxyNavigatorToolbar,\n        onchange: (ev) => this.onMaxSliderChange(ev)\n      })\n    ];\n    this.proxyNavigatorElements.forEach((slider) => setAttribute(slider, \"data-preventdefault\", false));\n    this.setSliderRatio(this.proxyNavigatorElements[0], this._min);\n    this.setSliderRatio(this.proxyNavigatorElements[2], this._max);\n    this.setPanSliderValue(this._min, this._max);\n    initToolbarKeyNav({\n      orientation: \"vertical\",\n      toolbar: this.proxyNavigatorToolbar,\n      buttons: this.proxyNavigatorElements\n    });\n    this.destroyFns.push(() => {\n      this.proxyNavigatorElements.forEach((e) => e.remove());\n      this.proxyNavigatorToolbar.remove();\n    });\n  }\n  updateBackground(oldGroup, newGroup) {\n    this.rangeSelector?.updateBackground(oldGroup, newGroup);\n  }\n  updateGroupVisibility() {\n    const { enabled } = this;\n    if (this.rangeSelector == null || enabled === this.rangeSelector.visible)\n      return;\n    this.rangeSelector.visible = enabled;\n    this.proxyNavigatorToolbar.ariaHidden = (!enabled).toString();\n    if (enabled) {\n      this.updateZoom();\n    } else {\n      this.ctx.zoomManager.updateZoom(\"navigator\");\n    }\n  }\n  onLayoutStart(ctx) {\n    if (this.enabled) {\n      const { layoutBox } = ctx;\n      const navigatorTotalHeight = this.height + this.spacing;\n      layoutBox.shrink(navigatorTotalHeight, \"bottom\");\n      this.y = layoutBox.y + layoutBox.height + this.spacing;\n    } else {\n      this.y = 0;\n    }\n  }\n  onLayoutComplete(opts) {\n    const { x, width: width2 } = opts.series.rect;\n    if (this.enabled) {\n      const { y, height: height2 } = this;\n      this.layoutNodes(x, y, width2, height2);\n      setElementBBox(this.proxyNavigatorToolbar, { x, y, width: width2, height: height2 });\n      this.proxyNavigatorToolbar.style.removeProperty(\"display\");\n    } else {\n      this.proxyNavigatorToolbar.style.display = \"none\";\n    }\n    this.x = x;\n    this.width = width2;\n  }\n  onHover(event) {\n    if (!this.enabled)\n      return;\n    this.updateCursor(event);\n  }\n  updateCursor(event) {\n    if (!this.enabled)\n      return;\n    const { mask, minHandle, maxHandle } = this;\n    const { regionOffsetX, regionOffsetY } = event;\n    if (minHandle.containsPoint(regionOffsetX, regionOffsetY) || maxHandle.containsPoint(regionOffsetX, regionOffsetY)) {\n      this.ctx.cursorManager.updateCursor(\"navigator\", \"ew-resize\");\n    } else if (mask.computeVisibleRangeBBox().containsPoint(regionOffsetX, regionOffsetY)) {\n      this.ctx.cursorManager.updateCursor(\"navigator\", \"grab\");\n    } else {\n      this.ctx.cursorManager.updateCursor(\"navigator\");\n    }\n  }\n  onDragStart(event) {\n    if (!this.enabled)\n      return;\n    this.updateCursor(event);\n    const { mask, minHandle, maxHandle, x, width: width2, _min: min } = this;\n    const { regionOffsetX, regionOffsetY } = event;\n    if (minHandle.zIndex < maxHandle.zIndex) {\n      if (maxHandle.containsPoint(regionOffsetX, regionOffsetY)) {\n        this.dragging = \"max\";\n      } else if (minHandle.containsPoint(regionOffsetX, regionOffsetY)) {\n        this.dragging = \"min\";\n      }\n    } else if (minHandle.containsPoint(regionOffsetX, regionOffsetY)) {\n      this.dragging = \"min\";\n    } else if (maxHandle.containsPoint(regionOffsetX, regionOffsetY)) {\n      this.dragging = \"max\";\n    }\n    if (this.dragging == null && mask.computeVisibleRangeBBox().containsPoint(regionOffsetX, regionOffsetY)) {\n      this.dragging = \"pan\";\n      this.panStart = (regionOffsetX - x) / width2 - min;\n    }\n    if (this.dragging != null) {\n      this.ctx.zoomManager.fireZoomPanStartEvent(\"navigator\");\n    }\n  }\n  onDrag(event) {\n    if (!this.enabled || this.dragging == null)\n      return;\n    const { dragging, minRange, panStart, x, width: width2 } = this;\n    let { _min: min, _max: max } = this;\n    const { regionOffsetX } = event;\n    const ratio2 = (regionOffsetX - x) / width2;\n    if (dragging === \"min\") {\n      min = clamp(0, ratio2, max - minRange);\n    } else if (dragging === \"max\") {\n      max = clamp(min + minRange, ratio2, 1);\n    } else if (dragging === \"pan\" && panStart != null) {\n      const span = max - min;\n      min = clamp(0, ratio2 - panStart, 1 - span);\n      max = min + span;\n    }\n    this._min = min;\n    this._max = max;\n    this.updateZoom();\n  }\n  onDragEnd(event) {\n    this.dragging = void 0;\n    this.updateCursor(event);\n  }\n  onLeave(_event) {\n    this.ctx.cursorManager.updateCursor(\"navigator\");\n  }\n  onZoomChange(event) {\n    const { x } = event;\n    if (!x)\n      return;\n    this._min = x.min;\n    this._max = x.max;\n    this.updateNodes(x.min, x.max);\n    this.setPanSliderValue(x.min, x.max);\n    this.setSliderRatio(this.proxyNavigatorElements[0], x.min);\n    this.setSliderRatio(this.proxyNavigatorElements[2], x.max);\n  }\n  onPanSliderChange(_event) {\n    const ratio2 = this.getSliderRatio(this.proxyNavigatorElements[1]);\n    const span = this._max - this._min;\n    this._min = clamp(0, ratio2, 1 - span);\n    this._max = this._min + span;\n    this.updateZoom();\n  }\n  onMinSliderChange(_event) {\n    const slider = this.proxyNavigatorElements[0];\n    this._min = this.setSliderRatioClamped(slider, 0, this._max - this.minRange);\n    this.updateZoom();\n  }\n  onMaxSliderChange(_event) {\n    const slider = this.proxyNavigatorElements[2];\n    this._max = this.setSliderRatioClamped(slider, this._min + this.minRange, 1);\n    this.updateZoom();\n  }\n  setPanSliderValue(min, max) {\n    this.proxyNavigatorElements[1].value = `${Math.round(min * 100)}`;\n    this.proxyNavigatorElements[1].ariaValueText = this.ctx.localeManager.t(\"ariaValuePanRange\", { min, max });\n  }\n  setSliderRatioClamped(slider, clampMin, clampMax) {\n    const ratio2 = this.getSliderRatio(slider);\n    const clampedRatio = clamp(clampMin, ratio2, clampMax);\n    if (clampedRatio !== ratio2) {\n      this.setSliderRatio(slider, clampedRatio);\n    }\n    return clampedRatio;\n  }\n  setSliderRatio(slider, ratio2) {\n    const value = Math.round(ratio2 * 100);\n    slider.value = `${value}`;\n    slider.ariaValueText = formatPercentage(value);\n  }\n  getSliderRatio(slider) {\n    return parseFloat(slider.value) / 100;\n  }\n  layoutNodes(x, y, width2, height2) {\n    const { rangeSelector, mask, minHandle, maxHandle, _min: min, _max: max } = this;\n    rangeSelector.layout(x, y, width2, height2, minHandle.width / 2, maxHandle.width / 2);\n    mask.layout(x, y, width2, height2);\n    RangeHandle.align(minHandle, maxHandle, x, y, width2, height2, min, max);\n    if (min + (max - min) / 2 < 0.5) {\n      minHandle.zIndex = 3;\n      maxHandle.zIndex = 4;\n    } else {\n      minHandle.zIndex = 4;\n      maxHandle.zIndex = 3;\n    }\n    [minHandle, this.maskVisibleRange, maxHandle].forEach((node, index) => {\n      const bbox = node.getBBox();\n      const tbox = { x: bbox.x - x, y: bbox.y - y, height: bbox.height, width: bbox.width };\n      setElementBBox(this.proxyNavigatorElements[index], tbox);\n    });\n  }\n  updateNodes(min, max) {\n    this.mask.update(min, max);\n  }\n  updateZoom() {\n    if (!this.enabled)\n      return;\n    const { _min: min, _max: max } = this;\n    if (min == null || max == null)\n      return;\n    const warnOnConflict = (stateId) => {\n      if (this.min == null && this.max == null)\n        return;\n      Logger.warnOnce(\n        `Could not apply [navigator.min] or [navigator.max] as [${stateId}] has modified the initial zoom state.`\n      );\n    };\n    return this.ctx.zoomManager.updateZoom(\"navigator\", { x: { min, max } }, false, warnOnConflict);\n  }\n};\n__decorateClass([\n  Validate(OBJECT, { optional: true })\n], Navigator.prototype, \"miniChart\", 2);\n__decorateClass([\n  Validate(BOOLEAN),\n  ObserveChanges((target) => target.updateGroupVisibility())\n], Navigator.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Navigator.prototype, \"height\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], Navigator.prototype, \"spacing\", 2);\n__decorateClass([\n  ActionOnSet({\n    newValue(min) {\n      this._min = min;\n      this.updateZoom();\n    }\n  }),\n  Validate(AND(RATIO, LESS_THAN(\"max\")), { optional: true })\n], Navigator.prototype, \"min\", 2);\n__decorateClass([\n  ActionOnSet({\n    newValue(max) {\n      this._max = max;\n      this.updateZoom();\n    }\n  }),\n  Validate(AND(RATIO, GREATER_THAN(\"min\")), { optional: true })\n], Navigator.prototype, \"max\", 2);\n\n// packages/ag-charts-community/src/chart/navigator/navigatorModule.ts\nvar NavigatorModule = {\n  type: \"root\",\n  optionsKey: \"navigator\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\"],\n  moduleFactory: (ctx) => new Navigator(ctx),\n  themeTemplate: {\n    navigator: {\n      enabled: false,\n      height: 30,\n      mask: {\n        fill: \"#999999\",\n        stroke: \"#999999\",\n        strokeWidth: 1,\n        fillOpacity: 0.2\n      },\n      minHandle: {\n        fill: \"#f2f2f2\",\n        stroke: \"#999999\",\n        strokeWidth: 1,\n        width: 9,\n        height: 16,\n        gripLineGap: 1,\n        gripLineLength: 8\n      },\n      maxHandle: {\n        fill: \"#f2f2f2\",\n        stroke: \"#999999\",\n        strokeWidth: 1,\n        width: 9,\n        height: 16,\n        gripLineGap: 1,\n        gripLineLength: 8\n      }\n    }\n  }\n};\n\n// packages/ag-charts-community/src/module/theme.ts\nfunction singleSeriesPaletteFactory({ takeColors }) {\n  const {\n    fills: [fill],\n    strokes: [stroke]\n  } = takeColors(1);\n  return { fill, stroke };\n}\nfunction markerPaletteFactory(params) {\n  return { marker: singleSeriesPaletteFactory(params) };\n}\n\n// packages/ag-charts-community/src/chart/themes/constants.ts\nvar FONT_SIZE = /* @__PURE__ */ ((FONT_SIZE2) => {\n  FONT_SIZE2[FONT_SIZE2[\"SMALL\"] = 12] = \"SMALL\";\n  FONT_SIZE2[FONT_SIZE2[\"MEDIUM\"] = 13] = \"MEDIUM\";\n  FONT_SIZE2[FONT_SIZE2[\"LARGE\"] = 17] = \"LARGE\";\n  return FONT_SIZE2;\n})(FONT_SIZE || {});\nvar FONT_WEIGHT2 = /* @__PURE__ */ ((FONT_WEIGHT3) => {\n  FONT_WEIGHT3[\"NORMAL\"] = \"normal\";\n  FONT_WEIGHT3[\"BOLD\"] = \"bold\";\n  FONT_WEIGHT3[\"BOLDER\"] = \"bolder\";\n  FONT_WEIGHT3[\"LIGHTER\"] = \"lighter\";\n  return FONT_WEIGHT3;\n})(FONT_WEIGHT2 || {});\nvar CARTESIAN_POSITION = /* @__PURE__ */ ((CARTESIAN_POSITION2) => {\n  CARTESIAN_POSITION2[\"TOP\"] = \"top\";\n  CARTESIAN_POSITION2[\"RIGHT\"] = \"right\";\n  CARTESIAN_POSITION2[\"BOTTOM\"] = \"bottom\";\n  CARTESIAN_POSITION2[\"LEFT\"] = \"left\";\n  return CARTESIAN_POSITION2;\n})(CARTESIAN_POSITION || {});\nvar CARTESIAN_AXIS_TYPE = /* @__PURE__ */ ((CARTESIAN_AXIS_TYPE2) => {\n  CARTESIAN_AXIS_TYPE2[\"CATEGORY\"] = \"category\";\n  CARTESIAN_AXIS_TYPE2[\"ORDINAL_TIME\"] = \"ordinal-time\";\n  CARTESIAN_AXIS_TYPE2[\"NUMBER\"] = \"number\";\n  CARTESIAN_AXIS_TYPE2[\"TIME\"] = \"time\";\n  CARTESIAN_AXIS_TYPE2[\"LOG\"] = \"log\";\n  return CARTESIAN_AXIS_TYPE2;\n})(CARTESIAN_AXIS_TYPE || {});\nvar POLAR_AXIS_TYPE = /* @__PURE__ */ ((POLAR_AXIS_TYPE2) => {\n  POLAR_AXIS_TYPE2[\"ANGLE_CATEGORY\"] = \"angle-category\";\n  POLAR_AXIS_TYPE2[\"ANGLE_NUMBER\"] = \"angle-number\";\n  POLAR_AXIS_TYPE2[\"RADIUS_CATEGORY\"] = \"radius-category\";\n  POLAR_AXIS_TYPE2[\"RADIUS_NUMBER\"] = \"radius-number\";\n  return POLAR_AXIS_TYPE2;\n})(POLAR_AXIS_TYPE || {});\nvar POLAR_AXIS_SHAPE = /* @__PURE__ */ ((POLAR_AXIS_SHAPE2) => {\n  POLAR_AXIS_SHAPE2[\"CIRCLE\"] = \"circle\";\n  POLAR_AXIS_SHAPE2[\"POLYGON\"] = \"polygon\";\n  return POLAR_AXIS_SHAPE2;\n})(POLAR_AXIS_SHAPE || {});\n\n// packages/ag-charts-community/src/chart/themes/symbols.ts\nvar IS_DARK_THEME = Symbol(\"is-dark-theme\");\nvar IS_COMMUNITY = Symbol(\"is-community\");\nvar IS_ENTERPRISE = Symbol(\"is-enterprise\");\nvar DEFAULT_FONT_FAMILY = Symbol(\"default-font\");\nvar DEFAULT_LABEL_COLOUR = Symbol(\"default-label-colour\");\nvar DEFAULT_INVERTED_LABEL_COLOUR = Symbol(\"default-inverted-label-colour\");\nvar DEFAULT_INSIDE_SERIES_LABEL_COLOUR = Symbol(\"default-inside-series-label-colour\");\nvar DEFAULT_MUTED_LABEL_COLOUR = Symbol(\"default-muted-label-colour\");\nvar DEFAULT_AXIS_GRID_COLOUR = Symbol(\"default-axis-grid-colour\");\nvar DEFAULT_AXIS_LINE_COLOUR = Symbol(\"default-axis-line-colour\");\nvar DEFAULT_CROSS_LINES_COLOUR = Symbol(\"default-cross-lines-colour\");\nvar DEFAULT_BACKGROUND_COLOUR = Symbol(\"default-background-colour\");\nvar DEFAULT_SHADOW_COLOUR = Symbol(\"default-shadow-colour\");\nvar DEFAULT_COLOURS = Symbol(\"default-colours\");\nvar DEFAULT_PADDING = Symbol(\"default-padding\");\nvar DEFAULT_CAPTION_LAYOUT_STYLE = Symbol(\"default-caption-layout-style\");\nvar DEFAULT_CAPTION_ALIGNMENT = Symbol(\"default-caption-alignment\");\nvar PALETTE_UP_STROKE = Symbol(\"palette-up-stroke\");\nvar PALETTE_DOWN_STROKE = Symbol(\"palette-down-stroke\");\nvar PALETTE_UP_FILL = Symbol(\"palette-up-fill\");\nvar PALETTE_DOWN_FILL = Symbol(\"palette-down-fill\");\nvar PALETTE_NEUTRAL_STROKE = Symbol(\"palette-neutral-stroke\");\nvar PALETTE_NEUTRAL_FILL = Symbol(\"palette-neutral-fill\");\nvar PALETTE_ALT_UP_STROKE = Symbol(\"palette-alt-up-stroke\");\nvar PALETTE_ALT_DOWN_STROKE = Symbol(\"palette-alt-down-stroke\");\nvar PALETTE_ALT_UP_FILL = Symbol(\"palette-alt-up-fill\");\nvar PALETTE_ALT_DOWN_FILL = Symbol(\"palette-alt-down-fill\");\nvar PALETTE_ALT_NEUTRAL_FILL = Symbol(\"palette-gray-fill\");\nvar PALETTE_ALT_NEUTRAL_STROKE = Symbol(\"palette-gray-stroke\");\nvar DEFAULT_POLAR_SERIES_STROKE = Symbol(\"default-polar-series-stroke\");\nvar DEFAULT_DIVERGING_SERIES_COLOR_RANGE = Symbol(\n  \"default-diverging-series-colour-range\"\n);\nvar DEFAULT_GAUGE_SERIES_COLOR_RANGE = Symbol(\"default-gauge-series-colour-range\");\nvar DEFAULT_FUNNEL_SERIES_COLOR_RANGE = Symbol(\"default-funnel-series-colour-range\");\nvar DEFAULT_HIERARCHY_FILLS = Symbol(\"default-hierarchy-fills\");\nvar DEFAULT_HIERARCHY_STROKES = Symbol(\"default-hierarchy-strokes\");\nvar DEFAULT_ANNOTATION_COLOR = Symbol(\"default-annotation-stroke\");\nvar DEFAULT_TEXT_ANNOTATION_COLOR = Symbol(\"default-text-annotation-color\");\nvar DEFAULT_ANNOTATION_BACKGROUND_FILL = Symbol(\"default-annotation-background-fill\");\nvar DEFAULT_ANNOTATION_HANDLE_FILL = Symbol(\"default-annotation-handle-fill\");\nvar DEFAULT_ANNOTATION_STATISTICS_FILL = Symbol(\"default-annotation-statistics-fill\");\nvar DEFAULT_ANNOTATION_STATISTICS_STROKE = Symbol(\"default-annotation-statistics-stroke\");\nvar DEFAULT_ANNOTATION_STATISTICS_COLOR = Symbol(\"default-annotation-statistics-color\");\nvar DEFAULT_ANNOTATION_STATISTICS_DIVIDER_STROKE = Symbol(\n  \"default-annotation-statistics-divider-stroke\"\n);\nvar DEFAULT_ANNOTATION_STATISTICS_DOWN_FILL = Symbol(\n  \"default-annotation-statistics-fill\"\n);\nvar DEFAULT_ANNOTATION_STATISTICS_DOWN_STROKE = Symbol(\n  \"default-annotation-statistics-stroke\"\n);\nvar DEFAULT_TEXTBOX_FILL = Symbol(\"default-textbox-fill\");\nvar DEFAULT_TEXTBOX_STROKE = Symbol(\"default-textbox-stroke\");\nvar DEFAULT_TEXTBOX_COLOR = Symbol(\"default-textbox-color\");\nvar DEFAULT_TOOLBAR_POSITION = Symbol(\"default-toolbar-position\");\nvar DEFAULT_GRIDLINE_ENABLED = Symbol(\"default-gridline-enabled\");\n\n// packages/ag-charts-community/src/motion/pathMotion.ts\nfunction pathMotion(groupId, subId, animationManager, paths, fns) {\n  const { addPhaseFn, updatePhaseFn, removePhaseFn } = fns;\n  const animate = (phase, path, updateFn) => {\n    animationManager.animate({\n      id: `${groupId}_${subId}_${path.id}_${phase}`,\n      groupId,\n      from: 0,\n      to: 1,\n      ease: easeOut,\n      collapsable: false,\n      onUpdate(ratio2, preInit) {\n        if (preInit && phase !== \"removed\")\n          return;\n        path.path.clear(true);\n        updateFn(ratio2, path);\n        path.checkPathDirty();\n      },\n      onStop() {\n        if (phase !== \"added\")\n          return;\n        path.path.clear(true);\n        updateFn(1, path);\n        path.checkPathDirty();\n      },\n      phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[phase]\n    });\n  };\n  for (const path of paths) {\n    if (!animationManager.isSkipped()) {\n      animate(\"removed\", path, removePhaseFn);\n      animate(\"updated\", path, updatePhaseFn);\n    }\n    animate(\"added\", path, addPhaseFn);\n  }\n}\n\n// packages/ag-charts-community/src/util/format.util.ts\nfunction formatValue(value) {\n  if (typeof value === \"number\") {\n    return value.toFixed(2);\n  }\n  return String(value ?? \"\");\n}\n\n// packages/ag-charts-community/src/util/sanitize.ts\nvar element = null;\nfunction sanitizeHtml(text) {\n  if (text == null) {\n    return;\n  } else if (text === \"\") {\n    return \"\";\n  }\n  element ?? (element = createElement(\"div\"));\n  element.textContent = String(text);\n  return element.innerHTML;\n}\n\n// packages/ag-charts-community/src/util/memo.ts\nvar memorizedFns = /* @__PURE__ */ new WeakMap();\nfunction memo(params, fnGenerator) {\n  const serialisedParams = JSON.stringify(params, null, 0);\n  if (!memorizedFns.has(fnGenerator)) {\n    memorizedFns.set(fnGenerator, /* @__PURE__ */ new Map());\n  }\n  if (!memorizedFns.get(fnGenerator)?.has(serialisedParams)) {\n    memorizedFns.get(fnGenerator)?.set(serialisedParams, fnGenerator(params));\n  }\n  return memorizedFns.get(fnGenerator)?.get(serialisedParams);\n}\n\n// packages/ag-charts-community/src/chart/data/aggregateFunctions.ts\nfunction sumValues(values, accumulator = [0, 0]) {\n  for (const value of values) {\n    if (typeof value !== \"number\") {\n      continue;\n    }\n    if (value < 0) {\n      accumulator[0] += value;\n    }\n    if (value > 0) {\n      accumulator[1] += value;\n    }\n  }\n  return accumulator;\n}\nfunction sum(id, matchGroupId) {\n  const result = {\n    id,\n    matchGroupIds: [matchGroupId],\n    type: \"aggregate\",\n    aggregateFunction: (values) => sumValues(values)\n  };\n  return result;\n}\nfunction groupSum(id, matchGroupId) {\n  return {\n    id,\n    type: \"aggregate\",\n    matchGroupIds: matchGroupId ? [matchGroupId] : void 0,\n    aggregateFunction: (values) => sumValues(values),\n    groupAggregateFunction: (next, acc = [0, 0]) => {\n      acc[0] += next?.[0] ?? 0;\n      acc[1] += next?.[1] ?? 0;\n      return acc;\n    }\n  };\n}\nfunction range2(id, matchGroupId) {\n  const result = {\n    id,\n    matchGroupIds: [matchGroupId],\n    type: \"aggregate\",\n    aggregateFunction: (values) => ContinuousDomain.extendDomain(values)\n  };\n  return result;\n}\nfunction groupCount(id) {\n  return {\n    id,\n    type: \"aggregate\",\n    aggregateFunction: () => [0, 1],\n    groupAggregateFunction: (next, acc = [0, 0]) => {\n      acc[0] += next?.[0] ?? 0;\n      acc[1] += next?.[1] ?? 0;\n      return acc;\n    }\n  };\n}\nfunction groupAverage(id, matchGroupId) {\n  const def = {\n    id,\n    matchGroupIds: matchGroupId ? [matchGroupId] : void 0,\n    type: \"aggregate\",\n    aggregateFunction: (values) => sumValues(values),\n    groupAggregateFunction: (next, acc = [0, 0, -1]) => {\n      acc[0] += next?.[0] ?? 0;\n      acc[1] += next?.[1] ?? 0;\n      acc[2]++;\n      return acc;\n    },\n    finalFunction: (acc = [0, 0, 0]) => {\n      const result = acc[0] + acc[1];\n      if (result >= 0) {\n        return [0, result / acc[2]];\n      }\n      return [result / acc[2], 0];\n    }\n  };\n  return def;\n}\nfunction area(id, aggFn, matchGroupId) {\n  const result = {\n    id,\n    matchGroupIds: matchGroupId ? [matchGroupId] : void 0,\n    type: \"aggregate\",\n    aggregateFunction: (values, keyRange = []) => {\n      const keyWidth = keyRange[1] - keyRange[0];\n      return aggFn.aggregateFunction(values).map((v) => v / keyWidth);\n    }\n  };\n  if (aggFn.groupAggregateFunction) {\n    result.groupAggregateFunction = aggFn.groupAggregateFunction;\n  }\n  return result;\n}\nfunction accumulatedValue(onlyPositive) {\n  return () => {\n    let value = 0;\n    return (datum) => {\n      if (!isFiniteNumber(datum)) {\n        return datum;\n      }\n      value += onlyPositive ? Math.max(0, datum) : datum;\n      return value;\n    };\n  };\n}\nfunction trailingAccumulatedValue() {\n  return () => {\n    let value = 0;\n    return (datum) => {\n      if (!isFiniteNumber(datum)) {\n        return datum;\n      }\n      const trailingValue = value;\n      value += datum;\n      return trailingValue;\n    };\n  };\n}\n\n// packages/ag-charts-community/src/chart/data/processors.ts\nfunction basicContinuousCheckDatumValidation(value) {\n  return value != null && isContinuous(value);\n}\nfunction basicDiscreteCheckDatumValidation(value) {\n  return value != null;\n}\nfunction getValidationFn(scaleType) {\n  switch (scaleType) {\n    case \"number\":\n    case \"log\":\n    case \"ordinal-time\":\n    case \"time\":\n    case \"color\":\n      return basicContinuousCheckDatumValidation;\n    default:\n      return basicDiscreteCheckDatumValidation;\n  }\n}\nfunction getValueType(scaleType) {\n  switch (scaleType) {\n    case \"number\":\n    case \"log\":\n    case \"time\":\n    case \"color\":\n      return \"range\";\n    default:\n      return \"category\";\n  }\n}\nfunction keyProperty(propName, scaleType, opts = {}) {\n  const result = {\n    property: propName,\n    type: \"key\",\n    valueType: getValueType(scaleType),\n    validation: getValidationFn(scaleType),\n    ...opts\n  };\n  return result;\n}\nfunction valueProperty(propName, scaleType, opts = {}) {\n  const result = {\n    property: propName,\n    type: \"value\",\n    valueType: getValueType(scaleType),\n    validation: getValidationFn(scaleType),\n    ...opts\n  };\n  return result;\n}\nfunction rangedValueProperty(propName, opts = {}) {\n  const { min = -Infinity, max = Infinity, ...defOpts } = opts;\n  return {\n    type: \"value\",\n    property: propName,\n    valueType: \"range\",\n    validation: basicContinuousCheckDatumValidation,\n    processor: () => (datum) => isFiniteNumber(datum) ? clamp(min, datum, max) : datum,\n    ...defOpts\n  };\n}\nfunction accumulativeValueProperty(propName, scaleType, opts = {}) {\n  const { onlyPositive, ...defOpts } = opts;\n  const result = {\n    ...valueProperty(propName, scaleType, defOpts),\n    processor: accumulatedValue(onlyPositive)\n  };\n  return result;\n}\nfunction trailingAccumulatedValueProperty(propName, scaleType, opts = {}) {\n  const result = {\n    ...valueProperty(propName, scaleType, opts),\n    processor: trailingAccumulatedValue()\n  };\n  return result;\n}\nfunction groupAccumulativeValueProperty(propName, mode, sum2 = \"current\", opts, scaleType) {\n  return [\n    valueProperty(propName, scaleType, opts),\n    accumulateGroup(opts.groupId, mode, sum2, opts.separateNegative),\n    ...opts.rangeId != null ? [range2(opts.rangeId, opts.groupId)] : []\n  ];\n}\nfunction groupStackValueProperty(propName, scaleType, opts) {\n  return [valueProperty(propName, scaleType, opts), accumulateStack(opts.groupId)];\n}\nvar SMALLEST_KEY_INTERVAL = {\n  type: \"reducer\",\n  property: \"smallestKeyInterval\",\n  initialValue: Infinity,\n  reducer: () => {\n    let prevX = NaN;\n    return (smallestSoFar = Infinity, next) => {\n      const nextX = next.keys[0];\n      const interval = Math.abs(nextX - prevX);\n      prevX = nextX;\n      if (!isNaN(interval) && interval > 0 && interval < smallestSoFar) {\n        return interval;\n      }\n      return smallestSoFar;\n    };\n  }\n};\nvar LARGEST_KEY_INTERVAL = {\n  type: \"reducer\",\n  property: \"largestKeyInterval\",\n  initialValue: -Infinity,\n  reducer: () => {\n    let prevX = NaN;\n    return (largestSoFar = -Infinity, next) => {\n      const nextX = next.keys[0];\n      const interval = Math.abs(nextX - prevX);\n      prevX = nextX;\n      if (!isNaN(interval) && interval > 0 && interval > largestSoFar) {\n        return interval;\n      }\n      return largestSoFar;\n    };\n  }\n};\nvar SORT_DOMAIN_GROUPS = {\n  type: \"processor\",\n  property: \"sortedGroupDomain\",\n  calculate: ({ domain: { groups } }) => groups?.slice().sort((a, b) => {\n    for (let i = 0; i < a.length; i++) {\n      const result = a[i] - b[i];\n      if (result !== 0) {\n        return result;\n      }\n    }\n    return 0;\n  })\n};\nfunction normaliseFnBuilder({ normaliseTo, mode }) {\n  const normalise = (val, extent2) => {\n    const result = val * normaliseTo / extent2;\n    if (result >= 0) {\n      return Math.min(normaliseTo, result);\n    }\n    return Math.max(-normaliseTo, result);\n  };\n  return () => () => (values, valueIndexes) => {\n    const valuesExtent = [0, 0];\n    for (const valueIdx of valueIndexes) {\n      const value = values[valueIdx];\n      const valueExtent = typeof value === \"number\" ? value : Math.max(...value);\n      const valIdx = valueExtent < 0 ? 0 : 1;\n      if (mode === \"sum\") {\n        valuesExtent[valIdx] += valueExtent;\n      } else if (valIdx === 0) {\n        valuesExtent[valIdx] = Math.min(valuesExtent[valIdx], valueExtent);\n      } else {\n        valuesExtent[valIdx] = Math.max(valuesExtent[valIdx], valueExtent);\n      }\n    }\n    const extent2 = Math.max(Math.abs(valuesExtent[0]), valuesExtent[1]);\n    for (const valueIdx of valueIndexes) {\n      const value = values[valueIdx];\n      values[valueIdx] = typeof value === \"number\" ? normalise(value, extent2) : value.map((v) => normalise(v, extent2));\n    }\n  };\n}\nfunction normaliseGroupTo(matchGroupIds, normaliseTo, mode = \"sum\") {\n  return {\n    type: \"group-value-processor\",\n    matchGroupIds,\n    adjust: memo({ normaliseTo, mode }, normaliseFnBuilder)\n  };\n}\nfunction normalisePropertyFnBuilder({\n  normaliseTo,\n  zeroDomain,\n  rangeMin,\n  rangeMax\n}) {\n  const normaliseSpan = normaliseTo[1] - normaliseTo[0];\n  const normalise = (val, start2, span) => {\n    const result = normaliseTo[0] + (val - start2) / span * normaliseSpan;\n    if (span === 0) {\n      return zeroDomain;\n    } else if (result >= normaliseTo[1]) {\n      return normaliseTo[1];\n    } else if (result < normaliseTo[0]) {\n      return normaliseTo[0];\n    }\n    return result;\n  };\n  return () => (pData, pIdx) => {\n    let [start2, end2] = pData.domain.values[pIdx];\n    if (rangeMin != null)\n      start2 = rangeMin;\n    if (rangeMax != null)\n      end2 = rangeMax;\n    const span = end2 - start2;\n    pData.domain.values[pIdx] = [normaliseTo[0], normaliseTo[1]];\n    for (const group of pData.data) {\n      let groupValues = group.values;\n      if (pData.type === \"ungrouped\") {\n        groupValues = [groupValues];\n      }\n      for (const values of groupValues) {\n        values[pIdx] = normalise(values[pIdx], start2, span);\n      }\n    }\n  };\n}\nfunction normalisePropertyTo(property, normaliseTo, zeroDomain, rangeMin, rangeMax) {\n  return {\n    type: \"property-value-processor\",\n    property,\n    adjust: memo({ normaliseTo, rangeMin, rangeMax, zeroDomain }, normalisePropertyFnBuilder)\n  };\n}\nfunction animationValidation(valueKeyIds) {\n  return {\n    type: \"processor\",\n    property: \"animationValidation\",\n    calculate(result) {\n      const { keys, values } = result.defs;\n      const { input, data } = result;\n      let uniqueKeys = true;\n      let orderedKeys = true;\n      const valueKeys = [];\n      for (let k = 0; k < values.length; k++) {\n        if (!valueKeyIds?.includes(values[k].id))\n          continue;\n        valueKeys.push([k, values[k]]);\n      }\n      const processKey = (idx, def, type) => {\n        if (def.valueType === \"category\") {\n          const keyValues = result.domain[type][idx];\n          uniqueKeys && (uniqueKeys = keyValues.length === input.count);\n          return;\n        }\n        let lastValue = data[0]?.[type][idx];\n        for (let d = 1; (uniqueKeys || orderedKeys) && d < data.length; d++) {\n          const keyValue = data[d][type][idx];\n          orderedKeys && (orderedKeys = lastValue <= keyValue);\n          uniqueKeys && (uniqueKeys = lastValue !== keyValue);\n          lastValue = keyValue;\n        }\n      };\n      for (let k = 0; (uniqueKeys || orderedKeys) && k < keys.length; k++) {\n        processKey(k, keys[k], \"keys\");\n      }\n      for (let k = 0; (uniqueKeys || orderedKeys) && k < valueKeys.length; k++) {\n        const [idx, key] = valueKeys[k];\n        processKey(idx, key, \"values\");\n      }\n      return { uniqueKeys, orderedKeys };\n    }\n  };\n}\nfunction buildGroupAccFn({ mode, separateNegative }) {\n  return () => () => (values, valueIndexes) => {\n    const acc = [0, 0];\n    for (const valueIdx of valueIndexes) {\n      const currentVal = values[valueIdx];\n      const accIndex = isNegative(currentVal) && separateNegative ? 0 : 1;\n      if (!isFiniteNumber(currentVal))\n        continue;\n      if (mode === \"normal\")\n        acc[accIndex] += currentVal;\n      values[valueIdx] = acc[accIndex];\n      if (mode === \"trailing\")\n        acc[accIndex] += currentVal;\n    }\n  };\n}\nfunction buildGroupWindowAccFn({ mode, sum: sum2 }) {\n  return () => {\n    const lastValues = [];\n    let firstRow = true;\n    return () => {\n      return (values, valueIndexes) => {\n        let acc = 0;\n        for (const valueIdx of valueIndexes) {\n          const currentVal = values[valueIdx];\n          const lastValue = firstRow && sum2 === \"current\" ? 0 : lastValues[valueIdx];\n          lastValues[valueIdx] = currentVal;\n          const sumValue = sum2 === \"current\" ? currentVal : lastValue;\n          if (!isFiniteNumber(currentVal) || !isFiniteNumber(lastValue)) {\n            values[valueIdx] = acc;\n            continue;\n          }\n          if (mode === \"normal\") {\n            acc += sumValue;\n          }\n          values[valueIdx] = acc;\n          if (mode === \"trailing\") {\n            acc += sumValue;\n          }\n        }\n        firstRow = false;\n      };\n    };\n  };\n}\nfunction accumulateGroup(matchGroupId, mode, sum2, separateNegative = false) {\n  let adjust;\n  if (mode.startsWith(\"window\")) {\n    const modeParam = mode.endsWith(\"-trailing\") ? \"trailing\" : \"normal\";\n    adjust = memo({ mode: modeParam, sum: sum2 }, buildGroupWindowAccFn);\n  } else {\n    adjust = memo({ mode, separateNegative }, buildGroupAccFn);\n  }\n  return {\n    type: \"group-value-processor\",\n    matchGroupIds: [matchGroupId],\n    adjust\n  };\n}\nfunction groupStackAccFn() {\n  return () => (values, valueIndexes) => {\n    const acc = new Float64Array(32);\n    let stackCount = 0;\n    for (const valueIdx of valueIndexes) {\n      const currentValue = values[valueIdx];\n      acc[stackCount] = Number.isFinite(currentValue) ? currentValue : NaN;\n      stackCount += 1;\n      values[valueIdx] = acc.subarray(0, stackCount);\n    }\n  };\n}\nfunction accumulateStack(matchGroupId) {\n  return {\n    type: \"group-value-processor\",\n    matchGroupIds: [matchGroupId],\n    adjust: groupStackAccFn\n  };\n}\nfunction diff(previousData, updateMovedData = true) {\n  return {\n    type: \"processor\",\n    property: \"diff\",\n    calculate: (processedData) => {\n      const moved = /* @__PURE__ */ new Map();\n      const added = /* @__PURE__ */ new Map();\n      const updated = /* @__PURE__ */ new Map();\n      const removed = /* @__PURE__ */ new Map();\n      const length2 = Math.max(previousData.data.length, processedData.data.length);\n      for (let i = 0; i < length2; i++) {\n        const prev = previousData.data[i];\n        const datum = processedData.data[i];\n        const prevId = prev ? createDatumId(prev.keys) : \"\";\n        const datumId = datum ? createDatumId(datum.keys) : \"\";\n        if (datum && prev && prevId === datumId) {\n          if (!arraysEqual(prev.values, datum.values)) {\n            updated.set(datumId, datum);\n          }\n          continue;\n        }\n        if (removed.has(datumId)) {\n          if (updateMovedData || !arraysEqual(removed.get(datumId).values, datum.values)) {\n            updated.set(datumId, datum);\n            moved.set(datumId, datum);\n          }\n          removed.delete(datumId);\n        } else if (datum) {\n          added.set(datumId, datum);\n        }\n        if (added.has(prevId)) {\n          if (updateMovedData || !arraysEqual(added.get(prevId).values, prev.values)) {\n            updated.set(prevId, prev);\n            moved.set(prevId, prev);\n          }\n          added.delete(prevId);\n        } else if (prev) {\n          updated.delete(prevId);\n          removed.set(prevId, prev);\n        }\n      }\n      const changed = added.size > 0 || updated.size > 0 || removed.size > 0;\n      return { changed, added, updated, removed, moved };\n    }\n  };\n}\nfunction createDatumId(keys, ...extraKeys) {\n  let result;\n  if (isArray(keys)) {\n    result = keys.map((key) => transformIntegratedCategoryValue(key)).join(\"___\");\n  } else {\n    result = transformIntegratedCategoryValue(keys);\n  }\n  const primitiveType = typeof result === \"string\" || typeof result === \"number\" || typeof result === \"boolean\" || result instanceof Date;\n  if (primitiveType && extraKeys.length > 0) {\n    result += `___${extraKeys.join(\"___\")}`;\n  }\n  return result;\n}\n\n// packages/ag-charts-community/src/chart/series/seriesLabelUtil.ts\nfunction seriesLabelFadeInAnimation({ id }, subId, animationManager, ...labelSelections) {\n  staticFromToMotion(\n    id,\n    subId,\n    animationManager,\n    labelSelections,\n    { opacity: 0 },\n    { opacity: 1 },\n    { phase: \"trailing\" }\n  );\n}\nfunction seriesLabelFadeOutAnimation({ id }, subId, animationManager, ...labelSelections) {\n  staticFromToMotion(\n    id,\n    subId,\n    animationManager,\n    labelSelections,\n    { opacity: 1 },\n    { opacity: 0 },\n    { phase: \"remove\" }\n  );\n}\nfunction resetLabelFn(_node) {\n  return { opacity: 1 };\n}\n\n// packages/ag-charts-community/src/scene/util/changeDetectableProperties.ts\nvar ChangeDetectableProperties = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this._dirty = 3 /* MAJOR */;\n  }\n  markDirty(type = 1 /* TRIVIAL */) {\n    if (this._dirty < type) {\n      this._dirty = type;\n    }\n  }\n  markClean(_opts) {\n    this._dirty = 0 /* NONE */;\n  }\n  isDirty() {\n    return this._dirty > 0 /* NONE */;\n  }\n};\n\n// packages/ag-charts-community/src/scene/dropShadow.ts\nvar DropShadow = class extends ChangeDetectableProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = true;\n    this.color = \"rgba(0, 0, 0, 0.5)\";\n    this.xOffset = 0;\n    this.yOffset = 0;\n    this.blur = 5;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], DropShadow.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(COLOR_STRING),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], DropShadow.prototype, \"color\", 2);\n__decorateClass([\n  Validate(NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], DropShadow.prototype, \"xOffset\", 2);\n__decorateClass([\n  Validate(NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], DropShadow.prototype, \"yOffset\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], DropShadow.prototype, \"blur\", 2);\n\n// packages/ag-charts-community/src/chart/series/seriesMarker.ts\nvar MARKER_SHAPE = predicateWithMessage(\n  (value) => isMarkerShape(value) || typeof value === \"function\" && Object.create(value.prototype) instanceof Marker,\n  `a marker shape keyword such as 'circle', 'diamond' or 'square' or an object extending the Marker class`\n);\nvar SeriesMarker = class extends ChangeDetectableProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = true;\n    this.shape = Circle;\n    this.size = 6;\n    this.fillOpacity = 1;\n    this.strokeWidth = 1;\n    this.strokeOpacity = 1;\n  }\n  getStyle() {\n    const { size, shape, fill, fillOpacity, stroke, strokeWidth, strokeOpacity } = this;\n    return { size, shape, fill, fillOpacity, stroke, strokeWidth, strokeOpacity };\n  }\n  getDiameter() {\n    return this.size + this.strokeWidth;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(MARKER_SHAPE),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"shape\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"size\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true }),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(RATIO),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true }),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"stroke\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true }),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], SeriesMarker.prototype, \"itemStyler\", 2);\n\n// packages/ag-charts-community/src/chart/series/seriesTooltip.ts\nvar SeriesTooltipInteraction = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = false;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], SeriesTooltipInteraction.prototype, \"enabled\", 2);\nvar SeriesTooltip = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.enabled = true;\n    this.interaction = new SeriesTooltipInteraction();\n    this.position = new TooltipPosition();\n    this.range = void 0;\n  }\n  toTooltipHtml(defaults, params) {\n    if (this.renderer) {\n      return toTooltipHtml(this.renderer(params), defaults);\n    }\n    return toTooltipHtml(defaults);\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], SeriesTooltip.prototype, \"enabled\", 2);\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], SeriesTooltip.prototype, \"showArrow\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], SeriesTooltip.prototype, \"renderer\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], SeriesTooltip.prototype, \"interaction\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], SeriesTooltip.prototype, \"position\", 2);\n__decorateClass([\n  Validate(INTERACTION_RANGE, { optional: true })\n], SeriesTooltip.prototype, \"range\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/interpolationProperties.ts\nvar INTERPOLATION_TYPE = UNION([\"linear\", \"smooth\", \"step\"], \"a line style\");\nvar INTERPOLATION_STEP_POSITION = UNION([\"start\", \"middle\", \"end\"]);\nvar InterpolationProperties = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.type = \"linear\";\n    this.tension = 1;\n    this.position = \"end\";\n  }\n};\n__decorateClass([\n  Validate(INTERPOLATION_TYPE)\n], InterpolationProperties.prototype, \"type\", 2);\n__decorateClass([\n  Validate(RATIO)\n], InterpolationProperties.prototype, \"tension\", 2);\n__decorateClass([\n  Validate(INTERPOLATION_STEP_POSITION)\n], InterpolationProperties.prototype, \"position\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/areaSeriesProperties.ts\nvar AreaSeriesProperties = class extends CartesianSeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.xName = void 0;\n    this.fill = \"#c16068\";\n    this.fillOpacity = 1;\n    this.stroke = \"#874349\";\n    this.strokeWidth = 2;\n    this.strokeOpacity = 1;\n    this.lineDash = [0];\n    this.lineDashOffset = 0;\n    this.interpolation = new InterpolationProperties();\n    this.shadow = new DropShadow();\n    this.marker = new SeriesMarker();\n    this.label = new Label();\n    this.tooltip = new SeriesTooltip();\n    this.connectMissingData = false;\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], AreaSeriesProperties.prototype, \"xKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], AreaSeriesProperties.prototype, \"xName\", 2);\n__decorateClass([\n  Validate(STRING)\n], AreaSeriesProperties.prototype, \"yKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], AreaSeriesProperties.prototype, \"yName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], AreaSeriesProperties.prototype, \"yFilterKey\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], AreaSeriesProperties.prototype, \"normalizedTo\", 2);\n__decorateClass([\n  Validate(COLOR_STRING)\n], AreaSeriesProperties.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(RATIO)\n], AreaSeriesProperties.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(COLOR_STRING)\n], AreaSeriesProperties.prototype, \"stroke\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], AreaSeriesProperties.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO)\n], AreaSeriesProperties.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(LINE_DASH)\n], AreaSeriesProperties.prototype, \"lineDash\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], AreaSeriesProperties.prototype, \"lineDashOffset\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], AreaSeriesProperties.prototype, \"interpolation\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], AreaSeriesProperties.prototype, \"shadow\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], AreaSeriesProperties.prototype, \"marker\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], AreaSeriesProperties.prototype, \"label\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], AreaSeriesProperties.prototype, \"tooltip\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], AreaSeriesProperties.prototype, \"connectMissingData\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/lineInterpolation.ts\nfunction spanRange(span) {\n  switch (span.type) {\n    case \"linear\":\n    case \"step\":\n      return [\n        { x: span.x0, y: span.y0 },\n        { x: span.x1, y: span.y1 }\n      ];\n    case \"cubic\":\n      return [\n        { x: span.cp0x, y: span.cp0y },\n        { x: span.cp3x, y: span.cp3y }\n      ];\n  }\n}\nfunction spanRangeNormalized(span) {\n  const range3 = spanRange(span);\n  if (range3[0].x > range3[1].x) {\n    range3.reverse();\n  }\n  return range3;\n}\nfunction rescaleSpan(span, nextStart, nextEnd) {\n  const [prevStart, prevEnd] = spanRange(span);\n  const widthScale = prevEnd.x !== prevStart.x ? (nextEnd.x - nextStart.x) / (prevEnd.x - prevStart.x) : 0;\n  const heightScale = prevEnd.y !== prevStart.y ? (nextEnd.y - nextStart.y) / (prevEnd.y - prevStart.y) : 0;\n  switch (span.type) {\n    case \"linear\":\n      return {\n        type: \"linear\",\n        moveTo: span.moveTo,\n        x0: nextStart.x,\n        y0: nextStart.y,\n        x1: nextEnd.x,\n        y1: nextEnd.y\n      };\n    case \"cubic\":\n      return {\n        type: \"cubic\",\n        moveTo: span.moveTo,\n        cp0x: nextStart.x,\n        cp0y: nextStart.y,\n        cp1x: nextEnd.x - (span.cp2x - prevStart.x) * widthScale,\n        cp1y: nextEnd.y - (span.cp2y - prevStart.y) * heightScale,\n        cp2x: nextEnd.x - (span.cp1x - prevStart.x) * widthScale,\n        cp2y: nextEnd.y - (span.cp1y - prevStart.y) * heightScale,\n        cp3x: nextEnd.x,\n        cp3y: nextEnd.y\n      };\n    case \"step\":\n      return {\n        type: \"step\",\n        moveTo: span.moveTo,\n        x0: nextStart.x,\n        y0: nextStart.y,\n        x1: nextEnd.x,\n        y1: nextEnd.y,\n        stepX: nextEnd.x - (span.stepX - prevStart.x) * widthScale\n      };\n  }\n}\nfunction clipSpanX(span, x0, x1) {\n  const { moveTo } = span;\n  const [start2, end2] = spanRangeNormalized(span);\n  const { x: spanX0, y: spanY0 } = start2;\n  const { x: spanX1, y: spanY1 } = end2;\n  if (x1 < spanX0) {\n    return rescaleSpan(span, start2, start2);\n  } else if (x0 > spanX1) {\n    return rescaleSpan(span, end2, end2);\n  }\n  switch (span.type) {\n    case \"linear\": {\n      const m = spanY0 === spanY1 ? void 0 : (spanY1 - spanY0) / (spanX1 - spanX0);\n      const y0 = m == null ? spanY0 : m * (x0 - spanX0) + spanY0;\n      const y1 = m == null ? spanY0 : m * (x1 - spanX0) + spanY0;\n      return { type: \"linear\", moveTo, x0, y0, x1, y1 };\n    }\n    case \"step\":\n      if (x1 <= span.stepX) {\n        const y = span.y0;\n        return { type: \"step\", moveTo, x0, y0: y, x1, y1: y, stepX: x1 };\n      } else if (x0 >= span.stepX) {\n        const y = span.y1;\n        return { type: \"step\", moveTo, x0, y0: y, x1, y1: y, stepX: x0 };\n      } else {\n        const { y0, y1, stepX } = span;\n        return { type: \"step\", moveTo, x0, y0, x1, y1, stepX };\n      }\n    case \"cubic\": {\n      const t0 = solveBezier(span.cp0x, span.cp1x, span.cp2x, span.cp3x, x0);\n      let [_unused, bezier] = splitBezier(\n        span.cp0x,\n        span.cp0y,\n        span.cp1x,\n        span.cp1y,\n        span.cp2x,\n        span.cp2y,\n        span.cp3x,\n        span.cp3y,\n        t0\n      );\n      const t1 = solveBezier(bezier[0].x, bezier[1].x, bezier[2].x, bezier[3].x, x1);\n      [bezier, _unused] = splitBezier(\n        bezier[0].x,\n        bezier[0].y,\n        bezier[1].x,\n        bezier[1].y,\n        bezier[2].x,\n        bezier[2].y,\n        bezier[3].x,\n        bezier[3].y,\n        t1\n      );\n      return {\n        type: \"cubic\",\n        moveTo,\n        cp0x: bezier[0].x,\n        cp0y: bezier[0].y,\n        cp1x: bezier[1].x,\n        cp1y: bezier[1].y,\n        cp2x: bezier[2].x,\n        cp2y: bezier[2].y,\n        cp3x: bezier[3].x,\n        cp3y: bezier[3].y\n      };\n    }\n  }\n}\nfunction linearPoints(points) {\n  const spans = [];\n  let i = 0;\n  let x0 = NaN;\n  let y0 = NaN;\n  for (const { x: x1, y: y1 } of points) {\n    if (i > 0) {\n      const moveTo = i === 1;\n      spans.push({ type: \"linear\", moveTo, x0, y0, x1, y1 });\n    }\n    i += 1;\n    x0 = x1;\n    y0 = y1;\n  }\n  return spans;\n}\nvar lineSteps = {\n  start: 0,\n  middle: 0.5,\n  end: 1\n};\nfunction stepPoints(points, position) {\n  const spans = [];\n  let i = 0;\n  let x0 = NaN;\n  let y0 = NaN;\n  const p0 = typeof position === \"number\" ? position : lineSteps[position];\n  for (const { x: x1, y: y1 } of points) {\n    if (i > 0) {\n      const moveTo = i === 1;\n      const stepX = x0 + (x1 - x0) * p0;\n      spans.push({ type: \"step\", moveTo, x0, y0, x1, y1, stepX });\n    }\n    i += 1;\n    x0 = x1;\n    y0 = y1;\n  }\n  return spans;\n}\nvar flatnessRatio = 0.05;\nfunction smoothPoints(iPoints, tension) {\n  const points = Array.isArray(iPoints) ? iPoints : Array.from(iPoints);\n  if (points.length <= 1)\n    return [];\n  const gradients = points.map((c, i) => {\n    const p = i === 0 ? c : points[i - 1];\n    const n = i === points.length - 1 ? c : points[i + 1];\n    const isTerminalPoint = i === 0 || i === points.length - 1;\n    if (Math.sign(p.y - c.y) === Math.sign(n.y - c.y)) {\n      return 0;\n    }\n    if (!isTerminalPoint) {\n      const range3 = Math.abs(p.y - n.y);\n      const prevRatio = Math.abs(c.y - p.y) / range3;\n      const nextRatio = Math.abs(c.y - n.y) / range3;\n      if (prevRatio <= flatnessRatio || 1 - prevRatio <= flatnessRatio || nextRatio <= flatnessRatio || 1 - nextRatio <= flatnessRatio) {\n        return 0;\n      }\n    }\n    return (n.y - p.y) / (n.x - p.x);\n  });\n  if (gradients[1] === 0) {\n    gradients[0] *= 2;\n  }\n  if (gradients[gradients.length - 2] === 0) {\n    gradients[gradients.length - 1] *= 2;\n  }\n  const spans = [];\n  for (let i = 1; i < points.length; i += 1) {\n    const prev = points[i - 1];\n    const prevM = gradients[i - 1];\n    const cur = points[i];\n    const curM = gradients[i];\n    const dx = cur.x - prev.x;\n    const dy = cur.y - prev.y;\n    let dcp1x = dx * tension / 3;\n    let dcp1y = dx * prevM * tension / 3;\n    let dcp2x = dx * tension / 3;\n    let dcp2y = dx * curM * tension / 3;\n    if (curM === 0 && Math.abs(dcp1y) > Math.abs(dy)) {\n      dcp1x *= Math.abs(dy / dcp1y);\n      dcp1y = Math.sign(dcp1y) * Math.abs(dy);\n    }\n    if (prevM === 0 && Math.abs(dcp2y) > Math.abs(dy)) {\n      dcp2x *= Math.abs(dy / dcp2y);\n      dcp2y = Math.sign(dcp2y) * Math.abs(dy);\n    }\n    spans.push({\n      type: \"cubic\",\n      moveTo: i === 1,\n      cp0x: prev.x,\n      cp0y: prev.y,\n      cp1x: prev.x + dcp1x,\n      cp1y: prev.y + dcp1y,\n      cp2x: cur.x - dcp2x,\n      cp2y: cur.y - dcp2y,\n      cp3x: cur.x,\n      cp3y: cur.y\n    });\n  }\n  return spans;\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/lineInterpolationPlotting.ts\nfunction lerp2(a, b, ratio2) {\n  return (b - a) * ratio2 + a;\n}\nfunction linearSupertype(span, stepX) {\n  const { x0, y0, x1, y1 } = span;\n  const m = (y1 - y0) / (x1 - x0);\n  const stepY = m * (stepX - x0) + y0;\n  return {\n    leftCp1x: x0,\n    leftCp1y: y0,\n    leftCp2x: stepX,\n    leftCp2y: stepY,\n    stepX,\n    stepY0: stepY,\n    stepY1: stepY,\n    rightCp1x: stepX,\n    rightCp1y: stepY,\n    rightCp2x: x1,\n    rightCp2y: y1\n  };\n}\nfunction bezierSupertype(span, stepX) {\n  const { cp0x, cp0y, cp1x, cp1y, cp2x, cp2y, cp3x, cp3y } = span;\n  const t = solveBezier(cp0x, cp1x, cp2x, cp3x, stepX);\n  const [left, right] = splitBezier(cp0x, cp0y, cp1x, cp1y, cp2x, cp2y, cp3x, cp3y, t);\n  const stepY = left[3].y;\n  return {\n    leftCp1x: left[1].x,\n    leftCp1y: left[1].y,\n    leftCp2x: left[2].x,\n    leftCp2y: left[2].y,\n    stepX,\n    stepY0: stepY,\n    stepY1: stepY,\n    rightCp1x: right[1].x,\n    rightCp1y: right[1].y,\n    rightCp2x: right[2].x,\n    rightCp2y: right[2].y\n  };\n}\nfunction stepSupertype(span) {\n  const { x0, y0, x1, y1, stepX } = span;\n  return {\n    leftCp1x: (x0 + stepX) / 2,\n    leftCp1y: y0,\n    leftCp2x: (x0 + stepX) / 2,\n    leftCp2y: y0,\n    stepX,\n    stepY0: y0,\n    stepY1: y1,\n    rightCp1x: (stepX + x1) / 2,\n    rightCp1y: y1,\n    rightCp2x: (stepX + x1) / 2,\n    rightCp2y: y1\n  };\n}\nfunction spanSupertype(span, stepX) {\n  if (span.type === \"linear\") {\n    return linearSupertype(span, stepX);\n  } else if (span.type === \"cubic\") {\n    return bezierSupertype(span, stepX);\n  } else {\n    return stepSupertype(span);\n  }\n}\nfunction plotStart(path, moveTo, x0, y0, x1, y1, reversed) {\n  switch (moveTo) {\n    case 1 /* MoveTo */:\n      if (reversed) {\n        path.moveTo(x1, y1);\n      } else {\n        path.moveTo(x0, y0);\n      }\n      break;\n    case 2 /* LineTo */:\n      if (reversed) {\n        path.lineTo(x1, y1);\n      } else {\n        path.lineTo(x0, y0);\n      }\n      break;\n  }\n}\nfunction plotLinear(path, x0, y0, x1, y1, reversed) {\n  if (reversed) {\n    path.lineTo(x0, y0);\n  } else {\n    path.lineTo(x1, y1);\n  }\n}\nfunction plotCubic(path, cp0x, cp0y, cp1x, cp1y, cp2x, cp2y, cp3x, cp3y, reversed) {\n  if (reversed) {\n    path.cubicCurveTo(cp2x, cp2y, cp1x, cp1y, cp0x, cp0y);\n  } else {\n    path.cubicCurveTo(cp1x, cp1y, cp2x, cp2y, cp3x, cp3y);\n  }\n}\nfunction plotStep(path, x0, y0, x1, y1, stepX, reversed) {\n  if (reversed) {\n    path.lineTo(stepX, y1);\n    path.lineTo(stepX, y0);\n    path.lineTo(x0, y0);\n  } else {\n    path.lineTo(stepX, y0);\n    path.lineTo(stepX, y1);\n    path.lineTo(x1, y1);\n  }\n}\nfunction plotSpan(path, span, moveTo, reversed) {\n  const [start2, end2] = spanRange(span);\n  plotStart(path, moveTo, start2.x, start2.y, end2.x, end2.y, reversed);\n  switch (span.type) {\n    case \"linear\":\n      plotLinear(path, span.x0, span.y0, span.x1, span.y1, reversed);\n      break;\n    case \"cubic\":\n      plotCubic(\n        path,\n        span.cp0x,\n        span.cp0y,\n        span.cp1x,\n        span.cp1y,\n        span.cp2x,\n        span.cp2y,\n        span.cp3x,\n        span.cp3y,\n        reversed\n      );\n      break;\n    case \"step\":\n      plotStep(path, span.x0, span.y0, span.x1, span.y1, span.stepX, reversed);\n      break;\n  }\n}\nfunction plotInterpolatedSpans(path, a, b, ratio2, moveTo, reversed) {\n  const [aStart, aEnd] = spanRange(a);\n  const [bStart, bEnd] = spanRange(b);\n  const x0 = lerp2(aStart.x, bStart.x, ratio2);\n  const y0 = lerp2(aStart.y, bStart.y, ratio2);\n  const x1 = lerp2(aEnd.x, bEnd.x, ratio2);\n  const y1 = lerp2(aEnd.y, bEnd.y, ratio2);\n  plotStart(path, moveTo, x0, y0, x1, y1, reversed);\n  if (a.type === \"cubic\" && b.type === \"cubic\") {\n    const cp1x = lerp2(a.cp1x, b.cp1x, ratio2);\n    const cp1y = lerp2(a.cp1y, b.cp1y, ratio2);\n    const cp2x = lerp2(a.cp2x, b.cp2x, ratio2);\n    const cp2y = lerp2(a.cp2y, b.cp2y, ratio2);\n    plotCubic(path, x0, y0, cp1x, cp1y, cp2x, cp2y, x1, y1, reversed);\n  } else if (a.type === \"step\" && b.type === \"step\") {\n    const stepX = lerp2(a.stepX, b.stepX, ratio2);\n    plotStep(path, x0, y0, x1, y1, stepX, reversed);\n  } else if (a.type === \"linear\" && b.type === \"linear\") {\n    plotLinear(path, x0, y0, x1, y1, reversed);\n  } else {\n    let defaultStepX;\n    if (a.type === \"step\") {\n      defaultStepX = a.stepX;\n    } else if (b.type === \"step\") {\n      defaultStepX = b.stepX;\n    } else {\n      defaultStepX = (x0 + x1) / 2;\n    }\n    const as = spanSupertype(a, defaultStepX);\n    const bs = spanSupertype(b, defaultStepX);\n    const leftCp1x = lerp2(as.leftCp1x, bs.leftCp1x, ratio2);\n    const leftCp1y = lerp2(as.leftCp1y, bs.leftCp1y, ratio2);\n    const leftCp2x = lerp2(as.leftCp2x, bs.leftCp2x, ratio2);\n    const leftCp2y = lerp2(as.leftCp2y, bs.leftCp2y, ratio2);\n    const stepX = lerp2(as.stepX, bs.stepX, ratio2);\n    const stepY0 = lerp2(as.stepY0, bs.stepY0, ratio2);\n    const stepY1 = lerp2(as.stepY1, bs.stepY1, ratio2);\n    const rightCp1x = lerp2(as.rightCp1x, bs.rightCp1x, ratio2);\n    const rightCp1y = lerp2(as.rightCp1y, bs.rightCp1y, ratio2);\n    const rightCp2x = lerp2(as.rightCp2x, bs.rightCp2x, ratio2);\n    const rightCp2y = lerp2(as.rightCp2y, bs.rightCp2y, ratio2);\n    if (reversed) {\n      path.cubicCurveTo(rightCp2x, rightCp2y, rightCp1x, rightCp1y, stepX, stepY1);\n      path.lineTo(stepX, stepY0);\n      path.cubicCurveTo(leftCp2x, leftCp2y, leftCp1x, leftCp1y, x0, y0);\n    } else {\n      path.cubicCurveTo(leftCp1x, leftCp1y, leftCp2x, leftCp2y, stepX, stepY0);\n      path.lineTo(stepX, stepY1);\n      path.cubicCurveTo(rightCp1x, rightCp1y, rightCp2x, rightCp2y, x1, y1);\n    }\n  }\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/markerUtil.ts\nfunction markerFadeInAnimation({ id }, animationManager, status, ...markerSelections) {\n  const params = { phase: status ? NODE_UPDATE_STATE_TO_PHASE_MAPPING[status] : \"trailing\" };\n  staticFromToMotion(id, \"markers\", animationManager, markerSelections, { opacity: 0 }, { opacity: 1 }, params);\n  markerSelections.forEach((s) => s.cleanup());\n}\nfunction markerScaleInAnimation({ id }, animationManager, ...markerSelections) {\n  staticFromToMotion(\n    id,\n    \"markers\",\n    animationManager,\n    markerSelections,\n    { scalingX: 0, scalingY: 0 },\n    { scalingX: 1, scalingY: 1 },\n    { phase: \"initial\" }\n  );\n  markerSelections.forEach((s) => s.cleanup());\n}\nfunction markerSwipeScaleInAnimation({ id, nodeDataDependencies }, animationManager, ...markerSelections) {\n  const seriesWidth = nodeDataDependencies.seriesRectWidth;\n  const fromFn = (_, datum) => {\n    const x = datum.midPoint?.x ?? seriesWidth;\n    let delay = clamp(0, inverseEaseOut(x / seriesWidth), 1);\n    if (isNaN(delay)) {\n      delay = 0;\n    }\n    return { scalingX: 0, scalingY: 0, delay, duration: QUICK_TRANSITION, phase: \"initial\" };\n  };\n  const toFn = () => {\n    return { scalingX: 1, scalingY: 1 };\n  };\n  fromToMotion(id, \"markers\", animationManager, markerSelections, { fromFn, toFn });\n}\nfunction resetMarkerFn(_node) {\n  return { opacity: 1, scalingX: 1, scalingY: 1 };\n}\nfunction resetMarkerPositionFn(_node, datum) {\n  return {\n    translationX: datum.point?.x ?? NaN,\n    translationY: datum.point?.y ?? NaN\n  };\n}\nfunction prepareMarkerAnimation(pairMap, parentStatus) {\n  const readFirstPair = (xValue, type) => {\n    const val = pairMap[type][xValue];\n    return Array.isArray(val) ? val[0] : val;\n  };\n  const markerStatus = (datum) => {\n    const { xValue } = datum;\n    if (pairMap.moved[xValue]) {\n      return { point: readFirstPair(xValue, \"moved\"), status: \"updated\" };\n    } else if (pairMap.removed[xValue]) {\n      return { point: readFirstPair(xValue, \"removed\"), status: \"removed\" };\n    } else if (pairMap.added[xValue]) {\n      return { point: readFirstPair(xValue, \"added\"), status: \"added\" };\n    }\n    return { status: \"unknown\" };\n  };\n  const fromFn = (marker, datum) => {\n    const { status, point } = markerStatus(datum);\n    if (status === \"unknown\")\n      return { opacity: 0 };\n    const defaults = {\n      translationX: point?.from?.x ?? marker.translationX,\n      translationY: point?.from?.y ?? marker.translationY,\n      opacity: marker.opacity,\n      phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[status]\n    };\n    if (parentStatus === \"added\") {\n      return {\n        ...defaults,\n        opacity: 0,\n        translationX: point?.to?.x,\n        translationY: point?.to?.y,\n        phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[\"added\"]\n      };\n    }\n    if (status === \"added\") {\n      defaults.opacity = 0;\n    }\n    return defaults;\n  };\n  const toFn = (_marker, datum) => {\n    const { status, point } = markerStatus(datum);\n    if (status === \"unknown\")\n      return { opacity: 0 };\n    const defaults = {\n      translationX: datum.point.x,\n      translationY: datum.point.y,\n      opacity: 1,\n      phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[status]\n    };\n    if (status === \"removed\" || parentStatus === \"removed\") {\n      return {\n        ...defaults,\n        translationX: point?.to?.x,\n        translationY: point?.to?.y,\n        opacity: 0,\n        phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[\"removed\"]\n      };\n    }\n    return defaults;\n  };\n  return { fromFn, toFn };\n}\nfunction computeMarkerFocusBounds(series, { datumIndex }) {\n  const nodeData = series.getNodeData();\n  if (nodeData === void 0)\n    return void 0;\n  const datum = nodeData[datumIndex];\n  const { point } = datum;\n  if (datum == null || point == null)\n    return void 0;\n  const size = point.focusSize ?? series.getFormattedMarkerStyle(datum).size;\n  const radius = size / 2;\n  const x = datum.point.x - radius;\n  const y = datum.point.y - radius;\n  return Transformable.toCanvas(series.contentGroup, new BBox(x, y, size, size));\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/linePlotter.ts\nfunction plotLinearPoints(path, points, continuePath) {\n  let didMove = continuePath;\n  for (const { x, y } of points) {\n    if (didMove) {\n      path.lineTo(x, y);\n    } else {\n      path.moveTo(x, y);\n      didMove = true;\n    }\n  }\n}\nvar flatnessRatio2 = 0.05;\nfunction plotSmoothPoints(path, iPoints, tension, continuePath) {\n  const points = Array.isArray(iPoints) ? iPoints : Array.from(iPoints);\n  if (points.length === 0)\n    return;\n  if (continuePath) {\n    path.lineTo(points[0].x, points[0].y);\n  } else {\n    path.moveTo(points[0].x, points[0].y);\n  }\n  if (points.length <= 1)\n    return;\n  const gradients = points.map((c, i) => {\n    const p = i === 0 ? c : points[i - 1];\n    const n = i === points.length - 1 ? c : points[i + 1];\n    const isTerminalPoint = i === 0 || i === points.length - 1;\n    if (Math.sign(p.y - c.y) === Math.sign(n.y - c.y)) {\n      return 0;\n    }\n    if (!isTerminalPoint) {\n      const range3 = Math.abs(p.y - n.y);\n      const prevRatio = Math.abs(c.y - p.y) / range3;\n      const nextRatio = Math.abs(c.y - n.y) / range3;\n      if (prevRatio <= flatnessRatio2 || 1 - prevRatio <= flatnessRatio2 || nextRatio <= flatnessRatio2 || 1 - nextRatio <= flatnessRatio2) {\n        return 0;\n      }\n    }\n    return (n.y - p.y) / (n.x - p.x);\n  });\n  if (gradients[1] === 0) {\n    gradients[0] *= 2;\n  }\n  if (gradients[gradients.length - 2] === 0) {\n    gradients[gradients.length - 1] *= 2;\n  }\n  for (let i = 1; i < points.length; i += 1) {\n    const prev = points[i - 1];\n    const prevM = gradients[i - 1];\n    const cur = points[i];\n    const curM = gradients[i];\n    const dx = cur.x - prev.x;\n    const dy = cur.y - prev.y;\n    let dcp1x = dx * tension / 3;\n    let dcp1y = dx * prevM * tension / 3;\n    let dcp2x = dx * tension / 3;\n    let dcp2y = dx * curM * tension / 3;\n    if (curM === 0 && Math.abs(dcp1y) > Math.abs(dy)) {\n      dcp1x *= Math.abs(dy / dcp1y);\n      dcp1y = Math.sign(dcp1y) * Math.abs(dy);\n    }\n    if (prevM === 0 && Math.abs(dcp2y) > Math.abs(dy)) {\n      dcp2x *= Math.abs(dy / dcp2y);\n      dcp2y = Math.sign(dcp2y) * Math.abs(dy);\n    }\n    path.cubicCurveTo(prev.x + dcp1x, prev.y + dcp1y, cur.x - dcp2x, cur.y - dcp2y, cur.x, cur.y);\n  }\n}\nfunction plotStepPoints(path, points, align, continuePath) {\n  let lastPoint;\n  for (const point of points) {\n    if (lastPoint != null) {\n      const directionalAlign = lastPoint.x < point.x ? align : 1 - align;\n      const x = (point.x - lastPoint.x) * directionalAlign + lastPoint.x;\n      path.lineTo(x, lastPoint?.y ?? point.y);\n      path.lineTo(x, point.y);\n      path.lineTo(point.x, point.y);\n    } else if (continuePath) {\n      path.lineTo(point.x, point.y);\n    } else {\n      path.moveTo(point.x, point.y);\n    }\n    lastPoint = point;\n  }\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/pathUtil.ts\nfunction minMax(nodeData) {\n  return nodeData.reduce(\n    ({ min, max }, node) => {\n      if (min == null || min.point.x > node.point.x) {\n        min = node;\n      }\n      if (max == null || max.point.x < node.point.x) {\n        max = node;\n      }\n      return { min, max };\n    },\n    {}\n  );\n}\nfunction intersectionOnLine(a, b, targetX) {\n  const m = (b.y - a.y) / (b.x - a.x);\n  const y = (targetX - a.x) * m + a.y;\n  return { x: targetX, y };\n}\nfunction backfillPathPoint(results, process, skip, processFn) {\n  let prevMarkerIdx = -1, nextMarkerIdx = 0;\n  const toProcess = [];\n  while (nextMarkerIdx < results.length) {\n    if (results[nextMarkerIdx].change === process) {\n      toProcess.push(results[nextMarkerIdx]);\n      nextMarkerIdx++;\n      continue;\n    }\n    if (results[nextMarkerIdx].change === skip) {\n      nextMarkerIdx++;\n      continue;\n    }\n    if (toProcess.length > 0) {\n      processFn(toProcess, prevMarkerIdx, nextMarkerIdx);\n      toProcess.length = 0;\n    }\n    prevMarkerIdx = nextMarkerIdx;\n    nextMarkerIdx++;\n  }\n  if (toProcess.length > 0) {\n    processFn(toProcess, prevMarkerIdx, nextMarkerIdx);\n  }\n}\nfunction backfillPathPointData(result, splitMode) {\n  backfillPathPoint(result, \"out\", \"in\", (toProcess, sIdx, eIdx) => {\n    if (sIdx === -1 && result[eIdx]) {\n      toProcess.forEach((d) => d.to = result[eIdx].from);\n    } else if (eIdx === result.length && result[sIdx]) {\n      toProcess.forEach((d) => d.to = result[sIdx].from);\n    } else if (splitMode === \"intersect\" && result[sIdx]?.from && result[eIdx]?.from) {\n      toProcess.forEach((d) => d.to = intersectionOnLine(result[sIdx].from, result[eIdx].from, d.from.x));\n    } else {\n      toProcess.forEach((d) => d.to = d.from);\n    }\n  });\n  backfillPathPoint(result, \"in\", \"out\", (toProcess, sIdx, eIdx) => {\n    if (sIdx === -1 && result[eIdx]) {\n      toProcess.forEach((d) => d.from = result[eIdx].to);\n    } else if (eIdx === result.length && result[sIdx]) {\n      toProcess.forEach((d) => d.from = result[sIdx].to);\n    } else if (splitMode === \"intersect\" && result[sIdx]?.to && result[eIdx]?.to) {\n      toProcess.forEach((d) => d.from = intersectionOnLine(result[sIdx].to, result[eIdx].to, d.to.x));\n    } else {\n      toProcess.forEach((d) => d.from = d.to);\n    }\n  });\n}\nfunction calculatePoint(from3, to, ratio2) {\n  const x1 = isNaN(from3.x) ? to.x : from3.x;\n  const y1 = isNaN(from3.y) ? to.y : from3.y;\n  const xd = to.x - from3.x;\n  const yd = to.y - from3.y;\n  const xr = isNaN(xd) ? 0 : xd * ratio2;\n  const yr = isNaN(yd) ? 0 : yd * ratio2;\n  return {\n    x: x1 + xr,\n    y: y1 + yr\n  };\n}\nvar lineSteps2 = {\n  start: 0,\n  middle: 0.5,\n  end: 1\n};\nfunction plotPath(points, path, interpolation, continuePath = false) {\n  const { path: linePath } = path;\n  if (interpolation?.type === \"smooth\") {\n    plotSmoothPoints(linePath, points, interpolation.tension ?? 1, continuePath);\n  } else if (interpolation?.type === \"step\") {\n    plotStepPoints(linePath, points, lineSteps2[interpolation.position ?? \"end\"], continuePath);\n  } else {\n    plotLinearPoints(linePath, points, continuePath);\n  }\n}\nfunction splitPairData(pairData, ratios) {\n  let previousTo;\n  let points = void 0;\n  const out = [];\n  const flushCurrent = () => {\n    if (points != null) {\n      out.push(points);\n      points = void 0;\n    }\n  };\n  for (const data of pairData) {\n    const { from: from3, to } = data;\n    const ratio2 = ratios[data.change];\n    if (ratio2 == null || from3 == null || to == null)\n      continue;\n    const point = calculatePoint(from3, to, ratio2);\n    if (data.moveTo === false) {\n      points ?? (points = []);\n      points.push(point);\n    } else if (data.moveTo === true || !previousTo) {\n      flushCurrent();\n      points = [point];\n    } else if (previousTo) {\n      const moveToRatio = data.moveTo === \"in\" ? ratio2 : 1 - ratio2;\n      const { x: midPointX, y: midPointY } = calculatePoint(previousTo, point, moveToRatio);\n      points ?? (points = []);\n      points.push({ x: midPointX, y: midPointY });\n      flushCurrent();\n      points = [point];\n    }\n    previousTo = point;\n  }\n  flushCurrent();\n  return out;\n}\nfunction renderPartialPath(pairData, ratios, path, interpolation) {\n  splitPairData(pairData, ratios).forEach((points) => {\n    plotPath(points, path, interpolation);\n  });\n}\nfunction pathSwipeInAnimation({ id, visible, nodeDataDependencies }, animationManager, ...paths) {\n  const { seriesRectWidth: width2, seriesRectHeight: height2 } = nodeDataDependencies;\n  staticFromToMotion(\n    id,\n    \"path_properties\",\n    animationManager,\n    paths,\n    { clipX: 0 },\n    { clipX: width2 },\n    {\n      phase: \"initial\",\n      start: { clip: true, clipY: height2, visible },\n      finish: { clip: false, visible }\n    }\n  );\n}\nfunction pathFadeInAnimation({ id }, subId, animationManager, phase = \"add\", ...selection) {\n  staticFromToMotion(id, subId, animationManager, selection, { opacity: 0 }, { opacity: 1 }, { phase });\n}\nfunction pathFadeOutAnimation({ id }, subId, animationManager, ...selection) {\n  staticFromToMotion(id, subId, animationManager, selection, { opacity: 1 }, { opacity: 0 }, { phase: \"remove\" });\n}\nfunction buildResetPathFn(opts) {\n  return (_node) => ({\n    visible: opts.getVisible(),\n    opacity: opts.getOpacity(),\n    clipScalingX: 1,\n    clip: false\n  });\n}\nfunction updateClipPath({ nodeDataDependencies }, path) {\n  const toFinite = (value) => isFinite(value) ? value : 0;\n  path.clipX = toFinite(nodeDataDependencies.seriesRectWidth);\n  path.clipY = toFinite(nodeDataDependencies.seriesRectHeight);\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/scaling.ts\nfunction isContinuousScaling(scaling) {\n  return scaling.type === \"continuous\" || scaling.type === \"log\";\n}\nfunction isCategoryScaling(scaling) {\n  return scaling.type === \"category\";\n}\nfunction areEqual(a, b) {\n  return a.domain.length === b.domain.length && a.range.length === b.range.length && a.domain.every((val, index) => val === b.domain[index]) && a.range.every((val, index) => val === b.range[index]);\n}\nfunction areScalingEqual(a, b) {\n  if (a === void 0 || b === void 0) {\n    return a !== void 0 || b !== void 0;\n  }\n  if (isContinuousScaling(a) && isContinuousScaling(b)) {\n    return a.type === b.type && areEqual(a, b);\n  }\n  if (isCategoryScaling(a) && isCategoryScaling(b)) {\n    return areEqual(a, b);\n  }\n  return false;\n}\nfunction isScaleValid(scale2) {\n  if (scale2 == null)\n    return false;\n  if (!scale2.range.every((v) => Number.isFinite(v)))\n    return false;\n  if (scale2.type === \"category\") {\n    return scale2.domain.every((v) => v != null);\n  }\n  return scale2.domain.every((v) => Number.isFinite(v) || v instanceof Date);\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/lineUtil.ts\nfunction* pathRanges(points) {\n  let start2 = -1;\n  let end2 = 0;\n  for (const { point } of points) {\n    if (point.moveTo) {\n      const range3 = start2 >= 0 ? { start: start2, end: end2 } : void 0;\n      start2 = end2;\n      end2 = start2;\n      if (range3 !== void 0) {\n        yield range3;\n      }\n    }\n    end2 += 1;\n  }\n  if (start2 !== -1) {\n    yield { start: start2, end: end2 };\n  }\n}\nfunction* pathRangePoints(points, { start: start2, end: end2 }) {\n  for (let i = start2; i < end2; i += 1) {\n    yield points[i].point;\n  }\n}\nfunction* pathRangePointsReverse(points, { start: start2, end: end2 }) {\n  for (let i = end2 - 1; i >= start2; i -= 1) {\n    yield points[i].point;\n  }\n}\nfunction integratedCategoryMatch(a, b) {\n  if (a == null || b == null)\n    return false;\n  if (typeof a !== \"object\" || typeof b !== \"object\")\n    return false;\n  if (\"id\" in a && \"id\" in b) {\n    return a.id === b.id;\n  }\n  return a.toString() === b.toString();\n}\nfunction scale(val, scaling) {\n  if (!scaling)\n    return NaN;\n  if (val instanceof Date) {\n    val = val.getTime();\n  }\n  if (scaling.type === \"continuous\" && typeof val === \"number\") {\n    const domainRatio = (val - scaling.domain[0]) / (scaling.domain[1] - scaling.domain[0]);\n    return domainRatio * (scaling.range[1] - scaling.range[0]) + scaling.range[0];\n  }\n  if (scaling.type === \"log\" && typeof val === \"number\") {\n    return scaling.convert(val);\n  }\n  const matchingIndex = scaling.domain.findIndex((d) => d === val);\n  if (matchingIndex >= 0) {\n    return scaling.range[matchingIndex];\n  }\n  const matchingIntegratedIndex = scaling.domain.findIndex((d) => integratedCategoryMatch(val, d));\n  if (matchingIntegratedIndex >= 0) {\n    return scaling.range[matchingIntegratedIndex];\n  }\n  return NaN;\n}\nfunction scalesChanged(newData, oldData) {\n  return !areScalingEqual(newData.scales.x, oldData.scales.x) || !areScalingEqual(newData.scales.y, oldData.scales.y);\n}\nfunction closeMatch(a, b) {\n  const an = Number(a);\n  const bn = Number(b);\n  if (!isNaN(an) && !isNaN(bn)) {\n    return Math.abs(bn - an) < 0.25;\n  }\n  return a === b;\n}\nfunction calculateMoveTo(from3 = false, to = false) {\n  if (from3 === to) {\n    return Boolean(from3);\n  }\n  return from3 ? \"in\" : \"out\";\n}\nfunction pairContinuousData(newData, oldData, opts = {}) {\n  const { backfillSplitMode = \"intersect\" } = opts;\n  const result = [];\n  const resultMap = {\n    added: {},\n    moved: {},\n    removed: {}\n  };\n  const pairUp = (from3, to, xValue, change = \"move\") => {\n    if (from3 && (isNaN(from3.point.x) || isNaN(from3.point.y))) {\n      from3 = to;\n    }\n    const resultPoint = {\n      from: from3?.point,\n      to: to?.point,\n      moveTo: calculateMoveTo(from3?.point.moveTo, to?.point.moveTo),\n      change\n    };\n    if (change === \"move\") {\n      resultMap.moved[xValue] = resultPoint;\n      oldIdx++;\n      newIdx++;\n    } else if (change === \"in\") {\n      resultMap.added[xValue] = resultPoint;\n      newIdx++;\n    } else if (change === \"out\") {\n      resultMap.removed[xValue] = resultPoint;\n      oldIdx++;\n    }\n    result.push(resultPoint);\n  };\n  const { min: minFromNode, max: maxFromNode } = minMax(oldData.nodeData);\n  const { min: minToNode, max: maxToNode } = minMax(newData.nodeData);\n  let oldIdx = 0;\n  let newIdx = 0;\n  while (oldIdx < oldData.nodeData.length || newIdx < newData.nodeData.length) {\n    const from3 = oldData.nodeData[oldIdx];\n    const to = newData.nodeData[newIdx];\n    const fromShifted = from3 ? scale(from3.xValue ?? NaN, newData.scales.x) : void 0;\n    const toUnshifted = to ? scale(to.xValue ?? NaN, oldData.scales.x) : void 0;\n    const NA = void 0;\n    if (fromShifted != null && closeMatch(fromShifted, to?.point.x)) {\n      pairUp(from3, to, to.xValue, \"move\");\n    } else if (fromShifted != null && fromShifted < (minToNode?.point.x ?? -Infinity)) {\n      pairUp(from3, NA, from3.xValue, \"out\");\n    } else if (fromShifted != null && fromShifted > (maxToNode?.point.x ?? Infinity)) {\n      pairUp(from3, NA, from3.xValue, \"out\");\n    } else if (toUnshifted != null && toUnshifted < (minFromNode?.point.x ?? -Infinity)) {\n      pairUp(NA, to, to.xValue, \"in\");\n    } else if (toUnshifted != null && toUnshifted > (maxFromNode?.point.x ?? Infinity)) {\n      pairUp(NA, to, to.xValue, \"in\");\n    } else if (fromShifted != null && fromShifted < to?.point.x) {\n      pairUp(from3, NA, from3.xValue, \"out\");\n    } else if (toUnshifted != null && toUnshifted < from3?.point.x) {\n      pairUp(NA, to, to.xValue, \"in\");\n    } else if (from3) {\n      pairUp(from3, NA, from3.xValue, \"out\");\n    } else if (to) {\n      pairUp(NA, to, to.xValue, \"in\");\n    } else {\n      throw new Error(\"Unable to process points\");\n    }\n  }\n  backfillPathPointData(result, backfillSplitMode);\n  return { result, resultMap };\n}\nfunction pairCategoryData(newData, oldData, diff2, opts = {}) {\n  const { backfillSplitMode = \"intersect\", multiDatum = false } = opts;\n  const result = [];\n  const resultMapSingle = {\n    added: {},\n    moved: {},\n    removed: {}\n  };\n  const resultMapMulti = {\n    added: {},\n    moved: {},\n    removed: {}\n  };\n  const pointResultMapping = {\n    in: \"added\",\n    move: \"moved\",\n    out: \"removed\"\n  };\n  let previousResultPoint = void 0;\n  let previousXValue = void 0;\n  const addToResultMap = (xValue, newPoint) => {\n    var _a;\n    const type = pointResultMapping[newPoint.change];\n    if (multiDatum) {\n      (_a = resultMapMulti[type])[xValue] ?? (_a[xValue] = []);\n      resultMapMulti[type][xValue].push(newPoint);\n    } else {\n      resultMapSingle[type][xValue] = newPoint;\n    }\n    previousResultPoint = newPoint;\n    previousXValue = transformIntegratedCategoryValue(xValue);\n  };\n  let oldIndex = 0;\n  let newIndex = 0;\n  let isXUnordered = false;\n  while (oldIndex < oldData.nodeData.length || newIndex < newData.nodeData.length) {\n    const before = oldData.nodeData[oldIndex];\n    const after = newData.nodeData[newIndex];\n    const bXValue = transformIntegratedCategoryValue(before?.xValue);\n    const aXValue = transformIntegratedCategoryValue(after?.xValue);\n    let resultPoint;\n    if (bXValue === aXValue) {\n      resultPoint = {\n        change: \"move\",\n        moveTo: calculateMoveTo(before.point.moveTo ?? false, after.point.moveTo),\n        from: before.point,\n        to: after.point\n      };\n      addToResultMap(before?.xValue, resultPoint);\n      oldIndex++;\n      newIndex++;\n    } else if (diff2?.removed.has(String(bXValue))) {\n      resultPoint = {\n        change: \"out\",\n        moveTo: before.point.moveTo ?? false,\n        from: before.point\n      };\n      addToResultMap(before?.xValue, resultPoint);\n      oldIndex++;\n    } else if (diff2?.added.has(String(aXValue))) {\n      resultPoint = {\n        change: \"in\",\n        moveTo: after.point.moveTo ?? false,\n        to: after.point\n      };\n      addToResultMap(after?.xValue, resultPoint);\n      newIndex++;\n    } else if (multiDatum && previousResultPoint && previousXValue === bXValue) {\n      resultPoint = {\n        ...previousResultPoint\n      };\n      addToResultMap(before?.xValue, resultPoint);\n      oldIndex++;\n    } else if (multiDatum && previousResultPoint && previousXValue === aXValue) {\n      resultPoint = {\n        ...previousResultPoint\n      };\n      addToResultMap(after?.xValue, resultPoint);\n      newIndex++;\n    } else {\n      isXUnordered = true;\n      break;\n    }\n    result.push(resultPoint);\n  }\n  let previousX = -Infinity;\n  isXUnordered || (isXUnordered = result.some((pathPoint) => {\n    const { change: marker, to: { x = -Infinity } = {} } = pathPoint;\n    if (marker === \"out\")\n      return;\n    const unordered = x < previousX;\n    previousX = x;\n    return unordered;\n  }));\n  if (isXUnordered) {\n    return { result: void 0, resultMap: void 0 };\n  }\n  backfillPathPointData(result, backfillSplitMode);\n  return { result, resultMap: multiDatum ? resultMapMulti : resultMapSingle };\n}\nfunction determinePathStatus(newData, oldData, pairData) {\n  let status = \"updated\";\n  const visible = (data) => {\n    return data.visible;\n  };\n  if (!visible(oldData) && visible(newData)) {\n    status = \"added\";\n  } else if (visible(oldData) && !visible(newData)) {\n    status = \"removed\";\n  } else {\n    for (let i = 0; i < pairData.length; i++) {\n      if (pairData[i].change !== \"move\")\n        break;\n      if (pairData[i].from?.x !== pairData[i].to?.x)\n        break;\n      if (pairData[i].from?.y !== pairData[i].to?.y)\n        break;\n      if (i === pairData.length - 1)\n        return \"no-op\";\n    }\n  }\n  return status;\n}\nfunction prepareLinePathPropertyAnimation(status, visibleToggleMode) {\n  const phase = visibleToggleMode === \"none\" ? \"updated\" : status;\n  const result = {\n    fromFn: (_path) => {\n      let mixin;\n      if (status === \"removed\") {\n        mixin = { finish: { visible: false } };\n      } else if (status === \"added\") {\n        mixin = { start: { visible: true } };\n      } else {\n        mixin = {};\n      }\n      return { phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[phase], ...mixin };\n    },\n    toFn: (_path) => {\n      return { phase: NODE_UPDATE_STATE_TO_PHASE_MAPPING[phase] };\n    }\n  };\n  if (visibleToggleMode === \"fade\") {\n    return {\n      fromFn: (path) => {\n        const opacity = status === \"added\" ? 0 : path.opacity;\n        return { opacity, ...result.fromFn(path) };\n      },\n      toFn: (path) => {\n        const opacity = status === \"removed\" ? 0 : 1;\n        return { opacity, ...result.toFn(path) };\n      }\n    };\n  }\n  return result;\n}\nfunction prepareLinePathAnimationFns(newData, oldData, pairData, visibleToggleMode, interpolation, render) {\n  const status = determinePathStatus(newData, oldData, pairData);\n  const removePhaseFn = (ratio2, path) => {\n    render(pairData, { move: 0, out: ratio2 }, path, interpolation);\n  };\n  const updatePhaseFn = (ratio2, path) => {\n    render(pairData, { move: ratio2 }, path, interpolation);\n  };\n  const addPhaseFn = (ratio2, path) => {\n    render(pairData, { move: 1, in: ratio2 }, path, interpolation);\n  };\n  const pathProperties = prepareLinePathPropertyAnimation(status, visibleToggleMode);\n  return { status, path: { addPhaseFn, updatePhaseFn, removePhaseFn }, pathProperties };\n}\nfunction prepareLinePathAnimation(newData, oldData, diff2, interpolation) {\n  const isCategoryBased = newData.scales.x?.type === \"category\";\n  const wasCategoryBased = oldData.scales.x?.type === \"category\";\n  if (isCategoryBased !== wasCategoryBased || !isScaleValid(newData.scales.x) || !isScaleValid(oldData.scales.x)) {\n    return;\n  }\n  const { result: pairData, resultMap: pairMap } = isCategoryBased ? pairCategoryData(newData, oldData, diff2) : pairContinuousData(newData, oldData);\n  let status = \"updated\";\n  if (oldData.visible && !newData.visible) {\n    status = \"removed\";\n  } else if (!oldData.visible && newData.visible) {\n    status = \"added\";\n  }\n  if (pairData === void 0 || pairMap === void 0) {\n    return;\n  }\n  const hasMotion = (diff2?.changed ?? true) || scalesChanged(newData, oldData) || status !== \"updated\";\n  const pathFns = prepareLinePathAnimationFns(newData, oldData, pairData, \"fade\", interpolation, renderPartialPath);\n  const marker = prepareMarkerAnimation(pairMap, status);\n  return { ...pathFns, marker, hasMotion };\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/lineInterpolationUtil.ts\nfunction toAxisValue(value) {\n  return transformIntegratedCategoryValue(value).valueOf();\n}\nfunction getAxisIndices({ data }, axisValues) {\n  return data.map((datum, datumIndex) => ({\n    xValue0Index: axisValues.indexOf(toAxisValue(datum.xValue0)),\n    xValue1Index: axisValues.indexOf(toAxisValue(datum.xValue1)),\n    datumIndex\n  }));\n}\nfunction validateAxisValuesOrder(axisValues, data) {\n  let x0 = -Infinity;\n  for (const axisValue of axisValues) {\n    const x = scale(axisValue, data.scales.x);\n    if (!Number.isFinite(x)) {\n      continue;\n    } else if (x < x0) {\n      return false;\n    } else {\n      x0 = x;\n    }\n  }\n  return true;\n}\nfunction getAxisValues(newData, oldData) {\n  const allAxisValues = /* @__PURE__ */ new Set();\n  for (const { xValue0, xValue1 } of newData.data) {\n    const xValue0Value = toAxisValue(xValue0);\n    const xValue1Value = toAxisValue(xValue1);\n    allAxisValues.add(xValue0Value).add(xValue1Value);\n  }\n  const newAxisValues = Array.from(allAxisValues).sort((a, b) => {\n    return scale(a, newData.scales.x) - scale(b, newData.scales.x);\n  });\n  const exclusivelyOldAxisValues = [];\n  for (const { xValue0, xValue1 } of oldData.data) {\n    const xValue0Value = toAxisValue(xValue0);\n    const xValue1Value = toAxisValue(xValue1);\n    if (!allAxisValues.has(xValue0Value)) {\n      allAxisValues.add(xValue0Value);\n      exclusivelyOldAxisValues.push(xValue0Value);\n    }\n    if (!allAxisValues.has(xValue1Value)) {\n      allAxisValues.add(xValue1Value);\n      exclusivelyOldAxisValues.push(xValue1Value);\n    }\n  }\n  exclusivelyOldAxisValues.sort((a, b) => {\n    return scale(a, oldData.scales.x) - scale(b, oldData.scales.x);\n  });\n  const axisValues = newAxisValues;\n  let insertionIndex = 0;\n  for (const oldValue of exclusivelyOldAxisValues) {\n    inner:\n      for (let i = axisValues.length; i > insertionIndex; i -= 1) {\n        const oldValueX = scale(oldValue, oldData.scales.x);\n        const newValueX = scale(axisValues[i], oldData.scales.x);\n        if (oldValueX > newValueX) {\n          insertionIndex = i + 1;\n          break inner;\n        }\n      }\n    axisValues.splice(insertionIndex, 0, oldValue);\n    insertionIndex += 1;\n  }\n  if (!validateAxisValuesOrder(axisValues, oldData))\n    return;\n  const oldDataAxisIndices = getAxisIndices(oldData, axisValues);\n  const newDataAxisIndices = getAxisIndices(newData, axisValues);\n  return { axisValues, oldDataAxisIndices, newDataAxisIndices };\n}\nfunction clipSpan(span, xValue0Index, xIndices) {\n  if (xIndices.xValue1Index === xIndices.xValue0Index + 1)\n    return span;\n  const range3 = spanRange(span);\n  const step = (range3[1].x - range3[0].x) / (xIndices.xValue1Index - xIndices.xValue0Index);\n  const start2 = range3[0].x + (xValue0Index - xIndices.xValue0Index) * step;\n  const end2 = start2 + step;\n  return clipSpanX(span, start2, end2);\n}\nfunction axisZeroSpan(span, data) {\n  const [r0, r1] = spanRange(span);\n  const y0 = scale(0, data.scales.y);\n  return rescaleSpan(span, { x: r0.x, y: y0 }, { x: r1.x, y: y0 });\n}\nfunction collapseSpan(span, data, axisIndices, indices, range3) {\n  let xValue;\n  let yValue;\n  if (indices.xValue0Index >= range3.xValue1Index) {\n    const datumIndex = axisIndices.findLast((i) => i.xValue1Index <= range3.xValue1Index)?.datumIndex;\n    const datum = datumIndex != null ? data.data[datumIndex] : void 0;\n    xValue = datum?.xValue1;\n    yValue = datum?.yValue1;\n  } else if (indices.xValue0Index <= range3.xValue0Index) {\n    const datumIndex = axisIndices.find((i) => i.xValue0Index >= range3.xValue0Index)?.datumIndex;\n    const datum = datumIndex != null ? data.data[datumIndex] : void 0;\n    xValue = datum?.xValue0;\n    yValue = datum?.yValue0;\n  }\n  if (xValue == null || yValue == null) {\n    return axisZeroSpan(span, data);\n  }\n  const x = scale(xValue, data.scales.x);\n  const y = scale(yValue, data.scales.y);\n  const point = { x, y };\n  return rescaleSpan(span, point, point);\n}\nfunction zeroDataSpan(spanDatum, zeroData) {\n  const newSpanXValue0 = toAxisValue(spanDatum.xValue0);\n  const newSpanXValue1 = toAxisValue(spanDatum.xValue1);\n  return zeroData?.find(\n    (span) => toAxisValue(span.xValue0) === newSpanXValue0 && toAxisValue(span.xValue1) === newSpanXValue1\n  )?.span;\n}\nfunction addSpan(newData, newAxisIndices, newIndices, oldZeroData, range3, out) {\n  const newSpanDatum = newData.data[newIndices.datumIndex];\n  const newSpan = newSpanDatum.span;\n  const zeroSpan = zeroDataSpan(newSpanDatum, oldZeroData);\n  if (zeroSpan != null) {\n    out.removed.push({ from: zeroSpan, to: zeroSpan });\n    out.moved.push({ from: zeroSpan, to: newSpan });\n    out.added.push({ from: newSpan, to: newSpan });\n  } else {\n    const oldSpan = collapseSpan(newSpan, newData, newAxisIndices, newIndices, range3);\n    out.added.push({ from: oldSpan, to: newSpan });\n  }\n}\nfunction removeSpan(oldData, oldAxisIndices, oldIndices, newZeroData, range3, out) {\n  const oldSpanDatum = oldData.data[oldIndices.datumIndex];\n  const oldSpan = oldSpanDatum.span;\n  const zeroSpan = zeroDataSpan(oldSpanDatum, newZeroData);\n  if (zeroSpan != null) {\n    out.removed.push({ from: oldSpan, to: oldSpan });\n    out.moved.push({ from: oldSpan, to: zeroSpan });\n    out.added.push({ from: zeroSpan, to: zeroSpan });\n  } else {\n    const newSpan = collapseSpan(oldSpan, oldData, oldAxisIndices, oldIndices, range3);\n    out.removed.push({ from: oldSpan, to: newSpan });\n  }\n}\nfunction alignSpanToContainingSpan(span, axisValues, preData, postData, postSpanIndices) {\n  const startXValue0 = axisValues[postSpanIndices.xValue0Index];\n  const startDatum = preData.data.find((spanDatum) => toAxisValue(spanDatum.xValue0) === startXValue0);\n  const endXValue1 = axisValues[postSpanIndices.xValue1Index];\n  const endDatum = preData.data.find((spanDatum) => toAxisValue(spanDatum.xValue1) === endXValue1);\n  if (startDatum == null || endDatum == null)\n    return;\n  const [{ x: x0 }, { x: x1 }] = spanRange(span);\n  const startX = scale(startDatum.xValue0, preData.scales.x);\n  const startY = scale(startDatum.yValue0, preData.scales.y);\n  const endX = scale(endDatum.xValue1, preData.scales.x);\n  const endY = scale(endDatum.yValue1, preData.scales.y);\n  let altSpan = postData.data[postSpanIndices.datumIndex].span;\n  altSpan = rescaleSpan(altSpan, { x: startX, y: startY }, { x: endX, y: endY });\n  altSpan = clipSpanX(altSpan, x0, x1);\n  return altSpan;\n}\nfunction appendSpanPhases(newData, oldData, axisValues, xValue0Index, newAxisIndices, oldAxisIndices, range3, out) {\n  const xValue1Index = xValue0Index + 1;\n  const oldIndices = oldAxisIndices.find((i) => i.xValue0Index <= xValue0Index && i.xValue1Index >= xValue1Index);\n  const newIndices = newAxisIndices.find((i) => i.xValue0Index <= xValue0Index && i.xValue1Index >= xValue1Index);\n  const oldZeroData = oldData.zeroData;\n  const newZeroData = newData.zeroData;\n  if (oldIndices == null && newIndices != null) {\n    addSpan(newData, newAxisIndices, newIndices, oldZeroData, range3, out);\n    return;\n  } else if (oldIndices != null && newIndices == null) {\n    removeSpan(oldData, oldAxisIndices, oldIndices, newZeroData, range3, out);\n    return;\n  } else if (oldIndices == null || newIndices == null) {\n    return;\n  }\n  let ordering;\n  if (oldIndices.xValue0Index === newIndices.xValue0Index && oldIndices.xValue1Index === newIndices.xValue1Index) {\n    ordering = 0;\n  } else if (oldIndices.xValue0Index <= newIndices.xValue0Index && oldIndices.xValue1Index >= newIndices.xValue1Index) {\n    ordering = -1;\n  } else if (oldIndices.xValue0Index >= newIndices.xValue0Index && oldIndices.xValue1Index <= newIndices.xValue1Index) {\n    ordering = 1;\n  } else {\n    ordering = 0;\n  }\n  const oldSpanDatum = oldData.data[oldIndices.datumIndex];\n  const clippedOldSpanOldScale = clipSpan(oldSpanDatum.span, xValue0Index, oldIndices);\n  const newSpanDatum = newData.data[newIndices.datumIndex];\n  const clippedNewSpanNewScale = clipSpan(newSpanDatum.span, xValue0Index, newIndices);\n  if (ordering === 1) {\n    const clippedPostRemoveOldSpanOldScale = alignSpanToContainingSpan(\n      clippedOldSpanOldScale,\n      axisValues,\n      oldData,\n      newData,\n      newIndices\n    );\n    if (clippedPostRemoveOldSpanOldScale != null) {\n      out.removed.push({ from: clippedOldSpanOldScale, to: clippedPostRemoveOldSpanOldScale });\n      out.moved.push({ from: clippedPostRemoveOldSpanOldScale, to: clippedNewSpanNewScale });\n      out.added.push({ from: clippedNewSpanNewScale, to: clippedNewSpanNewScale });\n    } else {\n      removeSpan(oldData, oldAxisIndices, oldIndices, newZeroData, range3, out);\n    }\n  } else if (ordering === -1) {\n    const clippedPreAddedNewSpanNewScale = alignSpanToContainingSpan(\n      clippedNewSpanNewScale,\n      axisValues,\n      newData,\n      oldData,\n      oldIndices\n    );\n    if (clippedPreAddedNewSpanNewScale != null) {\n      out.removed.push({ from: clippedOldSpanOldScale, to: clippedOldSpanOldScale });\n      out.moved.push({ from: clippedOldSpanOldScale, to: clippedPreAddedNewSpanNewScale });\n      out.added.push({ from: clippedPreAddedNewSpanNewScale, to: clippedNewSpanNewScale });\n    } else {\n      addSpan(newData, newAxisIndices, newIndices, oldZeroData, range3, out);\n    }\n  } else {\n    out.removed.push({ from: clippedOldSpanOldScale, to: clippedOldSpanOldScale });\n    out.moved.push({ from: clippedOldSpanOldScale, to: clippedNewSpanNewScale });\n    out.added.push({ from: clippedNewSpanNewScale, to: clippedNewSpanNewScale });\n  }\n}\nfunction phaseAnimation(axisContext, newData, oldData, out) {\n  const { axisValues, oldDataAxisIndices, newDataAxisIndices } = axisContext;\n  const range3 = {\n    xValue0Index: Math.max(\n      oldDataAxisIndices.at(0)?.xValue0Index ?? -Infinity,\n      newDataAxisIndices.at(0)?.xValue0Index ?? -Infinity\n    ),\n    xValue1Index: Math.min(\n      oldDataAxisIndices.at(-1)?.xValue1Index ?? Infinity,\n      newDataAxisIndices.at(-1)?.xValue1Index ?? Infinity\n    )\n  };\n  for (let xValue0Index = 0; xValue0Index < axisValues.length - 1; xValue0Index += 1) {\n    appendSpanPhases(\n      newData,\n      oldData,\n      axisValues,\n      xValue0Index,\n      newDataAxisIndices,\n      oldDataAxisIndices,\n      range3,\n      out\n    );\n  }\n}\nfunction resetAnimation(newData, oldData, out) {\n  for (const oldSpanDatum of oldData.data) {\n    const oldSpan = oldSpanDatum.span;\n    const zeroSpan = zeroDataSpan(oldSpanDatum, oldData.zeroData) ?? axisZeroSpan(oldSpan, oldData);\n    out.removed.push({ from: oldSpan, to: zeroSpan });\n  }\n  for (const newSpanDatum of newData.data) {\n    const newSpan = newSpanDatum.span;\n    const zeroSpan = zeroDataSpan(newSpanDatum, newData.zeroData) ?? axisZeroSpan(newSpan, newData);\n    out.added.push({ from: zeroSpan, to: newSpan });\n  }\n}\nfunction pairUpSpans(newData, oldData) {\n  const out = {\n    removed: [],\n    moved: [],\n    added: []\n  };\n  const axisContext = getAxisValues(newData, oldData);\n  if (axisContext == null) {\n    resetAnimation(newData, oldData, out);\n  } else {\n    phaseAnimation(axisContext, newData, oldData, out);\n  }\n  return out;\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/areaUtil.ts\nfunction plotFillSpans(ratio2, path, spans, fillPhantomSpans) {\n  for (let i = 0; i < spans.length; i += 1) {\n    const span = spans[i];\n    const reversedPhantomSpan = fillPhantomSpans[i];\n    plotInterpolatedSpans(path.path, span.from, span.to, ratio2, 1 /* MoveTo */, false);\n    plotInterpolatedSpans(\n      path.path,\n      reversedPhantomSpan.from,\n      reversedPhantomSpan.to,\n      ratio2,\n      2 /* LineTo */,\n      true\n    );\n    path.path.closePath();\n  }\n}\nfunction prepareAreaFillAnimationFns(status, spans, fillPhantomSpans, visibleToggleMode) {\n  const removePhaseFn = (ratio2, path) => plotFillSpans(ratio2, path, spans.removed, fillPhantomSpans.removed);\n  const updatePhaseFn = (ratio2, path) => plotFillSpans(ratio2, path, spans.moved, fillPhantomSpans.moved);\n  const addPhaseFn = (ratio2, path) => plotFillSpans(ratio2, path, spans.added, fillPhantomSpans.added);\n  const pathProperties = prepareLinePathPropertyAnimation(status, visibleToggleMode);\n  return { status, path: { addPhaseFn, updatePhaseFn, removePhaseFn }, pathProperties };\n}\nfunction plotStrokeSpans(ratio2, path, spans) {\n  for (const span of spans) {\n    plotInterpolatedSpans(path.path, span.from, span.to, ratio2, 1 /* MoveTo */, false);\n  }\n}\nfunction prepareAreaStrokeAnimationFns(status, spans, visibleToggleMode) {\n  const removePhaseFn = (ratio2, path) => plotStrokeSpans(ratio2, path, spans.removed);\n  const updatePhaseFn = (ratio2, path) => plotStrokeSpans(ratio2, path, spans.moved);\n  const addPhaseFn = (ratio2, path) => plotStrokeSpans(ratio2, path, spans.added);\n  const pathProperties = prepareLinePathPropertyAnimation(status, visibleToggleMode);\n  return { status, path: { addPhaseFn, updatePhaseFn, removePhaseFn }, pathProperties };\n}\nfunction prepareAreaPathAnimation(newData, oldData) {\n  const isCategoryBased = newData.scales.x?.type === \"category\";\n  const wasCategoryBased = oldData.scales.x?.type === \"category\";\n  if (isCategoryBased !== wasCategoryBased || !isScaleValid(newData.scales.x) || !isScaleValid(oldData.scales.x)) {\n    return;\n  }\n  let status = \"updated\";\n  if (oldData.visible && !newData.visible) {\n    status = \"removed\";\n  } else if (!oldData.visible && newData.visible) {\n    status = \"added\";\n  }\n  const fillSpans = pairUpSpans(\n    { scales: newData.scales, data: newData.fillData.spans, visible: newData.visible },\n    { scales: oldData.scales, data: oldData.fillData.spans, visible: oldData.visible }\n  );\n  const fillPhantomSpans = pairUpSpans(\n    { scales: newData.scales, data: newData.fillData.phantomSpans, visible: newData.visible },\n    { scales: oldData.scales, data: oldData.fillData.phantomSpans, visible: oldData.visible }\n  );\n  const strokeSpans = pairUpSpans(\n    {\n      scales: newData.scales,\n      data: newData.strokeData.spans,\n      visible: newData.visible,\n      zeroData: newData.fillData.phantomSpans\n    },\n    {\n      scales: oldData.scales,\n      data: oldData.strokeData.spans,\n      visible: oldData.visible,\n      zeroData: oldData.fillData.phantomSpans\n    }\n  );\n  const fadeMode = \"none\";\n  const fill = prepareAreaFillAnimationFns(status, fillSpans, fillPhantomSpans, fadeMode);\n  const stroke = prepareAreaStrokeAnimationFns(status, strokeSpans, fadeMode);\n  return { status, fill, stroke };\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/areaSeries.ts\nvar CROSS_FILTER_AREA_FILL_OPACITY_FACTOR = 0.125;\nvar CROSS_FILTER_AREA_STROKE_OPACITY_FACTOR = 0.25;\nvar AreaSeries = class extends CartesianSeries {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      directionKeys: DEFAULT_CARTESIAN_DIRECTION_KEYS,\n      directionNames: DEFAULT_CARTESIAN_DIRECTION_NAMES,\n      pathsPerSeries: [\"fill\", \"stroke\"],\n      pathsZIndexSubOrderOffset: [0, 1e3],\n      hasMarkers: true,\n      markerSelectionGarbageCollection: false,\n      pickModes: [2 /* AXIS_ALIGNED */, 0 /* EXACT_SHAPE_MATCH */],\n      animationResetFns: {\n        path: buildResetPathFn({ getVisible: () => this.visible, getOpacity: () => this.getOpacity() }),\n        label: resetLabelFn,\n        marker: (node, datum) => ({ ...resetMarkerFn(node), ...resetMarkerPositionFn(node, datum) })\n      }\n    });\n    this.properties = new AreaSeriesProperties();\n  }\n  async processData(dataController) {\n    if (this.data == null || !this.properties.isValid()) {\n      return;\n    }\n    const { data, visible, seriesGrouping: { groupIndex = this.id, stackCount = 1 } = {} } = this;\n    const { xKey, yKey, yFilterKey, connectMissingData, normalizedTo } = this.properties;\n    const animationEnabled = !this.ctx.animationManager.isSkipped();\n    const xScale = this.axes[\"x\" /* X */]?.scale;\n    const yScale = this.axes[\"y\" /* Y */]?.scale;\n    const { xScaleType, yScaleType } = this.getScaleInformation({ xScale, yScale });\n    const idMap = {\n      value: `area-stack-${groupIndex}-yValue`,\n      values: `area-stack-${groupIndex}-yValues`,\n      stack: `area-stack-${groupIndex}-yValue-stack`,\n      marker: `area-stack-${groupIndex}-yValues-marker`\n    };\n    const extraProps = [];\n    if (isDefined(normalizedTo)) {\n      extraProps.push(normaliseGroupTo(Object.values(idMap), normalizedTo, \"range\"));\n    }\n    if (animationEnabled) {\n      extraProps.push(animationValidation());\n    }\n    const common = { invalidValue: null };\n    if (connectMissingData && stackCount > 1) {\n      common.invalidValue = 0;\n    }\n    if (!visible) {\n      common.forceValue = 0;\n    }\n    await this.requestDataModel(dataController, data, {\n      props: [\n        keyProperty(xKey, xScaleType, { id: \"xValue\" }),\n        valueProperty(yKey, yScaleType, { id: `yValueRaw`, ...common }),\n        ...yFilterKey != null ? [valueProperty(yFilterKey, yScaleType, { id: \"yFilterRaw\" })] : [],\n        ...groupStackValueProperty(yKey, yScaleType, { id: `yValueStack`, ...common, groupId: idMap.stack }),\n        valueProperty(yKey, yScaleType, { id: `yValue`, ...common, groupId: idMap.value }),\n        ...groupAccumulativeValueProperty(\n          yKey,\n          \"window\",\n          \"current\",\n          { id: `yValueEnd`, ...common, groupId: idMap.values },\n          yScaleType\n        ),\n        ...groupAccumulativeValueProperty(\n          yKey,\n          \"normal\",\n          \"current\",\n          { id: `yValueCumulative`, ...common, groupId: idMap.marker },\n          yScaleType\n        ),\n        ...extraProps\n      ],\n      groupByKeys: true,\n      groupByData: false\n    });\n    this.animationState.transition(\"updateData\");\n  }\n  getSeriesDomain(direction) {\n    const { processedData, dataModel, axes } = this;\n    if (!processedData || !dataModel || processedData.data.length === 0)\n      return [];\n    const yAxis = axes[\"y\" /* Y */];\n    const keyDef = dataModel.resolveProcessedDataDefById(this, `xValue`);\n    const keys = dataModel.getDomain(this, `xValue`, \"key\", processedData);\n    const yExtent = dataModel.getDomain(this, `yValueEnd`, \"value\", processedData);\n    if (direction === \"x\" /* X */) {\n      if (keyDef?.def.type === \"key\" && keyDef.def.valueType === \"category\") {\n        return keys;\n      }\n      return fixNumericExtent(extent(keys));\n    } else if (yAxis instanceof LogAxis || yAxis instanceof TimeAxis) {\n      return fixNumericExtent(yExtent);\n    } else {\n      const fixedYExtent = [yExtent[0] > 0 ? 0 : yExtent[0], yExtent[1] < 0 ? 0 : yExtent[1]];\n      return fixNumericExtent(fixedYExtent);\n    }\n  }\n  async createNodeData() {\n    const { axes, data, processedData: { data: groupedData } = {}, dataModel } = this;\n    const xAxis = axes[\"x\" /* X */];\n    const yAxis = axes[\"y\" /* Y */];\n    if (!xAxis || !yAxis || !data || !dataModel || !this.properties.isValid()) {\n      return;\n    }\n    const {\n      yKey,\n      xKey,\n      yFilterKey,\n      marker,\n      label,\n      fill: seriesFill,\n      stroke: seriesStroke,\n      connectMissingData\n    } = this.properties;\n    const { scale: xScale } = xAxis;\n    const { scale: yScale } = yAxis;\n    const { isContinuousY } = this.getScaleInformation({ xScale, yScale });\n    const xOffset = (xScale.bandwidth ?? 0) / 2;\n    const defs = dataModel.resolveProcessedDataDefsByIds(this, [`yValueEnd`, `yValueRaw`, `yValueCumulative`]);\n    const yFilterIndex = yFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, \"yFilterRaw\") : void 0;\n    const yValueStackIndex = dataModel.resolveProcessedDataIndexById(this, \"yValueStack\");\n    const createMarkerCoordinate = (xDatum, yEnd, rawYDatum) => {\n      let currY;\n      if (isDefined(this.properties.normalizedTo) ? isContinuousY && isContinuous(rawYDatum) : !isNaN(rawYDatum)) {\n        currY = yEnd;\n      }\n      return {\n        x: xScale.convert(xDatum) + xOffset,\n        y: yScale.convert(currY),\n        size: marker.size\n      };\n    };\n    const itemId = yKey;\n    const labelData = [];\n    const markerData = [];\n    const { visibleSameStackCount } = this.ctx.seriesStateManager.getVisiblePeerGroupIndex(this);\n    let datumIdx = -1;\n    let crossFiltering = false;\n    groupedData?.forEach((datumGroup) => {\n      const {\n        keys,\n        keys: [xDatum],\n        datum: datumArray,\n        values: valuesArray\n      } = datumGroup;\n      valuesArray.forEach((values, valueIdx) => {\n        datumIdx++;\n        const seriesDatum = datumArray[valueIdx];\n        const dataValues2 = dataModel.resolveProcessedDataDefsValues(defs, { keys, values });\n        const { yValueRaw: yDatum, yValueCumulative, yValueEnd } = dataValues2;\n        const validPoint = Number.isFinite(yDatum);\n        const point = createMarkerCoordinate(xDatum, +yValueCumulative, yDatum);\n        const selected = yFilterIndex != null ? values[yFilterIndex] === yDatum : void 0;\n        if (selected === false) {\n          crossFiltering = true;\n        }\n        if (validPoint && marker) {\n          markerData.push({\n            index: datumIdx,\n            series: this,\n            itemId,\n            datum: seriesDatum,\n            midPoint: { x: point.x, y: point.y },\n            cumulativeValue: yValueEnd,\n            yValue: yDatum,\n            xValue: xDatum,\n            yKey,\n            xKey,\n            point,\n            fill: marker.fill ?? seriesFill,\n            stroke: marker.stroke ?? seriesStroke,\n            strokeWidth: marker.strokeWidth ?? this.getStrokeWidth(this.properties.strokeWidth),\n            selected\n          });\n        }\n        if (validPoint && label) {\n          const labelText = this.getLabelText(\n            label,\n            {\n              value: yDatum,\n              datum: seriesDatum,\n              xKey,\n              yKey,\n              xName: this.properties.xName,\n              yName: this.properties.yName\n            },\n            formatValue\n          );\n          labelData.push({\n            index: datumIdx,\n            series: this,\n            itemId: yKey,\n            datum: seriesDatum,\n            x: point.x,\n            y: point.y,\n            labelText\n          });\n        }\n      });\n    });\n    const { interpolation } = this.properties;\n    const interpolatePoints = (points) => {\n      let spans;\n      const pointsIter = points.map((point) => point.point);\n      switch (interpolation.type) {\n        case \"linear\":\n          spans = linearPoints(pointsIter);\n          break;\n        case \"smooth\":\n          spans = smoothPoints(pointsIter, interpolation.tension);\n          break;\n        case \"step\":\n          spans = stepPoints(pointsIter, interpolation.position);\n          break;\n      }\n      return spans.map((span, i) => ({\n        span,\n        xValue0: points[i].xDatum,\n        yValue0: points[i].yDatum,\n        xValue1: points[i + 1].xDatum,\n        yValue1: points[i + 1].yDatum\n      }));\n    };\n    const spansForPoints = (points) => {\n      return points.flatMap((p) => {\n        return Array.isArray(p) ? interpolatePoints(p) : new Array(p.skip).fill(null);\n      });\n    };\n    const dataValues = groupedData?.flatMap((datumGroup) => {\n      const {\n        keys: [xDatum],\n        values: valuesArray\n      } = datumGroup;\n      return valuesArray.map((values) => ({ xDatum, values }));\n    });\n    const createPoint = (xDatum, yDatum) => ({\n      point: {\n        x: xScale.convert(xDatum) + xOffset,\n        y: yScale.convert(yDatum)\n      },\n      xDatum,\n      yDatum\n    });\n    const getSeriesSpans = (index) => {\n      const points = [];\n      if (dataValues == null)\n        return [];\n      for (let i = 0; i < dataValues.length; i += 1) {\n        const { xDatum, values } = dataValues[i];\n        const yValueStack = values[yValueStackIndex];\n        const yDatum = yValueStack[index];\n        const yDatumIsFinite = Number.isFinite(yDatum);\n        if (connectMissingData && !yDatumIsFinite)\n          continue;\n        const lastYValueStack = dataValues[i - 1]?.values[yValueStackIndex];\n        const nextYValueStack = dataValues[i + 1]?.values[yValueStackIndex];\n        let yValueEndBackwards = 0;\n        let yValueEndForwards = 0;\n        for (let j = 0; j <= index; j += 1) {\n          const value = yValueStack[j];\n          if (Number.isFinite(value)) {\n            const lastWasFinite = lastYValueStack == null || Number.isFinite(lastYValueStack[j]);\n            const nextWasFinite = nextYValueStack == null || Number.isFinite(nextYValueStack[j]);\n            if (lastWasFinite) {\n              yValueEndBackwards += value;\n            }\n            if (nextWasFinite) {\n              yValueEndForwards += value;\n            }\n          }\n        }\n        const currentPoints = points[points.length - 1];\n        if (!connectMissingData && (yValueEndBackwards !== yValueEndForwards || !yDatumIsFinite)) {\n          if (!yDatumIsFinite && Array.isArray(currentPoints) && currentPoints.length === 1) {\n            points[points.length - 1] = { skip: 1 };\n          } else {\n            const pointBackwards = createPoint(xDatum, yValueEndBackwards);\n            const pointForwards = createPoint(xDatum, yValueEndForwards);\n            if (Array.isArray(currentPoints)) {\n              currentPoints.push(pointBackwards);\n            } else if (currentPoints != null) {\n              currentPoints.skip += 1;\n            }\n            points.push(yDatumIsFinite ? [pointForwards] : { skip: 0 });\n          }\n        } else {\n          const yValueEnd = Math.max(yValueEndBackwards, yValueEndForwards);\n          const point = createPoint(xDatum, yValueEnd);\n          if (Array.isArray(currentPoints)) {\n            currentPoints.push(point);\n          } else if (currentPoints != null) {\n            currentPoints.skip += 1;\n            points.push([point]);\n          } else {\n            points.push([point]);\n          }\n        }\n      }\n      return spansForPoints(points);\n    };\n    const stackIndex = this.seriesGrouping?.stackIndex ?? 0;\n    const getAxisSpans = () => {\n      if (dataValues == null)\n        return [];\n      const yValueZeroPoints = dataValues.map(({ xDatum, values }) => {\n        const yValueStack = values[yValueStackIndex];\n        const yDatum = yValueStack[stackIndex];\n        if (connectMissingData && !Number.isFinite(yDatum))\n          return;\n        return createPoint(xDatum, 0);\n      }).filter((x) => x != null);\n      return interpolatePoints(yValueZeroPoints);\n    };\n    const currentSeriesSpans = getSeriesSpans(stackIndex);\n    const phantomSpans = currentSeriesSpans.map(() => null);\n    for (let j = stackIndex - 1; j >= -1; j -= 1) {\n      let spans;\n      for (let i = 0; i < phantomSpans.length; i += 1) {\n        if (phantomSpans[i] != null)\n          continue;\n        spans ?? (spans = j !== -1 ? getSeriesSpans(j) : getAxisSpans());\n        phantomSpans[i] = spans[i];\n      }\n    }\n    const fillSpans = currentSeriesSpans.map((span, index) => span ?? phantomSpans[index]);\n    const strokeSpans = currentSeriesSpans.filter((span) => span != null);\n    const context = {\n      itemId,\n      fillData: { itemId, spans: fillSpans, phantomSpans },\n      strokeData: { itemId, spans: strokeSpans },\n      labelData,\n      nodeData: markerData,\n      scales: this.calculateScaling(),\n      visible: this.visible,\n      stackVisible: visibleSameStackCount > 0,\n      crossFiltering\n    };\n    return context;\n  }\n  isPathOrSelectionDirty() {\n    return this.properties.marker.isDirty();\n  }\n  markerFactory() {\n    const { shape } = this.properties.marker;\n    const MarkerShape = getMarker(shape);\n    return new MarkerShape();\n  }\n  async updatePathNodes(opts) {\n    const { opacity, visible, animationEnabled } = opts;\n    const [fill, stroke] = opts.paths;\n    const crossFiltering = this.contextNodeData?.crossFiltering === true;\n    const strokeWidth = this.getStrokeWidth(this.properties.strokeWidth);\n    stroke.setProperties({\n      fill: void 0,\n      lineJoin: stroke.lineCap = \"round\",\n      pointerEvents: 1 /* None */,\n      stroke: this.properties.stroke,\n      strokeWidth,\n      strokeOpacity: this.properties.strokeOpacity * (crossFiltering ? CROSS_FILTER_AREA_STROKE_OPACITY_FACTOR : 1),\n      lineDash: this.properties.lineDash,\n      lineDashOffset: this.properties.lineDashOffset,\n      opacity,\n      visible: visible || animationEnabled\n    });\n    fill.setProperties({\n      stroke: void 0,\n      lineJoin: \"round\",\n      pointerEvents: 1 /* None */,\n      fill: this.properties.fill,\n      fillOpacity: this.properties.fillOpacity * (crossFiltering ? CROSS_FILTER_AREA_FILL_OPACITY_FACTOR : 1),\n      fillShadow: this.properties.shadow,\n      opacity,\n      visible: visible || animationEnabled\n    });\n    updateClipPath(this, stroke);\n    updateClipPath(this, fill);\n  }\n  async updatePaths(opts) {\n    this.updateAreaPaths(opts.paths, opts.contextData);\n  }\n  updateAreaPaths(paths, contextData) {\n    for (const path of paths) {\n      path.visible = contextData.visible;\n    }\n    if (contextData.visible) {\n      this.updateFillPath(paths, contextData);\n      this.updateStrokePath(paths, contextData);\n    } else {\n      for (const path of paths) {\n        path.path.clear();\n        path.checkPathDirty();\n      }\n    }\n  }\n  updateFillPath(paths, contextData) {\n    const { spans, phantomSpans } = contextData.fillData;\n    const [fill] = paths;\n    const { path } = fill;\n    path.clear(true);\n    for (let i = 0; i < spans.length; i += 1) {\n      const { span } = spans[i];\n      const phantomSpan = phantomSpans[i].span;\n      plotSpan(path, span, 1 /* MoveTo */, false);\n      plotSpan(path, phantomSpan, 2 /* LineTo */, true);\n      path.closePath();\n    }\n    fill.checkPathDirty();\n  }\n  updateStrokePath(paths, contextData) {\n    const { spans } = contextData.strokeData;\n    const [, stroke] = paths;\n    const { path } = stroke;\n    path.clear(true);\n    for (const { span } of spans) {\n      plotSpan(path, span, 1 /* MoveTo */, false);\n    }\n    stroke.checkPathDirty();\n  }\n  async updateMarkerSelection(opts) {\n    const { nodeData, markerSelection } = opts;\n    const markersEnabled = this.properties.marker.enabled || this.contextNodeData?.crossFiltering === true;\n    if (this.properties.marker.isDirty()) {\n      markerSelection.clear();\n      markerSelection.cleanup();\n    }\n    return markerSelection.update(markersEnabled ? nodeData : []);\n  }\n  async updateMarkerNodes(opts) {\n    const { markerSelection, isHighlight: highlighted } = opts;\n    const { xKey, yKey, marker, fill, stroke, strokeWidth, fillOpacity, strokeOpacity, highlightStyle } = this.properties;\n    const baseStyle = mergeDefaults(highlighted && highlightStyle.item, marker.getStyle(), {\n      fill,\n      stroke,\n      strokeWidth,\n      fillOpacity,\n      strokeOpacity\n    });\n    markerSelection.each((node, datum) => {\n      this.updateMarkerStyle(node, marker, { datum, highlighted, xKey, yKey }, baseStyle, {\n        selected: datum.selected\n      });\n    });\n    if (!highlighted) {\n      this.properties.marker.markClean();\n    }\n  }\n  async updateLabelSelection(opts) {\n    const { labelData, labelSelection } = opts;\n    return labelSelection.update(labelData);\n  }\n  async updateLabelNodes(opts) {\n    const { labelSelection } = opts;\n    const { enabled: labelEnabled, fontStyle, fontWeight, fontSize, fontFamily, color } = this.properties.label;\n    labelSelection.each((text, datum) => {\n      const { x, y, labelText } = datum;\n      if (labelText && labelEnabled && this.visible) {\n        text.fontStyle = fontStyle;\n        text.fontWeight = fontWeight;\n        text.fontSize = fontSize;\n        text.fontFamily = fontFamily;\n        text.textAlign = \"center\";\n        text.textBaseline = \"bottom\";\n        text.text = labelText;\n        text.x = x;\n        text.y = y - 10;\n        text.fill = color;\n        text.visible = true;\n      } else {\n        text.visible = false;\n      }\n    });\n  }\n  getTooltipHtml(nodeDatum) {\n    const { id: seriesId, axes, dataModel } = this;\n    const { xKey, xName, yName, tooltip, marker } = this.properties;\n    const { yKey, xValue, yValue, datum, itemId } = nodeDatum;\n    const xAxis = axes[\"x\" /* X */];\n    const yAxis = axes[\"y\" /* Y */];\n    if (!this.properties.isValid() || !(xAxis && yAxis && isFiniteNumber(yValue)) || !dataModel) {\n      return EMPTY_TOOLTIP_CONTENT;\n    }\n    const xString = xAxis.formatDatum(xValue);\n    const yString = yAxis.formatDatum(yValue);\n    const title = sanitizeHtml(yName);\n    const content = sanitizeHtml(xString + \": \" + yString);\n    const baseStyle = mergeDefaults({ fill: this.properties.fill }, marker.getStyle(), {\n      stroke: this.properties.stroke,\n      strokeWidth: this.properties.strokeWidth\n    });\n    const { fill: color } = this.getMarkerStyle(\n      marker,\n      { datum: nodeDatum, xKey, yKey, highlighted: false },\n      baseStyle\n    );\n    return tooltip.toTooltipHtml(\n      { title, content, backgroundColor: color },\n      {\n        datum,\n        itemId,\n        xKey,\n        xName,\n        yKey,\n        yName,\n        color,\n        title,\n        seriesId\n      }\n    );\n  }\n  getLegendData(legendType) {\n    if (!this.data?.length || !this.properties.isValid() || !this.properties.showInLegend || legendType !== \"category\") {\n      return [];\n    }\n    const {\n      yKey,\n      yName,\n      fill,\n      stroke,\n      fillOpacity,\n      strokeOpacity,\n      strokeWidth,\n      lineDash,\n      marker,\n      visible,\n      legendItemName\n    } = this.properties;\n    const useAreaFill = !marker.enabled || marker.fill === void 0;\n    return [\n      {\n        legendType,\n        id: this.id,\n        itemId: yKey,\n        seriesId: this.id,\n        enabled: visible,\n        label: {\n          text: legendItemName ?? yName ?? yKey\n        },\n        symbols: [\n          {\n            marker: {\n              shape: marker.shape,\n              fill: useAreaFill ? fill : marker.fill,\n              fillOpacity: useAreaFill ? fillOpacity : marker.fillOpacity,\n              stroke: marker.stroke ?? stroke,\n              strokeOpacity: marker.strokeOpacity ?? strokeOpacity,\n              strokeWidth: marker.strokeWidth ?? 0,\n              enabled: marker.enabled || strokeWidth <= 0\n            },\n            line: {\n              stroke,\n              strokeOpacity,\n              strokeWidth,\n              lineDash\n            }\n          }\n        ],\n        legendItemName\n      }\n    ];\n  }\n  animateEmptyUpdateReady(animationData) {\n    const { markerSelection, labelSelection, contextData, paths } = animationData;\n    const { animationManager } = this.ctx;\n    this.updateAreaPaths(paths, contextData);\n    pathSwipeInAnimation(this, animationManager, ...paths);\n    resetMotion([markerSelection], resetMarkerPositionFn);\n    markerSwipeScaleInAnimation(this, animationManager, markerSelection);\n    seriesLabelFadeInAnimation(this, \"labels\", animationManager, labelSelection);\n  }\n  animateReadyResize(animationData) {\n    const { contextData, paths } = animationData;\n    this.updateAreaPaths(paths, contextData);\n    super.animateReadyResize(animationData);\n  }\n  animateWaitingUpdateReady(animationData) {\n    const { animationManager } = this.ctx;\n    const { markerSelection, labelSelection, contextData, paths, previousContextData } = animationData;\n    const [fill, stroke] = paths;\n    if (fill == null && stroke == null)\n      return;\n    this.resetMarkerAnimation(animationData);\n    this.resetLabelAnimation(animationData);\n    const update = () => {\n      this.resetPathAnimation(animationData);\n      this.updateAreaPaths(paths, contextData);\n    };\n    const skip = () => {\n      animationManager.skipCurrentBatch();\n      update();\n    };\n    if (contextData == null || previousContextData == null) {\n      update();\n      markerFadeInAnimation(this, animationManager, \"added\", markerSelection);\n      pathFadeInAnimation(this, \"fill_path_properties\", animationManager, \"add\", fill);\n      pathFadeInAnimation(this, \"stroke_path_properties\", animationManager, \"add\", stroke);\n      seriesLabelFadeInAnimation(this, \"labels\", animationManager, labelSelection);\n      return;\n    }\n    if (contextData.crossFiltering !== previousContextData.crossFiltering) {\n      skip();\n      return;\n    }\n    const fns = prepareAreaPathAnimation(contextData, previousContextData);\n    if (fns === void 0) {\n      skip();\n      return;\n    } else if (fns.status === \"no-op\") {\n      return;\n    }\n    markerFadeInAnimation(this, animationManager, void 0, markerSelection);\n    fromToMotion(this.id, \"fill_path_properties\", animationManager, [fill], fns.fill.pathProperties);\n    pathMotion(this.id, \"fill_path_update\", animationManager, [fill], fns.fill.path);\n    fromToMotion(this.id, \"stroke_path_properties\", animationManager, [stroke], fns.stroke.pathProperties);\n    pathMotion(this.id, \"stroke_path_update\", animationManager, [stroke], fns.stroke.path);\n    seriesLabelFadeInAnimation(this, \"labels\", animationManager, labelSelection);\n    this.ctx.animationManager.animate({\n      id: this.id,\n      groupId: \"reset_after_animation\",\n      phase: \"trailing\",\n      from: {},\n      to: {},\n      onComplete: () => this.updateAreaPaths(paths, contextData)\n    });\n  }\n  isLabelEnabled() {\n    return this.properties.label.enabled;\n  }\n  nodeFactory() {\n    return new Group();\n  }\n  getFormattedMarkerStyle(datum) {\n    const { xKey, yKey } = datum;\n    return this.getMarkerStyle(this.properties.marker, { datum, xKey, yKey, highlighted: true });\n  }\n  computeFocusBounds(opts) {\n    return computeMarkerFocusBounds(this, opts);\n  }\n};\nAreaSeries.className = \"AreaSeries\";\nAreaSeries.type = \"area\";\n\n// packages/ag-charts-community/src/chart/series/cartesian/areaSeriesModule.ts\nvar AreaSeriesModule = {\n  type: \"series\",\n  optionsKey: \"series[]\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\"],\n  identifier: \"area\",\n  moduleFactory: (ctx) => new AreaSeries(ctx),\n  stackable: true,\n  tooltipDefaults: { range: \"nearest\" },\n  defaultAxes: [\n    {\n      type: \"number\" /* NUMBER */,\n      position: \"left\" /* LEFT */\n    },\n    {\n      type: \"category\" /* CATEGORY */,\n      position: \"bottom\" /* BOTTOM */\n    }\n  ],\n  themeTemplate: {\n    series: {\n      nodeClickRange: \"nearest\",\n      tooltip: { position: { type: \"node\" } },\n      fillOpacity: 0.8,\n      strokeOpacity: 1,\n      strokeWidth: 0,\n      lineDash: [0],\n      lineDashOffset: 0,\n      shadow: {\n        enabled: false,\n        color: DEFAULT_SHADOW_COLOUR,\n        xOffset: 3,\n        yOffset: 3,\n        blur: 5\n      },\n      interpolation: {\n        type: \"linear\",\n        // @ts-expect-error - users shouldn't specify all options, but we have to for theming to work\n        tension: 1,\n        position: \"end\"\n      },\n      marker: {\n        enabled: false,\n        shape: \"circle\",\n        size: 7,\n        strokeWidth: 0\n      },\n      label: {\n        enabled: false,\n        fontSize: 12,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_LABEL_COLOUR\n      }\n    }\n  },\n  paletteFactory: (params) => {\n    const { marker } = markerPaletteFactory(params);\n    return { fill: marker.fill, stroke: marker.stroke, marker };\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/util.ts\nfunction swapAxisCondition(axes, swap) {\n  return (series) => {\n    if (!swap(series))\n      return axes;\n    return [\n      { ...axes[0], position: axes[1].position },\n      { ...axes[1], position: axes[0].position }\n    ];\n  };\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/quadtreeUtil.ts\nfunction addHitTestersToQuadtree(quadtree, hitTesters) {\n  for (const node of hitTesters) {\n    const datum = node.datum;\n    if (datum === void 0) {\n      Logger.error(\"undefined datum\");\n    } else {\n      quadtree.addValue(node, datum);\n    }\n  }\n}\nfunction findQuadtreeMatch(series, point) {\n  const { x, y } = point;\n  const { nearest, distanceSquared: distanceSquared3 } = series.getQuadTree().find(x, y);\n  if (nearest !== void 0) {\n    return { datum: nearest.value, distance: Math.sqrt(distanceSquared3) };\n  }\n  return void 0;\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/abstractBarSeries.ts\nvar AbstractBarSeriesProperties = class extends CartesianSeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.direction = \"vertical\";\n  }\n};\n__decorateClass([\n  Validate(DIRECTION)\n], AbstractBarSeriesProperties.prototype, \"direction\", 2);\nvar AbstractBarSeries = class extends CartesianSeries {\n  constructor() {\n    super(...arguments);\n    /**\n     * Used to get the position of bars within each group.\n     */\n    this.groupScale = new BandScale();\n    this.smallestDataInterval = void 0;\n    this.largestDataInterval = void 0;\n  }\n  padBandExtent(keys, alignStart) {\n    const ratio2 = typeof alignStart === \"boolean\" ? 1 : 0.5;\n    const scalePadding = isFiniteNumber(this.smallestDataInterval) ? this.smallestDataInterval * ratio2 : 0;\n    const keysExtent = extent(keys) ?? [NaN, NaN];\n    if (typeof alignStart === \"boolean\") {\n      keysExtent[alignStart ? 0 : 1] -= (alignStart ? 1 : -1) * scalePadding;\n    } else {\n      keysExtent[0] -= scalePadding;\n      keysExtent[1] += scalePadding;\n    }\n    return fixNumericExtent(keysExtent);\n  }\n  getBandScalePadding() {\n    return { inner: 0.3, outer: 0.15 };\n  }\n  shouldFlipXY() {\n    return !this.isVertical();\n  }\n  isVertical() {\n    return this.properties.direction === \"vertical\";\n  }\n  getBarDirection() {\n    return this.shouldFlipXY() ? \"x\" /* X */ : \"y\" /* Y */;\n  }\n  getCategoryDirection() {\n    return this.shouldFlipXY() ? \"y\" /* Y */ : \"x\" /* X */;\n  }\n  getValueAxis() {\n    const direction = this.getBarDirection();\n    return this.axes[direction];\n  }\n  getCategoryAxis() {\n    const direction = this.getCategoryDirection();\n    return this.axes[direction];\n  }\n  getBandwidth(xAxis) {\n    return ContinuousScale.is(xAxis.scale) ? xAxis.scale.calcBandwidth(this.smallestDataInterval) : xAxis.scale.bandwidth;\n  }\n  updateGroupScale(xAxis) {\n    const domain = [];\n    const { groupScale } = this;\n    const xBandWidth = this.getBandwidth(xAxis);\n    const { index: groupIndex, visibleGroupCount } = this.ctx.seriesStateManager.getVisiblePeerGroupIndex(this);\n    for (let groupIdx = 0; groupIdx < visibleGroupCount; groupIdx++) {\n      domain.push(String(groupIdx));\n    }\n    groupScale.domain = domain;\n    groupScale.range = [0, xBandWidth ?? 0];\n    if (xAxis instanceof CategoryAxis) {\n      groupScale.paddingInner = xAxis.groupPaddingInner;\n    } else if (xAxis instanceof GroupedCategoryAxis) {\n      groupScale.padding = 0.1;\n    } else {\n      groupScale.padding = 0;\n    }\n    groupScale.round = groupScale.padding !== 0;\n    const barWidth = groupScale.bandwidth >= 1 ? (\n      // Pixel-rounded value for low-volume bar charts.\n      groupScale.bandwidth\n    ) : (\n      // Handle high-volume bar charts gracefully.\n      groupScale.rawBandwidth\n    );\n    return { barWidth, groupIndex };\n  }\n  resolveKeyDirection(direction) {\n    if (this.getBarDirection() === \"x\" /* X */) {\n      if (direction === \"x\" /* X */) {\n        return \"y\" /* Y */;\n      }\n      return \"x\" /* X */;\n    }\n    return direction;\n  }\n  initQuadTree(quadtree) {\n    addHitTestersToQuadtree(quadtree, this.datumNodesIter());\n  }\n  pickNodeClosestDatum(point) {\n    return findQuadtreeMatch(this, point);\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/cartesian/barSeriesProperties.ts\nvar BarSeriesLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.placement = \"inside-center\";\n    this.padding = 0;\n  }\n};\n__decorateClass([\n  Validate(\n    UNION(\n      [\n        \"inside-center\",\n        \"inside-start\",\n        \"inside-end\",\n        \"outside-start\",\n        \"outside-end\",\n        // @todo(AG-5950) Deprecate\n        { value: \"inside\", deprecatedTo: \"inside-center\" },\n        { value: \"outside\", deprecatedTo: \"outside-end\" }\n      ],\n      \"a placement\"\n    )\n  )\n], BarSeriesLabel.prototype, \"placement\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], BarSeriesLabel.prototype, \"padding\", 2);\nvar BarSeriesProperties = class extends AbstractBarSeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.fill = \"#c16068\";\n    this.fillOpacity = 1;\n    this.stroke = \"#874349\";\n    this.strokeWidth = 1;\n    this.strokeOpacity = 1;\n    this.lineDash = [0];\n    this.lineDashOffset = 0;\n    this.cornerRadius = 0;\n    this.crisp = void 0;\n    this.shadow = new DropShadow();\n    this.label = new BarSeriesLabel();\n    this.tooltip = new SeriesTooltip();\n    this.sparklineMode = false;\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], BarSeriesProperties.prototype, \"xKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BarSeriesProperties.prototype, \"xName\", 2);\n__decorateClass([\n  Validate(STRING)\n], BarSeriesProperties.prototype, \"yKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BarSeriesProperties.prototype, \"yName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BarSeriesProperties.prototype, \"yFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BarSeriesProperties.prototype, \"stackGroup\", 2);\n__decorateClass([\n  Validate(NUMBER, { optional: true })\n], BarSeriesProperties.prototype, \"normalizedTo\", 2);\n__decorateClass([\n  Validate(COLOR_STRING)\n], BarSeriesProperties.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(RATIO)\n], BarSeriesProperties.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(COLOR_STRING)\n], BarSeriesProperties.prototype, \"stroke\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], BarSeriesProperties.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO)\n], BarSeriesProperties.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(LINE_DASH)\n], BarSeriesProperties.prototype, \"lineDash\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], BarSeriesProperties.prototype, \"lineDashOffset\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], BarSeriesProperties.prototype, \"cornerRadius\", 2);\n__decorateClass([\n  Validate(BOOLEAN, { optional: true })\n], BarSeriesProperties.prototype, \"crisp\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], BarSeriesProperties.prototype, \"itemStyler\", 2);\n__decorateClass([\n  Validate(OBJECT, { optional: true })\n], BarSeriesProperties.prototype, \"shadow\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], BarSeriesProperties.prototype, \"label\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], BarSeriesProperties.prototype, \"tooltip\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], BarSeriesProperties.prototype, \"sparklineMode\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/barUtil.ts\nfunction updateRect(rect, config) {\n  rect.crisp = config.crisp ?? true;\n  rect.fill = config.fill;\n  rect.stroke = config.stroke;\n  rect.strokeWidth = config.strokeWidth;\n  rect.fillOpacity = config.fillOpacity;\n  rect.strokeOpacity = config.strokeOpacity;\n  rect.lineDash = config.lineDash;\n  rect.lineDashOffset = config.lineDashOffset;\n  rect.fillShadow = config.fillShadow;\n  rect.topLeftCornerRadius = config.topLeftCornerRadius !== false ? config.cornerRadius ?? 0 : 0;\n  rect.topRightCornerRadius = config.topRightCornerRadius !== false ? config.cornerRadius ?? 0 : 0;\n  rect.bottomRightCornerRadius = config.bottomRightCornerRadius !== false ? config.cornerRadius ?? 0 : 0;\n  rect.bottomLeftCornerRadius = config.bottomLeftCornerRadius !== false ? config.cornerRadius ?? 0 : 0;\n  rect.visible = config.visible ?? true;\n}\nfunction getRectConfig({\n  datum,\n  isHighlighted,\n  style,\n  highlightStyle,\n  itemStyler,\n  seriesId,\n  ctx: { callbackCache },\n  ...opts\n}) {\n  const {\n    fill,\n    fillOpacity,\n    stroke,\n    strokeWidth,\n    strokeOpacity,\n    lineDash,\n    lineDashOffset,\n    cornerRadius = 0\n  } = mergeDefaults(isHighlighted && highlightStyle, style);\n  let format;\n  if (itemStyler) {\n    format = callbackCache.call(itemStyler, {\n      datum: datum.datum,\n      xKey: datum.xKey,\n      fill,\n      fillOpacity,\n      stroke,\n      strokeWidth,\n      strokeOpacity,\n      lineDash,\n      lineDashOffset,\n      cornerRadius,\n      highlighted: isHighlighted,\n      seriesId,\n      ...opts\n    });\n  }\n  return {\n    fill: format?.fill ?? fill,\n    fillOpacity: format?.fillOpacity ?? fillOpacity,\n    stroke: format?.stroke ?? stroke,\n    strokeWidth: format?.strokeWidth ?? strokeWidth,\n    strokeOpacity: format?.strokeOpacity ?? strokeOpacity,\n    lineDash: format?.lineDash ?? lineDash,\n    lineDashOffset: format?.lineDashOffset ?? lineDashOffset,\n    cornerRadius: format?.cornerRadius ?? cornerRadius,\n    topLeftCornerRadius: style.topLeftCornerRadius,\n    topRightCornerRadius: style.topRightCornerRadius,\n    bottomRightCornerRadius: style.bottomRightCornerRadius,\n    bottomLeftCornerRadius: style.bottomLeftCornerRadius,\n    fillShadow: style.fillShadow\n  };\n}\nfunction checkCrisp(scale2, visibleRange, smallestDataInterval, largestDataInterval) {\n  if (visibleRange != null) {\n    const [visibleMin, visibleMax] = visibleRange;\n    const isZoomed = visibleMin !== 0 || visibleMax !== 1;\n    if (isZoomed)\n      return false;\n  }\n  if (ContinuousScale.is(scale2)) {\n    const spacing = scale2.calcBandwidth(largestDataInterval) - scale2.calcBandwidth(smallestDataInterval);\n    if (spacing > 0 && spacing < 1)\n      return false;\n  }\n  return true;\n}\nvar isDatumNegative = (datum) => {\n  return isNegative(datum.yValue ?? 0);\n};\nfunction collapsedStartingBarPosition(isVertical, axes, mode) {\n  const { startingX, startingY } = getStartingValues(isVertical, axes);\n  const calculate = (datum, prevDatum) => {\n    let x = isVertical ? datum.x : startingX;\n    let y = isVertical ? startingY : datum.y;\n    let width2 = isVertical ? datum.width : 0;\n    let height2 = isVertical ? 0 : datum.height;\n    const { opacity } = datum;\n    if (prevDatum && (isNaN(x) || isNaN(y))) {\n      ({ x, y } = prevDatum);\n      width2 = isVertical ? prevDatum.width : 0;\n      height2 = isVertical ? 0 : prevDatum.height;\n      if (isVertical && !isDatumNegative(prevDatum)) {\n        y += prevDatum.height;\n      } else if (!isVertical && isDatumNegative(prevDatum)) {\n        x += prevDatum.width;\n      }\n    }\n    let clipBBox;\n    if (datum.clipBBox == null) {\n      clipBBox = void 0;\n    } else if (isDatumNegative(datum)) {\n      clipBBox = isVertical ? new BBox(x, y - height2, width2, height2) : new BBox(x - width2, y, width2, height2);\n    } else {\n      clipBBox = new BBox(x, y, width2, height2);\n    }\n    return { x, y, width: width2, height: height2, clipBBox, opacity };\n  };\n  return { isVertical, calculate, mode };\n}\nfunction midpointStartingBarPosition(isVertical, mode) {\n  return {\n    isVertical,\n    calculate: (datum) => {\n      return {\n        x: isVertical ? datum.x : datum.x + datum.width / 2,\n        y: isVertical ? datum.y + datum.height / 2 : datum.y,\n        width: isVertical ? datum.width : 0,\n        height: isVertical ? 0 : datum.height,\n        clipBBox: datum.clipBBox,\n        opacity: datum.opacity\n      };\n    },\n    mode\n  };\n}\nfunction prepareBarAnimationFunctions(initPos) {\n  const isRemoved = (datum) => datum == null || isNaN(datum.x) || isNaN(datum.y);\n  const fromFn = (rect, datum, status) => {\n    if (status === \"updated\" && isRemoved(datum)) {\n      status = \"removed\";\n    } else if (status === \"updated\" && isRemoved(rect.previousDatum)) {\n      status = \"added\";\n    }\n    let source;\n    if (status === \"added\" && rect.previousDatum == null && initPos.mode === \"fade\") {\n      source = { ...resetBarSelectionsFn(rect, datum), opacity: 0 };\n    } else if (status === \"unknown\" || status === \"added\") {\n      source = initPos.calculate(datum, rect.previousDatum);\n    } else {\n      source = {\n        x: rect.x,\n        y: rect.y,\n        width: rect.width,\n        height: rect.height,\n        clipBBox: rect.clipBBox,\n        opacity: rect.opacity\n      };\n    }\n    const phase = NODE_UPDATE_STATE_TO_PHASE_MAPPING[status];\n    return { ...source, phase };\n  };\n  const toFn = (rect, datum, status) => {\n    let source;\n    if (status === \"removed\" && rect.datum == null && initPos.mode === \"fade\") {\n      source = { ...resetBarSelectionsFn(rect, datum), opacity: 0 };\n    } else if (status === \"removed\" || isRemoved(datum)) {\n      source = initPos.calculate(datum, rect.previousDatum);\n    } else {\n      source = {\n        x: datum.x,\n        y: datum.y,\n        width: datum.width,\n        height: datum.height,\n        clipBBox: datum.clipBBox,\n        opacity: datum.opacity\n      };\n    }\n    return source;\n  };\n  return { toFn, fromFn };\n}\nfunction getStartingValues(isVertical, axes) {\n  const axis = axes[isVertical ? \"y\" /* Y */ : \"x\" /* X */];\n  let startingX = Infinity;\n  let startingY = 0;\n  if (!axis) {\n    return { startingX, startingY };\n  }\n  if (isVertical) {\n    startingY = axis.scale.convert(ContinuousScale.is(axis.scale) ? 0 : Math.max(...axis.range));\n  } else {\n    startingX = axis.scale.convert(ContinuousScale.is(axis.scale) ? 0 : Math.min(...axis.range));\n  }\n  return { startingX, startingY };\n}\nfunction resetBarSelectionsFn(_node, { x, y, width: width2, height: height2, clipBBox, opacity }) {\n  return { x, y, width: width2, height: height2, clipBBox, opacity };\n}\nfunction computeBarFocusBounds(datum, barGroup, seriesRect) {\n  if (datum === void 0)\n    return void 0;\n  const { x, y, width: width2, height: height2 } = datum;\n  return Transformable.toCanvas(barGroup, new BBox(x, y, width2, height2)).clip(seriesRect);\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/labelUtil.ts\nfunction updateLabelNode(textNode, label, labelDatum) {\n  if (label.enabled && labelDatum) {\n    const { x, y, text, textAlign, textBaseline } = labelDatum;\n    const { color: fill, fontStyle, fontWeight, fontSize, fontFamily } = label;\n    textNode.setProperties({\n      visible: true,\n      x,\n      y,\n      text,\n      fill,\n      fontStyle,\n      fontWeight,\n      fontSize,\n      fontFamily,\n      textAlign,\n      textBaseline\n    });\n  } else {\n    textNode.visible = false;\n  }\n}\nvar placements = {\n  \"inside-start\": { inside: true, direction: -1, textAlignment: 1 },\n  \"inside-end\": { inside: true, direction: 1, textAlignment: -1 },\n  \"outside-start\": { inside: false, direction: -1, textAlignment: -1 },\n  \"outside-end\": { inside: false, direction: 1, textAlignment: 1 }\n};\nfunction adjustLabelPlacement({\n  isUpward,\n  isVertical,\n  placement,\n  padding = 0,\n  rect\n}) {\n  let x = rect.x + rect.width / 2;\n  let y = rect.y + rect.height / 2;\n  let textAlign = \"center\";\n  let textBaseline = \"middle\";\n  if (placement !== \"inside-center\") {\n    const barDirection = (isUpward ? 1 : -1) * (isVertical ? -1 : 1);\n    const { direction, textAlignment } = placements[placement];\n    const displacementRatio = (direction + 1) * 0.5;\n    if (isVertical) {\n      const y0 = isUpward ? rect.y + rect.height : rect.y;\n      const height2 = rect.height * barDirection;\n      y = y0 + height2 * displacementRatio + padding * textAlignment * barDirection;\n      textBaseline = textAlignment === barDirection ? \"top\" : \"bottom\";\n    } else {\n      const x0 = isUpward ? rect.x : rect.x + rect.width;\n      const width2 = rect.width * barDirection;\n      x = x0 + width2 * displacementRatio + padding * textAlignment * barDirection;\n      textAlign = textAlignment === barDirection ? \"left\" : \"right\";\n    }\n  }\n  return { x, y, textAlign, textBaseline };\n}\n\n// packages/ag-charts-community/src/chart/series/cartesian/barSeries.ts\nvar labelPlacements2 = {\n  \"inside-center\": \"inside-center\",\n  \"inside-start\": \"inside-start\",\n  \"inside-end\": \"inside-end\",\n  \"outside-start\": \"outside-start\",\n  \"outside-end\": \"outside-end\",\n  inside: \"inside-center\",\n  outside: \"outside-end\"\n};\nvar BarSeries = class extends AbstractBarSeries {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      directionKeys: DEFAULT_CARTESIAN_DIRECTION_KEYS,\n      directionNames: DEFAULT_CARTESIAN_DIRECTION_NAMES,\n      pickModes: [\n        2 /* AXIS_ALIGNED */,\n        // Only used in sparklineMode\n        1 /* NEAREST_NODE */,\n        0 /* EXACT_SHAPE_MATCH */\n      ],\n      pathsPerSeries: [],\n      hasHighlightedLabels: true,\n      datumSelectionGarbageCollection: false,\n      animationAlwaysUpdateSelections: true,\n      animationResetFns: {\n        datum: resetBarSelectionsFn,\n        label: resetLabelFn\n      }\n    });\n    this.properties = new BarSeriesProperties();\n  }\n  get pickModeAxis() {\n    return this.properties.sparklineMode ? \"main\" : void 0;\n  }\n  crossFilteringEnabled() {\n    return this.properties.yFilterKey != null && (this.seriesGrouping == null || this.seriesGrouping.stackIndex === 0);\n  }\n  async processData(dataController) {\n    if (!this.properties.isValid() || !this.data) {\n      return;\n    }\n    const { seriesGrouping: { groupIndex = this.id } = {}, data = [] } = this;\n    const { xKey, yKey, yFilterKey, normalizedTo } = this.properties;\n    const animationEnabled = !this.ctx.animationManager.isSkipped();\n    const xScale = this.getCategoryAxis()?.scale;\n    const yScale = this.getValueAxis()?.scale;\n    const { isContinuousX, xScaleType, yScaleType } = this.getScaleInformation({ xScale, yScale });\n    const stackGroupName = `bar-stack-${groupIndex}-yValues`;\n    const stackGroupTrailingName = `${stackGroupName}-trailing`;\n    const extraProps = [];\n    if (isFiniteNumber(normalizedTo)) {\n      extraProps.push(\n        normaliseGroupTo([stackGroupName, stackGroupTrailingName], Math.abs(normalizedTo), \"range\")\n      );\n    }\n    if (animationEnabled && this.processedData) {\n      extraProps.push(diff(this.processedData));\n    }\n    if (animationEnabled) {\n      extraProps.push(animationValidation());\n    }\n    const visibleProps = this.visible ? {} : { forceValue: 0 };\n    const { processedData } = await this.requestDataModel(dataController, data, {\n      props: [\n        keyProperty(xKey, xScaleType, { id: \"xValue\" }),\n        valueProperty(yKey, yScaleType, { id: `yValue-raw`, invalidValue: null, ...visibleProps }),\n        ...this.crossFilteringEnabled() ? [\n          valueProperty(yFilterKey, yScaleType, {\n            id: `yFilterValue`,\n            invalidValue: null,\n            ...visibleProps\n          })\n        ] : [],\n        ...groupAccumulativeValueProperty(\n          yKey,\n          \"normal\",\n          \"current\",\n          {\n            id: `yValue-end`,\n            rangeId: `yValue-range`,\n            invalidValue: null,\n            missingValue: 0,\n            groupId: stackGroupName,\n            separateNegative: true,\n            ...visibleProps\n          },\n          yScaleType\n        ),\n        ...groupAccumulativeValueProperty(\n          yKey,\n          \"trailing\",\n          \"current\",\n          {\n            id: `yValue-start`,\n            invalidValue: null,\n            missingValue: 0,\n            groupId: stackGroupTrailingName,\n            separateNegative: true,\n            ...visibleProps\n          },\n          yScaleType\n        ),\n        ...isContinuousX ? [SMALLEST_KEY_INTERVAL, LARGEST_KEY_INTERVAL] : [],\n        ...extraProps\n      ],\n      groupByKeys: true,\n      groupByData: false\n    });\n    this.smallestDataInterval = processedData.reduced?.smallestKeyInterval;\n    this.largestDataInterval = processedData.reduced?.largestKeyInterval;\n    this.animationState.transition(\"updateData\");\n  }\n  getSeriesDomain(direction) {\n    const { processedData, dataModel } = this;\n    if (!dataModel || !processedData?.data.length)\n      return [];\n    const keyDef = dataModel.resolveProcessedDataDefById(this, `xValue`);\n    const keys = dataModel.getDomain(this, `xValue`, \"key\", processedData);\n    let yExtent = dataModel.getDomain(this, `yValue-end`, \"value\", processedData);\n    const yFilterExtent = this.crossFilteringEnabled() ? dataModel.getDomain(this, `yFilterValue`, \"value\", processedData) : void 0;\n    if (yFilterExtent != null) {\n      yExtent = [Math.min(yExtent[0], yFilterExtent[0]), Math.max(yExtent[1], yFilterExtent[1])];\n    }\n    if (direction === this.getCategoryDirection()) {\n      if (keyDef?.def.type === \"key\" && keyDef.def.valueType === \"category\") {\n        return keys;\n      }\n      return this.padBandExtent(keys);\n    } else if (this.getValueAxis() instanceof LogAxis) {\n      return fixNumericExtent(yExtent);\n    } else {\n      const fixedYExtent = [Math.min(0, yExtent[0]), Math.max(0, yExtent[1])];\n      return fixNumericExtent(fixedYExtent);\n    }\n  }\n  async createNodeData() {\n    const { dataModel } = this;\n    const xAxis = this.getCategoryAxis();\n    const yAxis = this.getValueAxis();\n    if (!dataModel || !xAxis || !yAxis || !this.properties.isValid())\n      return;\n    const xScale = xAxis.scale;\n    const yScale = yAxis.scale;\n    const { xKey, yKey, xName, yName, fill, stroke, strokeWidth, cornerRadius, legendItemName, label } = this.properties;\n    const yReversed = yAxis.isReversed();\n    const { barWidth, groupIndex } = this.updateGroupScale(xAxis);\n    const barOffset = ContinuousScale.is(xScale) ? barWidth * -0.5 : 0;\n    const xIndex = dataModel.resolveProcessedDataIndexById(this, `xValue`);\n    const yRawIndex = dataModel.resolveProcessedDataIndexById(this, `yValue-raw`);\n    const yFilterIndex = this.crossFilteringEnabled() ? dataModel.resolveProcessedDataIndexById(this, `yFilterValue`) : void 0;\n    const yStartIndex = dataModel.resolveProcessedDataIndexById(this, `yValue-start`);\n    const yEndIndex = dataModel.resolveProcessedDataIndexById(this, `yValue-end`);\n    const yRangeIndex = dataModel.resolveProcessedDataIndexById(this, `yValue-range`);\n    const animationEnabled = !this.ctx.animationManager.isSkipped();\n    const nodeDatum = ({\n      datum,\n      valueIndex,\n      xValue,\n      yValue,\n      cumulativeValue,\n      phantom,\n      currY,\n      prevY,\n      isPositive,\n      yRange,\n      labelText,\n      crossScale = 1\n    }) => {\n      const x = xScale.convert(xValue);\n      const isUpward = isPositive !== yReversed;\n      const barX = x + groupScale.convert(String(groupIndex)) + barOffset;\n      const y = yScale.convert(currY);\n      const bottomY = yScale.convert(prevY);\n      const barAlongX = this.getBarDirection() === \"x\" /* X */;\n      const bboxHeight = yScale.convert(yRange);\n      const bboxBottom = yScale.convert(0);\n      const xOffset = barWidth * 0.5 * (1 - crossScale);\n      const rect = {\n        x: barAlongX ? Math.min(y, bottomY) : barX + xOffset,\n        y: barAlongX ? barX + xOffset : Math.min(y, bottomY),\n        width: barAlongX ? Math.abs(bottomY - y) : barWidth * crossScale,\n        height: barAlongX ? barWidth * crossScale : Math.abs(bottomY - y)\n      };\n      const clipBBox = new BBox(rect.x, rect.y, rect.width, rect.height);\n      const barRect = {\n        x: barAlongX ? Math.min(bboxBottom, bboxHeight) : barX + xOffset,\n        y: barAlongX ? barX + xOffset : Math.min(bboxBottom, bboxHeight),\n        width: barAlongX ? Math.abs(bboxBottom - bboxHeight) : barWidth * crossScale,\n        height: barAlongX ? barWidth * crossScale : Math.abs(bboxBottom - bboxHeight)\n      };\n      const lengthRatioMultiplier = this.shouldFlipXY() ? rect.height : rect.width;\n      return {\n        series: this,\n        itemId: phantom ? createDatumId(yKey, phantom) : yKey,\n        datum,\n        valueIndex,\n        cumulativeValue,\n        phantom,\n        xValue,\n        yValue,\n        yKey,\n        xKey,\n        capDefaults: {\n          lengthRatioMultiplier,\n          lengthMax: lengthRatioMultiplier\n        },\n        x: barRect.x,\n        y: barRect.y,\n        width: barRect.width,\n        height: barRect.height,\n        midPoint: { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 },\n        fill,\n        stroke,\n        opacity: 1,\n        strokeWidth,\n        cornerRadius,\n        topLeftCornerRadius: barAlongX !== isUpward,\n        topRightCornerRadius: isUpward,\n        bottomRightCornerRadius: barAlongX === isUpward,\n        bottomLeftCornerRadius: !isUpward,\n        clipBBox,\n        label: labelText != null ? {\n          text: labelText,\n          ...adjustLabelPlacement({\n            isUpward,\n            isVertical: !barAlongX,\n            placement: labelPlacements2[label.placement],\n            padding: label.padding,\n            rect\n          })\n        } : void 0,\n        missing: yValue == null,\n        focusable: !phantom\n      };\n    };\n    const { groupScale, processedData } = this;\n    const phantomNodes = [];\n    const nodes = [];\n    const labels = [];\n    processedData?.data.forEach(({ keys, datum: seriesDatum, values, aggValues }) => {\n      values.forEach((value, valueIndex) => {\n        const xValue = keys[xIndex];\n        const yRawValue = value[yRawIndex];\n        const yStart = Number(value[yStartIndex]);\n        const yFilterValue = yFilterIndex != null ? Number(value[yFilterIndex]) : void 0;\n        const yEnd = Number(value[yEndIndex]);\n        const isPositive = yRawValue >= 0 && !Object.is(yRawValue, -0);\n        const yRange = aggValues?.[yRangeIndex][isPositive ? 1 : 0] ?? 0;\n        if (!Number.isFinite(yEnd))\n          return;\n        if (yFilterValue != null && !Number.isFinite(yFilterValue))\n          return;\n        const labelText = yRawValue != null ? this.getLabelText(\n          this.properties.label,\n          {\n            datum: seriesDatum[valueIndex],\n            value: yFilterValue ?? yRawValue,\n            xKey,\n            yKey,\n            xName,\n            yName,\n            legendItemName\n          },\n          formatValue\n        ) : void 0;\n        const inset = yFilterValue != null && yFilterValue > yRawValue;\n        const nodeData = nodeDatum({\n          datum: seriesDatum[valueIndex],\n          valueIndex,\n          xValue,\n          yValue: yFilterValue ?? yRawValue,\n          cumulativeValue: yFilterValue ?? yEnd,\n          phantom: false,\n          currY: yFilterValue != null ? yStart + yFilterValue : yEnd,\n          prevY: yStart,\n          isPositive,\n          yRange: Math.max(yStart + (yFilterValue ?? -Infinity), yRange),\n          labelText,\n          crossScale: inset ? 0.6 : void 0\n        });\n        nodes.push(nodeData);\n        labels.push(nodeData);\n        if (yFilterValue != null) {\n          const phantomNodeData = nodeDatum({\n            datum: seriesDatum[valueIndex],\n            valueIndex,\n            xValue,\n            yValue: yFilterValue,\n            cumulativeValue: yFilterValue,\n            phantom: true,\n            currY: yEnd,\n            prevY: yStart,\n            isPositive,\n            yRange,\n            labelText: void 0,\n            crossScale: void 0\n          });\n          phantomNodes.push(phantomNodeData);\n        }\n      });\n    });\n    return {\n      itemId: yKey,\n      nodeData: phantomNodes.length > 0 ? [...phantomNodes, ...nodes] : nodes,\n      labelData: labels,\n      scales: this.calculateScaling(),\n      visible: this.visible || animationEnabled\n    };\n  }\n  nodeFactory() {\n    return new Rect();\n  }\n  getHighlightData(nodeData, highlightedItem) {\n    const highlightItem = nodeData.find(\n      (nodeDatum) => nodeDatum.datum === highlightedItem.datum && !nodeDatum.phantom\n    );\n    return highlightItem != null ? [highlightItem] : void 0;\n  }\n  async updateDatumSelection(opts) {\n    return opts.datumSelection.update(\n      opts.nodeData,\n      void 0,\n      (datum) => createDatumId(datum.xValue, datum.valueIndex, datum.phantom)\n    );\n  }\n  async updateDatumNodes(opts) {\n    if (!this.properties.isValid()) {\n      return;\n    }\n    const {\n      yKey,\n      stackGroup,\n      fill,\n      fillOpacity,\n      stroke,\n      strokeWidth,\n      strokeOpacity,\n      lineDash,\n      lineDashOffset,\n      itemStyler,\n      shadow,\n      highlightStyle: { item: itemHighlightStyle }\n    } = this.properties;\n    const xAxis = this.axes[\"x\" /* X */];\n    const crisp = this.properties.crisp ?? checkCrisp(xAxis?.scale, xAxis?.visibleRange, this.smallestDataInterval, this.largestDataInterval);\n    const categoryAlongX = this.getCategoryDirection() === \"x\" /* X */;\n    const style = {\n      fill,\n      stroke,\n      lineDash,\n      lineDashOffset,\n      fillShadow: shadow,\n      strokeWidth: this.getStrokeWidth(strokeWidth),\n      fillOpacity: 0,\n      strokeOpacity: 0\n    };\n    const rectParams = {\n      datum: void 0,\n      ctx: this.ctx,\n      seriesId: this.id,\n      isHighlighted: opts.isHighlight,\n      highlightStyle: itemHighlightStyle,\n      yKey,\n      style,\n      itemStyler,\n      stackGroup\n    };\n    opts.datumSelection.each((rect, datum) => {\n      style.fillOpacity = fillOpacity * (datum.phantom ? 0.2 : 1);\n      style.strokeOpacity = strokeOpacity * (datum.phantom ? 0.2 : 1);\n      style.cornerRadius = datum.cornerRadius;\n      style.topLeftCornerRadius = datum.topLeftCornerRadius;\n      style.topRightCornerRadius = datum.topRightCornerRadius;\n      style.bottomRightCornerRadius = datum.bottomRightCornerRadius;\n      style.bottomLeftCornerRadius = datum.bottomLeftCornerRadius;\n      const visible = categoryAlongX ? (datum.clipBBox?.width ?? datum.width) > 0 : (datum.clipBBox?.height ?? datum.height) > 0;\n      rectParams.datum = datum;\n      const config = getRectConfig(rectParams);\n      config.crisp = crisp;\n      config.visible = visible;\n      updateRect(rect, config);\n    });\n  }\n  async updateLabelSelection(opts) {\n    const data = this.isLabelEnabled() ? opts.labelData : [];\n    return opts.labelSelection.update(data, (text) => {\n      text.pointerEvents = 1 /* None */;\n    });\n  }\n  async updateLabelNodes(opts) {\n    opts.labelSelection.each((textNode, datum) => {\n      updateLabelNode(textNode, this.properties.label, datum.label);\n    });\n  }\n  getTooltipHtml(nodeDatum) {\n    const {\n      id: seriesId,\n      processedData,\n      ctx: { callbackCache }\n    } = this;\n    const xAxis = this.getCategoryAxis();\n    const yAxis = this.getValueAxis();\n    if (!processedData || !this.properties.isValid() || !xAxis || !yAxis) {\n      return EMPTY_TOOLTIP_CONTENT;\n    }\n    const { xKey, yKey, xName, yName, fill, stroke, strokeWidth, tooltip, itemStyler, stackGroup, legendItemName } = this.properties;\n    const { xValue, yValue, datum, itemId } = nodeDatum;\n    const xString = xAxis.formatDatum(xValue);\n    const yString = yAxis.formatDatum(yValue);\n    const title = sanitizeHtml(yName);\n    const content = sanitizeHtml(xString + \": \" + yString);\n    let format;\n    if (itemStyler) {\n      format = callbackCache.call(itemStyler, {\n        seriesId,\n        datum,\n        xKey,\n        yKey,\n        stackGroup,\n        fill,\n        stroke,\n        strokeWidth: this.getStrokeWidth(strokeWidth),\n        highlighted: false,\n        cornerRadius: this.properties.cornerRadius,\n        fillOpacity: this.properties.fillOpacity,\n        strokeOpacity: this.properties.strokeOpacity,\n        lineDash: this.properties.lineDash ?? [],\n        lineDashOffset: this.properties.lineDashOffset\n      });\n    }\n    const color = format?.fill ?? fill;\n    return tooltip.toTooltipHtml(\n      { title, content, backgroundColor: color },\n      {\n        seriesId,\n        itemId,\n        datum,\n        xKey,\n        yKey,\n        xName,\n        yName,\n        stackGroup,\n        title,\n        color,\n        legendItemName,\n        ...this.getModuleTooltipParams()\n      }\n    );\n  }\n  getLegendData(legendType) {\n    const { showInLegend } = this.properties;\n    if (legendType !== \"category\" || !this.data?.length || !this.properties.isValid() || !showInLegend) {\n      return [];\n    }\n    const { yKey, yName, fill, stroke, strokeWidth, fillOpacity, strokeOpacity, legendItemName, visible } = this.properties;\n    return [\n      {\n        legendType: \"category\",\n        id: this.id,\n        itemId: yKey,\n        seriesId: this.id,\n        enabled: visible,\n        label: { text: legendItemName ?? yName ?? yKey },\n        symbols: [{ marker: { fill, fillOpacity, stroke, strokeWidth, strokeOpacity } }],\n        legendItemName\n      }\n    ];\n  }\n  animateEmptyUpdateReady({ datumSelection, labelSelection, annotationSelections }) {\n    const fns = prepareBarAnimationFunctions(collapsedStartingBarPosition(this.isVertical(), this.axes, \"normal\"));\n    fromToMotion(this.id, \"nodes\", this.ctx.animationManager, [datumSelection], fns);\n    seriesLabelFadeInAnimation(this, \"labels\", this.ctx.animationManager, labelSelection);\n    seriesLabelFadeInAnimation(this, \"annotations\", this.ctx.animationManager, ...annotationSelections);\n  }\n  animateWaitingUpdateReady(data) {\n    const { datumSelection, labelSelection, annotationSelections, previousContextData } = data;\n    this.ctx.animationManager.stopByAnimationGroupId(this.id);\n    const dataDiff = this.processedData?.reduced?.diff;\n    const mode = previousContextData == null ? \"fade\" : \"normal\";\n    const fns = prepareBarAnimationFunctions(collapsedStartingBarPosition(this.isVertical(), this.axes, mode));\n    fromToMotion(\n      this.id,\n      \"nodes\",\n      this.ctx.animationManager,\n      [datumSelection],\n      fns,\n      (_, datum) => createDatumId(datum.xValue, datum.valueIndex, datum.phantom),\n      dataDiff\n    );\n    const hasMotion = dataDiff?.changed ?? true;\n    if (hasMotion) {\n      seriesLabelFadeInAnimation(this, \"labels\", this.ctx.animationManager, labelSelection);\n      seriesLabelFadeInAnimation(this, \"annotations\", this.ctx.animationManager, ...annotationSelections);\n    }\n  }\n  isLabelEnabled() {\n    return this.properties.label.enabled;\n  }\n  computeFocusBounds({ datumIndex, seriesRect }) {\n    const datumBox = this.contextNodeData?.nodeData[datumIndex].clipBBox;\n    return computeBarFocusBounds(datumBox, this.contentGroup, seriesRect);\n  }\n};\nBarSeries.className = \"BarSeries\";\nBarSeries.type = \"bar\";\n\n// packages/ag-charts-community/src/chart/series/cartesian/barSeriesModule.ts\nvar BarSeriesModule = {\n  type: \"series\",\n  optionsKey: \"series[]\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\"],\n  identifier: \"bar\",\n  moduleFactory: (ctx) => new BarSeries(ctx),\n  stackable: true,\n  groupable: true,\n  tooltipDefaults: { range: \"exact\" },\n  defaultAxes: swapAxisCondition(\n    [\n      { type: \"number\" /* NUMBER */, position: \"left\" /* LEFT */ },\n      { type: \"category\" /* CATEGORY */, position: \"bottom\" /* BOTTOM */ }\n    ],\n    (series) => series?.direction === \"horizontal\"\n  ),\n  themeTemplate: {\n    series: {\n      direction: \"vertical\",\n      fillOpacity: 1,\n      strokeWidth: 0,\n      lineDash: [0],\n      lineDashOffset: 0,\n      label: {\n        enabled: false,\n        fontWeight: \"normal\" /* NORMAL */,\n        fontSize: 12,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_INSIDE_SERIES_LABEL_COLOUR,\n        placement: \"inside-center\"\n      },\n      shadow: {\n        enabled: false,\n        color: DEFAULT_SHADOW_COLOUR,\n        xOffset: 3,\n        yOffset: 3,\n        blur: 5\n      },\n      errorBar: {\n        cap: {\n          lengthRatio: 0.3\n        }\n      }\n    }\n  },\n  paletteFactory: singleSeriesPaletteFactory\n};\n\n// packages/ag-charts-community/src/chart/series/cartesian/bubbleSeriesProperties.ts\nvar BubbleSeriesMarker = class extends SeriesMarker {\n  constructor() {\n    super(...arguments);\n    this.maxSize = 30;\n  }\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], BubbleSeriesMarker.prototype, \"maxSize\", 2);\n__decorateClass([\n  Validate(NUMBER_ARRAY, { optional: true }),\n  SceneChangeDetection({ redraw: 3 /* MAJOR */ })\n], BubbleSeriesMarker.prototype, \"domain\", 2);\nvar BubbleSeriesLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.placement = \"top\";\n  }\n};\n__decorateClass([\n  Validate(LABEL_PLACEMENT)\n], BubbleSeriesLabel.prototype, \"placement\", 2);\nvar BubbleSeriesProperties = class extends CartesianSeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.colorRange = [\"#ffff00\", \"#00ff00\", \"#0000ff\"];\n    this.label = new BubbleSeriesLabel();\n    this.tooltip = new SeriesTooltip();\n    // No validation. Not a part of the options contract.\n    this.marker = new BubbleSeriesMarker();\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], BubbleSeriesProperties.prototype, \"xKey\", 2);\n__decorateClass([\n  Validate(STRING)\n], BubbleSeriesProperties.prototype, \"yKey\", 2);\n__decorateClass([\n  Validate(STRING)\n], BubbleSeriesProperties.prototype, \"sizeKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"labelKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"colorKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"xFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"yFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"sizeFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"xName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"yName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"sizeName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"labelName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"colorName\", 2);\n__decorateClass([\n  Validate(NUMBER_ARRAY, { optional: true })\n], BubbleSeriesProperties.prototype, \"colorDomain\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY)\n], BubbleSeriesProperties.prototype, \"colorRange\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], BubbleSeriesProperties.prototype, \"title\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.shape\")\n], BubbleSeriesProperties.prototype, \"shape\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.size\")\n], BubbleSeriesProperties.prototype, \"size\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.maxSize\")\n], BubbleSeriesProperties.prototype, \"maxSize\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.domain\", { optional: true })\n], BubbleSeriesProperties.prototype, \"domain\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.fill\", { optional: true })\n], BubbleSeriesProperties.prototype, \"fill\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.fillOpacity\")\n], BubbleSeriesProperties.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.stroke\", { optional: true })\n], BubbleSeriesProperties.prototype, \"stroke\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.strokeWidth\")\n], BubbleSeriesProperties.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.strokeOpacity\")\n], BubbleSeriesProperties.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.itemStyler\", { optional: true })\n], BubbleSeriesProperties.prototype, \"itemStyler\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], BubbleSeriesProperties.prototype, \"label\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], BubbleSeriesProperties.prototype, \"tooltip\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/bubbleSeries.ts\nvar BubbleSeriesNodeEvent = class extends CartesianSeriesNodeEvent {\n  constructor(type, nativeEvent, datum, series) {\n    super(type, nativeEvent, datum, series);\n    this.sizeKey = series.properties.sizeKey;\n  }\n};\nvar BubbleSeries = class extends CartesianSeries {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      directionKeys: DEFAULT_CARTESIAN_DIRECTION_KEYS,\n      directionNames: DEFAULT_CARTESIAN_DIRECTION_NAMES,\n      pickModes: [\n        2 /* AXIS_ALIGNED */,\n        1 /* NEAREST_NODE */,\n        0 /* EXACT_SHAPE_MATCH */\n      ],\n      pathsPerSeries: [],\n      hasMarkers: true,\n      markerSelectionGarbageCollection: false,\n      animationResetFns: {\n        label: resetLabelFn,\n        marker: resetMarkerFn\n      }\n    });\n    this.NodeEvent = BubbleSeriesNodeEvent;\n    this.properties = new BubbleSeriesProperties();\n    this.sizeScale = new LinearScale();\n    this.colorScale = new ColorScale();\n  }\n  get pickModeAxis() {\n    return \"main-category\";\n  }\n  async processData(dataController) {\n    if (!this.properties.isValid() || this.data == null || !this.visible)\n      return;\n    const xScale = this.axes[\"x\" /* X */]?.scale;\n    const yScale = this.axes[\"y\" /* Y */]?.scale;\n    const { xScaleType, yScaleType } = this.getScaleInformation({ xScale, yScale });\n    const colorScaleType = this.colorScale.type;\n    const sizeScaleType = this.sizeScale.type;\n    const {\n      xKey,\n      yKey,\n      sizeKey,\n      xFilterKey,\n      yFilterKey,\n      sizeFilterKey,\n      labelKey,\n      colorDomain,\n      colorRange,\n      colorKey,\n      marker\n    } = this.properties;\n    const { dataModel, processedData } = await this.requestDataModel(dataController, this.data, {\n      props: [\n        valueProperty(xKey, xScaleType, { id: `xValue` }),\n        valueProperty(yKey, yScaleType, { id: `yValue` }),\n        ...xFilterKey != null ? [valueProperty(xFilterKey, xScaleType, { id: `xFilterValue` })] : [],\n        ...yFilterKey != null ? [valueProperty(yFilterKey, yScaleType, { id: `yFilterValue` })] : [],\n        ...sizeFilterKey != null ? [valueProperty(sizeFilterKey, sizeScaleType, { id: `sizeFilterValue` })] : [],\n        valueProperty(sizeKey, sizeScaleType, { id: `sizeValue` }),\n        ...colorKey ? [valueProperty(colorKey, colorScaleType, { id: `colorValue` })] : [],\n        ...labelKey ? [valueProperty(labelKey, \"band\", { id: `labelValue` })] : []\n      ]\n    });\n    const sizeKeyIdx = dataModel.resolveProcessedDataIndexById(this, `sizeValue`);\n    const processedSize = processedData.domain.values[sizeKeyIdx] ?? [];\n    this.sizeScale.domain = marker.domain ? marker.domain : processedSize;\n    if (colorKey) {\n      const colorKeyIdx = dataModel.resolveProcessedDataIndexById(this, `colorValue`);\n      this.colorScale.domain = colorDomain ?? processedData.domain.values[colorKeyIdx] ?? [];\n      this.colorScale.range = colorRange;\n      this.colorScale.update();\n    }\n    this.animationState.transition(\"updateData\");\n  }\n  getSeriesDomain(direction) {\n    const { dataModel, processedData } = this;\n    if (!processedData || !dataModel)\n      return [];\n    const id = direction === \"x\" /* X */ ? `xValue` : `yValue`;\n    const dataDef = dataModel.resolveProcessedDataDefById(this, id);\n    const domain = dataModel.getDomain(this, id, \"value\", processedData);\n    if (dataDef?.def.type === \"value\" && dataDef?.def.valueType === \"category\") {\n      return domain;\n    }\n    return fixNumericExtent(extent(domain));\n  }\n  async createNodeData() {\n    const { axes, dataModel, processedData, colorScale, sizeScale } = this;\n    const {\n      xKey,\n      yKey,\n      sizeKey,\n      xFilterKey,\n      yFilterKey,\n      sizeFilterKey,\n      labelKey,\n      xName,\n      yName,\n      sizeName,\n      labelName,\n      label,\n      colorKey,\n      marker,\n      visible\n    } = this.properties;\n    const markerShape = getMarker(marker.shape);\n    const { placement } = label;\n    const xAxis = axes[\"x\" /* X */];\n    const yAxis = axes[\"y\" /* Y */];\n    if (!(dataModel && processedData && visible && xAxis && yAxis)) {\n      return;\n    }\n    const xDataIdx = dataModel.resolveProcessedDataIndexById(this, `xValue`);\n    const yDataIdx = dataModel.resolveProcessedDataIndexById(this, `yValue`);\n    const sizeDataIdx = sizeKey != null ? dataModel.resolveProcessedDataIndexById(this, `sizeValue`) : void 0;\n    const colorDataIdx = colorKey != null ? dataModel.resolveProcessedDataIndexById(this, `colorValue`) : -1;\n    const labelDataIdx = labelKey != null ? dataModel.resolveProcessedDataIndexById(this, `labelValue`) : -1;\n    const xFilterDataIdx = xFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `xFilterValue`) : void 0;\n    const yFilterDataIdx = yFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `yFilterValue`) : void 0;\n    const sizeFilterDataIdx = sizeFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `sizeFilterValue`) : void 0;\n    const xScale = xAxis.scale;\n    const yScale = yAxis.scale;\n    const xOffset = (xScale.bandwidth ?? 0) / 2;\n    const yOffset = (yScale.bandwidth ?? 0) / 2;\n    const nodeData = [];\n    sizeScale.range = [marker.size, marker.maxSize];\n    const font = label.getFont();\n    const textMeasurer = CachedTextMeasurerPool.getMeasurer({ font });\n    for (const { values, datum } of processedData.data ?? []) {\n      const xDatum = values[xDataIdx];\n      const yDatum = values[yDataIdx];\n      const sizeValue = sizeDataIdx != null ? values[sizeDataIdx] : void 0;\n      const x = xScale.convert(xDatum) + xOffset;\n      const y = yScale.convert(yDatum) + yOffset;\n      let selected;\n      if (xFilterDataIdx != null && yFilterDataIdx != null) {\n        selected = values[xFilterDataIdx] === xDatum && values[yFilterDataIdx] === yDatum;\n        if (sizeFilterDataIdx != null) {\n          selected && (selected = values[sizeFilterDataIdx] === sizeValue);\n        }\n      }\n      const labelText = this.getLabelText(label, {\n        value: labelKey ? values[labelDataIdx] : yDatum,\n        datum,\n        xKey,\n        yKey,\n        sizeKey,\n        labelKey,\n        xName,\n        yName,\n        sizeName,\n        labelName\n      });\n      const size = textMeasurer.measureText(String(labelText));\n      const markerSize = sizeValue ? sizeScale.convert(sizeValue) : marker.size;\n      const fill = colorKey ? colorScale.convert(values[colorDataIdx]) : void 0;\n      nodeData.push({\n        series: this,\n        itemId: yKey,\n        yKey,\n        xKey,\n        datum,\n        xValue: xDatum,\n        yValue: yDatum,\n        sizeValue,\n        point: { x, y, size: markerSize },\n        midPoint: { x, y },\n        fill,\n        label: { text: labelText, ...size },\n        marker: markerShape,\n        placement,\n        selected\n      });\n    }\n    return {\n      itemId: yKey,\n      nodeData,\n      labelData: nodeData,\n      scales: this.calculateScaling(),\n      visible: this.visible\n    };\n  }\n  isPathOrSelectionDirty() {\n    return this.properties.marker.isDirty();\n  }\n  getLabelData() {\n    return this.contextNodeData?.labelData ?? [];\n  }\n  markerFactory() {\n    const { shape } = this.properties.marker;\n    const MarkerShape = getMarker(shape);\n    return new MarkerShape();\n  }\n  async updateMarkerSelection(opts) {\n    const { nodeData, markerSelection } = opts;\n    if (this.properties.marker.isDirty()) {\n      markerSelection.clear();\n      markerSelection.cleanup();\n    }\n    const data = this.properties.marker.enabled ? nodeData : [];\n    return markerSelection.update(\n      data,\n      void 0,\n      (datum) => createDatumId([datum.xValue, datum.yValue, datum.label.text])\n    );\n  }\n  async updateMarkerNodes(opts) {\n    const { markerSelection, isHighlight: highlighted } = opts;\n    const { xKey, yKey, sizeKey, labelKey, marker } = this.properties;\n    const { size, shape, fill, fillOpacity, stroke, strokeWidth, strokeOpacity } = mergeDefaults(\n      highlighted && this.properties.highlightStyle.item,\n      marker.getStyle()\n    );\n    const baseStyle = { size, shape, fill, fillOpacity, stroke, strokeWidth, strokeOpacity };\n    this.sizeScale.range = [marker.size, marker.maxSize];\n    markerSelection.each((node, datum) => {\n      this.updateMarkerStyle(node, marker, { datum, highlighted, xKey, yKey, sizeKey, labelKey }, baseStyle, {\n        selected: datum.selected\n      });\n    });\n    if (!highlighted) {\n      this.properties.marker.markClean();\n    }\n  }\n  async updateLabelSelection(opts) {\n    const placedLabels = this.properties.label.enabled ? this.chart?.placeLabels().get(this) ?? [] : [];\n    return opts.labelSelection.update(\n      placedLabels.map((v) => ({\n        ...v.datum,\n        point: {\n          x: v.x,\n          y: v.y,\n          size: v.datum.point.size\n        }\n      }))\n    );\n  }\n  async updateLabelNodes(opts) {\n    const { label } = this.properties;\n    opts.labelSelection.each((text, datum) => {\n      text.text = datum.label.text;\n      text.fill = label.color;\n      text.x = datum.point?.x ?? 0;\n      text.y = datum.point?.y ?? 0;\n      text.fontStyle = label.fontStyle;\n      text.fontWeight = label.fontWeight;\n      text.fontSize = label.fontSize;\n      text.fontFamily = label.fontFamily;\n      text.textAlign = \"left\";\n      text.textBaseline = \"top\";\n    });\n  }\n  getTooltipHtml(nodeDatum) {\n    const xAxis = this.axes[\"x\" /* X */];\n    const yAxis = this.axes[\"y\" /* Y */];\n    if (!this.properties.isValid() || !xAxis || !yAxis) {\n      return EMPTY_TOOLTIP_CONTENT;\n    }\n    const { xKey, yKey, sizeKey, labelKey, xName, yName, sizeName, labelName, marker, tooltip } = this.properties;\n    const title = this.properties.title ?? yName;\n    const baseStyle = mergeDefaults(\n      { fill: nodeDatum.fill, strokeWidth: this.getStrokeWidth(marker.strokeWidth) },\n      marker.getStyle()\n    );\n    const { fill: color = \"gray\" } = this.getMarkerStyle(\n      marker,\n      { datum: nodeDatum, highlighted: false, xKey, yKey, sizeKey, labelKey },\n      baseStyle\n    );\n    const {\n      datum,\n      xValue,\n      yValue,\n      sizeValue,\n      label: { text: labelText },\n      itemId\n    } = nodeDatum;\n    const xString = sanitizeHtml(xAxis.formatDatum(xValue));\n    const yString = sanitizeHtml(yAxis.formatDatum(yValue));\n    let content = `<b>${sanitizeHtml(xName ?? xKey)}</b>: ${xString}<br><b>${sanitizeHtml(yName ?? yKey)}</b>: ${yString}`;\n    if (sizeKey) {\n      content += `<br><b>${sanitizeHtml(sizeName ?? sizeKey)}</b>: ${sanitizeHtml(String(sizeValue))}`;\n    }\n    if (labelKey) {\n      content = `<b>${sanitizeHtml(labelName ?? labelKey)}</b>: ${sanitizeHtml(labelText)}<br>` + content;\n    }\n    return tooltip.toTooltipHtml(\n      { title, content, backgroundColor: color },\n      {\n        datum,\n        itemId,\n        xKey,\n        xName,\n        yKey,\n        yName,\n        sizeKey,\n        sizeName,\n        labelKey,\n        labelName,\n        title,\n        color,\n        seriesId: this.id\n      }\n    );\n  }\n  getLegendData() {\n    if (!this.data?.length || !this.properties.isValid()) {\n      return [];\n    }\n    const { yKey, yName, title, marker, visible } = this.properties;\n    const { shape, fill, stroke, fillOpacity, strokeOpacity, strokeWidth } = marker;\n    return [\n      {\n        legendType: \"category\",\n        id: this.id,\n        itemId: yKey,\n        seriesId: this.id,\n        enabled: visible,\n        label: {\n          text: title ?? yName ?? yKey\n        },\n        symbols: [\n          {\n            marker: {\n              shape,\n              fill: fill ?? \"rgba(0, 0, 0, 0)\",\n              stroke: stroke ?? \"rgba(0, 0, 0, 0)\",\n              fillOpacity: fillOpacity ?? 1,\n              strokeOpacity: strokeOpacity ?? 1,\n              strokeWidth: strokeWidth ?? 0\n            }\n          }\n        ]\n      }\n    ];\n  }\n  animateEmptyUpdateReady({ markerSelection, labelSelection }) {\n    markerScaleInAnimation(this, this.ctx.animationManager, markerSelection);\n    seriesLabelFadeInAnimation(this, \"labels\", this.ctx.animationManager, labelSelection);\n  }\n  isLabelEnabled() {\n    return this.properties.label.enabled;\n  }\n  nodeFactory() {\n    return new Group();\n  }\n  getFormattedMarkerStyle(datum) {\n    const { xKey, yKey, sizeKey, labelKey } = this.properties;\n    return this.getMarkerStyle(this.properties.marker, {\n      datum,\n      xKey,\n      yKey,\n      sizeKey,\n      labelKey,\n      highlighted: false\n    });\n  }\n  computeFocusBounds(opts) {\n    return computeMarkerFocusBounds(this, opts);\n  }\n};\nBubbleSeries.className = \"BubbleSeries\";\nBubbleSeries.type = \"bubble\";\n\n// packages/ag-charts-community/src/chart/series/cartesian/bubbleSeriesModule.ts\nvar BubbleSeriesModule = {\n  type: \"series\",\n  optionsKey: \"series[]\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\"],\n  identifier: \"bubble\",\n  moduleFactory: (ctx) => new BubbleSeries(ctx),\n  tooltipDefaults: { range: \"nearest\" },\n  defaultAxes: [\n    {\n      type: \"number\" /* NUMBER */,\n      position: \"bottom\" /* BOTTOM */\n    },\n    {\n      type: \"number\" /* NUMBER */,\n      position: \"left\" /* LEFT */\n    }\n  ],\n  themeTemplate: {\n    series: {\n      shape: \"circle\",\n      size: 7,\n      maxSize: 30,\n      fillOpacity: 0.8,\n      tooltip: { position: { type: \"node\" } },\n      label: {\n        enabled: false,\n        fontSize: 12,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_LABEL_COLOUR\n      }\n    }\n  },\n  paletteFactory: singleSeriesPaletteFactory\n};\n\n// packages/ag-charts-community/src/chart/series/cartesian/histogramSeriesProperties.ts\nvar HistogramSeriesProperties = class extends CartesianSeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.fillOpacity = 1;\n    this.strokeWidth = 1;\n    this.strokeOpacity = 1;\n    this.lineDash = [0];\n    this.lineDashOffset = 0;\n    this.cornerRadius = 0;\n    this.areaPlot = false;\n    this.aggregation = \"sum\";\n    this.shadow = new DropShadow();\n    this.label = new Label();\n    this.tooltip = new SeriesTooltip();\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], HistogramSeriesProperties.prototype, \"xKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], HistogramSeriesProperties.prototype, \"yKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], HistogramSeriesProperties.prototype, \"xName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], HistogramSeriesProperties.prototype, \"yName\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], HistogramSeriesProperties.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(RATIO)\n], HistogramSeriesProperties.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(COLOR_STRING, { optional: true })\n], HistogramSeriesProperties.prototype, \"stroke\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], HistogramSeriesProperties.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO)\n], HistogramSeriesProperties.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(LINE_DASH)\n], HistogramSeriesProperties.prototype, \"lineDash\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], HistogramSeriesProperties.prototype, \"lineDashOffset\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], HistogramSeriesProperties.prototype, \"cornerRadius\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], HistogramSeriesProperties.prototype, \"areaPlot\", 2);\n__decorateClass([\n  Validate(ARRAY, { optional: true })\n], HistogramSeriesProperties.prototype, \"bins\", 2);\n__decorateClass([\n  Validate(UNION([\"count\", \"sum\", \"mean\"], \"a histogram aggregation\"))\n], HistogramSeriesProperties.prototype, \"aggregation\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], HistogramSeriesProperties.prototype, \"binCount\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], HistogramSeriesProperties.prototype, \"shadow\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], HistogramSeriesProperties.prototype, \"label\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], HistogramSeriesProperties.prototype, \"tooltip\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/histogramSeries.ts\nvar defaultBinCount = 10;\nvar HistogramSeries = class extends CartesianSeries {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      directionKeys: DEFAULT_CARTESIAN_DIRECTION_KEYS,\n      directionNames: DEFAULT_CARTESIAN_DIRECTION_NAMES,\n      pickModes: [1 /* NEAREST_NODE */, 0 /* EXACT_SHAPE_MATCH */],\n      datumSelectionGarbageCollection: false,\n      animationResetFns: {\n        datum: resetBarSelectionsFn,\n        label: resetLabelFn\n      }\n    });\n    this.properties = new HistogramSeriesProperties();\n    this.calculatedBins = [];\n  }\n  // During processData phase, used to unify different ways of the user specifying\n  // the bins. Returns bins in format[[min1, max1], [min2, max2], ... ].\n  deriveBins(xDomain) {\n    const binStarts = createTicks(xDomain[0], xDomain[1], defaultBinCount);\n    const binSize = tickStep(xDomain[0], xDomain[1], defaultBinCount);\n    const [firstBinEnd] = binStarts;\n    const expandStartToBin = (n) => [n, n + binSize];\n    return [[firstBinEnd - binSize, firstBinEnd], ...binStarts.map(expandStartToBin)];\n  }\n  calculateNiceBins(domain, binCount) {\n    const startGuess = Math.floor(domain[0]);\n    const stop = domain[1];\n    const segments = binCount || 1;\n    const { start: start2, binSize } = this.calculateNiceStart(startGuess, stop, segments);\n    return this.getBins(start2, stop, binSize, segments);\n  }\n  getBins(start2, stop, step, count) {\n    const bins = [];\n    const precision = this.calculatePrecision(step);\n    for (let i = 0; i < count; i++) {\n      const a = Math.round((start2 + i * step) * precision) / precision;\n      let b = Math.round((start2 + (i + 1) * step) * precision) / precision;\n      if (i === count - 1) {\n        b = Math.max(b, stop);\n      }\n      bins[i] = [a, b];\n    }\n    return bins;\n  }\n  calculatePrecision(step) {\n    let precision = 10;\n    if (isFinite(step) && step > 0) {\n      while (step < 1) {\n        precision *= 10;\n        step *= 10;\n      }\n    }\n    return precision;\n  }\n  calculateNiceStart(a, b, segments) {\n    const binSize = Math.abs(b - a) / segments;\n    const order = Math.floor(Math.log10(binSize));\n    const magnitude = Math.pow(10, order);\n    const start2 = Math.floor(a / magnitude) * magnitude;\n    return {\n      start: start2,\n      binSize\n    };\n  }\n  async processData(dataController) {\n    if (!this.visible) {\n      this.processedData = void 0;\n      this.animationState.transition(\"updateData\");\n    }\n    const { xKey, yKey, areaPlot, aggregation } = this.properties;\n    const xScale = this.axes[\"x\" /* X */]?.scale;\n    const yScale = this.axes[\"y\" /* Y */]?.scale;\n    const { xScaleType, yScaleType } = this.getScaleInformation({ yScale, xScale });\n    const props = [keyProperty(xKey, xScaleType), SORT_DOMAIN_GROUPS];\n    if (yKey) {\n      let aggProp = groupCount(\"groupAgg\");\n      if (aggregation === \"count\") {\n      } else if (aggregation === \"sum\") {\n        aggProp = groupSum(\"groupAgg\");\n      } else if (aggregation === \"mean\") {\n        aggProp = groupAverage(\"groupAgg\");\n      }\n      if (areaPlot) {\n        aggProp = area(\"groupAgg\", aggProp);\n      }\n      props.push(valueProperty(yKey, yScaleType, { invalidValue: void 0 }), aggProp);\n    } else {\n      let aggProp = groupCount(\"groupAgg\");\n      if (areaPlot) {\n        aggProp = area(\"groupAgg\", aggProp);\n      }\n      props.push(aggProp);\n    }\n    const groupByFn = (dataSet) => {\n      const xExtent = fixNumericExtent(dataSet.domain.keys[0]);\n      if (xExtent.length === 0) {\n        dataSet.domain.groups = [];\n        return () => [];\n      }\n      const bins = isNumber(this.properties.binCount) ? this.calculateNiceBins(xExtent, this.properties.binCount) : this.properties.bins ?? this.deriveBins(xExtent);\n      const binCount = bins.length;\n      this.calculatedBins = [...bins];\n      return (item) => {\n        const xValue = item.keys[0];\n        for (let i = 0; i < binCount; i++) {\n          const nextBin = bins[i];\n          if (xValue >= nextBin[0] && xValue < nextBin[1]) {\n            return nextBin;\n          }\n          if (i === binCount - 1 && xValue <= nextBin[1]) {\n            return nextBin;\n          }\n        }\n        return [];\n      };\n    };\n    if (!this.ctx.animationManager.isSkipped() && this.processedData) {\n      props.push(diff(this.processedData, false));\n    }\n    await this.requestDataModel(dataController, this.data, { props, groupByFn });\n    this.animationState.transition(\"updateData\");\n  }\n  getSeriesDomain(direction) {\n    const { processedData, dataModel } = this;\n    if (!processedData || !dataModel || !this.calculatedBins.length)\n      return [];\n    const yDomain = dataModel.getDomain(this, `groupAgg`, \"aggregate\", processedData);\n    const xDomainMin = this.calculatedBins?.[0][0];\n    const xDomainMax = this.calculatedBins?.[(this.calculatedBins?.length ?? 0) - 1][1];\n    if (direction === \"x\" /* X */) {\n      return fixNumericExtent([xDomainMin, xDomainMax]);\n    }\n    return fixNumericExtent(yDomain);\n  }\n  async createNodeData() {\n    const {\n      id: seriesId,\n      axes,\n      processedData,\n      ctx: { callbackCache }\n    } = this;\n    const xAxis = axes[\"x\" /* X */];\n    const yAxis = axes[\"y\" /* Y */];\n    if (!xAxis || !yAxis) {\n      return;\n    }\n    const { scale: xScale } = xAxis;\n    const { scale: yScale } = yAxis;\n    const { xKey, yKey, xName, yName, fill, stroke, strokeWidth, cornerRadius } = this.properties;\n    const labelFormatter = this.properties.label.formatter ?? ((params) => String(params.value));\n    const nodeData = [];\n    const context = {\n      itemId: this.properties.yKey ?? this.id,\n      nodeData,\n      labelData: nodeData,\n      scales: this.calculateScaling(),\n      animationValid: true,\n      visible: this.visible\n    };\n    if (!this.visible || !processedData || processedData.type !== \"grouped\")\n      return context;\n    processedData.data.forEach((group) => {\n      const {\n        aggValues: [[negativeAgg, positiveAgg]] = [[0, 0]],\n        datum,\n        datum: { length: frequency },\n        keys: domain,\n        keys: [xDomainMin, xDomainMax]\n      } = group;\n      const xMinPx = xScale.convert(xDomainMin);\n      const xMaxPx = xScale.convert(xDomainMax);\n      const total = negativeAgg + positiveAgg;\n      const yZeroPx = yScale.convert(0);\n      const yMaxPx = yScale.convert(total);\n      const w = Math.abs(xMaxPx - xMinPx);\n      const h = Math.abs(yMaxPx - yZeroPx);\n      const x = Math.min(xMinPx, xMaxPx);\n      const y = Math.min(yZeroPx, yMaxPx);\n      let selectionDatumLabel = void 0;\n      if (total !== 0) {\n        selectionDatumLabel = {\n          x: x + w / 2,\n          y: y + h / 2,\n          text: callbackCache.call(labelFormatter, {\n            value: total,\n            datum,\n            seriesId,\n            xKey,\n            yKey,\n            xName,\n            yName\n          }) ?? String(total)\n        };\n      }\n      const nodeMidPoint = {\n        x: x + w / 2,\n        y: y + h / 2\n      };\n      const yAxisReversed = yAxis.isReversed();\n      nodeData.push({\n        series: this,\n        datum,\n        // required by SeriesNodeDatum, but might not make sense here\n        // since each selection is an aggregation of multiple data.\n        aggregatedValue: total,\n        frequency,\n        domain,\n        yKey,\n        xKey,\n        x,\n        y,\n        xValue: xMinPx,\n        yValue: yMaxPx,\n        width: w,\n        height: h,\n        midPoint: nodeMidPoint,\n        fill,\n        stroke,\n        cornerRadius,\n        topLeftCornerRadius: !yAxisReversed,\n        topRightCornerRadius: !yAxisReversed,\n        bottomRightCornerRadius: yAxisReversed,\n        bottomLeftCornerRadius: yAxisReversed,\n        opacity: 1,\n        strokeWidth,\n        label: selectionDatumLabel\n      });\n    });\n    nodeData.sort((a, b) => a.x - b.x);\n    return context;\n  }\n  nodeFactory() {\n    return new Rect();\n  }\n  async updateDatumSelection(opts) {\n    const { nodeData, datumSelection } = opts;\n    return datumSelection.update(\n      nodeData,\n      (rect) => {\n        rect.crisp = true;\n      },\n      (datum) => datum.domain.join(\"_\")\n    );\n  }\n  async updateDatumNodes(opts) {\n    const { isHighlight: isDatumHighlighted } = opts;\n    const {\n      fillOpacity: seriesFillOpacity,\n      strokeOpacity,\n      lineDash,\n      lineDashOffset,\n      shadow,\n      highlightStyle: {\n        item: {\n          fill: highlightedFill,\n          fillOpacity: highlightFillOpacity = seriesFillOpacity,\n          stroke: highlightedStroke,\n          strokeWidth: highlightedDatumStrokeWidth\n        }\n      }\n    } = this.properties;\n    opts.datumSelection.each((rect, datum, index) => {\n      const {\n        cornerRadius,\n        topLeftCornerRadius,\n        topRightCornerRadius,\n        bottomRightCornerRadius,\n        bottomLeftCornerRadius\n      } = datum;\n      const strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== void 0 ? highlightedDatumStrokeWidth : datum.strokeWidth;\n      const fillOpacity = isDatumHighlighted ? highlightFillOpacity : seriesFillOpacity;\n      rect.fill = (isDatumHighlighted ? highlightedFill : void 0) ?? datum.fill;\n      rect.stroke = (isDatumHighlighted ? highlightedStroke : void 0) ?? datum.stroke;\n      rect.fillOpacity = fillOpacity;\n      rect.strokeOpacity = strokeOpacity;\n      rect.strokeWidth = strokeWidth;\n      rect.lineDash = lineDash;\n      rect.lineDashOffset = lineDashOffset;\n      rect.topLeftCornerRadius = topLeftCornerRadius ? cornerRadius : 0;\n      rect.topRightCornerRadius = topRightCornerRadius ? cornerRadius : 0;\n      rect.bottomRightCornerRadius = bottomRightCornerRadius ? cornerRadius : 0;\n      rect.bottomLeftCornerRadius = bottomLeftCornerRadius ? cornerRadius : 0;\n      rect.fillShadow = shadow;\n      rect.zIndex = isDatumHighlighted ? Series.highlightedZIndex : index;\n      rect.visible = datum.height > 0;\n    });\n  }\n  async updateLabelSelection(opts) {\n    const { labelData, labelSelection } = opts;\n    return labelSelection.update(labelData, (text) => {\n      text.pointerEvents = 1 /* None */;\n      text.textAlign = \"center\";\n      text.textBaseline = \"middle\";\n    });\n  }\n  async updateLabelNodes(opts) {\n    const { fontStyle, fontWeight, fontFamily, fontSize, color } = this.properties.label;\n    const labelEnabled = this.isLabelEnabled();\n    opts.labelSelection.each((text, datum) => {\n      if (labelEnabled && datum?.label) {\n        text.text = datum.label.text;\n        text.x = datum.label.x;\n        text.y = datum.label.y;\n        text.fontStyle = fontStyle;\n        text.fontWeight = fontWeight;\n        text.fontFamily = fontFamily;\n        text.fontSize = fontSize;\n        text.fill = color;\n        text.visible = true;\n      } else {\n        text.visible = false;\n      }\n    });\n  }\n  initQuadTree(quadtree) {\n    const { value: childNode } = this.contentGroup.children().next();\n    if (childNode) {\n      addHitTestersToQuadtree(quadtree, childNode.children());\n    }\n  }\n  pickNodeClosestDatum(point) {\n    return findQuadtreeMatch(this, point);\n  }\n  getTooltipHtml(nodeDatum) {\n    const xAxis = this.axes[\"x\" /* X */];\n    const yAxis = this.axes[\"y\" /* Y */];\n    if (!this.properties.isValid() || !xAxis || !yAxis) {\n      return EMPTY_TOOLTIP_CONTENT;\n    }\n    const { xKey, yKey, xName, yName, fill: color, aggregation, tooltip } = this.properties;\n    const {\n      aggregatedValue,\n      frequency,\n      domain: [rangeMin, rangeMax],\n      itemId\n    } = nodeDatum;\n    const title = `${sanitizeHtml(xName ?? xKey)}: ${xAxis.formatDatum(rangeMin)} - ${xAxis.formatDatum(rangeMax)}`;\n    let content = yKey ? `<b>${sanitizeHtml(yName ?? yKey)} (${aggregation})</b>: ${yAxis.formatDatum(aggregatedValue)}<br>` : \"\";\n    content += `<b>Frequency</b>: ${frequency}`;\n    const defaults = {\n      title,\n      backgroundColor: color,\n      content\n    };\n    return tooltip.toTooltipHtml(defaults, {\n      datum: {\n        data: nodeDatum.datum,\n        aggregatedValue: nodeDatum.aggregatedValue,\n        domain: nodeDatum.domain,\n        frequency: nodeDatum.frequency\n      },\n      itemId,\n      xKey,\n      xName,\n      yKey,\n      yName,\n      color,\n      title,\n      seriesId: this.id\n    });\n  }\n  getLegendData(legendType) {\n    if (!this.data?.length || legendType !== \"category\") {\n      return [];\n    }\n    const { xKey, yName, fill, fillOpacity, stroke, strokeWidth, strokeOpacity, visible } = this.properties;\n    return [\n      {\n        legendType: \"category\",\n        id: this.id,\n        itemId: xKey,\n        seriesId: this.id,\n        enabled: visible,\n        label: {\n          text: yName ?? xKey ?? \"Frequency\"\n        },\n        symbols: [\n          {\n            marker: {\n              fill: fill ?? \"rgba(0, 0, 0, 0)\",\n              stroke: stroke ?? \"rgba(0, 0, 0, 0)\",\n              fillOpacity,\n              strokeOpacity,\n              strokeWidth\n            }\n          }\n        ]\n      }\n    ];\n  }\n  animateEmptyUpdateReady({ datumSelection, labelSelection }) {\n    const fns = prepareBarAnimationFunctions(collapsedStartingBarPosition(true, this.axes, \"normal\"));\n    fromToMotion(this.id, \"datums\", this.ctx.animationManager, [datumSelection], fns);\n    seriesLabelFadeInAnimation(this, \"labels\", this.ctx.animationManager, labelSelection);\n  }\n  animateWaitingUpdateReady(data) {\n    const dataDiff = this.processedData?.reduced?.diff;\n    const fns = prepareBarAnimationFunctions(collapsedStartingBarPosition(true, this.axes, \"normal\"));\n    fromToMotion(\n      this.id,\n      \"datums\",\n      this.ctx.animationManager,\n      [data.datumSelection],\n      fns,\n      (_, datum) => createDatumId(datum.domain),\n      dataDiff\n    );\n    seriesLabelFadeInAnimation(this, \"labels\", this.ctx.animationManager, data.labelSelection);\n  }\n  isLabelEnabled() {\n    return this.properties.label.enabled;\n  }\n  computeFocusBounds({ datumIndex, seriesRect }) {\n    return computeBarFocusBounds(this.contextNodeData?.nodeData[datumIndex], this.contentGroup, seriesRect);\n  }\n};\nHistogramSeries.className = \"HistogramSeries\";\nHistogramSeries.type = \"histogram\";\n\n// packages/ag-charts-community/src/chart/series/cartesian/histogramSeriesModule.ts\nvar HistogramSeriesModule = {\n  type: \"series\",\n  optionsKey: \"series[]\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\"],\n  identifier: \"histogram\",\n  moduleFactory: (ctx) => new HistogramSeries(ctx),\n  tooltipDefaults: { range: \"exact\" },\n  defaultAxes: [\n    {\n      type: \"number\" /* NUMBER */,\n      position: \"bottom\" /* BOTTOM */\n    },\n    {\n      type: \"number\" /* NUMBER */,\n      position: \"left\" /* LEFT */\n    }\n  ],\n  themeTemplate: {\n    series: {\n      strokeWidth: 1,\n      fillOpacity: 1,\n      strokeOpacity: 1,\n      lineDash: [0],\n      lineDashOffset: 0,\n      label: {\n        enabled: false,\n        fontSize: 12,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_INSIDE_SERIES_LABEL_COLOUR\n      },\n      shadow: {\n        enabled: false,\n        color: DEFAULT_SHADOW_COLOUR,\n        xOffset: 3,\n        yOffset: 3,\n        blur: 5\n      }\n    }\n  },\n  paletteFactory: ({ takeColors }) => {\n    const {\n      fills: [fill],\n      strokes: [stroke]\n    } = takeColors(1);\n    return { fill, stroke };\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/cartesian/lineSeriesProperties.ts\nvar LineSeriesProperties = class extends CartesianSeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.stroke = \"#874349\";\n    this.strokeWidth = 2;\n    this.strokeOpacity = 1;\n    this.lineDash = [0];\n    this.lineDashOffset = 0;\n    this.interpolation = new InterpolationProperties();\n    this.marker = new SeriesMarker();\n    this.label = new Label();\n    this.tooltip = new SeriesTooltip();\n    this.connectMissingData = false;\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], LineSeriesProperties.prototype, \"xKey\", 2);\n__decorateClass([\n  Validate(STRING)\n], LineSeriesProperties.prototype, \"yKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], LineSeriesProperties.prototype, \"xName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], LineSeriesProperties.prototype, \"yName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], LineSeriesProperties.prototype, \"yFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], LineSeriesProperties.prototype, \"stackGroup\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], LineSeriesProperties.prototype, \"normalizedTo\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], LineSeriesProperties.prototype, \"title\", 2);\n__decorateClass([\n  Validate(COLOR_STRING)\n], LineSeriesProperties.prototype, \"stroke\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], LineSeriesProperties.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(RATIO)\n], LineSeriesProperties.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(LINE_DASH)\n], LineSeriesProperties.prototype, \"lineDash\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], LineSeriesProperties.prototype, \"lineDashOffset\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], LineSeriesProperties.prototype, \"interpolation\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], LineSeriesProperties.prototype, \"marker\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], LineSeriesProperties.prototype, \"label\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], LineSeriesProperties.prototype, \"tooltip\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], LineSeriesProperties.prototype, \"connectMissingData\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/lineSeries.ts\nvar CROSS_FILTER_LINE_STROKE_OPACITY_FACTOR = 0.25;\nvar LineSeries = class extends CartesianSeries {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      directionKeys: DEFAULT_CARTESIAN_DIRECTION_KEYS,\n      directionNames: DEFAULT_CARTESIAN_DIRECTION_NAMES,\n      hasMarkers: true,\n      pickModes: [\n        2 /* AXIS_ALIGNED */,\n        1 /* NEAREST_NODE */,\n        0 /* EXACT_SHAPE_MATCH */\n      ],\n      markerSelectionGarbageCollection: false,\n      animationResetFns: {\n        path: buildResetPathFn({ getVisible: () => this.visible, getOpacity: () => this.getOpacity() }),\n        label: resetLabelFn,\n        marker: (node, datum) => ({ ...resetMarkerFn(node), ...resetMarkerPositionFn(node, datum) })\n      }\n    });\n    this.properties = new LineSeriesProperties();\n  }\n  get pickModeAxis() {\n    return \"main-category\";\n  }\n  async processData(dataController) {\n    if (this.data == null || !this.properties.isValid()) {\n      return;\n    }\n    const { data, visible, seriesGrouping: { groupIndex = this.id, stackCount = 1 } = {} } = this;\n    const { xKey, yKey, yFilterKey, connectMissingData, normalizedTo } = this.properties;\n    const animationEnabled = !this.ctx.animationManager.isSkipped();\n    const xScale = this.axes[\"x\" /* X */]?.scale;\n    const yScale = this.axes[\"y\" /* Y */]?.scale;\n    const { isContinuousX, xScaleType, yScaleType } = this.getScaleInformation({ xScale, yScale });\n    const common = { invalidValue: null };\n    if (connectMissingData && stackCount > 1) {\n      common.invalidValue = 0;\n    }\n    if (!visible) {\n      common.forceValue = 0;\n    }\n    const props = [];\n    if (!isContinuousX) {\n      props.push(keyProperty(xKey, xScaleType, { id: \"xKey\" }));\n    }\n    props.push(\n      valueProperty(xKey, xScaleType, { id: \"xValue\" }),\n      valueProperty(yKey, yScaleType, {\n        id: `yValueRaw`,\n        ...common,\n        invalidValue: void 0\n      })\n    );\n    if (yFilterKey != null) {\n      props.push(valueProperty(yFilterKey, yScaleType, { id: \"yFilterRaw\" }));\n    }\n    if (stackCount > 1) {\n      const ids = [\n        `line-stack-${groupIndex}-yValues`,\n        `line-stack-${groupIndex}-yValues-trailing`,\n        `line-stack-${groupIndex}-yValues-marker`\n      ];\n      props.push(\n        ...groupAccumulativeValueProperty(\n          yKey,\n          \"window\",\n          \"current\",\n          { id: `yValueEnd`, ...common, groupId: ids[0] },\n          yScaleType\n        ),\n        ...groupAccumulativeValueProperty(\n          yKey,\n          \"window-trailing\",\n          \"current\",\n          { id: `yValueStart`, ...common, groupId: ids[1] },\n          yScaleType\n        ),\n        ...groupAccumulativeValueProperty(\n          yKey,\n          \"normal\",\n          \"current\",\n          { id: `yValueCumulative`, ...common, groupId: ids[2] },\n          yScaleType\n        )\n      );\n      if (isDefined(normalizedTo)) {\n        props.push(normaliseGroupTo([ids[0], ids[1], ids[2]], normalizedTo, \"range\"));\n      }\n    }\n    if (animationEnabled) {\n      props.push(animationValidation(isContinuousX ? [\"xValue\"] : void 0));\n      if (this.processedData) {\n        props.push(diff(this.processedData));\n      }\n    }\n    await this.requestDataModel(dataController, data, { props });\n    this.animationState.transition(\"updateData\");\n  }\n  getSeriesDomain(direction) {\n    const { dataModel, processedData } = this;\n    if (!dataModel || !processedData?.data.length)\n      return [];\n    const xDef = dataModel.resolveProcessedDataDefById(this, `xValue`);\n    if (direction === \"x\" /* X */) {\n      const domain = dataModel.getDomain(this, `xValue`, \"value\", processedData);\n      if (xDef?.def.type === \"value\" && xDef.def.valueType === \"category\") {\n        return domain;\n      }\n      return fixNumericExtent(extent(domain));\n    } else {\n      const stackCount = this.seriesGrouping?.stackCount ?? 1;\n      const domain = stackCount > 1 ? dataModel.getDomain(this, `yValueEnd`, \"value\", processedData) : dataModel.getDomain(this, `yValueRaw`, \"value\", processedData);\n      return fixNumericExtent(domain);\n    }\n  }\n  async createNodeData() {\n    const { processedData, dataModel, axes } = this;\n    const xAxis = axes[\"x\" /* X */];\n    const yAxis = axes[\"y\" /* Y */];\n    if (!processedData || !dataModel || !xAxis || !yAxis) {\n      return;\n    }\n    const { xKey, yKey, yFilterKey, xName, yName, marker, label, connectMissingData, legendItemName } = this.properties;\n    const stacked = (this.seriesGrouping?.stackCount ?? 1) > 1;\n    const xScale = xAxis.scale;\n    const yScale = yAxis.scale;\n    const xOffset = (xScale.bandwidth ?? 0) / 2;\n    const yOffset = (yScale.bandwidth ?? 0) / 2;\n    const nodeData = [];\n    const size = marker.enabled ? marker.size : 0;\n    const xIdx = dataModel.resolveProcessedDataIndexById(this, `xValue`);\n    const yIdx = dataModel.resolveProcessedDataIndexById(this, `yValueRaw`);\n    const ySelectionIdx = yFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `yFilterRaw`) : void 0;\n    const yCumulativeIdx = stacked ? dataModel.resolveProcessedDataIndexById(this, `yValueCumulative`) : yIdx;\n    const yEndIdx = stacked ? dataModel.resolveProcessedDataIndexById(this, `yValueEnd`) : void 0;\n    let moveTo = true;\n    let crossFiltering = false;\n    processedData.data?.forEach(({ datum, values }) => {\n      const xDatum = values[xIdx];\n      const yDatum = values[yIdx];\n      const yCumulativeDatum = values[yCumulativeIdx];\n      const yEndDatum = yEndIdx != null ? values[yEndIdx] : void 0;\n      if (yDatum == null) {\n        moveTo || (moveTo = !connectMissingData);\n        return;\n      }\n      const x = xScale.convert(xDatum) + xOffset;\n      if (isNaN(x)) {\n        moveTo || (moveTo = !connectMissingData);\n        return;\n      }\n      const y = yScale.convert(yCumulativeDatum) + yOffset;\n      const selected = ySelectionIdx != null ? values[ySelectionIdx] === yDatum : void 0;\n      if (selected === false) {\n        crossFiltering = true;\n      }\n      const labelText = this.getLabelText(\n        label,\n        { value: yDatum, datum, xKey, yKey, xName, yName, legendItemName },\n        formatValue\n      );\n      nodeData.push({\n        series: this,\n        datum,\n        yKey,\n        xKey,\n        point: { x, y, moveTo, size },\n        midPoint: { x, y },\n        cumulativeValue: yEndDatum,\n        yValue: yDatum,\n        xValue: xDatum,\n        capDefaults: {\n          lengthRatioMultiplier: this.properties.marker.getDiameter(),\n          lengthMax: Infinity\n        },\n        labelText,\n        selected\n      });\n      moveTo = false;\n    });\n    return {\n      itemId: yKey,\n      nodeData,\n      labelData: nodeData,\n      scales: this.calculateScaling(),\n      visible: this.visible,\n      crossFiltering\n    };\n  }\n  isPathOrSelectionDirty() {\n    return this.properties.marker.isDirty();\n  }\n  markerFactory() {\n    const { shape } = this.properties.marker;\n    const MarkerShape = getMarker(shape);\n    return new MarkerShape();\n  }\n  async updatePathNodes(opts) {\n    const {\n      paths: [lineNode],\n      opacity,\n      visible,\n      animationEnabled\n    } = opts;\n    const crossFiltering = this.contextNodeData?.crossFiltering === true;\n    lineNode.setProperties({\n      fill: void 0,\n      lineJoin: \"round\",\n      pointerEvents: 1 /* None */,\n      opacity,\n      stroke: this.properties.stroke,\n      strokeWidth: this.getStrokeWidth(this.properties.strokeWidth),\n      strokeOpacity: this.properties.strokeOpacity * (crossFiltering ? CROSS_FILTER_LINE_STROKE_OPACITY_FACTOR : 1),\n      lineDash: this.properties.lineDash,\n      lineDashOffset: this.properties.lineDashOffset\n    });\n    if (!animationEnabled) {\n      lineNode.visible = visible;\n    }\n    updateClipPath(this, lineNode);\n  }\n  async updateMarkerSelection(opts) {\n    let { nodeData } = opts;\n    const { markerSelection } = opts;\n    const markersEnabled = this.properties.marker.enabled || this.contextNodeData?.crossFiltering === true;\n    nodeData = markersEnabled ? nodeData : [];\n    if (this.properties.marker.isDirty()) {\n      markerSelection.clear();\n      markerSelection.cleanup();\n    }\n    return markerSelection.update(nodeData, void 0, (datum) => createDatumId(datum.xValue));\n  }\n  async updateMarkerNodes(opts) {\n    const { markerSelection, isHighlight: highlighted } = opts;\n    const { xKey, yKey, stroke, strokeWidth, strokeOpacity, marker, highlightStyle } = this.properties;\n    const baseStyle = mergeDefaults(highlighted && highlightStyle.item, marker.getStyle(), {\n      stroke,\n      strokeWidth,\n      strokeOpacity\n    });\n    const applyTranslation = this.ctx.animationManager.isSkipped();\n    markerSelection.each((node, datum) => {\n      this.updateMarkerStyle(node, marker, { datum, highlighted, xKey, yKey }, baseStyle, {\n        applyTranslation,\n        selected: datum.selected\n      });\n    });\n    if (!highlighted) {\n      marker.markClean();\n    }\n  }\n  async updateLabelSelection(opts) {\n    return opts.labelSelection.update(this.isLabelEnabled() ? opts.labelData : []);\n  }\n  async updateLabelNodes(opts) {\n    const { enabled, fontStyle, fontWeight, fontSize, fontFamily, color } = this.properties.label;\n    opts.labelSelection.each((text, datum) => {\n      if (enabled && datum?.labelText) {\n        text.fontStyle = fontStyle;\n        text.fontWeight = fontWeight;\n        text.fontSize = fontSize;\n        text.fontFamily = fontFamily;\n        text.textAlign = \"center\";\n        text.textBaseline = \"bottom\";\n        text.text = datum.labelText;\n        text.x = datum.point.x;\n        text.y = datum.point.y - 10;\n        text.fill = color;\n        text.visible = true;\n      } else {\n        text.visible = false;\n      }\n    });\n  }\n  getTooltipHtml(nodeDatum) {\n    const xAxis = this.axes[\"x\" /* X */];\n    const yAxis = this.axes[\"y\" /* Y */];\n    if (!this.properties.isValid() || !xAxis || !yAxis) {\n      return EMPTY_TOOLTIP_CONTENT;\n    }\n    const { xKey, yKey, xName, yName, strokeWidth, marker, tooltip } = this.properties;\n    const { datum, xValue, yValue, itemId } = nodeDatum;\n    const xString = xAxis.formatDatum(xValue);\n    const yString = yAxis.formatDatum(yValue);\n    const title = sanitizeHtml(this.properties.title ?? yName);\n    const content = sanitizeHtml(xString + \": \" + yString);\n    const baseStyle = mergeDefaults({ fill: marker.stroke }, marker.getStyle(), { strokeWidth });\n    const { fill: color } = this.getMarkerStyle(\n      marker,\n      { datum: nodeDatum, xKey, yKey, highlighted: false },\n      baseStyle\n    );\n    return tooltip.toTooltipHtml(\n      { title, content, backgroundColor: color },\n      {\n        datum,\n        itemId,\n        xKey,\n        xName,\n        yKey,\n        yName,\n        title,\n        color,\n        seriesId: this.id,\n        ...this.getModuleTooltipParams()\n      }\n    );\n  }\n  getLegendData(legendType) {\n    if (!(this.data?.length && this.properties.isValid() && legendType === \"category\")) {\n      return [];\n    }\n    const { yKey, yName, stroke, strokeOpacity, strokeWidth, lineDash, title, marker, visible, legendItemName } = this.properties;\n    const color0 = \"rgba(0, 0, 0, 0)\";\n    return [\n      {\n        legendType: \"category\",\n        id: this.id,\n        itemId: yKey,\n        legendItemName,\n        seriesId: this.id,\n        enabled: visible,\n        label: {\n          text: legendItemName ?? title ?? yName ?? yKey\n        },\n        symbols: [\n          {\n            marker: {\n              shape: marker.shape,\n              fill: marker.fill ?? color0,\n              stroke: marker.stroke ?? stroke ?? color0,\n              fillOpacity: marker.fillOpacity ?? 1,\n              strokeOpacity: marker.strokeOpacity ?? strokeOpacity ?? 1,\n              strokeWidth: marker.strokeWidth ?? 0,\n              enabled: marker.enabled\n            },\n            line: {\n              stroke: stroke ?? color0,\n              strokeOpacity,\n              strokeWidth,\n              lineDash\n            }\n          }\n        ]\n      }\n    ];\n  }\n  async updatePaths(opts) {\n    this.updateLinePaths(opts.paths, opts.contextData);\n  }\n  updateLinePaths(paths, contextData) {\n    const { interpolation } = this.properties;\n    const { nodeData } = contextData;\n    const [lineNode] = paths;\n    lineNode.path.clear(true);\n    for (const range3 of pathRanges(nodeData)) {\n      plotPath(pathRangePoints(nodeData, range3), lineNode, interpolation);\n    }\n    lineNode.checkPathDirty();\n  }\n  animateEmptyUpdateReady(animationData) {\n    const { markerSelection, labelSelection, annotationSelections, contextData, paths } = animationData;\n    const { animationManager } = this.ctx;\n    this.updateLinePaths(paths, contextData);\n    pathSwipeInAnimation(this, animationManager, ...paths);\n    resetMotion([markerSelection], resetMarkerPositionFn);\n    markerSwipeScaleInAnimation(this, animationManager, markerSelection);\n    seriesLabelFadeInAnimation(this, \"labels\", animationManager, labelSelection);\n    seriesLabelFadeInAnimation(this, \"annotations\", animationManager, ...annotationSelections);\n  }\n  animateReadyResize(animationData) {\n    const { contextData, paths } = animationData;\n    this.updateLinePaths(paths, contextData);\n    super.animateReadyResize(animationData);\n  }\n  animateWaitingUpdateReady(animationData) {\n    const { animationManager } = this.ctx;\n    const {\n      markerSelection: markerSelections,\n      labelSelection: labelSelections,\n      annotationSelections,\n      contextData,\n      paths,\n      previousContextData\n    } = animationData;\n    const [path] = paths;\n    this.resetMarkerAnimation(animationData);\n    this.resetLabelAnimation(animationData);\n    const update = () => {\n      this.resetPathAnimation(animationData);\n      this.updateLinePaths(paths, contextData);\n    };\n    const skip = () => {\n      animationManager.skipCurrentBatch();\n      update();\n    };\n    if (contextData == null || previousContextData == null) {\n      update();\n      markerFadeInAnimation(this, animationManager, \"added\", markerSelections);\n      pathFadeInAnimation(this, \"path_properties\", animationManager, \"add\", path);\n      seriesLabelFadeInAnimation(this, \"labels\", animationManager, labelSelections);\n      seriesLabelFadeInAnimation(this, \"annotations\", animationManager, ...annotationSelections);\n      return;\n    }\n    if (contextData.crossFiltering !== previousContextData.crossFiltering) {\n      skip();\n      return;\n    }\n    let fns;\n    try {\n      fns = prepareLinePathAnimation(\n        contextData,\n        previousContextData,\n        this.processedData?.reduced?.diff,\n        this.properties.interpolation\n      );\n    } catch {\n      fns = void 0;\n    }\n    if (fns === void 0) {\n      skip();\n      return;\n    } else if (fns.status === \"no-op\") {\n      return;\n    }\n    markerFadeInAnimation(this, animationManager, void 0, markerSelections);\n    fromToMotion(this.id, \"path_properties\", animationManager, [path], fns.pathProperties);\n    if (fns.status === \"added\") {\n      this.updateLinePaths(paths, contextData);\n    } else if (fns.status === \"removed\") {\n      this.updateLinePaths(paths, previousContextData);\n    } else {\n      pathMotion(this.id, \"path_update\", animationManager, [path], fns.path);\n    }\n    if (fns.hasMotion) {\n      seriesLabelFadeInAnimation(this, \"labels\", animationManager, labelSelections);\n      seriesLabelFadeInAnimation(this, \"annotations\", animationManager, ...annotationSelections);\n    }\n  }\n  isLabelEnabled() {\n    return this.properties.label.enabled;\n  }\n  getBandScalePadding() {\n    return { inner: 1, outer: 0.1 };\n  }\n  nodeFactory() {\n    return new Group();\n  }\n  getFormattedMarkerStyle(datum) {\n    const { xKey, yKey } = this.properties;\n    return this.getMarkerStyle(this.properties.marker, { datum, xKey, yKey, highlighted: true });\n  }\n  computeFocusBounds(opts) {\n    return computeMarkerFocusBounds(this, opts);\n  }\n};\nLineSeries.className = \"LineSeries\";\nLineSeries.type = \"line\";\n\n// packages/ag-charts-community/src/chart/series/cartesian/lineSeriesModule.ts\nvar LineSeriesModule = {\n  type: \"series\",\n  optionsKey: \"series[]\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\"],\n  identifier: \"line\",\n  moduleFactory: (ctx) => new LineSeries(ctx),\n  stackable: true,\n  tooltipDefaults: { range: \"nearest\" },\n  defaultAxes: [\n    {\n      type: \"number\" /* NUMBER */,\n      position: \"left\" /* LEFT */\n    },\n    {\n      type: \"category\" /* CATEGORY */,\n      position: \"bottom\" /* BOTTOM */\n    }\n  ],\n  themeTemplate: {\n    series: {\n      tooltip: { position: { type: \"node\" } },\n      strokeWidth: 2,\n      strokeOpacity: 1,\n      lineDash: [0],\n      lineDashOffset: 0,\n      interpolation: {\n        type: \"linear\",\n        // @ts-expect-error - users shouldn't specify all options, but we have to for theming to work\n        tension: 1,\n        position: \"end\"\n      },\n      marker: {\n        shape: \"circle\",\n        size: 7,\n        strokeWidth: 0\n      },\n      label: {\n        enabled: false,\n        fontSize: 12,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_LABEL_COLOUR\n      },\n      errorBar: {\n        cap: {\n          lengthRatio: 1\n        }\n      }\n    }\n  },\n  paletteFactory: (params) => {\n    const { marker } = markerPaletteFactory(params);\n    return { stroke: marker.fill, marker };\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/cartesian/scatterSeriesProperties.ts\nvar ScatterSeriesLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.placement = \"top\";\n  }\n};\n__decorateClass([\n  Validate(LABEL_PLACEMENT)\n], ScatterSeriesLabel.prototype, \"placement\", 2);\nvar ScatterSeriesProperties = class extends CartesianSeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.colorRange = [\"#ffff00\", \"#00ff00\", \"#0000ff\"];\n    this.label = new ScatterSeriesLabel();\n    this.tooltip = new SeriesTooltip();\n    // No validation. Not a part of the options contract.\n    this.marker = new SeriesMarker();\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], ScatterSeriesProperties.prototype, \"xKey\", 2);\n__decorateClass([\n  Validate(STRING)\n], ScatterSeriesProperties.prototype, \"yKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"labelKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"colorKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"xFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"yFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"xName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"yName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"labelName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"colorName\", 2);\n__decorateClass([\n  Validate(NUMBER_ARRAY, { optional: true })\n], ScatterSeriesProperties.prototype, \"colorDomain\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY)\n], ScatterSeriesProperties.prototype, \"colorRange\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], ScatterSeriesProperties.prototype, \"title\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.shape\")\n], ScatterSeriesProperties.prototype, \"shape\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.size\")\n], ScatterSeriesProperties.prototype, \"size\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.fill\")\n], ScatterSeriesProperties.prototype, \"fill\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.fillOpacity\")\n], ScatterSeriesProperties.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.stroke\")\n], ScatterSeriesProperties.prototype, \"stroke\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.strokeWidth\")\n], ScatterSeriesProperties.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.strokeOpacity\")\n], ScatterSeriesProperties.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  ProxyProperty(\"marker.itemStyler\", { optional: true })\n], ScatterSeriesProperties.prototype, \"itemStyler\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], ScatterSeriesProperties.prototype, \"label\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], ScatterSeriesProperties.prototype, \"tooltip\", 2);\n\n// packages/ag-charts-community/src/chart/series/cartesian/scatterSeries.ts\nvar ScatterSeries = class extends CartesianSeries {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      directionKeys: DEFAULT_CARTESIAN_DIRECTION_KEYS,\n      directionNames: DEFAULT_CARTESIAN_DIRECTION_NAMES,\n      pickModes: [\n        2 /* AXIS_ALIGNED */,\n        1 /* NEAREST_NODE */,\n        0 /* EXACT_SHAPE_MATCH */\n      ],\n      pathsPerSeries: [],\n      hasMarkers: true,\n      markerSelectionGarbageCollection: false,\n      animationResetFns: {\n        marker: resetMarkerFn,\n        label: resetLabelFn\n      }\n    });\n    this.properties = new ScatterSeriesProperties();\n    this.colorScale = new ColorScale();\n  }\n  get pickModeAxis() {\n    return \"main-category\";\n  }\n  async processData(dataController) {\n    if (!this.properties.isValid() || this.data == null || !this.visible)\n      return;\n    const xScale = this.axes[\"x\" /* X */]?.scale;\n    const yScale = this.axes[\"y\" /* Y */]?.scale;\n    const { xScaleType, yScaleType } = this.getScaleInformation({ xScale, yScale });\n    const colorScaleType = this.colorScale.type;\n    const { xKey, yKey, xFilterKey, yFilterKey, labelKey, colorKey, colorDomain, colorRange } = this.properties;\n    const { dataModel, processedData } = await this.requestDataModel(dataController, this.data, {\n      props: [\n        valueProperty(xKey, xScaleType, { id: `xValue` }),\n        valueProperty(yKey, yScaleType, { id: `yValue` }),\n        ...xFilterKey != null ? [valueProperty(xFilterKey, xScaleType, { id: \"xFilterValue\" })] : [],\n        ...yFilterKey != null ? [valueProperty(yFilterKey, yScaleType, { id: \"yFilterValue\" })] : [],\n        ...colorKey ? [valueProperty(colorKey, colorScaleType, { id: `colorValue` })] : [],\n        ...labelKey ? [valueProperty(labelKey, \"band\", { id: `labelValue` })] : []\n      ]\n    });\n    if (colorKey) {\n      const colorKeyIdx = dataModel.resolveProcessedDataIndexById(this, `colorValue`);\n      this.colorScale.domain = colorDomain ?? processedData.domain.values[colorKeyIdx] ?? [];\n      this.colorScale.range = colorRange;\n      this.colorScale.update();\n    }\n    this.animationState.transition(\"updateData\");\n  }\n  getSeriesDomain(direction) {\n    const { dataModel, processedData } = this;\n    if (!processedData || !dataModel)\n      return [];\n    const id = direction === \"x\" /* X */ ? `xValue` : `yValue`;\n    const dataDef = dataModel.resolveProcessedDataDefById(this, id);\n    const domain = dataModel.getDomain(this, id, \"value\", processedData);\n    if (dataDef?.def.type === \"value\" && dataDef?.def.valueType === \"category\") {\n      return domain;\n    }\n    return fixNumericExtent(extent(domain));\n  }\n  async createNodeData() {\n    const { axes, dataModel, processedData, colorScale } = this;\n    const {\n      xKey,\n      yKey,\n      xFilterKey,\n      yFilterKey,\n      labelKey,\n      colorKey,\n      xName,\n      yName,\n      labelName,\n      marker,\n      label,\n      visible\n    } = this.properties;\n    const { placement } = label;\n    const markerShape = getMarker(marker.shape);\n    const xAxis = axes[\"x\" /* X */];\n    const yAxis = axes[\"y\" /* Y */];\n    if (!(dataModel && processedData && visible && xAxis && yAxis)) {\n      return;\n    }\n    const xDataIdx = dataModel.resolveProcessedDataIndexById(this, `xValue`);\n    const yDataIdx = dataModel.resolveProcessedDataIndexById(this, `yValue`);\n    const colorDataIdx = colorKey != null ? dataModel.resolveProcessedDataIndexById(this, `colorValue`) : -1;\n    const labelDataIdx = labelKey != null ? dataModel.resolveProcessedDataIndexById(this, `labelValue`) : -1;\n    const xFilterDataIdx = xFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `xFilterValue`) : void 0;\n    const yFilterDataIdx = yFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `yFilterValue`) : void 0;\n    const xScale = xAxis.scale;\n    const yScale = yAxis.scale;\n    const xOffset = (xScale.bandwidth ?? 0) / 2;\n    const yOffset = (yScale.bandwidth ?? 0) / 2;\n    const nodeData = [];\n    const font = label.getFont();\n    const textMeasurer = CachedTextMeasurerPool.getMeasurer({ font });\n    for (const { values, datum } of processedData.data ?? []) {\n      const xDatum = values[xDataIdx];\n      const yDatum = values[yDataIdx];\n      const x = xScale.convert(xDatum) + xOffset;\n      const y = yScale.convert(yDatum) + yOffset;\n      const selected = xFilterDataIdx != null && yFilterDataIdx != null ? values[xFilterDataIdx] === xDatum && values[yFilterDataIdx] === yDatum : void 0;\n      const labelText = this.getLabelText(label, {\n        value: labelKey ? values[labelDataIdx] : yDatum,\n        datum,\n        xKey,\n        yKey,\n        labelKey,\n        xName,\n        yName,\n        labelName\n      });\n      const size = textMeasurer.measureText(labelText);\n      const fill = colorKey ? colorScale.convert(values[colorDataIdx]) : void 0;\n      nodeData.push({\n        series: this,\n        itemId: yKey,\n        yKey,\n        xKey,\n        datum,\n        xValue: xDatum,\n        yValue: yDatum,\n        capDefaults: { lengthRatioMultiplier: marker.getDiameter(), lengthMax: Infinity },\n        point: { x, y, size: marker.size },\n        midPoint: { x, y },\n        fill,\n        label: { text: labelText, ...size },\n        marker: markerShape,\n        placement,\n        selected\n      });\n    }\n    return {\n      itemId: yKey,\n      nodeData,\n      labelData: nodeData,\n      scales: this.calculateScaling(),\n      visible: this.visible\n    };\n  }\n  isPathOrSelectionDirty() {\n    return this.properties.marker.isDirty();\n  }\n  getLabelData() {\n    return this.contextNodeData?.labelData ?? [];\n  }\n  markerFactory() {\n    const { shape } = this.properties.marker;\n    const MarkerShape = getMarker(shape);\n    return new MarkerShape();\n  }\n  async updateMarkerSelection(opts) {\n    const { nodeData, markerSelection } = opts;\n    if (this.properties.marker.isDirty()) {\n      markerSelection.clear();\n      markerSelection.cleanup();\n    }\n    return markerSelection.update(this.properties.marker.enabled ? nodeData : []);\n  }\n  async updateMarkerNodes(opts) {\n    const { markerSelection, isHighlight: highlighted } = opts;\n    const { xKey, yKey, labelKey, marker, highlightStyle } = this.properties;\n    const baseStyle = mergeDefaults(highlighted && highlightStyle.item, marker.getStyle());\n    markerSelection.each((node, datum) => {\n      this.updateMarkerStyle(node, marker, { datum, highlighted, xKey, yKey, labelKey }, baseStyle, {\n        selected: datum.selected\n      });\n    });\n    if (!highlighted) {\n      marker.markClean();\n    }\n  }\n  async updateLabelSelection(opts) {\n    const placedLabels = this.isLabelEnabled() ? this.chart?.placeLabels().get(this) ?? [] : [];\n    return opts.labelSelection.update(\n      placedLabels.map(({ datum, x, y }) => ({\n        ...datum,\n        point: { x, y, size: datum.point.size },\n        placement: \"top\"\n      })),\n      (text) => {\n        text.pointerEvents = 1 /* None */;\n      }\n    );\n  }\n  async updateLabelNodes(opts) {\n    const { label } = this.properties;\n    opts.labelSelection.each((text, datum) => {\n      text.text = datum.label.text;\n      text.fill = label.color;\n      text.x = datum.point?.x ?? 0;\n      text.y = datum.point?.y ?? 0;\n      text.fontStyle = label.fontStyle;\n      text.fontWeight = label.fontWeight;\n      text.fontSize = label.fontSize;\n      text.fontFamily = label.fontFamily;\n      text.textAlign = \"left\";\n      text.textBaseline = \"top\";\n    });\n  }\n  getTooltipHtml(nodeDatum) {\n    const xAxis = this.axes[\"x\" /* X */];\n    const yAxis = this.axes[\"y\" /* Y */];\n    if (!this.properties.isValid() || !xAxis || !yAxis) {\n      return EMPTY_TOOLTIP_CONTENT;\n    }\n    const { xKey, yKey, labelKey, xName, yName, labelName, title = yName, marker, tooltip } = this.properties;\n    const { datum, xValue, yValue, label, itemId } = nodeDatum;\n    const baseStyle = mergeDefaults(\n      { fill: nodeDatum.fill, strokeWidth: this.getStrokeWidth(marker.strokeWidth) },\n      marker.getStyle()\n    );\n    const { fill: color = \"gray\" } = this.getMarkerStyle(\n      marker,\n      { datum: nodeDatum, highlighted: false, xKey, yKey, labelKey },\n      baseStyle\n    );\n    const xString = sanitizeHtml(xAxis.formatDatum(xValue));\n    const yString = sanitizeHtml(yAxis.formatDatum(yValue));\n    let content = `<b>${sanitizeHtml(xName ?? xKey)}</b>: ${xString}<br><b>${sanitizeHtml(yName ?? yKey)}</b>: ${yString}`;\n    if (labelKey) {\n      content = `<b>${sanitizeHtml(labelName ?? labelKey)}</b>: ${sanitizeHtml(label.text)}<br>` + content;\n    }\n    return tooltip.toTooltipHtml(\n      { title, content, backgroundColor: color },\n      {\n        datum,\n        itemId,\n        xKey,\n        xName,\n        yKey,\n        yName,\n        labelKey,\n        labelName,\n        title,\n        color,\n        seriesId: this.id,\n        ...this.getModuleTooltipParams()\n      }\n    );\n  }\n  getLegendData(legendType) {\n    const { yKey, yName, title, marker, visible } = this.properties;\n    const { fill, stroke, fillOpacity, strokeOpacity, strokeWidth } = marker;\n    if (!this.data?.length || !this.properties.isValid() || legendType !== \"category\") {\n      return [];\n    }\n    return [\n      {\n        legendType: \"category\",\n        id: this.id,\n        itemId: yKey,\n        seriesId: this.id,\n        enabled: visible,\n        label: {\n          text: title ?? yName ?? yKey\n        },\n        symbols: [\n          {\n            marker: {\n              shape: marker.shape,\n              fill: marker.fill ?? fill ?? \"rgba(0, 0, 0, 0)\",\n              stroke: marker.stroke ?? stroke ?? \"rgba(0, 0, 0, 0)\",\n              fillOpacity: fillOpacity ?? 1,\n              strokeOpacity: strokeOpacity ?? 1,\n              strokeWidth: strokeWidth ?? 0\n            }\n          }\n        ]\n      }\n    ];\n  }\n  animateEmptyUpdateReady(data) {\n    const { markerSelection, labelSelection, annotationSelections } = data;\n    markerScaleInAnimation(this, this.ctx.animationManager, markerSelection);\n    seriesLabelFadeInAnimation(this, \"labels\", this.ctx.animationManager, labelSelection);\n    seriesLabelFadeInAnimation(this, \"annotations\", this.ctx.animationManager, ...annotationSelections);\n  }\n  isLabelEnabled() {\n    return this.properties.label.enabled;\n  }\n  nodeFactory() {\n    return new Group();\n  }\n  getFormattedMarkerStyle(datum) {\n    const { xKey, yKey, labelKey } = this.properties;\n    return this.getMarkerStyle(this.properties.marker, { datum, xKey, yKey, labelKey, highlighted: true });\n  }\n  computeFocusBounds(opts) {\n    return computeMarkerFocusBounds(this, opts);\n  }\n};\nScatterSeries.className = \"ScatterSeries\";\nScatterSeries.type = \"scatter\";\n\n// packages/ag-charts-community/src/chart/series/cartesian/scatterSeriesModule.ts\nvar ScatterSeriesModule = {\n  type: \"series\",\n  optionsKey: \"series[]\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\"],\n  identifier: \"scatter\",\n  moduleFactory: (ctx) => new ScatterSeries(ctx),\n  tooltipDefaults: { range: \"nearest\" },\n  defaultAxes: [\n    {\n      type: \"number\" /* NUMBER */,\n      position: \"bottom\" /* BOTTOM */\n    },\n    {\n      type: \"number\" /* NUMBER */,\n      position: \"left\" /* LEFT */\n    }\n  ],\n  themeTemplate: {\n    series: {\n      shape: \"circle\",\n      size: 7,\n      fillOpacity: 0.8,\n      tooltip: { position: { type: \"node\" } },\n      label: {\n        enabled: false,\n        fontSize: 12,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_LABEL_COLOUR\n      },\n      errorBar: {\n        cap: {\n          lengthRatio: 1\n        }\n      }\n    }\n  },\n  paletteFactory: singleSeriesPaletteFactory\n};\n\n// packages/ag-charts-community/src/scene/sectorBox.ts\nvar SectorBox = class _SectorBox {\n  constructor(startAngle, endAngle, innerRadius, outerRadius) {\n    this.startAngle = startAngle;\n    this.endAngle = endAngle;\n    this.innerRadius = innerRadius;\n    this.outerRadius = outerRadius;\n  }\n  clone() {\n    const { startAngle, endAngle, innerRadius, outerRadius } = this;\n    return new _SectorBox(startAngle, endAngle, innerRadius, outerRadius);\n  }\n  equals(other) {\n    return this.startAngle === other.startAngle && this.endAngle === other.endAngle && this.innerRadius === other.innerRadius && this.outerRadius === other.outerRadius;\n  }\n  [interpolate](other, d) {\n    return new _SectorBox(\n      this.startAngle * (1 - d) + other.startAngle * d,\n      this.endAngle * (1 - d) + other.endAngle * d,\n      this.innerRadius * (1 - d) + other.innerRadius * d,\n      this.outerRadius * (1 - d) + other.outerRadius * d\n    );\n  }\n};\n\n// packages/ag-charts-community/src/scene/util/sector.ts\nfunction sectorBox({ startAngle, endAngle, innerRadius, outerRadius }) {\n  let x0 = Infinity;\n  let y0 = Infinity;\n  let x1 = -Infinity;\n  let y1 = -Infinity;\n  const addPoint = (x, y) => {\n    x0 = Math.min(x, x0);\n    y0 = Math.min(y, y0);\n    x1 = Math.max(x, x1);\n    y1 = Math.max(y, y1);\n  };\n  addPoint(innerRadius * Math.cos(startAngle), innerRadius * Math.sin(startAngle));\n  addPoint(innerRadius * Math.cos(endAngle), innerRadius * Math.sin(endAngle));\n  addPoint(outerRadius * Math.cos(startAngle), outerRadius * Math.sin(startAngle));\n  addPoint(outerRadius * Math.cos(endAngle), outerRadius * Math.sin(endAngle));\n  if (isBetweenAngles(0, startAngle, endAngle)) {\n    addPoint(outerRadius, 0);\n  }\n  if (isBetweenAngles(Math.PI * 0.5, startAngle, endAngle)) {\n    addPoint(0, outerRadius);\n  }\n  if (isBetweenAngles(Math.PI, startAngle, endAngle)) {\n    addPoint(-outerRadius, 0);\n  }\n  if (isBetweenAngles(Math.PI * 1.5, startAngle, endAngle)) {\n    addPoint(0, -outerRadius);\n  }\n  return new BBox(x0, y0, x1 - x0, y1 - y0);\n}\nfunction isPointInSector(x, y, sector) {\n  const radius = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n  const { innerRadius, outerRadius } = sector;\n  if (sector.startAngle === sector.endAngle || radius < Math.min(innerRadius, outerRadius) || radius > Math.max(innerRadius, outerRadius)) {\n    return false;\n  }\n  const startAngle = normalizeAngle180(sector.startAngle);\n  const endAngle = normalizeAngle180(sector.endAngle);\n  const angle2 = Math.atan2(y, x);\n  return startAngle < endAngle ? angle2 <= endAngle && angle2 >= startAngle : angle2 <= endAngle && angle2 >= -Math.PI || angle2 >= startAngle && angle2 <= Math.PI;\n}\nfunction lineCollidesSector(line, sector) {\n  const { startAngle, endAngle, innerRadius, outerRadius } = sector;\n  const outerStart = { x: outerRadius * Math.cos(startAngle), y: outerRadius * Math.sin(startAngle) };\n  const outerEnd = { x: outerRadius * Math.cos(endAngle), y: outerRadius * Math.sin(endAngle) };\n  const innerStart = innerRadius === 0 ? { x: 0, y: 0 } : { x: innerRadius * Math.cos(startAngle), y: innerRadius * Math.sin(startAngle) };\n  const innerEnd = innerRadius === 0 ? { x: 0, y: 0 } : { x: innerRadius * Math.cos(endAngle), y: innerRadius * Math.sin(endAngle) };\n  return segmentIntersection(\n    line.start.x,\n    line.start.y,\n    line.end.x,\n    line.end.y,\n    outerStart.x,\n    outerStart.y,\n    innerStart.x,\n    innerStart.y\n  ) || segmentIntersection(\n    line.start.x,\n    line.start.y,\n    line.end.x,\n    line.end.y,\n    outerEnd.x,\n    outerEnd.y,\n    innerEnd.x,\n    innerEnd.y\n  ) || arcIntersections(\n    0,\n    0,\n    outerRadius,\n    startAngle,\n    endAngle,\n    true,\n    line.start.x,\n    line.start.y,\n    line.end.x,\n    line.end.y\n  );\n}\nfunction boxCollidesSector(box, sector) {\n  const topLeft = { x: box.x, y: box.y };\n  const topRight = { x: box.x + box.width, y: box.y };\n  const bottomLeft = { x: box.x, y: box.y + box.height };\n  const bottomRight = { x: box.x + box.width, y: box.y + box.height };\n  return lineCollidesSector({ start: topLeft, end: topRight }, sector) || lineCollidesSector({ start: bottomLeft, end: bottomRight }, sector);\n}\nfunction radiiScalingFactor(r, sweep, a, b) {\n  if (a === 0 && b === 0)\n    return 0;\n  const fs1 = Math.asin(Math.abs(1 * a) / (r + 1 * a)) + Math.asin(Math.abs(1 * b) / (r + 1 * b)) - sweep;\n  if (fs1 < 0)\n    return 1;\n  let start2 = 0;\n  let end2 = 1;\n  for (let i = 0; i < 8; i += 1) {\n    const s = (start2 + end2) / 2;\n    const fs = Math.asin(Math.abs(s * a) / (r + s * a)) + Math.asin(Math.abs(s * b) / (r + s * b)) - sweep;\n    if (fs < 0) {\n      start2 = s;\n    } else {\n      end2 = s;\n    }\n  }\n  return start2;\n}\nvar delta3 = 1e-6;\nfunction clockwiseAngle2(angle2, relativeToStartAngle) {\n  if (angleBetween(angle2, relativeToStartAngle) < delta3) {\n    return relativeToStartAngle;\n  } else {\n    return normalizeAngle360(angle2 - relativeToStartAngle) + relativeToStartAngle;\n  }\n}\nfunction clockwiseAngles2(startAngle, endAngle, relativeToStartAngle = 0) {\n  const fullPie = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n  const sweepAngle = fullPie ? 2 * Math.PI : normalizeAngle360(endAngle - startAngle);\n  startAngle = clockwiseAngle2(startAngle, relativeToStartAngle);\n  endAngle = startAngle + sweepAngle;\n  return { startAngle, endAngle };\n}\nfunction arcRadialLineIntersectionAngle(cx, cy, r, startAngle, endAngle, clipAngle) {\n  const sinA = Math.sin(clipAngle);\n  const cosA = Math.cos(clipAngle);\n  const c = cx ** 2 + cy ** 2 - r ** 2;\n  let p0x = NaN;\n  let p0y = NaN;\n  let p1x = NaN;\n  let p1y = NaN;\n  if (cosA > 0.5) {\n    const tanA = sinA / cosA;\n    const a = 1 + tanA ** 2;\n    const b = -2 * (cx + cy * tanA);\n    const d = b ** 2 - 4 * a * c;\n    if (d < 0)\n      return;\n    const x0 = (-b + Math.sqrt(d)) / (2 * a);\n    const x1 = (-b - Math.sqrt(d)) / (2 * a);\n    p0x = x0;\n    p0y = x0 * tanA;\n    p1x = x1;\n    p1y = x1 * tanA;\n  } else {\n    const cotA = cosA / sinA;\n    const a = 1 + cotA ** 2;\n    const b = -2 * (cy + cx * cotA);\n    const d = b ** 2 - 4 * a * c;\n    if (d < 0)\n      return;\n    const y0 = (-b + Math.sqrt(d)) / (2 * a);\n    const y1 = (-b - Math.sqrt(d)) / (2 * a);\n    p0x = y0 * cotA;\n    p0y = y0;\n    p1x = y1 * cotA;\n    p1y = y1;\n  }\n  const normalisedX = cosA;\n  const normalisedY = sinA;\n  const p0DotNormalized = p0x * normalisedX + p0y * normalisedY;\n  const p1DotNormalized = p1x * normalisedX + p1y * normalisedY;\n  const a0 = p0DotNormalized > 0 ? clockwiseAngle2(Math.atan2(p0y - cy, p0x - cx), startAngle) : NaN;\n  const a1 = p1DotNormalized > 0 ? clockwiseAngle2(Math.atan2(p1y - cy, p1x - cx), startAngle) : NaN;\n  if (a0 >= startAngle && a0 <= endAngle) {\n    return a0;\n  } else if (a1 >= startAngle && a1 <= endAngle) {\n    return a1;\n  }\n}\nfunction arcCircleIntersectionAngle(cx, cy, r, startAngle, endAngle, circleR) {\n  const d = Math.hypot(cx, cy);\n  const d1 = (d ** 2 - r ** 2 + circleR ** 2) / (2 * d);\n  const d2 = d - d1;\n  const theta = Math.atan2(cy, cx);\n  const deltaTheta = Math.acos(-d2 / r);\n  const a0 = clockwiseAngle2(theta + deltaTheta, startAngle);\n  const a1 = clockwiseAngle2(theta - deltaTheta, startAngle);\n  if (a0 >= startAngle && a0 <= endAngle) {\n    return a0;\n  } else if (a1 >= startAngle && a1 <= endAngle) {\n    return a1;\n  }\n}\n\n// packages/ag-charts-community/src/scene/shape/sector.ts\nvar Arc = class {\n  constructor(cx, cy, r, a0, a1) {\n    this.cx = cx;\n    this.cy = cy;\n    this.r = r;\n    this.a0 = a0;\n    this.a1 = a1;\n    if (this.a0 >= this.a1) {\n      this.a0 = NaN;\n      this.a1 = NaN;\n    }\n  }\n  isValid() {\n    return Number.isFinite(this.a0) && Number.isFinite(this.a1);\n  }\n  pointAt(a) {\n    return {\n      x: this.cx + this.r * Math.cos(a),\n      y: this.cy + this.r * Math.sin(a)\n    };\n  }\n  clipStart(a) {\n    if (a == null || !this.isValid() || a < this.a0)\n      return;\n    this.a0 = a;\n    if (Number.isNaN(a) || this.a0 >= this.a1) {\n      this.a0 = NaN;\n      this.a1 = NaN;\n    }\n  }\n  clipEnd(a) {\n    if (a == null || !this.isValid() || a > this.a1)\n      return;\n    this.a1 = a;\n    if (Number.isNaN(a) || this.a0 >= this.a1) {\n      this.a0 = NaN;\n      this.a1 = NaN;\n    }\n  }\n};\nvar Sector = class extends Path {\n  constructor() {\n    super(...arguments);\n    this.centerX = 0;\n    this.centerY = 0;\n    this.innerRadius = 10;\n    this.outerRadius = 20;\n    this.startAngle = 0;\n    this.endAngle = Math.PI * 2;\n    this.clipSector = void 0;\n    this.concentricEdgeInset = 0;\n    this.radialEdgeInset = 0;\n    this.startOuterCornerRadius = 0;\n    this.endOuterCornerRadius = 0;\n    this.startInnerCornerRadius = 0;\n    this.endInnerCornerRadius = 0;\n  }\n  set inset(value) {\n    this.concentricEdgeInset = value;\n    this.radialEdgeInset = value;\n  }\n  set cornerRadius(value) {\n    this.startOuterCornerRadius = value;\n    this.endOuterCornerRadius = value;\n    this.startInnerCornerRadius = value;\n    this.endInnerCornerRadius = value;\n  }\n  computeBBox() {\n    return sectorBox(this).translate(this.centerX, this.centerY);\n  }\n  normalizedRadii() {\n    const { concentricEdgeInset } = this;\n    let { innerRadius, outerRadius } = this;\n    innerRadius = innerRadius > 0 ? innerRadius + concentricEdgeInset : 0;\n    outerRadius = Math.max(outerRadius - concentricEdgeInset, 0);\n    return { innerRadius, outerRadius };\n  }\n  normalizedClipSector() {\n    const { clipSector } = this;\n    if (clipSector == null)\n      return;\n    const { startAngle, endAngle } = clockwiseAngles2(this.startAngle, this.endAngle);\n    const { innerRadius, outerRadius } = this.normalizedRadii();\n    const clipAngles = clockwiseAngles2(clipSector.startAngle, clipSector.endAngle, startAngle);\n    return new SectorBox(\n      Math.max(startAngle, clipAngles.startAngle),\n      Math.min(endAngle, clipAngles.endAngle),\n      Math.max(innerRadius, clipSector.innerRadius),\n      Math.min(outerRadius, clipSector.outerRadius)\n    );\n  }\n  getAngleOffset(radius) {\n    return radius > 0 ? this.radialEdgeInset / radius : 0;\n  }\n  arc(r, angleSweep, a0, a1, outerArc, innerArc, start2, inner) {\n    if (r <= 0)\n      return;\n    const { startAngle, endAngle } = clockwiseAngles2(this.startAngle, this.endAngle);\n    const { innerRadius, outerRadius } = this.normalizedRadii();\n    const clipSector = this.normalizedClipSector();\n    if (inner && innerRadius <= 0)\n      return;\n    const angleOffset = inner ? this.getAngleOffset(innerRadius + r) : this.getAngleOffset(outerRadius - r);\n    const angle2 = start2 ? startAngle + angleOffset + angleSweep : endAngle - angleOffset - angleSweep;\n    const radius = inner ? innerRadius + r : outerRadius - r;\n    const cx = radius * Math.cos(angle2);\n    const cy = radius * Math.sin(angle2);\n    if (clipSector != null) {\n      const delta4 = 1e-6;\n      if (!start2 && !(angle2 >= startAngle - delta4 && angle2 <= clipSector.endAngle - delta4))\n        return;\n      if (start2 && !(angle2 >= clipSector.startAngle + delta4 && angle2 <= endAngle - delta4))\n        return;\n      if (inner && radius < clipSector.innerRadius - delta4)\n        return;\n      if (!inner && radius > clipSector.outerRadius + delta4)\n        return;\n    }\n    const arc = new Arc(cx, cy, r, a0, a1);\n    if (clipSector != null) {\n      if (inner) {\n        arc.clipStart(arcRadialLineIntersectionAngle(cx, cy, r, a0, a1, clipSector.endAngle));\n        arc.clipEnd(arcRadialLineIntersectionAngle(cx, cy, r, a0, a1, clipSector.startAngle));\n      } else {\n        arc.clipStart(arcRadialLineIntersectionAngle(cx, cy, r, a0, a1, clipSector.startAngle));\n        arc.clipEnd(arcRadialLineIntersectionAngle(cx, cy, r, a0, a1, clipSector.endAngle));\n      }\n      let circleClipStart;\n      let circleClipEnd;\n      if (start2) {\n        circleClipStart = arcCircleIntersectionAngle(cx, cy, r, a0, a1, clipSector.innerRadius);\n        circleClipEnd = arcCircleIntersectionAngle(cx, cy, r, a0, a1, clipSector.outerRadius);\n      } else {\n        circleClipStart = arcCircleIntersectionAngle(cx, cy, r, a0, a1, clipSector.outerRadius);\n        circleClipEnd = arcCircleIntersectionAngle(cx, cy, r, a0, a1, clipSector.innerRadius);\n      }\n      arc.clipStart(circleClipStart);\n      arc.clipEnd(circleClipEnd);\n      if (circleClipStart != null) {\n        const { x: x2, y: y2 } = arc.pointAt(circleClipStart);\n        const theta2 = clockwiseAngle2(Math.atan2(y2, x2), startAngle);\n        if (start2) {\n          innerArc?.clipStart(theta2);\n        } else {\n          outerArc.clipEnd(theta2);\n        }\n      }\n      if (circleClipEnd != null) {\n        const { x: x2, y: y2 } = arc.pointAt(circleClipEnd);\n        const theta2 = clockwiseAngle2(Math.atan2(y2, x2), startAngle);\n        if (start2) {\n          outerArc.clipStart(theta2);\n        } else {\n          innerArc?.clipEnd(theta2);\n        }\n      }\n    }\n    if (clipSector != null) {\n      const { x: x2, y: y2 } = arc.pointAt((arc.a0 + arc.a1) / 2);\n      if (!isPointInSector(x2, y2, clipSector))\n        return;\n    }\n    const { x, y } = arc.pointAt(start2 === inner ? arc.a0 : arc.a1);\n    const theta = clockwiseAngle2(Math.atan2(y, x), startAngle);\n    const radialArc = inner ? innerArc : outerArc;\n    if (start2) {\n      radialArc?.clipStart(theta);\n    } else {\n      radialArc?.clipEnd(theta);\n    }\n    return arc;\n  }\n  updatePath() {\n    const delta4 = 1e-6;\n    const { path, centerX, centerY, concentricEdgeInset, radialEdgeInset } = this;\n    let { startOuterCornerRadius, endOuterCornerRadius, startInnerCornerRadius, endInnerCornerRadius } = this;\n    const { startAngle, endAngle } = clockwiseAngles2(this.startAngle, this.endAngle);\n    const { innerRadius, outerRadius } = this.normalizedRadii();\n    const clipSector = this.normalizedClipSector();\n    const sweepAngle = endAngle - startAngle;\n    const fullPie = sweepAngle >= 2 * Math.PI - delta4;\n    path.clear();\n    if (innerRadius === 0 && outerRadius === 0 || innerRadius > outerRadius) {\n      return;\n    } else if ((clipSector?.startAngle ?? startAngle) === (clipSector?.endAngle ?? endAngle)) {\n      return;\n    } else if (fullPie && this.clipSector == null && startOuterCornerRadius === 0 && endOuterCornerRadius === 0 && startInnerCornerRadius === 0 && endInnerCornerRadius === 0) {\n      path.moveTo(centerX + outerRadius * Math.cos(startAngle), centerY + outerRadius * Math.sin(startAngle));\n      path.arc(centerX, centerY, outerRadius, startAngle, endAngle);\n      if (innerRadius > concentricEdgeInset) {\n        path.moveTo(centerX + innerRadius * Math.cos(endAngle), centerY + innerRadius * Math.sin(endAngle));\n        path.arc(centerX, centerY, innerRadius, endAngle, startAngle, true);\n      }\n      path.closePath();\n      return;\n    } else if (this.clipSector == null && Math.abs(innerRadius - outerRadius) < 1e-6) {\n      path.arc(centerX, centerY, outerRadius, startAngle, endAngle, false);\n      path.arc(centerX, centerY, outerRadius, endAngle, startAngle, true);\n      path.closePath();\n      return;\n    }\n    const innerAngleOffset = this.getAngleOffset(innerRadius);\n    const outerAngleOffset = this.getAngleOffset(outerRadius);\n    const outerAngleExceeded = sweepAngle < 2 * outerAngleOffset;\n    if (outerAngleExceeded)\n      return;\n    const hasInnerSweep = (clipSector?.innerRadius ?? innerRadius) > concentricEdgeInset;\n    const innerAngleExceeded = innerRadius < concentricEdgeInset || sweepAngle < 2 * innerAngleOffset;\n    const radialLength = outerRadius - innerRadius;\n    const maxRadialLength = Math.max(\n      startOuterCornerRadius,\n      startInnerCornerRadius,\n      endOuterCornerRadius,\n      endInnerCornerRadius\n    );\n    const initialScalingFactor = maxRadialLength > 0 ? Math.min(radialLength / maxRadialLength, 1) : 1;\n    startOuterCornerRadius *= initialScalingFactor;\n    endOuterCornerRadius *= initialScalingFactor;\n    startInnerCornerRadius *= initialScalingFactor;\n    endInnerCornerRadius *= initialScalingFactor;\n    const outerScalingFactor = radiiScalingFactor(\n      outerRadius,\n      sweepAngle - 2 * outerAngleOffset,\n      -startOuterCornerRadius,\n      -endOuterCornerRadius\n    );\n    startOuterCornerRadius *= outerScalingFactor;\n    endOuterCornerRadius *= outerScalingFactor;\n    if (!innerAngleExceeded && hasInnerSweep) {\n      const innerScalingFactor = radiiScalingFactor(\n        innerRadius,\n        sweepAngle - 2 * innerAngleOffset,\n        startInnerCornerRadius,\n        endInnerCornerRadius\n      );\n      startInnerCornerRadius *= innerScalingFactor;\n      endInnerCornerRadius *= innerScalingFactor;\n    } else {\n      startInnerCornerRadius = 0;\n      endInnerCornerRadius = 0;\n    }\n    const maxCombinedRadialLength = Math.max(\n      startOuterCornerRadius + startInnerCornerRadius,\n      endOuterCornerRadius + endInnerCornerRadius\n    );\n    const edgesScalingFactor = maxCombinedRadialLength > 0 ? Math.min(radialLength / maxCombinedRadialLength, 1) : 1;\n    startOuterCornerRadius *= edgesScalingFactor;\n    endOuterCornerRadius *= edgesScalingFactor;\n    startInnerCornerRadius *= edgesScalingFactor;\n    endInnerCornerRadius *= edgesScalingFactor;\n    let startOuterCornerRadiusAngleSweep = 0;\n    let endOuterCornerRadiusAngleSweep = 0;\n    const startOuterCornerRadiusSweep = startOuterCornerRadius / (outerRadius - startOuterCornerRadius);\n    const endOuterCornerRadiusSweep = endOuterCornerRadius / (outerRadius - endOuterCornerRadius);\n    if (startOuterCornerRadiusSweep >= 0 && startOuterCornerRadiusSweep < 1 - delta4) {\n      startOuterCornerRadiusAngleSweep = Math.asin(startOuterCornerRadiusSweep);\n    } else {\n      startOuterCornerRadiusAngleSweep = sweepAngle / 2;\n      const maxStartOuterCornerRadius = outerRadius / (1 / Math.sin(startOuterCornerRadiusAngleSweep) + 1);\n      startOuterCornerRadius = Math.min(maxStartOuterCornerRadius, startOuterCornerRadius);\n    }\n    if (endOuterCornerRadiusSweep >= 0 && endOuterCornerRadiusSweep < 1 - delta4) {\n      endOuterCornerRadiusAngleSweep = Math.asin(endOuterCornerRadiusSweep);\n    } else {\n      endOuterCornerRadiusAngleSweep = sweepAngle / 2;\n      const maxEndOuterCornerRadius = outerRadius / (1 / Math.sin(endOuterCornerRadiusAngleSweep) + 1);\n      endOuterCornerRadius = Math.min(maxEndOuterCornerRadius, endOuterCornerRadius);\n    }\n    const startInnerCornerRadiusAngleSweep = Math.asin(\n      startInnerCornerRadius / (innerRadius + startInnerCornerRadius)\n    );\n    const endInnerCornerRadiusAngleSweep = Math.asin(endInnerCornerRadius / (innerRadius + endInnerCornerRadius));\n    const outerArcRadius = clipSector?.outerRadius ?? outerRadius;\n    const outerArcRadiusOffset = this.getAngleOffset(outerArcRadius);\n    const outerArc = new Arc(\n      0,\n      0,\n      outerArcRadius,\n      startAngle + outerArcRadiusOffset,\n      endAngle - outerArcRadiusOffset\n    );\n    const innerArcRadius = clipSector?.innerRadius ?? innerRadius;\n    const innerArcRadiusOffset = this.getAngleOffset(innerArcRadius);\n    const innerArc = hasInnerSweep ? new Arc(0, 0, innerArcRadius, startAngle + innerArcRadiusOffset, endAngle - innerArcRadiusOffset) : void 0;\n    if (clipSector != null) {\n      outerArc.clipStart(clipSector.startAngle);\n      outerArc.clipEnd(clipSector.endAngle);\n      innerArc?.clipStart(clipSector.startAngle);\n      innerArc?.clipEnd(clipSector.endAngle);\n    }\n    const startOuterArc = this.arc(\n      startOuterCornerRadius,\n      startOuterCornerRadiusAngleSweep,\n      startAngle - Math.PI * 0.5,\n      startAngle + startOuterCornerRadiusAngleSweep,\n      outerArc,\n      innerArc,\n      true,\n      false\n    );\n    const endOuterArc = this.arc(\n      endOuterCornerRadius,\n      endOuterCornerRadiusAngleSweep,\n      endAngle - endOuterCornerRadiusAngleSweep,\n      endAngle + Math.PI * 0.5,\n      outerArc,\n      innerArc,\n      false,\n      false\n    );\n    const endInnerArc = this.arc(\n      endInnerCornerRadius,\n      endInnerCornerRadiusAngleSweep,\n      endAngle + Math.PI * 0.5,\n      endAngle + Math.PI - endInnerCornerRadiusAngleSweep,\n      outerArc,\n      innerArc,\n      false,\n      true\n    );\n    const startInnerArc = this.arc(\n      startInnerCornerRadius,\n      startInnerCornerRadiusAngleSweep,\n      startAngle + Math.PI + startInnerCornerRadiusAngleSweep,\n      startAngle + Math.PI * 1.5,\n      outerArc,\n      innerArc,\n      true,\n      true\n    );\n    if (innerAngleExceeded) {\n      const x = sweepAngle < Math.PI * 0.5 ? radialEdgeInset * (1 + Math.cos(sweepAngle)) / Math.sin(sweepAngle) : NaN;\n      let r;\n      if (x > 0 && x < outerRadius) {\n        r = Math.max(Math.hypot(radialEdgeInset, x), innerRadius);\n      } else {\n        r = radialEdgeInset;\n      }\n      r = Math.max(r, innerRadius);\n      const midAngle = startAngle + sweepAngle * 0.5;\n      path.moveTo(centerX + r * Math.cos(midAngle), centerY + r * Math.sin(midAngle));\n    } else if (startInnerArc?.isValid() === true || innerArc?.isValid() === true) {\n    } else {\n      const midAngle = startAngle + sweepAngle / 2;\n      const cx = innerRadius * Math.cos(midAngle);\n      const cy = innerRadius * Math.sin(midAngle);\n      path.moveTo(centerX + cx, centerY + cy);\n    }\n    if (startOuterArc?.isValid() === true) {\n      const { cx, cy, r, a0, a1 } = startOuterArc;\n      path.arc(centerX + cx, centerY + cy, r, a0, a1);\n    }\n    if (outerArc.isValid()) {\n      const { r, a0, a1 } = outerArc;\n      path.arc(centerX, centerY, r, a0, a1);\n    }\n    if (endOuterArc?.isValid() === true) {\n      const { cx, cy, r, a0, a1 } = endOuterArc;\n      path.arc(centerX + cx, centerY + cy, r, a0, a1);\n    }\n    if (!innerAngleExceeded) {\n      if (endInnerArc?.isValid() === true) {\n        const { cx, cy, r, a0, a1 } = endInnerArc;\n        path.arc(centerX + cx, centerY + cy, r, a0, a1);\n      }\n      if (innerArc?.isValid() === true) {\n        const { r, a0, a1 } = innerArc;\n        path.arc(centerX, centerY, r, a1, a0, true);\n      }\n      if (startInnerArc?.isValid() === true) {\n        const { cx, cy, r, a0, a1 } = startInnerArc;\n        path.arc(centerX + cx, centerY + cy, r, a0, a1);\n      }\n    }\n    path.closePath();\n  }\n  isPointInPath(x, y) {\n    const { startAngle, endAngle, innerRadius, outerRadius } = this.clipSector ?? this;\n    return isPointInSector(x - this.centerX, y - this.centerY, {\n      startAngle,\n      endAngle,\n      innerRadius: Math.min(innerRadius, outerRadius),\n      outerRadius: Math.max(innerRadius, outerRadius)\n    });\n  }\n};\nSector.className = \"Sector\";\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"centerX\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"centerY\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"innerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"outerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"startAngle\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"endAngle\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"clipSector\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"concentricEdgeInset\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"radialEdgeInset\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"startOuterCornerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"endOuterCornerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"startInnerCornerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Sector.prototype, \"endInnerCornerRadius\", 2);\n\n// packages/ag-charts-community/src/chart/themes/defaultColors.ts\nvar DEFAULT_FILLS = {\n  BLUE: \"#5090dc\",\n  ORANGE: \"#ffa03a\",\n  GREEN: \"#459d55\",\n  CYAN: \"#34bfe1\",\n  YELLOW: \"#e1cc00\",\n  VIOLET: \"#9669cb\",\n  GRAY: \"#b5b5b5\",\n  MAGENTA: \"#bd5aa7\",\n  BROWN: \"#8a6224\",\n  RED: \"#ef5452\"\n};\nvar DEFAULT_STROKES = {\n  BLUE: \"#2b5c95\",\n  ORANGE: \"#cc6f10\",\n  GREEN: \"#1e652e\",\n  CYAN: \"#18859e\",\n  YELLOW: \"#a69400\",\n  VIOLET: \"#603c88\",\n  GRAY: \"#575757\",\n  MAGENTA: \"#7d2f6d\",\n  BROWN: \"#4f3508\",\n  RED: \"#a82529\"\n};\n\n// packages/ag-charts-community/src/chart/series/polar/donutSeriesProperties.ts\nvar DonutTitle = class extends Caption {\n  constructor() {\n    super(...arguments);\n    this.showInLegend = false;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], DonutTitle.prototype, \"showInLegend\", 2);\nvar DonutInnerLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.spacing = 2;\n  }\n  set(properties, _reset) {\n    return super.set(properties);\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], DonutInnerLabel.prototype, \"text\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], DonutInnerLabel.prototype, \"spacing\", 2);\nvar DonutInnerCircle = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.fill = \"transparent\";\n    this.fillOpacity = 1;\n  }\n};\n__decorateClass([\n  Validate(COLOR_STRING)\n], DonutInnerCircle.prototype, \"fill\", 2);\n__decorateClass([\n  Validate(RATIO)\n], DonutInnerCircle.prototype, \"fillOpacity\", 2);\nvar DonutSeriesCalloutLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.offset = 3;\n    this.minAngle = 0;\n    this.minSpacing = 4;\n    this.maxCollisionOffset = 50;\n    this.avoidCollisions = true;\n  }\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], DonutSeriesCalloutLabel.prototype, \"offset\", 2);\n__decorateClass([\n  Validate(DEGREE)\n], DonutSeriesCalloutLabel.prototype, \"minAngle\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], DonutSeriesCalloutLabel.prototype, \"minSpacing\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], DonutSeriesCalloutLabel.prototype, \"maxCollisionOffset\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], DonutSeriesCalloutLabel.prototype, \"avoidCollisions\", 2);\nvar DonutSeriesSectorLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.positionOffset = 0;\n    this.positionRatio = 0.5;\n  }\n};\n__decorateClass([\n  Validate(NUMBER)\n], DonutSeriesSectorLabel.prototype, \"positionOffset\", 2);\n__decorateClass([\n  Validate(RATIO)\n], DonutSeriesSectorLabel.prototype, \"positionRatio\", 2);\nvar DonutSeriesCalloutLine = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.length = 10;\n    this.strokeWidth = 1;\n  }\n};\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY, { optional: true })\n], DonutSeriesCalloutLine.prototype, \"colors\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], DonutSeriesCalloutLine.prototype, \"length\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], DonutSeriesCalloutLine.prototype, \"strokeWidth\", 2);\nvar DonutSeriesProperties = class extends SeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.fills = Object.values(DEFAULT_FILLS);\n    this.strokes = Object.values(DEFAULT_STROKES);\n    this.fillOpacity = 1;\n    this.strokeOpacity = 1;\n    this.lineDash = [0];\n    this.lineDashOffset = 0;\n    this.cornerRadius = 0;\n    this.rotation = 0;\n    this.outerRadiusOffset = 0;\n    this.outerRadiusRatio = 1;\n    this.strokeWidth = 1;\n    this.sectorSpacing = 0;\n    this.innerLabels = new PropertiesArray(DonutInnerLabel);\n    this.title = new DonutTitle();\n    this.innerCircle = new DonutInnerCircle();\n    this.shadow = new DropShadow();\n    this.calloutLabel = new DonutSeriesCalloutLabel();\n    this.sectorLabel = new DonutSeriesSectorLabel();\n    this.calloutLine = new DonutSeriesCalloutLine();\n    this.tooltip = new SeriesTooltip();\n  }\n  isValid() {\n    const superIsValid = super.isValid();\n    if (this.innerRadiusRatio == null && this.innerRadiusOffset == null) {\n      Logger.warnOnce(\n        \"Either an [innerRadiusRatio] or an [innerRadiusOffset] must be set to render a donut series.\"\n      );\n      return false;\n    }\n    return superIsValid;\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], DonutSeriesProperties.prototype, \"angleKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"angleName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"angleFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"radiusKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"radiusName\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], DonutSeriesProperties.prototype, \"radiusMin\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], DonutSeriesProperties.prototype, \"radiusMax\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"calloutLabelKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"calloutLabelName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"sectorLabelKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"sectorLabelName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], DonutSeriesProperties.prototype, \"legendItemKey\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY)\n], DonutSeriesProperties.prototype, \"fills\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY)\n], DonutSeriesProperties.prototype, \"strokes\", 2);\n__decorateClass([\n  Validate(RATIO)\n], DonutSeriesProperties.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(RATIO)\n], DonutSeriesProperties.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(LINE_DASH)\n], DonutSeriesProperties.prototype, \"lineDash\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], DonutSeriesProperties.prototype, \"lineDashOffset\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], DonutSeriesProperties.prototype, \"cornerRadius\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], DonutSeriesProperties.prototype, \"itemStyler\", 2);\n__decorateClass([\n  Validate(DEGREE)\n], DonutSeriesProperties.prototype, \"rotation\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], DonutSeriesProperties.prototype, \"outerRadiusOffset\", 2);\n__decorateClass([\n  Validate(RATIO)\n], DonutSeriesProperties.prototype, \"outerRadiusRatio\", 2);\n__decorateClass([\n  Validate(NUMBER, { optional: true })\n], DonutSeriesProperties.prototype, \"innerRadiusOffset\", 2);\n__decorateClass([\n  Validate(RATIO, { optional: true })\n], DonutSeriesProperties.prototype, \"innerRadiusRatio\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], DonutSeriesProperties.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], DonutSeriesProperties.prototype, \"sectorSpacing\", 2);\n__decorateClass([\n  Validate(OBJECT_ARRAY)\n], DonutSeriesProperties.prototype, \"innerLabels\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], DonutSeriesProperties.prototype, \"title\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], DonutSeriesProperties.prototype, \"innerCircle\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], DonutSeriesProperties.prototype, \"shadow\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], DonutSeriesProperties.prototype, \"calloutLabel\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], DonutSeriesProperties.prototype, \"sectorLabel\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], DonutSeriesProperties.prototype, \"calloutLine\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], DonutSeriesProperties.prototype, \"tooltip\", 2);\n\n// packages/ag-charts-community/src/chart/series/polar/pieUtil.ts\nfunction preparePieSeriesAnimationFunctions(initialLoad, rotationDegrees, scaleFn, oldScaleFn) {\n  const scale2 = [scaleFn.convert(0), scaleFn.convert(1)];\n  const oldScale = [oldScaleFn.convert(0), oldScaleFn.convert(1)];\n  const rotation = Math.PI / -2 + toRadians(rotationDegrees);\n  const phase = initialLoad ? \"initial\" : \"update\";\n  const scaleToNewRadius = ({ radius }) => {\n    return { innerRadius: scale2[0], outerRadius: scale2[0] + (scale2[1] - scale2[0]) * radius };\n  };\n  const scaleToOldRadius = ({ radius }) => {\n    return { innerRadius: oldScale[0], outerRadius: oldScale[0] + (oldScale[1] - oldScale[0]) * radius };\n  };\n  const fromFn = (sect, datum, status, { prevFromProps }) => {\n    let { startAngle, endAngle, innerRadius, outerRadius } = sect;\n    let { fill, stroke } = datum.sectorFormat;\n    if (status === \"unknown\" || status === \"added\" && !prevFromProps) {\n      startAngle = rotation;\n      endAngle = rotation;\n      innerRadius = datum.innerRadius;\n      outerRadius = datum.outerRadius;\n    } else if (status === \"added\" && prevFromProps) {\n      startAngle = prevFromProps.endAngle ?? rotation;\n      endAngle = prevFromProps.endAngle ?? rotation;\n      innerRadius = prevFromProps.innerRadius ?? datum.innerRadius;\n      outerRadius = prevFromProps.outerRadius ?? datum.outerRadius;\n    }\n    if (status === \"added\" && !initialLoad) {\n      const radii = scaleToOldRadius(datum);\n      innerRadius = radii.innerRadius;\n      outerRadius = radii.outerRadius;\n    }\n    if (status === \"updated\") {\n      fill = sect.fill ?? fill;\n      stroke = sect.stroke ?? stroke;\n    }\n    return { startAngle, endAngle, innerRadius, outerRadius, fill, stroke, phase };\n  };\n  const toFn = (_sect, datum, status, { prevLive }) => {\n    let { startAngle, endAngle, innerRadius, outerRadius } = datum;\n    const { stroke, fill } = datum.sectorFormat;\n    if (status === \"removed\" && prevLive) {\n      startAngle = prevLive.datum?.endAngle;\n      endAngle = prevLive.datum?.endAngle;\n    } else if (status === \"removed\" && !prevLive) {\n      startAngle = rotation;\n      endAngle = rotation;\n    }\n    if (status === \"removed\") {\n      const radii = scaleToNewRadius(datum);\n      innerRadius = radii.innerRadius;\n      outerRadius = radii.outerRadius;\n    }\n    return { startAngle, endAngle, outerRadius, innerRadius, stroke, fill };\n  };\n  const innerCircleFromFn = (node, _) => {\n    return { size: node.previousDatum?.radius ?? node.size ?? 0, phase };\n  };\n  const innerCircleToFn = (_, datum) => {\n    return { size: datum.radius ?? 0 };\n  };\n  return { nodes: { toFn, fromFn }, innerCircle: { fromFn: innerCircleFromFn, toFn: innerCircleToFn } };\n}\nfunction resetPieSelectionsFn(_node, datum) {\n  return {\n    startAngle: datum.startAngle,\n    endAngle: datum.endAngle,\n    innerRadius: datum.innerRadius,\n    outerRadius: datum.outerRadius,\n    fill: datum.sectorFormat.fill,\n    stroke: datum.sectorFormat.stroke\n  };\n}\nfunction pickByMatchingAngle(series, point) {\n  const dy = point.y - series.centerY;\n  const dx = point.x - series.centerX;\n  const angle2 = Math.atan2(dy, dx);\n  const sectors = series.getItemNodes();\n  for (const sector of sectors) {\n    if (sector.datum.missing === true)\n      continue;\n    if (isBetweenAngles(angle2, sector.startAngle, sector.endAngle)) {\n      const radius = Math.sqrt(dx * dx + dy * dy);\n      let distance3 = 0;\n      if (radius < sector.innerRadius) {\n        distance3 = sector.innerRadius - radius;\n      } else if (radius > sector.outerRadius) {\n        distance3 = radius - sector.outerRadius;\n      }\n      return { datum: sector.datum, distance: distance3 };\n    }\n  }\n  return void 0;\n}\n\n// packages/ag-charts-community/src/chart/series/polar/polarSeries.ts\nvar PolarSeries = class extends DataModelSeries {\n  constructor({\n    useLabelLayer = false,\n    pickModes = [1 /* NEAREST_NODE */, 0 /* EXACT_SHAPE_MATCH */],\n    canHaveAxes = false,\n    animationResetFns,\n    ...opts\n  }) {\n    super({\n      ...opts,\n      useLabelLayer,\n      pickModes,\n      contentGroupVirtual: false,\n      directionKeys: {\n        [\"x\" /* X */]: [\"angleKey\"],\n        [\"y\" /* Y */]: [\"radiusKey\"]\n      },\n      directionNames: {\n        [\"x\" /* X */]: [\"angleName\"],\n        [\"y\" /* Y */]: [\"radiusName\"]\n      },\n      canHaveAxes\n    });\n    this.itemGroup = this.contentGroup.appendChild(new Group());\n    this.nodeData = [];\n    this.itemSelection = Selection.select(\n      this.itemGroup,\n      () => this.nodeFactory(),\n      false\n    );\n    this.labelSelection = Selection.select(\n      this.labelGroup,\n      () => this.labelFactory(),\n      false\n    );\n    this.highlightSelection = Selection.select(\n      this.highlightGroup,\n      () => this.nodeFactory()\n    );\n    this.highlightLabelSelection = Selection.select(\n      this.highlightLabel,\n      () => this.labelFactory()\n    );\n    /**\n     * The center of the polar series (for example, the center of a pie).\n     * If the polar chart has multiple series, all of them will have their\n     * center set to the same value as a result of the polar chart layout.\n     * The center coordinates are not supposed to be set by the user.\n     */\n    this.centerX = 0;\n    this.centerY = 0;\n    /**\n     * The maximum radius the series can use.\n     * This value is set automatically as a result of the polar chart layout\n     * and is not supposed to be set by the user.\n     */\n    this.radius = 0;\n    this.itemGroup.zIndexSubOrder = [() => this._declarationOrder, 1];\n    this.animationResetFns = animationResetFns;\n    this.animationState = new StateMachine(\n      \"empty\",\n      {\n        empty: {\n          update: {\n            target: \"ready\",\n            action: (data) => this.animateEmptyUpdateReady(data)\n          },\n          reset: \"empty\",\n          skip: \"ready\"\n        },\n        ready: {\n          updateData: \"waiting\",\n          clear: \"clearing\",\n          highlight: (data) => this.animateReadyHighlight(data),\n          highlightMarkers: (data) => this.animateReadyHighlightMarkers(data),\n          resize: (data) => this.animateReadyResize(data),\n          reset: \"empty\",\n          skip: \"ready\"\n        },\n        waiting: {\n          update: {\n            target: \"ready\",\n            action: (data) => this.animateWaitingUpdateReady(data)\n          },\n          reset: \"empty\",\n          skip: \"ready\"\n        },\n        clearing: {\n          update: {\n            target: \"empty\",\n            action: (data) => this.animateClearingUpdateEmpty(data)\n          },\n          reset: \"empty\",\n          skip: \"ready\"\n        }\n      },\n      () => this.checkProcessedDataAnimatable()\n    );\n  }\n  getItemNodes() {\n    return [...this.itemGroup.children()];\n  }\n  getNodeData() {\n    return this.nodeData;\n  }\n  resetAnimation(phase) {\n    if (phase === \"initial\") {\n      this.animationState.transition(\"reset\");\n    } else if (phase === \"ready\") {\n      this.animationState.transition(\"skip\");\n    }\n  }\n  labelFactory() {\n    const text = new Text();\n    text.pointerEvents = 1 /* None */;\n    return text;\n  }\n  getInnerRadius() {\n    return 0;\n  }\n  getLabelData() {\n    return [];\n  }\n  computeLabelsBBox(_options, _seriesRect) {\n    return null;\n  }\n  resetAllAnimation() {\n    const { item, label } = this.animationResetFns ?? {};\n    this.ctx.animationManager.stopByAnimationGroupId(this.id);\n    if (item) {\n      resetMotion([this.itemSelection, this.highlightSelection], item);\n    }\n    if (label) {\n      resetMotion([this.labelSelection, this.highlightLabelSelection], label);\n    }\n    this.itemSelection.cleanup();\n    this.labelSelection.cleanup();\n    this.highlightSelection.cleanup();\n    this.highlightLabelSelection.cleanup();\n  }\n  animateEmptyUpdateReady(_data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation();\n  }\n  animateWaitingUpdateReady(_data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation();\n  }\n  animateReadyHighlight(_data) {\n    const { item, label } = this.animationResetFns ?? {};\n    if (item) {\n      resetMotion([this.highlightSelection], item);\n    }\n    if (label) {\n      resetMotion([this.highlightLabelSelection], label);\n    }\n  }\n  animateReadyHighlightMarkers(_data) {\n  }\n  animateReadyResize(_data) {\n    this.resetAllAnimation();\n  }\n  animateClearingUpdateEmpty(_data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation();\n  }\n  animationTransitionClear() {\n    this.animationState.transition(\"clear\", this.getAnimationData());\n  }\n  getAnimationData(seriesRect) {\n    return { seriesRect };\n  }\n  computeFocusBounds(opts) {\n    const datum = this.getNodeData()?.[opts.datumIndex];\n    if (datum !== void 0) {\n      return this.itemSelection.select((node) => node instanceof Path && node.datum === datum)[0];\n    }\n    return void 0;\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/polar/donutSeries.ts\nvar DonutSeriesNodeEvent = class extends SeriesNodeEvent {\n  constructor(type, nativeEvent, datum, series) {\n    super(type, nativeEvent, datum, series);\n    this.angleKey = series.properties.angleKey;\n    this.radiusKey = series.properties.radiusKey;\n    this.calloutLabelKey = series.properties.calloutLabelKey;\n    this.sectorLabelKey = series.properties.sectorLabelKey;\n  }\n};\nvar DonutSeries = class extends PolarSeries {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      pickModes: [1 /* NEAREST_NODE */, 0 /* EXACT_SHAPE_MATCH */],\n      useLabelLayer: true,\n      animationResetFns: { item: resetPieSelectionsFn, label: resetLabelFn }\n    });\n    this.properties = new DonutSeriesProperties();\n    this.phantomNodeData = void 0;\n    this.previousRadiusScale = new LinearScale();\n    this.radiusScale = new LinearScale();\n    this.phantomGroup = this.contentGroup.appendChild(new Group());\n    this.phantomSelection = Selection.select(\n      this.phantomGroup,\n      () => this.nodeFactory(),\n      false\n    );\n    this.calloutLabelGroup = this.contentGroup.appendChild(new Group({ name: \"pieCalloutLabels\" }));\n    this.calloutLabelSelection = new Selection(\n      this.calloutLabelGroup,\n      Group\n    );\n    // The group node that contains the background graphics.\n    this.backgroundGroup = this.rootGroup.appendChild(\n      new TranslatableLayer({\n        name: `${this.id}-background`,\n        zIndex: 0 /* SERIES_BACKGROUND */\n      })\n    );\n    // AG-6193 If the sum of all datums is 0, then we'll draw 1 or 2 rings to represent the empty series.\n    this.zerosumRingsGroup = this.backgroundGroup.appendChild(new Group({ name: `${this.id}-zerosumRings` }));\n    this.zerosumOuterRing = this.zerosumRingsGroup.appendChild(new Circle());\n    this.zerosumInnerRing = this.zerosumRingsGroup.appendChild(new Circle());\n    this.innerLabelsGroup = this.contentGroup.appendChild(new Group({ name: \"innerLabels\" }));\n    this.innerCircleGroup = this.backgroundGroup.appendChild(new Group({ name: `${this.id}-innerCircle` }));\n    this.innerLabelsSelection = Selection.select(this.innerLabelsGroup, Text);\n    this.innerCircleSelection = Selection.select(\n      this.innerCircleGroup,\n      Circle\n    );\n    // When a user toggles a series item (e.g. from the legend), its boolean state is recorded here.\n    this.seriesItemEnabled = [];\n    this.legendItemEnabled = [];\n    this.surroundingRadius = void 0;\n    this.NodeEvent = DonutSeriesNodeEvent;\n    this.angleScale = new LinearScale();\n    this.angleScale.domain = [0, 1];\n    this.angleScale.range = [-Math.PI, Math.PI].map((angle2) => angle2 + Math.PI / 2);\n    this.phantomGroup.opacity = 0.2;\n    this.phantomGroup.zIndexSubOrder = [() => this._declarationOrder, 0];\n  }\n  get calloutNodeData() {\n    return this.phantomNodeData ?? this.nodeData;\n  }\n  addChartEventListeners() {\n    this.destroyFns.push(\n      this.ctx.chartEventManager?.addListener(\"legend-item-click\", (event) => this.onLegendItemClick(event))\n    );\n  }\n  get visible() {\n    return super.visible && (this.seriesItemEnabled.length === 0 || this.seriesItemEnabled.includes(true));\n  }\n  nodeFactory() {\n    return new Sector();\n  }\n  getSeriesDomain(direction) {\n    if (direction === \"x\" /* X */) {\n      return this.angleScale.domain;\n    } else {\n      return this.radiusScale.domain;\n    }\n  }\n  async processData(dataController) {\n    if (this.data == null || !this.properties.isValid()) {\n      return;\n    }\n    let { data } = this;\n    const { visible, seriesItemEnabled } = this;\n    const { angleKey, angleFilterKey, radiusKey, calloutLabelKey, sectorLabelKey, legendItemKey } = this.properties;\n    const animationEnabled = !this.ctx.animationManager.isSkipped();\n    const extraKeyProps = [];\n    const extraProps = [];\n    if (legendItemKey) {\n      extraKeyProps.push(keyProperty(legendItemKey, \"band\", { id: `legendItemKey` }));\n    } else if (calloutLabelKey) {\n      extraKeyProps.push(keyProperty(calloutLabelKey, \"band\", { id: `calloutLabelKey` }));\n    } else if (sectorLabelKey) {\n      extraKeyProps.push(keyProperty(sectorLabelKey, \"band\", { id: `sectorLabelKey` }));\n    }\n    const radiusScaleType = this.radiusScale.type;\n    const angleScaleType = this.radiusScale.type;\n    if (radiusKey) {\n      extraProps.push(\n        rangedValueProperty(radiusKey, {\n          id: \"radiusValue\",\n          min: this.properties.radiusMin ?? 0,\n          max: this.properties.radiusMax\n        }),\n        valueProperty(radiusKey, radiusScaleType, { id: `radiusRaw` }),\n        // Raw value pass-through.\n        normalisePropertyTo(\"radiusValue\", [0, 1], 1, this.properties.radiusMin ?? 0, this.properties.radiusMax)\n      );\n    }\n    if (calloutLabelKey) {\n      extraProps.push(valueProperty(calloutLabelKey, \"band\", { id: `calloutLabelValue` }));\n    }\n    if (sectorLabelKey) {\n      extraProps.push(valueProperty(sectorLabelKey, \"band\", { id: `sectorLabelValue` }));\n    }\n    if (legendItemKey) {\n      extraProps.push(valueProperty(legendItemKey, \"band\", { id: `legendItemValue` }));\n    }\n    if (angleFilterKey) {\n      extraProps.push(\n        accumulativeValueProperty(angleFilterKey, angleScaleType, {\n          id: `angleFilterValue`,\n          onlyPositive: true\n        }),\n        valueProperty(angleFilterKey, angleScaleType, { id: `angleFilterRaw` }),\n        normalisePropertyTo(\"angleFilterValue\", [0, 1], 0, 0)\n      );\n    }\n    if (animationEnabled && this.processedData && extraKeyProps.length > 0) {\n      extraProps.push(diff(this.processedData));\n    }\n    extraProps.push(animationValidation());\n    data = data.map((d, idx) => visible && seriesItemEnabled[idx] ? d : { ...d, [angleKey]: 0 });\n    await this.requestDataModel(dataController, data, {\n      props: [\n        ...extraKeyProps,\n        accumulativeValueProperty(angleKey, angleScaleType, { id: `angleValue`, onlyPositive: true }),\n        valueProperty(angleKey, angleScaleType, { id: `angleRaw` }),\n        // Raw value pass-through.\n        normalisePropertyTo(\"angleValue\", [0, 1], 0, 0),\n        ...extraProps\n      ]\n    });\n    for (const valueDef of this.processedData?.defs?.values ?? []) {\n      const { id, missing, property } = valueDef;\n      const missCount = getMissCount(this, missing);\n      if (id !== \"angleRaw\" && missCount > 0) {\n        Logger.warnOnce(\n          `no value was found for the key '${String(property)}' on ${missCount} data element${missCount > 1 ? \"s\" : \"\"}`\n        );\n      }\n    }\n    this.animationState.transition(\"updateData\");\n  }\n  async maybeRefreshNodeData() {\n    if (!this.nodeDataRefresh)\n      return;\n    const { nodeData = [], phantomNodeData } = await this.createNodeData() ?? {};\n    this.nodeData = nodeData;\n    this.phantomNodeData = phantomNodeData;\n    this.nodeDataRefresh = false;\n  }\n  getProcessedDataIndexes(dataModel) {\n    const angleIdx = dataModel.resolveProcessedDataIndexById(this, `angleValue`);\n    const angleRawIdx = dataModel.resolveProcessedDataIndexById(this, `angleRaw`);\n    const angleFilterIdx = this.properties.angleFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `angleFilterValue`) : void 0;\n    const angleFilterRawIdx = this.properties.angleFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `angleFilterRaw`) : void 0;\n    const radiusIdx = this.properties.radiusKey ? dataModel.resolveProcessedDataIndexById(this, `radiusValue`) : void 0;\n    const radiusRawIdx = this.properties.radiusKey ? dataModel.resolveProcessedDataIndexById(this, `radiusRaw`) : void 0;\n    const calloutLabelIdx = this.properties.calloutLabelKey ? dataModel.resolveProcessedDataIndexById(this, `calloutLabelValue`) : void 0;\n    const sectorLabelIdx = this.properties.sectorLabelKey ? dataModel.resolveProcessedDataIndexById(this, `sectorLabelValue`) : void 0;\n    const legendItemIdx = this.properties.legendItemKey ? dataModel.resolveProcessedDataIndexById(this, `legendItemValue`) : void 0;\n    return {\n      angleIdx,\n      angleRawIdx,\n      angleFilterIdx,\n      angleFilterRawIdx,\n      radiusIdx,\n      radiusRawIdx,\n      calloutLabelIdx,\n      sectorLabelIdx,\n      legendItemIdx\n    };\n  }\n  async createNodeData() {\n    const { id: seriesId, processedData, dataModel, angleScale } = this;\n    const { rotation, innerRadiusRatio } = this.properties;\n    if (!this.properties.isValid()) {\n      this.zerosumOuterRing.visible = true;\n      this.zerosumInnerRing.visible = true;\n      return { itemId: seriesId, nodeData: [], labelData: [] };\n    }\n    if (!processedData || !dataModel || processedData.type !== \"ungrouped\")\n      return;\n    const {\n      angleIdx,\n      angleRawIdx,\n      angleFilterIdx,\n      angleFilterRawIdx,\n      radiusIdx,\n      radiusRawIdx,\n      calloutLabelIdx,\n      sectorLabelIdx,\n      legendItemIdx\n    } = this.getProcessedDataIndexes(dataModel);\n    const useFilterAngles = angleFilterRawIdx != null && processedData.data.some(({ values }) => {\n      return values[angleFilterRawIdx] > values[angleRawIdx];\n    });\n    let currentStart = 0;\n    let sum2 = 0;\n    const nodes = [];\n    const phantomNodes = angleFilterRawIdx != null ? [] : void 0;\n    processedData.data.forEach((group, index) => {\n      const { datum, values } = group;\n      const currentValue = useFilterAngles ? values[angleFilterIdx] : values[angleIdx];\n      const crossFilterScale = angleFilterRawIdx != null && !useFilterAngles ? Math.sqrt(values[angleFilterRawIdx] / values[angleRawIdx]) : 1;\n      const startAngle = angleScale.convert(currentStart) + toRadians(rotation);\n      currentStart = currentValue;\n      sum2 += currentValue;\n      const endAngle = angleScale.convert(currentStart) + toRadians(rotation);\n      const span = Math.abs(endAngle - startAngle);\n      const midAngle = startAngle + span / 2;\n      const angleValue = values[angleRawIdx];\n      const radiusRaw = radiusIdx != null ? values[radiusIdx] ?? 1 : 1;\n      const radius = radiusRaw * crossFilterScale;\n      const radiusValue = radiusRawIdx != null ? values[radiusRawIdx] : void 0;\n      const legendItemValue = legendItemIdx != null ? values[legendItemIdx] : void 0;\n      const nodeLabels = this.getLabels(\n        datum,\n        midAngle,\n        span,\n        true,\n        calloutLabelIdx != null ? values[calloutLabelIdx] : void 0,\n        sectorLabelIdx != null ? values[sectorLabelIdx] : void 0,\n        legendItemValue\n      );\n      const sectorFormat = this.getSectorFormat(datum, index, false);\n      const node = {\n        itemId: index,\n        series: this,\n        datum,\n        index,\n        angleValue,\n        midAngle,\n        midCos: Math.cos(midAngle),\n        midSin: Math.sin(midAngle),\n        startAngle,\n        endAngle,\n        radius,\n        innerRadius: Math.max(this.radiusScale.convert(0), 0),\n        outerRadius: Math.max(this.radiusScale.convert(radius), 0),\n        sectorFormat,\n        radiusValue,\n        legendItemValue,\n        enabled: this.seriesItemEnabled[index],\n        focusable: true,\n        ...nodeLabels\n      };\n      nodes.push(node);\n      if (phantomNodes != null) {\n        phantomNodes.push({\n          ...node,\n          radius: 1,\n          innerRadius: Math.max(this.radiusScale.convert(0), 0),\n          outerRadius: Math.max(this.radiusScale.convert(1), 0),\n          focusable: false\n        });\n      }\n    });\n    this.zerosumOuterRing.visible = sum2 === 0;\n    this.zerosumInnerRing.visible = sum2 === 0 && innerRadiusRatio != null && innerRadiusRatio !== 1 && innerRadiusRatio > 0;\n    return {\n      itemId: seriesId,\n      nodeData: nodes,\n      labelData: nodes,\n      phantomNodeData: phantomNodes\n    };\n  }\n  getLabels(datum, midAngle, span, skipDisabled, calloutLabelValue, sectorLabelValue, legendItemValue) {\n    const { calloutLabel, sectorLabel, legendItemKey } = this.properties;\n    const calloutLabelKey = !skipDisabled || calloutLabel.enabled ? this.properties.calloutLabelKey : void 0;\n    const sectorLabelKey = !skipDisabled || sectorLabel.enabled ? this.properties.sectorLabelKey : void 0;\n    if (!calloutLabelKey && !sectorLabelKey && !legendItemKey) {\n      return {};\n    }\n    const labelFormatterParams = {\n      datum,\n      angleKey: this.properties.angleKey,\n      angleName: this.properties.angleName,\n      radiusKey: this.properties.radiusKey,\n      radiusName: this.properties.radiusName,\n      calloutLabelKey: this.properties.calloutLabelKey,\n      calloutLabelName: this.properties.calloutLabelName,\n      sectorLabelKey: this.properties.sectorLabelKey,\n      sectorLabelName: this.properties.sectorLabelName,\n      legendItemKey: this.properties.legendItemKey\n    };\n    const result = {};\n    if (calloutLabelKey && span > toRadians(calloutLabel.minAngle)) {\n      result.calloutLabel = {\n        ...this.getTextAlignment(midAngle),\n        text: this.getLabelText(calloutLabel, {\n          ...labelFormatterParams,\n          value: calloutLabelValue\n        }),\n        hidden: false,\n        collisionTextAlign: void 0,\n        collisionOffsetY: 0,\n        box: void 0\n      };\n    }\n    if (sectorLabelKey) {\n      result.sectorLabel = {\n        text: this.getLabelText(sectorLabel, {\n          ...labelFormatterParams,\n          value: sectorLabelValue\n        })\n      };\n    }\n    if (legendItemKey != null && legendItemValue != null) {\n      result.legendItem = { key: legendItemKey, text: legendItemValue };\n    }\n    return result;\n  }\n  getTextAlignment(midAngle) {\n    const quadrantTextOpts = [\n      { textAlign: \"center\", textBaseline: \"bottom\" },\n      { textAlign: \"left\", textBaseline: \"middle\" },\n      { textAlign: \"center\", textBaseline: \"hanging\" },\n      { textAlign: \"right\", textBaseline: \"middle\" }\n    ];\n    const midAngle180 = normalizeAngle180(midAngle);\n    const quadrantStart = -0.75 * Math.PI;\n    const quadrantOffset = midAngle180 - quadrantStart;\n    const quadrant = Math.floor(quadrantOffset / (Math.PI / 2));\n    const quadrantIndex = mod(quadrant, quadrantTextOpts.length);\n    return quadrantTextOpts[quadrantIndex];\n  }\n  getSectorFormat(datum, formatIndex, highlighted) {\n    const { callbackCache } = this.ctx;\n    const { angleKey, radiusKey, calloutLabelKey, sectorLabelKey, legendItemKey, fills, strokes, itemStyler } = this.properties;\n    const defaultStroke = strokes[formatIndex % strokes.length];\n    const { fill, fillOpacity, stroke, strokeWidth, strokeOpacity, lineDash, lineDashOffset, cornerRadius } = mergeDefaults(\n      highlighted && this.properties.highlightStyle.item,\n      {\n        fill: fills.length > 0 ? fills[formatIndex % fills.length] : void 0,\n        stroke: defaultStroke,\n        strokeWidth: this.getStrokeWidth(this.properties.strokeWidth),\n        strokeOpacity: this.getOpacity()\n      },\n      this.properties\n    );\n    let format;\n    if (itemStyler) {\n      format = callbackCache.call(itemStyler, {\n        datum,\n        angleKey,\n        radiusKey,\n        calloutLabelKey,\n        sectorLabelKey,\n        legendItemKey,\n        fill,\n        fillOpacity,\n        stroke,\n        strokeWidth,\n        strokeOpacity,\n        lineDash,\n        lineDashOffset,\n        cornerRadius,\n        highlighted,\n        seriesId: this.id\n      });\n    }\n    return {\n      fill: format?.fill ?? fill,\n      fillOpacity: format?.fillOpacity ?? fillOpacity,\n      stroke: format?.stroke ?? stroke,\n      strokeWidth: format?.strokeWidth ?? strokeWidth,\n      strokeOpacity: format?.strokeOpacity ?? strokeOpacity,\n      lineDash: format?.lineDash ?? lineDash,\n      lineDashOffset: format?.lineDashOffset ?? lineDashOffset,\n      cornerRadius: format?.cornerRadius ?? cornerRadius\n    };\n  }\n  getInnerRadius() {\n    const { radius } = this;\n    const { innerRadiusRatio = 1, innerRadiusOffset = 0 } = this.properties;\n    const innerRadius = radius * innerRadiusRatio + innerRadiusOffset;\n    if (innerRadius === radius || innerRadius < 0) {\n      return 0;\n    }\n    return innerRadius;\n  }\n  getOuterRadius() {\n    const { outerRadiusRatio, outerRadiusOffset } = this.properties;\n    return Math.max(this.radius * outerRadiusRatio + outerRadiusOffset, 0);\n  }\n  updateRadiusScale(resize) {\n    const newRange = [this.getInnerRadius(), this.getOuterRadius()];\n    this.radiusScale.range = newRange;\n    if (resize) {\n      this.previousRadiusScale.range = newRange;\n    }\n    const setRadii = (d) => ({\n      ...d,\n      innerRadius: Math.max(this.radiusScale.convert(0), 0),\n      outerRadius: Math.max(this.radiusScale.convert(d.radius), 0)\n    });\n    this.nodeData = this.nodeData.map(setRadii);\n    this.phantomNodeData = this.phantomNodeData?.map(setRadii);\n  }\n  getTitleTranslationY() {\n    const outerRadius = Math.max(0, this.radiusScale.range[1]);\n    if (outerRadius === 0) {\n      return NaN;\n    }\n    const spacing = this.properties.title?.spacing ?? 0;\n    const titleOffset = 2 + spacing;\n    const dy = Math.max(0, -outerRadius);\n    return -outerRadius - titleOffset - dy;\n  }\n  async update({ seriesRect }) {\n    const { title } = this.properties;\n    const newNodeDataDependencies = {\n      seriesRectWidth: seriesRect?.width,\n      seriesRectHeight: seriesRect?.height\n    };\n    const resize = jsonDiff(this.nodeDataDependencies, newNodeDataDependencies) != null;\n    if (resize) {\n      this._nodeDataDependencies = newNodeDataDependencies;\n    }\n    await this.maybeRefreshNodeData();\n    this.updateTitleNodes();\n    this.updateRadiusScale(resize);\n    this.contentGroup.translationX = this.centerX;\n    this.contentGroup.translationY = this.centerY;\n    this.highlightGroup.translationX = this.centerX;\n    this.highlightGroup.translationY = this.centerY;\n    this.backgroundGroup.translationX = this.centerX;\n    this.backgroundGroup.translationY = this.centerY;\n    if (this.labelGroup) {\n      this.labelGroup.translationX = this.centerX;\n      this.labelGroup.translationY = this.centerY;\n    }\n    if (title) {\n      const dy = this.getTitleTranslationY();\n      title.node.y = isFinite(dy) ? dy : 0;\n      const titleBox = title.node.getBBox();\n      title.node.visible = title.enabled && isFinite(dy) && !this.bboxIntersectsSurroundingSeries(titleBox);\n    }\n    for (const circle of [this.zerosumInnerRing, this.zerosumOuterRing]) {\n      circle.fillOpacity = 0;\n      circle.stroke = this.properties.calloutLabel.color;\n      circle.strokeWidth = 1;\n      circle.strokeOpacity = 1;\n    }\n    this.updateNodeMidPoint();\n    await this.updateSelections();\n    await this.updateNodes(seriesRect);\n  }\n  updateTitleNodes() {\n    const { oldTitle } = this;\n    const { title } = this.properties;\n    if (oldTitle !== title) {\n      if (oldTitle) {\n        this.labelGroup?.removeChild(oldTitle.node);\n      }\n      if (title) {\n        title.node.textBaseline = \"bottom\";\n        this.labelGroup?.appendChild(title.node);\n      }\n      this.oldTitle = title;\n    }\n  }\n  updateNodeMidPoint() {\n    const setMidPoint = (d) => {\n      const radius = d.innerRadius + (d.outerRadius - d.innerRadius) / 2;\n      d.midPoint = {\n        x: d.midCos * Math.max(0, radius),\n        y: d.midSin * Math.max(0, radius)\n      };\n    };\n    this.nodeData.forEach(setMidPoint);\n    this.phantomNodeData?.forEach(setMidPoint);\n  }\n  async updateSelections() {\n    await this.updateGroupSelection();\n    this.updateInnerCircleSelection();\n  }\n  async updateGroupSelection() {\n    const {\n      itemSelection,\n      highlightSelection,\n      phantomSelection,\n      highlightLabelSelection,\n      calloutLabelSelection,\n      labelSelection,\n      innerLabelsSelection\n    } = this;\n    const highlightedNodeData = this.nodeData.map((datum) => ({\n      ...datum,\n      // Allow mutable sectorFormat, so formatted sector styles can be updated and varied\n      // between normal and highlighted cases.\n      sectorFormat: { ...datum.sectorFormat }\n    }));\n    const update = (selection, nodeData) => {\n      selection.update(nodeData, void 0, (datum) => this.getDatumId(datum));\n      if (this.ctx.animationManager.isSkipped()) {\n        selection.cleanup();\n      }\n    };\n    update(itemSelection, this.nodeData);\n    update(highlightSelection, highlightedNodeData);\n    update(phantomSelection, this.phantomNodeData ?? []);\n    calloutLabelSelection.update(this.calloutNodeData, (group) => {\n      const line = new Line();\n      line.tag = 0 /* Callout */;\n      line.pointerEvents = 1 /* None */;\n      group.appendChild(line);\n      const text = new Text();\n      text.tag = 1 /* Label */;\n      text.pointerEvents = 1 /* None */;\n      group.appendChild(text);\n    });\n    labelSelection.update(this.nodeData);\n    highlightLabelSelection.update(highlightedNodeData);\n    innerLabelsSelection.update(this.properties.innerLabels, (node) => {\n      node.pointerEvents = 1 /* None */;\n    });\n  }\n  updateInnerCircleSelection() {\n    const { innerCircle } = this.properties;\n    let radius = 0;\n    const innerRadius = this.getInnerRadius();\n    if (innerRadius > 0) {\n      const circleRadius = Math.min(innerRadius, this.getOuterRadius());\n      const antiAliasingPadding = 1;\n      radius = Math.ceil(circleRadius * 2 + antiAliasingPadding);\n    }\n    const datums = innerCircle ? [{ radius }] : [];\n    this.innerCircleSelection.update(datums);\n  }\n  async updateNodes(seriesRect) {\n    const highlightedDatum = this.ctx.highlightManager.getActiveHighlight();\n    const isVisible = this.visible && this.seriesItemEnabled.includes(true);\n    this.rootGroup.visible = isVisible;\n    this.backgroundGroup.visible = isVisible;\n    this.contentGroup.visible = isVisible;\n    this.highlightGroup.visible = isVisible && highlightedDatum?.series === this;\n    this.highlightLabel.visible = isVisible && highlightedDatum?.series === this;\n    this.labelGroup.visible = isVisible;\n    this.contentGroup.opacity = this.getOpacity();\n    this.innerCircleSelection.each((node, { radius }) => {\n      node.setProperties({\n        fill: this.properties.innerCircle?.fill,\n        opacity: this.properties.innerCircle?.fillOpacity,\n        size: radius\n      });\n    });\n    const animationDisabled = this.ctx.animationManager.isSkipped();\n    const updateSectorFn = (sector, datum, _index, isDatumHighlighted) => {\n      const format = this.getSectorFormat(datum.datum, datum.itemId, isDatumHighlighted);\n      datum.sectorFormat.fill = format.fill;\n      datum.sectorFormat.stroke = format.stroke;\n      if (animationDisabled) {\n        sector.startAngle = datum.startAngle;\n        sector.endAngle = datum.endAngle;\n        sector.innerRadius = datum.innerRadius;\n        sector.outerRadius = datum.outerRadius;\n      }\n      if (isDatumHighlighted || animationDisabled) {\n        sector.fill = format.fill;\n        sector.stroke = format.stroke;\n      }\n      sector.strokeWidth = format.strokeWidth;\n      sector.fillOpacity = format.fillOpacity;\n      sector.strokeOpacity = format.strokeOpacity;\n      sector.lineDash = format.lineDash;\n      sector.lineDashOffset = format.lineDashOffset;\n      sector.cornerRadius = format.cornerRadius;\n      sector.fillShadow = this.properties.shadow;\n      const inset = Math.max(\n        (this.properties.sectorSpacing + (format.stroke != null ? format.strokeWidth : 0)) / 2,\n        0\n      );\n      sector.inset = inset;\n      sector.lineJoin = this.properties.sectorSpacing >= 0 || inset > 0 ? \"miter\" : \"round\";\n    };\n    this.itemSelection.each((node, datum, index) => updateSectorFn(node, datum, index, false));\n    this.highlightSelection.each((node, datum, index) => {\n      updateSectorFn(node, datum, index, true);\n      node.visible = datum.itemId === highlightedDatum?.itemId;\n    });\n    this.phantomSelection.each((node, datum, index) => updateSectorFn(node, datum, index, false));\n    this.updateCalloutLineNodes();\n    this.updateCalloutLabelNodes(seriesRect);\n    this.updateSectorLabelNodes();\n    this.updateInnerLabelNodes();\n    this.updateZerosumRings();\n    this.animationState.transition(\"update\");\n  }\n  updateCalloutLineNodes() {\n    const { calloutLine } = this.properties;\n    const calloutLength = calloutLine.length;\n    const calloutStrokeWidth = calloutLine.strokeWidth;\n    const calloutColors = calloutLine.colors ?? this.properties.strokes;\n    const { offset: offset4 } = this.properties.calloutLabel;\n    this.calloutLabelSelection.selectByTag(0 /* Callout */).forEach((line, index) => {\n      const datum = line.datum;\n      const { calloutLabel: label, outerRadius } = datum;\n      if (label?.text && !label.hidden && outerRadius !== 0) {\n        line.visible = true;\n        line.strokeWidth = calloutStrokeWidth;\n        line.stroke = calloutColors[index % calloutColors.length];\n        line.fill = void 0;\n        const x1 = datum.midCos * outerRadius;\n        const y1 = datum.midSin * outerRadius;\n        let x2 = datum.midCos * (outerRadius + calloutLength);\n        let y2 = datum.midSin * (outerRadius + calloutLength);\n        const isMoved = label.collisionTextAlign ?? label.collisionOffsetY !== 0;\n        if (isMoved && label.box != null) {\n          const box = label.box;\n          let cx = x2;\n          let cy = y2;\n          if (x2 < box.x) {\n            cx = box.x;\n          } else if (x2 > box.x + box.width) {\n            cx = box.x + box.width;\n          }\n          if (y2 < box.y) {\n            cy = box.y;\n          } else if (y2 > box.y + box.height) {\n            cy = box.y + box.height;\n          }\n          const dx = cx - x2;\n          const dy = cy - y2;\n          const length2 = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n          const paddedLength = length2 - offset4;\n          if (paddedLength > 0) {\n            x2 = x2 + dx * paddedLength / length2;\n            y2 = y2 + dy * paddedLength / length2;\n          }\n        }\n        line.x1 = x1;\n        line.y1 = y1;\n        line.x2 = x2;\n        line.y2 = y2;\n      } else {\n        line.visible = false;\n      }\n    });\n  }\n  getLabelOverflow(text, box, seriesRect) {\n    const seriesLeft = seriesRect.x - this.centerX;\n    const seriesRight = seriesRect.x + seriesRect.width - this.centerX;\n    const seriesTop = seriesRect.y - this.centerY;\n    const seriesBottom = seriesRect.y + seriesRect.height - this.centerY;\n    const errPx = 1;\n    let visibleTextPart = 1;\n    if (box.x + errPx < seriesLeft) {\n      visibleTextPart = (box.x + box.width - seriesLeft) / box.width;\n    } else if (box.x + box.width - errPx > seriesRight) {\n      visibleTextPart = (seriesRight - box.x) / box.width;\n    }\n    const hasVerticalOverflow = box.y + errPx < seriesTop || box.y + box.height - errPx > seriesBottom;\n    const textLength = visibleTextPart === 1 ? text.length : Math.floor(text.length * visibleTextPart) - 1;\n    const hasSurroundingSeriesOverflow = this.bboxIntersectsSurroundingSeries(box);\n    return { textLength, hasVerticalOverflow, hasSurroundingSeriesOverflow };\n  }\n  bboxIntersectsSurroundingSeries(box) {\n    const { surroundingRadius } = this;\n    if (surroundingRadius == null) {\n      return false;\n    }\n    const corners = [\n      { x: box.x, y: box.y },\n      { x: box.x + box.width, y: box.y },\n      { x: box.x + box.width, y: box.y + box.height },\n      { x: box.x, y: box.y + box.height }\n    ];\n    const sur2 = surroundingRadius ** 2;\n    return corners.some((corner) => corner.x ** 2 + corner.y ** 2 > sur2);\n  }\n  computeCalloutLabelCollisionOffsets() {\n    const { radiusScale } = this;\n    const { calloutLabel, calloutLine } = this.properties;\n    const { offset: offset4, minSpacing } = calloutLabel;\n    const innerRadius = radiusScale.convert(0);\n    const shouldSkip = (datum) => {\n      const label = datum.calloutLabel;\n      return !label || datum.outerRadius === 0;\n    };\n    const fullData = this.calloutNodeData;\n    const data = fullData.filter((t) => !shouldSkip(t));\n    data.forEach((datum) => {\n      const label = datum.calloutLabel;\n      if (label == null)\n        return;\n      label.hidden = false;\n      label.collisionTextAlign = void 0;\n      label.collisionOffsetY = 0;\n    });\n    if (data.length <= 1) {\n      return;\n    }\n    const leftLabels = data.filter((d) => d.midCos < 0).sort((a, b) => a.midSin - b.midSin);\n    const rightLabels = data.filter((d) => d.midCos >= 0).sort((a, b) => a.midSin - b.midSin);\n    const topLabels = data.filter((d) => d.midSin < 0 && d.calloutLabel?.textAlign === \"center\").sort((a, b) => a.midCos - b.midCos);\n    const bottomLabels = data.filter((d) => d.midSin >= 0 && d.calloutLabel?.textAlign === \"center\").sort((a, b) => a.midCos - b.midCos);\n    const getTextBBox = (datum) => {\n      const label = datum.calloutLabel;\n      if (label == null)\n        return BBox.zero.clone();\n      const labelRadius = datum.outerRadius + calloutLine.length + offset4;\n      const x = datum.midCos * labelRadius;\n      const y = datum.midSin * labelRadius + label.collisionOffsetY;\n      const textAlign = label.collisionTextAlign ?? label.textAlign;\n      const textBaseline = label.textBaseline;\n      return Text.computeBBox(label.text, x, y, {\n        font: this.properties.calloutLabel,\n        textAlign,\n        textBaseline\n      });\n    };\n    const avoidNeighbourYCollision = (label, next, direction) => {\n      const box = getTextBBox(label).grow(minSpacing / 2);\n      const other = getTextBBox(next).grow(minSpacing / 2);\n      const collidesOrBehind = box.x < other.x + other.width && box.x + box.width > other.x && (direction === \"to-top\" ? box.y < other.y + other.height : box.y + box.height > other.y);\n      if (collidesOrBehind) {\n        const dy = direction === \"to-top\" ? box.y - other.y - other.height : box.y + box.height - other.y;\n        next.calloutLabel.collisionOffsetY = dy;\n      }\n    };\n    const avoidYCollisions = (labels) => {\n      const midLabel = labels.slice().sort((a, b) => Math.abs(a.midSin) - Math.abs(b.midSin))[0];\n      const midIndex = labels.indexOf(midLabel);\n      for (let i = midIndex - 1; i >= 0; i--) {\n        const prev = labels[i + 1];\n        const next = labels[i];\n        avoidNeighbourYCollision(prev, next, \"to-top\");\n      }\n      for (let i = midIndex + 1; i < labels.length; i++) {\n        const prev = labels[i - 1];\n        const next = labels[i];\n        avoidNeighbourYCollision(prev, next, \"to-bottom\");\n      }\n    };\n    const avoidXCollisions = (labels) => {\n      const labelsCollideLabelsByY = data.some((datum) => datum.calloutLabel.collisionOffsetY !== 0);\n      const boxes = labels.map((label) => getTextBBox(label));\n      const paddedBoxes = boxes.map((box) => box.clone().grow(minSpacing / 2));\n      let labelsCollideLabelsByX = false;\n      for (let i = 0; i < paddedBoxes.length && !labelsCollideLabelsByX; i++) {\n        const box = paddedBoxes[i];\n        for (let j = i + 1; j < labels.length; j++) {\n          const other = paddedBoxes[j];\n          if (box.collidesBBox(other)) {\n            labelsCollideLabelsByX = true;\n            break;\n          }\n        }\n      }\n      const sectors = fullData.map((datum) => {\n        const { startAngle, endAngle, outerRadius } = datum;\n        return { startAngle, endAngle, innerRadius, outerRadius };\n      });\n      const labelsCollideSectors = boxes.some((box) => {\n        return sectors.some((sector) => boxCollidesSector(box, sector));\n      });\n      if (!labelsCollideLabelsByX && !labelsCollideLabelsByY && !labelsCollideSectors) {\n        return;\n      }\n      labels.filter((d) => d.calloutLabel.textAlign === \"center\").forEach((d) => {\n        const label = d.calloutLabel;\n        if (d.midCos < 0) {\n          label.collisionTextAlign = \"right\";\n        } else if (d.midCos > 0) {\n          label.collisionTextAlign = \"left\";\n        } else {\n          label.collisionTextAlign = \"center\";\n        }\n      });\n    };\n    avoidYCollisions(leftLabels);\n    avoidYCollisions(rightLabels);\n    avoidXCollisions(topLabels);\n    avoidXCollisions(bottomLabels);\n  }\n  updateCalloutLabelNodes(seriesRect) {\n    const { radiusScale } = this;\n    const { calloutLabel, calloutLine } = this.properties;\n    const calloutLength = calloutLine.length;\n    const { offset: offset4, color } = calloutLabel;\n    const tempTextNode = new Text();\n    this.calloutLabelSelection.selectByTag(1 /* Label */).forEach((text) => {\n      const { datum } = text;\n      const label = datum.calloutLabel;\n      const radius = radiusScale.convert(datum.radius);\n      const outerRadius = Math.max(0, radius);\n      if (!label?.text || outerRadius === 0 || label.hidden) {\n        text.visible = false;\n        return;\n      }\n      const labelRadius = outerRadius + calloutLength + offset4;\n      const x = datum.midCos * labelRadius;\n      const y = datum.midSin * labelRadius + label.collisionOffsetY;\n      const align = {\n        textAlign: label.collisionTextAlign ?? label.textAlign,\n        textBaseline: label.textBaseline\n      };\n      tempTextNode.text = label.text;\n      tempTextNode.x = x;\n      tempTextNode.y = y;\n      tempTextNode.setFont(this.properties.calloutLabel);\n      tempTextNode.setAlign(align);\n      const box = tempTextNode.getBBox();\n      let displayText = label.text;\n      let visible = true;\n      if (calloutLabel.avoidCollisions) {\n        const { textLength, hasVerticalOverflow } = this.getLabelOverflow(label.text, box, seriesRect);\n        displayText = label.text.length === textLength ? label.text : `${label.text.substring(0, textLength)}\\u2026`;\n        visible = !hasVerticalOverflow;\n      }\n      text.text = displayText;\n      text.x = x;\n      text.y = y;\n      text.setFont(this.properties.calloutLabel);\n      text.setAlign(align);\n      text.fill = color;\n      text.visible = visible;\n    });\n  }\n  async computeLabelsBBox(options, seriesRect) {\n    const { calloutLabel, calloutLine } = this.properties;\n    const calloutLength = calloutLine.length;\n    const { offset: offset4, maxCollisionOffset, minSpacing } = calloutLabel;\n    if (!calloutLabel.avoidCollisions) {\n      return null;\n    }\n    await this.maybeRefreshNodeData();\n    this.updateRadiusScale(false);\n    this.computeCalloutLabelCollisionOffsets();\n    const textBoxes = [];\n    const text = new Text();\n    let titleBox;\n    const { title } = this.properties;\n    if (title?.text && title.enabled) {\n      const dy = this.getTitleTranslationY();\n      if (isFinite(dy)) {\n        text.text = title.text;\n        text.x = 0;\n        text.y = dy;\n        text.setFont(title);\n        text.setAlign({\n          textBaseline: \"bottom\",\n          textAlign: \"center\"\n        });\n        titleBox = text.getBBox();\n        textBoxes.push(titleBox);\n      }\n    }\n    this.calloutNodeData.forEach((datum) => {\n      const label = datum.calloutLabel;\n      if (!label || datum.outerRadius === 0) {\n        return null;\n      }\n      const labelRadius = datum.outerRadius + calloutLength + offset4;\n      const x = datum.midCos * labelRadius;\n      const y = datum.midSin * labelRadius + label.collisionOffsetY;\n      text.text = label.text;\n      text.x = x;\n      text.y = y;\n      text.setFont(this.properties.calloutLabel);\n      text.setAlign({\n        textAlign: label.collisionTextAlign ?? label.textAlign,\n        textBaseline: label.textBaseline\n      });\n      const box = text.getBBox();\n      label.box = box;\n      if (Math.abs(label.collisionOffsetY) > maxCollisionOffset) {\n        label.hidden = true;\n        return;\n      }\n      if (titleBox) {\n        const seriesTop = seriesRect.y - this.centerY;\n        const titleCleanArea = new BBox(\n          titleBox.x - minSpacing,\n          seriesTop,\n          titleBox.width + 2 * minSpacing,\n          titleBox.y + titleBox.height + minSpacing - seriesTop\n        );\n        if (box.collidesBBox(titleCleanArea)) {\n          label.hidden = true;\n          return;\n        }\n      }\n      if (options.hideWhenNecessary) {\n        const { textLength, hasVerticalOverflow, hasSurroundingSeriesOverflow } = this.getLabelOverflow(\n          label.text,\n          box,\n          seriesRect\n        );\n        const isTooShort = label.text.length > 2 && textLength < 2;\n        if (hasVerticalOverflow || isTooShort || hasSurroundingSeriesOverflow) {\n          label.hidden = true;\n          return;\n        }\n      }\n      label.hidden = false;\n      textBoxes.push(box);\n    });\n    if (textBoxes.length === 0) {\n      return null;\n    }\n    return BBox.merge(textBoxes);\n  }\n  updateSectorLabelNodes() {\n    const { radiusScale } = this;\n    const innerRadius = radiusScale.convert(0);\n    const { fontSize, fontStyle, fontWeight, fontFamily, positionOffset, positionRatio, color } = this.properties.sectorLabel;\n    const updateSectorLabel = (text, datum) => {\n      const { sectorLabel, outerRadius } = datum;\n      let isTextVisible = false;\n      if (sectorLabel && outerRadius !== 0) {\n        const labelRadius = innerRadius * (1 - positionRatio) + outerRadius * positionRatio + positionOffset;\n        text.fill = color;\n        text.fontStyle = fontStyle;\n        text.fontWeight = fontWeight;\n        text.fontSize = fontSize;\n        text.fontFamily = fontFamily;\n        text.text = sectorLabel.text;\n        text.x = datum.midCos * labelRadius;\n        text.y = datum.midSin * labelRadius;\n        text.textAlign = \"center\";\n        text.textBaseline = \"middle\";\n        const bbox = text.getBBox();\n        const corners = [\n          [bbox.x, bbox.y],\n          [bbox.x + bbox.width, bbox.y],\n          [bbox.x + bbox.width, bbox.y + bbox.height],\n          [bbox.x, bbox.y + bbox.height]\n        ];\n        const { startAngle, endAngle } = datum;\n        const sectorBounds = { startAngle, endAngle, innerRadius, outerRadius };\n        if (corners.every(([x, y]) => isPointInSector(x, y, sectorBounds))) {\n          isTextVisible = true;\n        }\n      }\n      text.visible = isTextVisible;\n    };\n    this.labelSelection.each(updateSectorLabel);\n    this.highlightLabelSelection.each(updateSectorLabel);\n  }\n  updateInnerLabelNodes() {\n    const textBBoxes = [];\n    const margins = [];\n    this.innerLabelsSelection.each((text, datum) => {\n      const { fontStyle, fontWeight, fontSize, fontFamily, color } = datum;\n      text.fontStyle = fontStyle;\n      text.fontWeight = fontWeight;\n      text.fontSize = fontSize;\n      text.fontFamily = fontFamily;\n      text.text = datum.text;\n      text.x = 0;\n      text.y = 0;\n      text.fill = color;\n      text.textAlign = \"center\";\n      text.textBaseline = \"alphabetic\";\n      textBBoxes.push(text.getBBox());\n      margins.push(datum.spacing);\n    });\n    const getMarginTop = (index) => index === 0 ? 0 : margins[index];\n    const getMarginBottom = (index) => index === margins.length - 1 ? 0 : margins[index];\n    const totalHeight = textBBoxes.reduce((sum2, bbox, i) => {\n      return sum2 + bbox.height + getMarginTop(i) + getMarginBottom(i);\n    }, 0);\n    const totalWidth = Math.max(...textBBoxes.map((bbox) => bbox.width));\n    const innerRadius = this.getInnerRadius();\n    const labelRadius = Math.sqrt(Math.pow(totalWidth / 2, 2) + Math.pow(totalHeight / 2, 2));\n    const labelsVisible = labelRadius <= (innerRadius > 0 ? innerRadius : this.getOuterRadius());\n    const textBottoms = [];\n    for (let i = 0, prev = -totalHeight / 2; i < textBBoxes.length; i++) {\n      const bbox = textBBoxes[i];\n      const bottom = bbox.height + prev + getMarginTop(i);\n      textBottoms.push(bottom);\n      prev = bottom + getMarginBottom(i);\n    }\n    this.innerLabelsSelection.each((text, _datum, index) => {\n      text.y = textBottoms[index];\n      text.visible = labelsVisible;\n    });\n  }\n  updateZerosumRings() {\n    this.zerosumOuterRing.size = this.getOuterRadius() * 2;\n    this.zerosumInnerRing.size = this.getInnerRadius() * 2;\n  }\n  getDatumLegendName(nodeDatum) {\n    const { angleKey, calloutLabelKey, sectorLabelKey, legendItemKey } = this.properties;\n    const { sectorLabel, calloutLabel, legendItem } = nodeDatum;\n    if (legendItemKey && legendItem !== void 0) {\n      return legendItem.text;\n    } else if (calloutLabelKey && calloutLabelKey !== angleKey && calloutLabel?.text !== void 0) {\n      return calloutLabel.text;\n    } else if (sectorLabelKey && sectorLabelKey !== angleKey && sectorLabel?.text !== void 0) {\n      return sectorLabel.text;\n    }\n  }\n  pickNodeClosestDatum(point) {\n    return pickByMatchingAngle(this, point);\n  }\n  getTooltipHtml(nodeDatum) {\n    if (!this.properties.isValid()) {\n      return EMPTY_TOOLTIP_CONTENT;\n    }\n    const {\n      datum,\n      angleValue,\n      sectorFormat: { fill: color },\n      itemId\n    } = nodeDatum;\n    const title = sanitizeHtml(this.properties.title?.text);\n    const content = isFiniteNumber(angleValue) ? toFixed(angleValue) : String(angleValue);\n    const labelText = this.getDatumLegendName(nodeDatum);\n    return this.properties.tooltip.toTooltipHtml(\n      {\n        title: title ?? labelText,\n        content: title && labelText ? `${labelText}: ${content}` : content,\n        backgroundColor: color\n      },\n      {\n        datum,\n        itemId,\n        title,\n        color,\n        seriesId: this.id,\n        angleKey: this.properties.angleKey,\n        angleName: this.properties.angleName,\n        radiusKey: this.properties.radiusKey,\n        radiusName: this.properties.radiusName,\n        calloutLabelKey: this.properties.calloutLabelKey,\n        calloutLabelName: this.properties.calloutLabelName,\n        sectorLabelKey: this.properties.sectorLabelKey,\n        sectorLabelName: this.properties.sectorLabelName,\n        legendItemKey: this.properties.legendItemKey\n      }\n    );\n  }\n  getLegendData(legendType) {\n    const { visible, processedData, dataModel } = this;\n    if (!dataModel || !processedData?.data.length || !this.properties.isValid() || legendType !== \"category\") {\n      return [];\n    }\n    const { angleKey, calloutLabelKey, sectorLabelKey, legendItemKey } = this.properties;\n    if (!legendItemKey && (!calloutLabelKey || calloutLabelKey === angleKey) && (!sectorLabelKey || sectorLabelKey === angleKey))\n      return [];\n    const { calloutLabelIdx, sectorLabelIdx, legendItemIdx } = this.getProcessedDataIndexes(dataModel);\n    const titleText = this.properties.title?.showInLegend && this.properties.title.text;\n    const legendData = [];\n    for (let index = 0; index < processedData.data.length; index++) {\n      const { datum, values } = processedData.data[index];\n      const labelParts = [];\n      if (titleText) {\n        labelParts.push(titleText);\n      }\n      const labels = this.getLabels(\n        datum,\n        2 * Math.PI,\n        2 * Math.PI,\n        false,\n        calloutLabelIdx != null ? values[calloutLabelIdx] : void 0,\n        sectorLabelIdx != null ? values[sectorLabelIdx] : void 0,\n        legendItemIdx != null ? values[legendItemIdx] : void 0\n      );\n      if (legendItemKey && labels.legendItem !== void 0) {\n        labelParts.push(labels.legendItem.text);\n      } else if (calloutLabelKey && calloutLabelKey !== angleKey && labels.calloutLabel?.text !== void 0) {\n        labelParts.push(labels.calloutLabel?.text);\n      } else if (sectorLabelKey && sectorLabelKey !== angleKey && labels.sectorLabel?.text !== void 0) {\n        labelParts.push(labels.sectorLabel?.text);\n      }\n      if (labelParts.length === 0)\n        continue;\n      const sectorFormat = this.getSectorFormat(datum, index, false);\n      legendData.push({\n        legendType: \"category\",\n        id: this.id,\n        itemId: index,\n        seriesId: this.id,\n        enabled: visible && this.legendItemEnabled[index],\n        label: {\n          text: labelParts.join(\" - \")\n        },\n        symbols: [\n          {\n            marker: {\n              fill: sectorFormat.fill,\n              stroke: sectorFormat.stroke,\n              fillOpacity: this.properties.fillOpacity,\n              strokeOpacity: this.properties.strokeOpacity,\n              strokeWidth: this.properties.strokeWidth\n            }\n          }\n        ],\n        legendItemName: legendItemKey != null ? datum[legendItemKey] : void 0\n      });\n    }\n    return legendData;\n  }\n  onLegendItemClick(event) {\n    const { enabled, itemId, series, legendItemName } = event;\n    if (series.id === this.id) {\n      this.toggleSeriesItem(itemId, enabled);\n    } else if (legendItemName != null) {\n      this.toggleOtherSeriesItems(legendItemName, enabled);\n    }\n  }\n  toggleSeriesItem(itemId, enabled) {\n    this.seriesItemEnabled[itemId] = enabled;\n    this.legendItemEnabled[itemId] = enabled;\n    if (this.nodeData[itemId]) {\n      this.nodeData[itemId].enabled = enabled;\n    }\n    this.nodeDataRefresh = true;\n  }\n  // Used for grid\n  setLegendState(enabledItems) {\n    this.legendItemEnabled = enabledItems;\n    this.ctx.updateService.update(4 /* SERIES_UPDATE */);\n  }\n  toggleOtherSeriesItems(legendItemName, enabled) {\n    if (!this.properties.legendItemKey || !this.dataModel) {\n      return;\n    }\n    const legendItemIdx = this.dataModel.resolveProcessedDataIndexById(this, `legendItemValue`);\n    this.processedData?.data.forEach(({ values }, datumItemId) => {\n      if (values[legendItemIdx] === legendItemName) {\n        this.toggleSeriesItem(datumItemId, enabled);\n      }\n    });\n  }\n  animateEmptyUpdateReady(_data) {\n    const { animationManager } = this.ctx;\n    const fns = preparePieSeriesAnimationFunctions(\n      true,\n      this.properties.rotation,\n      this.radiusScale,\n      this.previousRadiusScale\n    );\n    fromToMotion(\n      this.id,\n      \"nodes\",\n      animationManager,\n      [this.itemSelection, this.highlightSelection, this.phantomSelection],\n      fns.nodes,\n      (_, datum) => this.getDatumId(datum)\n    );\n    fromToMotion(this.id, `innerCircle`, animationManager, [this.innerCircleSelection], fns.innerCircle);\n    seriesLabelFadeInAnimation(this, \"callout\", animationManager, this.calloutLabelSelection);\n    seriesLabelFadeInAnimation(this, \"sector\", animationManager, this.labelSelection);\n    seriesLabelFadeInAnimation(this, \"highlight\", animationManager, this.highlightLabelSelection);\n    seriesLabelFadeInAnimation(this, \"inner\", animationManager, this.innerLabelsSelection);\n    this.previousRadiusScale.range = this.radiusScale.range;\n  }\n  animateWaitingUpdateReady() {\n    const { itemSelection, highlightSelection, phantomSelection, processedData, radiusScale, previousRadiusScale } = this;\n    const { animationManager } = this.ctx;\n    const dataDiff = processedData?.reduced?.diff;\n    this.ctx.animationManager.stopByAnimationGroupId(this.id);\n    const supportedDiff = (dataDiff?.moved.size ?? 0) === 0;\n    const hasKeys = (processedData?.defs.keys.length ?? 0) > 0;\n    const hasUniqueKeys = processedData?.reduced?.animationValidation?.uniqueKeys ?? true;\n    if (!supportedDiff || !hasKeys || !hasUniqueKeys) {\n      this.ctx.animationManager.skipCurrentBatch();\n    }\n    const fns = preparePieSeriesAnimationFunctions(\n      false,\n      this.properties.rotation,\n      radiusScale,\n      previousRadiusScale\n    );\n    fromToMotion(\n      this.id,\n      \"nodes\",\n      animationManager,\n      [itemSelection, highlightSelection, phantomSelection],\n      fns.nodes,\n      (_, datum) => this.getDatumId(datum),\n      dataDiff\n    );\n    fromToMotion(this.id, `innerCircle`, animationManager, [this.innerCircleSelection], fns.innerCircle);\n    seriesLabelFadeInAnimation(this, \"callout\", this.ctx.animationManager, this.calloutLabelSelection);\n    seriesLabelFadeInAnimation(this, \"sector\", this.ctx.animationManager, this.labelSelection);\n    seriesLabelFadeInAnimation(this, \"highlight\", this.ctx.animationManager, this.highlightLabelSelection);\n    seriesLabelFadeInAnimation(this, \"inner\", this.ctx.animationManager, this.innerLabelsSelection);\n    this.previousRadiusScale.range = this.radiusScale.range;\n  }\n  animateClearingUpdateEmpty() {\n    const { itemSelection, highlightSelection, phantomSelection, radiusScale, previousRadiusScale } = this;\n    const { animationManager } = this.ctx;\n    const fns = preparePieSeriesAnimationFunctions(\n      false,\n      this.properties.rotation,\n      radiusScale,\n      previousRadiusScale\n    );\n    fromToMotion(\n      this.id,\n      \"nodes\",\n      animationManager,\n      [itemSelection, highlightSelection, phantomSelection],\n      fns.nodes,\n      (_, datum) => this.getDatumId(datum)\n    );\n    fromToMotion(this.id, `innerCircle`, animationManager, [this.innerCircleSelection], fns.innerCircle);\n    seriesLabelFadeOutAnimation(this, \"callout\", this.ctx.animationManager, this.calloutLabelSelection);\n    seriesLabelFadeOutAnimation(this, \"sector\", this.ctx.animationManager, this.labelSelection);\n    seriesLabelFadeOutAnimation(this, \"highlight\", this.ctx.animationManager, this.highlightLabelSelection);\n    seriesLabelFadeOutAnimation(this, \"inner\", this.ctx.animationManager, this.innerLabelsSelection);\n    this.previousRadiusScale.range = this.radiusScale.range;\n  }\n  getDatumIdFromData(datum) {\n    const { calloutLabelKey, sectorLabelKey, legendItemKey } = this.properties;\n    if (!this.processedData?.reduced?.animationValidation?.uniqueKeys) {\n      return;\n    }\n    if (legendItemKey) {\n      return datum[legendItemKey];\n    } else if (calloutLabelKey) {\n      return datum[calloutLabelKey];\n    } else if (sectorLabelKey) {\n      return datum[sectorLabelKey];\n    }\n  }\n  getDatumId(datum) {\n    const { index } = datum;\n    const datumId = this.getDatumIdFromData(datum.datum);\n    return datumId != null ? String(datumId) : `${index}`;\n  }\n  onDataChange() {\n    const { data, seriesItemEnabled, legendItemEnabled } = this;\n    this.seriesItemEnabled = data?.map((_, index) => seriesItemEnabled[index] ?? true) ?? [];\n    this.legendItemEnabled = data?.map((_, index) => legendItemEnabled[index] ?? true) ?? [];\n  }\n};\nDonutSeries.className = \"DonutSeries\";\nDonutSeries.type = \"donut\";\n\n// packages/ag-charts-community/src/chart/series/polar/donutTheme.ts\nvar donutTheme = {\n  series: {\n    title: {\n      enabled: true,\n      fontWeight: \"normal\" /* NORMAL */,\n      fontSize: 14,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      color: DEFAULT_MUTED_LABEL_COLOUR,\n      spacing: 5\n    },\n    calloutLabel: {\n      enabled: true,\n      fontSize: 12 /* SMALL */,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      color: DEFAULT_LABEL_COLOUR,\n      offset: 3,\n      minAngle: 0\n    },\n    sectorLabel: {\n      enabled: true,\n      fontWeight: \"normal\" /* NORMAL */,\n      fontSize: 12 /* SMALL */,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      color: DEFAULT_INSIDE_SERIES_LABEL_COLOUR,\n      positionOffset: 0,\n      positionRatio: 0.5\n    },\n    calloutLine: {\n      length: 10,\n      strokeWidth: 2\n    },\n    fillOpacity: 1,\n    strokeOpacity: 1,\n    strokeWidth: 0,\n    lineDash: [0],\n    lineDashOffset: 0,\n    rotation: 0,\n    sectorSpacing: 1,\n    shadow: {\n      enabled: false,\n      color: DEFAULT_SHADOW_COLOUR,\n      xOffset: 3,\n      yOffset: 3,\n      blur: 5\n    },\n    innerLabels: {\n      fontSize: 12 /* SMALL */,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      color: DEFAULT_LABEL_COLOUR,\n      spacing: 2\n    }\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/polar/pieTheme.ts\nvar pieTheme = {\n  series: {\n    title: {\n      enabled: true,\n      fontWeight: \"normal\" /* NORMAL */,\n      fontSize: 14,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      color: DEFAULT_MUTED_LABEL_COLOUR,\n      spacing: 5\n    },\n    calloutLabel: {\n      enabled: true,\n      fontSize: 12 /* SMALL */,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      color: DEFAULT_LABEL_COLOUR,\n      offset: 3,\n      minAngle: 0\n    },\n    sectorLabel: {\n      enabled: true,\n      fontWeight: \"normal\" /* NORMAL */,\n      fontSize: 12 /* SMALL */,\n      fontFamily: DEFAULT_FONT_FAMILY,\n      color: DEFAULT_INSIDE_SERIES_LABEL_COLOUR,\n      positionOffset: 0,\n      positionRatio: 0.5\n    },\n    calloutLine: {\n      length: 10,\n      strokeWidth: 2\n    },\n    fillOpacity: 1,\n    strokeOpacity: 1,\n    strokeWidth: 0,\n    lineDash: [0],\n    lineDashOffset: 0,\n    rotation: 0,\n    sectorSpacing: 1,\n    shadow: {\n      enabled: false,\n      color: DEFAULT_SHADOW_COLOUR,\n      xOffset: 3,\n      yOffset: 3,\n      blur: 5\n    }\n  }\n};\nvar piePaletteFactory = ({ takeColors, colorsCount }) => {\n  const { fills, strokes } = takeColors(colorsCount);\n  return { fills, strokes, calloutLine: { colors: strokes } };\n};\n\n// packages/ag-charts-community/src/chart/series/polar/donutSeriesModule.ts\nvar DonutSeriesModule = {\n  type: \"series\",\n  optionsKey: \"series[]\",\n  packageType: \"community\",\n  chartTypes: [\"polar\"],\n  identifier: \"donut\",\n  moduleFactory: (ctx) => new DonutSeries(ctx),\n  tooltipDefaults: { range: \"exact\" },\n  themeTemplate: donutTheme,\n  paletteFactory: piePaletteFactory\n};\n\n// packages/ag-charts-community/src/chart/series/polar/pieSeriesProperties.ts\nvar PieTitle = class extends Caption {\n  constructor() {\n    super(...arguments);\n    this.showInLegend = false;\n  }\n};\n__decorateClass([\n  Validate(BOOLEAN)\n], PieTitle.prototype, \"showInLegend\", 2);\nvar PieSeriesCalloutLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.offset = 3;\n    this.minAngle = 0;\n    this.minSpacing = 4;\n    this.maxCollisionOffset = 50;\n    this.avoidCollisions = true;\n  }\n};\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PieSeriesCalloutLabel.prototype, \"offset\", 2);\n__decorateClass([\n  Validate(DEGREE)\n], PieSeriesCalloutLabel.prototype, \"minAngle\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PieSeriesCalloutLabel.prototype, \"minSpacing\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PieSeriesCalloutLabel.prototype, \"maxCollisionOffset\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], PieSeriesCalloutLabel.prototype, \"avoidCollisions\", 2);\nvar PieSeriesSectorLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.positionOffset = 0;\n    this.positionRatio = 0.5;\n  }\n};\n__decorateClass([\n  Validate(NUMBER)\n], PieSeriesSectorLabel.prototype, \"positionOffset\", 2);\n__decorateClass([\n  Validate(RATIO)\n], PieSeriesSectorLabel.prototype, \"positionRatio\", 2);\nvar PieSeriesCalloutLine = class extends BaseProperties {\n  constructor() {\n    super(...arguments);\n    this.length = 10;\n    this.strokeWidth = 1;\n  }\n};\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY, { optional: true })\n], PieSeriesCalloutLine.prototype, \"colors\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PieSeriesCalloutLine.prototype, \"length\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PieSeriesCalloutLine.prototype, \"strokeWidth\", 2);\nvar PieSeriesProperties = class extends SeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.fills = Object.values(DEFAULT_FILLS);\n    this.strokes = Object.values(DEFAULT_STROKES);\n    this.fillOpacity = 1;\n    this.strokeOpacity = 1;\n    this.lineDash = [0];\n    this.lineDashOffset = 0;\n    this.cornerRadius = 0;\n    this.rotation = 0;\n    this.outerRadiusOffset = 0;\n    this.outerRadiusRatio = 1;\n    this.strokeWidth = 1;\n    this.sectorSpacing = 0;\n    this.title = new PieTitle();\n    this.shadow = new DropShadow();\n    this.calloutLabel = new PieSeriesCalloutLabel();\n    this.sectorLabel = new PieSeriesSectorLabel();\n    this.calloutLine = new PieSeriesCalloutLine();\n    this.tooltip = new SeriesTooltip();\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], PieSeriesProperties.prototype, \"angleKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"angleName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"angleFilterKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"radiusKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"radiusName\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], PieSeriesProperties.prototype, \"radiusMin\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER, { optional: true })\n], PieSeriesProperties.prototype, \"radiusMax\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"calloutLabelKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"calloutLabelName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"sectorLabelKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"sectorLabelName\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], PieSeriesProperties.prototype, \"legendItemKey\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY)\n], PieSeriesProperties.prototype, \"fills\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY)\n], PieSeriesProperties.prototype, \"strokes\", 2);\n__decorateClass([\n  Validate(RATIO)\n], PieSeriesProperties.prototype, \"fillOpacity\", 2);\n__decorateClass([\n  Validate(RATIO)\n], PieSeriesProperties.prototype, \"strokeOpacity\", 2);\n__decorateClass([\n  Validate(LINE_DASH)\n], PieSeriesProperties.prototype, \"lineDash\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PieSeriesProperties.prototype, \"lineDashOffset\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PieSeriesProperties.prototype, \"cornerRadius\", 2);\n__decorateClass([\n  Validate(FUNCTION, { optional: true })\n], PieSeriesProperties.prototype, \"itemStyler\", 2);\n__decorateClass([\n  Validate(DEGREE)\n], PieSeriesProperties.prototype, \"rotation\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], PieSeriesProperties.prototype, \"outerRadiusOffset\", 2);\n__decorateClass([\n  Validate(RATIO)\n], PieSeriesProperties.prototype, \"outerRadiusRatio\", 2);\n__decorateClass([\n  Validate(POSITIVE_NUMBER)\n], PieSeriesProperties.prototype, \"strokeWidth\", 2);\n__decorateClass([\n  Validate(NUMBER)\n], PieSeriesProperties.prototype, \"sectorSpacing\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], PieSeriesProperties.prototype, \"title\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], PieSeriesProperties.prototype, \"shadow\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], PieSeriesProperties.prototype, \"calloutLabel\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], PieSeriesProperties.prototype, \"sectorLabel\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], PieSeriesProperties.prototype, \"calloutLine\", 2);\n__decorateClass([\n  Validate(OBJECT)\n], PieSeriesProperties.prototype, \"tooltip\", 2);\n\n// packages/ag-charts-community/src/chart/series/polar/pieSeries.ts\nvar PieSeriesNodeEvent = class extends SeriesNodeEvent {\n  constructor(type, nativeEvent, datum, series) {\n    super(type, nativeEvent, datum, series);\n    this.angleKey = series.properties.angleKey;\n    this.radiusKey = series.properties.radiusKey;\n    this.calloutLabelKey = series.properties.calloutLabelKey;\n    this.sectorLabelKey = series.properties.sectorLabelKey;\n  }\n};\nvar PieSeries = class extends PolarSeries {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      pickModes: [1 /* NEAREST_NODE */, 0 /* EXACT_SHAPE_MATCH */],\n      useLabelLayer: true,\n      animationResetFns: { item: resetPieSelectionsFn, label: resetLabelFn }\n    });\n    this.properties = new PieSeriesProperties();\n    this.phantomNodeData = void 0;\n    this.previousRadiusScale = new LinearScale();\n    this.radiusScale = new LinearScale();\n    this.phantomGroup = this.contentGroup.appendChild(new Group());\n    this.phantomSelection = Selection.select(\n      this.phantomGroup,\n      () => this.nodeFactory(),\n      false\n    );\n    this.calloutLabelGroup = this.contentGroup.appendChild(new Group({ name: \"pieCalloutLabels\" }));\n    this.calloutLabelSelection = new Selection(\n      this.calloutLabelGroup,\n      Group\n    );\n    // The group node that contains the background graphics.\n    this.backgroundGroup = this.rootGroup.appendChild(\n      new TranslatableLayer({\n        name: `${this.id}-background`,\n        zIndex: 0 /* SERIES_BACKGROUND */\n      })\n    );\n    // AG-6193 If the sum of all datums is 0, then we'll draw 1 or 2 rings to represent the empty series.\n    this.zerosumRingsGroup = this.backgroundGroup.appendChild(new Group({ name: `${this.id}-zerosumRings` }));\n    this.zerosumOuterRing = this.zerosumRingsGroup.appendChild(new Circle());\n    // When a user toggles a series item (e.g. from the legend), its boolean state is recorded here.\n    this.seriesItemEnabled = [];\n    this.legendItemEnabled = [];\n    this.surroundingRadius = void 0;\n    this.NodeEvent = PieSeriesNodeEvent;\n    this.angleScale = new LinearScale();\n    this.angleScale.domain = [0, 1];\n    this.angleScale.range = [-Math.PI, Math.PI].map((angle2) => angle2 + Math.PI / 2);\n    this.phantomGroup.opacity = 0.2;\n    this.phantomGroup.zIndexSubOrder = [() => this._declarationOrder, 0];\n  }\n  get calloutNodeData() {\n    return this.phantomNodeData ?? this.nodeData;\n  }\n  addChartEventListeners() {\n    this.destroyFns.push(\n      this.ctx.chartEventManager?.addListener(\"legend-item-click\", (event) => this.onLegendItemClick(event))\n    );\n  }\n  get visible() {\n    return super.visible && (this.seriesItemEnabled.length === 0 || this.seriesItemEnabled.includes(true));\n  }\n  nodeFactory() {\n    const sector = new Sector();\n    sector.miterLimit = 1e9;\n    return sector;\n  }\n  getSeriesDomain(direction) {\n    if (direction === \"x\" /* X */) {\n      return this.angleScale.domain;\n    } else {\n      return this.radiusScale.domain;\n    }\n  }\n  async processData(dataController) {\n    if (this.data == null || !this.properties.isValid()) {\n      return;\n    }\n    let { data } = this;\n    const { visible, seriesItemEnabled } = this;\n    const { angleKey, angleFilterKey, radiusKey, calloutLabelKey, sectorLabelKey, legendItemKey } = this.properties;\n    const animationEnabled = !this.ctx.animationManager.isSkipped();\n    const extraKeyProps = [];\n    const extraProps = [];\n    if (legendItemKey) {\n      extraKeyProps.push(keyProperty(legendItemKey, \"band\", { id: `legendItemKey` }));\n    } else if (calloutLabelKey) {\n      extraKeyProps.push(keyProperty(calloutLabelKey, \"band\", { id: `calloutLabelKey` }));\n    } else if (sectorLabelKey) {\n      extraKeyProps.push(keyProperty(sectorLabelKey, \"band\", { id: `sectorLabelKey` }));\n    }\n    const radiusScaleType = this.radiusScale.type;\n    const angleScaleType = this.radiusScale.type;\n    if (radiusKey) {\n      extraProps.push(\n        rangedValueProperty(radiusKey, {\n          id: \"radiusValue\",\n          min: this.properties.radiusMin ?? 0,\n          max: this.properties.radiusMax\n        }),\n        valueProperty(radiusKey, radiusScaleType, { id: `radiusRaw` }),\n        // Raw value pass-through.\n        normalisePropertyTo(\"radiusValue\", [0, 1], 1, this.properties.radiusMin ?? 0, this.properties.radiusMax)\n      );\n    }\n    if (calloutLabelKey) {\n      extraProps.push(valueProperty(calloutLabelKey, \"band\", { id: `calloutLabelValue` }));\n    }\n    if (sectorLabelKey) {\n      extraProps.push(valueProperty(sectorLabelKey, \"band\", { id: `sectorLabelValue` }));\n    }\n    if (legendItemKey) {\n      extraProps.push(valueProperty(legendItemKey, \"band\", { id: `legendItemValue` }));\n    }\n    if (angleFilterKey) {\n      extraProps.push(\n        accumulativeValueProperty(angleFilterKey, angleScaleType, {\n          id: `angleFilterValue`,\n          onlyPositive: true\n        }),\n        valueProperty(angleFilterKey, angleScaleType, { id: `angleFilterRaw` }),\n        normalisePropertyTo(\"angleFilterValue\", [0, 1], 0, 0)\n      );\n    }\n    if (animationEnabled && this.processedData?.reduced?.animationValidation?.uniqueKeys && extraKeyProps.length > 0) {\n      extraProps.push(diff(this.processedData));\n    }\n    extraProps.push(animationValidation());\n    data = data.map((d, idx) => visible && seriesItemEnabled[idx] ? d : { ...d, [angleKey]: 0 });\n    await this.requestDataModel(dataController, data, {\n      props: [\n        ...extraKeyProps,\n        accumulativeValueProperty(angleKey, angleScaleType, { id: `angleValue`, onlyPositive: true }),\n        valueProperty(angleKey, angleScaleType, { id: `angleRaw` }),\n        // Raw value pass-through.\n        normalisePropertyTo(\"angleValue\", [0, 1], 0, 0),\n        ...extraProps\n      ]\n    });\n    for (const valueDef of this.processedData?.defs?.values ?? []) {\n      const { id, missing, property } = valueDef;\n      const missCount = getMissCount(this, missing);\n      if (id !== \"angleRaw\" && missCount > 0) {\n        Logger.warnOnce(\n          `no value was found for the key '${String(property)}' on ${missCount} data element${missCount > 1 ? \"s\" : \"\"}`\n        );\n      }\n    }\n    this.animationState.transition(\"updateData\");\n  }\n  async maybeRefreshNodeData() {\n    if (!this.nodeDataRefresh)\n      return;\n    const { nodeData = [], phantomNodeData } = await this.createNodeData() ?? {};\n    this.nodeData = nodeData;\n    this.phantomNodeData = phantomNodeData;\n    this.nodeDataRefresh = false;\n  }\n  getProcessedDataIndexes(dataModel) {\n    const angleIdx = dataModel.resolveProcessedDataIndexById(this, `angleValue`);\n    const angleRawIdx = dataModel.resolveProcessedDataIndexById(this, `angleRaw`);\n    const angleFilterIdx = this.properties.angleFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `angleFilterValue`) : void 0;\n    const angleFilterRawIdx = this.properties.angleFilterKey != null ? dataModel.resolveProcessedDataIndexById(this, `angleFilterRaw`) : void 0;\n    const radiusIdx = this.properties.radiusKey ? dataModel.resolveProcessedDataIndexById(this, `radiusValue`) : void 0;\n    const radiusRawIdx = this.properties.radiusKey ? dataModel.resolveProcessedDataIndexById(this, `radiusRaw`) : void 0;\n    const calloutLabelIdx = this.properties.calloutLabelKey ? dataModel.resolveProcessedDataIndexById(this, `calloutLabelValue`) : void 0;\n    const sectorLabelIdx = this.properties.sectorLabelKey ? dataModel.resolveProcessedDataIndexById(this, `sectorLabelValue`) : void 0;\n    const legendItemIdx = this.properties.legendItemKey ? dataModel.resolveProcessedDataIndexById(this, `legendItemValue`) : void 0;\n    return {\n      angleIdx,\n      angleRawIdx,\n      angleFilterIdx,\n      angleFilterRawIdx,\n      radiusIdx,\n      radiusRawIdx,\n      calloutLabelIdx,\n      sectorLabelIdx,\n      legendItemIdx\n    };\n  }\n  async createNodeData() {\n    const { id: seriesId, processedData, dataModel, angleScale } = this;\n    const { rotation } = this.properties;\n    if (!processedData || !dataModel || processedData.type !== \"ungrouped\")\n      return;\n    const {\n      angleIdx,\n      angleRawIdx,\n      angleFilterIdx,\n      angleFilterRawIdx,\n      radiusIdx,\n      radiusRawIdx,\n      calloutLabelIdx,\n      sectorLabelIdx,\n      legendItemIdx\n    } = this.getProcessedDataIndexes(dataModel);\n    const useFilterAngles = angleFilterRawIdx != null && processedData.data.some(({ values }) => {\n      return values[angleFilterRawIdx] > values[angleRawIdx];\n    });\n    let currentStart = 0;\n    let sum2 = 0;\n    const nodes = [];\n    const phantomNodes = angleFilterRawIdx != null ? [] : void 0;\n    processedData.data.forEach((group, index) => {\n      const { datum, values } = group;\n      const currentValue = useFilterAngles ? values[angleFilterIdx] : values[angleIdx];\n      const crossFilterScale = angleFilterRawIdx != null && !useFilterAngles ? Math.sqrt(values[angleFilterRawIdx] / values[angleRawIdx]) : 1;\n      const startAngle = angleScale.convert(currentStart) + toRadians(rotation);\n      currentStart = currentValue;\n      sum2 += currentValue;\n      const endAngle = angleScale.convert(currentStart) + toRadians(rotation);\n      const span = Math.abs(endAngle - startAngle);\n      const midAngle = startAngle + span / 2;\n      const angleValue = values[angleRawIdx];\n      const radiusRaw = radiusIdx != null ? values[radiusIdx] ?? 1 : 1;\n      const radius = radiusRaw * crossFilterScale;\n      const radiusValue = radiusRawIdx != null ? values[radiusRawIdx] : void 0;\n      const legendItemValue = legendItemIdx != null ? values[legendItemIdx] : void 0;\n      const nodeLabels = this.getLabels(\n        datum,\n        midAngle,\n        span,\n        true,\n        calloutLabelIdx != null ? values[calloutLabelIdx] : void 0,\n        sectorLabelIdx != null ? values[sectorLabelIdx] : void 0,\n        legendItemValue\n      );\n      const sectorFormat = this.getSectorFormat(datum, index, false);\n      const node = {\n        itemId: index,\n        series: this,\n        datum,\n        index,\n        angleValue,\n        midAngle,\n        midCos: Math.cos(midAngle),\n        midSin: Math.sin(midAngle),\n        startAngle,\n        endAngle,\n        radius,\n        innerRadius: Math.max(this.radiusScale.convert(0), 0),\n        outerRadius: Math.max(this.radiusScale.convert(radius), 0),\n        sectorFormat,\n        radiusValue,\n        legendItemValue,\n        enabled: this.seriesItemEnabled[index],\n        ...nodeLabels\n      };\n      nodes.push(node);\n      if (phantomNodes != null) {\n        phantomNodes.push({\n          ...node,\n          radius: 1,\n          innerRadius: Math.max(this.radiusScale.convert(0), 0),\n          outerRadius: Math.max(this.radiusScale.convert(1), 0)\n        });\n      }\n    });\n    this.zerosumOuterRing.visible = sum2 === 0;\n    return {\n      itemId: seriesId,\n      nodeData: nodes,\n      labelData: nodes,\n      phantomNodeData: phantomNodes\n    };\n  }\n  getLabels(datum, midAngle, span, skipDisabled, calloutLabelValue, sectorLabelValue, legendItemValue) {\n    const { calloutLabel, sectorLabel, legendItemKey } = this.properties;\n    const calloutLabelKey = !skipDisabled || calloutLabel.enabled ? this.properties.calloutLabelKey : void 0;\n    const sectorLabelKey = !skipDisabled || sectorLabel.enabled ? this.properties.sectorLabelKey : void 0;\n    if (!calloutLabelKey && !sectorLabelKey && !legendItemKey) {\n      return {};\n    }\n    const labelFormatterParams = {\n      datum,\n      angleKey: this.properties.angleKey,\n      angleName: this.properties.angleName,\n      radiusKey: this.properties.radiusKey,\n      radiusName: this.properties.radiusName,\n      calloutLabelKey: this.properties.calloutLabelKey,\n      calloutLabelName: this.properties.calloutLabelName,\n      sectorLabelKey: this.properties.sectorLabelKey,\n      sectorLabelName: this.properties.sectorLabelName,\n      legendItemKey: this.properties.legendItemKey\n    };\n    const result = {};\n    if (calloutLabelKey && span > toRadians(calloutLabel.minAngle)) {\n      result.calloutLabel = {\n        ...this.getTextAlignment(midAngle),\n        text: this.getLabelText(calloutLabel, {\n          ...labelFormatterParams,\n          value: calloutLabelValue\n        }),\n        hidden: false,\n        collisionTextAlign: void 0,\n        collisionOffsetY: 0,\n        box: void 0\n      };\n    }\n    if (sectorLabelKey) {\n      result.sectorLabel = {\n        text: this.getLabelText(sectorLabel, {\n          ...labelFormatterParams,\n          value: sectorLabelValue\n        })\n      };\n    }\n    if (legendItemKey != null && legendItemValue != null) {\n      result.legendItem = { key: legendItemKey, text: legendItemValue };\n    }\n    return result;\n  }\n  getTextAlignment(midAngle) {\n    const quadrantTextOpts = [\n      { textAlign: \"center\", textBaseline: \"bottom\" },\n      { textAlign: \"left\", textBaseline: \"middle\" },\n      { textAlign: \"center\", textBaseline: \"hanging\" },\n      { textAlign: \"right\", textBaseline: \"middle\" }\n    ];\n    const midAngle180 = normalizeAngle180(midAngle);\n    const quadrantStart = -0.75 * Math.PI;\n    const quadrantOffset = midAngle180 - quadrantStart;\n    const quadrant = Math.floor(quadrantOffset / (Math.PI / 2));\n    const quadrantIndex = mod(quadrant, quadrantTextOpts.length);\n    return quadrantTextOpts[quadrantIndex];\n  }\n  getSectorFormat(datum, formatIndex, highlighted) {\n    const { callbackCache } = this.ctx;\n    const { angleKey, radiusKey, calloutLabelKey, sectorLabelKey, legendItemKey, fills, strokes, itemStyler } = this.properties;\n    const defaultStroke = strokes[formatIndex % strokes.length];\n    const { fill, fillOpacity, stroke, strokeWidth, strokeOpacity, lineDash, lineDashOffset, cornerRadius } = mergeDefaults(\n      highlighted && this.properties.highlightStyle.item,\n      {\n        fill: fills.length > 0 ? fills[formatIndex % fills.length] : void 0,\n        stroke: defaultStroke,\n        strokeWidth: this.getStrokeWidth(this.properties.strokeWidth),\n        strokeOpacity: this.getOpacity()\n      },\n      this.properties\n    );\n    let format;\n    if (itemStyler) {\n      format = callbackCache.call(itemStyler, {\n        datum,\n        angleKey,\n        radiusKey,\n        calloutLabelKey,\n        sectorLabelKey,\n        legendItemKey,\n        fill,\n        strokeOpacity,\n        stroke,\n        strokeWidth,\n        fillOpacity,\n        lineDash,\n        lineDashOffset,\n        cornerRadius,\n        highlighted,\n        seriesId: this.id\n      });\n    }\n    return {\n      fill: format?.fill ?? fill,\n      fillOpacity: format?.fillOpacity ?? fillOpacity,\n      stroke: format?.stroke ?? stroke,\n      strokeWidth: format?.strokeWidth ?? strokeWidth,\n      strokeOpacity: format?.strokeOpacity ?? strokeOpacity,\n      lineDash: format?.lineDash ?? lineDash,\n      lineDashOffset: format?.lineDashOffset ?? lineDashOffset,\n      cornerRadius: format?.cornerRadius ?? cornerRadius\n    };\n  }\n  getOuterRadius() {\n    return Math.max(this.radius * this.properties.outerRadiusRatio + this.properties.outerRadiusOffset, 0);\n  }\n  updateRadiusScale(resize) {\n    const newRange = [0, this.getOuterRadius()];\n    this.radiusScale.range = newRange;\n    if (resize) {\n      this.previousRadiusScale.range = newRange;\n    }\n    const setRadii = (d) => ({\n      ...d,\n      innerRadius: Math.max(this.radiusScale.convert(0), 0),\n      outerRadius: Math.max(this.radiusScale.convert(d.radius), 0)\n    });\n    this.nodeData = this.nodeData.map(setRadii);\n    this.phantomNodeData = this.phantomNodeData?.map(setRadii);\n  }\n  getTitleTranslationY() {\n    const outerRadius = Math.max(0, this.radiusScale.range[1]);\n    if (outerRadius === 0) {\n      return NaN;\n    }\n    const spacing = this.properties.title?.spacing ?? 0;\n    const titleOffset = 2 + spacing;\n    const dy = Math.max(0, -outerRadius);\n    return -outerRadius - titleOffset - dy;\n  }\n  async update({ seriesRect }) {\n    const { title } = this.properties;\n    const newNodeDataDependencies = {\n      seriesRectWidth: seriesRect?.width,\n      seriesRectHeight: seriesRect?.height\n    };\n    const resize = jsonDiff(this.nodeDataDependencies, newNodeDataDependencies) != null;\n    if (resize) {\n      this._nodeDataDependencies = newNodeDataDependencies;\n    }\n    await this.maybeRefreshNodeData();\n    this.updateTitleNodes();\n    this.updateRadiusScale(resize);\n    this.contentGroup.translationX = this.centerX;\n    this.contentGroup.translationY = this.centerY;\n    this.highlightGroup.translationX = this.centerX;\n    this.highlightGroup.translationY = this.centerY;\n    this.backgroundGroup.translationX = this.centerX;\n    this.backgroundGroup.translationY = this.centerY;\n    if (this.labelGroup) {\n      this.labelGroup.translationX = this.centerX;\n      this.labelGroup.translationY = this.centerY;\n    }\n    if (title) {\n      const dy = this.getTitleTranslationY();\n      title.node.y = isFinite(dy) ? dy : 0;\n      const titleBox = title.node.getBBox();\n      title.node.visible = title.enabled && isFinite(dy) && !this.bboxIntersectsSurroundingSeries(titleBox);\n    }\n    this.zerosumOuterRing.fillOpacity = 0;\n    this.zerosumOuterRing.stroke = this.properties.calloutLabel.color;\n    this.zerosumOuterRing.strokeWidth = 1;\n    this.zerosumOuterRing.strokeOpacity = 1;\n    this.updateNodeMidPoint();\n    await this.updateSelections();\n    await this.updateNodes(seriesRect);\n  }\n  updateTitleNodes() {\n    const { oldTitle } = this;\n    const { title } = this.properties;\n    if (oldTitle !== title) {\n      if (oldTitle) {\n        this.labelGroup?.removeChild(oldTitle.node);\n      }\n      if (title) {\n        title.node.textBaseline = \"bottom\";\n        this.labelGroup?.appendChild(title.node);\n      }\n      this.oldTitle = title;\n    }\n  }\n  updateNodeMidPoint() {\n    const setMidPoint = (d) => {\n      const radius = d.innerRadius + (d.outerRadius - d.innerRadius) / 2;\n      d.midPoint = {\n        x: d.midCos * Math.max(0, radius),\n        y: d.midSin * Math.max(0, radius)\n      };\n    };\n    this.nodeData.forEach(setMidPoint);\n    this.phantomNodeData?.forEach(setMidPoint);\n  }\n  async updateSelections() {\n    await this.updateGroupSelection();\n  }\n  async updateGroupSelection() {\n    const {\n      itemSelection,\n      highlightSelection,\n      phantomSelection,\n      highlightLabelSelection,\n      calloutLabelSelection,\n      labelSelection\n    } = this;\n    const highlightedNodeData = this.nodeData.map((datum) => ({\n      ...datum,\n      // Allow mutable sectorFormat, so formatted sector styles can be updated and varied\n      // between normal and highlighted cases.\n      sectorFormat: { ...datum.sectorFormat }\n    }));\n    const update = (selection, nodeData) => {\n      selection.update(nodeData, void 0, (datum) => this.getDatumId(datum));\n      if (this.ctx.animationManager.isSkipped()) {\n        selection.cleanup();\n      }\n    };\n    update(itemSelection, this.nodeData);\n    update(highlightSelection, highlightedNodeData);\n    update(phantomSelection, this.phantomNodeData ?? []);\n    calloutLabelSelection.update(this.calloutNodeData, (group) => {\n      const line = new Line();\n      line.tag = 0 /* Callout */;\n      line.pointerEvents = 1 /* None */;\n      group.appendChild(line);\n      const text = new Text();\n      text.tag = 1 /* Label */;\n      text.pointerEvents = 1 /* None */;\n      group.appendChild(text);\n    });\n    labelSelection.update(this.nodeData);\n    highlightLabelSelection.update(highlightedNodeData);\n  }\n  async updateNodes(seriesRect) {\n    const highlightedDatum = this.ctx.highlightManager.getActiveHighlight();\n    const isVisible = this.visible && this.seriesItemEnabled.includes(true);\n    this.rootGroup.visible = isVisible;\n    this.backgroundGroup.visible = isVisible;\n    this.contentGroup.visible = isVisible;\n    this.highlightGroup.visible = isVisible && highlightedDatum?.series === this;\n    this.highlightLabel.visible = isVisible && highlightedDatum?.series === this;\n    if (this.labelGroup) {\n      this.labelGroup.visible = isVisible;\n    }\n    this.contentGroup.opacity = this.getOpacity();\n    const animationDisabled = this.ctx.animationManager.isSkipped();\n    const updateSectorFn = (sector, datum, _index, isDatumHighlighted) => {\n      const format = this.getSectorFormat(datum.datum, datum.itemId, isDatumHighlighted);\n      datum.sectorFormat.fill = format.fill;\n      datum.sectorFormat.stroke = format.stroke;\n      if (animationDisabled) {\n        sector.startAngle = datum.startAngle;\n        sector.endAngle = datum.endAngle;\n        sector.innerRadius = datum.innerRadius;\n        sector.outerRadius = datum.outerRadius;\n      }\n      if (isDatumHighlighted || animationDisabled) {\n        sector.fill = format.fill;\n        sector.stroke = format.stroke;\n      }\n      sector.strokeWidth = format.strokeWidth;\n      sector.fillOpacity = format.fillOpacity;\n      sector.strokeOpacity = format.strokeOpacity;\n      sector.lineDash = format.lineDash;\n      sector.lineDashOffset = format.lineDashOffset;\n      sector.cornerRadius = format.cornerRadius;\n      sector.fillShadow = this.properties.shadow;\n      const inset = Math.max(\n        (this.properties.sectorSpacing + (format.stroke != null ? format.strokeWidth : 0)) / 2,\n        0\n      );\n      sector.inset = inset;\n      sector.lineJoin = this.properties.sectorSpacing >= 0 || inset > 0 ? \"miter\" : \"round\";\n    };\n    this.itemSelection.each((node, datum, index) => updateSectorFn(node, datum, index, false));\n    this.highlightSelection.each((node, datum, index) => {\n      updateSectorFn(node, datum, index, true);\n      node.visible = datum.itemId === highlightedDatum?.itemId;\n    });\n    this.phantomSelection.each((node, datum, index) => updateSectorFn(node, datum, index, false));\n    this.updateCalloutLineNodes();\n    this.updateCalloutLabelNodes(seriesRect);\n    this.updateSectorLabelNodes();\n    this.updateZerosumRings();\n    this.animationState.transition(\"update\");\n  }\n  updateCalloutLineNodes() {\n    const { calloutLine } = this.properties;\n    const calloutLength = calloutLine.length;\n    const calloutStrokeWidth = calloutLine.strokeWidth;\n    const calloutColors = calloutLine.colors ?? this.properties.strokes;\n    const { offset: offset4 } = this.properties.calloutLabel;\n    this.calloutLabelSelection.selectByTag(0 /* Callout */).forEach((line, index) => {\n      const datum = line.datum;\n      const { calloutLabel: label, outerRadius } = datum;\n      if (label?.text && !label.hidden && outerRadius !== 0) {\n        line.visible = true;\n        line.strokeWidth = calloutStrokeWidth;\n        line.stroke = calloutColors[index % calloutColors.length];\n        line.fill = void 0;\n        const x1 = datum.midCos * outerRadius;\n        const y1 = datum.midSin * outerRadius;\n        let x2 = datum.midCos * (outerRadius + calloutLength);\n        let y2 = datum.midSin * (outerRadius + calloutLength);\n        const isMoved = label.collisionTextAlign ?? label.collisionOffsetY !== 0;\n        if (isMoved && label.box != null) {\n          const box = label.box;\n          let cx = x2;\n          let cy = y2;\n          if (x2 < box.x) {\n            cx = box.x;\n          } else if (x2 > box.x + box.width) {\n            cx = box.x + box.width;\n          }\n          if (y2 < box.y) {\n            cy = box.y;\n          } else if (y2 > box.y + box.height) {\n            cy = box.y + box.height;\n          }\n          const dx = cx - x2;\n          const dy = cy - y2;\n          const length2 = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n          const paddedLength = length2 - offset4;\n          if (paddedLength > 0) {\n            x2 = x2 + dx * paddedLength / length2;\n            y2 = y2 + dy * paddedLength / length2;\n          }\n        }\n        line.x1 = x1;\n        line.y1 = y1;\n        line.x2 = x2;\n        line.y2 = y2;\n      } else {\n        line.visible = false;\n      }\n    });\n  }\n  getLabelOverflow(text, box, seriesRect) {\n    const seriesLeft = seriesRect.x - this.centerX;\n    const seriesRight = seriesRect.x + seriesRect.width - this.centerX;\n    const seriesTop = seriesRect.y - this.centerY;\n    const seriesBottom = seriesRect.y + seriesRect.height - this.centerY;\n    const errPx = 1;\n    let visibleTextPart = 1;\n    if (box.x + errPx < seriesLeft) {\n      visibleTextPart = (box.x + box.width - seriesLeft) / box.width;\n    } else if (box.x + box.width - errPx > seriesRight) {\n      visibleTextPart = (seriesRight - box.x) / box.width;\n    }\n    const hasVerticalOverflow = box.y + errPx < seriesTop || box.y + box.height - errPx > seriesBottom;\n    const textLength = visibleTextPart === 1 ? text.length : Math.floor(text.length * visibleTextPart) - 1;\n    const hasSurroundingSeriesOverflow = this.bboxIntersectsSurroundingSeries(box);\n    return { textLength, hasVerticalOverflow, hasSurroundingSeriesOverflow };\n  }\n  bboxIntersectsSurroundingSeries(box) {\n    const { surroundingRadius } = this;\n    if (surroundingRadius == null) {\n      return false;\n    }\n    const corners = [\n      { x: box.x, y: box.y },\n      { x: box.x + box.width, y: box.y },\n      { x: box.x + box.width, y: box.y + box.height },\n      { x: box.x, y: box.y + box.height }\n    ];\n    const sur2 = surroundingRadius ** 2;\n    return corners.some((corner) => corner.x ** 2 + corner.y ** 2 > sur2);\n  }\n  computeCalloutLabelCollisionOffsets() {\n    const { radiusScale } = this;\n    const { calloutLabel, calloutLine } = this.properties;\n    const { offset: offset4, minSpacing } = calloutLabel;\n    const innerRadius = radiusScale.convert(0);\n    const shouldSkip = (datum) => {\n      const label = datum.calloutLabel;\n      return !label || datum.outerRadius === 0;\n    };\n    const fullData = this.calloutNodeData;\n    const data = fullData.filter((t) => !shouldSkip(t));\n    data.forEach((datum) => {\n      const label = datum.calloutLabel;\n      if (label == null)\n        return;\n      label.hidden = false;\n      label.collisionTextAlign = void 0;\n      label.collisionOffsetY = 0;\n    });\n    if (data.length <= 1) {\n      return;\n    }\n    const leftLabels = data.filter((d) => d.midCos < 0).sort((a, b) => a.midSin - b.midSin);\n    const rightLabels = data.filter((d) => d.midCos >= 0).sort((a, b) => a.midSin - b.midSin);\n    const topLabels = data.filter((d) => d.midSin < 0 && d.calloutLabel?.textAlign === \"center\").sort((a, b) => a.midCos - b.midCos);\n    const bottomLabels = data.filter((d) => d.midSin >= 0 && d.calloutLabel?.textAlign === \"center\").sort((a, b) => a.midCos - b.midCos);\n    const getTextBBox = (datum) => {\n      const label = datum.calloutLabel;\n      if (label == null)\n        return BBox.zero.clone();\n      const labelRadius = datum.outerRadius + calloutLine.length + offset4;\n      const x = datum.midCos * labelRadius;\n      const y = datum.midSin * labelRadius + label.collisionOffsetY;\n      const textAlign = label.collisionTextAlign ?? label.textAlign;\n      const textBaseline = label.textBaseline;\n      return Text.computeBBox(label.text, x, y, {\n        font: this.properties.calloutLabel,\n        textAlign,\n        textBaseline\n      });\n    };\n    const avoidNeighbourYCollision = (label, next, direction) => {\n      const box = getTextBBox(label).grow(minSpacing / 2);\n      const other = getTextBBox(next).grow(minSpacing / 2);\n      const collidesOrBehind = box.x < other.x + other.width && box.x + box.width > other.x && (direction === \"to-top\" ? box.y < other.y + other.height : box.y + box.height > other.y);\n      if (collidesOrBehind) {\n        const dy = direction === \"to-top\" ? box.y - other.y - other.height : box.y + box.height - other.y;\n        next.calloutLabel.collisionOffsetY = dy;\n      }\n    };\n    const avoidYCollisions = (labels) => {\n      const midLabel = labels.slice().sort((a, b) => Math.abs(a.midSin) - Math.abs(b.midSin))[0];\n      const midIndex = labels.indexOf(midLabel);\n      for (let i = midIndex - 1; i >= 0; i--) {\n        const prev = labels[i + 1];\n        const next = labels[i];\n        avoidNeighbourYCollision(prev, next, \"to-top\");\n      }\n      for (let i = midIndex + 1; i < labels.length; i++) {\n        const prev = labels[i - 1];\n        const next = labels[i];\n        avoidNeighbourYCollision(prev, next, \"to-bottom\");\n      }\n    };\n    const avoidXCollisions = (labels) => {\n      const labelsCollideLabelsByY = data.some((datum) => datum.calloutLabel.collisionOffsetY !== 0);\n      const boxes = labels.map((label) => getTextBBox(label));\n      const paddedBoxes = boxes.map((box) => box.clone().grow(minSpacing / 2));\n      let labelsCollideLabelsByX = false;\n      for (let i = 0; i < paddedBoxes.length && !labelsCollideLabelsByX; i++) {\n        const box = paddedBoxes[i];\n        for (let j = i + 1; j < labels.length; j++) {\n          const other = paddedBoxes[j];\n          if (box.collidesBBox(other)) {\n            labelsCollideLabelsByX = true;\n            break;\n          }\n        }\n      }\n      const sectors = fullData.map((datum) => {\n        const { startAngle, endAngle, outerRadius } = datum;\n        return { startAngle, endAngle, innerRadius, outerRadius };\n      });\n      const labelsCollideSectors = boxes.some((box) => {\n        return sectors.some((sector) => boxCollidesSector(box, sector));\n      });\n      if (!labelsCollideLabelsByX && !labelsCollideLabelsByY && !labelsCollideSectors) {\n        return;\n      }\n      labels.filter((d) => d.calloutLabel.textAlign === \"center\").forEach((d) => {\n        const label = d.calloutLabel;\n        if (d.midCos < 0) {\n          label.collisionTextAlign = \"right\";\n        } else if (d.midCos > 0) {\n          label.collisionTextAlign = \"left\";\n        } else {\n          label.collisionTextAlign = \"center\";\n        }\n      });\n    };\n    avoidYCollisions(leftLabels);\n    avoidYCollisions(rightLabels);\n    avoidXCollisions(topLabels);\n    avoidXCollisions(bottomLabels);\n  }\n  updateCalloutLabelNodes(seriesRect) {\n    const { radiusScale } = this;\n    const { calloutLabel, calloutLine } = this.properties;\n    const calloutLength = calloutLine.length;\n    const { offset: offset4, color } = calloutLabel;\n    const tempTextNode = new Text();\n    this.calloutLabelSelection.selectByTag(1 /* Label */).forEach((text) => {\n      const { datum } = text;\n      const label = datum.calloutLabel;\n      const radius = radiusScale.convert(datum.radius);\n      const outerRadius = Math.max(0, radius);\n      if (!label?.text || outerRadius === 0 || label.hidden) {\n        text.visible = false;\n        return;\n      }\n      const labelRadius = outerRadius + calloutLength + offset4;\n      const x = datum.midCos * labelRadius;\n      const y = datum.midSin * labelRadius + label.collisionOffsetY;\n      const align = {\n        textAlign: label.collisionTextAlign ?? label.textAlign,\n        textBaseline: label.textBaseline\n      };\n      tempTextNode.text = label.text;\n      tempTextNode.x = x;\n      tempTextNode.y = y;\n      tempTextNode.setFont(this.properties.calloutLabel);\n      tempTextNode.setAlign(align);\n      const box = tempTextNode.getBBox();\n      let displayText = label.text;\n      let visible = true;\n      if (calloutLabel.avoidCollisions) {\n        const { textLength, hasVerticalOverflow } = this.getLabelOverflow(label.text, box, seriesRect);\n        displayText = label.text.length === textLength ? label.text : `${label.text.substring(0, textLength)}\\u2026`;\n        visible = !hasVerticalOverflow;\n      }\n      text.text = displayText;\n      text.x = x;\n      text.y = y;\n      text.setFont(this.properties.calloutLabel);\n      text.setAlign(align);\n      text.fill = color;\n      text.visible = visible;\n    });\n  }\n  async computeLabelsBBox(options, seriesRect) {\n    const { calloutLabel, calloutLine } = this.properties;\n    const calloutLength = calloutLine.length;\n    const { offset: offset4, maxCollisionOffset, minSpacing } = calloutLabel;\n    if (!calloutLabel.avoidCollisions) {\n      return null;\n    }\n    await this.maybeRefreshNodeData();\n    this.updateRadiusScale(false);\n    this.computeCalloutLabelCollisionOffsets();\n    const textBoxes = [];\n    const text = new Text();\n    let titleBox;\n    const { title } = this.properties;\n    if (title?.text && title.enabled) {\n      const dy = this.getTitleTranslationY();\n      if (isFinite(dy)) {\n        text.text = title.text;\n        text.x = 0;\n        text.y = dy;\n        text.setFont(title);\n        text.setAlign({\n          textBaseline: \"bottom\",\n          textAlign: \"center\"\n        });\n        titleBox = text.getBBox();\n        textBoxes.push(titleBox);\n      }\n    }\n    this.calloutNodeData.forEach((datum) => {\n      const label = datum.calloutLabel;\n      if (!label || datum.outerRadius === 0) {\n        return null;\n      }\n      const labelRadius = datum.outerRadius + calloutLength + offset4;\n      const x = datum.midCos * labelRadius;\n      const y = datum.midSin * labelRadius + label.collisionOffsetY;\n      text.text = label.text;\n      text.x = x;\n      text.y = y;\n      text.setFont(this.properties.calloutLabel);\n      text.setAlign({\n        textAlign: label.collisionTextAlign ?? label.textAlign,\n        textBaseline: label.textBaseline\n      });\n      const box = text.getBBox();\n      label.box = box;\n      if (Math.abs(label.collisionOffsetY) > maxCollisionOffset) {\n        label.hidden = true;\n        return;\n      }\n      if (titleBox) {\n        const seriesTop = seriesRect.y - this.centerY;\n        const titleCleanArea = new BBox(\n          titleBox.x - minSpacing,\n          seriesTop,\n          titleBox.width + 2 * minSpacing,\n          titleBox.y + titleBox.height + minSpacing - seriesTop\n        );\n        if (box.collidesBBox(titleCleanArea)) {\n          label.hidden = true;\n          return;\n        }\n      }\n      if (options.hideWhenNecessary) {\n        const { textLength, hasVerticalOverflow, hasSurroundingSeriesOverflow } = this.getLabelOverflow(\n          label.text,\n          box,\n          seriesRect\n        );\n        const isTooShort = label.text.length > 2 && textLength < 2;\n        if (hasVerticalOverflow || isTooShort || hasSurroundingSeriesOverflow) {\n          label.hidden = true;\n          return;\n        }\n      }\n      label.hidden = false;\n      textBoxes.push(box);\n    });\n    if (textBoxes.length === 0) {\n      return null;\n    }\n    return BBox.merge(textBoxes);\n  }\n  updateSectorLabelNodes() {\n    const { radiusScale } = this;\n    const innerRadius = radiusScale.convert(0);\n    const { fontSize, fontStyle, fontWeight, fontFamily, positionOffset, positionRatio, color } = this.properties.sectorLabel;\n    const isDonut = innerRadius > 0;\n    const singleVisibleSector = this.seriesItemEnabled.filter(Boolean).length === 1;\n    const updateSectorLabel = (text, datum) => {\n      const { sectorLabel, outerRadius, startAngle, endAngle } = datum;\n      let isTextVisible = false;\n      if (sectorLabel && outerRadius !== 0) {\n        const labelRadius = innerRadius * (1 - positionRatio) + outerRadius * positionRatio + positionOffset;\n        text.fill = color;\n        text.fontStyle = fontStyle;\n        text.fontWeight = fontWeight;\n        text.fontSize = fontSize;\n        text.fontFamily = fontFamily;\n        text.text = sectorLabel.text;\n        const shouldPutTextInCenter = !isDonut && singleVisibleSector;\n        if (shouldPutTextInCenter) {\n          text.x = 0;\n          text.y = 0;\n        } else {\n          text.x = datum.midCos * labelRadius;\n          text.y = datum.midSin * labelRadius;\n        }\n        text.textAlign = \"center\";\n        text.textBaseline = \"middle\";\n        const bbox = text.getBBox();\n        const corners = [\n          [bbox.x, bbox.y],\n          [bbox.x + bbox.width, bbox.y],\n          [bbox.x + bbox.width, bbox.y + bbox.height],\n          [bbox.x, bbox.y + bbox.height]\n        ];\n        const sectorBounds = { startAngle, endAngle, innerRadius, outerRadius };\n        if (corners.every(([x, y]) => isPointInSector(x, y, sectorBounds))) {\n          isTextVisible = true;\n        }\n      }\n      text.visible = isTextVisible;\n    };\n    this.labelSelection.each(updateSectorLabel);\n    this.highlightLabelSelection.each(updateSectorLabel);\n  }\n  updateZerosumRings() {\n    this.zerosumOuterRing.size = this.getOuterRadius() * 2;\n  }\n  getDatumLegendName(nodeDatum) {\n    const { angleKey, calloutLabelKey, sectorLabelKey, legendItemKey } = this.properties;\n    const { sectorLabel, calloutLabel, legendItem } = nodeDatum;\n    if (legendItemKey && legendItem !== void 0) {\n      return legendItem.text;\n    } else if (calloutLabelKey && calloutLabelKey !== angleKey && calloutLabel?.text !== void 0) {\n      return calloutLabel.text;\n    } else if (sectorLabelKey && sectorLabelKey !== angleKey && sectorLabel?.text !== void 0) {\n      return sectorLabel.text;\n    }\n  }\n  pickNodeClosestDatum(point) {\n    return pickByMatchingAngle(this, point);\n  }\n  getTooltipHtml(nodeDatum) {\n    if (!this.properties.isValid()) {\n      return EMPTY_TOOLTIP_CONTENT;\n    }\n    const {\n      datum,\n      angleValue,\n      sectorFormat: { fill: color },\n      itemId\n    } = nodeDatum;\n    const title = sanitizeHtml(this.properties.title?.text);\n    const content = isFiniteNumber(angleValue) ? toFixed(angleValue) : String(angleValue);\n    const labelText = this.getDatumLegendName(nodeDatum);\n    return this.properties.tooltip.toTooltipHtml(\n      {\n        title: title ?? labelText,\n        content: title && labelText ? `${labelText}: ${content}` : content,\n        backgroundColor: color\n      },\n      {\n        datum,\n        itemId,\n        title,\n        color,\n        seriesId: this.id,\n        angleKey: this.properties.angleKey,\n        angleName: this.properties.angleName,\n        radiusKey: this.properties.radiusKey,\n        radiusName: this.properties.radiusName,\n        calloutLabelKey: this.properties.calloutLabelKey,\n        calloutLabelName: this.properties.calloutLabelName,\n        sectorLabelKey: this.properties.sectorLabelKey,\n        sectorLabelName: this.properties.sectorLabelName,\n        legendItemKey: this.properties.legendItemKey\n      }\n    );\n  }\n  getLegendData(legendType) {\n    const { visible, processedData, dataModel } = this;\n    if (!dataModel || !processedData?.data.length || legendType !== \"category\") {\n      return [];\n    }\n    const { angleKey, calloutLabelKey, sectorLabelKey, legendItemKey } = this.properties;\n    if (!legendItemKey && (!calloutLabelKey || calloutLabelKey === angleKey) && (!sectorLabelKey || sectorLabelKey === angleKey)) {\n      return [];\n    }\n    const { calloutLabelIdx, sectorLabelIdx, legendItemIdx } = this.getProcessedDataIndexes(dataModel);\n    const titleText = this.properties.title?.showInLegend && this.properties.title.text;\n    const legendData = [];\n    for (let index = 0; index < processedData.data.length; index++) {\n      const { datum, values } = processedData.data[index];\n      const labelParts = [];\n      if (titleText) {\n        labelParts.push(titleText);\n      }\n      const labels = this.getLabels(\n        datum,\n        2 * Math.PI,\n        2 * Math.PI,\n        false,\n        calloutLabelIdx != null ? values[calloutLabelIdx] : void 0,\n        sectorLabelIdx != null ? values[sectorLabelIdx] : void 0,\n        legendItemIdx != null ? values[legendItemIdx] : void 0\n      );\n      if (legendItemKey && labels.legendItem !== void 0) {\n        labelParts.push(labels.legendItem.text);\n      } else if (calloutLabelKey && calloutLabelKey !== angleKey && labels.calloutLabel?.text !== void 0) {\n        labelParts.push(labels.calloutLabel?.text);\n      } else if (sectorLabelKey && sectorLabelKey !== angleKey && labels.sectorLabel?.text !== void 0) {\n        labelParts.push(labels.sectorLabel?.text);\n      }\n      if (labelParts.length === 0)\n        continue;\n      const sectorFormat = this.getSectorFormat(datum, index, false);\n      legendData.push({\n        legendType: \"category\",\n        id: this.id,\n        itemId: index,\n        seriesId: this.id,\n        enabled: visible && this.legendItemEnabled[index],\n        label: {\n          text: labelParts.join(\" - \")\n        },\n        symbols: [\n          {\n            marker: {\n              fill: sectorFormat.fill,\n              stroke: sectorFormat.stroke,\n              fillOpacity: this.properties.fillOpacity,\n              strokeOpacity: this.properties.strokeOpacity,\n              strokeWidth: this.properties.strokeWidth\n            }\n          }\n        ],\n        legendItemName: legendItemKey != null ? datum[legendItemKey] : void 0\n      });\n    }\n    return legendData;\n  }\n  onLegendItemClick(event) {\n    const { enabled, itemId, series, legendItemName } = event;\n    if (series.id === this.id) {\n      this.toggleSeriesItem(itemId, enabled);\n    } else if (legendItemName != null) {\n      this.toggleOtherSeriesItems(legendItemName, enabled);\n    }\n  }\n  toggleSeriesItem(itemId, enabled) {\n    this.seriesItemEnabled[itemId] = enabled;\n    this.legendItemEnabled[itemId] = enabled;\n    if (this.nodeData[itemId]) {\n      this.nodeData[itemId].enabled = enabled;\n    }\n    this.nodeDataRefresh = true;\n  }\n  // Used for grid\n  setLegendState(enabledItems) {\n    this.legendItemEnabled = enabledItems;\n    this.ctx.updateService.update(4 /* SERIES_UPDATE */);\n  }\n  toggleOtherSeriesItems(legendItemName, enabled) {\n    if (!this.properties.legendItemKey || !this.dataModel) {\n      return;\n    }\n    const legendItemIdx = this.dataModel.resolveProcessedDataIndexById(this, `legendItemValue`);\n    this.processedData?.data.forEach(({ values }, datumItemId) => {\n      if (values[legendItemIdx] === legendItemName) {\n        this.toggleSeriesItem(datumItemId, enabled);\n      }\n    });\n  }\n  animateEmptyUpdateReady(_data) {\n    const { animationManager } = this.ctx;\n    const fns = preparePieSeriesAnimationFunctions(\n      true,\n      this.properties.rotation,\n      this.radiusScale,\n      this.previousRadiusScale\n    );\n    fromToMotion(\n      this.id,\n      \"nodes\",\n      animationManager,\n      [this.itemSelection, this.highlightSelection, this.phantomSelection],\n      fns.nodes,\n      (_, datum) => this.getDatumId(datum)\n    );\n    seriesLabelFadeInAnimation(this, \"callout\", animationManager, this.calloutLabelSelection);\n    seriesLabelFadeInAnimation(this, \"sector\", animationManager, this.labelSelection);\n    seriesLabelFadeInAnimation(this, \"highlight\", animationManager, this.highlightLabelSelection);\n    this.previousRadiusScale.range = this.radiusScale.range;\n  }\n  animateWaitingUpdateReady() {\n    const { itemSelection, highlightSelection, phantomSelection, processedData, radiusScale, previousRadiusScale } = this;\n    const { animationManager } = this.ctx;\n    const dataDiff = processedData?.reduced?.diff;\n    this.ctx.animationManager.stopByAnimationGroupId(this.id);\n    const supportedDiff = (dataDiff?.moved.size ?? 0) === 0;\n    const hasKeys = (processedData?.defs.keys.length ?? 0) > 0;\n    const hasUniqueKeys = processedData?.reduced?.animationValidation?.uniqueKeys ?? true;\n    if (!supportedDiff || !hasKeys || !hasUniqueKeys) {\n      this.ctx.animationManager.skipCurrentBatch();\n    }\n    const fns = preparePieSeriesAnimationFunctions(\n      false,\n      this.properties.rotation,\n      radiusScale,\n      previousRadiusScale\n    );\n    fromToMotion(\n      this.id,\n      \"nodes\",\n      animationManager,\n      [itemSelection, highlightSelection, phantomSelection],\n      fns.nodes,\n      (_, datum) => this.getDatumId(datum),\n      dataDiff\n    );\n    seriesLabelFadeInAnimation(this, \"callout\", this.ctx.animationManager, this.calloutLabelSelection);\n    seriesLabelFadeInAnimation(this, \"sector\", this.ctx.animationManager, this.labelSelection);\n    seriesLabelFadeInAnimation(this, \"highlight\", this.ctx.animationManager, this.highlightLabelSelection);\n    this.previousRadiusScale.range = this.radiusScale.range;\n  }\n  animateClearingUpdateEmpty() {\n    const { itemSelection, highlightSelection, phantomSelection, radiusScale, previousRadiusScale } = this;\n    const { animationManager } = this.ctx;\n    const fns = preparePieSeriesAnimationFunctions(\n      false,\n      this.properties.rotation,\n      radiusScale,\n      previousRadiusScale\n    );\n    fromToMotion(\n      this.id,\n      \"nodes\",\n      animationManager,\n      [itemSelection, highlightSelection, phantomSelection],\n      fns.nodes,\n      (_, datum) => this.getDatumId(datum)\n    );\n    seriesLabelFadeOutAnimation(this, \"callout\", this.ctx.animationManager, this.calloutLabelSelection);\n    seriesLabelFadeOutAnimation(this, \"sector\", this.ctx.animationManager, this.labelSelection);\n    seriesLabelFadeOutAnimation(this, \"highlight\", this.ctx.animationManager, this.highlightLabelSelection);\n    this.previousRadiusScale.range = this.radiusScale.range;\n  }\n  getDatumIdFromData(datum) {\n    const { calloutLabelKey, sectorLabelKey, legendItemKey } = this.properties;\n    if (!this.processedData?.reduced?.animationValidation?.uniqueKeys) {\n      return;\n    }\n    if (legendItemKey) {\n      return datum[legendItemKey];\n    } else if (calloutLabelKey) {\n      return datum[calloutLabelKey];\n    } else if (sectorLabelKey) {\n      return datum[sectorLabelKey];\n    }\n  }\n  getDatumId(datum) {\n    const { index } = datum;\n    const datumId = this.getDatumIdFromData(datum.datum);\n    return datumId != null ? String(datumId) : `${index}`;\n  }\n  onDataChange() {\n    const { data, seriesItemEnabled, legendItemEnabled } = this;\n    this.seriesItemEnabled = data?.map((_, index) => seriesItemEnabled[index] ?? true) ?? [];\n    this.legendItemEnabled = data?.map((_, index) => legendItemEnabled[index] ?? true) ?? [];\n  }\n};\nPieSeries.className = \"PieSeries\";\nPieSeries.type = \"pie\";\n\n// packages/ag-charts-community/src/chart/series/polar/pieSeriesModule.ts\nvar PieSeriesModule = {\n  type: \"series\",\n  optionsKey: \"series[]\",\n  packageType: \"community\",\n  chartTypes: [\"polar\"],\n  identifier: \"pie\",\n  moduleFactory: (ctx) => new PieSeries(ctx),\n  tooltipDefaults: { range: \"exact\" },\n  themeTemplate: pieTheme,\n  paletteFactory: piePaletteFactory\n};\n\n// packages/ag-charts-community/src/util/vector.ts\nvar Vec2 = {\n  add,\n  angle,\n  apply,\n  equal,\n  distance: distance2,\n  distanceSquared: distanceSquared2,\n  from,\n  gradient,\n  intercept,\n  intersectAtX,\n  intersectAtY,\n  length,\n  lengthSquared,\n  multiply,\n  normalized,\n  origin,\n  required,\n  rotate,\n  round: round3,\n  sub\n};\nfunction add(a, b) {\n  if (typeof b === \"number\") {\n    return { x: a.x + b, y: a.y + b };\n  }\n  return { x: a.x + b.x, y: a.y + b.y };\n}\nfunction sub(a, b) {\n  if (typeof b === \"number\") {\n    return { x: a.x - b, y: a.y - b };\n  }\n  return { x: a.x - b.x, y: a.y - b.y };\n}\nfunction multiply(a, b) {\n  if (typeof b === \"number\") {\n    return { x: a.x * b, y: a.y * b };\n  }\n  return { x: a.x * b.x, y: a.y * b.y };\n}\nfunction length(a) {\n  return Math.sqrt(a.x * a.x + a.y * a.y);\n}\nfunction lengthSquared(a) {\n  return a.x * a.x + a.y * a.y;\n}\nfunction distance2(a, b) {\n  const d = sub(a, b);\n  return Math.sqrt(d.x * d.x + d.y * d.y);\n}\nfunction distanceSquared2(a, b) {\n  const d = sub(a, b);\n  return d.x * d.x + d.y * d.y;\n}\nfunction normalized(a) {\n  const l = length(a);\n  return { x: a.x / l, y: a.y / l };\n}\nfunction angle(a, b = origin()) {\n  return Math.atan2(a.y, a.x) - Math.atan2(b.y, b.x);\n}\nfunction rotate(a, theta, b = origin()) {\n  const l = length(a);\n  return { x: b.x + l * Math.cos(theta), y: b.y + l * Math.sin(theta) };\n}\nfunction gradient(a, b, reflection) {\n  const dx = b.x - a.x;\n  const dy = reflection == null ? b.y - a.y : reflection - b.y - (reflection - a.y);\n  return dy / dx;\n}\nfunction intercept(a, gradient2, reflection) {\n  const y = reflection == null ? a.y : reflection - a.y;\n  return y - gradient2 * a.x;\n}\nfunction intersectAtY(gradient2, coefficient, y = 0, reflection) {\n  return {\n    x: gradient2 === Infinity ? Infinity : (y - coefficient) / gradient2,\n    y: reflection == null ? y : reflection - y\n  };\n}\nfunction intersectAtX(gradient2, coefficient, x = 0, reflection) {\n  const y = gradient2 === Infinity ? Infinity : gradient2 * x + coefficient;\n  return { x, y: reflection == null ? y : reflection - y };\n}\nfunction round3(a) {\n  return { x: Math.round(a.x), y: Math.round(a.y) };\n}\nfunction equal(a, b) {\n  return a.x === b.x && a.y === b.y;\n}\nfunction from(a, b) {\n  if (typeof a === \"number\") {\n    return { x: a, y: b };\n  }\n  if (\"regionOffsetX\" in a) {\n    return { x: a.regionOffsetX, y: a.regionOffsetY };\n  }\n  if (\"offsetWidth\" in a) {\n    return { x: a.offsetWidth, y: a.offsetHeight };\n  }\n  if (\"width\" in a) {\n    return [\n      { x: a.x, y: a.y },\n      { x: a.x + a.width, y: a.y + a.height }\n    ];\n  }\n  if (\"x1\" in a) {\n    return [\n      { x: a.x1, y: a.y1 },\n      { x: a.x2, y: a.y2 }\n    ];\n  }\n  throw new Error(`Values can not be converted into a vector: [${a}] [${b}]`);\n}\nfunction apply(a, b) {\n  a.x = b.x;\n  a.y = b.y;\n  return a;\n}\nfunction required(a) {\n  return { x: a?.x ?? 0, y: a?.y ?? 0 };\n}\nfunction origin() {\n  return { x: 0, y: 0 };\n}\n\n// packages/ag-charts-community/src/chart/toolbar/toolbarProperties.ts\nvar ToolbarGroupProperties = class extends BaseProperties {\n  constructor(onChange, onButtonsChange) {\n    super();\n    this.onChange = onChange;\n    this.onButtonsChange = onButtonsChange;\n    this.align = \"start\";\n    this.position = \"top\" /* Top */;\n    this.size = \"normal\";\n    this.buttonOverrides = /* @__PURE__ */ new Map();\n  }\n  buttonConfigurations() {\n    const buttons = [...this.buttons ?? []];\n    if (this.draggable) {\n      buttons.unshift({\n        icon: \"drag-handle\",\n        tooltip: \"toolbarAnnotationsDragHandle\",\n        value: \"drag\",\n        id: \"drag\"\n      });\n    }\n    return buttons?.map((button) => {\n      const id = button.id ?? button.value;\n      const overrides = this.buttonOverrides.get(id);\n      return overrides != null ? { ...button, ...overrides } : button;\n    }) ?? [];\n  }\n  buttonsChanged(configurationOnly) {\n    this.onButtonsChange(this.buttonConfigurations(), configurationOnly);\n  }\n  overrideButtonConfiguration(id, options) {\n    let overrides = this.buttonOverrides.get(id);\n    if (overrides == null) {\n      overrides = /* @__PURE__ */ Object.create(null);\n      this.buttonOverrides.set(id, overrides);\n    }\n    for (const key in options) {\n      const value = options[key];\n      if (value == null) {\n        delete overrides[key];\n      } else {\n        overrides[key] = value;\n      }\n    }\n    this.buttonsChanged(true);\n  }\n};\n__decorateClass([\n  ObserveChanges((target) => {\n    target.onChange(target.enabled);\n  }),\n  Validate(BOOLEAN)\n], ToolbarGroupProperties.prototype, \"enabled\", 2);\n__decorateClass([\n  ObserveChanges((target) => {\n    target.onChange(target.enabled);\n  }),\n  Validate(UNION([...TOOLBAR_ALIGNMENTS]), { optional: true })\n], ToolbarGroupProperties.prototype, \"align\", 2);\n__decorateClass([\n  ObserveChanges((target) => {\n    target.onChange(target.enabled);\n  }),\n  Validate(UNION(TOOLBAR_POSITIONS), { optional: true })\n], ToolbarGroupProperties.prototype, \"position\", 2);\n__decorateClass([\n  Validate(BOOLEAN)\n], ToolbarGroupProperties.prototype, \"draggable\", 2);\n__decorateClass([\n  ObserveChanges((target) => {\n    target.onChange(target.enabled);\n  }),\n  Validate(UNION([\"small\", \"normal\"]), { optional: true })\n], ToolbarGroupProperties.prototype, \"size\", 2);\n__decorateClass([\n  ObserveChanges((target) => {\n    for (const button of target.buttons ?? []) {\n      if (button.icon != null && ICONS_LEGACY.includes(button.icon)) {\n        Logger.warnOnce(`Icon '${button.icon}' is deprecated, use another icon instead.`);\n      }\n      if (button.ariaLabel === \"toolbarAnnotationsColor\") {\n        Logger.warnOnce(\n          `Aria label '${button.ariaLabel}' is deprecated, use 'toolbarAnnotationsLineColor' instead.`\n        );\n      }\n    }\n    target.buttonsChanged(false);\n  }),\n  Validate(ARRAY, { optional: true })\n], ToolbarGroupProperties.prototype, \"buttons\", 2);\n\n// packages/ag-charts-community/src/chart/toolbar/toolbarStyles.ts\nvar block = \"ag-charts-toolbar\";\nvar elements = {\n  align: \"ag-charts-toolbar__align\",\n  section: \"ag-charts-toolbar__section\",\n  button: \"ag-charts-toolbar__button\",\n  icon: \"ag-charts-toolbar__icon\",\n  label: \"ag-charts-toolbar__label\"\n};\nvar modifiers = {\n  [\"top\" /* Top */]: \"ag-charts-toolbar--top\",\n  [\"right\" /* Right */]: \"ag-charts-toolbar--right\",\n  [\"bottom\" /* Bottom */]: \"ag-charts-toolbar--bottom\",\n  [\"left\" /* Left */]: \"ag-charts-toolbar--left\",\n  [\"floating\" /* Floating */]: \"ag-charts-toolbar--floating\",\n  [\"floating-top\" /* FloatingTop */]: \"ag-charts-toolbar--floating-top\",\n  [\"floating-bottom\" /* FloatingBottom */]: \"ag-charts-toolbar--floating-bottom\",\n  small: \"ag-charts-toolbar--small\",\n  normal: \"ag-charts-toolbar--normal\",\n  hidden: \"ag-charts-toolbar--hidden\",\n  preventFlash: \"ag-charts-toolbar--prevent-flash\",\n  floatingHidden: \"ag-charts-toolbar--floating-hidden\",\n  align: {\n    start: \"ag-charts-toolbar__align--start\",\n    center: \"ag-charts-toolbar__align--center\",\n    end: \"ag-charts-toolbar__align--end\"\n  },\n  button: {\n    first: \"ag-charts-toolbar__button--first\",\n    last: \"ag-charts-toolbar__button--last\",\n    active: \"ag-charts-toolbar__button--active\",\n    hiddenValue: \"ag-charts-toolbar__button--hidden-value\",\n    hiddenToggled: \"ag-charts-toolbar__button--hidden-toggled\",\n    fillVisible: \"ag-charts-toolbar__button--fill-visible\",\n    strokeWidthVisible: \"ag-charts-toolbar__button--stroke-width-visible\",\n    withTransition: \"ag-charts-toolbar__button--with-transition\",\n    dragHandle: \"ag-charts-toolbar__button--drag-handle\",\n    dragging: \"ag-charts-toolbar__button--dragging\"\n  }\n};\n\n// packages/ag-charts-community/src/chart/toolbar/toolbar.ts\nvar Toolbar = class extends BaseModuleInstance {\n  constructor(ctx) {\n    super();\n    this.ctx = ctx;\n    this.enabled = true;\n    this.seriesType = new ToolbarGroupProperties(\n      this.onGroupChanged.bind(this, \"seriesType\"),\n      this.onGroupButtonsChanged.bind(this, \"seriesType\")\n    );\n    this.annotations = new ToolbarGroupProperties(\n      this.onGroupChanged.bind(this, \"annotations\"),\n      this.onGroupButtonsChanged.bind(this, \"annotations\")\n    );\n    this.annotationOptions = new ToolbarGroupProperties(\n      this.onGroupChanged.bind(this, \"annotationOptions\"),\n      this.onGroupButtonsChanged.bind(this, \"annotationOptions\")\n    );\n    this.ranges = new ToolbarGroupProperties(\n      this.onGroupChanged.bind(this, \"ranges\"),\n      this.onGroupButtonsChanged.bind(this, \"ranges\")\n    );\n    this.zoom = new ToolbarGroupProperties(\n      this.onGroupChanged.bind(this, \"zoom\"),\n      this.onGroupButtonsChanged.bind(this, \"zoom\")\n    );\n    this.dragState = {\n      client: { x: 0, y: 0 },\n      position: {\n        x: 0,\n        y: 0\n      },\n      detached: false\n    };\n    this.horizontalSpacing = 10;\n    this.verticalSpacing = 10;\n    this.floatingDetectionRange = 38;\n    this.positions = {\n      [\"top\" /* Top */]: /* @__PURE__ */ new Set(),\n      [\"left\" /* Left */]: /* @__PURE__ */ new Set(),\n      [\"right\" /* Right */]: /* @__PURE__ */ new Set(),\n      [\"bottom\" /* Bottom */]: /* @__PURE__ */ new Set(),\n      [\"floating\" /* Floating */]: /* @__PURE__ */ new Set(),\n      [\"floating-top\" /* FloatingTop */]: /* @__PURE__ */ new Set(),\n      [\"floating-bottom\" /* FloatingBottom */]: /* @__PURE__ */ new Set()\n    };\n    this.positionAlignments = {\n      [\"top\" /* Top */]: {},\n      [\"left\" /* Left */]: {},\n      [\"right\" /* Right */]: {},\n      [\"bottom\" /* Bottom */]: {},\n      [\"floating\" /* Floating */]: {},\n      [\"floating-top\" /* FloatingTop */]: {},\n      [\"floating-bottom\" /* FloatingBottom */]: {}\n    };\n    this.groupCallers = {\n      seriesType: /* @__PURE__ */ new Set(),\n      annotations: /* @__PURE__ */ new Set(),\n      annotationOptions: /* @__PURE__ */ new Set(),\n      ranges: /* @__PURE__ */ new Set(),\n      zoom: /* @__PURE__ */ new Set()\n    };\n    this.groupButtons = {\n      seriesType: [],\n      annotations: [],\n      annotationOptions: [],\n      ranges: [],\n      zoom: []\n    };\n    this.ariaToolbars = [\n      { groups: [\"seriesType\", \"annotations\"], destroyFns: [], resetListeners: () => {\n      } },\n      { groups: [\"annotationOptions\"], destroyFns: [], resetListeners: () => {\n      } },\n      { groups: [\"ranges\"], destroyFns: [], resetListeners: () => {\n      } },\n      { groups: [\"zoom\"], destroyFns: [], resetListeners: () => {\n      } }\n    ];\n    this.pendingButtonToggledEvents = [];\n    this.groupProxied = /* @__PURE__ */ new Map();\n    this.hasNewLocale = true;\n    this.elements = {};\n    for (const position of TOOLBAR_POSITIONS) {\n      this.elements[position] = ctx.domManager.addChild(\"canvas-overlay\", `toolbar-${position}`);\n      this.elements[position].role = \"presentation\";\n      this.renderToolbar(position);\n    }\n    this.toggleVisibilities();\n    const dragStates = 32 /* Default */ | 8 /* Annotations */;\n    const seriesRegion = ctx.regionManager.getRegion(\"series\");\n    this.destroyFns.push(\n      ctx.interactionManager.addListener(\"hover\", this.onHover.bind(this), 63 /* All */),\n      ctx.interactionManager.addListener(\"leave\", this.onLeave.bind(this), 63 /* All */),\n      seriesRegion.addListener(\"drag-start\", this.toggleNoPointerEvents.bind(this, true), dragStates),\n      seriesRegion.addListener(\"drag-end\", this.toggleNoPointerEvents.bind(this, false), 63 /* All */),\n      ctx.toolbarManager.addListener(\"button-toggled\", this.onButtonToggled.bind(this)),\n      ctx.toolbarManager.addListener(\"button-updated\", this.onButtonUpdated.bind(this)),\n      ctx.toolbarManager.addListener(\"group-toggled\", this.onGroupToggled.bind(this)),\n      ctx.toolbarManager.addListener(\"group-updated\", this.onGroupUpdated.bind(this)),\n      ctx.toolbarManager.addListener(\"floating-anchor-changed\", this.onFloatingAnchorChanged.bind(this)),\n      ctx.toolbarManager.addListener(\"proxy-group-options\", this.onProxyGroupOptions.bind(this)),\n      ctx.layoutManager.registerElement(2 /* Toolbar */, this.onLayoutStart.bind(this)),\n      ctx.layoutManager.addListener(\"layout:complete\", this.onLayoutComplete.bind(this)),\n      ctx.updateService.addListener(\"pre-dom-update\", this.onPreDomUpdate.bind(this)),\n      ctx.updateService.addListener(\"update-complete\", this.onUpdateComplete.bind(this)),\n      ctx.localeManager.addListener(\"locale-changed\", () => {\n        this.hasNewLocale = true;\n      }),\n      () => this.destroyElements()\n    );\n  }\n  destroyElements() {\n    this.ctx.domManager.removeStyles(block);\n    for (const element2 of Object.keys(this.elements)) {\n      this.ctx.domManager.removeChild(\"canvas-overlay\", `toolbar-${element2}`);\n    }\n  }\n  onHover(event) {\n    const {\n      enabled,\n      elements: elements2,\n      floatingDetectionRange,\n      ctx: { scene }\n    } = this;\n    const {\n      offsetY,\n      sourceEvent: { target }\n    } = event;\n    const { FloatingBottom, FloatingTop } = ToolbarPosition;\n    if (!enabled)\n      return;\n    const bottom = elements2[FloatingBottom];\n    const top = elements2[FloatingTop];\n    const bottomDetectionY = bottom.offsetTop - floatingDetectionRange;\n    const bottomVisible = offsetY > bottomDetectionY && offsetY < scene.canvas.element.offsetHeight || target === bottom;\n    const topDetectionY = top.offsetTop + top.offsetHeight + floatingDetectionRange;\n    const topVisible = offsetY > 0 && offsetY < topDetectionY || target === top;\n    this.translateFloatingElements(FloatingBottom, bottomVisible);\n    this.translateFloatingElements(FloatingTop, topVisible);\n  }\n  onLeave(event) {\n    const {\n      enabled,\n      ctx: { scene }\n    } = this;\n    const { relatedElement, targetElement } = event;\n    const { FloatingBottom, FloatingTop } = ToolbarPosition;\n    if (!enabled || targetElement !== scene.canvas.element)\n      return;\n    const isTargetButton = TOOLBAR_GROUPS.some(\n      (group) => this.groupButtons[group].some((button) => button === relatedElement)\n    );\n    if (isTargetButton)\n      return;\n    this.translateFloatingElements(FloatingBottom, false);\n    this.translateFloatingElements(FloatingTop, false);\n  }\n  // AG-12695 Temporarily set `pointer-events: none` on the annotationOptions when dragging, because the\n  // buttons block to mouse from hovering over the canvas.\n  toggleNoPointerEvents(on) {\n    const className = \"ag-charts-toolbar__no-pointer-events\";\n    this.groupButtons[\"annotationOptions\"].forEach((b) => b.classList.toggle(className, on));\n  }\n  onGroupChanged(group) {\n    if (this[group] == null || this.groupProxied.has(group))\n      return;\n    this.createGroup(group);\n    this.toggleVisibilities();\n  }\n  onGroupButtonsChanged(group, buttons, configurationOnly) {\n    if (!this.enabled || this.groupProxied.has(group))\n      return;\n    if (configurationOnly) {\n      for (const buttonOptions of this[group].buttonConfigurations()) {\n        this.refreshButtonContent(group, buttonOptions);\n      }\n    } else {\n      this.createGroupButtons(group, buttons);\n    }\n    this.toggleVisibilities();\n  }\n  onLayoutComplete(opts) {\n    for (const position of TOOLBAR_POSITIONS) {\n      this.elements[position].classList.remove(modifiers.preventFlash);\n    }\n    if (this.enabled) {\n      this.refreshInnerLayout(opts.series.rect);\n    }\n  }\n  toggleButtonsTransition(enabled) {\n    const className = modifiers.button.withTransition;\n    for (const button of Object.values(this.groupButtons).flat()) {\n      if (enabled && !button.classList.contains(className)) {\n        button.getBoundingClientRect();\n      }\n      button.classList.toggle(className, enabled);\n    }\n  }\n  onPreDomUpdate() {\n    this.toggleButtonsTransition(false);\n  }\n  onUpdateComplete() {\n    this.toggleButtonsTransition(true);\n  }\n  onButtonUpdated(event) {\n    const { type: _type, group, id, ...params } = event;\n    this[group].overrideButtonConfiguration(id, params);\n  }\n  setButtonActive(button, active) {\n    button.classList.toggle(modifiers.button.active, active);\n  }\n  setButtonChecked(button, checked) {\n    if (button.role === \"switch\") {\n      button.ariaChecked = checked.toString();\n    }\n  }\n  setButtonGroupFirstLast(group) {\n    const childNodes = Array.from(group.childNodes ?? []);\n    const setFirstClass = (first2, button, modifier) => {\n      const buttonVisible = !button.classList.contains(modifiers.button.hiddenToggled);\n      button.classList.toggle(modifier, buttonVisible && first2);\n      return buttonVisible ? false : first2;\n    };\n    let first = true;\n    childNodes.forEach((button) => first = setFirstClass(first, button, modifiers.button.first));\n    let last = true;\n    childNodes.toReversed().forEach((button) => last = setFirstClass(last, button, modifiers.button.last));\n  }\n  onButtonToggled(event) {\n    const { group, id, active, enabled, visible, checked } = event;\n    if (this.groupButtons[group].length === 0) {\n      this.pendingButtonToggledEvents.push(event);\n      return;\n    }\n    const button = this.groupButtons[group].find((b) => b.dataset.toolbarId === `${id}`);\n    if (button == null)\n      return;\n    button.ariaDisabled = `${!enabled}`;\n    button.classList.toggle(modifiers.button.hiddenToggled, !visible);\n    this.setButtonActive(button, active);\n    this.setButtonChecked(button, checked);\n    this.setButtonGroupFirstLast(button.parentNode);\n  }\n  onGroupToggled(event) {\n    const { caller, group, active, visible } = event;\n    this.toggleGroup(caller, group, active, visible);\n    this.toggleVisibilities();\n  }\n  onGroupUpdated(event) {\n    const { group } = event;\n    for (const ariaToolbar of this.ariaToolbars) {\n      if (ariaToolbar.groups.includes(group)) {\n        ariaToolbar.resetListeners();\n        return;\n      }\n    }\n  }\n  onFloatingAnchorChanged(event) {\n    const { elements: elements2, positions, horizontalSpacing, verticalSpacing } = this;\n    const { group, anchor } = event;\n    const element2 = elements2[\"floating\" /* Floating */];\n    if (this.dragState.detached || element2.classList.contains(modifiers.hidden)) {\n      return;\n    }\n    this.dragState.detached = false;\n    if (!positions[\"floating\" /* Floating */].has(group))\n      return;\n    const position = anchor.position ?? \"above\";\n    const { offsetWidth: width2, offsetHeight: height2 } = element2;\n    let top = anchor.y - height2 - verticalSpacing;\n    let left = anchor.x - width2 / 2;\n    if (position === \"below\") {\n      top = anchor.y + verticalSpacing;\n    } else if (position === \"right\") {\n      top = anchor.y - height2 / 2;\n      left = anchor.x + horizontalSpacing;\n    } else if (position === \"above-left\") {\n      left = anchor.x;\n    }\n    const groupBBox = new BBox(left, top, width2, height2);\n    this.positionGroup(element2, group, groupBBox);\n  }\n  positionGroup(element2, group, bbox) {\n    const {\n      ctx: { domManager }\n    } = this;\n    const canvasRect = domManager.getBoundingClientRect();\n    bbox.x = clamp(0, bbox.x, canvasRect.width - bbox.width);\n    bbox.y = clamp(0, bbox.y, canvasRect.height - bbox.height);\n    const left = `${Math.floor(bbox.x)}px`;\n    const top = `${Math.floor(bbox.y)}px`;\n    const dirty = element2.style.getPropertyValue(\"left\") !== left || element2.style.getPropertyValue(\"top\") !== top;\n    if (!dirty)\n      return;\n    element2.style.setProperty(\"left\", left);\n    element2.style.setProperty(\"top\", top);\n    this.onGroupMoved(group, bbox);\n  }\n  onGroupMoved(group, bbox) {\n    const {\n      groupButtons,\n      ctx: { toolbarManager }\n    } = this;\n    for (const button of groupButtons[group]) {\n      if (button.classList.contains(modifiers.button.hiddenToggled))\n        continue;\n      const parent = button.offsetParent;\n      toolbarManager.buttonMoved(\n        group,\n        button.dataset.toolbarId,\n        new BBox(\n          button.offsetLeft + (parent?.offsetLeft ?? 0),\n          button.offsetTop + (parent?.offsetTop ?? 0),\n          button.offsetWidth,\n          button.offsetHeight\n        ),\n        bbox\n      );\n    }\n  }\n  buttonRect(button, canvasRect = this.ctx.domManager.getBoundingClientRect()) {\n    const buttonRect = button.getBoundingClientRect();\n    return new BBox(\n      buttonRect.left - canvasRect.left,\n      buttonRect.top - canvasRect.top,\n      buttonRect.width,\n      buttonRect.height\n    );\n  }\n  onProxyGroupOptions(event) {\n    if (!this.enabled)\n      return;\n    const { caller, group, options } = event;\n    this.groupProxied.set(group, options);\n    this[group].set(options);\n    this.toggleGroup(caller, group, void 0, options.enabled);\n    this.createGroup(group, options.enabled, options.position);\n    if (options.enabled) {\n      this.createGroupButtons(group, options.buttons);\n    }\n  }\n  createGroup(group, enabled, position) {\n    enabled ?? (enabled = this[group].enabled);\n    position ?? (position = this[group].position);\n    for (const pos of TOOLBAR_POSITIONS) {\n      if (enabled && position === pos) {\n        this.positions[pos].add(group);\n      } else {\n        this.positions[pos].delete(group);\n      }\n    }\n  }\n  createGroupButtons(group, buttons = []) {\n    for (const button of this.groupButtons[group]) {\n      button.remove();\n    }\n    this.groupButtons[group] = [];\n    if (buttons.length === 0)\n      return;\n    const { align, position } = this[group];\n    const alignElement = this.positionAlignments[position][align];\n    if (!alignElement)\n      return;\n    const nextSection = (section2) => {\n      const alignElementChildren = Array.from(alignElement.children);\n      const dataGroup = \"data-group\";\n      const dataSection = \"data-section\";\n      let sectionElement = alignElementChildren.find((prevSection2) => {\n        return prevSection2.getAttribute(dataGroup) === group && prevSection2.getAttribute(dataSection) === (section2 ?? \"\");\n      });\n      if (!sectionElement) {\n        sectionElement = createElement(\"div\");\n        sectionElement.role = \"presentation\";\n        sectionElement.setAttribute(dataGroup, group);\n        sectionElement.setAttribute(dataSection, section2 ?? \"\");\n        const groupIndex = TOOLBAR_GROUP_ORDERING[group];\n        const insertBeforeElement = alignElementChildren.find((prevSection2) => {\n          const prevGroup = prevSection2.getAttribute(dataGroup);\n          const prevGroupIndex = TOOLBAR_GROUP_ORDERING[prevGroup];\n          return prevGroupIndex > groupIndex;\n        });\n        if (insertBeforeElement != null) {\n          alignElement.insertBefore(sectionElement, insertBeforeElement);\n        } else {\n          alignElement.appendChild(sectionElement);\n        }\n        this.destroyFns.push(() => sectionElement.remove());\n      }\n      sectionElement.classList.add(elements.section, modifiers[this[group].size]);\n      return sectionElement;\n    };\n    let prevSection = buttons.at(0)?.section;\n    let section = nextSection(prevSection);\n    for (const options of buttons) {\n      if (prevSection !== options.section) {\n        this.setButtonGroupFirstLast(section);\n        section = nextSection(options.section);\n      }\n      prevSection = options.section;\n      const button = this.createButtonElement(group, options);\n      section.appendChild(button);\n      this.groupButtons[group].push(button);\n    }\n    this.setButtonGroupFirstLast(section);\n    const onEscape = () => {\n      this.ctx.toolbarManager.cancel(group);\n    };\n    let onFocus;\n    let onBlur;\n    if (isAnimatingFloatingPosition(position)) {\n      onFocus = () => this.translateFloatingElements(position, true);\n      onBlur = () => this.translateFloatingElements(position, false);\n    }\n    this.createAriaToolbar(group, alignElement, onFocus, onBlur, onEscape);\n  }\n  createAriaToolbar(group, toolbar, onFocus, onBlur, onEscape) {\n    const orientation = this.computeAriaOrientation(this[group].position);\n    const ariaToolbar = this.getAriaToolbar(group);\n    ariaToolbar.resetListeners = () => {\n      const buttons = ariaToolbar.groups.map((g) => this.groupButtons[g]).flat().filter(\n        (b) => !b.classList.contains(modifiers.button.hiddenToggled) && !b.classList.contains(modifiers.button.dragHandle)\n      );\n      ariaToolbar.destroyFns.forEach((d) => d());\n      ariaToolbar.destroyFns = initToolbarKeyNav({ orientation, toolbar, buttons, onEscape, onFocus, onBlur });\n    };\n    ariaToolbar.resetListeners();\n    this.updateToolbarAriaLabel(group, toolbar);\n  }\n  computeAriaOrientation(position) {\n    return {\n      top: \"horizontal\",\n      right: \"vertical\",\n      bottom: \"horizontal\",\n      left: \"vertical\",\n      floating: \"horizontal\",\n      \"floating-top\": \"horizontal\",\n      \"floating-bottom\": \"horizontal\"\n    }[position];\n  }\n  toggleGroup(caller, group, active, enabled) {\n    if (enabled === true) {\n      this.groupCallers[group].add(caller);\n    } else if (enabled === false) {\n      this.groupCallers[group].delete(caller);\n    }\n    if (active != null) {\n      for (const button of this.groupButtons[group]) {\n        this.setButtonActive(button, active);\n      }\n    }\n  }\n  processPendingEvents() {\n    const pendingButtonToggledEvents = (this.pendingButtonToggledEvents ?? []).slice();\n    for (const event of pendingButtonToggledEvents) {\n      this.onButtonToggled(event);\n    }\n    this.pendingButtonToggledEvents = [];\n  }\n  onLayoutStart(ctx) {\n    if (this.enabled) {\n      this.refreshOuterLayout(ctx.layoutBox);\n      this.refreshLocale();\n    }\n  }\n  refreshOuterLayout(shrinkRect) {\n    const { elements: elements2, horizontalSpacing, verticalSpacing } = this;\n    if (!elements2.top.classList.contains(modifiers.hidden)) {\n      shrinkRect.shrink(elements2.top.offsetHeight + verticalSpacing, \"top\");\n    }\n    if (!elements2.right.classList.contains(modifiers.hidden)) {\n      shrinkRect.shrink(elements2.right.offsetWidth + horizontalSpacing, \"right\");\n    }\n    if (!elements2.bottom.classList.contains(modifiers.hidden)) {\n      shrinkRect.shrink(elements2.bottom.offsetHeight + verticalSpacing, \"bottom\");\n      elements2.bottom.style.top = `${shrinkRect.y + shrinkRect.height + verticalSpacing}px`;\n    }\n    if (!elements2.left.classList.contains(modifiers.hidden)) {\n      shrinkRect.shrink(elements2.left.offsetWidth + horizontalSpacing, \"left\");\n    }\n  }\n  refreshLocale() {\n    const { hasNewLocale } = this;\n    if (!hasNewLocale)\n      return;\n    for (const group of TOOLBAR_GROUPS) {\n      const buttons = this[group].buttonConfigurations();\n      for (const buttonOptions of buttons) {\n        this.refreshButtonContent(group, buttonOptions);\n      }\n      this.updateToolbarAriaLabel(group);\n    }\n    this.hasNewLocale = false;\n  }\n  refreshInnerLayout(rect) {\n    const { elements: elements2, verticalSpacing } = this;\n    const { FloatingBottom, FloatingTop } = ToolbarPosition;\n    elements2.top.style.top = `${rect.y - elements2.top.offsetHeight - verticalSpacing}px`;\n    elements2.top.style.left = `${rect.x}px`;\n    elements2.top.style.width = `${rect.width}px`;\n    elements2.bottom.style.left = `${rect.x}px`;\n    elements2.bottom.style.width = `${rect.width}px`;\n    elements2.right.style.top = `${rect.y}px`;\n    elements2.right.style.right = `0px`;\n    elements2.right.style.height = `${rect.height}px`;\n    elements2.left.style.top = `${rect.y}px`;\n    elements2.left.style.left = `0px`;\n    elements2.left.style.height = `${rect.height}px`;\n    elements2[FloatingTop].style.top = `${rect.y}px`;\n    elements2[FloatingBottom].style.top = `${rect.y + rect.height - elements2[FloatingBottom].offsetHeight}px`;\n  }\n  refreshButtonContent(group, buttonOptions) {\n    const id = this.buttonId(buttonOptions);\n    const button = this.groupProxied.get(group)?.buttons?.find((b) => this.buttonId(b) === id) ?? buttonOptions;\n    const element2 = this.groupButtons[group].find((b) => b.getAttribute(\"data-toolbar-id\") === id);\n    if (element2 == null)\n      return;\n    this.updateButton(element2, button);\n  }\n  toggleVisibilities() {\n    if (this.elements == null)\n      return;\n    const isGroupVisible = (group) => this[group].enabled && this.groupCallers[group].size > 0;\n    const isButtonVisible = (element2) => (button) => {\n      const id = this.buttonId(button);\n      return id == null || id === element2.dataset.toolbarId;\n    };\n    for (const position of TOOLBAR_POSITIONS) {\n      const visible = this.enabled && Array.from(this.positions[position].values()).some(isGroupVisible);\n      if (position === \"floating\" /* Floating */ && !visible) {\n        this.dragState.detached = false;\n      }\n      this.elements[position].classList.toggle(modifiers.hidden, !visible);\n    }\n    for (const group of TOOLBAR_GROUPS) {\n      if (this[group] == null)\n        continue;\n      const groupVisible = isGroupVisible(group);\n      for (const button of this.groupButtons[group]) {\n        const buttonVisible = groupVisible && this[group].buttonConfigurations().some(isButtonVisible(button));\n        button.classList.toggle(modifiers.button.hiddenValue, !buttonVisible);\n      }\n    }\n  }\n  translateFloatingElements(position, visible) {\n    const { elements: elements2, verticalSpacing: verticalMargin, positionAlignments } = this;\n    const element2 = elements2[position];\n    const alignments = Object.values(positionAlignments[position]);\n    element2.classList.toggle(modifiers.floatingHidden, !visible);\n    const dir = position === \"floating-bottom\" /* FloatingBottom */ ? 1 : -1;\n    for (const align of alignments) {\n      align.style.transform = visible && align.style.transform !== \"\" ? \"translateY(0)\" : `translateY(${(element2.offsetHeight + verticalMargin) * dir}px)`;\n    }\n  }\n  renderToolbar(position = \"top\" /* Top */) {\n    const element2 = this.elements[position];\n    element2.classList.add(block, modifiers[position], modifiers.preventFlash);\n    if (isAnimatingFloatingPosition(position)) {\n      element2.classList.add(modifiers.floatingHidden);\n    }\n    for (const align of TOOLBAR_ALIGNMENTS) {\n      const alignmentElement = createElement(\"div\");\n      alignmentElement.role = \"presentation\";\n      alignmentElement.classList.add(elements.align, modifiers.align[align]);\n      element2.appendChild(alignmentElement);\n      this.positionAlignments[position][align] = alignmentElement;\n    }\n  }\n  createButtonElement(group, options) {\n    const button = createElement(\"button\");\n    button.classList.add(elements.button);\n    button.dataset.toolbarGroup = group;\n    setAttribute(button, \"tabindex\", -1);\n    if (options.haspopup) {\n      setAttributes(button, { \"aria-haspopup\": true, \"aria-expanded\": false });\n    }\n    button.dataset.toolbarId = this.buttonId(options);\n    button.addEventListener(\n      \"click\",\n      makeAccessibleClickListener(\n        button,\n        (event) => this.onButtonPress(event, button, group, options.id, options.value)\n      )\n    );\n    if (options.value === \"drag\") {\n      button.addEventListener(\n        \"mousedown\",\n        makeAccessibleClickListener(button, (event) => this.onDragStart(event, button, group))\n      );\n      button.classList.add(modifiers.button.dragHandle);\n    }\n    if (options.role === \"switch\") {\n      setAttributes(button, { role: options.role, \"aria-checked\": false });\n    }\n    this.updateButton(button, options);\n    this.destroyFns.push(() => button.remove());\n    return button;\n  }\n  getAriaToolbar(group) {\n    for (const ariaToolbar of this.ariaToolbars) {\n      if (ariaToolbar.groups.includes(group)) {\n        return ariaToolbar;\n      }\n    }\n    throw new Error(`AG Charts - cannot find aria-toolbar of '${group}'`);\n  }\n  updateToolbarAriaLabel(group, alignElement) {\n    if (!alignElement) {\n      const { align, position } = this[group];\n      alignElement = this.positionAlignments[position][align];\n      if (!alignElement)\n        return;\n    }\n    const map = {\n      seriesType: \"ariaLabelFinancialCharts\",\n      annotations: \"ariaLabelFinancialCharts\",\n      annotationOptions: \"ariaLabelAnnotationOptionsToolbar\",\n      ranges: \"ariaLabelRangesToolbar\",\n      zoom: \"ariaLabelZoomToolbar\"\n    };\n    alignElement.ariaLabel = this.ctx.localeManager.t(map[group]);\n  }\n  expandButtonConfig(button, options) {\n    if (options.role !== \"switch\" || button.ariaChecked !== \"true\" || options.checkedOverrides === void 0)\n      return options;\n    return {\n      icon: options.checkedOverrides.icon ?? options.icon,\n      label: options.checkedOverrides.label ?? options.label,\n      ariaLabel: options.checkedOverrides.ariaLabel ?? options.ariaLabel,\n      tooltip: options.checkedOverrides.tooltip ?? options.tooltip\n    };\n  }\n  updateButton(button, options) {\n    const { domManager, localeManager } = this.ctx;\n    const { icon, label, ariaLabel, tooltip } = this.expandButtonConfig(button, options);\n    if (tooltip) {\n      button.title = localeManager.t(tooltip);\n    }\n    let inner = \"\";\n    if (icon != null) {\n      inner = `<span class=\"${domManager.getIconClassNames(icon)} ${elements.icon}\"></span>`;\n    }\n    if (label != null) {\n      const tlabel = localeManager.t(label);\n      inner = `${inner}<span class=\"${elements.label}\">${tlabel}</span>`;\n    }\n    button.innerHTML = inner;\n    button.classList.toggle(modifiers.button.fillVisible, options.fill != null);\n    button.style.setProperty(\"--fill\", options.fill ?? null);\n    const strokeWidthVisible = options.strokeWidth != null;\n    button.classList.toggle(modifiers.button.strokeWidthVisible, strokeWidthVisible);\n    button.style.setProperty(\"--strokeWidth\", strokeWidthVisible ? `${options.strokeWidth}px` : null);\n    const tAriaLabel = ariaLabel ? this.ctx.localeManager.t(ariaLabel) : void 0;\n    setAttribute(button, \"aria-label\", tAriaLabel);\n  }\n  onButtonPress(event, button, group, id, value) {\n    this.ctx.toolbarManager.pressButton(group, this.buttonId({ id, value }), value, this.buttonRect(button), event);\n  }\n  onDragStart(event, button, group) {\n    const element2 = this.elements[\"floating\" /* Floating */];\n    event.preventDefault();\n    event.stopPropagation();\n    this.dragState = {\n      client: Vec2.from(event.clientX, event.clientY),\n      position: Vec2.from(\n        Number(element2.style.getPropertyValue(\"left\").replace(\"px\", \"\")),\n        Number(element2.style.getPropertyValue(\"top\").replace(\"px\", \"\"))\n      ),\n      detached: true\n    };\n    button.classList.toggle(modifiers.button.dragging, true);\n    const onDrag = (e) => this.onDrag(e, group);\n    const onDragEnd = () => {\n      button.classList.toggle(modifiers.button.dragging, false);\n      window2.removeEventListener(\"mousemove\", onDrag);\n    };\n    const window2 = getWindow();\n    window2.addEventListener(\"mousemove\", onDrag);\n    window2.addEventListener(\"mouseup\", onDragEnd, {\n      once: true\n    });\n    this.ctx.toolbarManager.groupMoved(group);\n  }\n  onDrag(event, group) {\n    const { elements: elements2, dragState } = this;\n    const element2 = elements2[\"floating\" /* Floating */];\n    const { offsetWidth: width2, offsetHeight: height2 } = element2;\n    const offset4 = Vec2.sub(Vec2.from(event.clientX, event.clientY), dragState.client);\n    const position = Vec2.add(dragState.position, offset4);\n    const groupBBox = new BBox(position.x, position.y, width2, height2);\n    this.positionGroup(element2, group, groupBBox);\n  }\n  buttonId(button) {\n    const { id, value, label } = button;\n    if (id != null) {\n      return id;\n    } else if (value != null && typeof value !== \"object\") {\n      return String(value);\n    }\n    return label ?? \"\";\n  }\n};\n__decorateClass([\n  ObserveChanges((target) => {\n    target.processPendingEvents();\n    target.toggleVisibilities();\n  }),\n  Validate(BOOLEAN)\n], Toolbar.prototype, \"enabled\", 2);\n\n// packages/ag-charts-community/src/chart/toolbar/toolbarModule.ts\nvar DAY = 1e3 * 60 * 60 * 24;\nvar MONTH = DAY * 30;\nvar YEAR = DAY * 365;\nvar seriesType = {\n  enabled: false,\n  position: \"left\",\n  align: \"start\",\n  buttons: [\n    {\n      tooltip: \"toolbarSeriesTypeDropdown\",\n      value: \"type\",\n      // @ts-expect-error\n      haspopup: true\n    }\n  ]\n};\nvar annotations = {\n  enabled: true,\n  position: \"left\",\n  align: \"start\",\n  buttons: [\n    {\n      icon: \"trend-line-drawing\",\n      tooltip: \"toolbarAnnotationsLineAnnotations\",\n      value: \"line-menu\",\n      section: \"line-annotations\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      icon: \"text-annotation\",\n      tooltip: \"toolbarAnnotationsTextAnnotations\",\n      value: \"text-menu\",\n      section: \"text-annotations\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      icon: \"arrow-drawing\",\n      tooltip: \"toolbarAnnotationsShapeAnnotations\",\n      value: \"shape-menu\",\n      section: \"shape-annotations\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      icon: \"measurer-drawing\",\n      tooltip: \"toolbarAnnotationsMeasurerAnnotations\",\n      value: \"measurer-menu\",\n      section: \"measure-annotations\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      icon: \"delete\",\n      tooltip: \"toolbarAnnotationsClearAll\",\n      value: \"clear\",\n      section: \"tools\"\n    }\n  ]\n};\nvar annotationOptions = {\n  enabled: true,\n  position: \"floating\",\n  align: \"start\",\n  draggable: true,\n  buttons: [\n    {\n      icon: \"text-annotation\",\n      tooltip: \"toolbarAnnotationsTextColor\",\n      value: \"text-color\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      icon: \"line-color\",\n      tooltip: \"toolbarAnnotationsLineColor\",\n      value: \"line-color\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      icon: \"fill-color\",\n      tooltip: \"toolbarAnnotationsFillColor\",\n      value: \"fill-color\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      tooltip: \"toolbarAnnotationsTextSize\",\n      value: \"text-size\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      tooltip: \"toolbarAnnotationsLineStrokeWidth\",\n      value: \"line-stroke-width\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      icon: \"line-style-solid\",\n      tooltip: \"toolbarAnnotationsLineStyle\",\n      value: \"line-style-type\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      icon: \"settings\",\n      tooltip: \"toolbarAnnotationsSettings\",\n      value: \"settings\",\n      // @ts-expect-error\n      haspopup: true\n    },\n    {\n      role: \"switch\",\n      icon: \"unlocked\",\n      tooltip: \"toolbarAnnotationsLock\",\n      ariaLabel: \"toolbarAnnotationsLock\",\n      checkedOverrides: {\n        icon: \"locked\",\n        tooltip: \"toolbarAnnotationsUnlock\"\n      },\n      value: \"lock\"\n    },\n    {\n      icon: \"delete\",\n      tooltip: \"toolbarAnnotationsDelete\",\n      value: \"delete\"\n    }\n  ]\n};\nvar ranges = {\n  enabled: false,\n  position: DEFAULT_TOOLBAR_POSITION,\n  align: \"start\",\n  buttons: [\n    {\n      label: \"toolbarRange1Month\",\n      ariaLabel: \"toolbarRange1MonthAria\",\n      value: MONTH\n    },\n    {\n      label: \"toolbarRange3Months\",\n      ariaLabel: \"toolbarRange3MonthsAria\",\n      value: 3 * MONTH\n    },\n    {\n      label: \"toolbarRange6Months\",\n      ariaLabel: \"toolbarRange6MonthsAria\",\n      value: 6 * MONTH\n    },\n    {\n      label: \"toolbarRangeYearToDate\",\n      ariaLabel: \"toolbarRangeYearToDateAria\",\n      value: (_start, end2) => [(/* @__PURE__ */ new Date(`${new Date(end2).getFullYear()}-01-01`)).getTime(), end2],\n      id: \"year-to-date\"\n    },\n    {\n      label: \"toolbarRange1Year\",\n      ariaLabel: \"toolbarRange1YearAria\",\n      value: YEAR\n    },\n    {\n      label: \"toolbarRangeAll\",\n      ariaLabel: \"toolbarRangeAllAria\",\n      value: (start2, end2) => [start2, end2],\n      id: \"all\"\n    }\n  ]\n};\nvar zoom = {\n  enabled: true,\n  position: \"top\",\n  align: \"end\",\n  buttons: [\n    {\n      icon: \"zoom-out\",\n      tooltip: \"toolbarZoomZoomOut\",\n      value: \"zoom-out\"\n    },\n    {\n      icon: \"zoom-in\",\n      tooltip: \"toolbarZoomZoomIn\",\n      value: \"zoom-in\"\n    },\n    {\n      icon: \"pan-left\",\n      tooltip: \"toolbarZoomPanLeft\",\n      value: \"pan-left\"\n    },\n    {\n      icon: \"pan-right\",\n      tooltip: \"toolbarZoomPanRight\",\n      value: \"pan-right\"\n    },\n    {\n      icon: \"pan-start\",\n      tooltip: \"toolbarZoomPanStart\",\n      value: \"pan-start\"\n    },\n    {\n      icon: \"pan-end\",\n      tooltip: \"toolbarZoomPanEnd\",\n      value: \"pan-end\"\n    },\n    {\n      icon: \"reset\",\n      tooltip: \"toolbarZoomReset\",\n      value: \"reset\"\n    }\n  ]\n};\nvar ToolbarModule = {\n  type: \"root\",\n  optionsKey: \"toolbar\",\n  packageType: \"community\",\n  chartTypes: [\"cartesian\"],\n  moduleFactory: (ctx) => new Toolbar(ctx),\n  themeTemplate: {\n    toolbar: {\n      enabled: true,\n      seriesType,\n      annotations,\n      annotationOptions,\n      ranges,\n      zoom\n    }\n  }\n};\n\n// packages/ag-charts-community/src/chart/factory/registerInbuiltModules.ts\nfunction registerInbuiltModules() {\n  moduleRegistry.register(\n    BackgroundModule,\n    CommunityLegendModule,\n    LocaleModule,\n    NavigatorModule,\n    ToolbarModule,\n    AreaSeriesModule,\n    BarSeriesModule,\n    BubbleSeriesModule,\n    LineSeriesModule,\n    ScatterSeriesModule,\n    DonutSeriesModule,\n    PieSeriesModule,\n    HistogramSeriesModule\n  );\n  for (const AxisConstructor of [NumberAxis, CategoryAxis, TimeAxis, GroupedCategoryAxis, LogAxis]) {\n    axisRegistry.register(AxisConstructor.type, {\n      moduleFactory: (ctx) => new AxisConstructor(ctx),\n      hidden: AxisConstructor === GroupedCategoryAxis\n    });\n  }\n}\n\n// packages/ag-charts-community/src/chart/factory/setupModules.ts\nfunction setupModules() {\n  for (const m of moduleRegistry.modules) {\n    if (m.packageType === \"enterprise\" && !verifyIfModuleExpected(m)) {\n      Logger.errorOnce(\"Unexpected enterprise module registered: \" + m.identifier);\n    }\n    if (m.type === \"root\" && m.themeTemplate) {\n      for (const chartType2 of m.chartTypes) {\n        chartDefaults.set(chartType2, m.themeTemplate);\n      }\n    }\n    if (m.type === \"series\") {\n      if (m.chartTypes.length > 1) {\n        throw new Error(`AG Charts - Module definition error: ${m.identifier}`);\n      }\n      seriesRegistry.register(m.identifier, m);\n    }\n    if (m.type === \"series-option\" && m.themeTemplate) {\n      for (const seriesType2 of m.seriesTypes) {\n        seriesRegistry.setThemeTemplate(seriesType2, m.themeTemplate);\n      }\n    }\n    if (m.type === \"axis-option\" && m.themeTemplate) {\n      for (const axisType of m.axisTypes) {\n        const axisTypeTheme = axisRegistry.getThemeTemplate(axisType);\n        const theme = mergeDefaults(m.themeTemplate, axisTypeTheme);\n        axisRegistry.setThemeTemplate(axisType, theme);\n      }\n    }\n    if (m.type === \"axis\") {\n      axisRegistry.register(m.identifier, m);\n    }\n    if (m.type === \"legend\") {\n      legendRegistry.register(m.identifier, m);\n    }\n  }\n  if (moduleRegistry.hasEnterpriseModules()) {\n    const expectedButUnused = getUnusedExpectedModules();\n    if (expectedButUnused.length > 0) {\n      Logger.errorOnce(\"Enterprise modules expected but not registered: \", expectedButUnused);\n    }\n  }\n}\n\n// packages/ag-charts-community/src/chart/flowProportionChart.ts\nfunction isFlowProportion(series) {\n  return series.type === \"sankey\" || series.type === \"chord\";\n}\nvar FlowProportionChart = class extends Chart {\n  getChartType() {\n    return \"flow-proportion\";\n  }\n  async updateData() {\n    await super.updateData();\n    const { nodes } = this.getOptions();\n    this.series.forEach((series) => {\n      if (isFlowProportion(series)) {\n        series.setChartNodes(nodes);\n      }\n    });\n  }\n  performLayout(ctx) {\n    const { seriesRoot, annotationRoot, highlightRoot } = this;\n    const { layoutBox } = ctx;\n    const seriesRect = layoutBox.clone();\n    layoutBox.shrink(this.seriesArea.padding.toJson());\n    this.seriesRect = layoutBox;\n    this.animationRect = layoutBox;\n    seriesRoot.visible = this.series.some((s) => s.visible);\n    for (const group of [seriesRoot, annotationRoot, highlightRoot]) {\n      group.translationX = Math.floor(layoutBox.x);\n      group.translationY = Math.floor(layoutBox.y);\n      group.setClipRect(seriesRect.clone());\n    }\n    this.ctx.layoutManager.emitLayoutComplete(ctx, {\n      series: { visible: seriesRoot.visible, rect: seriesRect, paddedRect: layoutBox }\n    });\n  }\n};\nFlowProportionChart.className = \"FlowProportionChart\";\nFlowProportionChart.type = \"flow-proportion\";\n\n// packages/ag-charts-community/src/chart/axis/polarAxis.ts\nvar PolarAxis = class extends Axis {\n  constructor() {\n    super(...arguments);\n    this.shape = \"polygon\";\n    this.innerRadiusRatio = 0;\n    this.defaultTickMinSpacing = 20;\n  }\n  computeLabelsBBox(_options, _seriesRect) {\n    return null;\n  }\n  computeRange() {\n  }\n  getAxisLinePoints() {\n    return void 0;\n  }\n};\n__decorateClass([\n  Validate(UNION([\"polygon\", \"circle\"], \"a polar axis shape\"))\n], PolarAxis.prototype, \"shape\", 2);\n__decorateClass([\n  Validate(RATIO)\n], PolarAxis.prototype, \"innerRadiusRatio\", 2);\n\n// packages/ag-charts-community/src/chart/gaugeChart.ts\nfunction isRadialGaugeSeries(series) {\n  return series.type === \"radial-gauge\";\n}\nfunction isLinearGaugeSeries(series) {\n  return series.type === \"linear-gauge\";\n}\nvar GaugeChart = class extends Chart {\n  getChartType() {\n    return \"gauge\";\n  }\n  updateRadialGauge(seriesRect, series) {\n    const angleAxis = this.axes.find((axis) => axis.direction === \"x\" /* X */);\n    if (!(angleAxis instanceof PolarAxis))\n      return;\n    angleAxis.computeRange();\n    const seriesRectX0 = seriesRect.x;\n    const seriesRectX1 = seriesRectX0 + seriesRect.width;\n    const seriesRectY0 = seriesRect.y;\n    const seriesRectY1 = seriesRectY0 + seriesRect.height;\n    const [startAngle, endAngle] = angleAxis.range;\n    const sweepAngle = normalizeAngle360Inclusive(endAngle - startAngle);\n    const largerThanHalf = sweepAngle > Math.PI;\n    const containsTop = largerThanHalf || isBetweenAngles(1.5 * Math.PI, startAngle, endAngle);\n    const containsRight = largerThanHalf || isBetweenAngles(0 * Math.PI, startAngle, endAngle);\n    const containsBottom = largerThanHalf || isBetweenAngles(0.5 * Math.PI, startAngle, endAngle);\n    const containsLeft = largerThanHalf || isBetweenAngles(1 * Math.PI, startAngle, endAngle);\n    let textAlign;\n    if (containsLeft && !containsRight) {\n      textAlign = \"right\";\n    } else if (!containsLeft && containsRight) {\n      textAlign = \"left\";\n    } else {\n      textAlign = \"center\";\n    }\n    let verticalAlign;\n    if (containsTop && !containsBottom) {\n      verticalAlign = \"bottom\";\n    } else if (!containsTop && containsBottom) {\n      verticalAlign = \"top\";\n    } else {\n      verticalAlign = \"middle\";\n    }\n    const unitBox = sectorBox({\n      startAngle,\n      endAngle,\n      innerRadius: 0,\n      outerRadius: 0.5\n    });\n    const centerXOffset = -(unitBox.x + unitBox.width / 2) * 2;\n    const centerYOffset = -(unitBox.y + unitBox.height / 2) * 2;\n    const { minimumRadius = 0, maximumRadius } = series;\n    const radiusBounds = Math.max(\n      0.5 * Math.min(seriesRect.width / unitBox.width, seriesRect.height / unitBox.height),\n      // seriesRect may have negative size\n      0\n    );\n    let radius = Math.min(maximumRadius ?? Infinity, Math.max(radiusBounds, minimumRadius ?? 0));\n    const MAX_ITERATIONS = 8;\n    for (let i = 0; i < MAX_ITERATIONS; i += 1) {\n      const isFinalIteration = radius <= minimumRadius || i === MAX_ITERATIONS - 1;\n      const centerX = seriesRect.x + seriesRect.width / 2 + centerXOffset * radius;\n      const centerY = seriesRect.y + seriesRect.height / 2 + centerYOffset * radius;\n      angleAxis.translation.x = centerX;\n      angleAxis.translation.y = centerY;\n      angleAxis.gridLength = radius;\n      angleAxis.calculateLayout();\n      const bbox = angleAxis.computeLabelsBBox({ hideWhenNecessary: isFinalIteration }, seriesRect);\n      if (isFinalIteration)\n        break;\n      let shrinkDelta = 0;\n      if (bbox != null) {\n        const bboxX0 = bbox.x + centerX;\n        const bboxX1 = bboxX0 + bbox.width;\n        const bboxY0 = bbox.y + centerY;\n        const bboxY1 = bboxY0 + bbox.height;\n        shrinkDelta = Math.max(\n          seriesRectY0 - bboxY0,\n          seriesRectX0 - bboxX0,\n          bboxY1 - seriesRectY1,\n          bboxX1 - seriesRectX1,\n          0\n        );\n      }\n      if (shrinkDelta > 0) {\n        radius = Math.max(radius - shrinkDelta, minimumRadius);\n      } else {\n        break;\n      }\n    }\n    angleAxis.translation.x = seriesRect.x + seriesRect.width / 2 + centerXOffset * radius;\n    angleAxis.translation.y = seriesRect.y + seriesRect.height / 2 + centerYOffset * radius;\n    series.centerX = seriesRect.width / 2 + centerXOffset * radius;\n    series.centerY = seriesRect.height / 2 + centerYOffset * radius;\n    series.radius = radius;\n    series.textAlign = textAlign;\n    series.verticalAlign = verticalAlign;\n    if (radius === 0 || radius > radiusBounds) {\n      Logger.warnOnce(\"There was insufficient space to display the Radial Gauge.\");\n    }\n  }\n  updateLinearGauge(seriesRect, series) {\n    const xAxis = this.axes.find((axis) => axis.direction === \"x\" /* X */);\n    const yAxis = this.axes.find((axis) => axis.direction === \"y\" /* Y */);\n    if (!(xAxis instanceof CartesianAxis))\n      return seriesRect;\n    if (!(yAxis instanceof CartesianAxis))\n      return seriesRect;\n    const { horizontal, thickness } = series;\n    let horizontalInset = 0;\n    let verticalInset = 0;\n    const scale2 = new LinearScale();\n    scale2.domain = [0, 100];\n    scale2.range = horizontal ? xAxis.range : yAxis.range;\n    const ticks = scale2.ticks();\n    if (horizontal) {\n      horizontalInset = series.computeInset(\"x\" /* X */, ticks);\n    } else {\n      verticalInset = series.computeInset(\"y\" /* Y */, ticks);\n    }\n    const seriesWidth = seriesRect.width - Math.abs(horizontalInset);\n    const seriesHeight = seriesRect.height - Math.abs(verticalInset);\n    const width2 = Math.max(horizontal ? seriesWidth : thickness, 0);\n    const height2 = Math.max(horizontal ? thickness : seriesHeight, 0);\n    const x0 = seriesRect.x + (seriesWidth - width2) / 2 + Math.max(horizontalInset, 0);\n    const y0 = seriesRect.y + (seriesHeight - height2) / 2 - Math.min(verticalInset, 0);\n    xAxis.range = [0, width2];\n    xAxis.gridLength = width2;\n    xAxis.calculateLayout();\n    xAxis.translation.x = x0;\n    xAxis.translation.y = y0 + (xAxis.position === \"bottom\" ? thickness : 0);\n    yAxis.range = [0, height2];\n    yAxis.gridLength = height2;\n    yAxis.calculateLayout();\n    yAxis.translation.x = x0 + (yAxis.position === \"right\" ? thickness : 0);\n    yAxis.translation.y = y0;\n    series.originX = x0 - seriesRect.x;\n    series.originY = y0 - seriesRect.y;\n    if (width2 === 0 || height2 === 0) {\n      Logger.warnOnce(\"There was insufficient space to display the Linear Gauge.\");\n    }\n  }\n  performLayout(ctx) {\n    const { seriesRoot, annotationRoot, highlightRoot, series, seriesArea } = this;\n    const { layoutBox } = ctx;\n    const seriesRect = layoutBox.clone();\n    layoutBox.shrink(seriesArea.padding.toJson());\n    const firstSeries = this.series[0];\n    if (isRadialGaugeSeries(firstSeries)) {\n      this.updateRadialGauge(layoutBox, firstSeries);\n    } else if (isLinearGaugeSeries(firstSeries)) {\n      this.updateLinearGauge(layoutBox, firstSeries);\n    }\n    this.axes.forEach((axis) => axis.update());\n    this.seriesRect = seriesRect.clone().translate(seriesRect.x - layoutBox.x, seriesRect.y - layoutBox.y);\n    this.animationRect = layoutBox;\n    seriesRoot.visible = series.some((s) => s.visible);\n    for (const group of [seriesRoot, annotationRoot, highlightRoot]) {\n      group.translationX = Math.floor(layoutBox.x);\n      group.translationY = Math.floor(layoutBox.y);\n    }\n    this.ctx.layoutManager.emitLayoutComplete(ctx, {\n      series: { visible: seriesRoot.visible, rect: seriesRect, paddedRect: layoutBox }\n    });\n  }\n  getAriaLabel() {\n    const captions = [];\n    const chartCaption = this.getCaptionText();\n    if (chartCaption.length !== 0) {\n      captions.push(chartCaption);\n    }\n    for (const series of this.series) {\n      captions.push(series.getCaptionText());\n    }\n    const caption = captions.join(\". \");\n    return this.ctx.localeManager.t(\"ariaAnnounceGaugeChart\", { caption });\n  }\n};\nGaugeChart.className = \"GaugeChart\";\nGaugeChart.type = \"gauge\";\n\n// packages/ag-charts-community/src/chart/hierarchyChart.ts\nvar HierarchyChart = class extends Chart {\n  constructor(options, resources) {\n    super(options, resources);\n  }\n  getChartType() {\n    return \"hierarchy\";\n  }\n  performLayout(ctx) {\n    const { seriesRoot, annotationRoot, highlightRoot } = this;\n    const { layoutBox } = ctx;\n    const seriesRect = layoutBox.clone();\n    layoutBox.shrink(this.seriesArea.padding.toJson());\n    this.seriesRect = layoutBox;\n    this.animationRect = layoutBox;\n    for (const group of [seriesRoot, annotationRoot, highlightRoot]) {\n      group.translationX = Math.floor(layoutBox.x);\n      group.translationY = Math.floor(layoutBox.y);\n    }\n    seriesRoot.visible = this.series[0].visible;\n    seriesRoot.setClipRect(layoutBox.clone());\n    this.ctx.layoutManager.emitLayoutComplete(ctx, {\n      series: { visible: true, rect: seriesRect, paddedRect: layoutBox }\n    });\n  }\n  getAriaLabel() {\n    const caption = this.getCaptionText();\n    return this.ctx.localeManager.t(\"ariaAnnounceHierarchyChart\", { caption });\n  }\n};\nHierarchyChart.className = \"HierarchyChart\";\nHierarchyChart.type = \"hierarchy\";\n\n// packages/ag-charts-community/src/chart/polarChart.ts\nvar PolarChart = class extends Chart {\n  constructor(options, resources) {\n    super(options, resources);\n    this.padding = new Padding(40);\n    this.ctx.axisManager.axisGroup.zIndex = 6 /* AXIS_FOREGROUND */;\n  }\n  getChartType() {\n    return \"polar\";\n  }\n  async performLayout(ctx) {\n    const { layoutBox } = ctx;\n    const seriesRect = layoutBox.clone();\n    layoutBox.shrink(this.seriesArea.padding.toJson());\n    this.seriesRect = layoutBox;\n    this.animationRect = layoutBox;\n    await this.computeCircle(layoutBox);\n    this.axes.forEach((axis) => axis.update());\n    this.ctx.layoutManager.emitLayoutComplete(ctx, {\n      series: { visible: true, rect: seriesRect, paddedRect: layoutBox }\n    });\n  }\n  updateAxes(cx, cy, radius) {\n    const angleAxis = this.axes.find((axis) => axis.direction === \"x\" /* X */);\n    const radiusAxis = this.axes.find((axis) => axis.direction === \"y\" /* Y */);\n    if (!(angleAxis instanceof PolarAxis) || !(radiusAxis instanceof PolarAxis))\n      return;\n    const angleScale = angleAxis.scale;\n    const innerRadiusRatio = radiusAxis.innerRadiusRatio;\n    angleAxis.innerRadiusRatio = innerRadiusRatio;\n    angleAxis.computeRange();\n    angleAxis.gridLength = radius;\n    radiusAxis.gridAngles = angleScale.ticks?.().map((value) => angleScale.convert(value));\n    radiusAxis.gridRange = angleAxis.range;\n    radiusAxis.range = [radius, radius * innerRadiusRatio];\n    [angleAxis, radiusAxis].forEach((axis) => {\n      axis.translation.x = cx;\n      axis.translation.y = cy;\n      axis.calculateLayout();\n    });\n  }\n  async computeCircle(seriesBox) {\n    const polarSeries = this.series.filter(isPolarSeries);\n    const polarAxes = this.axes.filter(isPolarAxis);\n    const setSeriesCircle = (cx, cy, r) => {\n      this.updateAxes(cx, cy, r);\n      polarSeries.forEach((series) => {\n        series.centerX = cx;\n        series.centerY = cy;\n        series.radius = r;\n      });\n      const pieSeries = polarSeries.filter((s) => s.type === \"donut\" || s.type === \"pie\");\n      if (pieSeries.length > 1) {\n        const innerRadii = pieSeries.map((series) => {\n          const innerRadius = series.getInnerRadius();\n          return { series, innerRadius };\n        }).sort((a, b) => a.innerRadius - b.innerRadius);\n        innerRadii.at(-1).series.surroundingRadius = void 0;\n        for (let i = 0; i < innerRadii.length - 1; i++) {\n          innerRadii[i].series.surroundingRadius = innerRadii[i + 1].innerRadius;\n        }\n      }\n    };\n    const centerX = seriesBox.x + seriesBox.width / 2;\n    const centerY = seriesBox.y + seriesBox.height / 2;\n    const initialRadius = Math.max(0, Math.min(seriesBox.width, seriesBox.height) / 2);\n    let radius = initialRadius;\n    setSeriesCircle(centerX, centerY, radius);\n    const shake = async ({ hideWhenNecessary = false } = {}) => {\n      const labelBoxes = [];\n      for (const series of iterate(polarAxes, polarSeries)) {\n        const box = await series.computeLabelsBBox({ hideWhenNecessary }, seriesBox);\n        if (box) {\n          labelBoxes.push(box);\n        }\n      }\n      if (labelBoxes.length === 0) {\n        setSeriesCircle(centerX, centerY, initialRadius);\n        return;\n      }\n      const labelBox = BBox.merge(labelBoxes);\n      const refined = this.refineCircle(labelBox, radius, seriesBox);\n      setSeriesCircle(refined.centerX, refined.centerY, refined.radius);\n      radius = refined.radius;\n    };\n    await shake();\n    await shake();\n    await shake();\n    await shake({ hideWhenNecessary: true });\n    await shake({ hideWhenNecessary: true });\n    for (const series of iterate(polarAxes, polarSeries)) {\n      await series.computeLabelsBBox({ hideWhenNecessary: true }, seriesBox);\n    }\n    return { radius, centerX, centerY };\n  }\n  refineCircle(labelsBox, radius, seriesBox) {\n    const minCircleRatio = 0.5;\n    const circleLeft = -radius;\n    const circleTop = -radius;\n    const circleRight = radius;\n    const circleBottom = radius;\n    let padLeft = Math.max(0, circleLeft - labelsBox.x);\n    let padTop = Math.max(0, circleTop - labelsBox.y);\n    let padRight = Math.max(0, labelsBox.x + labelsBox.width - circleRight);\n    let padBottom = Math.max(0, labelsBox.y + labelsBox.height - circleBottom);\n    padLeft = padRight = Math.max(padLeft, padRight);\n    padTop = padBottom = Math.max(padTop, padBottom);\n    const availCircleWidth = seriesBox.width - padLeft - padRight;\n    const availCircleHeight = seriesBox.height - padTop - padBottom;\n    let newRadius = Math.min(availCircleWidth, availCircleHeight) / 2;\n    const minHorizontalRadius = minCircleRatio * seriesBox.width / 2;\n    const minVerticalRadius = minCircleRatio * seriesBox.height / 2;\n    const minRadius = Math.min(minHorizontalRadius, minVerticalRadius);\n    if (newRadius < minRadius) {\n      newRadius = minRadius;\n      const horizontalPadding = padLeft + padRight;\n      const verticalPadding = padTop + padBottom;\n      if (2 * newRadius + verticalPadding > seriesBox.height) {\n        const padHeight = seriesBox.height - 2 * newRadius;\n        if (Math.min(padTop, padBottom) * 2 > padHeight) {\n          padTop = padHeight / 2;\n          padBottom = padHeight / 2;\n        } else if (padTop > padBottom) {\n          padTop = padHeight - padBottom;\n        } else {\n          padBottom = padHeight - padTop;\n        }\n      }\n      if (2 * newRadius + horizontalPadding > seriesBox.width) {\n        const padWidth = seriesBox.width - 2 * newRadius;\n        if (Math.min(padLeft, padRight) * 2 > padWidth) {\n          padLeft = padWidth / 2;\n          padRight = padWidth / 2;\n        } else if (padLeft > padRight) {\n          padLeft = padWidth - padRight;\n        } else {\n          padRight = padWidth - padLeft;\n        }\n      }\n    }\n    const newWidth = padLeft + 2 * newRadius + padRight;\n    const newHeight = padTop + 2 * newRadius + padBottom;\n    return {\n      centerX: seriesBox.x + (seriesBox.width - newWidth) / 2 + padLeft + newRadius,\n      centerY: seriesBox.y + (seriesBox.height - newHeight) / 2 + padTop + newRadius,\n      radius: newRadius\n    };\n  }\n};\nPolarChart.className = \"PolarChart\";\nPolarChart.type = \"polar\";\nfunction isPolarSeries(series) {\n  return series instanceof PolarSeries;\n}\nfunction isPolarAxis(axis) {\n  return axis instanceof PolarAxis;\n}\n\n// packages/ag-charts-community/src/chart/standaloneChart.ts\nvar StandaloneChart = class extends Chart {\n  constructor(options, resources) {\n    super(options, resources);\n  }\n  getChartType() {\n    return \"standalone\";\n  }\n  performLayout(ctx) {\n    const { seriesRoot, annotationRoot, highlightRoot } = this;\n    const { layoutBox } = ctx;\n    const seriesRect = layoutBox.clone();\n    layoutBox.shrink(this.seriesArea.padding.toJson());\n    this.seriesRect = layoutBox;\n    this.animationRect = layoutBox;\n    for (const group of [seriesRoot, annotationRoot, highlightRoot]) {\n      group.translationX = Math.floor(layoutBox.x);\n      group.translationY = Math.floor(layoutBox.y);\n    }\n    seriesRoot.visible = this.series[0].visible;\n    this.ctx.layoutManager.emitLayoutComplete(ctx, {\n      series: { visible: true, rect: seriesRect, paddedRect: layoutBox }\n    });\n  }\n  getAriaLabel() {\n    const caption = this.getCaptionText();\n    return this.ctx.localeManager.t(\"ariaAnnounceHierarchyChart\", { caption });\n  }\n};\nStandaloneChart.className = \"StandaloneChart\";\nStandaloneChart.type = \"standalone\";\n\n// packages/ag-charts-community/src/chart/series/topology/mercatorScale.ts\nvar radsInDeg = Math.PI / 180;\nvar lonX = (lon) => lon * radsInDeg;\nvar latY = (lat) => -Math.log(Math.tan(Math.PI * 0.25 + lat * radsInDeg * 0.5));\nvar xLon = (x) => x / radsInDeg;\nvar yLat = (y) => (Math.atan(Math.exp(-y)) - Math.PI * 0.25) / (radsInDeg * 0.5);\nvar MercatorScale = class _MercatorScale {\n  constructor(domain, range3) {\n    this.domain = domain;\n    this.range = range3;\n    this.type = \"mercator\";\n    this.bounds = _MercatorScale.bounds(domain);\n  }\n  static bounds(domain) {\n    const [[lon0, lat0], [lon1, lat1]] = domain;\n    const x0 = lonX(lon0);\n    const y0 = latY(lat0);\n    const x1 = lonX(lon1);\n    const y1 = latY(lat1);\n    return new BBox(Math.min(x0, x1), Math.min(y0, y1), Math.abs(x1 - x0), Math.abs(y1 - y0));\n  }\n  static fixedScale() {\n    return new _MercatorScale(\n      [\n        [xLon(0), yLat(0)],\n        [xLon(1), yLat(1)]\n      ],\n      [\n        [0, 0],\n        [1, 1]\n      ]\n    );\n  }\n  convert([lon, lat]) {\n    const [[x0, y0], [x1, y1]] = this.range;\n    const xScale = (x1 - x0) / this.bounds.width;\n    const yScale = (y1 - y0) / this.bounds.height;\n    return [(lonX(lon) - this.bounds.x) * xScale + x0, (latY(lat) - this.bounds.y) * yScale + y0];\n  }\n  invert([x, y]) {\n    const [[x0, y0], [x1, y1]] = this.range;\n    const xScale = (x1 - x0) / this.bounds.width;\n    const yScale = (y1 - y0) / this.bounds.height;\n    return [xLon((x - x0) / xScale + this.bounds.x), yLat((y - y0) / yScale + this.bounds.y)];\n  }\n};\n\n// packages/ag-charts-community/src/chart/topologyChart.ts\nfunction isTopologySeries(series) {\n  return series.type === \"map-shape\" || series.type === \"map-line\" || series.type === \"map-marker\" || series.type === \"map-shape-background\" || series.type === \"map-line-background\";\n}\nvar TopologyChart = class extends Chart {\n  constructor(options, resources) {\n    super(options, resources);\n    this.xAxis = new NumberAxis(this.getModuleContext());\n    this.xAxis.position = \"bottom\";\n    this.yAxis = new NumberAxis(this.getModuleContext());\n    this.yAxis.position = \"left\";\n    this.ctx.zoomManager.updateAxes([this.xAxis, this.yAxis]);\n  }\n  getChartType() {\n    return \"topology\";\n  }\n  async updateData() {\n    await super.updateData();\n    const { topology } = this.getOptions();\n    this.series.forEach((series) => {\n      if (isTopologySeries(series)) {\n        series.setChartTopology(topology);\n      }\n    });\n  }\n  performLayout(ctx) {\n    const { seriesRoot, annotationRoot, highlightRoot } = this;\n    const { layoutBox } = ctx;\n    const seriesRect = layoutBox.clone();\n    layoutBox.shrink(this.seriesArea.padding.toJson());\n    this.seriesRect = layoutBox;\n    this.animationRect = layoutBox;\n    const mapSeries = this.series.filter(isTopologySeries);\n    const combinedBbox = mapSeries.reduce((combined, series) => {\n      if (!series.visible)\n        return combined;\n      const bbox = series.topologyBounds;\n      if (bbox == null)\n        return combined;\n      if (combined == null)\n        return bbox;\n      combined.merge(bbox);\n      return combined;\n    }, void 0);\n    let scale2;\n    if (combinedBbox != null) {\n      const { lon0, lat0, lon1, lat1 } = combinedBbox;\n      const domain = [\n        [lon0, lat0],\n        [lon1, lat1]\n      ];\n      const bounds = MercatorScale.bounds(domain);\n      const { width: width2, height: height2 } = layoutBox;\n      const viewBoxScale = Math.min(width2 / bounds.width, height2 / bounds.height);\n      const viewBoxWidth = bounds.width * viewBoxScale;\n      const viewBoxHeight = bounds.height * viewBoxScale;\n      const viewBoxOriginX = (width2 - viewBoxWidth) / 2;\n      const viewBoxOriginY = (height2 - viewBoxHeight) / 2;\n      const x0 = viewBoxOriginX;\n      const y0 = viewBoxOriginY;\n      const x1 = viewBoxOriginX + viewBoxWidth;\n      const y1 = viewBoxOriginY + viewBoxHeight;\n      const xZoom = this.ctx.zoomManager.getAxisZoom(this.xAxis.id);\n      const yZoom = this.ctx.zoomManager.getAxisZoom(this.yAxis.id);\n      const xSpan = (x1 - x0) / (xZoom.max - xZoom.min);\n      const xStart = x0 - xSpan * xZoom.min;\n      const ySpan = (y1 - y0) / (1 - yZoom.min - (1 - yZoom.max));\n      const yStart = y0 - ySpan * (1 - yZoom.max);\n      scale2 = new MercatorScale(domain, [\n        [xStart, yStart],\n        [xStart + xSpan, yStart + ySpan]\n      ]);\n    }\n    mapSeries.forEach((series) => {\n      series.scale = scale2;\n    });\n    const seriesVisible = this.series.some((s) => s.visible);\n    seriesRoot.visible = seriesVisible;\n    for (const group of [seriesRoot, annotationRoot, highlightRoot]) {\n      group.translationX = Math.floor(layoutBox.x);\n      group.translationY = Math.floor(layoutBox.y);\n      group.setClipRect(layoutBox.clone());\n    }\n    this.ctx.layoutManager.emitLayoutComplete(ctx, {\n      series: { visible: seriesVisible, rect: seriesRect, paddedRect: layoutBox }\n    });\n  }\n};\nTopologyChart.className = \"TopologyChart\";\nTopologyChart.type = \"topology\";\n\n// packages/ag-charts-community/src/api/preset/presetUtils.ts\nfunction assertEmpty(_t) {\n}\nvar IGNORED_PROP = Symbol(\"IGNORED_PROP\");\nfunction pickProps(opts, values) {\n  const out = {};\n  for (const key in values) {\n    const value = values[key];\n    if (value !== IGNORED_PROP && Object.hasOwn(opts, key)) {\n      out[key] = value;\n    }\n  }\n  return out;\n}\n\n// packages/ag-charts-community/src/api/preset/gauge.ts\nfunction isRadialGauge(opts) {\n  return opts.type === \"radial-gauge\";\n}\nfunction isLinearGauge(opts) {\n  return opts.type === \"linear-gauge\";\n}\nfunction radialGaugeOptions(opts) {\n  const {\n    animation,\n    background,\n    container,\n    contextMenu,\n    footnote,\n    height: height2,\n    listeners,\n    locale,\n    minHeight,\n    minWidth,\n    padding,\n    subtitle,\n    theme,\n    title,\n    width: width2,\n    type,\n    cursor,\n    nodeClickRange,\n    tooltip,\n    value,\n    scale: scale2 = {},\n    startAngle,\n    endAngle,\n    highlightStyle,\n    segmentation,\n    bar,\n    needle,\n    targets,\n    outerRadius,\n    innerRadius,\n    outerRadiusRatio,\n    innerRadiusRatio,\n    cornerRadius,\n    cornerMode,\n    label,\n    secondaryLabel,\n    spacing,\n    ...rest\n  } = opts;\n  assertEmpty(rest);\n  const {\n    fills: scaleFills,\n    fillMode: scaleFillMode,\n    fill: scaleFill,\n    fillOpacity: scaleFillOpacity,\n    stroke: scaleStroke,\n    strokeWidth: scaleStrokeWidth,\n    strokeOpacity: scaleStrokeOpacity,\n    lineDash: scaleLineDash,\n    lineDashOffset: scaleLineDashOffset,\n    min: scaleMin = 0,\n    max: scaleMax = 1,\n    interval: scaleInterval = {},\n    label: scaleLabel = {},\n    ...scaleRest\n  } = scale2;\n  assertEmpty(scaleRest);\n  const chartOpts = pickProps(opts, {\n    animation,\n    background,\n    container,\n    contextMenu,\n    footnote,\n    height: height2,\n    listeners,\n    locale,\n    minHeight,\n    minWidth,\n    padding,\n    subtitle,\n    theme,\n    title,\n    width: width2\n  });\n  const scaleOpts = pickProps(scale2, {\n    fills: scaleFills,\n    fillMode: scaleFillMode,\n    fill: scaleFill,\n    fillOpacity: scaleFillOpacity,\n    stroke: scaleStroke,\n    strokeWidth: scaleStrokeWidth,\n    strokeOpacity: scaleStrokeOpacity,\n    lineDash: scaleLineDash,\n    lineDashOffset: scaleLineDashOffset\n  });\n  const seriesOpts = pickProps(opts, {\n    startAngle: IGNORED_PROP,\n    endAngle: IGNORED_PROP,\n    needle: needle != null ? { enabled: true, ...needle } : IGNORED_PROP,\n    scale: scaleOpts,\n    type,\n    cursor,\n    nodeClickRange,\n    listeners,\n    tooltip,\n    value,\n    highlightStyle,\n    segmentation,\n    bar,\n    targets,\n    outerRadius,\n    innerRadius,\n    outerRadiusRatio,\n    innerRadiusRatio,\n    cornerRadius,\n    cornerMode,\n    label,\n    secondaryLabel,\n    spacing,\n    ...rest\n  });\n  const axesOpts = [\n    {\n      type: \"angle-number\",\n      min: scaleMin,\n      max: scaleMax,\n      startAngle,\n      endAngle,\n      interval: scaleInterval ?? {},\n      label: scaleLabel ?? {}\n    },\n    { type: \"radius-number\" }\n  ];\n  return {\n    ...chartOpts,\n    series: [seriesOpts],\n    axes: axesOpts\n  };\n}\nfunction linearGaugeOptions(opts) {\n  const {\n    animation,\n    background,\n    container,\n    contextMenu,\n    footnote,\n    height: height2,\n    listeners,\n    locale,\n    minHeight,\n    minWidth,\n    padding,\n    subtitle,\n    theme,\n    title,\n    width: width2,\n    type,\n    cursor,\n    nodeClickRange,\n    tooltip,\n    value,\n    scale: scale2 = {},\n    direction = \"vertical\",\n    thickness,\n    highlightStyle,\n    segmentation,\n    bar,\n    targets,\n    cornerRadius,\n    cornerMode,\n    label,\n    ...rest\n  } = opts;\n  assertEmpty(rest);\n  const {\n    fills: scaleFills,\n    fillMode: scaleFillMode,\n    fill: scaleFill,\n    fillOpacity: scaleFillOpacity,\n    stroke: scaleStroke,\n    strokeWidth: scaleStrokeWidth,\n    strokeOpacity: scaleStrokeOpacity,\n    lineDash: scaleLineDash,\n    lineDashOffset: scaleLineDashOffset,\n    min: scaleMin = 0,\n    max: scaleMax = 1,\n    interval: scaleInterval = {},\n    label: scaleLabel = {},\n    ...scaleRest\n  } = scale2;\n  assertEmpty(scaleRest);\n  const chartOpts = pickProps(opts, {\n    animation,\n    background,\n    container,\n    contextMenu,\n    footnote,\n    height: height2,\n    listeners,\n    locale,\n    minHeight,\n    minWidth,\n    padding,\n    subtitle,\n    theme,\n    title,\n    width: width2\n  });\n  const scaleOpts = pickProps(scale2, {\n    fills: scaleFills,\n    fillMode: scaleFillMode,\n    fill: scaleFill,\n    fillOpacity: scaleFillOpacity,\n    stroke: scaleStroke,\n    strokeWidth: scaleStrokeWidth,\n    strokeOpacity: scaleStrokeOpacity,\n    lineDash: scaleLineDash,\n    lineDashOffset: scaleLineDashOffset\n  });\n  const seriesOpts = pickProps(opts, {\n    scale: scaleOpts,\n    type,\n    cursor,\n    nodeClickRange,\n    listeners,\n    tooltip,\n    value,\n    direction,\n    thickness,\n    highlightStyle,\n    segmentation,\n    bar,\n    targets,\n    cornerRadius,\n    cornerMode,\n    label,\n    ...rest\n  });\n  const { placement: labelPlacement, ...axisLabel } = scaleLabel;\n  let mainAxisPosition;\n  let crossAxisPosition;\n  const horizontal = direction === \"horizontal\";\n  if (horizontal) {\n    mainAxisPosition = labelPlacement === \"before\" ? \"top\" : \"bottom\";\n    crossAxisPosition = \"left\";\n  } else {\n    mainAxisPosition = labelPlacement === \"after\" ? \"right\" : \"left\";\n    crossAxisPosition = \"bottom\";\n  }\n  const mainAxis = {\n    type: \"number\",\n    position: mainAxisPosition,\n    min: scaleMin,\n    max: scaleMax,\n    reverse: !horizontal,\n    interval: scaleInterval,\n    label: axisLabel,\n    nice: false\n  };\n  const crossAxis = {\n    type: \"number\",\n    position: crossAxisPosition,\n    min: 0,\n    max: 1,\n    label: {\n      enabled: false\n    }\n  };\n  const axesOpts = horizontal ? [mainAxis, crossAxis] : [crossAxis, mainAxis];\n  return {\n    ...chartOpts,\n    series: [seriesOpts],\n    axes: axesOpts\n  };\n}\nfunction applyThemeDefaults(opts, presetTheme) {\n  if (presetTheme == null)\n    return opts;\n  const { targets: targetsTheme, ...gaugeTheme } = presetTheme;\n  opts = mergeDefaults(opts, gaugeTheme);\n  if (opts.targets != null && targetsTheme != null) {\n    opts.targets = mergeArrayDefaults(opts.targets, targetsTheme);\n  }\n  return opts;\n}\nfunction gauge(opts, presetTheme) {\n  if (isRadialGauge(opts)) {\n    const radialGaugeOpts = applyThemeDefaults(opts, presetTheme);\n    return radialGaugeOptions(radialGaugeOpts);\n  } else if (isLinearGauge(opts)) {\n    const linearGaugeOpts = applyThemeDefaults(opts, presetTheme);\n    return linearGaugeOptions(linearGaugeOpts);\n  }\n  const {\n    animation,\n    background,\n    container,\n    contextMenu,\n    footnote,\n    height: height2,\n    listeners,\n    locale,\n    minHeight,\n    minWidth,\n    padding,\n    subtitle,\n    theme,\n    title,\n    width: width2\n  } = opts;\n  return pickProps(opts, {\n    animation,\n    background,\n    container,\n    contextMenu,\n    footnote,\n    height: height2,\n    listeners,\n    locale,\n    minHeight,\n    minWidth,\n    padding,\n    subtitle,\n    theme,\n    title,\n    width: width2\n  });\n}\n\n// packages/ag-charts-community/src/api/preset/priceVolumePreset.ts\nfunction fromTheme(theme, cb) {\n  if (isObject(theme)) {\n    return cb(theme);\n  }\n}\nvar chartTypes2 = [\"ohlc\", \"line\", \"step-line\", \"hlc\", \"high-low\", \"candlestick\", \"hollow-candlestick\"];\nfunction priceVolume(opts, _presetTheme, getTheme) {\n  const {\n    xKey,\n    dateKey = xKey ?? \"date\",\n    highKey = \"high\",\n    openKey = \"open\",\n    lowKey = \"low\",\n    closeKey = \"close\",\n    volumeKey = \"volume\",\n    chartType: chartType2 = \"candlestick\",\n    navigator: navigator2 = false,\n    volume = true,\n    rangeToolbar,\n    rangeButtons = rangeToolbar ?? true,\n    statusBar = true,\n    annotations: annotations2,\n    toolbar = annotations2 ?? true,\n    zoom: zoom2 = true,\n    theme,\n    data,\n    ...unusedOpts\n  } = opts;\n  if (xKey != null) {\n    Logger.warnOnce(\"Property [xKey] is deprecated, use [dateKey] instead.\");\n  }\n  if (rangeToolbar != null) {\n    Logger.warnOnce(\"Property [rangeToolbar] is deprecated, use [rangeButtons] instead.\");\n  }\n  if (annotations2 != null) {\n    Logger.warnOnce(\"Property [annotations] is deprecated, use [toolbar] instead.\");\n  }\n  const priceSeries = createPriceSeries(theme, chartType2, dateKey, highKey, lowKey, openKey, closeKey);\n  const volumeSeries = createVolumeSeries(theme, getTheme, openKey, closeKey, volume, volumeKey);\n  const miniChart = volume ? {\n    miniChart: {\n      enabled: navigator2,\n      series: [\n        {\n          type: \"line\",\n          xKey: dateKey,\n          yKey: volumeKey,\n          marker: { enabled: false }\n        }\n      ]\n    }\n  } : null;\n  const navigatorOpts = {\n    navigator: {\n      enabled: navigator2,\n      ...miniChart\n    }\n  };\n  const annotationOpts = {\n    annotations: {\n      enabled: toolbar,\n      // @ts-expect-error\n      data,\n      xKey: dateKey,\n      volumeKey: volume ? volumeKey : void 0\n    }\n  };\n  const statusBarOpts = statusBar ? {\n    statusBar: {\n      enabled: true,\n      data,\n      highKey,\n      openKey,\n      lowKey,\n      closeKey,\n      volumeKey: volume ? volumeKey : void 0\n    }\n  } : null;\n  const zoomOpts = {\n    zoom: {\n      enabled: zoom2,\n      // @ts-expect-error\n      enableIndependentAxes: true\n    }\n  };\n  const toolbarOpts = {\n    chartToolbar: { enabled: true },\n    toolbar: {\n      seriesType: {\n        enabled: toolbar\n      },\n      annotationOptions: {\n        enabled: toolbar\n      },\n      annotations: {\n        enabled: toolbar\n      },\n      ranges: {\n        enabled: rangeButtons\n      }\n    }\n  };\n  const volumeAxis = volume ? [\n    {\n      type: \"number\",\n      position: \"left\",\n      keys: [volumeKey],\n      label: { enabled: false },\n      crosshair: { enabled: false },\n      gridLine: { enabled: false },\n      nice: false,\n      // @ts-expect-error\n      layoutConstraints: {\n        stacked: false,\n        width: 20,\n        unit: \"percentage\",\n        align: \"end\"\n      }\n    }\n  ] : [];\n  return {\n    theme: {\n      baseTheme: typeof theme === \"string\" ? theme : \"ag-financial\",\n      ...mergeDefaults(typeof theme === \"object\" ? theme : null, {\n        overrides: {\n          common: {\n            title: { padding: 4 },\n            padding: {\n              top: 6,\n              right: 8,\n              bottom: 5\n            }\n          }\n        }\n      })\n    },\n    animation: { enabled: false },\n    legend: { enabled: false },\n    series: [...volumeSeries, ...priceSeries],\n    axes: [\n      {\n        type: \"number\",\n        position: \"right\",\n        keys: [openKey, closeKey, highKey, lowKey],\n        interval: {\n          maxSpacing: fromTheme(theme, (t) => t.overrides?.common?.axes?.number?.interval?.maxSpacing) ?? 45\n        },\n        label: {\n          format: fromTheme(theme, (t) => t.overrides?.common?.axes?.number?.label?.format) ?? \".2f\"\n        },\n        crosshair: {\n          enabled: true,\n          snap: false\n        },\n        // @ts-expect-error\n        layoutConstraints: {\n          stacked: false,\n          width: 100,\n          unit: \"percentage\",\n          align: \"start\"\n        }\n      },\n      ...volumeAxis,\n      {\n        type: \"ordinal-time\",\n        position: \"bottom\",\n        line: {\n          enabled: false\n        },\n        label: {\n          enabled: true\n        },\n        crosshair: {\n          enabled: true\n        }\n      }\n    ],\n    tooltip: { enabled: false },\n    data,\n    ...annotationOpts,\n    ...navigatorOpts,\n    ...statusBarOpts,\n    ...zoomOpts,\n    ...toolbarOpts,\n    ...unusedOpts\n  };\n}\nfunction createVolumeSeries(theme, getTheme, openKey, closeKey, volume, volumeKey) {\n  if (!volume)\n    return [];\n  const barSeriesFill = fromTheme(theme, (t) => t.overrides?.bar?.series?.fill);\n  const itemStyler = barSeriesFill ? { fill: barSeriesFill } : {\n    itemStyler({ datum }) {\n      const { up, down } = getTheme().palette;\n      return { fill: datum[openKey] < datum[closeKey] ? up?.fill : down?.fill };\n    }\n  };\n  return [\n    {\n      type: \"bar\",\n      xKey: \"date\",\n      yKey: volumeKey,\n      // @ts-expect-error\n      focusPriority: 1,\n      tooltip: { enabled: false },\n      highlight: { enabled: false },\n      fillOpacity: fromTheme(theme, (t) => t.overrides?.bar?.series?.fillOpacity) ?? 0.5,\n      ...itemStyler\n    }\n  ];\n}\nvar RANGE_AREA_TYPE = \"range-area\";\nfunction createPriceSeries(theme, chartType2, xKey, highKey, lowKey, openKey, closeKey) {\n  if (chartType2 === RANGE_AREA_TYPE) {\n    Logger.warnOnce(`type '${chartType2}' is deprecated, use 'hlc' chart type instead`);\n    chartType2 = \"hlc\";\n  }\n  const keys = {\n    xKey,\n    openKey,\n    closeKey,\n    highKey,\n    lowKey\n  };\n  const singleKeys = {\n    xKey,\n    yKey: closeKey\n  };\n  const common = {\n    pickOutsideVisibleMinorAxis: true\n  };\n  switch (chartType2 ?? \"candlestick\") {\n    case \"ohlc\":\n      return [\n        {\n          type: \"ohlc\",\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          ...keys\n        }\n      ];\n    case \"line\":\n      return [\n        {\n          type: \"line\",\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          ...singleKeys,\n          stroke: fromTheme(theme, (t) => t.overrides?.line?.series?.stroke) ?? PALETTE_NEUTRAL_STROKE,\n          marker: fromTheme(theme, (t) => t.overrides?.line?.series?.marker) ?? { enabled: false }\n        }\n      ];\n    case \"step-line\":\n      return [\n        {\n          type: \"line\",\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          ...singleKeys,\n          stroke: fromTheme(theme, (t) => t.overrides?.line?.series?.stroke) ?? PALETTE_NEUTRAL_STROKE,\n          interpolation: fromTheme(theme, (t) => t.overrides?.line?.series?.interpolation) ?? {\n            type: \"step\"\n          },\n          marker: fromTheme(theme, (t) => t.overrides?.line?.series?.marker) ?? { enabled: false }\n        }\n      ];\n    case \"hlc\": {\n      const rangeAreaColors = getThemeColors(RANGE_AREA_TYPE, theme);\n      return [\n        {\n          type: RANGE_AREA_TYPE,\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          xKey,\n          yHighKey: highKey,\n          yLowKey: closeKey,\n          fill: rangeAreaColors.fill ?? PALETTE_UP_FILL,\n          stroke: rangeAreaColors.stroke ?? PALETTE_UP_STROKE,\n          fillOpacity: fromTheme(theme, (t) => t.overrides?.[\"range-area\"]?.series?.fillOpacity) ?? 0.3,\n          strokeWidth: fromTheme(theme, (t) => t.overrides?.[\"range-area\"]?.series?.strokeWidth) ?? 2\n        },\n        {\n          type: RANGE_AREA_TYPE,\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          xKey,\n          yHighKey: closeKey,\n          yLowKey: lowKey,\n          fill: rangeAreaColors.fill ?? PALETTE_DOWN_FILL,\n          stroke: rangeAreaColors.stroke ?? PALETTE_DOWN_STROKE,\n          fillOpacity: fromTheme(theme, (t) => t.overrides?.[\"range-area\"]?.series?.fillOpacity) ?? 0.3,\n          strokeWidth: fromTheme(theme, (t) => t.overrides?.[\"range-area\"]?.series?.strokeWidth) ?? 2\n        },\n        {\n          type: \"line\",\n          ...common,\n          ...singleKeys,\n          stroke: fromTheme(theme, (t) => t.overrides?.line?.series?.stroke) ?? PALETTE_ALT_NEUTRAL_STROKE,\n          strokeWidth: fromTheme(theme, (t) => t.overrides?.line?.series?.strokeWidth) ?? 2,\n          marker: fromTheme(theme, (t) => t.overrides?.line?.series?.marker) ?? { enabled: false }\n        }\n      ];\n    }\n    case \"high-low\": {\n      const rangeBarColors = getThemeColors(\"range-bar\", theme);\n      return [\n        {\n          type: \"range-bar\",\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          xKey,\n          yHighKey: highKey,\n          yLowKey: lowKey,\n          fill: rangeBarColors.fill ?? PALETTE_NEUTRAL_FILL,\n          stroke: rangeBarColors.stroke ?? PALETTE_NEUTRAL_STROKE,\n          tooltip: {\n            range: \"nearest\"\n          }\n        }\n      ];\n    }\n    case \"candlestick\":\n      return [\n        {\n          type: \"candlestick\",\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          ...keys\n        }\n      ];\n    case \"hollow-candlestick\": {\n      const item = fromTheme(theme, (t) => t.overrides?.candlestick?.series?.item);\n      return [\n        {\n          type: \"candlestick\",\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          ...keys,\n          item: {\n            up: {\n              fill: item?.up?.fill ?? \"transparent\"\n            }\n          }\n        }\n      ];\n    }\n    default:\n      Logger.warnOnce(`unknown chart type: ${chartType2}; expected one of: ${chartTypes2.join(\", \")}`);\n      return [\n        {\n          type: \"candlestick\",\n          // @ts-expect-error\n          focusPriority: 0,\n          ...common,\n          ...keys\n        }\n      ];\n  }\n}\nfunction getThemeColors(seriesType2, theme) {\n  const fill = fromTheme(theme, (t) => t.overrides?.[seriesType2]?.series?.fill);\n  const stroke = fromTheme(theme, (t) => t.overrides?.[seriesType2]?.series?.stroke);\n  return { fill, stroke };\n}\n\n// packages/ag-charts-community/src/api/preset/sparkline.ts\nvar commonAxisProperties = {\n  line: {\n    enabled: false\n  },\n  title: {\n    enabled: false\n  },\n  label: {\n    enabled: false\n  },\n  crosshair: {\n    enabled: false,\n    strokeOpacity: 0.25,\n    lineDash: [0],\n    label: {\n      enabled: false\n    }\n  }\n};\nvar numericAxisProperties = {\n  ...commonAxisProperties,\n  nice: false\n};\nvar bottomCrossHairAxisProperties = {\n  bottom: {\n    crosshair: {\n      enabled: IS_ENTERPRISE\n    }\n  }\n};\nvar crossHairAxes = {\n  category: bottomCrossHairAxisProperties,\n  number: bottomCrossHairAxisProperties,\n  log: bottomCrossHairAxisProperties,\n  time: bottomCrossHairAxisProperties\n};\nvar crossHairTooltip = {\n  position: {\n    type: \"sparkline\"\n  }\n};\nvar SPARKLINE_THEME = {\n  overrides: {\n    common: {\n      animation: {\n        enabled: false\n      },\n      padding: {\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0\n      },\n      axes: {\n        number: {\n          ...numericAxisProperties,\n          interval: {\n            values: [0]\n          }\n        },\n        log: {\n          ...numericAxisProperties\n        },\n        time: {\n          ...numericAxisProperties\n        },\n        category: {\n          ...commonAxisProperties,\n          gridLine: {\n            enabled: false\n          }\n        }\n      }\n    },\n    bar: {\n      series: {\n        // @ts-expect-error\n        sparklineMode: true\n      },\n      tooltip: {\n        range: \"nearest\"\n      }\n    },\n    line: {\n      seriesArea: {\n        padding: {\n          top: 2,\n          right: 2,\n          bottom: 2,\n          left: 2\n        }\n      },\n      axes: crossHairAxes,\n      series: {\n        strokeWidth: 1,\n        marker: {\n          enabled: false,\n          size: 3\n        },\n        tooltip: crossHairTooltip\n      }\n    },\n    area: {\n      seriesArea: {\n        padding: {\n          top: 1,\n          right: 0,\n          bottom: 1,\n          left: 0\n        }\n      },\n      axes: crossHairAxes,\n      series: {\n        strokeWidth: 1,\n        fillOpacity: 0.4,\n        tooltip: crossHairTooltip\n      }\n    }\n  }\n};\nfunction setInitialBaseTheme(baseTheme, initialBaseTheme) {\n  if (typeof baseTheme === \"string\") {\n    return {\n      ...initialBaseTheme,\n      baseTheme\n    };\n  }\n  if (baseTheme != null) {\n    return {\n      ...baseTheme,\n      // @ts-expect-error internal implementation\n      baseTheme: setInitialBaseTheme(baseTheme.baseTheme, initialBaseTheme)\n    };\n  }\n  return initialBaseTheme;\n}\nfunction sparkline(opts) {\n  const {\n    background,\n    container,\n    height: height2,\n    listeners,\n    locale,\n    minHeight,\n    minWidth,\n    padding,\n    width: width2,\n    theme: baseTheme,\n    data,\n    xAxis,\n    yAxis,\n    ...optsRest\n  } = opts;\n  assertEmpty(optsRest);\n  const seriesOptions = optsRest;\n  const swapAxes = seriesOptions.type !== \"bar\" || seriesOptions.direction !== \"horizontal\";\n  const chartOpts = pickProps(opts, {\n    background,\n    container,\n    height: height2,\n    listeners,\n    locale,\n    minHeight,\n    minWidth,\n    padding,\n    width: width2,\n    data,\n    xAxis: IGNORED_PROP,\n    yAxis: IGNORED_PROP,\n    theme: IGNORED_PROP\n  });\n  chartOpts.theme = setInitialBaseTheme(baseTheme, SPARKLINE_THEME);\n  chartOpts.series = [seriesOptions];\n  chartOpts.axes = swapAxes ? [\n    { type: \"number\", ...yAxis, position: \"left\" },\n    { type: \"category\", ...xAxis, position: \"bottom\" }\n  ] : [\n    { type: \"category\", ...xAxis, position: \"left\" },\n    { type: \"number\", ...yAxis, position: \"bottom\" }\n  ];\n  return chartOpts;\n}\n\n// packages/ag-charts-community/src/api/preset/presets.ts\nvar PRESETS = {\n  \"price-volume\": priceVolume,\n  gauge,\n  sparkline\n};\n\n// packages/ag-charts-community/src/chart/factory/processEnterpriseOptions.ts\nfunction removeUsedEnterpriseOptions(options, silent) {\n  let usedOptions = [];\n  const isGaugeChart = isAgGaugeChartOptions(options);\n  const optsType = optionsType(options);\n  const optionsChartType = optsType ? chartTypes.get(optsType) : \"unknown\";\n  for (const {\n    type,\n    chartTypes: moduleChartTypes,\n    optionsKey,\n    optionsInnerKey,\n    identifier\n  } of EXPECTED_ENTERPRISE_MODULES) {\n    if (optionsChartType !== \"unknown\" && !moduleChartTypes.includes(optionsChartType))\n      continue;\n    if (type === \"root\" || type === \"legend\") {\n      const optionValue = options[optionsKey];\n      if (optionValue == null)\n        continue;\n      if (!optionsInnerKey) {\n        usedOptions.push(optionsKey);\n        delete options[optionsKey];\n      } else if (optionValue[optionsInnerKey]) {\n        usedOptions.push(`${optionsKey}.${optionsInnerKey}`);\n        delete optionValue[optionsInnerKey];\n      }\n    } else if (type === \"axis\") {\n      if (!(\"axes\" in options) || !options.axes?.some((axis) => axis.type === identifier))\n        continue;\n      usedOptions.push(`axis[type=${identifier}]`);\n      options.axes = options.axes.filter((axis) => axis.type !== identifier);\n    } else if (type === \"axis-option\") {\n      if (!(\"axes\" in options) || !options.axes?.some((axis) => axis[optionsKey]))\n        continue;\n      usedOptions.push(`axis.${optionsKey}`);\n      options.axes.forEach((axis) => {\n        if (axis[optionsKey]) {\n          delete axis[optionsKey];\n        }\n      });\n    } else if (type === \"series\") {\n      if (!options.series?.some((series) => series.type === identifier))\n        continue;\n      usedOptions.push(`series[type=${identifier}]`);\n      options.series = options.series.filter((series) => series.type !== identifier);\n    } else if (type === \"series-option\") {\n      if (!options.series?.some((series) => series[optionsKey]))\n        continue;\n      usedOptions.push(`series.${optionsKey}`);\n      options.series.forEach((series) => {\n        if (series[optionsKey]) {\n          delete series[optionsKey];\n        }\n      });\n    }\n  }\n  if (usedOptions.length && !silent) {\n    if (isGaugeChart) {\n      usedOptions = [\"AgCharts.createGauge\"];\n    }\n    let enterprisePackageName = \"ag-charts-enterprise\";\n    let enterpriseReferenceUrl = \"https://ag-grid.com/charts/javascript/installation/\";\n    if (options.mode === \"integrated\") {\n      enterprisePackageName = \"ag-grid-charts-enterprise' or 'ag-grid-enterprise/charts-enterprise\";\n      enterpriseReferenceUrl = \"https://www.ag-grid.com/javascript-data-grid/integrated-charts-installation/\";\n    }\n    Logger.warnOnce(\n      [\n        `unable to use these enterprise features as '${enterprisePackageName}' has not been loaded:`,\n        \"\",\n        ...usedOptions,\n        \"\",\n        `See: ${enterpriseReferenceUrl}`\n      ].join(\"\\n\")\n    );\n  }\n}\n\n// packages/ag-charts-community/src/util/string.util.ts\nfunction stringifyValue(value, maxLength = Infinity) {\n  switch (typeof value) {\n    case \"undefined\":\n      return \"undefined\";\n    case \"number\":\n      if (isNaN(value)) {\n        return \"NaN\";\n      } else if (value === Infinity) {\n        return \"Infinity\";\n      } else if (value === -Infinity) {\n        return \"-Infinity\";\n      }\n    default:\n      value = JSON.stringify(value);\n      if (value.length > maxLength) {\n        return `${value.slice(0, maxLength)}... (+${value.length - maxLength} characters)`;\n      }\n      return value;\n  }\n}\n\n// packages/ag-charts-community/src/util/validate.ts\nvar descriptionSymbol = Symbol(\"description\");\nvar requiredSymbol = Symbol(\"required\");\nfunction isValid(options, optionsDefs, path) {\n  const { errors } = validate(options, optionsDefs, path);\n  for (const { message } of errors) {\n    Logger.warn(message);\n  }\n  return errors.length === 0;\n}\nfunction validateMessage(path, value, validatorOrDefs) {\n  const description = isString(validatorOrDefs) ? validatorOrDefs : validatorOrDefs[descriptionSymbol];\n  const expecting = description ? `; expecting ${description}` : \"\";\n  const prefix = path ? `Option \\`${path}\\`` : \"Value\";\n  return `${prefix} cannot be set to \\`${stringifyValue(value)}\\`${expecting}, ignoring.`;\n}\nfunction validate(options, optionsDefs, path = \"\") {\n  if (!isObject(options)) {\n    return {\n      valid: null,\n      errors: [{ path, value: options, message: validateMessage(path, options, \"an object\") }]\n    };\n  }\n  const optionsKeys = new Set(Object.keys(options));\n  const errors = [];\n  const valid = {};\n  function extendPath(key) {\n    if (isArray(optionsDefs)) {\n      return `${path}[${key}]`;\n    }\n    return path ? `${path}.${key}` : key;\n  }\n  for (const [key, validatorOrDefs] of Object.entries(optionsDefs)) {\n    optionsKeys.delete(key);\n    const value = options[key];\n    if (!validatorOrDefs[requiredSymbol] && typeof value === \"undefined\")\n      continue;\n    if (isFunction(validatorOrDefs)) {\n      if (validatorOrDefs(value)) {\n        valid[key] = value;\n      } else {\n        errors.push({ key, path, value, message: validateMessage(extendPath(key), value, validatorOrDefs) });\n      }\n    } else {\n      const nestedResult = validate(value, validatorOrDefs, extendPath(key));\n      valid[key] = nestedResult.valid;\n      errors.push(...nestedResult.errors);\n    }\n  }\n  for (const key of optionsKeys) {\n    errors.push({\n      key,\n      path,\n      unknown: true,\n      message: `Unknown option \\`${extendPath(key)}\\`, ignoring.`\n    });\n  }\n  return { valid, errors };\n}\nfunction attachDescription(validator, description) {\n  return Object.assign((value) => validator(value), { [descriptionSymbol]: description });\n}\nvar or = (...validators) => attachDescription(\n  (value) => validators.some((validator) => validator(value)),\n  validators.map((v) => v[descriptionSymbol]).filter(Boolean).join(\" or \")\n);\nvar array = attachDescription(isArray, \"an array\");\nvar boolean = attachDescription(isBoolean, \"a boolean\");\nvar callback = attachDescription(isFunction, \"a function\");\nvar number = attachDescription(isFiniteNumber, \"a number\");\nvar object = attachDescription(isObject, \"an object\");\nvar string = attachDescription(isString, \"a string\");\nvar numberMin = (min, inclusive = true) => attachDescription(\n  (value) => isFiniteNumber(value) && (value > min || inclusive && value === min),\n  `a number greater than ${inclusive ? \"or equal to \" : \"\"}${min}`\n);\nvar numberRange = (min, max) => attachDescription(\n  (value) => isFiniteNumber(value) && value >= min && value <= max,\n  `a number between ${min} and ${max} inclusive`\n);\nvar positiveNumber = numberMin(0);\nvar minOneNumber = numberMin(1);\nvar ratio = numberRange(0, 1);\nvar degree = numberRange(0, 360);\nvar arrayOf = (validator, description) => attachDescription(\n  (value) => isArray(value) && value.every(validator),\n  description ?? `${validator[descriptionSymbol]} array`\n);\n\n// packages/ag-charts-community/src/module/coreModulesTypes.ts\nfunction paletteType(partial) {\n  if (partial?.up || partial?.down || partial?.neutral) {\n    return \"user-full\";\n  } else if (partial?.fills || partial?.strokes) {\n    return \"user-indexed\";\n  }\n  return \"inbuilt\";\n}\n\n// packages/ag-charts-community/src/chart/themes/chartTheme.ts\nvar DEFAULT_BACKGROUND_FILL = \"white\";\nvar CHART_TYPE_CONFIG = {\n  get cartesian() {\n    return { seriesTypes: chartTypes.cartesianTypes, commonOptions: [\"zoom\", \"navigator\"] };\n  },\n  get polar() {\n    return { seriesTypes: chartTypes.polarTypes, commonOptions: [] };\n  },\n  get hierarchy() {\n    return { seriesTypes: chartTypes.hierarchyTypes, commonOptions: [] };\n  },\n  get topology() {\n    return { seriesTypes: chartTypes.topologyTypes, commonOptions: [] };\n  },\n  get \"flow-proportion\"() {\n    return { seriesTypes: chartTypes.flowProportionTypes, commonOptions: [] };\n  },\n  get standalone() {\n    return { seriesTypes: chartTypes.standaloneTypes, commonOptions: [] };\n  },\n  get gauge() {\n    return { seriesTypes: chartTypes.gaugeTypes, commonOptions: [] };\n  }\n};\nvar PRESET_OVERRIDES_TYPES = {\n  \"radial-gauge\": true,\n  \"linear-gauge\": true\n};\nfunction isPresetOverridesType(type) {\n  return PRESET_OVERRIDES_TYPES[type] === true;\n}\nvar CHART_TYPE_SPECIFIC_COMMON_OPTIONS = Object.values(CHART_TYPE_CONFIG).reduce((r, { commonOptions }) => r.concat(commonOptions), []);\nvar _ChartTheme = class _ChartTheme {\n  static getAxisDefaults(overrideDefaults) {\n    return mergeDefaults(overrideDefaults, {\n      title: {\n        enabled: false,\n        text: \"Axis Title\",\n        spacing: 25,\n        fontWeight: \"normal\" /* NORMAL */,\n        fontSize: 13 /* MEDIUM */,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_LABEL_COLOUR\n      },\n      label: {\n        fontSize: 12 /* SMALL */,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        padding: 5,\n        color: DEFAULT_LABEL_COLOUR,\n        avoidCollisions: true\n      },\n      line: {\n        enabled: true,\n        width: 1,\n        stroke: DEFAULT_AXIS_LINE_COLOUR\n      },\n      tick: {\n        enabled: false,\n        width: 1,\n        stroke: DEFAULT_AXIS_LINE_COLOUR\n      },\n      gridLine: {\n        enabled: true,\n        style: [{ stroke: DEFAULT_AXIS_GRID_COLOUR, lineDash: [] }]\n      },\n      crossLines: {\n        enabled: false,\n        fill: DEFAULT_CROSS_LINES_COLOUR,\n        stroke: DEFAULT_CROSS_LINES_COLOUR,\n        fillOpacity: 0.1,\n        strokeWidth: 1,\n        label: {\n          enabled: false,\n          fontSize: 12 /* SMALL */,\n          fontFamily: DEFAULT_FONT_FAMILY,\n          padding: 5,\n          color: DEFAULT_LABEL_COLOUR\n        }\n      },\n      crosshair: {\n        enabled: true\n      }\n    });\n  }\n  getChartDefaults() {\n    return {\n      minHeight: 300,\n      minWidth: 300,\n      background: { visible: true, fill: DEFAULT_BACKGROUND_COLOUR },\n      padding: { top: DEFAULT_PADDING, right: DEFAULT_PADDING, bottom: DEFAULT_PADDING, left: DEFAULT_PADDING },\n      keyboard: { enabled: true },\n      title: {\n        enabled: false,\n        text: \"Title\",\n        fontWeight: \"normal\" /* NORMAL */,\n        fontSize: 17 /* LARGE */,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_LABEL_COLOUR,\n        wrapping: \"hyphenate\",\n        layoutStyle: DEFAULT_CAPTION_LAYOUT_STYLE,\n        textAlign: DEFAULT_CAPTION_ALIGNMENT\n      },\n      subtitle: {\n        enabled: false,\n        text: \"Subtitle\",\n        spacing: 20,\n        fontSize: 13 /* MEDIUM */,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: DEFAULT_MUTED_LABEL_COLOUR,\n        wrapping: \"hyphenate\",\n        layoutStyle: DEFAULT_CAPTION_LAYOUT_STYLE,\n        textAlign: DEFAULT_CAPTION_ALIGNMENT\n      },\n      footnote: {\n        enabled: false,\n        text: \"Footnote\",\n        spacing: 20,\n        fontSize: 13 /* MEDIUM */,\n        fontFamily: DEFAULT_FONT_FAMILY,\n        color: \"rgb(140, 140, 140)\",\n        wrapping: \"hyphenate\",\n        layoutStyle: DEFAULT_CAPTION_LAYOUT_STYLE,\n        textAlign: DEFAULT_CAPTION_ALIGNMENT\n      },\n      legend: {\n        position: \"bottom\" /* BOTTOM */,\n        spacing: 30,\n        listeners: {},\n        toggleSeries: true,\n        item: {\n          paddingX: 16,\n          paddingY: 8,\n          marker: { size: 15, padding: 8 },\n          showSeriesStroke: true,\n          label: {\n            color: DEFAULT_LABEL_COLOUR,\n            fontSize: 12 /* SMALL */,\n            fontFamily: DEFAULT_FONT_FAMILY\n          }\n        },\n        reverseOrder: false,\n        pagination: {\n          marker: { size: 12 },\n          activeStyle: { fill: DEFAULT_LABEL_COLOUR },\n          inactiveStyle: { fill: DEFAULT_MUTED_LABEL_COLOUR },\n          highlightStyle: { fill: DEFAULT_LABEL_COLOUR },\n          label: { color: DEFAULT_LABEL_COLOUR }\n        }\n      },\n      tooltip: {\n        enabled: true,\n        darkTheme: IS_DARK_THEME,\n        delay: 0\n      },\n      overlays: { darkTheme: IS_DARK_THEME },\n      listeners: {}\n    };\n  }\n  constructor(options = {}) {\n    const { overrides, palette } = deepClone(options);\n    const defaults = this.createChartConfigPerChartType(this.getDefaults());\n    const presets = {};\n    if (overrides) {\n      this.mergeOverrides(defaults, presets, overrides);\n    }\n    const { fills, strokes, ...otherColors } = this.getDefaultColors();\n    this.palette = mergeDefaults(palette, {\n      fills: Object.values(fills),\n      strokes: Object.values(strokes),\n      ...otherColors\n    });\n    this.paletteType = paletteType(palette);\n    this.config = Object.freeze(this.templateTheme(defaults));\n    this.presets = presets;\n  }\n  mergeOverrides(defaults, presets, overrides) {\n    for (const { seriesTypes, commonOptions } of Object.values(CHART_TYPE_CONFIG)) {\n      const cleanedCommon = { ...overrides.common };\n      for (const commonKey of CHART_TYPE_SPECIFIC_COMMON_OPTIONS) {\n        if (!commonOptions.includes(commonKey)) {\n          delete cleanedCommon[commonKey];\n        }\n      }\n      if (!cleanedCommon)\n        continue;\n      for (const s of seriesTypes) {\n        const seriesType2 = s;\n        if (!isPresetOverridesType(seriesType2)) {\n          defaults[seriesType2] = mergeDefaults(cleanedCommon, defaults[seriesType2]);\n        }\n      }\n    }\n    chartTypes.seriesTypes.forEach((s) => {\n      const seriesType2 = s;\n      const seriesOverrides = overrides[seriesType2];\n      if (isPresetOverridesType(seriesType2)) {\n        presets[seriesType2] = seriesOverrides;\n      } else {\n        defaults[seriesType2] = mergeDefaults(seriesOverrides, defaults[seriesType2]);\n      }\n    });\n  }\n  createChartConfigPerChartType(config) {\n    for (const [nextType, { seriesTypes }] of Object.entries(CHART_TYPE_CONFIG)) {\n      const typeDefaults = chartDefaults.get(nextType);\n      for (const seriesType2 of seriesTypes) {\n        config[seriesType2] || (config[seriesType2] = deepClone(typeDefaults));\n      }\n    }\n    return config;\n  }\n  getDefaults() {\n    const getOverridesByType = (chartType2, seriesTypes) => {\n      const result = {};\n      const chartTypeDefaults = {\n        axes: {},\n        ...legendRegistry.getThemeTemplates(),\n        ...this.getChartDefaults(),\n        ...chartDefaults.get(chartType2)\n      };\n      for (const seriesType2 of seriesTypes) {\n        result[seriesType2] = mergeDefaults(\n          seriesRegistry.getThemeTemplate(seriesType2),\n          result[seriesType2] ?? deepClone(chartTypeDefaults)\n        );\n        const { axes } = result[seriesType2];\n        for (const axisType of axisRegistry.keys()) {\n          axes[axisType] = mergeDefaults(\n            axes[axisType],\n            axisRegistry.getThemeTemplate(axisType),\n            _ChartTheme.cartesianAxisDefault[axisType]\n          );\n        }\n      }\n      return result;\n    };\n    return mergeDefaults(\n      getOverridesByType(\"cartesian\", chartTypes.cartesianTypes),\n      getOverridesByType(\"polar\", chartTypes.polarTypes),\n      getOverridesByType(\"hierarchy\", chartTypes.hierarchyTypes),\n      getOverridesByType(\"topology\", chartTypes.topologyTypes),\n      getOverridesByType(\"flow-proportion\", chartTypes.flowProportionTypes),\n      getOverridesByType(\"standalone\", chartTypes.standaloneTypes),\n      getOverridesByType(\"gauge\", chartTypes.gaugeTypes)\n    );\n  }\n  templateTheme(themeTemplate) {\n    const themeInstance = deepClone(themeTemplate);\n    const params = this.getTemplateParameters();\n    jsonWalk(themeInstance, (node) => {\n      if (isArray(node)) {\n        for (let i = 0; i < node.length; i++) {\n          const symbol = node[i];\n          if (params.has(symbol)) {\n            node[i] = params.get(symbol);\n          }\n        }\n      } else {\n        for (const [name, value] of Object.entries(node)) {\n          if (params.has(value)) {\n            node[name] = params.get(value);\n          }\n        }\n      }\n    });\n    return deepClone(themeInstance);\n  }\n  getDefaultColors() {\n    return {\n      fills: DEFAULT_FILLS,\n      strokes: DEFAULT_STROKES,\n      up: { fill: DEFAULT_FILLS.GREEN, stroke: DEFAULT_STROKES.GREEN },\n      down: { fill: DEFAULT_FILLS.RED, stroke: DEFAULT_STROKES.RED },\n      neutral: { fill: DEFAULT_FILLS.GRAY, stroke: DEFAULT_STROKES.GRAY },\n      altUp: { fill: DEFAULT_FILLS.BLUE, stroke: DEFAULT_STROKES.BLUE },\n      altDown: { fill: DEFAULT_FILLS.ORANGE, stroke: DEFAULT_STROKES.ORANGE },\n      altNeutral: { fill: DEFAULT_FILLS.GRAY, stroke: DEFAULT_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const { isEnterprise } = enterpriseModule;\n    const params = /* @__PURE__ */ new Map();\n    params.set(IS_DARK_THEME, false);\n    params.set(IS_ENTERPRISE, isEnterprise);\n    params.set(IS_COMMUNITY, !isEnterprise);\n    params.set(DEFAULT_FONT_FAMILY, \"Verdana, sans-serif\");\n    params.set(DEFAULT_LABEL_COLOUR, \"rgb(70, 70, 70)\");\n    params.set(DEFAULT_INVERTED_LABEL_COLOUR, \"white\");\n    params.set(DEFAULT_MUTED_LABEL_COLOUR, \"rgb(140, 140, 140)\");\n    params.set(DEFAULT_AXIS_GRID_COLOUR, \"rgb(224,234,241)\");\n    params.set(DEFAULT_AXIS_LINE_COLOUR, \"rgb(195, 195, 195)\");\n    params.set(DEFAULT_CROSS_LINES_COLOUR, \"rgb(70, 70, 70)\");\n    params.set(DEFAULT_INSIDE_SERIES_LABEL_COLOUR, DEFAULT_BACKGROUND_FILL);\n    params.set(DEFAULT_BACKGROUND_COLOUR, DEFAULT_BACKGROUND_FILL);\n    params.set(DEFAULT_SHADOW_COLOUR, \"rgba(0, 0, 0, 0.5)\");\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      DEFAULT_FILLS.ORANGE,\n      DEFAULT_FILLS.YELLOW,\n      DEFAULT_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [DEFAULT_FILLS.GREEN, DEFAULT_FILLS.YELLOW, DEFAULT_FILLS.RED]);\n    params.set(DEFAULT_FUNNEL_SERIES_COLOR_RANGE, [\n      \"#5090dc\",\n      \"#629be0\",\n      \"#73a6e3\",\n      \"#85b1e7\",\n      \"#96bcea\",\n      \"#a8c8ee\",\n      \"#b9d3f1\",\n      \"#cbdef5\"\n    ]);\n    params.set(DEFAULT_PADDING, 20);\n    params.set(DEFAULT_CAPTION_LAYOUT_STYLE, \"block\");\n    params.set(DEFAULT_CAPTION_ALIGNMENT, \"center\");\n    params.set(DEFAULT_HIERARCHY_FILLS, [\"#ffffff\", \"#e0e5ea\", \"#c1ccd5\", \"#a3b4c1\", \"#859cad\"]);\n    params.set(DEFAULT_HIERARCHY_STROKES, [\"#ffffff\", \"#c5cbd1\", \"#a4b1bd\", \"#8498a9\", \"#648096\"]);\n    params.set(DEFAULT_POLAR_SERIES_STROKE, DEFAULT_BACKGROUND_FILL);\n    params.set(DEFAULT_ANNOTATION_COLOR, DEFAULT_FILLS.BLUE);\n    params.set(DEFAULT_TEXT_ANNOTATION_COLOR, DEFAULT_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, DEFAULT_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_HANDLE_FILL, DEFAULT_BACKGROUND_FILL);\n    params.set(DEFAULT_ANNOTATION_STATISTICS_FILL, \"#fafafa\");\n    params.set(DEFAULT_ANNOTATION_STATISTICS_STROKE, \"#dddddd\");\n    params.set(DEFAULT_ANNOTATION_STATISTICS_COLOR, \"#000000\");\n    params.set(DEFAULT_ANNOTATION_STATISTICS_DIVIDER_STROKE, \"#181d1f\");\n    params.set(DEFAULT_ANNOTATION_STATISTICS_DOWN_FILL, \"#e35c5c\");\n    params.set(DEFAULT_ANNOTATION_STATISTICS_DOWN_STROKE, \"#e35c5c\");\n    params.set(DEFAULT_TEXTBOX_FILL, \"#fafafa\");\n    params.set(DEFAULT_TEXTBOX_STROKE, \"#dddddd\");\n    params.set(DEFAULT_TEXTBOX_COLOR, \"#000000\");\n    params.set(DEFAULT_TOOLBAR_POSITION, \"top\");\n    params.set(DEFAULT_GRIDLINE_ENABLED, false);\n    const defaultColors = this.getDefaultColors();\n    params.set(PALETTE_UP_STROKE, this.palette.up?.stroke ?? defaultColors.up.stroke);\n    params.set(PALETTE_UP_FILL, this.palette.up?.fill ?? defaultColors.up.fill);\n    params.set(PALETTE_DOWN_STROKE, this.palette.down?.stroke ?? defaultColors.down.stroke);\n    params.set(PALETTE_DOWN_FILL, this.palette.down?.fill ?? defaultColors.down.fill);\n    params.set(PALETTE_NEUTRAL_STROKE, this.palette.neutral?.stroke ?? defaultColors.neutral.stroke);\n    params.set(PALETTE_NEUTRAL_FILL, this.palette.neutral?.fill ?? defaultColors.neutral.fill);\n    params.set(PALETTE_ALT_UP_STROKE, this.palette.altUp?.stroke ?? defaultColors.up.stroke);\n    params.set(PALETTE_ALT_UP_FILL, this.palette.altUp?.fill ?? defaultColors.up.fill);\n    params.set(PALETTE_ALT_DOWN_STROKE, this.palette.altDown?.stroke ?? defaultColors.down.stroke);\n    params.set(PALETTE_ALT_DOWN_FILL, this.palette.altDown?.fill ?? defaultColors.down.fill);\n    params.set(PALETTE_ALT_NEUTRAL_FILL, this.palette.altNeutral?.fill ?? defaultColors.altNeutral.fill);\n    params.set(PALETTE_ALT_NEUTRAL_STROKE, this.palette.altNeutral?.stroke ?? defaultColors.altNeutral.stroke);\n    return params;\n  }\n};\n_ChartTheme.cartesianAxisDefault = {\n  [\"number\" /* NUMBER */]: _ChartTheme.getAxisDefaults({\n    line: { enabled: false }\n  }),\n  [\"log\" /* LOG */]: _ChartTheme.getAxisDefaults({\n    base: 10,\n    line: { enabled: false },\n    interval: { minSpacing: NaN }\n  }),\n  [\"category\" /* CATEGORY */]: _ChartTheme.getAxisDefaults({\n    groupPaddingInner: 0.1,\n    label: { autoRotate: true },\n    gridLine: { enabled: DEFAULT_GRIDLINE_ENABLED },\n    crosshair: { enabled: false }\n  }),\n  [\"time\" /* TIME */]: _ChartTheme.getAxisDefaults({ gridLine: { enabled: DEFAULT_GRIDLINE_ENABLED } }),\n  [\"ordinal-time\" /* ORDINAL_TIME */]: _ChartTheme.getAxisDefaults({\n    groupPaddingInner: 0,\n    label: { autoRotate: false },\n    gridLine: { enabled: DEFAULT_GRIDLINE_ENABLED }\n  }),\n  [\"angle-category\" /* ANGLE_CATEGORY */]: _ChartTheme.getAxisDefaults({\n    gridLine: { enabled: DEFAULT_GRIDLINE_ENABLED }\n  }),\n  [\"angle-number\" /* ANGLE_NUMBER */]: _ChartTheme.getAxisDefaults({ gridLine: { enabled: DEFAULT_GRIDLINE_ENABLED } }),\n  [\"radius-category\" /* RADIUS_CATEGORY */]: _ChartTheme.getAxisDefaults({\n    line: { enabled: false }\n  }),\n  [\"radius-number\" /* RADIUS_NUMBER */]: _ChartTheme.getAxisDefaults({\n    line: { enabled: false }\n  }),\n  \"grouped-category\": _ChartTheme.getAxisDefaults({\n    tick: { enabled: true }\n  })\n};\nvar ChartTheme = _ChartTheme;\n\n// packages/ag-charts-community/src/chart/themes/darkTheme.ts\nvar DEFAULT_DARK_BACKGROUND_FILL = \"#192232\";\nvar DEFAULT_DARK_FILLS = {\n  BLUE: \"#5090dc\",\n  ORANGE: \"#ffa03a\",\n  GREEN: \"#459d55\",\n  CYAN: \"#34bfe1\",\n  YELLOW: \"#e1cc00\",\n  VIOLET: \"#9669cb\",\n  GRAY: \"#b5b5b5\",\n  MAGENTA: \"#bd5aa7\",\n  BROWN: \"#8a6224\",\n  RED: \"#ef5452\"\n};\nvar DEFAULT_DARK_STROKES = {\n  BLUE: \"#74a8e6\",\n  ORANGE: \"#ffbe70\",\n  GREEN: \"#6cb176\",\n  CYAN: \"#75d4ef\",\n  YELLOW: \"#f6e559\",\n  VIOLET: \"#aa86d8\",\n  GRAY: \"#a1a1a1\",\n  MAGENTA: \"#ce7ab9\",\n  BROWN: \"#997b52\",\n  RED: \"#ff7872\"\n};\nvar DarkTheme = class extends ChartTheme {\n  getDefaultColors() {\n    return {\n      fills: DEFAULT_DARK_FILLS,\n      strokes: DEFAULT_DARK_STROKES,\n      up: { fill: DEFAULT_DARK_FILLS.GREEN, stroke: DEFAULT_DARK_STROKES.GREEN },\n      down: { fill: DEFAULT_DARK_FILLS.RED, stroke: DEFAULT_DARK_STROKES.RED },\n      neutral: { fill: DEFAULT_DARK_FILLS.GRAY, stroke: DEFAULT_DARK_STROKES.GRAY },\n      altUp: { fill: DEFAULT_DARK_FILLS.BLUE, stroke: DEFAULT_DARK_STROKES.BLUE },\n      altDown: { fill: DEFAULT_DARK_FILLS.ORANGE, stroke: DEFAULT_DARK_STROKES.ORANGE },\n      altNeutral: { fill: DEFAULT_DARK_FILLS.GRAY, stroke: DEFAULT_DARK_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(IS_DARK_THEME, true);\n    params.set(DEFAULT_POLAR_SERIES_STROKE, DEFAULT_DARK_BACKGROUND_FILL);\n    params.set(DEFAULT_LABEL_COLOUR, \"white\");\n    params.set(DEFAULT_MUTED_LABEL_COLOUR, \"#7D91A0\");\n    params.set(DEFAULT_AXIS_GRID_COLOUR, \"#545A6E\");\n    params.set(DEFAULT_CROSS_LINES_COLOUR, \"white\");\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      DEFAULT_DARK_FILLS.ORANGE,\n      DEFAULT_DARK_FILLS.YELLOW,\n      DEFAULT_DARK_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [\n      DEFAULT_DARK_FILLS.GREEN,\n      DEFAULT_DARK_FILLS.YELLOW,\n      DEFAULT_DARK_FILLS.RED\n    ]);\n    params.set(DEFAULT_FUNNEL_SERIES_COLOR_RANGE, [\n      \"#5090dc\",\n      \"#4882c6\",\n      \"#4073b0\",\n      \"#38659a\",\n      \"#305684\",\n      \"#28486e\",\n      \"#203a58\",\n      \"#182b42\"\n    ]);\n    params.set(DEFAULT_HIERARCHY_FILLS, [\"#192834\", \"#253746\", \"#324859\", \"#3f596c\", \"#4d6a80\"]);\n    params.set(DEFAULT_HIERARCHY_STROKES, [\"#192834\", \"#3b5164\", \"#496275\", \"#577287\", \"#668399\"]);\n    params.set(DEFAULT_BACKGROUND_COLOUR, DEFAULT_DARK_BACKGROUND_FILL);\n    params.set(DEFAULT_INSIDE_SERIES_LABEL_COLOUR, DEFAULT_DARK_BACKGROUND_FILL);\n    params.set(DEFAULT_ANNOTATION_COLOR, DEFAULT_DARK_FILLS.BLUE);\n    params.set(DEFAULT_TEXT_ANNOTATION_COLOR, \"white\");\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, DEFAULT_DARK_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_HANDLE_FILL, DEFAULT_DARK_BACKGROUND_FILL);\n    params.set(DEFAULT_ANNOTATION_STATISTICS_FILL, \"#28313e\");\n    params.set(DEFAULT_ANNOTATION_STATISTICS_STROKE, \"#4b525d\");\n    params.set(DEFAULT_ANNOTATION_STATISTICS_COLOR, \"#ffffff\");\n    params.set(DEFAULT_ANNOTATION_STATISTICS_DIVIDER_STROKE, \"#ffffff\");\n    params.set(DEFAULT_TEXTBOX_FILL, \"#28313e\");\n    params.set(DEFAULT_TEXTBOX_STROKE, \"#4b525d\");\n    params.set(DEFAULT_TEXTBOX_COLOR, \"#ffffff\");\n    return params;\n  }\n  constructor(options) {\n    super(options);\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/financialDark.ts\nvar FINANCIAL_DARK_FILLS = {\n  GREEN: \"#089981\",\n  RED: \"#F23645\",\n  BLUE: \"#5090dc\",\n  GRAY: \"#A9A9A9\"\n};\nvar FINANCIAL_DARK_STROKES = {\n  GREEN: \"#089981\",\n  RED: \"#F23645\",\n  BLUE: \"#5090dc\",\n  GRAY: \"#909090\"\n};\nvar FinancialDark = class extends DarkTheme {\n  getDefaultColors() {\n    return {\n      fills: { ...FINANCIAL_DARK_FILLS },\n      strokes: { ...FINANCIAL_DARK_STROKES },\n      up: { fill: FINANCIAL_DARK_FILLS.GREEN, stroke: FINANCIAL_DARK_STROKES.GREEN },\n      down: { fill: FINANCIAL_DARK_FILLS.RED, stroke: FINANCIAL_DARK_STROKES.RED },\n      neutral: { fill: FINANCIAL_DARK_FILLS.BLUE, stroke: FINANCIAL_DARK_STROKES.BLUE },\n      altUp: { fill: FINANCIAL_DARK_FILLS.GREEN, stroke: FINANCIAL_DARK_STROKES.GREEN },\n      altDown: { fill: FINANCIAL_DARK_FILLS.RED, stroke: FINANCIAL_DARK_STROKES.RED },\n      altNeutral: { fill: FINANCIAL_DARK_FILLS.GRAY, stroke: FINANCIAL_DARK_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      FINANCIAL_DARK_FILLS.GREEN,\n      FINANCIAL_DARK_FILLS.BLUE,\n      FINANCIAL_DARK_FILLS.RED\n    ]);\n    params.set(DEFAULT_ANNOTATION_COLOR, FINANCIAL_DARK_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, FINANCIAL_DARK_FILLS.BLUE);\n    params.set(DEFAULT_AXIS_GRID_COLOUR, \"#343A4E\");\n    params.set(DEFAULT_PADDING, 0);\n    params.set(DEFAULT_CAPTION_LAYOUT_STYLE, \"overlay\");\n    params.set(DEFAULT_CAPTION_ALIGNMENT, \"left\");\n    params.set(DEFAULT_TOOLBAR_POSITION, \"bottom\");\n    params.set(DEFAULT_GRIDLINE_ENABLED, true);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/financialLight.ts\nvar FINANCIAL_LIGHT_FILLS = {\n  GREEN: \"#089981\",\n  RED: \"#F23645\",\n  BLUE: \"#5090dc\",\n  GRAY: \"#A9A9A9\"\n};\nvar FINANCIAL_LIGHT_STROKES = {\n  GREEN: \"#089981\",\n  RED: \"#F23645\",\n  BLUE: \"#5090dc\",\n  GRAY: \"#909090\"\n};\nvar FinancialLight = class extends ChartTheme {\n  getDefaultColors() {\n    return {\n      fills: { ...FINANCIAL_LIGHT_FILLS },\n      strokes: { ...FINANCIAL_LIGHT_STROKES },\n      up: { fill: FINANCIAL_LIGHT_FILLS.GREEN, stroke: FINANCIAL_LIGHT_STROKES.GREEN },\n      down: { fill: FINANCIAL_LIGHT_FILLS.RED, stroke: FINANCIAL_LIGHT_STROKES.RED },\n      neutral: { fill: FINANCIAL_LIGHT_FILLS.BLUE, stroke: FINANCIAL_LIGHT_STROKES.BLUE },\n      altUp: { fill: FINANCIAL_LIGHT_FILLS.GREEN, stroke: FINANCIAL_LIGHT_STROKES.GREEN },\n      altDown: { fill: FINANCIAL_LIGHT_FILLS.RED, stroke: FINANCIAL_LIGHT_STROKES.RED },\n      altNeutral: { fill: FINANCIAL_LIGHT_FILLS.GRAY, stroke: FINANCIAL_LIGHT_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      FINANCIAL_LIGHT_FILLS.GREEN,\n      FINANCIAL_LIGHT_FILLS.BLUE,\n      FINANCIAL_LIGHT_FILLS.RED\n    ]);\n    params.set(DEFAULT_ANNOTATION_COLOR, FINANCIAL_LIGHT_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, FINANCIAL_LIGHT_FILLS.BLUE);\n    params.set(DEFAULT_AXIS_GRID_COLOUR, \"#F2F3F3\");\n    params.set(DEFAULT_PADDING, 0);\n    params.set(DEFAULT_CAPTION_LAYOUT_STYLE, \"overlay\");\n    params.set(DEFAULT_CAPTION_ALIGNMENT, \"left\");\n    params.set(DEFAULT_TOOLBAR_POSITION, \"bottom\");\n    params.set(DEFAULT_GRIDLINE_ENABLED, true);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/materialDark.ts\nvar MATERIAL_DARK_FILLS = {\n  BLUE: \"#2196F3\",\n  ORANGE: \"#FF9800\",\n  GREEN: \"#4CAF50\",\n  CYAN: \"#00BCD4\",\n  YELLOW: \"#FFEB3B\",\n  VIOLET: \"#7E57C2\",\n  GRAY: \"#9E9E9E\",\n  MAGENTA: \"#F06292\",\n  BROWN: \"#795548\",\n  RED: \"#F44336\"\n};\nvar MATERIAL_DARK_STROKES = {\n  BLUE: \"#90CAF9\",\n  ORANGE: \"#FFCC80\",\n  GREEN: \"#A5D6A7\",\n  CYAN: \"#80DEEA\",\n  YELLOW: \"#FFF9C4\",\n  VIOLET: \"#B39DDB\",\n  GRAY: \"#E0E0E0\",\n  MAGENTA: \"#F48FB1\",\n  BROWN: \"#A1887F\",\n  RED: \"#EF9A9A\"\n};\nvar MaterialDark = class extends DarkTheme {\n  getDefaultColors() {\n    return {\n      fills: MATERIAL_DARK_FILLS,\n      strokes: MATERIAL_DARK_STROKES,\n      up: { fill: MATERIAL_DARK_FILLS.GREEN, stroke: MATERIAL_DARK_STROKES.GREEN },\n      down: { fill: MATERIAL_DARK_FILLS.RED, stroke: MATERIAL_DARK_STROKES.RED },\n      neutral: { fill: MATERIAL_DARK_FILLS.GRAY, stroke: MATERIAL_DARK_STROKES.GRAY },\n      altUp: { fill: MATERIAL_DARK_FILLS.BLUE, stroke: MATERIAL_DARK_STROKES.BLUE },\n      altDown: { fill: MATERIAL_DARK_FILLS.RED, stroke: MATERIAL_DARK_STROKES.RED },\n      altNeutral: { fill: MATERIAL_DARK_FILLS.GRAY, stroke: MATERIAL_DARK_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      MATERIAL_DARK_FILLS.ORANGE,\n      MATERIAL_DARK_FILLS.YELLOW,\n      MATERIAL_DARK_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_FUNNEL_SERIES_COLOR_RANGE, [\n      \"#2196f3\",\n      // 500\n      \"#208FEC\",\n      // (interpolated)\n      \"#1E88E5\",\n      // 600\n      \"#1C7FDC\",\n      // (interpolated)\n      \"#1976d2\",\n      // 700\n      \"#176EC9\",\n      // (interpolated)\n      \"#1565c0\"\n      // 800\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [\n      MATERIAL_DARK_FILLS.GREEN,\n      MATERIAL_DARK_FILLS.YELLOW,\n      MATERIAL_DARK_FILLS.RED\n    ]);\n    params.set(DEFAULT_ANNOTATION_COLOR, MATERIAL_DARK_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, MATERIAL_DARK_FILLS.BLUE);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/materialLight.ts\nvar MATERIAL_LIGHT_FILLS = {\n  BLUE: \"#2196F3\",\n  ORANGE: \"#FF9800\",\n  GREEN: \"#4CAF50\",\n  CYAN: \"#00BCD4\",\n  YELLOW: \"#FFEB3B\",\n  VIOLET: \"#7E57C2\",\n  GRAY: \"#9E9E9E\",\n  MAGENTA: \"#F06292\",\n  BROWN: \"#795548\",\n  RED: \"#F44336\"\n};\nvar MATERIAL_LIGHT_STROKES = {\n  BLUE: \"#1565C0\",\n  ORANGE: \"#E65100\",\n  GREEN: \"#2E7D32\",\n  CYAN: \"#00838F\",\n  YELLOW: \"#F9A825\",\n  VIOLET: \"#4527A0\",\n  GRAY: \"#616161\",\n  MAGENTA: \"#C2185B\",\n  BROWN: \"#4E342E\",\n  RED: \"#B71C1C\"\n};\nvar MaterialLight = class extends ChartTheme {\n  getDefaultColors() {\n    return {\n      fills: MATERIAL_LIGHT_FILLS,\n      strokes: MATERIAL_LIGHT_STROKES,\n      up: { fill: MATERIAL_LIGHT_FILLS.GREEN, stroke: MATERIAL_LIGHT_STROKES.GREEN },\n      down: { fill: MATERIAL_LIGHT_FILLS.RED, stroke: MATERIAL_LIGHT_STROKES.RED },\n      neutral: { fill: MATERIAL_LIGHT_FILLS.GRAY, stroke: MATERIAL_LIGHT_STROKES.GRAY },\n      altUp: { fill: MATERIAL_LIGHT_FILLS.BLUE, stroke: MATERIAL_LIGHT_STROKES.BLUE },\n      altDown: { fill: MATERIAL_LIGHT_FILLS.RED, stroke: MATERIAL_LIGHT_STROKES.RED },\n      altNeutral: { fill: MATERIAL_LIGHT_FILLS.GRAY, stroke: MATERIAL_LIGHT_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      MATERIAL_LIGHT_FILLS.ORANGE,\n      MATERIAL_LIGHT_FILLS.YELLOW,\n      MATERIAL_LIGHT_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_FUNNEL_SERIES_COLOR_RANGE, [\n      \"#2196f3\",\n      // 500\n      \"#329EF4\",\n      // (interpolated)\n      \"#42a5f5\",\n      // 400\n      \"#53ADF6\",\n      // (interpolated)\n      \"#64b5f6\",\n      // 300\n      \"#7AC0F8\",\n      // (interpolated)\n      \"#90caf9\"\n      // 200\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [\n      MATERIAL_LIGHT_FILLS.GREEN,\n      MATERIAL_LIGHT_FILLS.YELLOW,\n      MATERIAL_LIGHT_FILLS.RED\n    ]);\n    params.set(DEFAULT_ANNOTATION_COLOR, MATERIAL_LIGHT_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, MATERIAL_LIGHT_FILLS.BLUE);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/polychromaDark.ts\nvar POLYCHROMA_DARK_FILLS = {\n  BLUE: \"#436ff4\",\n  PURPLE: \"#9a7bff\",\n  MAGENTA: \"#d165d2\",\n  PINK: \"#f0598b\",\n  RED: \"#f47348\",\n  ORANGE: \"#f2a602\",\n  YELLOW: \"#e9e201\",\n  GREEN: \"#21b448\",\n  CYAN: \"#00b9a2\",\n  MODERATE_BLUE: \"#00aee4\",\n  GRAY: \"#bbbbbb\"\n};\nvar POLYCHROMA_DARK_STROKES = {\n  BLUE: \"#6698ff\",\n  PURPLE: \"#c0a3ff\",\n  MAGENTA: \"#fc8dfc\",\n  PINK: \"#ff82b1\",\n  RED: \"#ff9b70\",\n  ORANGE: \"#ffcf4e\",\n  YELLOW: \"#ffff58\",\n  GREEN: \"#58dd70\",\n  CYAN: \"#51e2c9\",\n  MODERATE_BLUE: \"#4fd7ff\",\n  GRAY: \"#eeeeee\"\n};\nvar PolychromaDark = class extends DarkTheme {\n  getDefaultColors() {\n    return {\n      fills: POLYCHROMA_DARK_FILLS,\n      strokes: POLYCHROMA_DARK_STROKES,\n      up: { fill: POLYCHROMA_DARK_FILLS.GREEN, stroke: POLYCHROMA_DARK_STROKES.GREEN },\n      down: { fill: POLYCHROMA_DARK_FILLS.RED, stroke: POLYCHROMA_DARK_STROKES.RED },\n      neutral: { fill: POLYCHROMA_DARK_FILLS.GRAY, stroke: POLYCHROMA_DARK_STROKES.GRAY },\n      altUp: { fill: POLYCHROMA_DARK_FILLS.BLUE, stroke: POLYCHROMA_DARK_STROKES.BLUE },\n      altDown: { fill: POLYCHROMA_DARK_FILLS.RED, stroke: POLYCHROMA_DARK_STROKES.RED },\n      altNeutral: { fill: POLYCHROMA_DARK_FILLS.GRAY, stroke: POLYCHROMA_DARK_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [POLYCHROMA_DARK_FILLS.BLUE, POLYCHROMA_DARK_FILLS.RED]);\n    params.set(DEFAULT_FUNNEL_SERIES_COLOR_RANGE, [\n      POLYCHROMA_DARK_FILLS.BLUE,\n      POLYCHROMA_DARK_FILLS.PURPLE,\n      POLYCHROMA_DARK_FILLS.MAGENTA,\n      POLYCHROMA_DARK_FILLS.PINK,\n      POLYCHROMA_DARK_FILLS.RED,\n      POLYCHROMA_DARK_FILLS.ORANGE,\n      POLYCHROMA_DARK_FILLS.YELLOW,\n      POLYCHROMA_DARK_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [POLYCHROMA_DARK_FILLS.BLUE, POLYCHROMA_DARK_FILLS.RED]);\n    params.set(DEFAULT_ANNOTATION_COLOR, POLYCHROMA_DARK_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, POLYCHROMA_DARK_FILLS.BLUE);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/polychromaLight.ts\nvar POLYCHROMA_LIGHT_FILLS = {\n  BLUE: \"#436ff4\",\n  PURPLE: \"#9a7bff\",\n  MAGENTA: \"#d165d2\",\n  PINK: \"#f0598b\",\n  RED: \"#f47348\",\n  ORANGE: \"#f2a602\",\n  YELLOW: \"#e9e201\",\n  GREEN: \"#21b448\",\n  CYAN: \"#00b9a2\",\n  MODERATE_BLUE: \"#00aee4\",\n  GRAY: \"#bbbbbb\"\n};\nvar POLYCHROMA_LIGHT_STROKES = {\n  BLUE: \"#2346c9\",\n  PURPLE: \"#7653d4\",\n  MAGENTA: \"#a73da9\",\n  PINK: \"#c32d66\",\n  RED: \"#c84b1c\",\n  ORANGE: \"#c87f00\",\n  YELLOW: \"#c1b900\",\n  GREEN: \"#008c1c\",\n  CYAN: \"#00927c\",\n  MODERATE_BLUE: \"#0087bb\",\n  GRAY: \"#888888\"\n};\nvar PolychromaLight = class extends ChartTheme {\n  getDefaultColors() {\n    return {\n      fills: POLYCHROMA_LIGHT_FILLS,\n      strokes: POLYCHROMA_LIGHT_STROKES,\n      up: { fill: POLYCHROMA_LIGHT_FILLS.GREEN, stroke: POLYCHROMA_LIGHT_STROKES.GREEN },\n      down: { fill: POLYCHROMA_LIGHT_FILLS.RED, stroke: POLYCHROMA_LIGHT_STROKES.RED },\n      neutral: { fill: POLYCHROMA_LIGHT_FILLS.GRAY, stroke: POLYCHROMA_LIGHT_STROKES.GRAY },\n      altUp: { fill: POLYCHROMA_LIGHT_FILLS.BLUE, stroke: POLYCHROMA_LIGHT_STROKES.BLUE },\n      altDown: { fill: POLYCHROMA_LIGHT_FILLS.RED, stroke: POLYCHROMA_LIGHT_STROKES.RED },\n      altNeutral: { fill: POLYCHROMA_LIGHT_FILLS.GRAY, stroke: POLYCHROMA_LIGHT_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [POLYCHROMA_LIGHT_FILLS.BLUE, POLYCHROMA_LIGHT_FILLS.RED]);\n    params.set(DEFAULT_FUNNEL_SERIES_COLOR_RANGE, [\n      POLYCHROMA_LIGHT_FILLS.BLUE,\n      POLYCHROMA_LIGHT_FILLS.PURPLE,\n      POLYCHROMA_LIGHT_FILLS.MAGENTA,\n      POLYCHROMA_LIGHT_FILLS.PINK,\n      POLYCHROMA_LIGHT_FILLS.RED,\n      POLYCHROMA_LIGHT_FILLS.ORANGE,\n      POLYCHROMA_LIGHT_FILLS.YELLOW,\n      POLYCHROMA_LIGHT_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [POLYCHROMA_LIGHT_FILLS.BLUE, POLYCHROMA_LIGHT_FILLS.RED]);\n    params.set(DEFAULT_ANNOTATION_COLOR, POLYCHROMA_LIGHT_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, POLYCHROMA_LIGHT_FILLS.BLUE);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/sheetsDark.ts\nvar SHEETS_DARK_FILLS = {\n  BLUE: \"#4472C4\",\n  ORANGE: \"#ED7D31\",\n  GRAY: \"#A5A5A5\",\n  YELLOW: \"#FFC000\",\n  MODERATE_BLUE: \"#5B9BD5\",\n  GREEN: \"#70AD47\",\n  DARK_GRAY: \"#7B7B7B\",\n  DARK_BLUE: \"#264478\",\n  VERY_DARK_GRAY: \"#636363\",\n  DARK_YELLOW: \"#997300\"\n};\nvar SHEETS_DARK_STROKES = {\n  BLUE: \"#6899ee\",\n  ORANGE: \"#ffa55d\",\n  GRAY: \"#cdcdcd\",\n  YELLOW: \"#ffea53\",\n  MODERATE_BLUE: \"#82c3ff\",\n  GREEN: \"#96d56f\",\n  DARK_GRAY: \"#a1a1a1\",\n  DARK_BLUE: \"#47689f\",\n  VERY_DARK_GRAY: \"#878787\",\n  DARK_YELLOW: \"#c0993d\"\n};\nvar SheetsDark = class extends DarkTheme {\n  getDefaultColors() {\n    return {\n      fills: { ...SHEETS_DARK_FILLS, RED: SHEETS_DARK_FILLS.ORANGE },\n      strokes: { ...SHEETS_DARK_STROKES, RED: SHEETS_DARK_STROKES.ORANGE },\n      up: { fill: SHEETS_DARK_FILLS.GREEN, stroke: SHEETS_DARK_STROKES.GREEN },\n      down: { fill: SHEETS_DARK_FILLS.ORANGE, stroke: SHEETS_DARK_STROKES.ORANGE },\n      neutral: { fill: SHEETS_DARK_FILLS.GRAY, stroke: SHEETS_DARK_STROKES.GRAY },\n      altUp: { fill: SHEETS_DARK_FILLS.BLUE, stroke: SHEETS_DARK_STROKES.BLUE },\n      altDown: { fill: SHEETS_DARK_FILLS.ORANGE, stroke: SHEETS_DARK_STROKES.ORANGE },\n      altNeutral: { fill: SHEETS_DARK_FILLS.GRAY, stroke: SHEETS_DARK_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      SHEETS_DARK_FILLS.ORANGE,\n      SHEETS_DARK_FILLS.YELLOW,\n      SHEETS_DARK_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [\n      SHEETS_DARK_FILLS.GREEN,\n      SHEETS_DARK_FILLS.YELLOW,\n      SHEETS_DARK_FILLS.ORANGE\n    ]);\n    params.set(DEFAULT_ANNOTATION_COLOR, SHEETS_DARK_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, SHEETS_DARK_FILLS.BLUE);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/sheetsLight.ts\nvar SHEETS_LIGHT_FILLS = {\n  BLUE: \"#5281d5\",\n  ORANGE: \"#ff8d44\",\n  GRAY: \"#b5b5b5\",\n  YELLOW: \"#ffd02f\",\n  MODERATE_BLUE: \"#6aabe6\",\n  GREEN: \"#7fbd57\",\n  DARK_GRAY: \"#8a8a8a\",\n  DARK_BLUE: \"#335287\",\n  VERY_DARK_GRAY: \"#717171\",\n  DARK_YELLOW: \"#a98220\"\n};\nvar SHEETS_LIGHT_STROKES = {\n  BLUE: \"#214d9b\",\n  ORANGE: \"#c25600\",\n  GRAY: \"#7f7f7f\",\n  YELLOW: \"#d59800\",\n  MODERATE_BLUE: \"#3575ac\",\n  GREEN: \"#4b861a\",\n  DARK_GRAY: \"#575757\",\n  DARK_BLUE: \"#062253\",\n  VERY_DARK_GRAY: \"#414141\",\n  DARK_YELLOW: \"#734f00\"\n};\nvar SheetsLight = class extends ChartTheme {\n  getDefaultColors() {\n    return {\n      fills: { ...SHEETS_LIGHT_FILLS, RED: SHEETS_LIGHT_FILLS.ORANGE },\n      strokes: { ...SHEETS_LIGHT_STROKES, RED: SHEETS_LIGHT_STROKES.ORANGE },\n      up: { fill: SHEETS_LIGHT_FILLS.GREEN, stroke: SHEETS_LIGHT_STROKES.GREEN },\n      down: { fill: SHEETS_LIGHT_FILLS.ORANGE, stroke: SHEETS_LIGHT_STROKES.ORANGE },\n      neutral: { fill: SHEETS_LIGHT_STROKES.GRAY, stroke: SHEETS_LIGHT_STROKES.GRAY },\n      altUp: { fill: SHEETS_LIGHT_FILLS.BLUE, stroke: SHEETS_LIGHT_STROKES.BLUE },\n      altDown: { fill: SHEETS_LIGHT_FILLS.ORANGE, stroke: SHEETS_LIGHT_STROKES.ORANGE },\n      altNeutral: { fill: SHEETS_LIGHT_FILLS.GRAY, stroke: SHEETS_LIGHT_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      SHEETS_LIGHT_FILLS.ORANGE,\n      SHEETS_LIGHT_FILLS.YELLOW,\n      SHEETS_LIGHT_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [\n      SHEETS_LIGHT_FILLS.GREEN,\n      SHEETS_LIGHT_FILLS.YELLOW,\n      SHEETS_LIGHT_FILLS.ORANGE\n    ]);\n    params.set(DEFAULT_ANNOTATION_COLOR, SHEETS_LIGHT_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, SHEETS_LIGHT_FILLS.BLUE);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/vividDark.ts\nvar VIVID_DARK_FILLS = {\n  BLUE: \"#0083ff\",\n  ORANGE: \"#ff6600\",\n  GREEN: \"#00af00\",\n  CYAN: \"#00ccff\",\n  YELLOW: \"#f7c700\",\n  VIOLET: \"#ac26ff\",\n  GRAY: \"#a7a7b7\",\n  MAGENTA: \"#e800c5\",\n  BROWN: \"#b54300\",\n  RED: \"#ff0000\"\n};\nvar VIVID_DARK_STROKES = {\n  BLUE: \"#67b7ff\",\n  ORANGE: \"#ffc24d\",\n  GREEN: \"#5cc86f\",\n  CYAN: \"#54ebff\",\n  VIOLET: \"#fff653\",\n  YELLOW: \"#c18aff\",\n  GRAY: \"#aeaeae\",\n  MAGENTA: \"#f078d4\",\n  BROWN: \"#ba8438\",\n  RED: \"#ff726e\"\n};\nvar VividDark = class extends DarkTheme {\n  getDefaultColors() {\n    return {\n      fills: VIVID_DARK_FILLS,\n      strokes: VIVID_DARK_STROKES,\n      up: { fill: VIVID_DARK_FILLS.GREEN, stroke: VIVID_DARK_STROKES.GREEN },\n      down: { fill: VIVID_DARK_FILLS.RED, stroke: VIVID_DARK_STROKES.RED },\n      neutral: { fill: VIVID_DARK_FILLS.GRAY, stroke: VIVID_DARK_STROKES.GRAY },\n      altUp: { fill: VIVID_DARK_FILLS.BLUE, stroke: VIVID_DARK_STROKES.BLUE },\n      altDown: { fill: VIVID_DARK_FILLS.ORANGE, stroke: VIVID_DARK_STROKES.ORANGE },\n      altNeutral: { fill: VIVID_DARK_FILLS.GRAY, stroke: VIVID_DARK_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [\n      VIVID_DARK_FILLS.ORANGE,\n      VIVID_DARK_FILLS.YELLOW,\n      VIVID_DARK_FILLS.GREEN\n    ]);\n    params.set(DEFAULT_FUNNEL_SERIES_COLOR_RANGE, [\n      \"#0083ff\",\n      \"#0076e6\",\n      \"#0069cc\",\n      \"#005cb3\",\n      \"#004f99\",\n      \"#004280\",\n      \"#003466\",\n      \"#00274c\"\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [\n      VIVID_DARK_FILLS.GREEN,\n      VIVID_DARK_FILLS.YELLOW,\n      VIVID_DARK_FILLS.RED\n    ]);\n    params.set(DEFAULT_ANNOTATION_COLOR, VIVID_DARK_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, VIVID_DARK_FILLS.BLUE);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/themes/vividLight.ts\nvar VIVID_FILLS = {\n  BLUE: \"#0083ff\",\n  ORANGE: \"#ff6600\",\n  GREEN: \"#00af00\",\n  CYAN: \"#00ccff\",\n  YELLOW: \"#f7c700\",\n  VIOLET: \"#ac26ff\",\n  GRAY: \"#a7a7b7\",\n  MAGENTA: \"#e800c5\",\n  BROWN: \"#b54300\",\n  RED: \"#ff0000\"\n};\nvar VIVID_STROKES = {\n  BLUE: \"#0f68c0\",\n  ORANGE: \"#d47100\",\n  GREEN: \"#007922\",\n  CYAN: \"#009ac2\",\n  VIOLET: \"#bca400\",\n  YELLOW: \"#753cac\",\n  GRAY: \"#646464\",\n  MAGENTA: \"#9b2685\",\n  BROWN: \"#6c3b00\",\n  RED: \"#cb0021\"\n};\nvar VividLight = class extends ChartTheme {\n  getDefaultColors() {\n    return {\n      fills: VIVID_FILLS,\n      strokes: VIVID_STROKES,\n      up: { fill: VIVID_FILLS.GREEN, stroke: VIVID_STROKES.GREEN },\n      down: { fill: VIVID_FILLS.RED, stroke: VIVID_STROKES.RED },\n      neutral: { fill: VIVID_FILLS.GRAY, stroke: VIVID_STROKES.GRAY },\n      altUp: { fill: VIVID_FILLS.BLUE, stroke: VIVID_STROKES.BLUE },\n      altDown: { fill: VIVID_FILLS.ORANGE, stroke: VIVID_STROKES.ORANGE },\n      altNeutral: { fill: VIVID_FILLS.GRAY, stroke: VIVID_STROKES.GRAY }\n    };\n  }\n  getTemplateParameters() {\n    const params = super.getTemplateParameters();\n    params.set(DEFAULT_DIVERGING_SERIES_COLOR_RANGE, [VIVID_FILLS.ORANGE, VIVID_FILLS.YELLOW, VIVID_FILLS.GREEN]);\n    params.set(DEFAULT_FUNNEL_SERIES_COLOR_RANGE, [\n      \"#0083ff\",\n      \"#1a8fff\",\n      \"#339cff\",\n      \"#4da8ff\",\n      \"#66b5ff\",\n      \"#80c1ff\",\n      \"#99cdff\",\n      \"#b3daff\"\n    ]);\n    params.set(DEFAULT_GAUGE_SERIES_COLOR_RANGE, [VIVID_FILLS.GREEN, VIVID_FILLS.YELLOW, VIVID_FILLS.RED]);\n    params.set(DEFAULT_ANNOTATION_COLOR, VIVID_FILLS.BLUE);\n    params.set(DEFAULT_ANNOTATION_BACKGROUND_FILL, VIVID_FILLS.BLUE);\n    return params;\n  }\n};\n\n// packages/ag-charts-community/src/chart/mapping/themes.ts\nvar lightTheme = () => new ChartTheme();\nvar darkTheme = () => new DarkTheme();\nvar themes = {\n  // darkThemes,\n  \"ag-default-dark\": darkTheme,\n  \"ag-sheets-dark\": () => new SheetsDark(),\n  \"ag-polychroma-dark\": () => new PolychromaDark(),\n  \"ag-vivid-dark\": () => new VividDark(),\n  \"ag-material-dark\": () => new MaterialDark(),\n  \"ag-financial-dark\": () => new FinancialDark(),\n  // lightThemes,\n  null: lightTheme,\n  undefined: lightTheme,\n  \"ag-default\": lightTheme,\n  \"ag-sheets\": () => new SheetsLight(),\n  \"ag-polychroma\": () => new PolychromaLight(),\n  \"ag-vivid\": () => new VividLight(),\n  \"ag-material\": () => new MaterialLight(),\n  \"ag-financial\": () => new FinancialLight()\n};\nfunction getChartTheme(value) {\n  if (value instanceof ChartTheme) {\n    return value;\n  }\n  if (value == null || typeof value === \"string\") {\n    const stockTheme = themes[value];\n    if (stockTheme) {\n      return stockTheme();\n    }\n    Logger.warnOnce(`the theme [${value}] is invalid, using [ag-default] instead.`);\n    return lightTheme();\n  }\n  if (isValid(value, themeOptionsDef, \"theme\")) {\n    const flattenedTheme = reduceThemeOptions(value);\n    const baseTheme = flattenedTheme.baseTheme ? getChartTheme(flattenedTheme.baseTheme) : lightTheme();\n    return new baseTheme.constructor(flattenedTheme);\n  }\n  return lightTheme();\n}\nfunction reduceThemeOptions(options) {\n  let maybeNested = options;\n  let palette;\n  const overrides = [];\n  while (typeof maybeNested === \"object\") {\n    palette ?? (palette = maybeNested.palette);\n    if (maybeNested.overrides) {\n      overrides.push(maybeNested.overrides);\n    }\n    maybeNested = maybeNested.baseTheme;\n  }\n  return {\n    baseTheme: maybeNested,\n    overrides: mergeDefaults(...overrides),\n    palette\n  };\n}\nvar themeOptionsDef = {\n  baseTheme: or(string, object),\n  overrides: object,\n  palette: {\n    fills: arrayOf(string),\n    strokes: arrayOf(string),\n    up: { fill: string, stroke: string },\n    down: { fill: string, stroke: string },\n    neutral: { fill: string, stroke: string }\n  }\n};\n\n// packages/ag-charts-community/src/module/optionsModule.ts\nvar unthemedSeries = /* @__PURE__ */ new Set([\"map-shape-background\", \"map-line-background\"]);\nvar ChartOptions = class {\n  constructor(userOptions, processedOverrides, specialOverrides, metadata) {\n    this.debug = Debug.create(true, \"opts\");\n    var _a;\n    this.optionMetadata = metadata ?? {};\n    this.processedOverrides = processedOverrides ?? {};\n    const cloneOptions = { shallow: [\"data\"] };\n    this.userOptions = deepClone(userOptions, cloneOptions);\n    let options = deepClone(userOptions, cloneOptions);\n    const { presetType } = this.optionMetadata;\n    if (presetType != null) {\n      const presetConstructor = PRESETS[presetType];\n      const presetParams = options;\n      const presetSubType = options.type;\n      const presetTheme = presetSubType != null ? getChartTheme(options.theme).presets[presetSubType] : void 0;\n      this.debug(\">>> AgCharts.createOrUpdate() - applying preset\", presetParams);\n      options = presetConstructor?.(presetParams, presetTheme, () => this.activeTheme) ?? options;\n    }\n    if (!enterpriseModule.isEnterprise) {\n      removeUsedEnterpriseOptions(options);\n    }\n    this.activeTheme = getChartTheme(options.theme);\n    if (presetType) {\n      options = this.activeTheme.templateTheme(options);\n    }\n    this.sanityCheckAndCleanup(options);\n    this.defaultAxes = this.getDefaultAxes(options);\n    this.specialOverrides = this.specialOverridesDefaults({ ...specialOverrides });\n    const chartType2 = this.optionsType(options);\n    const {\n      axes: axesThemes = {},\n      annotations: { axesButtons = null, ...annotationsThemes } = {},\n      series: _,\n      ...themeDefaults\n    } = this.getSeriesThemeConfig(chartType2);\n    this.processedOptions = deepClone(\n      mergeDefaults(\n        processedOverrides,\n        options,\n        axesButtons != null ? { annotations: { axesButtons } } : {},\n        themeDefaults,\n        this.defaultAxes\n      ),\n      cloneOptions\n    );\n    this.processAxesOptions(this.processedOptions, axesThemes);\n    this.processSeriesOptions(this.processedOptions);\n    this.processMiniChartSeriesOptions(this.processedOptions);\n    this.annotationThemes = annotationsThemes;\n    if ((isAgCartesianChartOptions(this.processedOptions) || isAgPolarChartOptionsWithSeriesBasedLegend(this.processedOptions)) && this.processedOptions.legend?.enabled == null) {\n      (_a = this.processedOptions).legend ?? (_a.legend = {});\n      this.processedOptions.legend.enabled = this.processedOptions.series.length > 1;\n    }\n    this.enableConfiguredOptions(this.processedOptions, options);\n    if (!enterpriseModule.isEnterprise) {\n      removeUsedEnterpriseOptions(this.processedOptions, true);\n    }\n  }\n  getOptions() {\n    return this.processedOptions ?? {};\n  }\n  diffOptions(options) {\n    return jsonDiff(options, this.processedOptions);\n  }\n  getSeriesThemeConfig(seriesType2) {\n    const themeConfig = deepClone(this.activeTheme?.config[seriesType2] ?? {});\n    this.removeLeftoverSymbols(themeConfig);\n    return themeConfig;\n  }\n  getDefaultAxes(options) {\n    const optionsType2 = this.optionsType(options);\n    const firstSeriesOptions = options.series?.find((series) => (series.type ?? \"line\") === optionsType2) ?? {};\n    return seriesRegistry.cloneDefaultAxes(optionsType2, firstSeriesOptions);\n  }\n  optionsType(options) {\n    return options.series?.[0]?.type ?? \"line\";\n  }\n  sanityCheckAndCleanup(options) {\n    this.deprecationWarnings(options);\n    this.axesTypeIntegrity(options);\n    this.seriesTypeIntegrity(options);\n    this.soloSeriesIntegrity(options);\n    this.removeDisabledOptions(options);\n    this.removeLeftoverSymbols(options);\n    if (options.series?.some((s) => s.type === \"bullet\") && options.sync != null && options.sync.enabled !== false) {\n      Logger.warnOnce(\"bullet series cannot be synced, disabling synchronization.\");\n      delete options.sync;\n    }\n  }\n  processAxesOptions(options, axesThemes) {\n    if (!(\"axes\" in options))\n      return;\n    options.axes = options.axes.map((axis) => {\n      const { crossLines: crossLinesTheme, ...axisTheme } = mergeDefaults(\n        axesThemes[axis.type]?.[axis.position],\n        axesThemes[axis.type]\n      );\n      if (axis.crossLines) {\n        axis.crossLines = mergeArrayDefaults(axis.crossLines, crossLinesTheme);\n      }\n      const gridLineStyle = axisTheme.gridLine?.style;\n      if (axis.gridLine?.style && gridLineStyle?.length) {\n        axis.gridLine.style = axis.gridLine.style.map(\n          (style, index) => style.stroke != null || style.lineDash != null ? mergeDefaults(style, gridLineStyle.at(index % gridLineStyle.length)) : style\n        );\n      }\n      const { top: _1, right: _2, bottom: _3, left: _4, ...axisOptions } = mergeDefaults(axis, axisTheme);\n      return axisOptions;\n    });\n  }\n  processSeriesOptions(options) {\n    const defaultTooltipPosition = this.getTooltipPositionDefaults(options);\n    const userPalette = isObject(options.theme) ? paletteType(options.theme?.palette) : \"inbuilt\";\n    const paletteOptions = {\n      colourIndex: 0,\n      userPalette\n    };\n    const processedSeries = options.series?.map((series) => {\n      series.type ?? (series.type = this.getDefaultSeriesType(options));\n      const { innerLabels: innerLabelsTheme, ...seriesTheme } = this.getSeriesThemeConfig(series.type).series ?? {};\n      const seriesPaletteOptions = unthemedSeries.has(series.type) ? { colourIndex: 0, userPalette } : paletteOptions;\n      const palette = this.getSeriesPalette(series.type, seriesPaletteOptions);\n      const defaultTooltipRange = this.getTooltipRangeDefaults(options, series.type);\n      const seriesOptions = mergeDefaults(\n        this.getSeriesGroupingOptions(series),\n        series,\n        defaultTooltipPosition,\n        defaultTooltipRange,\n        seriesTheme,\n        palette,\n        { visible: true }\n      );\n      if (seriesOptions.innerLabels) {\n        seriesOptions.innerLabels = mergeArrayDefaults(seriesOptions.innerLabels, innerLabelsTheme);\n      }\n      return this.activeTheme.templateTheme(seriesOptions);\n    });\n    options.series = this.setSeriesGroupingOptions(processedSeries ?? []);\n  }\n  processMiniChartSeriesOptions(options) {\n    let miniChartSeries = options.navigator?.miniChart?.series;\n    if (miniChartSeries == null)\n      return;\n    const paletteOptions = {\n      colourIndex: 0,\n      userPalette: isObject(options.theme) ? paletteType(options.theme.palette) : \"inbuilt\"\n    };\n    miniChartSeries = miniChartSeries.map((series) => {\n      series.type ?? (series.type = \"line\");\n      const { innerLabels: _, ...seriesTheme } = this.getSeriesThemeConfig(series.type).series ?? {};\n      const seriesOptions = mergeDefaults(\n        this.getSeriesGroupingOptions(series),\n        series,\n        seriesTheme,\n        this.getSeriesPalette(series.type, paletteOptions)\n      );\n      return this.activeTheme.templateTheme(seriesOptions);\n    });\n    options.navigator.miniChart.series = this.setSeriesGroupingOptions(miniChartSeries);\n  }\n  getSeriesPalette(seriesType2, options) {\n    const paletteFactory = seriesRegistry.getPaletteFactory(seriesType2);\n    const { colourIndex: colourOffset, userPalette } = options;\n    const { fills = [], strokes = [] } = this.activeTheme.palette;\n    return paletteFactory?.({\n      userPalette,\n      colorsCount: Math.max(fills.length, strokes.length),\n      themeTemplateParameters: this.activeTheme.getTemplateParameters(),\n      palette: this.activeTheme.palette,\n      takeColors(count) {\n        options.colourIndex += count;\n        return {\n          fills: circularSliceArray(fills, count, colourOffset),\n          strokes: circularSliceArray(strokes, count, colourOffset)\n        };\n      }\n    });\n  }\n  getSeriesGroupingOptions(series) {\n    const groupable = seriesRegistry.isGroupable(series.type);\n    const stackable = seriesRegistry.isStackable(series.type);\n    const stackedByDefault = seriesRegistry.isStackedByDefault(series.type);\n    if (series.grouped && !groupable) {\n      Logger.warnOnce(`unsupported grouping of series type \"${series.type}\".`);\n    }\n    if ((series.stacked || series.stackGroup) && !stackable) {\n      Logger.warnOnce(`unsupported stacking of series type \"${series.type}\".`);\n    }\n    let { grouped, stacked } = series;\n    stacked ?? (stacked = (stackedByDefault || series.stackGroup != null) && !(groupable && grouped));\n    grouped ?? (grouped = true);\n    return {\n      stacked: stackable && stacked,\n      grouped: groupable && grouped && !(stackable && stacked)\n    };\n  }\n  setSeriesGroupingOptions(allSeries) {\n    const seriesGroups = this.getSeriesGrouping(allSeries);\n    this.debug(\"setSeriesGroupingOptions() - series grouping: \", seriesGroups);\n    const groupIdx = {};\n    const groupCount2 = seriesGroups.reduce((countMap, seriesGroup) => {\n      var _a;\n      if (seriesGroup.groupType === \"default\" /* DEFAULT */) {\n        return countMap;\n      }\n      countMap[_a = seriesGroup.seriesType] ?? (countMap[_a] = 0);\n      countMap[seriesGroup.seriesType] += seriesGroup.groupType === \"stack\" /* STACK */ ? 1 : seriesGroup.series.length;\n      return countMap;\n    }, {});\n    return seriesGroups.flatMap((seriesGroup) => {\n      var _a;\n      groupIdx[_a = seriesGroup.seriesType] ?? (groupIdx[_a] = 0);\n      switch (seriesGroup.groupType) {\n        case \"stack\" /* STACK */: {\n          const groupIndex = groupIdx[seriesGroup.seriesType]++;\n          return seriesGroup.series.map(\n            (series, stackIndex) => Object.assign(series, {\n              seriesGrouping: {\n                groupId: seriesGroup.groupId,\n                groupIndex,\n                groupCount: groupCount2[seriesGroup.seriesType],\n                stackIndex,\n                stackCount: seriesGroup.series.length\n              }\n            })\n          );\n        }\n        case \"group\" /* GROUP */:\n          return seriesGroup.series.map(\n            (series) => Object.assign(series, {\n              seriesGrouping: {\n                groupId: seriesGroup.groupId,\n                groupIndex: groupIdx[seriesGroup.seriesType]++,\n                groupCount: groupCount2[seriesGroup.seriesType],\n                stackIndex: 0,\n                stackCount: 0\n              }\n            })\n          );\n      }\n      return seriesGroup.series;\n    }).map(({ stacked: _, grouped: __, ...seriesOptions }) => seriesOptions);\n  }\n  getSeriesGroupId(series) {\n    return [series.type, series.xKey, series.stacked ? series.stackGroup ?? \"stacked\" : \"grouped\"].filter(Boolean).join(\"-\");\n  }\n  getSeriesGrouping(allSeries) {\n    const groupMap = /* @__PURE__ */ new Map();\n    return allSeries.reduce((result, series) => {\n      const seriesType2 = series.type;\n      if (!series.stacked && !series.grouped) {\n        result.push({ groupType: \"default\" /* DEFAULT */, seriesType: seriesType2, series: [series], groupId: \"__default__\" });\n      } else {\n        const groupId = this.getSeriesGroupId(series);\n        if (!groupMap.has(groupId)) {\n          const groupType = series.stacked ? \"stack\" /* STACK */ : \"group\" /* GROUP */;\n          const record = { groupType, seriesType: seriesType2, series: [], groupId };\n          groupMap.set(groupId, record);\n          result.push(record);\n        }\n        groupMap.get(groupId).series.push(series);\n      }\n      return result;\n    }, []);\n  }\n  getDefaultSeriesType(options) {\n    if (isAgCartesianChartOptions(options)) {\n      return \"line\";\n    } else if (isAgPolarChartOptions(options)) {\n      return \"pie\";\n    } else if (isAgHierarchyChartOptions(options)) {\n      return \"treemap\";\n    } else if (isAgTopologyChartOptions(options)) {\n      return \"map-shape\";\n    } else if (isAgFlowProportionChartOptions(options)) {\n      return \"sankey\";\n    } else if (isAgStandaloneChartOptions(options)) {\n      return \"pyramid\";\n    } else if (isAgGaugeChartOptions(options)) {\n      return \"radial-gauge\";\n    }\n    throw new Error(\"Invalid chart options type detected.\");\n  }\n  getTooltipPositionDefaults(options) {\n    const position = options.tooltip?.position;\n    if (!isPlainObject(position)) {\n      return;\n    }\n    const { type, xOffset, yOffset } = position;\n    const result = {};\n    if (isString(type) && isEnumValue(AgTooltipPositionType, type)) {\n      result.type = type;\n    }\n    if (isFiniteNumber(xOffset)) {\n      result.xOffset = xOffset;\n    }\n    if (isFiniteNumber(yOffset)) {\n      result.yOffset = yOffset;\n    }\n    return { tooltip: { position: result } };\n  }\n  // AG-11591 Support for new series-specific & legacy chart-global 'tooltip.range' options\n  //\n  // The `chart.series[].tooltip.range` option is a bit different for legacy reason. This use to be\n  // global option (`chart.tooltip.range`) that could override the theme. But now, the tooltip range\n  // option is series-specific.\n  //\n  // To preserve backward compatiblity, the `chart.tooltip.range` theme default has been changed from\n  // 'nearest' to undefined.\n  getTooltipRangeDefaults(options, seriesType2) {\n    return {\n      tooltip: {\n        range: options.tooltip?.range ?? seriesRegistry.getTooltipDefauls(seriesType2)?.range\n      }\n    };\n  }\n  deprecationWarnings(options) {\n    const deprecatedArrayProps = { yKeys: \"yKey\", yNames: \"yName\" };\n    Object.entries(deprecatedArrayProps).forEach(([oldProp, newProp]) => {\n      if (options.series?.some((s) => s[oldProp] != null)) {\n        Logger.warnOnce(\n          `Property [series.${oldProp}] is deprecated, please use [series.${newProp}] and multiple series instead.`\n        );\n      }\n    });\n  }\n  axesTypeIntegrity(options) {\n    if (\"axes\" in options) {\n      const axes = options.axes ?? [];\n      for (const { type } of axes) {\n        if (!isAxisOptionType(type)) {\n          delete options.axes;\n          const expectedTypes = axisRegistry.publicKeys().join(\", \");\n          Logger.warnOnce(`unknown axis type: ${type}; expected one of: ${expectedTypes}`);\n        }\n      }\n    }\n  }\n  seriesTypeIntegrity(options) {\n    options.series = options.series?.filter(({ type }) => {\n      if (type == null || isSeriesOptionType(type) || isEnterpriseSeriesType(type)) {\n        return true;\n      }\n      Logger.warnOnce(\n        `unknown series type: ${type}; expected one of: ${publicChartTypes.seriesTypes.join(\", \")}`\n      );\n    });\n  }\n  soloSeriesIntegrity(options) {\n    const allSeries = options.series;\n    if (allSeries && allSeries.length > 1 && allSeries.some((series) => seriesRegistry.isSolo(series.type))) {\n      const mainSeriesType = this.optionsType(options);\n      if (seriesRegistry.isSolo(mainSeriesType)) {\n        Logger.warn(\n          `series[0] of type '${mainSeriesType}' is incompatible with other series types. Only processing series[0]`\n        );\n        options.series = allSeries.slice(0, 1);\n      } else {\n        const { solo, nonSolo } = groupBy(\n          allSeries,\n          (s) => seriesRegistry.isSolo(s.type) ? \"solo\" : \"nonSolo\"\n        );\n        const rejects = unique(solo.map((s) => s.type)).join(\", \");\n        Logger.warn(`Unable to mix these series types with the lead series type: ${rejects}`);\n        options.series = nonSolo;\n      }\n    }\n  }\n  enableConfiguredOptions(options, userOptions) {\n    jsonWalk(\n      userOptions,\n      (visitingUserOpts, visitingMergedOpts) => {\n        if (visitingMergedOpts && \"enabled\" in visitingMergedOpts && !visitingMergedOpts._enabledFromTheme && visitingUserOpts.enabled == null) {\n          visitingMergedOpts.enabled = true;\n        }\n      },\n      { skip: [\"data\", \"theme\"] },\n      options\n    );\n    jsonWalk(\n      options,\n      (visitingMergedOpts) => {\n        if (visitingMergedOpts._enabledFromTheme != null) {\n          delete visitingMergedOpts._enabledFromTheme;\n        }\n      },\n      { skip: [\"data\", \"theme\"] }\n    );\n  }\n  removeDisabledOptions(options) {\n    jsonWalk(\n      options,\n      (optionsNode) => {\n        if (\"enabled\" in optionsNode && optionsNode.enabled === false) {\n          Object.keys(optionsNode).forEach((key) => {\n            if (key === \"enabled\")\n              return;\n            delete optionsNode[key];\n          });\n        }\n      },\n      { skip: [\"data\", \"theme\"] }\n    );\n  }\n  removeLeftoverSymbols(options) {\n    jsonWalk(\n      options,\n      (optionsNode) => {\n        if (!optionsNode || !isObject(optionsNode))\n          return;\n        for (const [key, value] of Object.entries(optionsNode)) {\n          if (isSymbol(value)) {\n            delete optionsNode[key];\n          }\n        }\n      },\n      { skip: [\"data\"] }\n    );\n  }\n  specialOverridesDefaults(options) {\n    if (options.window != null) {\n      setWindow(options.window);\n    } else if (typeof window !== \"undefined\") {\n      options.window = window;\n    } else if (typeof global !== \"undefined\") {\n      options.window = global.window;\n    }\n    if (options.document != null) {\n      setDocument(options.document);\n    } else if (typeof document !== \"undefined\") {\n      options.document = document;\n    } else if (typeof global !== \"undefined\") {\n      options.document = global.document;\n    }\n    if (options.window == null) {\n      throw new Error(\"AG Charts - unable to resolve global window\");\n    }\n    if (options.document == null) {\n      throw new Error(\"AG Charts - unable to resolve global document\");\n    }\n    return options;\n  }\n};\n\n// packages/ag-charts-community/src/api/agCharts.ts\nvar debug2 = Debug.create(true, \"opts\");\nfunction chartType(options) {\n  if (isAgCartesianChartOptions(options)) {\n    return \"cartesian\";\n  } else if (isAgPolarChartOptions(options)) {\n    return \"polar\";\n  } else if (isAgHierarchyChartOptions(options)) {\n    return \"hierarchy\";\n  } else if (isAgTopologyChartOptions(options)) {\n    return \"topology\";\n  } else if (isAgFlowProportionChartOptions(options)) {\n    return \"flow-proportion\";\n  } else if (isAgStandaloneChartOptions(options)) {\n    return \"standalone\";\n  } else if (isAgGaugeChartOptions(options)) {\n    return \"gauge\";\n  }\n  throw new Error(`AG Chart - unknown type of chart for options with type: ${options.type}`);\n}\nvar AgCharts = class {\n  static licenseCheck(options) {\n    if (this.licenseChecked)\n      return;\n    this.licenseManager = enterpriseModule.licenseManager?.(options);\n    this.licenseManager?.setLicenseKey(this.licenseKey, this.gridContext);\n    this.licenseManager?.validateLicense();\n    this.licenseChecked = true;\n  }\n  static setLicenseKey(licenseKey) {\n    this.licenseKey = licenseKey;\n  }\n  static setGridContext(gridContext) {\n    this.gridContext = gridContext;\n  }\n  static getLicenseDetails(licenseKey) {\n    return enterpriseModule.licenseManager?.({}).getLicenseDetails(licenseKey);\n  }\n  /**\n   * Returns the `AgChartInstance` for a DOM node, if there is one.\n   */\n  static getInstance(element2) {\n    return AgChartsInternal.getInstance(element2);\n  }\n  /**\n   * Create a new `AgChartInstance` based upon the given configuration options.\n   */\n  static create(userOptions, optionsMetadata) {\n    this.licenseCheck(userOptions);\n    const chart = AgChartsInternal.createOrUpdate({\n      userOptions,\n      licenseManager: this.licenseManager,\n      styles: enterpriseModule.styles != null ? [[\"ag-charts-enterprise\", enterpriseModule.styles]] : [],\n      optionsMetadata\n    });\n    if (this.licenseManager?.isDisplayWatermark() && this.licenseManager) {\n      enterpriseModule.injectWatermark?.(chart.chart.ctx.domManager, this.licenseManager.getWatermarkMessage());\n    }\n    return chart;\n  }\n  static createFinancialChart(options) {\n    return this.create(options, { presetType: \"price-volume\" });\n  }\n  static createGauge(options) {\n    return this.create(options, { presetType: \"gauge\" });\n  }\n  static __createSparkline(options) {\n    return this.create(options, { presetType: \"sparkline\" });\n  }\n};\nAgCharts.licenseChecked = false;\nAgCharts.gridContext = false;\nvar _AgChartsInternal = class _AgChartsInternal {\n  static getInstance(element2) {\n    const chart = Chart.getInstance(element2);\n    return chart ? AgChartInstanceProxy.chartInstances.get(chart) : void 0;\n  }\n  static initialiseModules() {\n    if (_AgChartsInternal.initialised)\n      return;\n    registerInbuiltModules();\n    setupModules();\n    _AgChartsInternal.initialised = true;\n  }\n  static createOrUpdate(opts) {\n    let { proxy } = opts;\n    const {\n      userOptions,\n      licenseManager,\n      styles,\n      processedOverrides = proxy?.chart.chartOptions.processedOverrides ?? {},\n      specialOverrides = proxy?.chart.chartOptions.specialOverrides ?? {},\n      optionsMetadata = proxy?.chart.chartOptions.optionMetadata ?? {}\n    } = opts;\n    const { presetType } = optionsMetadata;\n    _AgChartsInternal.initialiseModules();\n    debug2(\">>> AgCharts.createOrUpdate() user options\", userOptions);\n    let mutableOptions = userOptions;\n    if (AgCharts.optionsMutationFn) {\n      mutableOptions = AgCharts.optionsMutationFn(mutableOptions, presetType);\n      debug2(\">>> AgCharts.createOrUpdate() MUTATED user options\", mutableOptions);\n    }\n    const { overrideDevicePixelRatio, document: document2, window: userWindow, styleContainer, ...options } = mutableOptions;\n    const chartOptions = new ChartOptions(\n      options,\n      processedOverrides,\n      {\n        ...specialOverrides,\n        document: document2,\n        window: userWindow,\n        overrideDevicePixelRatio,\n        styleContainer\n      },\n      optionsMetadata\n    );\n    let chart = proxy?.chart;\n    if (chart == null || chartType(chartOptions.processedOptions) !== chartType(chart?.chartOptions.processedOptions)) {\n      chart = _AgChartsInternal.createChartInstance(chartOptions, chart);\n      styles?.forEach(([id, css]) => {\n        chart?.ctx.domManager.addStyles(id, css);\n      });\n    }\n    if (proxy == null) {\n      proxy = new AgChartInstanceProxy(chart, _AgChartsInternal.callbackApi, licenseManager);\n    } else {\n      proxy.chart = chart;\n    }\n    if (debug2.check() && typeof window !== \"undefined\") {\n      window.agChartInstances ?? (window.agChartInstances = {});\n      window.agChartInstances[chart.id] = chart;\n    }\n    chart.queuedUserOptions.push(userOptions);\n    chart.requestFactoryUpdate((chartRef) => {\n      chartRef.applyOptions(chartOptions);\n      const queueIdx = chartRef.queuedUserOptions.indexOf(userOptions) + 1;\n      chartRef.queuedUserOptions.splice(0, queueIdx);\n    });\n    return proxy;\n  }\n  static updateUserDelta(proxy, deltaOptions) {\n    deltaOptions = deepClone(deltaOptions, { shallow: [\"data\"] });\n    jsonWalk(\n      deltaOptions,\n      (node) => {\n        if (typeof node !== \"object\")\n          return;\n        for (const [key, value] of Object.entries(node)) {\n          if (typeof value === \"undefined\") {\n            Object.assign(node, { [key]: Symbol(\"UNSET\") });\n          }\n        }\n      },\n      { skip: [\"data\"] }\n    );\n    const { chart } = proxy;\n    const lastUpdateOptions = chart.getOptions();\n    const userOptions = mergeDefaults(deltaOptions, lastUpdateOptions);\n    debug2(\">>> AgCharts.updateUserDelta() user delta\", deltaOptions);\n    debug2(\"AgCharts.updateUserDelta() - base options\", lastUpdateOptions);\n    _AgChartsInternal.createOrUpdate({ userOptions, proxy });\n  }\n  static createChartInstance(options, oldChart) {\n    const transferableResource = oldChart?.destroy({ keepTransferableResources: true });\n    const ChartConstructor = _AgChartsInternal.getChartByOptions(options.processedOptions);\n    return new ChartConstructor(options, transferableResource);\n  }\n  static getChartByOptions(options) {\n    if (isAgCartesianChartOptions(options)) {\n      return CartesianChart;\n    } else if (isAgHierarchyChartOptions(options)) {\n      return HierarchyChart;\n    } else if (isAgPolarChartOptions(options)) {\n      return PolarChart;\n    } else if (isAgTopologyChartOptions(options)) {\n      return TopologyChart;\n    } else if (isAgFlowProportionChartOptions(options)) {\n      return FlowProportionChart;\n    } else if (isAgStandaloneChartOptions(options)) {\n      return StandaloneChart;\n    } else if (isAgGaugeChartOptions(options)) {\n      return GaugeChart;\n    }\n    throw new Error(\n      `AG Charts - couldn't apply configuration, check options are correctly structured and series types are specified`\n    );\n  }\n};\n_AgChartsInternal.caretaker = new MementoCaretaker(VERSION);\n_AgChartsInternal.initialised = false;\n_AgChartsInternal.callbackApi = {\n  caretaker: _AgChartsInternal.caretaker,\n  create(userOptions, processedOverrides, specialOverrides, optionsMetadata) {\n    return _AgChartsInternal.createOrUpdate({\n      userOptions,\n      processedOverrides,\n      specialOverrides,\n      optionsMetadata\n    });\n  },\n  update(opts, chart) {\n    return _AgChartsInternal.createOrUpdate({ userOptions: opts, proxy: chart });\n  },\n  updateUserDelta(chart, deltaOptions) {\n    return _AgChartsInternal.updateUserDelta(chart, deltaOptions);\n  }\n};\nvar AgChartsInternal = _AgChartsInternal;\n\n// packages/ag-charts-community/src/main-modules.ts\nfunction setupCommunityModules() {\n  registerInbuiltModules();\n  return { AgCharts, version: VERSION };\n}\n\n// packages/ag-charts-community/src/integrated-charts-scene.ts\nvar integrated_charts_scene_exports = {};\n__export(integrated_charts_scene_exports, {\n  Arc: () => Arc2,\n  ArrowDown: () => ArrowDown,\n  ArrowUp: () => ArrowUp,\n  BBox: () => BBox,\n  BandScale: () => BandScale,\n  Caption: () => Caption,\n  ChangeDetectableProperties: () => ChangeDetectableProperties,\n  Circle: () => Circle,\n  ConicGradient: () => ConicGradient,\n  ContinuousScale: () => ContinuousScale,\n  Diamond: () => Diamond,\n  DropShadow: () => DropShadow,\n  ExtendedPath2D: () => ExtendedPath2D,\n  Gradient: () => Gradient,\n  Group: () => Group,\n  HdpiCanvas: () => HdpiCanvas,\n  Image: () => Image,\n  Label: () => Label,\n  Layer: () => Layer,\n  Line: () => Line,\n  LinearGradient: () => LinearGradient,\n  LinearScale: () => LinearScale,\n  Marker: () => Marker,\n  Node: () => Node,\n  OrdinalTimeScale: () => OrdinalTimeScale,\n  Path: () => Path,\n  PointerEvents: () => PointerEvents,\n  RadialColumnShape: () => RadialColumnShape,\n  Rect: () => Rect,\n  RedrawType: () => RedrawType,\n  Rotatable: () => Rotatable,\n  RotatableGroup: () => RotatableGroup,\n  RotatableText: () => RotatableText,\n  Scalable: () => Scalable,\n  ScalableGroup: () => ScalableGroup,\n  Scene: () => Scene,\n  SceneChangeDetection: () => SceneChangeDetection,\n  ScenePathChangeDetection: () => ScenePathChangeDetection,\n  Sector: () => Sector,\n  SectorBox: () => SectorBox,\n  Selection: () => Selection,\n  Shape: () => Shape,\n  Square: () => Square,\n  SvgPath: () => SvgPath,\n  Text: () => Text,\n  Tooltip: () => Tooltip,\n  Transformable: () => Transformable,\n  TransformableText: () => TransformableText,\n  Translatable: () => Translatable,\n  TranslatableGroup: () => TranslatableGroup,\n  TranslatableLayer: () => TranslatableLayer,\n  Triangle: () => Triangle,\n  calculateDerivativeExtrema: () => calculateDerivativeExtrema,\n  calculateDerivativeExtremaXY: () => calculateDerivativeExtremaXY,\n  drawCorner: () => drawCorner,\n  easing: () => easing_exports,\n  evaluateBezier: () => evaluateBezier,\n  getFont: () => getFont,\n  getMarker: () => getMarker,\n  getRadialColumnWidth: () => getRadialColumnWidth,\n  motion: () => motion,\n  sectorBox: () => sectorBox,\n  solveBezier: () => solveBezier,\n  splitBezier: () => splitBezier,\n  toRadians: () => toRadians,\n  toTooltipHtml: () => toTooltipHtml\n});\n\n// packages/ag-charts-community/src/scene/shape/arc.ts\nvar Arc2 = class extends Path {\n  constructor() {\n    super();\n    this.centerX = 0;\n    this.centerY = 0;\n    this.radius = 10;\n    this.startAngle = 0;\n    this.endAngle = Math.PI * 2;\n    this.counterClockwise = false;\n    this.type = 0 /* Open */;\n    this.restoreOwnStyles();\n  }\n  get fullPie() {\n    return isEqual(normalizeAngle360(this.startAngle), normalizeAngle360(this.endAngle));\n  }\n  updatePath() {\n    const path = this.path;\n    path.clear();\n    path.arc(this.centerX, this.centerY, this.radius, this.startAngle, this.endAngle, this.counterClockwise);\n    if (this.type === 1 /* Chord */) {\n      path.closePath();\n    } else if (this.type === 2 /* Round */ && !this.fullPie) {\n      path.lineTo(this.centerX, this.centerY);\n      path.closePath();\n    }\n  }\n  computeBBox() {\n    return new BBox(this.centerX - this.radius, this.centerY - this.radius, this.radius * 2, this.radius * 2);\n  }\n  isPointInPath(x, y) {\n    const bbox = this.getBBox();\n    return this.type !== 0 /* Open */ && bbox.containsPoint(x, y) && this.path.isPointInPath(x, y);\n  }\n};\nArc2.className = \"Arc\";\nArc2.defaultStyles = { ...Shape.defaultStyles, lineWidth: 1, fillStyle: null };\n__decorateClass([\n  ScenePathChangeDetection()\n], Arc2.prototype, \"centerX\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Arc2.prototype, \"centerY\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Arc2.prototype, \"radius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Arc2.prototype, \"startAngle\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Arc2.prototype, \"endAngle\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Arc2.prototype, \"counterClockwise\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], Arc2.prototype, \"type\", 2);\n\n// packages/ag-charts-community/src/scene/gradient/conicGradient.ts\nvar ConicGradient = class extends Gradient {\n  constructor(colorSpace, stops, angle2 = 0, bbox) {\n    super(colorSpace, stops, bbox);\n    this.angle = angle2;\n  }\n  createCanvasGradient(ctx, bbox) {\n    const angleOffset = 90;\n    const { colorSpace, stops, angle: angle2 } = this;\n    const radians = normalizeAngle360(toRadians(angle2 + angleOffset));\n    if (!(\"createConicGradient\" in ctx)) {\n      const linearGradient = new LinearGradient(colorSpace, stops, angle2);\n      return linearGradient.createCanvasGradient(ctx, bbox);\n    }\n    const cx = bbox.x + bbox.width * 0.5;\n    const cy = bbox.y + bbox.height * 0.5;\n    return ctx.createConicGradient(radians, cx, cy);\n  }\n};\n\n// packages/ag-charts-community/src/scene/shape/radialColumnShape.ts\nfunction rotatePoint(x, y, rotation) {\n  const radius = Math.sqrt(x ** 2 + y ** 2);\n  const angle2 = Math.atan2(y, x);\n  const rotated = angle2 + rotation;\n  return {\n    x: Math.cos(rotated) * radius,\n    y: Math.sin(rotated) * radius\n  };\n}\nvar RadialColumnShape = class extends Path {\n  constructor() {\n    super(...arguments);\n    this.isBeveled = true;\n    this.columnWidth = 0;\n    this.startAngle = 0;\n    this.endAngle = 0;\n    this.outerRadius = 0;\n    this.innerRadius = 0;\n    this.axisInnerRadius = 0;\n    this.axisOuterRadius = 0;\n    this.isRadiusAxisReversed = false;\n  }\n  set cornerRadius(_value) {\n  }\n  computeBBox() {\n    const { innerRadius, outerRadius, columnWidth } = this;\n    const rotation = this.getRotation();\n    const left = -columnWidth / 2;\n    const right = columnWidth / 2;\n    const top = -outerRadius;\n    const bottom = -innerRadius;\n    let x0 = Infinity;\n    let y0 = Infinity;\n    let x1 = -Infinity;\n    let y1 = -Infinity;\n    for (let i = 0; i < 4; i += 1) {\n      const { x, y } = rotatePoint(i % 2 === 0 ? left : right, i < 2 ? top : bottom, rotation);\n      x0 = Math.min(x, x0);\n      y0 = Math.min(y, y0);\n      x1 = Math.max(x, x1);\n      y1 = Math.max(y, y1);\n    }\n    return new BBox(x0, y0, x1 - x0, y1 - y0);\n  }\n  getRotation() {\n    const { startAngle, endAngle } = this;\n    const midAngle = angleBetween(startAngle, endAngle);\n    return normalizeAngle360(startAngle + midAngle / 2 + Math.PI / 2);\n  }\n  updatePath() {\n    const { isBeveled } = this;\n    if (isBeveled) {\n      this.updateBeveledPath();\n    } else {\n      this.updateRectangularPath();\n    }\n    this.checkPathDirty();\n  }\n  updateRectangularPath() {\n    const { columnWidth, innerRadius, outerRadius, path } = this;\n    const left = -columnWidth / 2;\n    const right = columnWidth / 2;\n    const top = -outerRadius;\n    const bottom = -innerRadius;\n    const rotation = this.getRotation();\n    const points = [\n      [left, bottom],\n      [left, top],\n      [right, top],\n      [right, bottom]\n    ].map(([x, y]) => rotatePoint(x, y, rotation));\n    path.clear(true);\n    path.moveTo(points[0].x, points[0].y);\n    path.lineTo(points[1].x, points[1].y);\n    path.lineTo(points[2].x, points[2].y);\n    path.lineTo(points[3].x, points[3].y);\n    path.closePath();\n  }\n  updateBeveledPath() {\n    const { columnWidth, path, outerRadius, innerRadius, axisInnerRadius, axisOuterRadius, isRadiusAxisReversed } = this;\n    const isStackBottom = isEqual(innerRadius, axisInnerRadius);\n    const sideRotation = Math.asin(columnWidth / 2 / innerRadius);\n    const pointRotation = this.getRotation();\n    const rotate2 = (x, y) => rotatePoint(x, y, pointRotation);\n    const getTriangleHypotenuse = (leg, otherLeg) => Math.sqrt(leg ** 2 + otherLeg ** 2);\n    const getTriangleLeg = (hypotenuse, otherLeg) => {\n      if (otherLeg > hypotenuse) {\n        return 0;\n      }\n      return Math.sqrt(hypotenuse ** 2 - otherLeg ** 2);\n    };\n    const compare = (value, otherValue, lessThan) => lessThan ? value < otherValue : value > otherValue;\n    const shouldConnectBottomCircle = isStackBottom && !isNaN(sideRotation) && sideRotation < Math.PI / 6;\n    let left = -columnWidth / 2;\n    let right = columnWidth / 2;\n    const top = -outerRadius;\n    const bottom = -innerRadius * (shouldConnectBottomCircle ? Math.cos(sideRotation) : 1);\n    const hasBottomIntersection = compare(\n      axisOuterRadius,\n      getTriangleHypotenuse(innerRadius, columnWidth / 2),\n      !isRadiusAxisReversed\n    );\n    if (hasBottomIntersection) {\n      const bottomIntersectionX = getTriangleLeg(axisOuterRadius, innerRadius);\n      left = -bottomIntersectionX;\n      right = bottomIntersectionX;\n    }\n    path.clear(true);\n    const bottomLeftPt = rotate2(left, bottom);\n    path.moveTo(bottomLeftPt.x, bottomLeftPt.y);\n    const isEmpty = isEqual(innerRadius, outerRadius);\n    const hasSideIntersection = compare(\n      axisOuterRadius,\n      getTriangleHypotenuse(outerRadius, columnWidth / 2),\n      !isRadiusAxisReversed\n    );\n    if (isEmpty && shouldConnectBottomCircle) {\n      path.arc(\n        0,\n        0,\n        innerRadius,\n        normalizeAngle360(-sideRotation - Math.PI / 2) + pointRotation,\n        normalizeAngle360(sideRotation - Math.PI / 2) + pointRotation,\n        false\n      );\n    } else if (hasSideIntersection) {\n      const sideIntersectionY = -getTriangleLeg(axisOuterRadius, columnWidth / 2);\n      const topIntersectionX = getTriangleLeg(axisOuterRadius, outerRadius);\n      if (!hasBottomIntersection) {\n        const topLeftPt = rotate2(left, sideIntersectionY);\n        path.lineTo(topLeftPt.x, topLeftPt.y);\n      }\n      path.arc(\n        0,\n        0,\n        axisOuterRadius,\n        Math.atan2(sideIntersectionY, left) + pointRotation,\n        Math.atan2(top, -topIntersectionX) + pointRotation,\n        false\n      );\n      if (!isEqual(topIntersectionX, 0)) {\n        const topRightBevelPt = rotate2(topIntersectionX, top);\n        path.lineTo(topRightBevelPt.x, topRightBevelPt.y);\n      }\n      path.arc(\n        0,\n        0,\n        axisOuterRadius,\n        Math.atan2(top, topIntersectionX) + pointRotation,\n        Math.atan2(sideIntersectionY, right) + pointRotation,\n        false\n      );\n    } else {\n      const topLeftPt = rotate2(left, top);\n      const topRightPt = rotate2(right, top);\n      path.lineTo(topLeftPt.x, topLeftPt.y);\n      path.lineTo(topRightPt.x, topRightPt.y);\n    }\n    const bottomRightPt = rotate2(right, bottom);\n    path.lineTo(bottomRightPt.x, bottomRightPt.y);\n    if (shouldConnectBottomCircle) {\n      path.arc(\n        0,\n        0,\n        innerRadius,\n        normalizeAngle360(sideRotation - Math.PI / 2) + pointRotation,\n        normalizeAngle360(-sideRotation - Math.PI / 2) + pointRotation,\n        true\n      );\n    } else {\n      const rotatedBottomLeftPt = rotate2(left, bottom);\n      path.lineTo(rotatedBottomLeftPt.x, rotatedBottomLeftPt.y);\n    }\n    path.closePath();\n  }\n};\nRadialColumnShape.className = \"RadialColumnShape\";\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"isBeveled\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"columnWidth\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"startAngle\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"endAngle\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"outerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"innerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"axisInnerRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"axisOuterRadius\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], RadialColumnShape.prototype, \"isRadiusAxisReversed\", 2);\nfunction getRadialColumnWidth(startAngle, endAngle, axisOuterRadius, columnWidthRatio, maxColumnWidthRatio) {\n  const rotation = angleBetween(startAngle, endAngle);\n  const pad2 = rotation * (1 - columnWidthRatio) / 2;\n  startAngle += pad2;\n  endAngle -= pad2;\n  if (rotation < 1e-3) {\n    return 2 * axisOuterRadius * maxColumnWidthRatio;\n  }\n  if (rotation >= 2 * Math.PI) {\n    const midAngle = startAngle + rotation / 2;\n    startAngle = midAngle - Math.PI;\n    endAngle = midAngle + Math.PI;\n  }\n  const startX = axisOuterRadius * Math.cos(startAngle);\n  const startY = axisOuterRadius * Math.sin(startAngle);\n  const endX = axisOuterRadius * Math.cos(endAngle);\n  const endY = axisOuterRadius * Math.sin(endAngle);\n  const colWidth = Math.floor(Math.sqrt((startX - endX) ** 2 + (startY - endY) ** 2));\n  const maxWidth = 2 * axisOuterRadius * maxColumnWidthRatio;\n  return Math.max(1, Math.min(maxWidth, colWidth));\n}\n\n// packages/ag-charts-community/src/scene/shape/svgPath.ts\nvar SvgPath = class extends Path {\n  constructor(d = \"\") {\n    super();\n    this.x = 0;\n    this.y = 0;\n    this.commands = [];\n    this._d = \"\";\n    this.d = d;\n  }\n  get d() {\n    return this._d;\n  }\n  set d(d) {\n    if (d === this._d)\n      return;\n    this._d = d;\n    this.commands.length = 0;\n    for (const [_, command, paramsString] of d.matchAll(/([A-Z])([0-9. ]*)/g)) {\n      const params = paramsString.split(/\\s+/g).map(Number);\n      this.commands.push([command, params]);\n    }\n    this.checkPathDirty();\n  }\n  updatePath() {\n    const { path, x, y } = this;\n    path.clear();\n    let lastX = x;\n    let lastY = y;\n    for (const [command, params] of this.commands) {\n      switch (command) {\n        case \"M\":\n          path.moveTo(x + params[0], y + params[1]);\n          lastX = x + params[0];\n          break;\n        case \"C\":\n          path.cubicCurveTo(\n            x + params[0],\n            y + params[1],\n            x + params[2],\n            y + params[3],\n            x + params[4],\n            y + params[5]\n          );\n          lastX = x + params[4];\n          lastY = y + params[5];\n          break;\n        case \"H\":\n          path.lineTo(x + params[0], lastY);\n          lastX = y + params[0];\n          break;\n        case \"L\":\n          path.lineTo(x + params[0], y + params[1]);\n          lastX = x + params[0];\n          lastY = y + params[1];\n          break;\n        case \"V\":\n          path.lineTo(lastX, y + params[0]);\n          lastY = y + params[0];\n          break;\n        case \"Z\":\n          path.closePath();\n          break;\n        default:\n          throw new Error(`Could not translate command '${command}' with '${params.join(\" \")}'`);\n      }\n    }\n    path.closePath();\n  }\n};\n__decorateClass([\n  ScenePathChangeDetection()\n], SvgPath.prototype, \"x\", 2);\n__decorateClass([\n  ScenePathChangeDetection()\n], SvgPath.prototype, \"y\", 2);\n\n// packages/ag-charts-community/src/chart/marker/arrowUp.ts\nvar _ArrowUp = class _ArrowUp extends Marker {\n  updatePath() {\n    const s = this.size / 2;\n    super.applyPath(s, _ArrowUp.moves);\n  }\n};\n_ArrowUp.className = \"ArrowUp\";\n_ArrowUp.moves = [\n  { x: 0, y: 0, t: \"move\" },\n  { x: 1, y: 1.2 },\n  { x: -0.5, y: 0 },\n  { x: 0, y: 0.8 },\n  { x: -1, y: 0 },\n  { x: 0, y: -0.8 },\n  { x: -0.5, y: 0 }\n];\nvar ArrowUp = _ArrowUp;\n\n// packages/ag-charts-community/src/chart/marker/arrowDown.ts\nvar ArrowDown = class extends Marker {\n  updatePath() {\n    const s = this.size / 2;\n    super.applyPath(\n      s,\n      ArrowUp.moves.map((m) => ({ x: m.x * -1, y: m.y * -1 }))\n    );\n  }\n};\nArrowDown.className = \"ArrowDown\";\n\n// packages/ag-charts-community/src/integrated-charts-scene.ts\nvar motion = { ...fromToMotion_exports, ...resetMotion_exports };\nvar getFont = TextUtils.toFontString;\n\n// packages/ag-charts-community/src/integrated-charts-theme.ts\nvar integrated_charts_theme_exports = {};\n__export(integrated_charts_theme_exports, {\n  CARTESIAN_AXIS_TYPE: () => CARTESIAN_AXIS_TYPE,\n  CARTESIAN_POSITION: () => CARTESIAN_POSITION,\n  ChartTheme: () => ChartTheme,\n  DEFAULT_ANNOTATION_BACKGROUND_FILL: () => DEFAULT_ANNOTATION_BACKGROUND_FILL,\n  DEFAULT_ANNOTATION_COLOR: () => DEFAULT_ANNOTATION_COLOR,\n  DEFAULT_ANNOTATION_HANDLE_FILL: () => DEFAULT_ANNOTATION_HANDLE_FILL,\n  DEFAULT_ANNOTATION_STATISTICS_COLOR: () => DEFAULT_ANNOTATION_STATISTICS_COLOR,\n  DEFAULT_ANNOTATION_STATISTICS_DIVIDER_STROKE: () => DEFAULT_ANNOTATION_STATISTICS_DIVIDER_STROKE,\n  DEFAULT_ANNOTATION_STATISTICS_DOWN_FILL: () => DEFAULT_ANNOTATION_STATISTICS_DOWN_FILL,\n  DEFAULT_ANNOTATION_STATISTICS_DOWN_STROKE: () => DEFAULT_ANNOTATION_STATISTICS_DOWN_STROKE,\n  DEFAULT_ANNOTATION_STATISTICS_FILL: () => DEFAULT_ANNOTATION_STATISTICS_FILL,\n  DEFAULT_ANNOTATION_STATISTICS_STROKE: () => DEFAULT_ANNOTATION_STATISTICS_STROKE,\n  DEFAULT_AXIS_GRID_COLOUR: () => DEFAULT_AXIS_GRID_COLOUR,\n  DEFAULT_AXIS_LINE_COLOUR: () => DEFAULT_AXIS_LINE_COLOUR,\n  DEFAULT_BACKGROUND_COLOUR: () => DEFAULT_BACKGROUND_COLOUR,\n  DEFAULT_CAPTION_ALIGNMENT: () => DEFAULT_CAPTION_ALIGNMENT,\n  DEFAULT_CAPTION_LAYOUT_STYLE: () => DEFAULT_CAPTION_LAYOUT_STYLE,\n  DEFAULT_COLOURS: () => DEFAULT_COLOURS,\n  DEFAULT_CROSS_LINES_COLOUR: () => DEFAULT_CROSS_LINES_COLOUR,\n  DEFAULT_DIVERGING_SERIES_COLOR_RANGE: () => DEFAULT_DIVERGING_SERIES_COLOR_RANGE,\n  DEFAULT_FONT_FAMILY: () => DEFAULT_FONT_FAMILY,\n  DEFAULT_FUNNEL_SERIES_COLOR_RANGE: () => DEFAULT_FUNNEL_SERIES_COLOR_RANGE,\n  DEFAULT_GAUGE_SERIES_COLOR_RANGE: () => DEFAULT_GAUGE_SERIES_COLOR_RANGE,\n  DEFAULT_GRIDLINE_ENABLED: () => DEFAULT_GRIDLINE_ENABLED,\n  DEFAULT_HIERARCHY_FILLS: () => DEFAULT_HIERARCHY_FILLS,\n  DEFAULT_HIERARCHY_STROKES: () => DEFAULT_HIERARCHY_STROKES,\n  DEFAULT_INSIDE_SERIES_LABEL_COLOUR: () => DEFAULT_INSIDE_SERIES_LABEL_COLOUR,\n  DEFAULT_INVERTED_LABEL_COLOUR: () => DEFAULT_INVERTED_LABEL_COLOUR,\n  DEFAULT_LABEL_COLOUR: () => DEFAULT_LABEL_COLOUR,\n  DEFAULT_MUTED_LABEL_COLOUR: () => DEFAULT_MUTED_LABEL_COLOUR,\n  DEFAULT_PADDING: () => DEFAULT_PADDING,\n  DEFAULT_POLAR_SERIES_STROKE: () => DEFAULT_POLAR_SERIES_STROKE,\n  DEFAULT_SHADOW_COLOUR: () => DEFAULT_SHADOW_COLOUR,\n  DEFAULT_TEXTBOX_COLOR: () => DEFAULT_TEXTBOX_COLOR,\n  DEFAULT_TEXTBOX_FILL: () => DEFAULT_TEXTBOX_FILL,\n  DEFAULT_TEXTBOX_STROKE: () => DEFAULT_TEXTBOX_STROKE,\n  DEFAULT_TEXT_ANNOTATION_COLOR: () => DEFAULT_TEXT_ANNOTATION_COLOR,\n  DEFAULT_TOOLBAR_POSITION: () => DEFAULT_TOOLBAR_POSITION,\n  FONT_SIZE: () => FONT_SIZE,\n  FONT_WEIGHT: () => FONT_WEIGHT2,\n  IS_COMMUNITY: () => IS_COMMUNITY,\n  IS_DARK_THEME: () => IS_DARK_THEME,\n  IS_ENTERPRISE: () => IS_ENTERPRISE,\n  PALETTE_ALT_DOWN_FILL: () => PALETTE_ALT_DOWN_FILL,\n  PALETTE_ALT_DOWN_STROKE: () => PALETTE_ALT_DOWN_STROKE,\n  PALETTE_ALT_NEUTRAL_FILL: () => PALETTE_ALT_NEUTRAL_FILL,\n  PALETTE_ALT_NEUTRAL_STROKE: () => PALETTE_ALT_NEUTRAL_STROKE,\n  PALETTE_ALT_UP_FILL: () => PALETTE_ALT_UP_FILL,\n  PALETTE_ALT_UP_STROKE: () => PALETTE_ALT_UP_STROKE,\n  PALETTE_DOWN_FILL: () => PALETTE_DOWN_FILL,\n  PALETTE_DOWN_STROKE: () => PALETTE_DOWN_STROKE,\n  PALETTE_NEUTRAL_FILL: () => PALETTE_NEUTRAL_FILL,\n  PALETTE_NEUTRAL_STROKE: () => PALETTE_NEUTRAL_STROKE,\n  PALETTE_UP_FILL: () => PALETTE_UP_FILL,\n  PALETTE_UP_STROKE: () => PALETTE_UP_STROKE,\n  POLAR_AXIS_SHAPE: () => POLAR_AXIS_SHAPE,\n  POLAR_AXIS_TYPE: () => POLAR_AXIS_TYPE,\n  getChartTheme: () => getChartTheme,\n  markerPaletteFactory: () => markerPaletteFactory,\n  singleSeriesPaletteFactory: () => singleSeriesPaletteFactory,\n  swapAxisCondition: () => swapAxisCondition,\n  themes: () => themes2\n});\nvar themes2 = mapValues(\n  themes,\n  (themeFactory) => themeFactory?.()\n);\n\n// packages/ag-charts-community/src/sparklines-scale.ts\nvar sparklines_scale_exports = {};\n__export(sparklines_scale_exports, {\n  BandScale: () => BandScale,\n  ColorScale: () => ColorScale,\n  ContinuousScale: () => ContinuousScale,\n  Invalidating: () => Invalidating,\n  LinearScale: () => LinearScale,\n  OrdinalTimeScale: () => OrdinalTimeScale,\n  TimeScale: () => TimeScale\n});\n\n// packages/ag-charts-community/src/sparklines-util.ts\nvar sparklines_util_exports = {};\n__export(sparklines_util_exports, {\n  Color: () => Color,\n  Debug: () => Debug,\n  Logger: () => Logger,\n  Padding: () => Padding,\n  TimeInterval: () => TimeInterval,\n  angleBetween: () => angleBetween,\n  angleDiff: () => angleDiff,\n  arcDistanceSquared: () => arcDistanceSquared,\n  areArrayNumbersEqual: () => areArrayNumbersEqual,\n  checkDatum: () => checkDatum,\n  clamp: () => clamp,\n  clampArray: () => clampArray,\n  clockwiseAngle: () => clockwiseAngle,\n  clockwiseAngles: () => clockwiseAngles,\n  countFractionDigits: () => countFractionDigits,\n  createId: () => createId,\n  day: () => day,\n  deepClone: () => deepClone,\n  displacePointFromVector: () => displacePointFromVector,\n  extent: () => extent,\n  findMinMax: () => findMinMax,\n  findRangeExtent: () => findRangeExtent,\n  formatNormalizedPercentage: () => formatNormalizedPercentage,\n  formatPercentage: () => formatPercentage,\n  friday: () => friday,\n  generateUUID: () => generateUUID,\n  getAttribute: () => getAttribute,\n  hour: () => hour,\n  interpolateColor: () => interpolateColor,\n  interpolateNumber: () => interpolateNumber,\n  isBetweenAngles: () => isBetweenAngles,\n  isContinuous: () => isContinuous,\n  isDate: () => isValidDate,\n  isDenseInterval: () => isDenseInterval,\n  isEqual: () => isEqual,\n  isNegative: () => isNegative,\n  isNumber: () => isFiniteNumber,\n  isNumberEqual: () => isEqual,\n  isNumberObject: () => isNumberObject,\n  isString: () => isString,\n  isStringObject: () => isStringObject,\n  jsonApply: () => jsonApply,\n  jsonDiff: () => jsonDiff,\n  jsonWalk: () => jsonWalk,\n  lineDistanceSquared: () => lineDistanceSquared,\n  millisecond: () => millisecond,\n  minute: () => minute,\n  mod: () => mod,\n  monday: () => monday,\n  month: () => month,\n  normalisedExtentWithMetadata: () => normalisedExtentWithMetadata,\n  normalizeAngle180: () => normalizeAngle180,\n  normalizeAngle360: () => normalizeAngle360,\n  normalizeAngle360Inclusive: () => normalizeAngle360Inclusive,\n  range: () => range,\n  resetIds: () => resetIds,\n  round: () => round,\n  sanitizeHtml: () => sanitizeHtml,\n  saturday: () => saturday,\n  second: () => second,\n  setAttribute: () => setAttribute,\n  setAttributes: () => setAttributes,\n  setElementStyle: () => setElementStyle,\n  shallowClone: () => shallowClone,\n  sunday: () => sunday,\n  thursday: () => thursday,\n  tickFormat: () => tickFormat,\n  tickStep: () => tickStep,\n  ticks: () => createTicks,\n  toDegrees: () => toDegrees,\n  toFixed: () => toFixed,\n  toRadians: () => toRadians,\n  transformIntegratedCategoryValue: () => transformIntegratedCategoryValue,\n  tuesday: () => tuesday,\n  utcDay: () => utcDay,\n  utcHour: () => utcHour,\n  utcMinute: () => utcMinute,\n  utcMonth: () => utcMonth,\n  utcYear: () => utcYear,\n  wednesday: () => wednesday,\n  year: () => year\n});\n\n// packages/ag-charts-community/src/module-support.ts\nvar module_support_exports = {};\n__export(module_support_exports, {\n  AND: () => AND,\n  ARRAY: () => ARRAY,\n  ARRAY_OF: () => ARRAY_OF,\n  AbstractBarSeries: () => AbstractBarSeries,\n  AbstractBarSeriesProperties: () => AbstractBarSeriesProperties,\n  ActionOnSet: () => ActionOnSet,\n  Animation: () => Animation,\n  AnimationManager: () => AnimationManager,\n  Axis: () => Axis,\n  AxisInterval: () => AxisInterval,\n  AxisLabel: () => AxisLabel,\n  AxisTick: () => AxisTick,\n  AxisTicks: () => AxisTicks,\n  BOOLEAN: () => BOOLEAN,\n  BOOLEAN_ARRAY: () => BOOLEAN_ARRAY,\n  Background: () => Background,\n  BackgroundModule: () => BackgroundModule,\n  BaseModuleInstance: () => BaseModuleInstance,\n  BaseProperties: () => BaseProperties,\n  COLOR_STRING: () => COLOR_STRING,\n  COLOR_STRING_ARRAY: () => COLOR_STRING_ARRAY,\n  CachedTextMeasurer: () => CachedTextMeasurer,\n  CachedTextMeasurerPool: () => CachedTextMeasurerPool,\n  CartesianAxis: () => CartesianAxis,\n  CartesianSeries: () => CartesianSeries,\n  CartesianSeriesNodeEvent: () => CartesianSeriesNodeEvent,\n  CartesianSeriesProperties: () => CartesianSeriesProperties,\n  CategoryAxis: () => CategoryAxis,\n  ChartAxisDirection: () => ChartAxisDirection,\n  ChartEventManager: () => ChartEventManager,\n  ChartOptions: () => ChartOptions,\n  ChartUpdateType: () => ChartUpdateType,\n  ContextMenuRegistry: () => ContextMenuRegistry,\n  Cursor: () => Cursor,\n  CursorManager: () => CursorManager,\n  DATE: () => DATE,\n  DATE_ARRAY: () => DATE_ARRAY,\n  DATE_OR_DATETIME_MS: () => DATE_OR_DATETIME_MS,\n  DEFAULT_CARTESIAN_DIRECTION_KEYS: () => DEFAULT_CARTESIAN_DIRECTION_KEYS,\n  DEFAULT_CARTESIAN_DIRECTION_NAMES: () => DEFAULT_CARTESIAN_DIRECTION_NAMES,\n  DEFAULT_TOOLTIP_CLASS: () => DEFAULT_TOOLTIP_CLASS,\n  DEFAULT_TOOLTIP_DARK_CLASS: () => DEFAULT_TOOLTIP_DARK_CLASS,\n  DEGREE: () => DEGREE,\n  DIRECTION: () => DIRECTION,\n  DOMManager: () => DOMManager,\n  DRAG_INTERACTION_TYPES: () => DRAG_INTERACTION_TYPES,\n  DataController: () => DataController,\n  DataModel: () => DataModel,\n  DataModelSeries: () => DataModelSeries,\n  DataService: () => DataService,\n  Default: () => Default,\n  Deprecated: () => Deprecated,\n  DeprecatedAndRenamedTo: () => DeprecatedAndRenamedTo,\n  EMPTY_TOOLTIP_CONTENT: () => EMPTY_TOOLTIP_CONTENT,\n  FONT_STYLE: () => FONT_STYLE,\n  FONT_WEIGHT: () => FONT_WEIGHT,\n  FUNCTION: () => FUNCTION,\n  GREATER_THAN: () => GREATER_THAN,\n  GestureDetector: () => GestureDetector,\n  GroupedCategoryAxis: () => GroupedCategoryAxis,\n  HierarchyNode: () => HierarchyNode,\n  HierarchySeries: () => HierarchySeries,\n  HierarchySeriesProperties: () => HierarchySeriesProperties,\n  HighlightManager: () => HighlightManager,\n  HighlightProperties: () => HighlightProperties,\n  HighlightStyle: () => HighlightStyle,\n  INTERACTION_RANGE: () => INTERACTION_RANGE,\n  INTERPOLATION_STEP_POSITION: () => INTERPOLATION_STEP_POSITION,\n  INTERPOLATION_TYPE: () => INTERPOLATION_TYPE,\n  InteractionManager: () => InteractionManager,\n  InteractionState: () => InteractionState,\n  InterpolationProperties: () => InterpolationProperties,\n  KeyNavManager: () => KeyNavManager,\n  LABEL_PLACEMENT: () => LABEL_PLACEMENT,\n  LARGEST_KEY_INTERVAL: () => LARGEST_KEY_INTERVAL,\n  LESS_THAN: () => LESS_THAN,\n  LINE_CAP: () => LINE_CAP,\n  LINE_DASH: () => LINE_DASH,\n  LINE_JOIN: () => LINE_JOIN,\n  LINE_STYLE: () => LINE_STYLE,\n  LayoutElement: () => LayoutElement,\n  LayoutManager: () => LayoutManager,\n  LonLatBBox: () => LonLatBBox,\n  MARKER_SHAPE: () => MARKER_SHAPE,\n  MATCHING_CROSSLINE_TYPE: () => MATCHING_CROSSLINE_TYPE,\n  MAX_SPACING: () => MAX_SPACING,\n  MIN_SPACING: () => MIN_SPACING,\n  MercatorScale: () => MercatorScale,\n  ModuleRegistry: () => ModuleRegistry,\n  Motion: () => easing_exports,\n  NAN: () => NAN,\n  NODE_UPDATE_STATE_TO_PHASE_MAPPING: () => NODE_UPDATE_STATE_TO_PHASE_MAPPING,\n  NUMBER: () => NUMBER,\n  NUMBER_ARRAY: () => NUMBER_ARRAY,\n  NUMBER_OR_NAN: () => NUMBER_OR_NAN,\n  Navigator: () => Navigator,\n  NavigatorModule: () => NavigatorModule,\n  NodeRegionBBoxProvider: () => NodeRegionBBoxProvider,\n  OBJECT: () => OBJECT,\n  OBJECT_ARRAY: () => OBJECT_ARRAY,\n  OR: () => OR,\n  OVERFLOW_STRATEGY: () => OVERFLOW_STRATEGY,\n  ObserveChanges: () => ObserveChanges,\n  PHASE_METADATA: () => PHASE_METADATA,\n  PHASE_ORDER: () => PHASE_ORDER,\n  PLACEMENT: () => PLACEMENT,\n  PLAIN_OBJECT: () => PLAIN_OBJECT,\n  POINTER_INTERACTION_TYPES: () => POINTER_INTERACTION_TYPES,\n  POSITION: () => POSITION,\n  POSITION_TOP_COORDINATES: () => POSITION_TOP_COORDINATES,\n  POSITIVE_NUMBER: () => POSITIVE_NUMBER,\n  PolarAxis: () => PolarAxis,\n  PolarSeries: () => PolarSeries,\n  PropertiesArray: () => PropertiesArray,\n  ProxyOnWrite: () => ProxyOnWrite,\n  ProxyProperty: () => ProxyProperty,\n  ProxyPropertyOnWrite: () => ProxyPropertyOnWrite,\n  QUICK_TRANSITION: () => QUICK_TRANSITION,\n  RATIO: () => RATIO,\n  REAL_NUMBER: () => REAL_NUMBER,\n  REGIONS: () => REGIONS,\n  RegionManager: () => RegionManager,\n  RepeatType: () => RepeatType,\n  SKIP_JS_BUILTINS: () => SKIP_JS_BUILTINS,\n  SMALLEST_KEY_INTERVAL: () => SMALLEST_KEY_INTERVAL,\n  SORT_DOMAIN_GROUPS: () => SORT_DOMAIN_GROUPS,\n  STRING: () => STRING,\n  STRING_ARRAY: () => STRING_ARRAY,\n  Series: () => Series,\n  SeriesGroupingChangedEvent: () => SeriesGroupingChangedEvent,\n  SeriesItemHighlightStyle: () => SeriesItemHighlightStyle,\n  SeriesMarker: () => SeriesMarker,\n  SeriesNodeEvent: () => SeriesNodeEvent,\n  SeriesNodePickMode: () => SeriesNodePickMode,\n  SeriesProperties: () => SeriesProperties,\n  SeriesTooltip: () => SeriesTooltip,\n  SimpleRegionBBoxProvider: () => SimpleRegionBBoxProvider,\n  SimpleTextMeasurer: () => SimpleTextMeasurer,\n  StateMachine: () => StateMachine,\n  TEXT_ALIGN: () => TEXT_ALIGN,\n  TEXT_WRAP: () => TEXT_WRAP,\n  TICK_INTERVAL: () => TICK_INTERVAL,\n  TOOLBAR_ALIGNMENTS: () => TOOLBAR_ALIGNMENTS,\n  TOOLBAR_GROUPS: () => TOOLBAR_GROUPS,\n  TOOLBAR_GROUP_ORDERING: () => TOOLBAR_GROUP_ORDERING,\n  TOOLBAR_POSITIONS: () => TOOLBAR_POSITIONS,\n  TextUtils: () => TextUtils,\n  TextWrapper: () => TextWrapper,\n  ToolbarManager: () => ToolbarManager,\n  ToolbarPosition: () => ToolbarPosition,\n  Tooltip: () => Tooltip,\n  TooltipManager: () => TooltipManager,\n  TooltipPosition: () => TooltipPosition,\n  UNION: () => UNION,\n  UpdateService: () => UpdateService,\n  VERTICAL_ALIGN: () => VERTICAL_ALIGN,\n  Validate: () => Validate,\n  Vec2: () => Vec2,\n  Vec4: () => Vec4,\n  ZIndexMap: () => ZIndexMap,\n  ZoomManager: () => ZoomManager,\n  __FORCE_MODULE_DETECTION: () => __FORCE_MODULE_DETECTION,\n  accumulateGroup: () => accumulateGroup,\n  accumulateStack: () => accumulateStack,\n  accumulatedValue: () => accumulatedValue,\n  accumulativeValueProperty: () => accumulativeValueProperty,\n  addHitTestersToQuadtree: () => addHitTestersToQuadtree,\n  adjustLabelPlacement: () => adjustLabelPlacement,\n  animationValidation: () => animationValidation,\n  area: () => area,\n  arraysEqual: () => arraysEqual,\n  backfillPathPointData: () => backfillPathPointData,\n  buildFormatter: () => buildFormatter,\n  buildResetPathFn: () => buildResetPathFn,\n  calculateDefaultTimeTickFormat: () => calculateDefaultTimeTickFormat,\n  calculateLabelChartPadding: () => calculateLabelChartPadding,\n  calculateLabelTranslation: () => calculateLabelTranslation,\n  calculatePlacement: () => calculatePlacement,\n  checkCrisp: () => checkCrisp,\n  circularSliceArray: () => circularSliceArray,\n  clamp: () => clamp,\n  clampArray: () => clampArray,\n  collapsedStartingBarPosition: () => collapsedStartingBarPosition,\n  computeBarFocusBounds: () => computeBarFocusBounds,\n  computeMarkerFocusBounds: () => computeMarkerFocusBounds,\n  convertValuesToScaleByDefs: () => convertValuesToScaleByDefs,\n  countFractionDigits: () => countFractionDigits,\n  createButton: () => createButton,\n  createCheckbox: () => createCheckbox,\n  createDatumId: () => createDatumId,\n  createDeprecationWarning: () => createDeprecationWarning,\n  createElement: () => createElement,\n  createElementId: () => createElementId,\n  createElementNS: () => createElementNS,\n  createIcon: () => createIcon,\n  createSelect: () => createSelect,\n  createTextArea: () => createTextArea,\n  dateToNumber: () => dateToNumber,\n  deconstructSelectionsOrNodes: () => deconstructSelectionsOrNodes,\n  deepClone: () => deepClone,\n  deepMerge: () => deepMerge,\n  defaultTimeTickFormat: () => defaultTimeTickFormat,\n  determinePathStatus: () => determinePathStatus,\n  diff: () => diff,\n  downloadUrl: () => downloadUrl,\n  enterpriseModule: () => enterpriseModule,\n  excludesType: () => excludesType,\n  extent: () => extent,\n  extractDecoratedProperties: () => extractDecoratedProperties,\n  findMaxValue: () => findMaxValue,\n  findMinMax: () => findMinMax,\n  findQuadtreeMatch: () => findQuadtreeMatch,\n  findRangeExtent: () => findRangeExtent,\n  fixNumericExtent: () => fixNumericExtent,\n  focusCursorAtEnd: () => focusCursorAtEnd,\n  formatNormalizedPercentage: () => formatNormalizedPercentage,\n  formatPercentage: () => formatPercentage,\n  formatValue: () => formatValue,\n  fromToMotion: () => fromToMotion,\n  getDocument: () => getDocument,\n  getLastFocus: () => getLastFocus,\n  getMissCount: () => getMissCount,\n  getPath: () => getPath,\n  getPathComponents: () => getPathComponents,\n  getRectConfig: () => getRectConfig,\n  getWindow: () => getWindow,\n  groupAccumulativeValueProperty: () => groupAccumulativeValueProperty,\n  groupAverage: () => groupAverage,\n  groupBy: () => groupBy,\n  groupCount: () => groupCount,\n  groupStackValueProperty: () => groupStackValueProperty,\n  groupSum: () => groupSum,\n  initMenuKeyNav: () => initMenuKeyNav,\n  initRovingTabIndex: () => initRovingTabIndex,\n  initToolbarKeyNav: () => initToolbarKeyNav,\n  isAnimatingFloatingPosition: () => isAnimatingFloatingPosition,\n  isArray: () => isArray,\n  isBoolean: () => isBoolean,\n  isButtonClickEvent: () => isButtonClickEvent,\n  isDate: () => isDate,\n  isDecoratedObject: () => isDecoratedObject,\n  isDefined: () => isDefined,\n  isEnumKey: () => isEnumKey,\n  isEnumValue: () => isEnumValue,\n  isEqual: () => isEqual,\n  isFiniteNumber: () => isFiniteNumber,\n  isFunction: () => isFunction,\n  isHtmlElement: () => isHtmlElement,\n  isNegative: () => isNegative,\n  isNumber: () => isNumber,\n  isObject: () => isObject,\n  isObjectLike: () => isObjectLike,\n  isPlainObject: () => isPlainObject,\n  isProperties: () => isProperties,\n  isRegExp: () => isRegExp,\n  isString: () => isString,\n  isSymbol: () => isSymbol,\n  isValidDate: () => isValidDate,\n  jsonApply: () => jsonApply,\n  jsonDiff: () => jsonDiff,\n  jsonWalk: () => jsonWalk,\n  keyProperty: () => keyProperty,\n  labelDirectionHandling: () => labelDirectionHandling,\n  listDecoratedProperties: () => listDecoratedProperties,\n  makeAccessibleClickListener: () => makeAccessibleClickListener,\n  mapValues: () => mapValues,\n  markerFadeInAnimation: () => markerFadeInAnimation,\n  markerPaletteFactory: () => markerPaletteFactory,\n  markerScaleInAnimation: () => markerScaleInAnimation,\n  markerSwipeScaleInAnimation: () => markerSwipeScaleInAnimation,\n  mergeArrayDefaults: () => mergeArrayDefaults,\n  mergeDefaults: () => mergeDefaults,\n  midpointStartingBarPosition: () => midpointStartingBarPosition,\n  minMax: () => minMax,\n  mod: () => mod,\n  moduleRegistry: () => moduleRegistry,\n  nearestSquared: () => nearestSquared,\n  nearestSquaredInContainer: () => nearestSquaredInContainer,\n  normaliseGroupTo: () => normaliseGroupTo,\n  normalisePropertyTo: () => normalisePropertyTo,\n  normalisedExtentWithMetadata: () => normalisedExtentWithMetadata,\n  objectEqualWith: () => objectEqualWith,\n  pairCategoryData: () => pairCategoryData,\n  pairContinuousData: () => pairContinuousData,\n  partialAssign: () => partialAssign,\n  pathFadeInAnimation: () => pathFadeInAnimation,\n  pathFadeOutAnimation: () => pathFadeOutAnimation,\n  pathRangePoints: () => pathRangePoints,\n  pathRangePointsReverse: () => pathRangePointsReverse,\n  pathRanges: () => pathRanges,\n  pathSwipeInAnimation: () => pathSwipeInAnimation,\n  pickByMatchingAngle: () => pickByMatchingAngle,\n  pickNode: () => pickNode,\n  plotPath: () => plotPath,\n  predicateWithMessage: () => predicateWithMessage,\n  prepareAreaPathAnimation: () => prepareAreaPathAnimation,\n  prepareAxisAnimationContext: () => prepareAxisAnimationContext,\n  prepareAxisAnimationFunctions: () => prepareAxisAnimationFunctions,\n  prepareBarAnimationFunctions: () => prepareBarAnimationFunctions,\n  prepareLinePathAnimation: () => prepareLinePathAnimation,\n  prepareLinePathAnimationFns: () => prepareLinePathAnimationFns,\n  prepareLinePathPropertyAnimation: () => prepareLinePathPropertyAnimation,\n  prepareMarkerAnimation: () => prepareMarkerAnimation,\n  preparePieSeriesAnimationFunctions: () => preparePieSeriesAnimationFunctions,\n  range: () => range2,\n  rangedValueProperty: () => rangedValueProperty,\n  renderPartialPath: () => renderPartialPath,\n  resetAxisGroupFn: () => resetAxisGroupFn,\n  resetAxisLabelSelectionFn: () => resetAxisLabelSelectionFn,\n  resetAxisLineSelectionFn: () => resetAxisLineSelectionFn,\n  resetAxisSelectionFn: () => resetAxisSelectionFn,\n  resetBarSelectionsFn: () => resetBarSelectionsFn,\n  resetIds: () => resetIds,\n  resetLabelFn: () => resetLabelFn,\n  resetMarkerFn: () => resetMarkerFn,\n  resetMarkerPositionFn: () => resetMarkerPositionFn,\n  resetMotion: () => resetMotion,\n  resetPieSelectionsFn: () => resetPieSelectionsFn,\n  round: () => round,\n  scale: () => scale,\n  seriesLabelFadeInAnimation: () => seriesLabelFadeInAnimation,\n  seriesLabelFadeOutAnimation: () => seriesLabelFadeOutAnimation,\n  setDocument: () => setDocument,\n  setElementBBox: () => setElementBBox,\n  setPath: () => setPath,\n  setWindow: () => setWindow,\n  shallowClone: () => shallowClone,\n  singleSeriesPaletteFactory: () => singleSeriesPaletteFactory,\n  sortBasedOnArray: () => sortBasedOnArray,\n  splitPairData: () => splitPairData,\n  staticFromToMotion: () => staticFromToMotion,\n  stopPageScrolling: () => stopPageScrolling,\n  stringify: () => stringify,\n  sum: () => sum,\n  sumValues: () => sumValues,\n  toArray: () => toArray,\n  toFixed: () => toFixed,\n  toTooltipHtml: () => toTooltipHtml,\n  trailingAccumulatedValue: () => trailingAccumulatedValue,\n  trailingAccumulatedValueProperty: () => trailingAccumulatedValueProperty,\n  unique: () => unique,\n  updateClipPath: () => updateClipPath,\n  updateLabelNode: () => updateLabelNode,\n  updateRect: () => updateRect,\n  validateCrossLineValues: () => validateCrossLineValues,\n  valueProperty: () => valueProperty,\n  without: () => without\n});\n\n// packages/ag-charts-community/src/util/deprecation.ts\nfunction createDeprecationWarning() {\n  return (key, message) => {\n    const msg = [`Property [${key}] is deprecated.`, message].filter(Boolean).join(\" \");\n    Logger.warnOnce(msg);\n  };\n}\nfunction Deprecated(message, opts) {\n  const warnDeprecated = createDeprecationWarning();\n  const def = opts?.default;\n  return addTransformToInstanceProperty((_, key, value) => {\n    if (value !== def) {\n      warnDeprecated(key.toString(), message);\n    }\n    return value;\n  });\n}\nfunction DeprecatedAndRenamedTo(newPropName, mapValue) {\n  const warnDeprecated = createDeprecationWarning();\n  return addTransformToInstanceProperty(\n    (target, key, value) => {\n      if (value !== target[newPropName]) {\n        warnDeprecated(key.toString(), `Use [${newPropName}] instead.`);\n        setPath(target, newPropName, mapValue ? mapValue(value) : value);\n      }\n      return BREAK_TRANSFORM_CHAIN;\n    },\n    (target, key) => {\n      warnDeprecated(key.toString(), `Use [${newPropName}] instead.`);\n      return getPath(target, newPropName);\n    }\n  );\n}\n\n// packages/ag-charts-community/src/util/search.util.ts\nfunction findMaxValue(min, max, iteratee) {\n  if (min > max)\n    return;\n  let found;\n  while (max >= min) {\n    const index = Math.floor((max + min) / 2);\n    const value = iteratee(index);\n    if (value == null) {\n      max = index - 1;\n    } else {\n      found = value;\n      min = index + 1;\n    }\n  }\n  return found;\n}\n\n// packages/ag-charts-community/src/util/vector4.ts\nvar Vec4 = {\n  bottomCenter,\n  center,\n  clone,\n  end,\n  from: from2,\n  height,\n  round: round4,\n  start,\n  topCenter,\n  origin: origin2,\n  width\n};\nfunction start(a) {\n  return { x: a.x1, y: a.y1 };\n}\nfunction end(a) {\n  return { x: a.x2, y: a.y2 };\n}\nfunction topCenter(a) {\n  return { x: (a.x1 + a.x2) / 2, y: Math.min(a.y1, a.y2) };\n}\nfunction center(a) {\n  return { x: (a.x1 + a.x2) / 2, y: (a.y1 + a.y2) / 2 };\n}\nfunction bottomCenter(a) {\n  return { x: (a.x1 + a.x2) / 2, y: Math.max(a.y1, a.y2) };\n}\nfunction width(a) {\n  return Math.abs(a.x2 - a.x1);\n}\nfunction height(a) {\n  return Math.abs(a.y2 - a.y1);\n}\nfunction round4(a) {\n  return { x1: Math.round(a.x1), y1: Math.round(a.y1), x2: Math.round(a.x2), y2: Math.round(a.y2) };\n}\nfunction clone(a) {\n  return { x1: a.x1, y1: a.y1, x2: a.x2, y2: a.y2 };\n}\nfunction from2(a, b, c, d) {\n  if (typeof a === \"number\") {\n    return { x1: a, y1: b, x2: c, y2: d };\n  }\n  if (\"width\" in a) {\n    return {\n      x1: a.x,\n      y1: a.y,\n      x2: a.x + a.width,\n      y2: a.y + a.height\n    };\n  }\n  throw new Error(`Values can not be converted into a vector4: [${a}] [${b}] [${c}] [${d}]`);\n}\nfunction origin2() {\n  return { x1: 0, y1: 0, x2: 0, y2: 0 };\n}\n\n// packages/ag-charts-community/src/chart/series/hierarchy/hierarchySeries.ts\nvar _HierarchyNode = class _HierarchyNode {\n  constructor(series, index, datum, size, colorValue, fill, stroke, sumSize, depth, parent, children) {\n    this.series = series;\n    this.index = index;\n    this.datum = datum;\n    this.size = size;\n    this.colorValue = colorValue;\n    this.fill = fill;\n    this.stroke = stroke;\n    this.sumSize = sumSize;\n    this.depth = depth;\n    this.parent = parent;\n    this.children = children;\n    this.midPoint = { x: 0, y: 0 };\n  }\n  contains(other) {\n    let current = other;\n    while (current != null && current.index >= this.index) {\n      if (current === this) {\n        return true;\n      }\n      current = current.parent;\n    }\n    return false;\n  }\n  walk(callback2, order = _HierarchyNode.Walk.PreOrder) {\n    if (order === _HierarchyNode.Walk.PreOrder) {\n      callback2(this);\n    }\n    this.children.forEach((child) => {\n      child.walk(callback2, order);\n    });\n    if (order === _HierarchyNode.Walk.PostOrder) {\n      callback2(this);\n    }\n  }\n  *[Symbol.iterator]() {\n    yield this;\n    for (const child of this.children) {\n      yield* child;\n    }\n  }\n};\n_HierarchyNode.Walk = {\n  PreOrder: 0,\n  PostOrder: 1\n};\nvar HierarchyNode = _HierarchyNode;\nvar HierarchySeries = class extends Series {\n  constructor(moduleCtx) {\n    super({\n      moduleCtx,\n      pickModes: [1 /* NEAREST_NODE */, 0 /* EXACT_SHAPE_MATCH */],\n      contentGroupVirtual: false\n    });\n    this.rootNode = new HierarchyNode(\n      this,\n      0,\n      void 0,\n      0,\n      void 0,\n      void 0,\n      void 0,\n      0,\n      void 0,\n      void 0,\n      []\n    );\n    this.colorDomain = [0, 0];\n    this.maxDepth = 0;\n    this.focusPath = [];\n    this.animationState = new StateMachine(\n      \"empty\",\n      {\n        empty: {\n          update: {\n            target: \"ready\",\n            action: (data) => this.animateEmptyUpdateReady(data)\n          },\n          reset: \"empty\",\n          skip: \"ready\"\n        },\n        ready: {\n          updateData: \"waiting\",\n          clear: \"clearing\",\n          highlight: (data) => this.animateReadyHighlight(data),\n          resize: (data) => this.animateReadyResize(data),\n          reset: \"empty\",\n          skip: \"ready\"\n        },\n        waiting: {\n          update: {\n            target: \"ready\",\n            action: (data) => this.animateWaitingUpdateReady(data)\n          },\n          reset: \"empty\",\n          skip: \"ready\"\n        },\n        clearing: {\n          update: {\n            target: \"empty\",\n            action: (data) => this.animateClearingUpdateEmpty(data)\n          },\n          reset: \"empty\",\n          skip: \"ready\"\n        }\n      },\n      () => this.checkProcessedDataAnimatable()\n    );\n  }\n  resetAnimation(phase) {\n    if (phase === \"initial\") {\n      this.animationState.transition(\"reset\");\n    } else if (phase === \"ready\") {\n      this.animationState.transition(\"skip\");\n    }\n  }\n  async processData() {\n    const { childrenKey, sizeKey, colorKey, fills, strokes, colorRange } = this.properties;\n    let index = 0;\n    const getIndex = () => {\n      index += 1;\n      return index;\n    };\n    let maxDepth = 0;\n    let minColor = Infinity;\n    let maxColor = -Infinity;\n    const colors = new Array((this.data?.length ?? 0) + 1).fill(void 0);\n    const createNode = (datum, parent) => {\n      const nodeIndex = getIndex();\n      const depth = parent.depth != null ? parent.depth + 1 : 0;\n      const children = childrenKey != null ? datum[childrenKey] : void 0;\n      const isLeaf = children == null || children.length === 0;\n      let size = sizeKey != null ? datum[sizeKey] : void 0;\n      if (Number.isFinite(size)) {\n        size = Math.max(size, 0);\n      } else {\n        size = isLeaf ? 1 : 0;\n      }\n      const sumSize = size;\n      maxDepth = Math.max(maxDepth, depth);\n      const color = colorKey != null ? datum[colorKey] : void 0;\n      if (typeof color === \"number\") {\n        colors[nodeIndex] = color;\n        minColor = Math.min(minColor, color);\n        maxColor = Math.max(maxColor, color);\n      }\n      return appendChildren(\n        new HierarchyNode(\n          this,\n          nodeIndex,\n          datum,\n          size,\n          color,\n          void 0,\n          void 0,\n          sumSize,\n          depth,\n          parent,\n          []\n        ),\n        children\n      );\n    };\n    const appendChildren = (node, data) => {\n      data?.forEach((datum) => {\n        const child = createNode(datum, node);\n        node.children.push(child);\n        node.sumSize += child.sumSize;\n      });\n      return node;\n    };\n    const rootNode = appendChildren(\n      new HierarchyNode(\n        this,\n        0,\n        void 0,\n        0,\n        void 0,\n        void 0,\n        void 0,\n        0,\n        void 0,\n        void 0,\n        []\n      ),\n      this.data\n    );\n    const colorDomain = [minColor, maxColor];\n    let colorScale;\n    if (colorRange != null && Number.isFinite(minColor) && Number.isFinite(maxColor)) {\n      colorScale = new ColorScale();\n      colorScale.domain = colorDomain;\n      colorScale.range = colorRange;\n      colorScale.update();\n    }\n    rootNode.children.forEach((child, childIndex) => {\n      child.walk((node) => {\n        let fill;\n        const color = colors[node.index];\n        if (color != null) {\n          fill = colorScale?.convert(color);\n        }\n        fill ?? (fill = fills?.[childIndex % fills.length]);\n        node.fill = fill;\n        node.stroke = colorScale == null ? strokes?.[childIndex % strokes.length] : \"rgba(0, 0, 0, 0.2)\";\n      });\n    });\n    this.rootNode = rootNode;\n    this.maxDepth = maxDepth;\n    this.colorDomain = colorDomain;\n    this.focusPath = [{ nodeDatum: this.rootNode, childIndex: 0 }];\n  }\n  async update({ seriesRect }) {\n    await this.updateSelections();\n    await this.updateNodes();\n    const animationData = this.getAnimationData();\n    const resize = this.checkResize(seriesRect);\n    if (resize) {\n      this.animationState.transition(\"resize\", animationData);\n    }\n    this.animationState.transition(\"update\", animationData);\n  }\n  resetAllAnimation(data) {\n    const datum = this.animationResetFns?.datum;\n    this.ctx.animationManager.stopByAnimationGroupId(this.id);\n    if (datum != null) {\n      resetMotion(data.datumSelections, datum);\n    }\n  }\n  animateEmptyUpdateReady(data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation(data);\n  }\n  animateWaitingUpdateReady(data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation(data);\n  }\n  animateReadyHighlight(data) {\n    const datum = this.animationResetFns?.datum;\n    if (datum != null) {\n      resetMotion([data], datum);\n    }\n  }\n  animateReadyResize(data) {\n    this.resetAllAnimation(data);\n  }\n  animateClearingUpdateEmpty(data) {\n    this.ctx.animationManager.skipCurrentBatch();\n    this.resetAllAnimation(data);\n  }\n  animationTransitionClear() {\n    this.animationState.transition(\"clear\", this.getAnimationData());\n  }\n  getAnimationData() {\n    const animationData = {\n      datumSelections: [this.groupSelection]\n    };\n    return animationData;\n  }\n  isProcessedDataAnimatable() {\n    return true;\n  }\n  checkProcessedDataAnimatable() {\n    if (!this.isProcessedDataAnimatable()) {\n      this.ctx.animationManager.skipCurrentBatch();\n    }\n  }\n  getLabelData() {\n    return [];\n  }\n  getSeriesDomain() {\n    return [NaN, NaN];\n  }\n  getLegendData(legendType) {\n    const { colorKey, colorName, colorRange, visible } = this.properties;\n    return legendType === \"gradient\" && colorKey != null && colorRange != null ? [\n      {\n        legendType: \"gradient\",\n        enabled: visible,\n        seriesId: this.id,\n        colorName,\n        colorRange,\n        colorDomain: this.colorDomain\n      }\n    ] : [];\n  }\n  getDatumIdFromData(node) {\n    return `${node.index}`;\n  }\n  getDatumId(node) {\n    return this.getDatumIdFromData(node);\n  }\n  pickFocus(opts) {\n    if (this.rootNode.children.length === 0)\n      return void 0;\n    if (this.focusPath.length === 0) {\n      Logger.error(\"this.focusPath should not be empty\");\n    }\n    const { datumIndexDelta: childDelta, otherIndexDelta: depthDelta } = opts;\n    const { focusPath: path } = this;\n    const depth = path.length - 2;\n    if (depthDelta !== 0 || path.length === 1) {\n      const targetDepth = Math.max(0, depth + depthDelta);\n      if (path[targetDepth + 1] !== void 0) {\n        path.length = targetDepth + 2;\n        return this.computeFocusOutputs(path[targetDepth + 1]);\n      } else {\n        let deepest = path[path.length - 1];\n        while (deepest.nodeDatum.children.length > 0 && (deepest.nodeDatum.depth ?? -1) < targetDepth) {\n          const nextDeepest = { nodeDatum: deepest.nodeDatum.children[0], childIndex: 0 };\n          path.push(nextDeepest);\n          deepest = nextDeepest;\n        }\n        return this.computeFocusOutputs(deepest);\n      }\n    } else if (childDelta !== 0) {\n      const targetChild = path[depth + 1].childIndex + childDelta;\n      const currentParent = path[depth].nodeDatum;\n      const childCount = currentParent?.children?.length;\n      if (childCount !== void 0) {\n        const newChild = clamp(0, targetChild, childCount - 1);\n        const newFocus = { nodeDatum: currentParent.children[newChild], childIndex: newChild };\n        path[depth + 1] = newFocus;\n        path.length = depth + 2;\n        return this.computeFocusOutputs(newFocus);\n      }\n    } else {\n      return this.computeFocusOutputs(path[path.length - 1]);\n    }\n  }\n  getDatumAriaText(datum, description) {\n    if (!(datum instanceof HierarchyNode)) {\n      Logger.error(`datum is not HierarchyNode: ${datum}`);\n      return;\n    }\n    return this.ctx.localeManager.t(\"ariaAnnounceHierarchyDatum\", {\n      level: (datum.depth ?? -1) + 1,\n      count: datum.children.length,\n      description\n    });\n  }\n  computeFocusOutputs({ nodeDatum, childIndex }) {\n    const bounds = this.computeFocusBounds(nodeDatum);\n    if (bounds) {\n      return {\n        datum: nodeDatum,\n        datumIndex: childIndex,\n        otherIndex: nodeDatum.depth,\n        bounds,\n        showFocusBox: true\n      };\n    }\n    return void 0;\n  }\n};\n\n// packages/ag-charts-community/src/chart/series/hierarchy/hierarchySeriesProperties.ts\nvar HierarchySeriesProperties = class extends SeriesProperties {\n  constructor() {\n    super(...arguments);\n    this.childrenKey = \"children\";\n    this.fills = Object.values(DEFAULT_FILLS);\n    this.strokes = Object.values(DEFAULT_STROKES);\n  }\n};\n__decorateClass([\n  Validate(STRING)\n], HierarchySeriesProperties.prototype, \"childrenKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], HierarchySeriesProperties.prototype, \"sizeKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], HierarchySeriesProperties.prototype, \"colorKey\", 2);\n__decorateClass([\n  Validate(STRING, { optional: true })\n], HierarchySeriesProperties.prototype, \"colorName\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY)\n], HierarchySeriesProperties.prototype, \"fills\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY)\n], HierarchySeriesProperties.prototype, \"strokes\", 2);\n__decorateClass([\n  Validate(COLOR_STRING_ARRAY, { optional: true })\n], HierarchySeriesProperties.prototype, \"colorRange\", 2);\n\n// packages/ag-charts-community/src/chart/series/topology/lonLatBbox.ts\nvar LonLatBBox = class {\n  constructor(lon0, lat0, lon1, lat1) {\n    this.lon0 = lon0;\n    this.lat0 = lat0;\n    this.lon1 = lon1;\n    this.lat1 = lat1;\n  }\n  merge(other) {\n    this.lon0 = Math.min(this.lon0, other.lon0);\n    this.lat0 = Math.min(this.lat0, other.lat0);\n    this.lon1 = Math.max(this.lon1, other.lon1);\n    this.lat1 = Math.max(this.lat1, other.lat1);\n  }\n};\n\n// packages/ag-charts-community/src/util/tempUtils.ts\nfunction createIdsGenerator() {\n  const idsCounter = /* @__PURE__ */ new Map();\n  return (name) => {\n    const counter = idsCounter.get(name);\n    if (counter) {\n      idsCounter.set(name, counter + 1);\n      return `${name}${counter}`;\n    }\n    idsCounter.set(name, 1);\n    return name;\n  };\n}\n\n// packages/ag-charts-community/src/chart/axis/axisTicks.ts\nvar _AxisTicks = class _AxisTicks {\n  constructor() {\n    this.id = createId(this);\n    this.axisGroup = new TranslatableGroup({ name: `${this.id}-AxisTicks`, zIndex: 2 /* AXIS */ });\n    this.labelSelection = Selection.select(this.axisGroup, Text);\n    this.interval = new AxisInterval();\n    this.label = new AxisLabel();\n    this.scale = new LinearScale();\n    this.position = \"bottom\";\n    this.translationX = 0;\n    this.translationY = 0;\n    this.padding = 0;\n  }\n  attachAxis(axisNode) {\n    axisNode.appendChild(this.axisGroup);\n  }\n  calculateLayout() {\n    this.scale.interval = this.interval.step;\n    const boxes = [];\n    const tickData = this.generateTicks();\n    const { translationX, translationY } = this;\n    this.labelSelection.update(\n      tickData.ticks.map((d) => this.createLabelDatum(d)),\n      void 0,\n      (datum) => datum.tickId\n    );\n    this.labelSelection.each((node, datum) => {\n      node.setProperties(datum);\n      if (datum.visible) {\n        boxes.push(node.getBBox());\n      }\n    });\n    this.axisGroup.setProperties({ translationX, translationY });\n    return BBox.merge(boxes);\n  }\n  getLabelParams(datum) {\n    const { padding } = this;\n    const { translate } = datum;\n    switch (this.position) {\n      case \"top\":\n      case \"bottom\":\n        return {\n          x: translate,\n          y: padding,\n          textAlign: \"center\",\n          textBaseline: \"top\"\n        };\n      case \"left\":\n      case \"right\":\n        return {\n          x: padding,\n          y: translate,\n          textAlign: \"start\",\n          textBaseline: \"middle\"\n        };\n    }\n  }\n  inRange(x, tolerance = 1e-3) {\n    const [min, max] = findMinMax(this.scale.range);\n    return x >= min - tolerance && x <= max + tolerance;\n  }\n  createLabelDatum(datum) {\n    const { x, y, textBaseline, textAlign } = this.getLabelParams(datum);\n    return {\n      visible: Boolean(datum.tickLabel),\n      tickId: datum.tickId,\n      fill: this.label.color,\n      fontFamily: this.label.fontFamily,\n      fontSize: this.label.fontSize,\n      fontStyle: this.label.fontStyle,\n      fontWeight: this.label.fontWeight,\n      rotation: 0,\n      rotationCenterX: 0,\n      text: datum.tickLabel,\n      textAlign,\n      textBaseline,\n      x,\n      y\n    };\n  }\n  generateTicks() {\n    const { minSpacing, maxSpacing } = this.interval;\n    const extentWithBleed = round(findRangeExtent(this.scale.range), 2);\n    const { maxTickCount, minTickCount, tickCount } = estimateTickCount(\n      extentWithBleed,\n      minSpacing,\n      maxSpacing,\n      _AxisTicks.DefaultTickCount,\n      _AxisTicks.DefaultMinSpacing\n    );\n    if (tickCount) {\n      this.scale.tickCount = tickCount;\n      this.scale.minTickCount = minTickCount;\n      this.scale.maxTickCount = maxTickCount;\n    }\n    const tickData = this.getTicksData();\n    if (this.position === \"bottom\" || this.position === \"top\") {\n      const measurer = CachedTextMeasurerPool.getMeasurer({ font: this.label });\n      const domain = this.scale.getDomain();\n      const reversed = domain[0] > domain[1];\n      const direction = reversed ? -1 : 1;\n      let lastTickPosition = -Infinity * direction;\n      tickData.ticks = tickData.ticks.filter((data) => {\n        if (Math.sign(data.translate - lastTickPosition) !== direction)\n          return false;\n        lastTickPosition = data.translate + measurer.textWidth(data.tickLabel, true) * direction;\n        return true;\n      });\n    }\n    return tickData;\n  }\n  getTicksData() {\n    const ticks = [];\n    const rawTicks = this.scale.ticks();\n    const fractionDigits = rawTicks.reduce(\n      (max, tick) => Math.max(max, typeof tick === \"number\" ? countFractionDigits(tick) : 0),\n      0\n    );\n    const idGenerator = createIdsGenerator();\n    const labelFormatter = this.label.format ? this.scale.tickFormat({ ticks: rawTicks, specifier: this.label.format }) : (x) => isNumber(x) ? x.toFixed(fractionDigits) : String(x);\n    for (let index = 0; index < rawTicks.length; index++) {\n      const tick = rawTicks[index];\n      const translate = this.scale.convert(tick);\n      if (!this.inRange(translate))\n        continue;\n      const tickLabel = this.label.formatter?.({ value: tick, index, fractionDigits }) ?? labelFormatter(tick);\n      const tickId = idGenerator(tickLabel);\n      ticks.push({ tick, tickId, tickLabel, translate });\n    }\n    return { rawTicks, fractionDigits, ticks };\n  }\n};\n_AxisTicks.DefaultTickCount = 5;\n_AxisTicks.DefaultMinSpacing = 50;\nvar AxisTicks = _AxisTicks;\n\n// packages/ag-charts-community/src/chart/legendDatum.ts\nvar __FORCE_MODULE_DETECTION = 0;\n\n// packages/ag-charts-community/src/dom/elements.ts\nfunction createButton(options, attrs) {\n  const button = createElement(\"button\", getClassName(\"ag-charts-input ag-charts-button\", attrs));\n  if (options.label !== void 0) {\n    button.append(options.label);\n  } else {\n    button.append(createIcon(options.icon));\n    button.ariaLabel = options.altText;\n  }\n  button.addEventListener(\"click\", options.onPress);\n  setAttributes(button, attrs);\n  return button;\n}\nfunction createCheckbox(options, attrs) {\n  const checkbox = createElement(\"input\", getClassName(\"ag-charts-input ag-charts-checkbox\", attrs));\n  checkbox.type = \"checkbox\";\n  checkbox.checked = options.checked;\n  checkbox.addEventListener(\"change\", (event) => options.onChange(checkbox.checked, event));\n  checkbox.addEventListener(\"keydown\", (event) => {\n    if (isButtonClickEvent(event)) {\n      event.preventDefault();\n      checkbox.click();\n    }\n  });\n  setAttributes(checkbox, attrs);\n  return checkbox;\n}\nfunction createSelect(options, attrs) {\n  const select = createElement(\"select\", getClassName(\"ag-charts-input ag-charts-select\", attrs));\n  select.append(\n    ...options.options.map((option) => {\n      const optionEl = createElement(\"option\");\n      optionEl.value = option.value;\n      optionEl.textContent = option.label;\n      return optionEl;\n    })\n  );\n  setAttribute(select, \"data-preventdefault\", false);\n  select.value = options.value;\n  select.addEventListener(\"change\", (event) => options.onChange(select.value, event));\n  setAttributes(select, attrs);\n  return select;\n}\nfunction createTextArea(options, attrs) {\n  const textArea = createElement(\"textarea\", getClassName(\"ag-charts-input ag-charts-textarea\", attrs));\n  textArea.value = options.value;\n  textArea.addEventListener(\"input\", (event) => options.onChange(textArea.value, event));\n  setAttributes(textArea, attrs);\n  return textArea;\n}\nfunction createIcon(icon) {\n  const el = createElement(\"span\", `ag-charts-icon ag-charts-icon-${icon}`);\n  setAttribute(el, \"aria-hidden\", true);\n  return el;\n}\nfunction getClassName(baseClass, attrs) {\n  if (attrs == null)\n    return baseClass;\n  return `${baseClass} ${attrs.class}`;\n}\nexport {\n  AG_CHARTS_LOCALE_EN_US,\n  AgCharts,\n  AgErrorBarSupportedSeriesTypes,\n  AgTooltipPositionType,\n  ICONS_LEGACY,\n  Marker,\n  VERSION,\n  module_support_exports as _ModuleSupport,\n  sparklines_scale_exports as _Scale,\n  integrated_charts_scene_exports as _Scene,\n  integrated_charts_theme_exports as _Theme,\n  sparklines_util_exports as _Util,\n  setupCommunityModules,\n  time_exports as time\n};\n", "var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, \"default\"), secondTarget && __copyProps(secondTarget, mod, \"default\"));\n\n// packages/ag-grid-enterprise/src/main.ts\nvar main_exports = {};\n__export(main_exports, {\n  AdvancedFilterModule: () => AdvancedFilterModule,\n  AgDialog: () => AgDialog,\n  AgGroupComponent: () => AgGroupComponent,\n  AgGroupComponentSelector: () => AgGroupComponentSelector,\n  AgMenuItemComponent: () => AgMenuItemComponent,\n  AgMenuItemRenderer: () => AgMenuItemRenderer,\n  AgMenuList: () => AgMenuList,\n  AgMenuPanel: () => AgMenuPanel,\n  AgPanel: () => AgPanel,\n  AgPrimaryCols: () => AgPrimaryCols,\n  AgRichSelect: () => AgRichSelect,\n  ClipboardModule: () => ClipboardModule,\n  ColumnsToolPanelModule: () => ColumnsToolPanelModule,\n  EnterpriseCoreModule: () => EnterpriseCoreModule,\n  ExcelExportModule: () => ExcelExportModule,\n  FiltersToolPanelModule: () => FiltersToolPanelModule,\n  GridChartsModule: () => GridChartsModule,\n  GroupCellRenderer: () => GroupCellRenderer,\n  GroupCellRendererCtrl: () => GroupCellRendererCtrl,\n  LicenseManager: () => GridLicenseManager,\n  MasterDetailModule: () => MasterDetailModule,\n  MenuModule: () => MenuModule,\n  MultiFilter: () => MultiFilter,\n  MultiFilterModule: () => MultiFilterModule,\n  PillDragComp: () => PillDragComp,\n  PillDropZonePanel: () => PillDropZonePanel,\n  PivotDropZonePanel: () => PivotDropZonePanel,\n  RangeSelectionModule: () => RangeSelectionModule,\n  RichSelectModule: () => RichSelectModule,\n  RowGroupDropZonePanel: () => RowGroupDropZonePanel,\n  RowGroupingModule: () => RowGroupingModule,\n  ServerSideRowModelModule: () => ServerSideRowModelModule,\n  SetFilter: () => SetFilter,\n  SetFilterModule: () => SetFilterModule,\n  SideBarModule: () => SideBarModule,\n  SparklinesModule: () => SparklinesModule,\n  StatusBarModule: () => StatusBarModule,\n  TabbedLayout: () => TabbedLayout,\n  ToolPanelColDefService: () => ToolPanelColDefService,\n  ValuesDropZonePanel: () => ValuesDropZonePanel,\n  ViewportRowModelModule: () => ViewportRowModelModule,\n  VirtualList: () => VirtualList,\n  VirtualListDragFeature: () => VirtualListDragFeature,\n  agCharts: () => agCharts,\n  exportMultipleSheetsAsExcel: () => exportMultipleSheetsAsExcel,\n  getMultipleSheetsAsExcel: () => getMultipleSheetsAsExcel\n});\nimport { ClientSideRowModelModule } from \"ag-grid-community\";\nimport { CommunityFeaturesModule, ModuleRegistry as ModuleRegistry2 } from \"ag-grid-community\";\nimport { CsvExportModule as CsvExportModule2 } from \"ag-grid-community\";\nimport { InfiniteRowModelModule } from \"ag-grid-community\";\n\n// enterprise-modules/advanced-filter/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames2, _FilterCoreModule, _defineModule as _defineModule2 } from \"ag-grid-community\";\n\n// enterprise-modules/core/src/agGridEnterpriseModule.ts\nimport { ModuleNames, _defineModule } from \"ag-grid-community\";\n\n// enterprise-modules/core/src/license/gridLicenseManager.ts\nimport { BeanStub, _getDocument } from \"ag-grid-community\";\n\n// enterprise-modules/core/src/license/shared/licenseManager.ts\nimport { _missingOrEmpty } from \"ag-grid-community\";\n\n// enterprise-modules/core/src/license/shared/md5.ts\nvar MD5 = class {\n  constructor() {\n    this.ieCompatibility = false;\n  }\n  init() {\n    this.ieCompatibility = this.md5(\"hello\") != \"5d41402abc4b2a76b9719d911017c592\";\n  }\n  md5cycle(x, k) {\n    let a = x[0], b = x[1], c = x[2], d = x[3];\n    a = this.ff(a, b, c, d, k[0], 7, -680876936);\n    d = this.ff(d, a, b, c, k[1], 12, -389564586);\n    c = this.ff(c, d, a, b, k[2], 17, 606105819);\n    b = this.ff(b, c, d, a, k[3], 22, -1044525330);\n    a = this.ff(a, b, c, d, k[4], 7, -176418897);\n    d = this.ff(d, a, b, c, k[5], 12, 1200080426);\n    c = this.ff(c, d, a, b, k[6], 17, -1473231341);\n    b = this.ff(b, c, d, a, k[7], 22, -45705983);\n    a = this.ff(a, b, c, d, k[8], 7, 1770035416);\n    d = this.ff(d, a, b, c, k[9], 12, -1958414417);\n    c = this.ff(c, d, a, b, k[10], 17, -42063);\n    b = this.ff(b, c, d, a, k[11], 22, -1990404162);\n    a = this.ff(a, b, c, d, k[12], 7, 1804603682);\n    d = this.ff(d, a, b, c, k[13], 12, -40341101);\n    c = this.ff(c, d, a, b, k[14], 17, -1502002290);\n    b = this.ff(b, c, d, a, k[15], 22, 1236535329);\n    a = this.gg(a, b, c, d, k[1], 5, -165796510);\n    d = this.gg(d, a, b, c, k[6], 9, -1069501632);\n    c = this.gg(c, d, a, b, k[11], 14, 643717713);\n    b = this.gg(b, c, d, a, k[0], 20, -373897302);\n    a = this.gg(a, b, c, d, k[5], 5, -701558691);\n    d = this.gg(d, a, b, c, k[10], 9, 38016083);\n    c = this.gg(c, d, a, b, k[15], 14, -660478335);\n    b = this.gg(b, c, d, a, k[4], 20, -405537848);\n    a = this.gg(a, b, c, d, k[9], 5, 568446438);\n    d = this.gg(d, a, b, c, k[14], 9, -1019803690);\n    c = this.gg(c, d, a, b, k[3], 14, -187363961);\n    b = this.gg(b, c, d, a, k[8], 20, 1163531501);\n    a = this.gg(a, b, c, d, k[13], 5, -1444681467);\n    d = this.gg(d, a, b, c, k[2], 9, -51403784);\n    c = this.gg(c, d, a, b, k[7], 14, 1735328473);\n    b = this.gg(b, c, d, a, k[12], 20, -1926607734);\n    a = this.hh(a, b, c, d, k[5], 4, -378558);\n    d = this.hh(d, a, b, c, k[8], 11, -2022574463);\n    c = this.hh(c, d, a, b, k[11], 16, 1839030562);\n    b = this.hh(b, c, d, a, k[14], 23, -35309556);\n    a = this.hh(a, b, c, d, k[1], 4, -1530992060);\n    d = this.hh(d, a, b, c, k[4], 11, 1272893353);\n    c = this.hh(c, d, a, b, k[7], 16, -155497632);\n    b = this.hh(b, c, d, a, k[10], 23, -1094730640);\n    a = this.hh(a, b, c, d, k[13], 4, 681279174);\n    d = this.hh(d, a, b, c, k[0], 11, -358537222);\n    c = this.hh(c, d, a, b, k[3], 16, -722521979);\n    b = this.hh(b, c, d, a, k[6], 23, 76029189);\n    a = this.hh(a, b, c, d, k[9], 4, -640364487);\n    d = this.hh(d, a, b, c, k[12], 11, -421815835);\n    c = this.hh(c, d, a, b, k[15], 16, 530742520);\n    b = this.hh(b, c, d, a, k[2], 23, -995338651);\n    a = this.ii(a, b, c, d, k[0], 6, -198630844);\n    d = this.ii(d, a, b, c, k[7], 10, 1126891415);\n    c = this.ii(c, d, a, b, k[14], 15, -1416354905);\n    b = this.ii(b, c, d, a, k[5], 21, -57434055);\n    a = this.ii(a, b, c, d, k[12], 6, 1700485571);\n    d = this.ii(d, a, b, c, k[3], 10, -1894986606);\n    c = this.ii(c, d, a, b, k[10], 15, -1051523);\n    b = this.ii(b, c, d, a, k[1], 21, -2054922799);\n    a = this.ii(a, b, c, d, k[8], 6, 1873313359);\n    d = this.ii(d, a, b, c, k[15], 10, -30611744);\n    c = this.ii(c, d, a, b, k[6], 15, -1560198380);\n    b = this.ii(b, c, d, a, k[13], 21, 1309151649);\n    a = this.ii(a, b, c, d, k[4], 6, -145523070);\n    d = this.ii(d, a, b, c, k[11], 10, -1120210379);\n    c = this.ii(c, d, a, b, k[2], 15, 718787259);\n    b = this.ii(b, c, d, a, k[9], 21, -343485551);\n    x[0] = this.add32(a, x[0]);\n    x[1] = this.add32(b, x[1]);\n    x[2] = this.add32(c, x[2]);\n    x[3] = this.add32(d, x[3]);\n  }\n  cmn(q, a, b, x, s, t) {\n    a = this.add32(this.add32(a, q), this.add32(x, t));\n    return this.add32(a << s | a >>> 32 - s, b);\n  }\n  ff(a, b, c, d, x, s, t) {\n    return this.cmn(b & c | ~b & d, a, b, x, s, t);\n  }\n  gg(a, b, c, d, x, s, t) {\n    return this.cmn(b & d | c & ~d, a, b, x, s, t);\n  }\n  hh(a, b, c, d, x, s, t) {\n    return this.cmn(b ^ c ^ d, a, b, x, s, t);\n  }\n  ii(a, b, c, d, x, s, t) {\n    return this.cmn(c ^ (b | ~d), a, b, x, s, t);\n  }\n  md51(s) {\n    const n = s.length;\n    const state = [1732584193, -271733879, -1732584194, 271733878];\n    let i;\n    for (i = 64; i <= s.length; i += 64) {\n      this.md5cycle(state, this.md5blk(s.substring(i - 64, i)));\n    }\n    s = s.substring(i - 64);\n    const tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n    for (i = 0; i < s.length; i++) {\n      tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n    }\n    tail[i >> 2] |= 128 << (i % 4 << 3);\n    if (i > 55) {\n      this.md5cycle(state, tail);\n      for (i = 0; i < 16; i++) {\n        tail[i] = 0;\n      }\n    }\n    tail[14] = n * 8;\n    this.md5cycle(state, tail);\n    return state;\n  }\n  /* there needs to be support for Unicode here, * unless we pretend that we can redefine the MD-5\n   * algorithm for multi-byte characters (perhaps by adding every four 16-bit characters and\n   * shortening the sum to 32 bits). Otherwise I suthis.ggest performing MD-5 as if every character\n   * was two bytes--e.g., 0040 0025 = @%--but then how will an ordinary MD-5 sum be matched?\n   * There is no way to standardize text to something like UTF-8 before transformation; speed cost is\n   * utterly prohibitive. The JavaScript standard itself needs to look at this: it should start\n   * providing access to strings as preformed UTF-8 8-bit unsigned value arrays.\n   */\n  md5blk(s) {\n    const md5blks = [];\n    for (let i = 0; i < 64; i += 4) {\n      md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n    }\n    return md5blks;\n  }\n  rhex(n) {\n    const hex_chr = \"0123456789abcdef\".split(\"\");\n    let s = \"\", j = 0;\n    for (; j < 4; j++) {\n      s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n    }\n    return s;\n  }\n  hex(x) {\n    for (let i = 0; i < x.length; i++) {\n      x[i] = this.rhex(x[i]);\n    }\n    return x.join(\"\");\n  }\n  md5(s) {\n    return this.hex(this.md51(s));\n  }\n  add32(a, b) {\n    return this.ieCompatibility ? this.add32Compat(a, b) : this.add32Std(a, b);\n  }\n  /* this function is much faster, so if possible we use it. Some IEs are the only ones I know of that\n   need the idiotic second function, generated by an if clause.  */\n  add32Std(a, b) {\n    return a + b & 4294967295;\n  }\n  add32Compat(x, y) {\n    const lsw = (x & 65535) + (y & 65535), msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n    return msw << 16 | lsw & 65535;\n  }\n};\n\n// enterprise-modules/core/src/license/shared/licenseManager.ts\nvar LICENSE_TYPES = {\n  \"01\": \"GRID\",\n  \"02\": \"CHARTS\",\n  \"0102\": \"BOTH\"\n};\nvar LICENSING_HELP_URL = \"https://ag-grid.com/licensing/\";\nvar _LicenseManager = class _LicenseManager {\n  constructor(document2) {\n    this.watermarkMessage = void 0;\n    this.totalMessageLength = 124;\n    this.document = document2;\n    this.md5 = new MD5();\n    this.md5.init();\n  }\n  validateLicense() {\n    const licenseDetails = this.getLicenseDetails(_LicenseManager.licenseKey);\n    const currentLicenseName = `AG Grid ${licenseDetails.currentLicenseType === \"BOTH\" ? \"and AG Charts \" : \"\"}Enterprise`;\n    const suppliedLicenseName = licenseDetails.suppliedLicenseType === void 0 ? \"\" : `AG ${licenseDetails.suppliedLicenseType === \"BOTH\" ? \"Grid and AG Charts\" : licenseDetails.suppliedLicenseType === \"GRID\" ? \"Grid\" : \"Charts\"} Enterprise`;\n    if (licenseDetails.missing) {\n      if (!this.isWebsiteUrl() || this.isForceWatermark()) {\n        this.outputMissingLicenseKey(currentLicenseName);\n      }\n    } else if (licenseDetails.expired) {\n      const gridReleaseDate = _LicenseManager.getGridReleaseDate();\n      const formattedReleaseDate = _LicenseManager.formatDate(gridReleaseDate);\n      this.outputExpiredKey(licenseDetails.expiry, formattedReleaseDate, currentLicenseName, suppliedLicenseName);\n    } else if (!licenseDetails.valid) {\n      this.outputInvalidLicenseKey(\n        !!licenseDetails.incorrectLicenseType,\n        currentLicenseName,\n        suppliedLicenseName\n      );\n    } else if (licenseDetails.isTrial && licenseDetails.trialExpired) {\n      this.outputExpiredTrialKey(licenseDetails.expiry, currentLicenseName, suppliedLicenseName);\n    }\n  }\n  static extractExpiry(license) {\n    const restrictionHashed = license.substring(license.lastIndexOf(\"_\") + 1, license.length);\n    return new Date(parseInt(_LicenseManager.decode(restrictionHashed), 10));\n  }\n  static extractLicenseComponents(licenseKey) {\n    let cleanedLicenseKey = licenseKey.replace(/[\\u200B-\\u200D\\uFEFF]/g, \"\");\n    cleanedLicenseKey = cleanedLicenseKey.replace(/\\r?\\n|\\r/g, \"\");\n    if (licenseKey.length <= 32) {\n      return { md5: null, license: licenseKey, version: null, isTrial: null };\n    }\n    const hashStart = cleanedLicenseKey.length - 32;\n    const md5 = cleanedLicenseKey.substring(hashStart);\n    const license = cleanedLicenseKey.substring(0, hashStart);\n    const [version, isTrial, type] = _LicenseManager.extractBracketedInformation(cleanedLicenseKey);\n    return { md5, license, version, isTrial, type };\n  }\n  getLicenseDetails(licenseKey) {\n    const currentLicenseType = _LicenseManager.chartsLicenseManager ? \"BOTH\" : \"GRID\";\n    if (_missingOrEmpty(licenseKey)) {\n      return {\n        licenseKey,\n        valid: false,\n        missing: true,\n        currentLicenseType\n      };\n    }\n    const gridReleaseDate = _LicenseManager.getGridReleaseDate();\n    const { md5, license, version, isTrial, type } = _LicenseManager.extractLicenseComponents(licenseKey);\n    let valid = md5 === this.md5.md5(license) && licenseKey.indexOf(\"For_Trialing_ag-Grid_Only\") === -1;\n    let trialExpired = void 0;\n    let expired = void 0;\n    let expiry = null;\n    let incorrectLicenseType = false;\n    let suppliedLicenseType = void 0;\n    function handleTrial() {\n      const now = /* @__PURE__ */ new Date();\n      trialExpired = expiry < now;\n      expired = void 0;\n    }\n    if (valid) {\n      expiry = _LicenseManager.extractExpiry(license);\n      valid = !isNaN(expiry.getTime());\n      if (valid) {\n        expired = gridReleaseDate > expiry;\n        switch (version) {\n          case \"legacy\":\n          case \"2\": {\n            if (isTrial) {\n              handleTrial();\n            }\n            break;\n          }\n          case \"3\": {\n            if (_missingOrEmpty(type)) {\n              valid = false;\n            } else {\n              suppliedLicenseType = type;\n              if (type !== LICENSE_TYPES[\"01\"] && type !== LICENSE_TYPES[\"0102\"] || currentLicenseType === \"BOTH\" && suppliedLicenseType !== \"BOTH\") {\n                valid = false;\n                incorrectLicenseType = true;\n              } else if (isTrial) {\n                handleTrial();\n              }\n            }\n          }\n        }\n      }\n    }\n    if (!valid) {\n      return {\n        licenseKey,\n        valid,\n        incorrectLicenseType,\n        currentLicenseType,\n        suppliedLicenseType\n      };\n    }\n    return {\n      licenseKey,\n      valid,\n      expiry: _LicenseManager.formatDate(expiry),\n      expired,\n      version,\n      isTrial,\n      trialExpired,\n      incorrectLicenseType,\n      currentLicenseType,\n      suppliedLicenseType\n    };\n  }\n  isDisplayWatermark() {\n    return this.isForceWatermark() || !this.isLocalhost() && !this.isWebsiteUrl() && !_missingOrEmpty(this.watermarkMessage);\n  }\n  getWatermarkMessage() {\n    return this.watermarkMessage || \"\";\n  }\n  getHostname() {\n    const win = this.document.defaultView || window;\n    const loc = win.location;\n    const { hostname = \"\" } = loc;\n    return hostname;\n  }\n  isForceWatermark() {\n    const win = this.document.defaultView || window;\n    const loc = win.location;\n    const { pathname } = loc;\n    return pathname ? pathname.indexOf(\"forceWatermark\") !== -1 : false;\n  }\n  isWebsiteUrl() {\n    const hostname = this.getHostname();\n    return hostname.match(/^((?:[\\w-]+\\.)?ag-grid\\.com)$/) !== null;\n  }\n  isLocalhost() {\n    const hostname = this.getHostname();\n    return hostname.match(/^(?:127\\.0\\.0\\.1|localhost)$/) !== null;\n  }\n  static formatDate(date) {\n    const monthNames = [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ];\n    const day = date.getDate();\n    const monthIndex = date.getMonth();\n    const year = date.getFullYear();\n    return day + \" \" + monthNames[monthIndex] + \" \" + year;\n  }\n  static getGridReleaseDate() {\n    return new Date(parseInt(_LicenseManager.decode(_LicenseManager.RELEASE_INFORMATION), 10));\n  }\n  static decode(input) {\n    const keystr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n    let t = \"\";\n    let n, r, i;\n    let s, o, u, a;\n    let f = 0;\n    const e = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n    while (f < e.length) {\n      s = keystr.indexOf(e.charAt(f++));\n      o = keystr.indexOf(e.charAt(f++));\n      u = keystr.indexOf(e.charAt(f++));\n      a = keystr.indexOf(e.charAt(f++));\n      n = s << 2 | o >> 4;\n      r = (o & 15) << 4 | u >> 2;\n      i = (u & 3) << 6 | a;\n      t = t + String.fromCharCode(n);\n      if (u != 64) {\n        t = t + String.fromCharCode(r);\n      }\n      if (a != 64) {\n        t = t + String.fromCharCode(i);\n      }\n    }\n    t = _LicenseManager.utf8_decode(t);\n    return t;\n  }\n  static utf8_decode(input) {\n    input = input.replace(/rn/g, \"n\");\n    let t = \"\";\n    for (let n = 0; n < input.length; n++) {\n      const r = input.charCodeAt(n);\n      if (r < 128) {\n        t += String.fromCharCode(r);\n      } else if (r > 127 && r < 2048) {\n        t += String.fromCharCode(r >> 6 | 192);\n        t += String.fromCharCode(r & 63 | 128);\n      } else {\n        t += String.fromCharCode(r >> 12 | 224);\n        t += String.fromCharCode(r >> 6 & 63 | 128);\n        t += String.fromCharCode(r & 63 | 128);\n      }\n    }\n    return t;\n  }\n  static setChartsLicenseManager(dependantLicenseManager) {\n    this.chartsLicenseManager = dependantLicenseManager;\n  }\n  static setLicenseKey(licenseKey) {\n    this.licenseKey = licenseKey;\n    if (this.chartsLicenseManager) {\n      this.chartsLicenseManager.setLicenseKey(licenseKey, true);\n    }\n  }\n  static extractBracketedInformation(licenseKey) {\n    if (!licenseKey.includes(\"[\")) {\n      return [\"legacy\", false, void 0];\n    }\n    const matches = licenseKey.match(/\\[(.*?)\\]/g).map((match) => match.replace(\"[\", \"\").replace(\"]\", \"\"));\n    if (!matches || matches.length === 0) {\n      return [\"legacy\", false, void 0];\n    }\n    const isTrial = matches.filter((match) => match === \"TRIAL\").length === 1;\n    const rawVersion = matches.filter((match) => match.indexOf(\"v\") === 0)[0];\n    const version = rawVersion ? rawVersion.replace(\"v\", \"\") : \"legacy\";\n    const type = LICENSE_TYPES[matches.filter((match) => LICENSE_TYPES[match])[0]];\n    return [version, isTrial, type];\n  }\n  centerPadAndOutput(input) {\n    const paddingRequired = this.totalMessageLength - input.length;\n    console.error(input.padStart(paddingRequired / 2 + input.length, \"*\").padEnd(this.totalMessageLength, \"*\"));\n  }\n  padAndOutput(input, padding = \"*\", terminateWithPadding = \"\") {\n    console.error(\n      input.padEnd(this.totalMessageLength - terminateWithPadding.length, padding) + terminateWithPadding\n    );\n  }\n  outputInvalidLicenseKey(incorrectLicenseType, currentLicenseName, suppliedLicenseName) {\n    if (incorrectLicenseType) {\n      this.centerPadAndOutput(\"\");\n      this.centerPadAndOutput(` ${currentLicenseName} License `);\n      this.centerPadAndOutput(\" Incompatible License Key \");\n      this.padAndOutput(\n        `* Your license key is for ${suppliedLicenseName} only and does not cover you for ${currentLicenseName}.`,\n        \" \",\n        \"*\"\n      );\n      this.padAndOutput(`* To troubleshoot your license key visit ${LICENSING_HELP_URL}.`, \" \", \"*\");\n      this.centerPadAndOutput(\"\");\n      this.centerPadAndOutput(\"\");\n    } else {\n      this.centerPadAndOutput(\"\");\n      this.centerPadAndOutput(` ${currentLicenseName} License `);\n      this.centerPadAndOutput(\" Invalid License Key \");\n      this.padAndOutput(`* Your license key is not valid.`, \" \", \"*\");\n      this.padAndOutput(`* To troubleshoot your license key visit ${LICENSING_HELP_URL}.`, \" \", \"*\");\n      this.centerPadAndOutput(\"\");\n      this.centerPadAndOutput(\"\");\n    }\n    this.watermarkMessage = \"Invalid License\";\n  }\n  outputExpiredTrialKey(formattedExpiryDate, currentLicenseName, suppliedLicenseName) {\n    this.centerPadAndOutput(\"\");\n    this.centerPadAndOutput(` ${currentLicenseName} License `);\n    this.centerPadAndOutput(\" Trial Period Expired. \");\n    this.padAndOutput(\n      `* Your trial only license for ${suppliedLicenseName} expired on ${formattedExpiryDate}.`,\n      \" \",\n      \"*\"\n    );\n    this.padAndOutput(\"* Please email info@ag-grid.com to purchase a license.\", \" \", \"*\");\n    this.centerPadAndOutput(\"\");\n    this.centerPadAndOutput(\"\");\n    this.watermarkMessage = \"Trial Period Expired\";\n  }\n  outputMissingLicenseKey(currentLicenseName) {\n    this.centerPadAndOutput(\"\");\n    this.centerPadAndOutput(` ${currentLicenseName} License `);\n    this.centerPadAndOutput(\" License Key Not Found \");\n    this.padAndOutput(`* All ${currentLicenseName} features are unlocked for trial.`, \" \", \"*\");\n    this.padAndOutput(\n      \"* If you want to hide the watermark please email info@ag-grid.com for a trial license key.\",\n      \" \",\n      \"*\"\n    );\n    this.centerPadAndOutput(\"\");\n    this.centerPadAndOutput(\"\");\n    this.watermarkMessage = \"For Trial Use Only\";\n  }\n  outputExpiredKey(formattedExpiryDate, formattedReleaseDate, currentLicenseName, suppliedLicenseName) {\n    this.centerPadAndOutput(\"\");\n    this.centerPadAndOutput(` ${currentLicenseName} License `);\n    this.centerPadAndOutput(\" Incompatible Software Version \");\n    this.padAndOutput(\n      `* Your license key works with versions of ${suppliedLicenseName} released before ${formattedExpiryDate}.`,\n      \" \",\n      \"*\"\n    );\n    this.padAndOutput(`* The version you are trying to use was released on ${formattedReleaseDate}.`, \" \", \"*\");\n    this.padAndOutput(\"* Please contact info@ag-grid.com to renew your license key.\", \" \", \"*\");\n    this.centerPadAndOutput(\"\");\n    this.centerPadAndOutput(\"\");\n    this.watermarkMessage = \"License Expired\";\n  }\n};\n_LicenseManager.RELEASE_INFORMATION = \"MTc1NTA3NzEwMDgwOQ==\";\nvar LicenseManager = _LicenseManager;\n\n// enterprise-modules/core/src/license/watermark.ts\nimport { Component, RefPlaceholder } from \"ag-grid-community\";\nvar AgWatermark = class extends Component {\n  constructor() {\n    super(\n      /* html*/\n      `<div class=\"ag-watermark\">\n                <div data-ref=\"eLicenseTextRef\" class=\"ag-watermark-text\"></div>\n            </div>`\n    );\n    this.eLicenseTextRef = RefPlaceholder;\n  }\n  wireBeans(beans) {\n    this.licenseManager = beans.licenseManager;\n  }\n  postConstruct() {\n    const show = this.shouldDisplayWatermark();\n    this.setDisplayed(show);\n    if (show) {\n      this.eLicenseTextRef.innerText = this.licenseManager.getWatermarkMessage();\n      window.setTimeout(() => this.addCssClass(\"ag-opacity-zero\"), 0);\n      window.setTimeout(() => this.setDisplayed(false), 5e3);\n    }\n  }\n  shouldDisplayWatermark() {\n    return this.licenseManager.isDisplayWatermark();\n  }\n};\nvar AgWatermarkSelector = {\n  selector: \"AG-WATERMARK\",\n  component: AgWatermark\n};\n\n// enterprise-modules/core/src/license/gridLicenseManager.ts\nvar GridLicenseManager = class extends BeanStub {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"licenseManager\";\n  }\n  postConstruct() {\n    this.validateLicense();\n  }\n  validateLicense() {\n    this.licenseManager = new LicenseManager(_getDocument(this.gos));\n    this.licenseManager.validateLicense();\n  }\n  static getLicenseDetails(licenseKey) {\n    return new LicenseManager(null).getLicenseDetails(licenseKey);\n  }\n  getWatermarkSelector() {\n    return AgWatermarkSelector;\n  }\n  isDisplayWatermark() {\n    return this.licenseManager.isDisplayWatermark();\n  }\n  getWatermarkMessage() {\n    return this.licenseManager.getWatermarkMessage();\n  }\n  static setLicenseKey(licenseKey) {\n    LicenseManager.setLicenseKey(licenseKey);\n  }\n  static setChartsLicenseManager(chartsLicenseManager) {\n    LicenseManager.setChartsLicenseManager(chartsLicenseManager);\n  }\n};\n\n// enterprise-modules/core/src/version.ts\nvar VERSION = \"32.3.9\";\n\n// enterprise-modules/core/src/widgets/agMenuItemRenderer.ts\nimport {\n  Component as Component2,\n  _createIconNoSpan,\n  _isNodeOrElement,\n  _loadTemplate,\n  _setAriaExpanded,\n  _warnOnce\n} from \"ag-grid-community\";\nvar AgMenuItemRenderer = class extends Component2 {\n  constructor() {\n    super();\n    this.setTemplate(\n      /* html */\n      `<div></div>`\n    );\n  }\n  init(params) {\n    this.params = params;\n    this.cssClassPrefix = this.params.cssClassPrefix ?? \"ag-menu-option\";\n    this.addIcon();\n    this.addName();\n    this.addShortcut();\n    this.addSubMenu();\n  }\n  configureDefaults() {\n    return true;\n  }\n  addIcon() {\n    if (this.params.isCompact) {\n      return;\n    }\n    const iconWrapper = _loadTemplate(\n      /* html */\n      `<span data-ref=\"eIcon\" class=\"${this.getClassName(\"part\")} ${this.getClassName(\"icon\")}\" role=\"presentation\"></span>`\n    );\n    const { checked, icon } = this.params;\n    if (checked) {\n      iconWrapper.appendChild(_createIconNoSpan(\"check\", this.gos));\n    } else if (icon) {\n      if (_isNodeOrElement(icon)) {\n        iconWrapper.appendChild(icon);\n      } else if (typeof icon === \"string\") {\n        iconWrapper.innerHTML = icon;\n      } else {\n        _warnOnce(\"menu item icon must be DOM node or string\");\n      }\n    }\n    this.getGui().appendChild(iconWrapper);\n  }\n  addName() {\n    const name = _loadTemplate(\n      /* html */\n      `<span data-ref=\"eName\" class=\"${this.getClassName(\"part\")} ${this.getClassName(\"text\")}\">${this.params.name || \"\"}</span>`\n    );\n    this.getGui().appendChild(name);\n  }\n  addShortcut() {\n    if (this.params.isCompact) {\n      return;\n    }\n    const shortcut = _loadTemplate(\n      /* html */\n      `<span data-ref=\"eShortcut\" class=\"${this.getClassName(\"part\")} ${this.getClassName(\"shortcut\")}\">${this.params.shortcut || \"\"}</span>`\n    );\n    this.getGui().appendChild(shortcut);\n  }\n  addSubMenu() {\n    const pointer = _loadTemplate(\n      /* html */\n      `<span data-ref=\"ePopupPointer\" class=\"${this.getClassName(\"part\")} ${this.getClassName(\"popup-pointer\")}\"></span>`\n    );\n    const eGui = this.getGui();\n    if (this.params.subMenu) {\n      const iconName = this.gos.get(\"enableRtl\") ? \"smallLeft\" : \"smallRight\";\n      _setAriaExpanded(eGui, false);\n      pointer.appendChild(_createIconNoSpan(iconName, this.gos));\n    }\n    eGui.appendChild(pointer);\n  }\n  getClassName(suffix) {\n    return `${this.cssClassPrefix}-${suffix}`;\n  }\n  destroy() {\n    super.destroy();\n  }\n};\n\n// enterprise-modules/core/src/agGridEnterpriseModule.ts\nvar EnterpriseCoreModule = _defineModule({\n  version: VERSION,\n  moduleName: ModuleNames.EnterpriseCoreModule,\n  beans: [GridLicenseManager],\n  userComponents: [\n    {\n      name: \"agMenuItem\",\n      classImp: AgMenuItemRenderer\n    }\n  ]\n});\n\n// enterprise-modules/core/src/widgets/agGroupComponent.ts\nimport {\n  AgCheckboxSelector,\n  AgToggleButton,\n  Component as Component3,\n  KeyCode,\n  RefPlaceholder as RefPlaceholder2,\n  _createIcon,\n  _setAriaExpanded as _setAriaExpanded2,\n  _setDisplayed\n} from \"ag-grid-community\";\nfunction getAgGroupComponentTemplate(params) {\n  const cssIdentifier = params.cssIdentifier || \"default\";\n  const direction = params.direction || \"vertical\";\n  return (\n    /* html */\n    `\n        <div class=\"ag-group ag-${cssIdentifier}-group\" role=\"presentation\">\n            <div data-ref=\"eToolbar\" class=\"ag-group-toolbar ag-${cssIdentifier}-group-toolbar\">\n                <ag-checkbox data-ref=\"cbGroupEnabled\"></ag-checkbox>\n            </div>\n            <div data-ref=\"eContainer\" class=\"ag-group-container ag-group-container-${direction} ag-${cssIdentifier}-group-container\"></div>\n        </div>\n    `\n  );\n}\nvar AgGroupComponent = class extends Component3 {\n  constructor(params = {}) {\n    super(getAgGroupComponentTemplate(params), [AgCheckboxSelector]);\n    this.params = params;\n    this.suppressEnabledCheckbox = true;\n    this.suppressToggleExpandOnEnableChange = false;\n    this.eToolbar = RefPlaceholder2;\n    this.cbGroupEnabled = RefPlaceholder2;\n    this.eContainer = RefPlaceholder2;\n    const {\n      enabled,\n      items,\n      suppressEnabledCheckbox,\n      expanded,\n      suppressToggleExpandOnEnableChange,\n      useToggle: toggleMode\n    } = params;\n    this.cssIdentifier = params.cssIdentifier || \"default\";\n    this.enabled = enabled != null ? enabled : true;\n    this.items = items || [];\n    this.useToggle = toggleMode ?? false;\n    this.alignItems = params.alignItems || \"center\";\n    this.expanded = expanded == null ? true : expanded;\n    if (suppressEnabledCheckbox != null) {\n      this.suppressEnabledCheckbox = suppressEnabledCheckbox;\n    }\n    if (suppressToggleExpandOnEnableChange != null) {\n      this.suppressToggleExpandOnEnableChange = suppressToggleExpandOnEnableChange;\n    }\n  }\n  postConstruct() {\n    this.setupTitleBar();\n    if (this.items.length) {\n      const initialItems = this.items;\n      this.items = [];\n      this.addItems(initialItems);\n    }\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    this.cbGroupEnabled.setLabel(localeTextFunc(\"enabled\", \"Enabled\"));\n    if (this.enabled) {\n      this.setEnabled(this.enabled, void 0, true);\n    }\n    this.setAlignItems(this.alignItems);\n    const { onEnableChange, onExpandedChange, suppressOpenCloseIcons } = this.params;\n    this.hideEnabledCheckbox(this.suppressEnabledCheckbox);\n    this.hideOpenCloseIcons(suppressOpenCloseIcons ?? false);\n    this.refreshChildDisplay();\n    _setDisplayed(this.eContainer, this.expanded);\n    this.cbGroupEnabled.onValueChange((newSelection) => {\n      this.setEnabled(newSelection, true, this.suppressToggleExpandOnEnableChange);\n      this.dispatchEnableChangeEvent(newSelection);\n    });\n    if (onEnableChange != null) {\n      this.onEnableChange(onEnableChange);\n    }\n    if (onExpandedChange != null) {\n      this.onExpandedChange(onExpandedChange);\n    }\n  }\n  refreshChildDisplay() {\n    _setDisplayed(this.eToolbar, this.expanded && !this.suppressEnabledCheckbox);\n    this.eTitleBar?.refreshOnExpand(this.expanded);\n  }\n  isExpanded() {\n    return this.expanded;\n  }\n  setAlignItems(alignment) {\n    if (this.alignItems !== alignment) {\n      this.removeCssClass(`ag-group-item-alignment-${this.alignItems}`);\n    }\n    this.alignItems = alignment;\n    const newCls = `ag-group-item-alignment-${this.alignItems}`;\n    this.addCssClass(newCls);\n    return this;\n  }\n  toggleGroupExpand(expanded, silent) {\n    if (this.eTitleBar?.isSuppressCollapse() && !this.useToggle) {\n      expanded = true;\n      silent = true;\n    } else {\n      expanded = expanded != null ? expanded : !this.expanded;\n      if (this.expanded === expanded) {\n        return this;\n      }\n    }\n    this.expanded = expanded;\n    this.refreshChildDisplay();\n    _setDisplayed(this.eContainer, expanded);\n    if (!silent) {\n      this.dispatchLocalEvent({\n        type: expanded ? \"expanded\" : \"collapsed\"\n      });\n    }\n    return this;\n  }\n  addItems(items) {\n    items.forEach((item) => this.addItem(item));\n  }\n  prependItem(item) {\n    this.insertItem(item, true);\n  }\n  addItem(item) {\n    this.insertItem(item, false);\n  }\n  insertItem(item, prepend) {\n    const container = this.eContainer;\n    const el = item instanceof Component3 ? item.getGui() : item;\n    el.classList.add(\"ag-group-item\", `ag-${this.cssIdentifier}-group-item`);\n    if (prepend) {\n      container.insertAdjacentElement(\"afterbegin\", el);\n      this.items.unshift(el);\n    } else {\n      container.appendChild(el);\n      this.items.push(el);\n    }\n  }\n  hideItem(hide, index) {\n    const itemToHide = this.items[index];\n    _setDisplayed(itemToHide, !hide);\n  }\n  getItemIndex(item) {\n    const el = item instanceof Component3 ? item.getGui() : item;\n    return this.items.indexOf(el);\n  }\n  setTitle(title) {\n    this.eTitleBar?.setTitle(title);\n    return this;\n  }\n  addTitleBarWidget(el) {\n    this.eTitleBar?.addWidget(el);\n    return this;\n  }\n  addCssClassToTitleBar(cssClass) {\n    this.eTitleBar?.addCssClass(cssClass);\n  }\n  dispatchEnableChangeEvent(enabled) {\n    const event = {\n      type: \"enableChange\",\n      enabled\n    };\n    this.dispatchLocalEvent(event);\n  }\n  setEnabled(enabled, skipToggle, skipExpand) {\n    this.enabled = enabled;\n    this.refreshDisabledStyles();\n    if (!skipExpand) {\n      this.toggleGroupExpand(enabled);\n    }\n    if (!skipToggle) {\n      this.cbGroupEnabled.setValue(enabled);\n      this.eToggle?.setValue(enabled);\n    }\n    return this;\n  }\n  isEnabled() {\n    return this.enabled;\n  }\n  onEnableChange(callbackFn) {\n    this.addManagedListeners(this, { enableChange: (event) => callbackFn(event.enabled) });\n    return this;\n  }\n  onExpandedChange(callbackFn) {\n    this.addManagedListeners(this, {\n      expanded: () => callbackFn(true),\n      collapsed: () => callbackFn(false)\n    });\n    return this;\n  }\n  hideEnabledCheckbox(hide) {\n    this.suppressEnabledCheckbox = hide;\n    this.refreshChildDisplay();\n    this.refreshDisabledStyles();\n    return this;\n  }\n  hideOpenCloseIcons(hide) {\n    this.eTitleBar?.hideOpenCloseIcons(hide);\n    return this;\n  }\n  refreshDisabledStyles() {\n    const disabled = !this.enabled;\n    this.eContainer.classList.toggle(\"ag-disabled\", disabled);\n    this.eTitleBar?.refreshDisabledStyles(this.suppressEnabledCheckbox && disabled);\n    this.eContainer.classList.toggle(\"ag-disabled-group-container\", disabled);\n  }\n  setupTitleBar() {\n    const titleBar = this.useToggle ? this.createToggleTitleBar() : this.createDefaultTitleBar();\n    this.eToolbar.insertAdjacentElement(\"beforebegin\", titleBar.getGui());\n  }\n  createDefaultTitleBar() {\n    const titleBar = this.createManagedBean(new DefaultTitleBar(this.params));\n    this.eTitleBar = titleBar;\n    titleBar.refreshOnExpand(this.expanded);\n    this.addManagedListeners(titleBar, {\n      expandedChanged: (event) => this.toggleGroupExpand(event.expanded)\n    });\n    return titleBar;\n  }\n  createToggleTitleBar() {\n    const eToggle = this.createManagedBean(\n      new AgToggleButton({\n        value: this.enabled,\n        label: this.params.title,\n        labelAlignment: \"left\",\n        labelWidth: \"flex\",\n        onValueChange: (enabled) => {\n          this.setEnabled(enabled, true);\n          this.dispatchEnableChangeEvent(enabled);\n        }\n      })\n    );\n    eToggle.addCssClass(\"ag-group-title-bar\");\n    eToggle.addCssClass(`ag-${this.params.cssIdentifier ?? \"default\"}-group-title-bar ag-unselectable`);\n    this.eToggle = eToggle;\n    this.toggleGroupExpand(this.enabled);\n    return eToggle;\n  }\n};\nvar TITLE_BAR_DISABLED_CLASS = \"ag-disabled-group-title-bar\";\nfunction getDefaultTitleBarTemplate(params) {\n  const cssIdentifier = params.cssIdentifier ?? \"default\";\n  const role = params.suppressKeyboardNavigation ? \"presentation\" : \"role\";\n  return (\n    /* html */\n    `\n        <div class=\"ag-group-title-bar ag-${cssIdentifier}-group-title-bar ag-unselectable\" role=\"${role}\">\n            <span class=\"ag-group-title-bar-icon ag-${cssIdentifier}-group-title-bar-icon\" data-ref=\"eGroupOpenedIcon\" role=\"presentation\"></span>\n            <span class=\"ag-group-title-bar-icon ag-${cssIdentifier}-group-title-bar-icon\" data-ref=\"eGroupClosedIcon\" role=\"presentation\"></span>\n            <span data-ref=\"eTitle\" class=\"ag-group-title ag-${cssIdentifier}-group-title\"></span>\n        </div>\n    `\n  );\n}\nvar DefaultTitleBar = class extends Component3 {\n  constructor(params = {}) {\n    super(getDefaultTitleBarTemplate(params));\n    this.suppressOpenCloseIcons = false;\n    this.suppressKeyboardNavigation = false;\n    this.eGroupOpenedIcon = RefPlaceholder2;\n    this.eGroupClosedIcon = RefPlaceholder2;\n    this.eTitle = RefPlaceholder2;\n    const { title, suppressOpenCloseIcons, suppressKeyboardNavigation } = params;\n    if (!!title && title.length > 0) {\n      this.title = title;\n    }\n    if (suppressOpenCloseIcons != null) {\n      this.suppressOpenCloseIcons = suppressOpenCloseIcons;\n    }\n    this.suppressKeyboardNavigation = suppressKeyboardNavigation ?? false;\n  }\n  postConstruct() {\n    this.setTitle(this.title);\n    this.hideOpenCloseIcons(this.suppressOpenCloseIcons);\n    this.setupExpandContract();\n  }\n  setupExpandContract() {\n    this.eGroupClosedIcon.appendChild(_createIcon(\"columnSelectClosed\", this.gos, null));\n    this.eGroupOpenedIcon.appendChild(_createIcon(\"columnSelectOpen\", this.gos, null));\n    this.addManagedElementListeners(this.getGui(), {\n      click: () => this.dispatchExpandChanged(),\n      keydown: (e) => {\n        switch (e.key) {\n          case KeyCode.ENTER:\n          case KeyCode.SPACE:\n            e.preventDefault();\n            this.dispatchExpandChanged();\n            break;\n          case KeyCode.RIGHT:\n          case KeyCode.LEFT:\n            e.preventDefault();\n            this.dispatchExpandChanged(e.key === KeyCode.RIGHT);\n            break;\n        }\n      }\n    });\n  }\n  refreshOnExpand(expanded) {\n    this.refreshAriaStatus(expanded);\n    this.refreshOpenCloseIcons(expanded);\n  }\n  refreshAriaStatus(expanded) {\n    if (!this.suppressOpenCloseIcons) {\n      _setAriaExpanded2(this.getGui(), expanded);\n    }\n  }\n  refreshOpenCloseIcons(expanded) {\n    const showIcon = !this.suppressOpenCloseIcons;\n    _setDisplayed(this.eGroupOpenedIcon, showIcon && expanded);\n    _setDisplayed(this.eGroupClosedIcon, showIcon && !expanded);\n  }\n  isSuppressCollapse() {\n    return this.suppressOpenCloseIcons;\n  }\n  dispatchExpandChanged(expanded) {\n    const event = {\n      type: \"expandedChanged\",\n      expanded\n    };\n    this.dispatchLocalEvent(event);\n  }\n  setTitle(title) {\n    const eGui = this.getGui();\n    const hasTitle = !!title && title.length > 0;\n    title = hasTitle ? title : void 0;\n    this.eTitle.textContent = title ?? \"\";\n    _setDisplayed(eGui, hasTitle);\n    if (title !== this.title) {\n      this.title = title;\n    }\n    const disabled = eGui.classList.contains(TITLE_BAR_DISABLED_CLASS);\n    this.refreshDisabledStyles(disabled);\n    return this;\n  }\n  addWidget(el) {\n    this.getGui().appendChild(el);\n    return this;\n  }\n  hideOpenCloseIcons(hide) {\n    this.suppressOpenCloseIcons = hide;\n    if (hide) {\n      this.dispatchExpandChanged(true);\n    }\n    return this;\n  }\n  refreshDisabledStyles(disabled) {\n    const eGui = this.getGui();\n    if (disabled) {\n      eGui.classList.add(TITLE_BAR_DISABLED_CLASS);\n      eGui.removeAttribute(\"tabindex\");\n    } else {\n      eGui.classList.remove(TITLE_BAR_DISABLED_CLASS);\n      if (typeof this.title === \"string\" && !this.suppressKeyboardNavigation) {\n        eGui.setAttribute(\"tabindex\", \"0\");\n      } else {\n        eGui.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n};\nvar AgGroupComponentSelector = {\n  selector: \"AG-GROUP-COMPONENT\",\n  component: AgGroupComponent\n};\n\n// enterprise-modules/core/src/widgets/agRichSelect.ts\nimport {\n  AgInputTextFieldSelector,\n  AgPickerField,\n  KeyCode as KeyCode5,\n  RefPlaceholder as RefPlaceholder5,\n  _bindCellRendererToHtmlElement as _bindCellRendererToHtmlElement2,\n  _clearElement as _clearElement2,\n  _createIconNoSpan as _createIconNoSpan2,\n  _debounce,\n  _escapeString as _escapeString2,\n  _exists as _exists2,\n  _fuzzySuggestions,\n  _getActiveDomElement as _getActiveDomElement2,\n  _isEventFromPrintableCharacter,\n  _isVisible,\n  _setAriaActiveDescendant as _setAriaActiveDescendant2,\n  _stopPropagationForAgGrid as _stopPropagationForAgGrid2\n} from \"ag-grid-community\";\n\n// enterprise-modules/core/src/widgets/AgPillContainer.ts\nimport {\n  Component as Component5,\n  KeyCode as KeyCode2,\n  _clearElement,\n  _getActiveDomElement,\n  _getDocument as _getDocument2,\n  _setAriaPosInSet,\n  _setAriaSetSize\n} from \"ag-grid-community\";\n\n// enterprise-modules/core/src/widgets/agPill.ts\nimport { RefPlaceholder as RefPlaceholder3 } from \"ag-grid-community\";\nimport { Component as Component4 } from \"ag-grid-community\";\nvar AgPill = class extends Component4 {\n  constructor(config) {\n    super(\n      /* html */\n      `\n            <div class=\"ag-pill\" role=\"option\">\n                <span class=\"ag-pill-text\" data-ref=\"eText\"></span>\n                <span class=\"ag-button ag-pill-button\" data-ref=\"eButton\" role=\"presentation\"></span>\n            </div>\n        `\n    );\n    this.config = config;\n    this.eText = RefPlaceholder3;\n    this.eButton = RefPlaceholder3;\n  }\n  postConstruct() {\n    const { config, eButton } = this;\n    const { onKeyDown, onButtonClick } = config;\n    this.getGui().setAttribute(\"tabindex\", String(this.gos.get(\"tabIndex\")));\n    this.addGuiEventListener(\"focus\", () => {\n      this.eButton.focus();\n    });\n    if (onKeyDown) {\n      this.addGuiEventListener(\"keydown\", onKeyDown);\n    }\n    if (onButtonClick) {\n      this.addManagedElementListeners(eButton, {\n        click: onButtonClick\n      });\n    }\n  }\n  toggleCloseButtonClass(className, force) {\n    this.eButton.classList.toggle(className, force);\n  }\n  setText(text) {\n    this.eText.textContent = text;\n  }\n  getText() {\n    return this.eText.textContent;\n  }\n};\n\n// enterprise-modules/core/src/widgets/AgPillContainer.ts\nvar AgPillContainer = class extends Component5 {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-pill-container\" role=\"listbox\"></div>\n            `\n    );\n    this.pills = [];\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n  }\n  init(params) {\n    this.params = params;\n    this.refresh();\n  }\n  refresh() {\n    this.clearPills();\n    const { params, onPillKeyDown } = this;\n    const values = params.getValue();\n    if (!Array.isArray(values)) {\n      return;\n    }\n    const len = values.length;\n    for (let i = 0; i < len; i++) {\n      const value = values[i];\n      const pill = this.createBean(\n        new AgPill({\n          onButtonClick: () => this.onPillButtonClick(pill),\n          onKeyDown: onPillKeyDown.bind(this)\n        })\n      );\n      const pillGui = pill.getGui();\n      _setAriaPosInSet(pillGui, i + 1);\n      _setAriaSetSize(pillGui, len);\n      if (params.onPillMouseDown) {\n        pill.addGuiEventListener(\"mousedown\", params.onPillMouseDown);\n      }\n      if (params.announceItemFocus) {\n        pill.addGuiEventListener(\"focus\", params.announceItemFocus);\n      }\n      pill.setText(value);\n      pill.toggleCloseButtonClass(\"ag-icon-cancel\", true);\n      this.appendChild(pillGui);\n      this.pills.push(pill);\n    }\n  }\n  onNavigationKeyDown(e) {\n    const { key } = e;\n    if (!this.pills.length || key !== KeyCode2.LEFT && key !== KeyCode2.RIGHT) {\n      return;\n    }\n    e.preventDefault();\n    const activeEl = _getActiveDomElement(this.gos);\n    const eGui = this.getGui();\n    const { params, focusService } = this;\n    if (eGui.contains(activeEl)) {\n      const nextFocusableEl = focusService.findNextFocusableElement(eGui, false, key === KeyCode2.LEFT);\n      if (nextFocusableEl) {\n        nextFocusableEl.focus();\n      } else if (params.eWrapper) {\n        params.eWrapper.focus();\n      }\n    } else {\n      const focusableElements = focusService.findFocusableElements(eGui);\n      if (focusableElements.length > 0) {\n        focusableElements[key === KeyCode2.RIGHT ? 0 : focusableElements.length - 1].focus();\n      }\n    }\n  }\n  clearPills() {\n    const eGui = this.getGui();\n    if (eGui.contains(_getActiveDomElement(this.gos)) && this.params.eWrapper) {\n      this.params.eWrapper.focus();\n    }\n    _clearElement(eGui);\n    this.destroyBeans(this.pills);\n    this.pills = [];\n  }\n  onPillButtonClick(pill) {\n    this.deletePill(pill);\n  }\n  onPillKeyDown(e) {\n    const key = e.key;\n    if (key !== KeyCode2.DELETE && key !== KeyCode2.BACKSPACE) {\n      return;\n    }\n    e.preventDefault();\n    const eDoc = _getDocument2(this.gos);\n    const pillIndex = this.pills.findIndex((pill2) => pill2.getGui().contains(eDoc.activeElement));\n    if (pillIndex === -1) {\n      return;\n    }\n    const pill = this.pills[pillIndex];\n    if (pill) {\n      this.deletePill(pill, pillIndex);\n    }\n  }\n  deletePill(pill, restoreFocusToIndex) {\n    const value = pill.getText();\n    const values = (this.params.getValue() || []).filter((val) => val !== value);\n    this.params.setValue(values);\n    if (!values.length && this.params.eWrapper) {\n      this.params.eWrapper.focus();\n    } else if (restoreFocusToIndex != null) {\n      const pill2 = this.pills[Math.min(restoreFocusToIndex, this.pills.length - 1)];\n      if (pill2) {\n        pill2.getFocusableElement().focus();\n      }\n    }\n  }\n  destroy() {\n    this.clearPills();\n    super.destroy();\n  }\n};\n\n// enterprise-modules/core/src/widgets/agRichSelectList.ts\nimport {\n  KeyCode as KeyCode4,\n  _getDocument as _getDocument4,\n  _setAriaActiveDescendant,\n  _setAriaControls,\n  _setAriaLabel as _setAriaLabel2\n} from \"ag-grid-community\";\n\n// enterprise-modules/core/src/widgets/agRichSelectRow.ts\nimport {\n  Component as Component6,\n  _bindCellRendererToHtmlElement,\n  _escapeString,\n  _exists,\n  _getDocument as _getDocument3,\n  _setAriaSelected\n} from \"ag-grid-community\";\nvar RichSelectRow = class extends Component6 {\n  constructor(params) {\n    super(\n      /* html */\n      `<div class=\"ag-rich-select-row\" role=\"presentation\"></div>`\n    );\n    this.params = params;\n  }\n  wireBeans(beans) {\n    this.userComponentFactory = beans.userComponentFactory;\n  }\n  setState(value) {\n    let formattedValue = \"\";\n    const { params } = this;\n    if (params.valueFormatter) {\n      formattedValue = params.valueFormatter(value);\n    }\n    const rendererSuccessful = this.populateWithRenderer(value, formattedValue);\n    if (!rendererSuccessful) {\n      this.populateWithoutRenderer(value, formattedValue);\n    }\n    this.value = value;\n  }\n  highlightString(matchString) {\n    const { parsedValue } = this;\n    if (this.params.cellRenderer || !_exists(parsedValue)) {\n      return;\n    }\n    let hasMatch = _exists(matchString);\n    if (hasMatch) {\n      const index = parsedValue?.toLocaleLowerCase().indexOf(matchString.toLocaleLowerCase());\n      if (index >= 0) {\n        const highlightEndIndex = index + matchString.length;\n        const startPart = _escapeString(parsedValue.slice(0, index), true);\n        const highlightedPart = _escapeString(parsedValue.slice(index, highlightEndIndex), true);\n        const endPart = _escapeString(parsedValue.slice(highlightEndIndex));\n        this.renderValueWithoutRenderer(\n          /* html */\n          `${startPart}<span class=\"ag-rich-select-row-text-highlight\">${highlightedPart}</span>${endPart}`\n        );\n      } else {\n        hasMatch = false;\n      }\n    }\n    if (!hasMatch) {\n      this.renderValueWithoutRenderer(parsedValue);\n    }\n  }\n  updateSelected(selected) {\n    const eGui = this.getGui();\n    _setAriaSelected(eGui.parentElement, selected);\n    this.addOrRemoveCssClass(\"ag-rich-select-row-selected\", selected);\n  }\n  getValue() {\n    return this.value;\n  }\n  toggleHighlighted(highlighted) {\n    this.addOrRemoveCssClass(\"ag-rich-select-row-highlighted\", highlighted);\n  }\n  populateWithoutRenderer(value, valueFormatted) {\n    const eDocument = _getDocument3(this.gos);\n    const eGui = this.getGui();\n    const span = eDocument.createElement(\"span\");\n    span.style.overflow = \"hidden\";\n    span.style.textOverflow = \"ellipsis\";\n    const parsedValue = _escapeString(_exists(valueFormatted) ? valueFormatted : value, true);\n    this.parsedValue = _exists(parsedValue) ? parsedValue : null;\n    eGui.appendChild(span);\n    this.renderValueWithoutRenderer(parsedValue);\n    this.setTooltip({\n      newTooltipText: this.parsedValue,\n      shouldDisplayTooltip: () => span.scrollWidth > span.clientWidth\n    });\n  }\n  renderValueWithoutRenderer(value) {\n    const span = this.getGui().querySelector(\"span\");\n    if (!span) {\n      return;\n    }\n    span.innerHTML = _exists(value) ? value : \"&nbsp;\";\n  }\n  populateWithRenderer(value, valueFormatted) {\n    let cellRendererPromise;\n    let userCompDetails;\n    if (this.params.cellRenderer) {\n      const richSelect = this.getParentComponent()?.getParentComponent();\n      userCompDetails = this.userComponentFactory.getEditorRendererDetails(this.params, {\n        value,\n        valueFormatted,\n        getValue: () => richSelect?.getValue(),\n        setValue: (value2) => {\n          richSelect?.setValue(value2, true);\n        },\n        setTooltip: (value2, shouldDisplayTooltip) => {\n          this.setTooltip({ newTooltipText: value2, shouldDisplayTooltip });\n        }\n      });\n    }\n    if (userCompDetails) {\n      cellRendererPromise = userCompDetails.newAgStackInstance();\n    }\n    if (cellRendererPromise) {\n      _bindCellRendererToHtmlElement(cellRendererPromise, this.getGui());\n    }\n    if (cellRendererPromise) {\n      cellRendererPromise.then((childComponent) => {\n        this.addDestroyFunc(() => {\n          this.destroyBean(childComponent);\n        });\n      });\n      return true;\n    }\n    return false;\n  }\n};\n\n// enterprise-modules/core/src/widgets/virtualList.ts\nimport {\n  KeyCode as KeyCode3,\n  RefPlaceholder as RefPlaceholder4,\n  TabGuardComp,\n  _getAriaPosInSet,\n  _setAriaLabel,\n  _setAriaPosInSet as _setAriaPosInSet2,\n  _setAriaRole,\n  _setAriaSetSize as _setAriaSetSize2,\n  _stopPropagationForAgGrid,\n  _waitUntil,\n  _warnOnce as _warnOnce2\n} from \"ag-grid-community\";\nfunction getVirtualListTemplate(cssIdentifier) {\n  return (\n    /* html */\n    `<div class=\"ag-virtual-list-viewport ag-${cssIdentifier}-virtual-list-viewport\" role=\"presentation\">\n            <div class=\"ag-virtual-list-container ag-${cssIdentifier}-virtual-list-container\" data-ref=\"eContainer\"></div>\n        </div>`\n  );\n}\nvar VirtualList = class extends TabGuardComp {\n  constructor(params) {\n    super(getVirtualListTemplate(params?.cssIdentifier || \"default\"));\n    this.renderedRows = /* @__PURE__ */ new Map();\n    this.rowHeight = 20;\n    this.pageSize = -1;\n    this.isScrolling = false;\n    this.isHeightFromTheme = true;\n    this.eContainer = RefPlaceholder4;\n    this.awaitStableCallbacks = [];\n    const { cssIdentifier = \"default\", ariaRole = \"listbox\", listName } = params || {};\n    this.cssIdentifier = cssIdentifier;\n    this.ariaRole = ariaRole;\n    this.listName = listName;\n  }\n  wireBeans(beans) {\n    this.resizeObserverService = beans.resizeObserverService;\n    this.animationFrameService = beans.animationFrameService;\n    this.environment = beans.environment;\n  }\n  postConstruct() {\n    this.addScrollListener();\n    this.rowHeight = this.getItemHeight();\n    this.addResizeObserver();\n    this.initialiseTabGuard({\n      onFocusIn: (e) => this.onFocusIn(e),\n      onFocusOut: (e) => this.onFocusOut(e),\n      focusInnerElement: (fromBottom) => this.focusInnerElement(fromBottom),\n      onTabKeyDown: (e) => this.onTabKeyDown(e),\n      handleKeyDown: (e) => this.handleKeyDown(e)\n    });\n    this.setAriaProperties();\n    this.addManagedEventListeners({ gridStylesChanged: this.onGridStylesChanged.bind(this) });\n  }\n  onGridStylesChanged(e) {\n    if (e.listItemHeightChanged) {\n      this.rowHeight = this.getItemHeight();\n      this.refresh();\n    }\n  }\n  setAriaProperties() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const listName = translate(\"ariaDefaultListName\", this.listName || \"List\");\n    const ariaEl = this.eContainer;\n    _setAriaRole(ariaEl, this.ariaRole);\n    _setAriaLabel(ariaEl, listName);\n  }\n  addResizeObserver() {\n    const listener = () => this.animationFrameService.requestAnimationFrame(() => this.drawVirtualRows());\n    const destroyObserver = this.resizeObserverService.observeResize(this.getGui(), listener);\n    this.addDestroyFunc(destroyObserver);\n  }\n  focusInnerElement(fromBottom) {\n    this.focusRow(fromBottom ? this.model.getRowCount() - 1 : 0);\n  }\n  onFocusIn(e) {\n    const target = e.target;\n    if (target.classList.contains(\"ag-virtual-list-item\")) {\n      this.lastFocusedRowIndex = _getAriaPosInSet(target) - 1;\n    }\n  }\n  onFocusOut(e) {\n    if (!this.getFocusableElement().contains(e.relatedTarget)) {\n      this.lastFocusedRowIndex = null;\n    }\n  }\n  handleKeyDown(e) {\n    switch (e.key) {\n      case KeyCode3.UP:\n      case KeyCode3.DOWN:\n        if (this.navigate(e.key === KeyCode3.UP)) {\n          e.preventDefault();\n        }\n        break;\n      case KeyCode3.PAGE_HOME:\n      case KeyCode3.PAGE_END:\n      case KeyCode3.PAGE_UP:\n      case KeyCode3.PAGE_DOWN:\n        if (this.navigateToPage(e.key) !== null) {\n          e.preventDefault();\n        }\n        break;\n    }\n  }\n  onTabKeyDown(e) {\n    _stopPropagationForAgGrid(e);\n    this.forceFocusOutOfContainer(e.shiftKey);\n  }\n  navigate(up) {\n    if (this.lastFocusedRowIndex == null) {\n      return false;\n    }\n    const nextRow = this.lastFocusedRowIndex + (up ? -1 : 1);\n    if (nextRow < 0 || nextRow >= this.model.getRowCount()) {\n      return false;\n    }\n    this.focusRow(nextRow);\n    return true;\n  }\n  navigateToPage(key, fromItem = \"focused\") {\n    let hasFocus = false;\n    if (fromItem === \"focused\") {\n      fromItem = this.getLastFocusedRow();\n      hasFocus = true;\n    }\n    const rowCount = this.model.getRowCount() - 1;\n    let newIndex = -1;\n    if (key === KeyCode3.PAGE_HOME) {\n      newIndex = 0;\n    } else if (key === KeyCode3.PAGE_END) {\n      newIndex = rowCount;\n    } else if (key === KeyCode3.PAGE_DOWN) {\n      newIndex = Math.min(fromItem + this.pageSize, rowCount);\n    } else if (key === KeyCode3.PAGE_UP) {\n      newIndex = Math.max(fromItem - this.pageSize, 0);\n    }\n    if (newIndex === -1) {\n      return null;\n    }\n    if (hasFocus) {\n      this.focusRow(newIndex);\n    } else {\n      this.ensureIndexVisible(newIndex);\n    }\n    return newIndex;\n  }\n  getLastFocusedRow() {\n    return this.lastFocusedRowIndex;\n  }\n  focusRow(rowNumber) {\n    if (this.isScrolling) {\n      return;\n    }\n    this.isScrolling = true;\n    this.ensureIndexVisible(rowNumber);\n    this.animationFrameService.requestAnimationFrame(() => {\n      this.isScrolling = false;\n      if (!this.isAlive()) {\n        return;\n      }\n      const renderedRow = this.renderedRows.get(rowNumber);\n      if (renderedRow) {\n        renderedRow.eDiv.focus();\n      }\n    });\n  }\n  getComponentAt(rowIndex) {\n    const comp = this.renderedRows.get(rowIndex);\n    return comp && comp.rowComponent;\n  }\n  forEachRenderedRow(func) {\n    this.renderedRows.forEach((value, key) => func(value.rowComponent, key));\n  }\n  getItemHeight() {\n    if (!this.isHeightFromTheme) {\n      return this.rowHeight;\n    }\n    return this.environment.getDefaultListItemHeight();\n  }\n  /**\n   * Returns true if the view had to be scrolled, otherwise, false.\n   */\n  ensureIndexVisible(index, scrollPartialIntoView = true) {\n    const lastRow = this.model.getRowCount();\n    if (typeof index !== \"number\" || index < 0 || index >= lastRow) {\n      _warnOnce2(\"invalid row index for ensureIndexVisible: \", index);\n      return false;\n    }\n    const rowTopPixel = index * this.rowHeight;\n    const rowBottomPixel = rowTopPixel + this.rowHeight;\n    const eGui = this.getGui();\n    const viewportTopPixel = eGui.scrollTop;\n    const viewportHeight = eGui.offsetHeight;\n    const viewportBottomPixel = viewportTopPixel + viewportHeight;\n    const diff = scrollPartialIntoView ? 0 : this.rowHeight;\n    const viewportScrolledPastRow = viewportTopPixel > rowTopPixel + diff;\n    const viewportScrolledBeforeRow = viewportBottomPixel < rowBottomPixel - diff;\n    if (viewportScrolledPastRow) {\n      eGui.scrollTop = rowTopPixel;\n      return true;\n    }\n    if (viewportScrolledBeforeRow) {\n      const newScrollPosition = rowBottomPixel - viewportHeight;\n      eGui.scrollTop = newScrollPosition;\n      return true;\n    }\n    return false;\n  }\n  setComponentCreator(componentCreator) {\n    this.componentCreator = componentCreator;\n  }\n  setComponentUpdater(componentUpdater) {\n    this.componentUpdater = componentUpdater;\n  }\n  getRowHeight() {\n    return this.rowHeight;\n  }\n  getScrollTop() {\n    return this.getGui().scrollTop;\n  }\n  setRowHeight(rowHeight) {\n    this.isHeightFromTheme = false;\n    this.rowHeight = rowHeight;\n    this.refresh();\n  }\n  refresh(softRefresh) {\n    if (this.model == null || !this.isAlive()) {\n      return;\n    }\n    const rowCount = this.model.getRowCount();\n    this.eContainer.style.height = `${rowCount * this.rowHeight}px`;\n    this.awaitStable(() => {\n      if (!this.isAlive()) {\n        return;\n      }\n      if (this.canSoftRefresh(softRefresh)) {\n        this.drawVirtualRows(true);\n      } else {\n        this.clearVirtualRows();\n        this.drawVirtualRows();\n      }\n    });\n  }\n  awaitStable(callback) {\n    this.awaitStableCallbacks.push(callback);\n    if (this.awaitStableCallbacks.length > 1) {\n      return;\n    }\n    const rowCount = this.model.getRowCount();\n    _waitUntil(\n      () => this.eContainer.clientHeight >= rowCount * this.rowHeight,\n      () => {\n        const callbacks = this.awaitStableCallbacks;\n        this.awaitStableCallbacks = [];\n        callbacks.forEach((c) => c());\n      }\n    );\n  }\n  canSoftRefresh(softRefresh) {\n    return !!(softRefresh && this.renderedRows.size && typeof this.model.areRowsEqual === \"function\" && this.componentUpdater);\n  }\n  clearVirtualRows() {\n    this.renderedRows.forEach((_, rowIndex) => this.removeRow(rowIndex));\n  }\n  drawVirtualRows(softRefresh) {\n    if (!this.isAlive() || !this.model) {\n      return;\n    }\n    const gui = this.getGui();\n    const topPixel = gui.scrollTop;\n    const bottomPixel = topPixel + gui.offsetHeight;\n    const firstRow = Math.floor(topPixel / this.rowHeight);\n    const lastRow = Math.floor(bottomPixel / this.rowHeight);\n    this.pageSize = Math.floor((bottomPixel - topPixel) / this.rowHeight);\n    this.ensureRowsRendered(firstRow, lastRow, softRefresh);\n  }\n  ensureRowsRendered(start, finish, softRefresh) {\n    this.renderedRows.forEach((_, rowIndex) => {\n      if ((rowIndex < start || rowIndex > finish) && rowIndex !== this.lastFocusedRowIndex) {\n        this.removeRow(rowIndex);\n      }\n    });\n    if (softRefresh) {\n      this.refreshRows();\n    }\n    for (let rowIndex = start; rowIndex <= finish; rowIndex++) {\n      if (this.renderedRows.has(rowIndex)) {\n        continue;\n      }\n      if (rowIndex < this.model.getRowCount()) {\n        this.insertRow(rowIndex);\n      }\n    }\n  }\n  insertRow(rowIndex) {\n    const value = this.model.getRow(rowIndex);\n    const eDiv = document.createElement(\"div\");\n    eDiv.classList.add(\"ag-virtual-list-item\", `ag-${this.cssIdentifier}-virtual-list-item`);\n    _setAriaRole(eDiv, this.ariaRole === \"tree\" ? \"treeitem\" : \"option\");\n    _setAriaSetSize2(eDiv, this.model.getRowCount());\n    _setAriaPosInSet2(eDiv, rowIndex + 1);\n    eDiv.setAttribute(\"tabindex\", \"-1\");\n    eDiv.style.height = `${this.rowHeight}px`;\n    eDiv.style.top = `${this.rowHeight * rowIndex}px`;\n    const rowComponent = this.componentCreator(value, eDiv);\n    rowComponent.addGuiEventListener(\"focusin\", () => this.lastFocusedRowIndex = rowIndex);\n    eDiv.appendChild(rowComponent.getGui());\n    if (this.renderedRows.has(rowIndex - 1)) {\n      this.renderedRows.get(rowIndex - 1).eDiv.insertAdjacentElement(\"afterend\", eDiv);\n    } else if (this.renderedRows.has(rowIndex + 1)) {\n      this.renderedRows.get(rowIndex + 1).eDiv.insertAdjacentElement(\"beforebegin\", eDiv);\n    } else {\n      this.eContainer.appendChild(eDiv);\n    }\n    this.renderedRows.set(rowIndex, { rowComponent, eDiv, value });\n  }\n  removeRow(rowIndex) {\n    const component = this.renderedRows.get(rowIndex);\n    this.eContainer.removeChild(component.eDiv);\n    this.destroyBean(component.rowComponent);\n    this.renderedRows.delete(rowIndex);\n  }\n  refreshRows() {\n    const rowCount = this.model.getRowCount();\n    this.renderedRows.forEach((row, rowIndex) => {\n      if (rowIndex >= rowCount) {\n        this.removeRow(rowIndex);\n      } else {\n        const newValue = this.model.getRow(rowIndex);\n        if (this.model.areRowsEqual?.(row.value, newValue)) {\n          this.componentUpdater(newValue, row.rowComponent);\n        } else {\n          this.removeRow(rowIndex);\n        }\n      }\n    });\n  }\n  addScrollListener() {\n    this.addGuiEventListener(\"scroll\", () => this.drawVirtualRows(), { passive: true });\n  }\n  setModel(model) {\n    this.model = model;\n  }\n  getAriaElement() {\n    return this.eContainer;\n  }\n  destroy() {\n    if (!this.isAlive()) {\n      return;\n    }\n    this.clearVirtualRows();\n    this.awaitStableCallbacks.length = 0;\n    super.destroy();\n  }\n};\n\n// enterprise-modules/core/src/widgets/agRichSelectList.ts\nvar LIST_COMPONENT_NAME = \"ag-rich-select-list\";\nvar ROW_COMPONENT_NAME = \"ag-rich-select-row\";\nvar AgRichSelectList = class extends VirtualList {\n  constructor(params, richSelectWrapper, getSearchString2) {\n    super({ cssIdentifier: \"rich-select\" });\n    this.params = params;\n    this.richSelectWrapper = richSelectWrapper;\n    this.getSearchString = getSearchString2;\n    this.lastRowHovered = -1;\n    this.selectedItems = /* @__PURE__ */ new Set();\n    this.params = params;\n    this.setComponentCreator(this.createRowComponent.bind(this));\n    this.setComponentUpdater(() => {\n    });\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.createLoadingElement();\n    const { cellRowHeight, pickerAriaLabelKey, pickerAriaLabelValue } = this.params;\n    if (cellRowHeight) {\n      this.setRowHeight(cellRowHeight);\n    }\n    const eGui = this.getGui();\n    const eListAriaEl = this.getAriaElement();\n    this.addManagedListeners(eGui, {\n      mousemove: this.onMouseMove.bind(this),\n      mouseout: this.onMouseOut.bind(this),\n      mousedown: this.onMouseDown.bind(this),\n      click: this.onClick.bind(this)\n    });\n    eGui.classList.add(LIST_COMPONENT_NAME);\n    const listId = `${LIST_COMPONENT_NAME}-${this.getCompId()}`;\n    eListAriaEl.setAttribute(\"id\", listId);\n    const translate = this.localeService.getLocaleTextFunc();\n    const ariaLabel = translate(pickerAriaLabelKey, pickerAriaLabelValue);\n    _setAriaLabel2(eListAriaEl, ariaLabel);\n    _setAriaControls(this.richSelectWrapper, eListAriaEl);\n  }\n  navigateToPage(key) {\n    const newIndex = super.navigateToPage(key, this.lastRowHovered);\n    if (newIndex != null) {\n      this.animationFrameService.requestAnimationFrame(() => {\n        if (!this.isAlive()) {\n          return null;\n        }\n        this.highlightIndex(newIndex);\n      });\n    }\n    return newIndex;\n  }\n  drawVirtualRows(softRefresh) {\n    super.drawVirtualRows(softRefresh);\n    this.refreshSelectedItems();\n  }\n  highlightFilterMatch(searchString) {\n    this.forEachRenderedRow((cmp) => {\n      cmp.highlightString(searchString);\n    });\n  }\n  onNavigationKeyDown(key, announceItem) {\n    this.animationFrameService.requestAnimationFrame(() => {\n      if (!this.currentList || !this.isAlive()) {\n        return;\n      }\n      const len = this.currentList.length;\n      const oldIndex = this.lastRowHovered;\n      const diff = key === KeyCode4.DOWN ? 1 : -1;\n      const newIndex = Math.min(Math.max(oldIndex === -1 ? 0 : oldIndex + diff, 0), len - 1);\n      this.highlightIndex(newIndex);\n      announceItem();\n    });\n  }\n  selectValue(value) {\n    if (!this.currentList) {\n      if (this.eLoading) {\n        this.appendChild(this.eLoading);\n      }\n      return false;\n    }\n    if (this.eLoading?.offsetParent) {\n      this.eLoading.parentElement?.removeChild(this.eLoading);\n    }\n    if (value == null) {\n      return false;\n    }\n    const selectedPositions = this.getIndicesForValues(value);\n    const refresh = selectedPositions.length > 0;\n    if (refresh) {\n      this.refresh();\n      this.ensureIndexVisible(selectedPositions[0]);\n      this.refresh(true);\n    }\n    this.selectListItems(Array.isArray(value) ? value : [value]);\n    return refresh;\n  }\n  selectListItems(values, append = false) {\n    if (!append) {\n      this.selectedItems.clear();\n    }\n    for (let i = 0; i < values.length; i++) {\n      const currentItem = values[i];\n      if (this.selectedItems.has(currentItem)) {\n        continue;\n      }\n      this.selectedItems.add(currentItem);\n    }\n    this.refreshSelectedItems();\n  }\n  getCurrentList() {\n    return this.currentList;\n  }\n  setCurrentList(list) {\n    this.currentList = list;\n    this.setModel({\n      getRowCount: () => list.length,\n      getRow: (index) => list[index],\n      areRowsEqual: (oldRow, newRow) => oldRow === newRow\n    });\n  }\n  getSelectedItems() {\n    return this.selectedItems;\n  }\n  getLastItemHovered() {\n    return this.currentList[this.lastRowHovered];\n  }\n  highlightIndex(index, preventUnnecessaryScroll) {\n    if (!this.currentList) {\n      return;\n    }\n    if (index < 0 || index >= this.currentList.length) {\n      this.lastRowHovered = -1;\n    } else {\n      this.lastRowHovered = index;\n      const wasScrolled = this.ensureIndexVisible(index, !preventUnnecessaryScroll);\n      if (wasScrolled && !preventUnnecessaryScroll) {\n        this.refresh(true);\n      }\n    }\n    this.forEachRenderedRow((cmp, idx) => {\n      const highlighted = index === idx;\n      cmp.toggleHighlighted(highlighted);\n      if (highlighted) {\n        const idForParent = `${ROW_COMPONENT_NAME}-${cmp.getCompId()}`;\n        _setAriaActiveDescendant(this.richSelectWrapper, idForParent);\n        this.richSelectWrapper.setAttribute(\"data-active-option\", idForParent);\n      }\n    });\n  }\n  getIndicesForValues(values) {\n    const { currentList } = this;\n    if (!currentList || currentList.length === 0 || values == null) {\n      return [];\n    }\n    if (!Array.isArray(values)) {\n      values = [values];\n    }\n    if (values.length === 0) {\n      return [];\n    }\n    const positions = [];\n    for (let i = 0; i < values.length; i++) {\n      const idx = currentList.indexOf(values[i]);\n      if (idx >= 0) {\n        positions.push(idx);\n      }\n    }\n    return positions;\n  }\n  toggleListItemSelection(value) {\n    if (this.selectedItems.has(value)) {\n      this.selectedItems.delete(value);\n    } else {\n      this.selectedItems.add(value);\n    }\n    this.refreshSelectedItems();\n    this.dispatchValueSelected();\n  }\n  refreshSelectedItems() {\n    this.forEachRenderedRow((cmp) => {\n      const selected = this.selectedItems.has(cmp.getValue());\n      cmp.updateSelected(selected);\n    });\n  }\n  createLoadingElement() {\n    const eDocument = _getDocument4(this.gos);\n    const translate = this.localeService.getLocaleTextFunc();\n    const el = eDocument.createElement(\"div\");\n    el.classList.add(\"ag-loading-text\");\n    el.innerText = translate(\"loadingOoo\", \"Loading...\");\n    this.eLoading = el;\n  }\n  createRowComponent(value, listItemElement) {\n    const row = new RichSelectRow(this.params);\n    listItemElement.setAttribute(\"id\", `${ROW_COMPONENT_NAME}-${row.getCompId()}`);\n    row.setParentComponent(this);\n    this.createBean(row);\n    row.setState(value);\n    const { highlightMatch, searchType = \"fuzzy\" } = this.params;\n    if (highlightMatch && searchType !== \"fuzzy\") {\n      row.highlightString(this.getSearchString());\n    }\n    return row;\n  }\n  getRowForMouseEvent(e) {\n    const eGui = this.getGui();\n    const rect = eGui.getBoundingClientRect();\n    const scrollTop = this.getScrollTop();\n    const mouseY = e.clientY - rect.top + scrollTop;\n    return Math.floor(mouseY / this.getRowHeight());\n  }\n  onMouseMove(e) {\n    const row = this.getRowForMouseEvent(e);\n    if (row !== -1 && row != this.lastRowHovered) {\n      this.lastRowHovered = row;\n      this.highlightIndex(row, true);\n    }\n  }\n  onMouseDown(e) {\n    e.preventDefault();\n  }\n  onMouseOut(e) {\n    if (!this.getGui().contains(e.relatedTarget)) {\n      this.highlightIndex(-1);\n    }\n  }\n  onClick(e) {\n    const { multiSelect } = this.params;\n    if (!this.currentList) {\n      return;\n    }\n    const row = this.getRowForMouseEvent(e);\n    const item = this.currentList[row];\n    if (multiSelect) {\n      this.toggleListItemSelection(item);\n    } else {\n      this.selectListItems([item]);\n      this.dispatchValueSelected();\n    }\n  }\n  dispatchValueSelected() {\n    this.dispatchLocalEvent({\n      type: \"richSelectListRowSelected\",\n      fromEnterKey: false,\n      value: this.selectedItems\n    });\n  }\n  destroy() {\n    super.destroy();\n    this.eLoading = void 0;\n  }\n};\n\n// enterprise-modules/core/src/widgets/agRichSelect.ts\nvar AgRichSelect = class extends AgPickerField {\n  constructor(config) {\n    super({\n      pickerAriaLabelKey: \"ariaLabelRichSelectField\",\n      pickerAriaLabelValue: \"Rich Select Field\",\n      pickerType: \"ag-list\",\n      className: \"ag-rich-select\",\n      pickerIcon: \"smallDown\",\n      ariaRole: \"combobox\",\n      template: config?.template ?? /* html */\n      `\n            <div class=\"ag-picker-field\" role=\"presentation\">\n                <div data-ref=\"eLabel\"></div>\n                <div data-ref=\"eWrapper\" class=\"ag-wrapper ag-picker-field-wrapper ag-rich-select-value ag-picker-collapsed\">\n                    <span data-ref=\"eDisplayField\" class=\"ag-picker-field-display\"></span>\n                    <ag-input-text-field data-ref=\"eInput\" class=\"ag-rich-select-field-input\"></ag-input-text-field>\n                    <span data-ref=\"eDeselect\" class=\"ag-rich-select-deselect-button ag-picker-field-icon\" role=\"presentation\"></span>\n                    <span data-ref=\"eIcon\" class=\"ag-picker-field-icon\" aria-hidden=\"true\"></span>\n                </div>\n            </div>`,\n      agComponents: [AgInputTextFieldSelector],\n      modalPicker: false,\n      ...config,\n      // maxPickerHeight needs to be set after expanding `config`\n      maxPickerHeight: config?.maxPickerHeight ?? \"calc(var(--ag-row-height) * 6.5)\"\n    });\n    this.searchString = \"\";\n    this.searchStringCreator = null;\n    this.eInput = RefPlaceholder5;\n    this.eDeselect = RefPlaceholder5;\n    this.skipWrapperAnnouncement = false;\n    const { value, valueList, searchStringCreator } = config || {};\n    if (value !== void 0) {\n      this.value = value;\n    }\n    if (valueList != null) {\n      this.values = valueList;\n    }\n    if (searchStringCreator) {\n      this.searchStringCreator = searchStringCreator;\n    }\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.userComponentFactory = beans.userComponentFactory;\n    this.ariaAnnouncementService = beans.ariaAnnouncementService;\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.createListComponent();\n    this.eDeselect.appendChild(_createIconNoSpan2(\"cancel\", this.gos));\n    const { allowTyping, placeholder, suppressDeselectAll } = this.config;\n    this.eDeselect.classList.add(\"ag-hidden\");\n    if (allowTyping) {\n      this.eInput.setAutoComplete(false).setInputPlaceholder(placeholder);\n      this.eDisplayField.classList.add(\"ag-hidden\");\n    } else {\n      this.eInput.setDisplayed(false);\n    }\n    this.setupAriaProperties();\n    const { searchDebounceDelay = 300 } = this.config;\n    this.clearSearchString = _debounce(this.clearSearchString, searchDebounceDelay);\n    this.renderSelectedValue();\n    if (allowTyping) {\n      this.eInput.onValueChange((value) => this.searchTextFromString(value));\n    }\n    this.addManagedElementListeners(this.eWrapper, { focus: this.onWrapperFocus.bind(this) });\n    this.addManagedElementListeners(this.eWrapper, { focusout: this.onWrapperFocusOut.bind(this) });\n    if (!suppressDeselectAll) {\n      this.addManagedElementListeners(this.eDeselect, {\n        mousedown: this.onDeselectAllMouseDown.bind(this),\n        click: this.onDeselectAllClick.bind(this)\n      });\n    }\n  }\n  setupAriaProperties() {\n    const { eWrapper, gos, localeService } = this;\n    eWrapper.tabIndex = gos.get(\"tabIndex\");\n    const translate = localeService.getLocaleTextFunc();\n    this.ariaDeleteSelection = translate(\"ariaLabelRichSelectDeleteSelection\", \"Press DELETE to deselect item\");\n    this.ariaDeselectAllItems = translate(\n      \"ariaLabelRichSelectDeselectAllItems\",\n      \"Press DELETE to deselect all items\"\n    );\n    this.ariaToggleSelection = translate(\"ariaLabelRichSelectToggleSelection\", \"Press SPACE to toggle selection\");\n  }\n  createListComponent() {\n    this.listComponent = this.createBean(new AgRichSelectList(this.config, this.eWrapper, () => this.searchString));\n    this.listComponent.setParentComponent(this);\n    this.addManagedListeners(this.listComponent, {\n      richSelectListRowSelected: (e) => {\n        this.onListValueSelected(e.value, e.fromEnterKey);\n      }\n    });\n  }\n  renderSelectedValue() {\n    const { value, eDisplayField, config } = this;\n    const {\n      allowTyping,\n      cellRenderer,\n      initialInputValue,\n      multiSelect,\n      suppressDeselectAll,\n      suppressMultiSelectPillRenderer\n    } = config;\n    const valueFormatted = this.config.valueFormatter ? this.config.valueFormatter(value) : value;\n    if (allowTyping) {\n      this.eInput.setValue(initialInputValue ?? valueFormatted);\n      return;\n    }\n    if (multiSelect && !suppressDeselectAll) {\n      const isEmpty = value == null || Array.isArray(value) && value.length === 0;\n      this.eDeselect.classList.toggle(\"ag-hidden\", isEmpty);\n    }\n    let userCompDetails;\n    if (multiSelect && !suppressMultiSelectPillRenderer) {\n      this.createOrUpdatePillContainer(eDisplayField);\n      return;\n    }\n    if (cellRenderer) {\n      userCompDetails = this.userComponentFactory.getEditorRendererDetails(config, {\n        value,\n        valueFormatted,\n        getValue: () => this.getValue(),\n        setValue: (value2) => {\n          this.setValue(value2, true);\n        },\n        setTooltip: (value2, shouldDisplayTooltip) => {\n          this.setTooltip({ newTooltipText: value2, shouldDisplayTooltip });\n        }\n      });\n    }\n    let userCompDetailsPromise;\n    if (userCompDetails) {\n      userCompDetailsPromise = userCompDetails.newAgStackInstance();\n    }\n    if (userCompDetailsPromise) {\n      _clearElement2(eDisplayField);\n      _bindCellRendererToHtmlElement2(userCompDetailsPromise, eDisplayField);\n      userCompDetailsPromise.then((renderer) => {\n        this.addDestroyFunc(() => this.destroyBean(renderer));\n      });\n    } else {\n      if (_exists2(this.value)) {\n        eDisplayField.innerText = valueFormatted;\n        eDisplayField.classList.remove(\"ag-display-as-placeholder\");\n      } else {\n        const { placeholder } = config;\n        if (_exists2(placeholder)) {\n          eDisplayField.innerHTML = `${_escapeString2(placeholder)}`;\n          eDisplayField.classList.add(\"ag-display-as-placeholder\");\n        } else {\n          _clearElement2(eDisplayField);\n        }\n      }\n      this.setTooltip({\n        newTooltipText: valueFormatted ?? null,\n        shouldDisplayTooltip: () => this.eDisplayField.scrollWidth > this.eDisplayField.clientWidth\n      });\n    }\n  }\n  createPickerComponent() {\n    const { values } = this;\n    if (values) {\n      this.setValueList({ valueList: values });\n    }\n    return this.listComponent;\n  }\n  setSearchStringCreator(searchStringFn) {\n    this.searchStringCreator = searchStringFn;\n  }\n  setValueList(params) {\n    const { valueList, refresh } = params;\n    if (!this.listComponent || this.listComponent.getCurrentList() === valueList) {\n      return;\n    }\n    this.listComponent.setCurrentList(valueList);\n    if (refresh) {\n      if (!this.values) {\n        this.values = valueList;\n        if (this.isPickerDisplayed) {\n          const hasRefreshed = this.listComponent.selectValue(this.value);\n          if (!hasRefreshed) {\n            this.listComponent.refresh();\n          }\n        }\n      } else {\n        this.listComponent.refresh(true);\n      }\n      this.alignPickerToComponent();\n    }\n  }\n  showPicker() {\n    super.showPicker();\n    const { listComponent, value } = this;\n    if (!listComponent) {\n      return;\n    }\n    let idx = null;\n    if (this.value != null) {\n      listComponent.selectValue(this.value);\n      idx = listComponent.getIndicesForValues(Array.isArray(value) ? value : [value])[0];\n    }\n    if (idx != null) {\n      listComponent.highlightIndex(idx);\n    } else {\n      listComponent.refresh();\n    }\n    this.displayOrHidePicker();\n  }\n  beforeHidePicker() {\n    super.beforeHidePicker();\n  }\n  createOrUpdatePillContainer(container) {\n    if (!this.pillContainer) {\n      const pillContainer = this.pillContainer = this.createBean(new AgPillContainer());\n      this.addDestroyFunc(() => {\n        this.destroyBean(this.pillContainer);\n        this.pillContainer = null;\n      });\n      _clearElement2(container);\n      container.appendChild(pillContainer.getGui());\n      pillContainer.init({\n        eWrapper: this.eWrapper,\n        onPillMouseDown: (e) => {\n          e.stopImmediatePropagation();\n        },\n        announceItemFocus: () => {\n          this.announceAriaValue(this.ariaDeleteSelection);\n        },\n        getValue: () => this.getValue(),\n        setValue: (value) => this.setValue(value, true)\n      });\n    }\n    this.doWhileBlockingAnnouncement(() => this.pillContainer?.refresh());\n  }\n  doWhileBlockingAnnouncement(func) {\n    this.skipWrapperAnnouncement = true;\n    func();\n    this.skipWrapperAnnouncement = false;\n  }\n  onWrapperFocus() {\n    const { eInput, config } = this;\n    const { allowTyping, multiSelect, suppressDeselectAll } = config;\n    if (allowTyping) {\n      const focusableEl = eInput.getFocusableElement();\n      focusableEl.focus();\n      focusableEl.select();\n    } else if (multiSelect && !suppressDeselectAll && !this.skipWrapperAnnouncement) {\n      this.announceAriaValue(this.ariaDeselectAllItems);\n    }\n  }\n  onWrapperFocusOut(e) {\n    if (!this.eWrapper.contains(e.relatedTarget)) {\n      this.hidePicker();\n    }\n  }\n  onDeselectAllMouseDown(e) {\n    e.stopImmediatePropagation();\n  }\n  onDeselectAllClick() {\n    this.setValue([], true);\n  }\n  buildSearchStringFromKeyboardEvent(searchKey) {\n    let { key } = searchKey;\n    if (key === KeyCode5.BACKSPACE) {\n      this.searchString = this.searchString.slice(0, -1);\n      key = \"\";\n    } else if (!_isEventFromPrintableCharacter(searchKey)) {\n      return;\n    }\n    searchKey.preventDefault();\n    this.searchTextFromCharacter(key);\n  }\n  searchTextFromCharacter(char) {\n    this.searchString += char;\n    this.runSearch();\n    this.clearSearchString();\n  }\n  searchTextFromString(str) {\n    if (str == null) {\n      str = \"\";\n    }\n    this.searchString = str;\n    this.runSearch();\n  }\n  buildSearchStrings(values) {\n    const { valueFormatter = (value) => value } = this.config;\n    let searchStrings;\n    if (typeof values[0] === \"number\" || typeof values[0] === \"string\") {\n      searchStrings = values.map((v) => valueFormatter(v));\n    } else if (typeof values[0] === \"object\" && this.searchStringCreator) {\n      searchStrings = this.searchStringCreator(values);\n    }\n    return searchStrings;\n  }\n  filterListModel(filteredValues) {\n    const { filterList } = this.config;\n    if (!filterList) {\n      return;\n    }\n    this.setValueList({ valueList: filteredValues, refresh: true });\n  }\n  runSearch() {\n    if (!this.listComponent) {\n      return;\n    }\n    const { values } = this;\n    const searchStrings = this.buildSearchStrings(values);\n    if (!searchStrings) {\n      this.listComponent.highlightIndex(-1);\n      return;\n    }\n    const { suggestions, filteredValues } = this.getSuggestionsAndFilteredValues(this.searchString, searchStrings);\n    const { filterList, highlightMatch, searchType = \"fuzzy\" } = this.config;\n    const filterValueLen = filteredValues.length;\n    const shouldFilter = !!(filterList && this.searchString !== \"\");\n    this.filterListModel(shouldFilter ? filteredValues : values);\n    if (suggestions.length) {\n      const topSuggestionIndex = shouldFilter ? 0 : searchStrings.indexOf(suggestions[0]);\n      this.listComponent?.highlightIndex(topSuggestionIndex);\n    } else {\n      this.listComponent?.highlightIndex(-1);\n      if (!shouldFilter || filterValueLen) {\n        this.listComponent?.ensureIndexVisible(0);\n      } else if (shouldFilter) {\n        this.getAriaElement().removeAttribute(\"data-active-option\");\n        const eListAriaEl = this.listComponent?.getAriaElement();\n        if (eListAriaEl) {\n          _setAriaActiveDescendant2(eListAriaEl, null);\n        }\n      }\n    }\n    if (highlightMatch && searchType !== \"fuzzy\") {\n      this.listComponent?.highlightFilterMatch(this.searchString);\n    }\n    this.displayOrHidePicker();\n  }\n  getSuggestionsAndFilteredValues(searchValue, valueList) {\n    let suggestions = [];\n    const filteredValues = [];\n    if (!searchValue.length) {\n      return { suggestions, filteredValues };\n    }\n    const { searchType = \"fuzzy\", filterList } = this.config;\n    if (searchType === \"fuzzy\") {\n      const fuzzySearchResult = _fuzzySuggestions({\n        inputValue: searchValue,\n        allSuggestions: valueList,\n        hideIrrelevant: true,\n        addSequentialWeight: true\n      });\n      suggestions = fuzzySearchResult.values;\n      const indices = fuzzySearchResult.indices;\n      if (filterList && indices.length) {\n        for (let i = 0; i < indices.length; i++) {\n          filteredValues.push(this.values[indices[i]]);\n        }\n      }\n    } else {\n      suggestions = valueList.filter((val, idx) => {\n        const currentValue = val.toLocaleLowerCase();\n        const valueToMatch = this.searchString.toLocaleLowerCase();\n        const isMatch = searchType === \"match\" ? currentValue.startsWith(valueToMatch) : currentValue.indexOf(valueToMatch) !== -1;\n        if (filterList && isMatch) {\n          filteredValues.push(this.values[idx]);\n        }\n        return isMatch;\n      });\n    }\n    return { suggestions, filteredValues };\n  }\n  displayOrHidePicker() {\n    if (!this.listComponent) {\n      return;\n    }\n    const eListGui = this.listComponent.getGui();\n    const list = this.listComponent.getCurrentList();\n    const toggleValue = list ? list.length === 0 : false;\n    eListGui.classList.toggle(\"ag-hidden\", toggleValue);\n  }\n  clearSearchString() {\n    this.searchString = \"\";\n  }\n  setValue(value, silent, fromPicker, skipRendering) {\n    if (this.value === value) {\n      return this;\n    }\n    const isArray = Array.isArray(value);\n    if (value != null) {\n      if (!isArray) {\n        const list = this.listComponent?.getCurrentList();\n        const index = list ? list.indexOf(value) : -1;\n        if (index === -1) {\n          return this;\n        }\n      }\n      if (!fromPicker) {\n        this.listComponent?.selectValue(value);\n      }\n    }\n    super.setValue(value, silent);\n    if (!skipRendering) {\n      this.renderSelectedValue();\n    }\n    return this;\n  }\n  onNavigationKeyDown(event, key, announceItem) {\n    event.preventDefault();\n    const isDown = key === KeyCode5.DOWN;\n    if (!this.isPickerDisplayed && isDown) {\n      this.showPicker();\n      return;\n    }\n    this.listComponent?.onNavigationKeyDown(key, announceItem);\n  }\n  onEnterKeyDown(e) {\n    if (!this.isPickerDisplayed) {\n      return;\n    }\n    e.preventDefault();\n    if (this.listComponent?.getCurrentList()) {\n      const lastRowHovered = this.listComponent.getLastItemHovered();\n      if (this.config.multiSelect || !lastRowHovered) {\n        this.dispatchPickerEventAndHidePicker(this.value, true);\n      } else {\n        this.onListValueSelected(/* @__PURE__ */ new Set([lastRowHovered]), true);\n      }\n    }\n  }\n  onDeleteKeyDown(e) {\n    const { eWrapper, gos } = this;\n    const activeEl = _getActiveDomElement2(gos);\n    if (activeEl === eWrapper) {\n      e.preventDefault();\n      this.setValue([], true);\n    }\n  }\n  onTabKeyDown() {\n    const { config, isPickerDisplayed, listComponent } = this;\n    const { multiSelect } = config;\n    if (!isPickerDisplayed || !listComponent) {\n      return;\n    }\n    if (multiSelect) {\n      const values = this.getValueFromSet(listComponent.getSelectedItems());\n      if (values) {\n        this.setValue(values, false, true, true);\n      }\n    } else {\n      this.setValue(listComponent.getLastItemHovered(), false, true);\n    }\n    this.hidePicker();\n  }\n  getValueFromSet(valueSet) {\n    const { multiSelect } = this.config;\n    let newValue = null;\n    for (const value of valueSet) {\n      if (valueSet.size === 1 && !multiSelect) {\n        newValue = value;\n        break;\n      }\n      if (!newValue) {\n        newValue = [];\n      }\n      newValue.push(value);\n    }\n    if (Array.isArray(newValue)) {\n      newValue.sort();\n    }\n    return newValue;\n  }\n  onListValueSelected(valueSet, fromEnterKey) {\n    const newValue = this.getValueFromSet(valueSet);\n    this.setValue(newValue, false, true);\n    if (!this.config.multiSelect) {\n      this.dispatchPickerEventAndHidePicker(newValue, fromEnterKey);\n    }\n  }\n  dispatchPickerEventAndHidePicker(value, fromEnterKey) {\n    const event = {\n      type: \"fieldPickerValueSelected\",\n      fromEnterKey,\n      value\n    };\n    this.dispatchLocalEvent(event);\n    this.hidePicker();\n  }\n  getFocusableElement() {\n    const { allowTyping } = this.config;\n    if (allowTyping) {\n      return this.eInput.getFocusableElement();\n    }\n    return super.getFocusableElement();\n  }\n  onKeyDown(e) {\n    const { key } = e;\n    const { isPickerDisplayed, config, listComponent, pickerComponent } = this;\n    const { allowTyping, multiSelect, suppressDeselectAll } = config;\n    switch (key) {\n      case KeyCode5.LEFT:\n      case KeyCode5.RIGHT:\n        if (!allowTyping || this.pillContainer) {\n          e.preventDefault();\n          if (this.pillContainer) {\n            this.listComponent?.highlightIndex(-1);\n            this.pillContainer.onNavigationKeyDown(e);\n          }\n        }\n        break;\n      case KeyCode5.PAGE_HOME:\n      case KeyCode5.PAGE_END:\n        if (allowTyping) {\n          e.preventDefault();\n          const inputEl = this.eInput.getInputElement();\n          const target = key === KeyCode5.PAGE_HOME ? 0 : inputEl.value.length;\n          inputEl.setSelectionRange(target, target);\n          break;\n        }\n      case KeyCode5.PAGE_UP:\n      case KeyCode5.PAGE_DOWN:\n        e.preventDefault();\n        if (pickerComponent) {\n          listComponent?.navigateToPage(key);\n        }\n        break;\n      case KeyCode5.DOWN:\n      case KeyCode5.UP:\n        this.onNavigationKeyDown(e, key, () => {\n          if (multiSelect) {\n            this.doWhileBlockingAnnouncement(() => this.eWrapper.focus());\n            this.announceAriaValue(this.ariaToggleSelection);\n          }\n        });\n        break;\n      case KeyCode5.ESCAPE:\n        if (isPickerDisplayed) {\n          if (_isVisible(this.listComponent.getGui())) {\n            e.preventDefault();\n            _stopPropagationForAgGrid2(e);\n          }\n          this.hidePicker();\n        }\n        break;\n      case KeyCode5.ENTER:\n        this.onEnterKeyDown(e);\n        break;\n      case KeyCode5.SPACE:\n        if (isPickerDisplayed && multiSelect && listComponent) {\n          e.preventDefault();\n          const lastItemHovered = listComponent.getLastItemHovered();\n          if (lastItemHovered) {\n            listComponent.toggleListItemSelection(lastItemHovered);\n          }\n        }\n        break;\n      case KeyCode5.TAB:\n        this.onTabKeyDown();\n        break;\n      case KeyCode5.DELETE:\n        if (multiSelect && !suppressDeselectAll) {\n          this.onDeleteKeyDown(e);\n        }\n        break;\n      default:\n        if (!allowTyping) {\n          this.buildSearchStringFromKeyboardEvent(e);\n        }\n    }\n  }\n  announceAriaValue(value) {\n    this.ariaAnnouncementService.announceValue(value, \"richSelect\");\n  }\n  destroy() {\n    if (this.listComponent) {\n      this.listComponent = this.destroyBean(this.listComponent);\n    }\n    super.destroy();\n  }\n};\n\n// enterprise-modules/core/src/widgets/pillDragComp.ts\nimport {\n  Component as Component7,\n  KeyCode as KeyCode6,\n  RefPlaceholder as RefPlaceholder6,\n  TouchListener,\n  _createIconNoSpan as _createIconNoSpan3,\n  _escapeString as _escapeString3,\n  _setAriaLabel as _setAriaLabel3,\n  _setDisplayed as _setDisplayed2\n} from \"ag-grid-community\";\nvar PillDragComp = class extends Component7 {\n  constructor(dragSourceDropTarget, ghost, horizontal, template, agComponents) {\n    super();\n    this.dragSourceDropTarget = dragSourceDropTarget;\n    this.ghost = ghost;\n    this.horizontal = horizontal;\n    this.template = template;\n    this.agComponents = agComponents;\n    this.eText = RefPlaceholder6;\n    this.eDragHandle = RefPlaceholder6;\n    this.eButton = RefPlaceholder6;\n  }\n  wireBeans(beans) {\n    this.dragAndDropService = beans.dragAndDropService;\n  }\n  postConstruct() {\n    this.setTemplate(\n      this.template ?? /* html */\n      `\n            <span role=\"option\">\n              <span data-ref=\"eDragHandle\" class=\"ag-drag-handle ag-column-drop-cell-drag-handle\" role=\"presentation\"></span>\n              <span data-ref=\"eText\" class=\"ag-column-drop-cell-text\" aria-hidden=\"true\"></span>\n              <span data-ref=\"eButton\" class=\"ag-column-drop-cell-button\" role=\"presentation\"></span>\n            </span>`,\n      this.agComponents\n    );\n    const eGui = this.getGui();\n    this.addElementClasses(eGui);\n    this.addElementClasses(this.eDragHandle, \"drag-handle\");\n    this.addElementClasses(this.eText, \"text\");\n    this.addElementClasses(this.eButton, \"button\");\n    this.eDragHandle.appendChild(_createIconNoSpan3(\"columnDrag\", this.gos));\n    this.eButton.appendChild(_createIconNoSpan3(\"cancel\", this.gos));\n    this.setupComponents();\n    if (!this.ghost && this.isDraggable()) {\n      this.addDragSource();\n    }\n    this.setupAria();\n    this.setupTooltip();\n    this.activateTabIndex();\n    this.refreshDraggable();\n  }\n  isDraggable() {\n    return true;\n  }\n  refreshDraggable() {\n    this.eDragHandle.classList.toggle(\"ag-column-select-column-readonly\", !this.isDraggable());\n  }\n  setupAria() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const ariaInstructions = [this.getAriaDisplayName()];\n    this.addAdditionalAriaInstructions(ariaInstructions, translate);\n    _setAriaLabel3(this.getGui(), ariaInstructions.join(\". \"));\n  }\n  addAdditionalAriaInstructions(ariaInstructions, translate) {\n    if (this.isRemovable()) {\n      const deleteAria = translate(\"ariaDropZoneColumnComponentDescription\", \"Press DELETE to remove\");\n      ariaInstructions.push(deleteAria);\n    }\n  }\n  setupTooltip() {\n    const refresh = () => {\n      const newTooltipText = this.getTooltip();\n      this.setTooltip({ newTooltipText });\n    };\n    refresh();\n    this.addManagedEventListeners({ newColumnsLoaded: refresh });\n  }\n  getDragSourceId() {\n    return void 0;\n  }\n  getDefaultIconName() {\n    return \"notAllowed\";\n  }\n  addDragSource() {\n    const { dragAndDropService, eDragHandle } = this;\n    const getDragItem = this.createGetDragItem();\n    const defaultIconName = this.getDefaultIconName();\n    const dragSource = {\n      type: this.getDragSourceType(),\n      sourceId: this.getDragSourceId(),\n      eElement: eDragHandle,\n      getDefaultIconName: () => defaultIconName,\n      getDragItem,\n      dragItemName: this.getDisplayName()\n    };\n    dragAndDropService.addDragSource(dragSource, true);\n    this.addDestroyFunc(() => dragAndDropService.removeDragSource(dragSource));\n  }\n  setupComponents() {\n    this.setTextValue();\n    this.setupRemove();\n    if (this.ghost) {\n      this.addCssClass(\"ag-column-drop-cell-ghost\");\n    }\n  }\n  isRemovable() {\n    return true;\n  }\n  refreshRemove() {\n    _setDisplayed2(this.eButton, this.isRemovable());\n  }\n  setupRemove() {\n    this.refreshRemove();\n    const agEvent = { type: \"columnRemove\" };\n    this.addGuiEventListener(\"keydown\", (e) => this.onKeyDown(e));\n    this.addManagedElementListeners(this.eButton, {\n      click: (mouseEvent) => {\n        this.dispatchLocalEvent(agEvent);\n        mouseEvent.stopPropagation();\n      }\n    });\n    const touchListener = new TouchListener(this.eButton);\n    this.addManagedListeners(touchListener, {\n      tap: () => this.dispatchLocalEvent(agEvent)\n    });\n    this.addDestroyFunc(touchListener.destroy.bind(touchListener));\n  }\n  onKeyDown(e) {\n    const isDelete = e.key === KeyCode6.DELETE;\n    if (isDelete) {\n      if (this.isRemovable()) {\n        e.preventDefault();\n        this.dispatchLocalEvent({ type: \"columnRemove\" });\n      }\n    }\n  }\n  getDisplayValue() {\n    return this.getDisplayName();\n  }\n  setTextValue() {\n    const displayValue = this.getDisplayValue();\n    const displayValueSanitised = _escapeString3(displayValue);\n    this.eText.innerHTML = displayValueSanitised;\n  }\n  addElementClasses(el, suffix) {\n    suffix = suffix ? `-${suffix}` : \"\";\n    const direction = this.horizontal ? \"horizontal\" : \"vertical\";\n    el.classList.add(`ag-column-drop-cell${suffix}`, `ag-column-drop-${direction}-cell${suffix}`);\n  }\n  destroy() {\n    super.destroy();\n    this.dragSourceDropTarget = null;\n  }\n};\n\n// enterprise-modules/core/src/widgets/pillDropZonePanel.ts\nimport {\n  Component as Component8,\n  KeyCode as KeyCode7,\n  ManagedFocusFeature,\n  PositionableFeature,\n  _areEqual,\n  _clearElement as _clearElement3,\n  _createIconNoSpan as _createIconNoSpan4,\n  _existsAndNotEmpty,\n  _getActiveDomElement as _getActiveDomElement3,\n  _includes,\n  _insertArrayIntoArray,\n  _last,\n  _setAriaHidden,\n  _setAriaLabel as _setAriaLabel4,\n  _setAriaPosInSet as _setAriaPosInSet3,\n  _setAriaRole as _setAriaRole2,\n  _setAriaSetSize as _setAriaSetSize3\n} from \"ag-grid-community\";\nvar PillDropZonePanel = class extends Component8 {\n  constructor(horizontal) {\n    super(\n      /* html */\n      `<div class=\"ag-unselectable\" role=\"presentation\"></div>`\n    );\n    this.horizontal = horizontal;\n    this.state = \"notDragging\";\n    this.guiDestroyFunctions = [];\n    this.childPillComponents = [];\n    this.resizeEnabled = false;\n    this.addElementClasses(this.getGui());\n    this.ePillDropList = document.createElement(\"div\");\n    this.addElementClasses(this.ePillDropList, \"list\");\n    _setAriaRole2(this.ePillDropList, \"listbox\");\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.dragAndDropService = beans.dragAndDropService;\n  }\n  isHorizontal() {\n    return this.horizontal;\n  }\n  toggleResizable(resizable) {\n    this.positionableFeature.setResizable(resizable ? { bottom: true } : false);\n    this.resizeEnabled = resizable;\n  }\n  isSourceEventFromTarget(draggingEvent) {\n    const { dropZoneTarget, dragSource } = draggingEvent;\n    return dropZoneTarget.contains(dragSource.eElement);\n  }\n  destroy() {\n    this.destroyGui();\n    super.destroy();\n  }\n  destroyGui() {\n    this.guiDestroyFunctions.forEach((func) => func());\n    this.guiDestroyFunctions.length = 0;\n    this.childPillComponents.length = 0;\n    _clearElement3(this.getGui());\n    _clearElement3(this.ePillDropList);\n  }\n  init(params) {\n    this.params = params ?? {};\n    this.createManagedBean(\n      new ManagedFocusFeature(this.getFocusableElement(), {\n        onTabKeyDown: this.onTabKeyDown.bind(this),\n        handleKeyDown: this.onKeyDown.bind(this)\n      })\n    );\n    this.setupDropTarget();\n    this.positionableFeature = new PositionableFeature(this.getGui());\n    this.createManagedBean(this.positionableFeature);\n    this.refreshGui();\n    _setAriaLabel4(this.ePillDropList, this.getAriaLabel());\n  }\n  onTabKeyDown(e) {\n    const focusableElements = this.focusService.findFocusableElements(this.getFocusableElement(), null, true);\n    const len = focusableElements.length;\n    if (len === 0) {\n      return;\n    }\n    const { shiftKey } = e;\n    const activeEl = _getActiveDomElement3(this.gos);\n    const isFirstFocused = activeEl === focusableElements[0];\n    const isLastFocused = activeEl === _last(focusableElements);\n    const shouldAllowDefaultTab = len === 1 || isFirstFocused && shiftKey || isLastFocused && !shiftKey;\n    if (!shouldAllowDefaultTab) {\n      focusableElements[shiftKey ? 0 : len - 1].focus();\n    }\n  }\n  onKeyDown(e) {\n    const { key } = e;\n    const isVertical = !this.horizontal;\n    let isNext = key === KeyCode7.DOWN;\n    let isPrevious = key === KeyCode7.UP;\n    if (!isVertical) {\n      const isRtl = this.gos.get(\"enableRtl\");\n      isNext = !isRtl && key === KeyCode7.RIGHT || isRtl && key === KeyCode7.LEFT;\n      isPrevious = !isRtl && key === KeyCode7.LEFT || isRtl && key === KeyCode7.RIGHT;\n    }\n    if (!isNext && !isPrevious) {\n      return;\n    }\n    const el = this.focusService.findNextFocusableElement(this.getFocusableElement(), false, isPrevious);\n    if (el) {\n      e.preventDefault();\n      el.focus();\n    }\n  }\n  addElementClasses(el, suffix) {\n    suffix = suffix ? `-${suffix}` : \"\";\n    const direction = this.horizontal ? \"horizontal\" : \"vertical\";\n    el.classList.add(`ag-column-drop${suffix}`, `ag-column-drop-${direction}${suffix}`);\n  }\n  setupDropTarget() {\n    this.dropTarget = {\n      getContainer: this.getGui.bind(this),\n      getIconName: this.getIconName.bind(this),\n      onDragging: this.onDragging.bind(this),\n      onDragEnter: this.onDragEnter.bind(this),\n      onDragLeave: this.onDragLeave.bind(this),\n      onDragStop: this.onDragStop.bind(this),\n      onDragCancel: this.onDragCancel.bind(this),\n      isInterestedIn: this.isInterestedIn.bind(this)\n    };\n    this.dragAndDropService.addDropTarget(this.dropTarget);\n  }\n  minimumAllowedNewInsertIndex() {\n    return 0;\n  }\n  checkInsertIndex(draggingEvent) {\n    const newIndex = this.getNewInsertIndex(draggingEvent);\n    if (newIndex < 0) {\n      return false;\n    }\n    const minimumAllowedIndex = this.minimumAllowedNewInsertIndex();\n    const newAdjustedIndex = Math.max(minimumAllowedIndex, newIndex);\n    const changed = newAdjustedIndex !== this.insertIndex;\n    if (changed) {\n      this.insertIndex = newAdjustedIndex;\n    }\n    return changed;\n  }\n  getNewInsertIndex(draggingEvent) {\n    const mouseEvent = draggingEvent.event;\n    const mouseLocation = this.horizontal ? mouseEvent.clientX : mouseEvent.clientY;\n    const boundsList = this.childPillComponents.map((comp) => comp.getGui().getBoundingClientRect());\n    const hoveredIndex = boundsList.findIndex(\n      (rect) => this.horizontal ? rect.right > mouseLocation && rect.left < mouseLocation : rect.top < mouseLocation && rect.bottom > mouseLocation\n    );\n    if (hoveredIndex === -1) {\n      const enableRtl = this.gos.get(\"enableRtl\");\n      const isLast = boundsList.every((rect) => mouseLocation > (this.horizontal ? rect.right : rect.bottom));\n      if (isLast) {\n        return enableRtl && this.horizontal ? 0 : this.childPillComponents.length;\n      }\n      const isFirst = boundsList.every((rect) => mouseLocation < (this.horizontal ? rect.left : rect.top));\n      if (isFirst) {\n        return enableRtl && this.horizontal ? this.childPillComponents.length : 0;\n      }\n      return this.insertIndex;\n    }\n    if (this.insertIndex <= hoveredIndex) {\n      return hoveredIndex + 1;\n    }\n    return hoveredIndex;\n  }\n  checkDragStartedBySelf(draggingEvent) {\n    if (this.state !== \"notDragging\") {\n      return;\n    }\n    this.state = \"rearrangeItems\";\n    this.potentialDndItems = this.getItems(draggingEvent.dragSource.getDragItem());\n    this.refreshGui();\n    this.checkInsertIndex(draggingEvent);\n    this.refreshGui();\n  }\n  onDragging(draggingEvent) {\n    this.checkDragStartedBySelf(draggingEvent);\n    if (this.checkInsertIndex(draggingEvent)) {\n      this.refreshGui();\n    }\n  }\n  handleDragEnterEnd(draggingEvent) {\n  }\n  onDragEnter(draggingEvent) {\n    const dragItems = this.getItems(draggingEvent.dragSource.getDragItem());\n    this.state = \"newItemsIn\";\n    const goodDragItems = dragItems.filter((item) => this.isItemDroppable(item, draggingEvent));\n    const alreadyPresent = goodDragItems.every(\n      (item) => this.childPillComponents.map((cmp) => cmp.getItem()).indexOf(item) !== -1\n    );\n    if (goodDragItems.length === 0) {\n      return;\n    }\n    this.potentialDndItems = goodDragItems;\n    if (alreadyPresent) {\n      this.state = \"notDragging\";\n      return;\n    }\n    this.handleDragEnterEnd(draggingEvent);\n    this.checkInsertIndex(draggingEvent);\n    this.refreshGui();\n  }\n  isPotentialDndItems() {\n    return _existsAndNotEmpty(this.potentialDndItems);\n  }\n  handleDragLeaveEnd(draggingEvent) {\n  }\n  onDragLeave(draggingEvent) {\n    if (this.state === \"rearrangeItems\") {\n      const items = this.getItems(draggingEvent.dragSource.getDragItem());\n      this.removeItems(items);\n    }\n    if (this.isPotentialDndItems()) {\n      this.handleDragLeaveEnd(draggingEvent);\n      this.potentialDndItems = [];\n      this.refreshGui();\n    }\n    this.state = \"notDragging\";\n  }\n  onDragCancel(draggingEvent) {\n    if (this.isPotentialDndItems()) {\n      if (this.state === \"newItemsIn\") {\n        this.handleDragLeaveEnd(draggingEvent);\n      }\n      this.potentialDndItems = [];\n      this.refreshGui();\n    }\n    this.state = \"notDragging\";\n  }\n  onDragStop() {\n    if (this.isPotentialDndItems()) {\n      if (this.state === \"newItemsIn\") {\n        this.addItems(this.potentialDndItems);\n      } else {\n        this.rearrangeItems(this.potentialDndItems);\n      }\n      this.potentialDndItems = [];\n      this.refreshGui();\n    }\n    this.state = \"notDragging\";\n  }\n  removeItems(itemsToRemove) {\n    const newItemList = this.getExistingItems().filter((item) => !_includes(itemsToRemove, item));\n    this.updateItems(newItemList);\n  }\n  addItems(itemsToAdd) {\n    if (!itemsToAdd) {\n      return;\n    }\n    const newItemList = this.getExistingItems().slice();\n    const itemsToAddNoDuplicates = itemsToAdd.filter((item) => newItemList.indexOf(item) < 0);\n    _insertArrayIntoArray(newItemList, itemsToAddNoDuplicates, this.insertIndex);\n    this.updateItems(newItemList);\n  }\n  addItem(item) {\n    this.insertIndex = this.getExistingItems().length;\n    this.addItems([item]);\n    this.refreshGui();\n  }\n  rearrangeItems(itemsToAdd) {\n    const newItemList = this.getNonGhostItems().slice();\n    _insertArrayIntoArray(newItemList, itemsToAdd, this.insertIndex);\n    if (_areEqual(newItemList, this.getExistingItems())) {\n      return false;\n    }\n    this.updateItems(newItemList);\n    return true;\n  }\n  refreshGui() {\n    const scrollTop = this.ePillDropList.scrollTop;\n    const resizeEnabled = this.resizeEnabled;\n    const focusedIndex = this.getFocusedItem();\n    let alternateElement = this.focusService.findNextFocusableElement();\n    if (!alternateElement) {\n      alternateElement = this.focusService.findNextFocusableElement(void 0, false, true);\n    }\n    this.toggleResizable(false);\n    this.destroyGui();\n    this.addIconAndTitleToGui();\n    this.addEmptyMessageToGui();\n    this.addItemsToGui();\n    if (!this.isHorizontal()) {\n      this.ePillDropList.scrollTop = scrollTop;\n    }\n    if (resizeEnabled) {\n      this.toggleResizable(resizeEnabled);\n    }\n    if (this.focusService.isKeyboardMode()) {\n      this.restoreFocus(focusedIndex, alternateElement);\n    }\n  }\n  getFocusedItem() {\n    const eGui = this.getGui();\n    const activeElement = _getActiveDomElement3(this.gos);\n    if (!eGui.contains(activeElement)) {\n      return -1;\n    }\n    const items = Array.from(eGui.querySelectorAll(\".ag-column-drop-cell\"));\n    return items.indexOf(activeElement);\n  }\n  restoreFocus(index, alternateElement) {\n    const eGui = this.getGui();\n    const items = Array.from(eGui.querySelectorAll(\".ag-column-drop-cell\"));\n    if (index === -1) {\n      return;\n    }\n    if (items.length === 0) {\n      alternateElement.focus();\n    }\n    const indexToFocus = Math.min(items.length - 1, index);\n    const el = items[indexToFocus];\n    if (el) {\n      el.focus();\n    }\n  }\n  focusList(fromBottom) {\n    const index = fromBottom ? this.childPillComponents.length - 1 : 0;\n    this.restoreFocus(index, this.getFocusableElement());\n  }\n  getNonGhostItems() {\n    const existingItems = this.getExistingItems();\n    if (this.isPotentialDndItems()) {\n      return existingItems.filter((item) => !_includes(this.potentialDndItems, item));\n    }\n    return existingItems;\n  }\n  addItemsToGui() {\n    const nonGhostItems = this.getNonGhostItems();\n    const itemsToAddToGui = nonGhostItems.map((item) => this.createItemComponent(item, false));\n    if (this.isPotentialDndItems()) {\n      const dndItems = this.potentialDndItems.map((item) => this.createItemComponent(item, true));\n      if (this.insertIndex >= itemsToAddToGui.length) {\n        itemsToAddToGui.push(...dndItems);\n      } else {\n        itemsToAddToGui.splice(this.insertIndex, 0, ...dndItems);\n      }\n    }\n    this.appendChild(this.ePillDropList);\n    itemsToAddToGui.forEach((itemComponent, index) => {\n      if (index > 0) {\n        this.addArrow(this.ePillDropList);\n      }\n      this.ePillDropList.appendChild(itemComponent.getGui());\n    });\n    this.addAriaLabelsToComponents();\n  }\n  addAriaLabelsToComponents() {\n    this.childPillComponents.forEach((comp, idx) => {\n      const eGui = comp.getGui();\n      _setAriaPosInSet3(eGui, idx + 1);\n      _setAriaSetSize3(eGui, this.childPillComponents.length);\n    });\n  }\n  createItemComponent(item, ghost) {\n    const itemComponent = this.createPillComponent(item, this.dropTarget, ghost, this.horizontal);\n    itemComponent.addEventListener(\"columnRemove\", this.removeItems.bind(this, [item]));\n    this.createBean(itemComponent);\n    this.guiDestroyFunctions.push(() => this.destroyBean(itemComponent));\n    if (!ghost) {\n      this.childPillComponents.push(itemComponent);\n    }\n    return itemComponent;\n  }\n  addIconAndTitleToGui() {\n    const { title, icon: eGroupIcon } = this.params;\n    if (!title || !eGroupIcon) {\n      return;\n    }\n    const eTitleBar = document.createElement(\"div\");\n    _setAriaHidden(eTitleBar, true);\n    this.addElementClasses(eTitleBar, \"title-bar\");\n    this.addElementClasses(eGroupIcon, \"icon\");\n    this.addOrRemoveCssClass(\"ag-column-drop-empty\", this.isExistingItemsEmpty());\n    eTitleBar.appendChild(eGroupIcon);\n    if (!this.horizontal) {\n      const eTitle = document.createElement(\"span\");\n      this.addElementClasses(eTitle, \"title\");\n      eTitle.innerHTML = title;\n      eTitleBar.appendChild(eTitle);\n    }\n    this.appendChild(eTitleBar);\n  }\n  isExistingItemsEmpty() {\n    return this.getExistingItems().length === 0;\n  }\n  addEmptyMessageToGui() {\n    const { emptyMessage } = this.params;\n    if (!emptyMessage || !this.isExistingItemsEmpty() || this.isPotentialDndItems()) {\n      return;\n    }\n    const eMessage = document.createElement(\"span\");\n    eMessage.innerHTML = emptyMessage;\n    this.addElementClasses(eMessage, \"empty-message\");\n    this.ePillDropList.appendChild(eMessage);\n  }\n  addArrow(eParent) {\n    if (this.horizontal) {\n      const enableRtl = this.gos.get(\"enableRtl\");\n      const icon = _createIconNoSpan4(enableRtl ? \"smallLeft\" : \"smallRight\", this.gos);\n      this.addElementClasses(icon, \"cell-separator\");\n      eParent.appendChild(icon);\n    }\n  }\n};\n\n// enterprise-modules/core/src/widgets/agDialog.ts\nimport {\n  Component as Component10,\n  TabGuardFeature,\n  _createIconNoSpan as _createIconNoSpan6,\n  _setDisplayed as _setDisplayed4\n} from \"ag-grid-community\";\n\n// enterprise-modules/core/src/widgets/agPanel.ts\nimport {\n  Component as Component9,\n  PositionableFeature as PositionableFeature2,\n  RefPlaceholder as RefPlaceholder7,\n  _createIconNoSpan as _createIconNoSpan5,\n  _getActiveDomElement as _getActiveDomElement4,\n  _getInnerHeight,\n  _getInnerWidth,\n  _isVisible as _isVisible2,\n  _setDisplayed as _setDisplayed3\n} from \"ag-grid-community\";\nfunction getTemplate(config) {\n  const cssIdentifier = config.cssIdentifier || \"default\";\n  return (\n    /* html */\n    `<div class=\"ag-panel ag-${cssIdentifier}-panel\" tabindex=\"-1\">\n        <div data-ref=\"eTitleBar\" class=\"ag-panel-title-bar ag-${cssIdentifier}-panel-title-bar ag-unselectable\">\n            <span data-ref=\"eTitle\" class=\"ag-panel-title-bar-title ag-${cssIdentifier}-panel-title-bar-title\"></span>\n            <div data-ref=\"eTitleBarButtons\" class=\"ag-panel-title-bar-buttons ag-${cssIdentifier}-panel-title-bar-buttons\"></div>\n        </div>\n        <div data-ref=\"eContentWrapper\" class=\"ag-panel-content-wrapper ag-${cssIdentifier}-panel-content-wrapper\"></div>\n    </div>`\n  );\n}\nvar _AgPanel = class _AgPanel extends Component9 {\n  constructor(config) {\n    super(getTemplate(config));\n    this.config = config;\n    this.closable = true;\n    this.eContentWrapper = RefPlaceholder7;\n    this.eTitleBar = RefPlaceholder7;\n    this.eTitleBarButtons = RefPlaceholder7;\n    this.eTitle = RefPlaceholder7;\n  }\n  postConstruct() {\n    const {\n      component,\n      closable,\n      hideTitleBar,\n      title,\n      minWidth = 250,\n      width,\n      minHeight = 250,\n      height,\n      centered,\n      popup,\n      x,\n      y\n    } = this.config;\n    this.positionableFeature = new PositionableFeature2(this.getGui(), {\n      minWidth,\n      width,\n      minHeight,\n      height,\n      centered,\n      x,\n      y,\n      popup,\n      calculateTopBuffer: () => this.positionableFeature.getHeight() - this.getBodyHeight()\n    });\n    this.createManagedBean(this.positionableFeature);\n    const eGui = this.getGui();\n    if (component) {\n      this.setBodyComponent(component);\n    }\n    if (!hideTitleBar) {\n      if (title) {\n        this.setTitle(title);\n      }\n      this.setClosable(closable != null ? closable : this.closable);\n    } else {\n      _setDisplayed3(this.eTitleBar, false);\n    }\n    this.addManagedElementListeners(this.eTitleBar, {\n      mousedown: (e) => {\n        if (eGui.contains(e.relatedTarget) || eGui.contains(_getActiveDomElement4(this.gos)) || this.eTitleBarButtons.contains(e.target)) {\n          e.preventDefault();\n          return;\n        }\n        const focusEl = this.eContentWrapper.querySelector(\n          \"button, [href], input, select, textarea, [tabindex]\"\n        );\n        if (focusEl) {\n          focusEl.focus();\n        }\n      }\n    });\n    if (popup && this.positionableFeature.isPositioned()) {\n      return;\n    }\n    if (this.renderComponent) {\n      this.renderComponent();\n    }\n    this.positionableFeature.initialisePosition();\n    this.eContentWrapper.style.height = \"0\";\n  }\n  renderComponent() {\n    const eGui = this.getGui();\n    eGui.focus();\n    this.close = () => {\n      eGui.parentElement.removeChild(eGui);\n      this.destroy();\n    };\n  }\n  getHeight() {\n    return this.positionableFeature.getHeight();\n  }\n  setHeight(height) {\n    this.positionableFeature.setHeight(height);\n  }\n  getWidth() {\n    return this.positionableFeature.getWidth();\n  }\n  setWidth(width) {\n    this.positionableFeature.setWidth(width);\n  }\n  setClosable(closable) {\n    if (closable !== this.closable) {\n      this.closable = closable;\n    }\n    if (closable) {\n      const closeButtonComp = this.closeButtonComp = new Component9(_AgPanel.CLOSE_BTN_TEMPLATE);\n      this.createBean(closeButtonComp);\n      const eGui = closeButtonComp.getGui();\n      const child = _createIconNoSpan5(\"close\", this.gos);\n      child.classList.add(\"ag-panel-title-bar-button-icon\");\n      eGui.appendChild(child);\n      this.addTitleBarButton(closeButtonComp);\n      closeButtonComp.addManagedElementListeners(eGui, { click: this.onBtClose.bind(this) });\n    } else if (this.closeButtonComp) {\n      const eGui = this.closeButtonComp.getGui();\n      eGui.parentElement.removeChild(eGui);\n      this.closeButtonComp = this.destroyBean(this.closeButtonComp);\n    }\n  }\n  setBodyComponent(bodyComponent) {\n    bodyComponent.setParentComponent(this);\n    this.eContentWrapper.appendChild(bodyComponent.getGui());\n  }\n  addTitleBarButton(button, position) {\n    const eTitleBarButtons = this.eTitleBarButtons;\n    const buttons = eTitleBarButtons.children;\n    const len = buttons.length;\n    if (position == null) {\n      position = len;\n    }\n    position = Math.max(0, Math.min(position, len));\n    button.addCssClass(\"ag-panel-title-bar-button\");\n    const eGui = button.getGui();\n    if (position === 0) {\n      eTitleBarButtons.insertAdjacentElement(\"afterbegin\", eGui);\n    } else if (position === len) {\n      eTitleBarButtons.insertAdjacentElement(\"beforeend\", eGui);\n    } else {\n      buttons[position - 1].insertAdjacentElement(\"afterend\", eGui);\n    }\n    button.setParentComponent(this);\n  }\n  getBodyHeight() {\n    return _getInnerHeight(this.eContentWrapper);\n  }\n  getBodyWidth() {\n    return _getInnerWidth(this.eContentWrapper);\n  }\n  setTitle(title) {\n    this.eTitle.innerText = title;\n  }\n  // called when user hits the 'x' in the top right\n  onBtClose() {\n    this.close();\n  }\n  destroy() {\n    if (this.closeButtonComp) {\n      this.closeButtonComp = this.destroyBean(this.closeButtonComp);\n    }\n    const eGui = this.getGui();\n    if (eGui && _isVisible2(eGui)) {\n      this.close();\n    }\n    super.destroy();\n  }\n};\n_AgPanel.CLOSE_BTN_TEMPLATE = /* html */\n`<div class=\"ag-button\"></div>`;\nvar AgPanel = _AgPanel;\n\n// enterprise-modules/core/src/widgets/agDialog.ts\nvar AgDialog = class extends AgPanel {\n  constructor(config) {\n    super({ ...config, popup: true });\n    this.isMaximizable = false;\n    this.isMaximized = false;\n    this.maximizeListeners = [];\n    this.resizeListenerDestroy = null;\n    this.lastPosition = {\n      x: 0,\n      y: 0,\n      width: 0,\n      height: 0\n    };\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    const eGui = this.getGui();\n    const { movable, resizable, maximizable, modal, postProcessPopupParams } = this.config;\n    this.addCssClass(\"ag-dialog\");\n    super.postConstruct();\n    if (postProcessPopupParams) {\n      const { type, eventSource, column, mouseEvent, rowNode } = postProcessPopupParams;\n      this.popupService.callPostProcessPopup(type, eGui, eventSource, mouseEvent, column, rowNode);\n    }\n    this.tabGuardFeature = this.createManagedBean(new TabGuardFeature(this));\n    this.tabGuardFeature.initialiseTabGuard({\n      isFocusableContainer: true,\n      onFocusIn: () => {\n        this.popupService.bringPopupToFront(eGui);\n      },\n      onTabKeyDown: (e) => {\n        if (modal) {\n          return;\n        }\n        const backwards = e.shiftKey;\n        const nextFocusableElement = this.focusService.findNextFocusableElement(eGui, false, backwards);\n        if (!nextFocusableElement || this.tabGuardFeature.getTabGuardCtrl().isTabGuard(nextFocusableElement)) {\n          if (this.focusService.focusNextGridCoreContainer(backwards)) {\n            e.preventDefault();\n          }\n        }\n      }\n    });\n    if (movable) {\n      this.setMovable(movable);\n    }\n    if (maximizable) {\n      this.setMaximizable(maximizable);\n    }\n    if (resizable) {\n      this.setResizable(resizable);\n    }\n    if (!this.config.modal) {\n      const { focusService } = this;\n      focusService.addFocusableContainer(this);\n      this.addDestroyFunc(() => focusService.removeFocusableContainer(this));\n    }\n  }\n  setAllowFocus(allowFocus) {\n    this.tabGuardFeature.getTabGuardCtrl().setAllowFocus(allowFocus);\n  }\n  renderComponent() {\n    const eGui = this.getGui();\n    const { alwaysOnTop, modal, title, afterGuiAttached } = this.config;\n    const translate = this.localeService.getLocaleTextFunc();\n    const addPopupRes = this.popupService.addPopup({\n      modal,\n      eChild: eGui,\n      closeOnEsc: true,\n      closedCallback: this.onClosed.bind(this),\n      alwaysOnTop,\n      ariaLabel: title || translate(\"ariaLabelDialog\", \"Dialog\"),\n      afterGuiAttached\n    });\n    if (addPopupRes) {\n      this.close = addPopupRes.hideFunc;\n    }\n  }\n  onClosed(event) {\n    this.destroy();\n    this.config.closedCallback?.(event);\n  }\n  toggleMaximize() {\n    const position = this.positionableFeature.getPosition();\n    if (this.isMaximized) {\n      const { x, y, width, height } = this.lastPosition;\n      this.setWidth(width);\n      this.setHeight(height);\n      this.positionableFeature.offsetElement(x, y);\n    } else {\n      this.lastPosition.width = this.getWidth();\n      this.lastPosition.height = this.getHeight();\n      this.lastPosition.x = position.x;\n      this.lastPosition.y = position.y;\n      this.positionableFeature.offsetElement(0, 0);\n      this.setHeight(\"100%\");\n      this.setWidth(\"100%\");\n    }\n    this.isMaximized = !this.isMaximized;\n    this.refreshMaximizeIcon();\n  }\n  refreshMaximizeIcon() {\n    _setDisplayed4(this.maximizeIcon, !this.isMaximized);\n    _setDisplayed4(this.minimizeIcon, this.isMaximized);\n  }\n  clearMaximizebleListeners() {\n    if (this.maximizeListeners.length) {\n      this.maximizeListeners.forEach((destroyListener) => destroyListener());\n      this.maximizeListeners.length = 0;\n    }\n    if (this.resizeListenerDestroy) {\n      this.resizeListenerDestroy();\n      this.resizeListenerDestroy = null;\n    }\n  }\n  destroy() {\n    this.maximizeButtonComp = this.destroyBean(this.maximizeButtonComp);\n    this.clearMaximizebleListeners();\n    super.destroy();\n  }\n  setResizable(resizable) {\n    this.positionableFeature.setResizable(resizable);\n  }\n  setMovable(movable) {\n    this.positionableFeature.setMovable(movable, this.eTitleBar);\n  }\n  setMaximizable(maximizable) {\n    if (!maximizable) {\n      this.clearMaximizebleListeners();\n      if (this.maximizeButtonComp) {\n        this.destroyBean(this.maximizeButtonComp);\n        this.maximizeButtonComp = this.maximizeIcon = this.minimizeIcon = void 0;\n      }\n      return;\n    }\n    const eTitleBar = this.eTitleBar;\n    if (!eTitleBar || maximizable === this.isMaximizable) {\n      return;\n    }\n    const maximizeButtonComp = this.buildMaximizeAndMinimizeElements();\n    this.refreshMaximizeIcon();\n    maximizeButtonComp.addManagedElementListeners(maximizeButtonComp.getGui(), {\n      click: this.toggleMaximize.bind(this)\n    });\n    this.addTitleBarButton(maximizeButtonComp, 0);\n    this.maximizeListeners.push(\n      ...this.addManagedElementListeners(eTitleBar, {\n        dblclick: this.toggleMaximize.bind(this)\n      })\n    );\n    [this.resizeListenerDestroy] = this.addManagedListeners(this.positionableFeature, {\n      resize: () => {\n        this.isMaximized = false;\n        this.refreshMaximizeIcon();\n      }\n    });\n  }\n  buildMaximizeAndMinimizeElements() {\n    const maximizeButtonComp = this.maximizeButtonComp = this.createBean(\n      new Component10(\n        /* html */\n        `<div class=\"ag-dialog-button\"></span>`\n      )\n    );\n    const eGui = maximizeButtonComp.getGui();\n    this.maximizeIcon = _createIconNoSpan6(\"maximize\", this.gos);\n    eGui.appendChild(this.maximizeIcon);\n    this.maximizeIcon.classList.add(\"ag-panel-title-bar-button-icon\");\n    this.minimizeIcon = _createIconNoSpan6(\"minimize\", this.gos);\n    eGui.appendChild(this.minimizeIcon);\n    this.minimizeIcon.classList.add(\"ag-panel-title-bar-button-icon\");\n    return maximizeButtonComp;\n  }\n};\n\n// enterprise-modules/core/src/widgets/agMenuItemComponent.ts\nimport {\n  BeanStub as BeanStub2,\n  KeyCode as KeyCode10,\n  TooltipFeature,\n  _loadTemplate as _loadTemplate3,\n  _setAriaDisabled,\n  _setAriaExpanded as _setAriaExpanded3,\n  _setAriaLevel,\n  _setAriaRole as _setAriaRole3\n} from \"ag-grid-community\";\n\n// enterprise-modules/core/src/widgets/agMenuList.ts\nimport {\n  AgPromise,\n  KeyCode as KeyCode8,\n  TabGuardComp as TabGuardComp2,\n  _last as _last2,\n  _loadTemplate as _loadTemplate2,\n  _stopPropagationForAgGrid as _stopPropagationForAgGrid3,\n  _warnOnce as _warnOnce3\n} from \"ag-grid-community\";\nvar AgMenuList = class extends TabGuardComp2 {\n  constructor(level = 0, params) {\n    super(\n      /* html */\n      `<div class=\"ag-menu-list\" role=\"tree\"></div>`\n    );\n    this.level = level;\n    this.menuItems = [];\n    this.params = params ?? {\n      column: null,\n      node: null,\n      value: null\n    };\n  }\n  postConstruct() {\n    this.initialiseTabGuard({\n      onTabKeyDown: (e) => this.onTabKeyDown(e),\n      handleKeyDown: (e) => this.handleKeyDown(e),\n      onFocusIn: (e) => this.handleFocusIn(e),\n      onFocusOut: (e) => this.handleFocusOut(e)\n    });\n  }\n  onTabKeyDown(e) {\n    const parent = this.getParentComponent();\n    const parentGui = parent && parent.getGui();\n    const isManaged = parentGui && parentGui.classList.contains(\"ag-focus-managed\");\n    if (!isManaged) {\n      e.preventDefault();\n    }\n    if (e.shiftKey) {\n      this.closeIfIsChild(e);\n    }\n  }\n  handleKeyDown(e) {\n    switch (e.key) {\n      case KeyCode8.UP:\n      case KeyCode8.RIGHT:\n      case KeyCode8.DOWN:\n      case KeyCode8.LEFT:\n        e.preventDefault();\n        this.handleNavKey(e.key);\n        break;\n      case KeyCode8.ESCAPE:\n        if (this.closeIfIsChild()) {\n          _stopPropagationForAgGrid3(e);\n        }\n        break;\n    }\n  }\n  handleFocusIn(e) {\n    const oldFocusedElement = e.relatedTarget;\n    if (!this.tabGuardFeature.getTabGuardCtrl().isTabGuard(oldFocusedElement) && (this.getGui().contains(oldFocusedElement) || this.activeMenuItem?.getSubMenuGui()?.contains(oldFocusedElement))) {\n      return;\n    }\n    if (this.activeMenuItem) {\n      this.activeMenuItem.activate();\n    } else {\n      this.activateFirstItem();\n    }\n  }\n  handleFocusOut(e) {\n    const newFocusedElement = e.relatedTarget;\n    if (!this.activeMenuItem || this.getGui().contains(newFocusedElement) || this.activeMenuItem.getSubMenuGui()?.contains(newFocusedElement)) {\n      return;\n    }\n    if (!this.activeMenuItem.isSubMenuOpening()) {\n      this.activeMenuItem.deactivate();\n    }\n  }\n  clearActiveItem() {\n    if (this.activeMenuItem) {\n      this.activeMenuItem.deactivate();\n      this.activeMenuItem = null;\n    }\n  }\n  addMenuItems(menuItems) {\n    if (menuItems == null) {\n      return;\n    }\n    AgPromise.all(\n      menuItems.map((menuItemOrString) => {\n        if (menuItemOrString === \"separator\") {\n          return AgPromise.resolve({ eGui: this.createSeparator() });\n        } else if (typeof menuItemOrString === \"string\") {\n          _warnOnce3(`unrecognised menu item ${menuItemOrString}`);\n          return AgPromise.resolve({ eGui: null });\n        } else {\n          return this.addItem(menuItemOrString);\n        }\n      })\n    ).then((elements) => {\n      (elements ?? []).forEach((element) => {\n        if (element?.eGui) {\n          this.appendChild(element.eGui);\n          if (element.comp) {\n            this.menuItems.push(element.comp);\n          }\n        }\n      });\n    });\n  }\n  addItem(menuItemDef) {\n    const menuItem = this.createManagedBean(new AgMenuItemComponent());\n    return menuItem.init({\n      menuItemDef,\n      isAnotherSubMenuOpen: () => this.menuItems.some((m) => m.isSubMenuOpen()),\n      level: this.level,\n      contextParams: this.params\n    }).then(() => {\n      menuItem.setParentComponent(this);\n      this.addManagedListeners(menuItem, {\n        closeMenu: (event) => {\n          this.dispatchLocalEvent(event);\n        },\n        menuItemActivated: (event) => {\n          if (this.activeMenuItem && this.activeMenuItem !== event.menuItem) {\n            this.activeMenuItem.deactivate();\n          }\n          this.activeMenuItem = event.menuItem;\n        }\n      });\n      return {\n        comp: menuItem,\n        eGui: menuItem.getGui()\n      };\n    });\n  }\n  activateFirstItem() {\n    const item = this.menuItems.filter((currentItem) => !currentItem.isDisabled())[0];\n    if (!item) {\n      return;\n    }\n    item.activate();\n  }\n  createSeparator() {\n    const separatorHtml = (\n      /* html */\n      `\n            <div class=\"ag-menu-separator\" aria-hidden=\"true\">\n                <div class=\"ag-menu-separator-part\"></div>\n                <div class=\"ag-menu-separator-part\"></div>\n                <div class=\"ag-menu-separator-part\"></div>\n                <div class=\"ag-menu-separator-part\"></div>\n            </div>`\n    );\n    return _loadTemplate2(separatorHtml);\n  }\n  handleNavKey(key) {\n    switch (key) {\n      case KeyCode8.UP:\n      case KeyCode8.DOWN: {\n        const nextItem = this.findNextItem(key === KeyCode8.UP);\n        if (nextItem && nextItem !== this.activeMenuItem) {\n          nextItem.activate();\n        }\n        return;\n      }\n    }\n    const left = this.gos.get(\"enableRtl\") ? KeyCode8.RIGHT : KeyCode8.LEFT;\n    if (key === left) {\n      this.closeIfIsChild();\n    } else {\n      this.openChild();\n    }\n  }\n  closeIfIsChild(e) {\n    const parentItem = this.getParentComponent();\n    if (parentItem && parentItem instanceof AgMenuItemComponent) {\n      if (e) {\n        e.preventDefault();\n      }\n      parentItem.closeSubMenu();\n      parentItem.getGui().focus();\n      return true;\n    }\n    return false;\n  }\n  openChild() {\n    if (this.activeMenuItem) {\n      this.activeMenuItem.openSubMenu(true);\n    }\n  }\n  findNextItem(up) {\n    const items = this.menuItems.filter((item) => !item.isDisabled());\n    if (!items.length) {\n      return;\n    }\n    if (!this.activeMenuItem) {\n      return up ? _last2(items) : items[0];\n    }\n    if (up) {\n      items.reverse();\n    }\n    let nextItem;\n    let foundCurrent = false;\n    for (let i = 0; i < items.length; i++) {\n      const item = items[i];\n      if (!foundCurrent) {\n        if (item === this.activeMenuItem) {\n          foundCurrent = true;\n        }\n        continue;\n      }\n      nextItem = item;\n      break;\n    }\n    if (foundCurrent && !nextItem) {\n      return items[0];\n    }\n    return nextItem || this.activeMenuItem;\n  }\n  destroy() {\n    this.clearActiveItem();\n    super.destroy();\n  }\n};\n\n// enterprise-modules/core/src/widgets/agMenuPanel.ts\nimport { KeyCode as KeyCode9, TabGuardComp as TabGuardComp3 } from \"ag-grid-community\";\nvar AgMenuPanel = class extends TabGuardComp3 {\n  constructor(wrappedComponent) {\n    super();\n    this.setTemplateFromElement(wrappedComponent.getGui(), void 0, void 0, true);\n  }\n  postConstruct() {\n    this.initialiseTabGuard({\n      onTabKeyDown: (e) => this.onTabKeyDown(e),\n      handleKeyDown: (e) => this.handleKeyDown(e)\n    });\n  }\n  handleKeyDown(e) {\n    if (e.key === KeyCode9.ESCAPE) {\n      this.closePanel();\n    }\n  }\n  onTabKeyDown(e) {\n    if (e.defaultPrevented) {\n      return;\n    }\n    this.closePanel();\n    e.preventDefault();\n  }\n  closePanel() {\n    const menuItem = this.parentComponent;\n    menuItem.closeSubMenu();\n    setTimeout(() => menuItem.getGui().focus(), 0);\n  }\n};\n\n// enterprise-modules/core/src/widgets/agMenuItemComponent.ts\nvar AgMenuItemComponent = class extends BeanStub2 {\n  constructor() {\n    super(...arguments);\n    this.ACTIVATION_DELAY = 80;\n    this.isActive = false;\n    this.subMenuIsOpen = false;\n    this.subMenuIsOpening = false;\n    this.suppressRootStyles = true;\n    this.suppressAria = true;\n    this.suppressFocus = true;\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n    this.userComponentFactory = beans.userComponentFactory;\n  }\n  init(params) {\n    const { menuItemDef, isAnotherSubMenuOpen, level, childComponent, contextParams } = params;\n    this.params = params.menuItemDef;\n    this.level = level;\n    this.isAnotherSubMenuOpen = isAnotherSubMenuOpen;\n    this.childComponent = childComponent;\n    this.contextParams = contextParams;\n    this.cssClassPrefix = this.params.menuItemParams?.cssClassPrefix ?? \"ag-menu-option\";\n    const compDetails = this.userComponentFactory.getMenuItemCompDetails(this.params, {\n      ...menuItemDef,\n      level,\n      isAnotherSubMenuOpen,\n      openSubMenu: (activateFirstItem) => this.openSubMenu(activateFirstItem),\n      closeSubMenu: () => this.closeSubMenu(),\n      closeMenu: (event) => this.closeMenu(event),\n      updateTooltip: (tooltip, shouldDisplayTooltip) => this.refreshTooltip(tooltip, shouldDisplayTooltip),\n      onItemActivated: () => this.onItemActivated()\n    });\n    return compDetails.newAgStackInstance().then((comp) => {\n      this.menuItemComp = comp;\n      const configureDefaults = comp.configureDefaults?.();\n      if (configureDefaults) {\n        this.configureDefaults(configureDefaults === true ? void 0 : configureDefaults);\n      }\n    });\n  }\n  addListeners(eGui, params) {\n    if (!params?.suppressClick) {\n      this.addManagedElementListeners(eGui, { click: (e) => this.onItemSelected(e) });\n    }\n    if (!params?.suppressKeyboardSelect) {\n      this.addManagedElementListeners(eGui, {\n        keydown: (e) => {\n          if (e.key === KeyCode10.ENTER || e.key === KeyCode10.SPACE) {\n            e.preventDefault();\n            this.onItemSelected(e);\n          }\n        }\n      });\n    }\n    if (!params?.suppressMouseDown) {\n      this.addManagedElementListeners(eGui, {\n        mousedown: (e) => {\n          e.stopPropagation();\n          e.preventDefault();\n        }\n      });\n    }\n    if (!params?.suppressMouseOver) {\n      this.addManagedElementListeners(eGui, {\n        mouseenter: () => this.onMouseEnter(),\n        mouseleave: () => this.onMouseLeave()\n      });\n    }\n  }\n  isDisabled() {\n    return !!this.params.disabled;\n  }\n  openSubMenu(activateFirstItem = false, event) {\n    this.closeSubMenu();\n    if (!this.params.subMenu) {\n      return;\n    }\n    this.subMenuIsOpening = true;\n    const ePopup = _loadTemplate3(\n      /* html */\n      `<div class=\"ag-menu\" role=\"presentation\"></div>`\n    );\n    this.eSubMenuGui = ePopup;\n    let destroySubMenu;\n    let afterGuiAttached = () => {\n      this.subMenuIsOpening = false;\n    };\n    if (this.childComponent) {\n      const menuPanel = this.createBean(new AgMenuPanel(this.childComponent));\n      menuPanel.setParentComponent(this);\n      const subMenuGui = menuPanel.getGui();\n      const mouseEvent = \"mouseenter\";\n      const mouseEnterListener = () => this.cancelDeactivate();\n      subMenuGui.addEventListener(mouseEvent, mouseEnterListener);\n      destroySubMenu = () => subMenuGui.removeEventListener(mouseEvent, mouseEnterListener);\n      ePopup.appendChild(subMenuGui);\n      if (this.childComponent.afterGuiAttached) {\n        afterGuiAttached = () => {\n          this.childComponent.afterGuiAttached();\n          this.subMenuIsOpening = false;\n        };\n      }\n    } else if (this.params.subMenu) {\n      const childMenu = this.createBean(new AgMenuList(this.level + 1, this.contextParams));\n      childMenu.setParentComponent(this);\n      childMenu.addMenuItems(this.params.subMenu);\n      ePopup.appendChild(childMenu.getGui());\n      this.addManagedListeners(childMenu, { closeMenu: (e) => this.dispatchLocalEvent(e) });\n      childMenu.addGuiEventListener(\"mouseenter\", () => this.cancelDeactivate());\n      destroySubMenu = () => this.destroyBean(childMenu);\n      if (activateFirstItem) {\n        afterGuiAttached = () => {\n          childMenu.activateFirstItem();\n          this.subMenuIsOpening = false;\n        };\n      }\n    }\n    const { popupService } = this;\n    const positionCallback = () => {\n      const eventSource = this.eGui;\n      popupService.positionPopupForMenu({\n        eventSource,\n        ePopup\n      });\n      const { column, node } = this.contextParams;\n      popupService.callPostProcessPopup(\n        \"subMenu\",\n        ePopup,\n        eventSource,\n        event instanceof MouseEvent ? event : void 0,\n        column,\n        node\n      );\n    };\n    const translate = this.localeService.getLocaleTextFunc();\n    const addPopupRes = popupService.addPopup({\n      modal: true,\n      eChild: ePopup,\n      positionCallback,\n      anchorToElement: this.eGui,\n      ariaLabel: translate(\"ariaLabelSubMenu\", \"SubMenu\"),\n      afterGuiAttached\n    });\n    this.subMenuIsOpen = true;\n    this.setAriaExpanded(true);\n    this.hideSubMenu = () => {\n      if (addPopupRes) {\n        addPopupRes.hideFunc();\n      }\n      this.subMenuIsOpen = false;\n      this.setAriaExpanded(false);\n      destroySubMenu();\n      this.menuItemComp.setExpanded?.(false);\n      this.eSubMenuGui = void 0;\n    };\n    this.menuItemComp.setExpanded?.(true);\n  }\n  setAriaExpanded(expanded) {\n    if (!this.suppressAria) {\n      _setAriaExpanded3(this.eGui, expanded);\n    }\n  }\n  closeSubMenu() {\n    if (!this.hideSubMenu) {\n      return;\n    }\n    this.hideSubMenu();\n    this.hideSubMenu = null;\n    this.setAriaExpanded(false);\n  }\n  isSubMenuOpen() {\n    return this.subMenuIsOpen;\n  }\n  isSubMenuOpening() {\n    return this.subMenuIsOpening;\n  }\n  activate(openSubMenu) {\n    this.cancelActivate();\n    if (this.params.disabled) {\n      return;\n    }\n    this.isActive = true;\n    if (!this.suppressRootStyles) {\n      this.eGui.classList.add(`${this.cssClassPrefix}-active`);\n    }\n    this.menuItemComp.setActive?.(true);\n    if (!this.suppressFocus) {\n      this.eGui.focus({ preventScroll: true });\n    }\n    if (openSubMenu && this.params.subMenu) {\n      window.setTimeout(() => {\n        if (this.isAlive() && this.isActive) {\n          this.openSubMenu();\n        }\n      }, 300);\n    }\n    this.onItemActivated();\n  }\n  deactivate() {\n    this.cancelDeactivate();\n    if (!this.suppressRootStyles) {\n      this.eGui.classList.remove(`${this.cssClassPrefix}-active`);\n    }\n    this.menuItemComp.setActive?.(false);\n    this.isActive = false;\n    if (this.subMenuIsOpen) {\n      this.hideSubMenu();\n    }\n  }\n  getGui() {\n    return this.menuItemComp.getGui();\n  }\n  getParentComponent() {\n    return this.parentComponent;\n  }\n  setParentComponent(component) {\n    this.parentComponent = component;\n  }\n  getSubMenuGui() {\n    return this.eSubMenuGui;\n  }\n  onItemSelected(event) {\n    this.menuItemComp.select?.();\n    if (this.params.action) {\n      this.getFrameworkOverrides().wrapOutgoing(\n        () => this.params.action(\n          this.gos.addGridCommonParams({\n            ...this.contextParams\n          })\n        )\n      );\n    } else {\n      this.openSubMenu(event && event.type === \"keydown\", event);\n    }\n    if (this.params.subMenu && !this.params.action || this.params.suppressCloseOnSelect) {\n      return;\n    }\n    this.closeMenu(event);\n  }\n  closeMenu(event) {\n    const e = {\n      type: \"closeMenu\"\n    };\n    if (event) {\n      if (event instanceof MouseEvent) {\n        e.mouseEvent = event;\n      } else {\n        e.keyboardEvent = event;\n      }\n    }\n    this.dispatchLocalEvent(e);\n  }\n  onItemActivated() {\n    const event = {\n      type: \"menuItemActivated\",\n      menuItem: this\n    };\n    this.dispatchLocalEvent(event);\n  }\n  cancelActivate() {\n    if (this.activateTimeoutId) {\n      window.clearTimeout(this.activateTimeoutId);\n      this.activateTimeoutId = 0;\n    }\n  }\n  cancelDeactivate() {\n    if (this.deactivateTimeoutId) {\n      window.clearTimeout(this.deactivateTimeoutId);\n      this.deactivateTimeoutId = 0;\n    }\n  }\n  onMouseEnter() {\n    this.cancelDeactivate();\n    if (this.isAnotherSubMenuOpen()) {\n      this.activateTimeoutId = window.setTimeout(() => this.activate(true), this.ACTIVATION_DELAY);\n    } else {\n      this.activate(true);\n    }\n  }\n  onMouseLeave() {\n    this.cancelActivate();\n    if (this.isSubMenuOpen()) {\n      this.deactivateTimeoutId = window.setTimeout(() => this.deactivate(), this.ACTIVATION_DELAY);\n    } else {\n      this.deactivate();\n    }\n  }\n  configureDefaults(params) {\n    if (!this.menuItemComp) {\n      setTimeout(() => this.configureDefaults(params));\n      return;\n    }\n    let eGui = this.menuItemComp.getGui();\n    const rootElement = this.menuItemComp.getRootElement?.();\n    if (rootElement) {\n      if (!params?.suppressRootStyles) {\n        eGui.classList.add(\"ag-menu-option-custom\");\n      }\n      eGui = rootElement;\n    }\n    this.eGui = eGui;\n    this.suppressRootStyles = !!params?.suppressRootStyles;\n    if (!this.suppressRootStyles) {\n      eGui.classList.add(this.cssClassPrefix);\n      this.params.cssClasses?.forEach((it) => eGui.classList.add(it));\n      if (this.params.disabled) {\n        eGui.classList.add(`${this.cssClassPrefix}-disabled`);\n      }\n    }\n    if (!params?.suppressTooltip) {\n      this.refreshTooltip(this.params.tooltip);\n    }\n    this.suppressAria = !!params?.suppressAria;\n    if (!this.suppressAria) {\n      _setAriaRole3(eGui, \"treeitem\");\n      _setAriaLevel(eGui, this.level + 1);\n      if (this.params.disabled) {\n        _setAriaDisabled(eGui, true);\n      }\n    }\n    if (!params?.suppressTabIndex) {\n      eGui.setAttribute(\"tabindex\", \"-1\");\n    }\n    if (!this.params.disabled) {\n      this.addListeners(eGui, params);\n    }\n    this.suppressFocus = !!params?.suppressFocus;\n  }\n  refreshTooltip(tooltip, shouldDisplayTooltip) {\n    this.tooltip = tooltip;\n    if (this.tooltipFeature) {\n      this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n    }\n    if (!tooltip || !this.menuItemComp) {\n      return;\n    }\n    this.tooltipFeature = this.createBean(\n      new TooltipFeature({\n        getGui: () => this.getGui(),\n        getTooltipValue: () => this.tooltip,\n        getLocation: () => \"menu\",\n        shouldDisplayTooltip\n      })\n    );\n  }\n  destroy() {\n    if (this.tooltipFeature) {\n      this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n    }\n    this.menuItemComp?.destroy?.();\n    super.destroy();\n  }\n};\n\n// enterprise-modules/core/src/features/virtualListDragFeature.ts\nimport { AutoScrollService, BeanStub as BeanStub3, _radioCssClass } from \"ag-grid-community\";\nvar LIST_ITEM_HOVERED = \"ag-list-item-hovered\";\nvar VirtualListDragFeature = class extends BeanStub3 {\n  constructor(comp, virtualList, params) {\n    super();\n    this.comp = comp;\n    this.virtualList = virtualList;\n    this.params = params;\n    this.currentDragValue = null;\n    this.lastHoveredListItem = null;\n  }\n  wireBeans(beans) {\n    this.dragAndDropService = beans.dragAndDropService;\n  }\n  postConstruct() {\n    this.addManagedListeners(this.params.eventSource, {\n      [this.params.listItemDragStartEvent]: this.listItemDragStart.bind(this),\n      [this.params.listItemDragEndEvent]: this.listItemDragEnd.bind(this)\n    });\n    this.createDropTarget();\n    this.createAutoScrollService();\n  }\n  listItemDragStart(event) {\n    this.currentDragValue = this.params.getCurrentDragValue(event);\n    this.moveBlocked = this.params.isMoveBlocked(this.currentDragValue);\n  }\n  listItemDragEnd() {\n    window.setTimeout(() => {\n      this.currentDragValue = null;\n      this.moveBlocked = false;\n    }, 10);\n  }\n  createDropTarget() {\n    const dropTarget = {\n      isInterestedIn: (type) => type === this.params.dragSourceType,\n      getIconName: () => this.moveBlocked ? \"pinned\" : \"move\",\n      getContainer: () => this.comp.getGui(),\n      onDragging: (e) => this.onDragging(e),\n      onDragStop: () => this.onDragStop(),\n      onDragLeave: () => this.onDragLeave(),\n      onDragCancel: () => this.onDragCancel()\n    };\n    this.dragAndDropService.addDropTarget(dropTarget);\n  }\n  createAutoScrollService() {\n    const virtualListGui = this.virtualList.getGui();\n    this.autoScrollService = new AutoScrollService({\n      scrollContainer: virtualListGui,\n      scrollAxis: \"y\",\n      getVerticalPosition: () => virtualListGui.scrollTop,\n      setVerticalPosition: (position) => virtualListGui.scrollTop = position\n    });\n  }\n  onDragging(e) {\n    if (!this.currentDragValue || this.moveBlocked) {\n      return;\n    }\n    const hoveredListItem = this.getListDragItem(e);\n    const comp = this.virtualList.getComponentAt(hoveredListItem.rowIndex);\n    if (!comp) {\n      return;\n    }\n    const el = comp.getGui().parentElement;\n    if (this.lastHoveredListItem && this.lastHoveredListItem.rowIndex === hoveredListItem.rowIndex && this.lastHoveredListItem.position === hoveredListItem.position) {\n      return;\n    }\n    this.autoScrollService.check(e.event);\n    this.clearHoveredItems();\n    this.lastHoveredListItem = hoveredListItem;\n    _radioCssClass(el, LIST_ITEM_HOVERED);\n    _radioCssClass(el, `ag-item-highlight-${hoveredListItem.position}`);\n  }\n  getListDragItem(e) {\n    const virtualListGui = this.virtualList.getGui();\n    const paddingTop = parseFloat(window.getComputedStyle(virtualListGui).paddingTop);\n    const rowHeight = this.virtualList.getRowHeight();\n    const scrollTop = this.virtualList.getScrollTop();\n    const rowIndex = Math.max(0, (e.y - paddingTop + scrollTop) / rowHeight);\n    const maxLen = this.params.getNumRows(this.comp) - 1;\n    const normalizedRowIndex = Math.min(maxLen, rowIndex) | 0;\n    return {\n      rowIndex: normalizedRowIndex,\n      position: Math.round(rowIndex) > rowIndex || rowIndex > maxLen ? \"bottom\" : \"top\",\n      component: this.virtualList.getComponentAt(normalizedRowIndex)\n    };\n  }\n  onDragStop() {\n    if (this.moveBlocked) {\n      return;\n    }\n    this.params.moveItem(this.currentDragValue, this.lastHoveredListItem);\n    this.clearDragProperties();\n  }\n  onDragCancel() {\n    this.clearDragProperties();\n  }\n  onDragLeave() {\n    this.clearDragProperties();\n  }\n  clearDragProperties() {\n    this.clearHoveredItems();\n    this.autoScrollService.ensureCleared();\n  }\n  clearHoveredItems() {\n    const virtualListGui = this.virtualList.getGui();\n    virtualListGui.querySelectorAll(`.${LIST_ITEM_HOVERED}`).forEach((el) => {\n      [LIST_ITEM_HOVERED, \"ag-item-highlight-top\", \"ag-item-highlight-bottom\"].forEach((cls) => {\n        el.classList.remove(cls);\n      });\n    });\n    this.lastHoveredListItem = null;\n  }\n};\n\n// enterprise-modules/core/src/widgets/tabbedLayout.ts\nimport {\n  KeyCode as KeyCode11,\n  RefPlaceholder as RefPlaceholder8,\n  TabGuardComp as TabGuardComp4,\n  _clearElement as _clearElement4,\n  _createIconNoSpan as _createIconNoSpan7,\n  _getActiveDomElement as _getActiveDomElement5,\n  _getDocument as _getDocument6,\n  _setAriaLabel as _setAriaLabel5,\n  _setAriaRole as _setAriaRole4\n} from \"ag-grid-community\";\nfunction getTabbedLayoutTemplate(cssClass) {\n  return (\n    /* html */\n    `<div class=\"ag-tabs ${cssClass}\">\n        <div data-ref=\"eHeader\"></div>\n        <div data-ref=\"eBody\" role=\"presentation\" class=\"ag-tabs-body ${cssClass ? `${cssClass}-body` : \"\"}\"></div>\n    </div>`\n  );\n}\nvar TabbedLayout = class extends TabGuardComp4 {\n  constructor(params) {\n    super(getTabbedLayoutTemplate(params.cssClass));\n    this.eHeader = RefPlaceholder8;\n    this.eBody = RefPlaceholder8;\n    this.items = [];\n    this.tabbedItemScrollMap = /* @__PURE__ */ new Map();\n    this.params = params;\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    this.setupHeader();\n    if (this.params.items) {\n      this.params.items.forEach((item) => this.addItem(item));\n    }\n    this.initialiseTabGuard({\n      onTabKeyDown: this.onTabKeyDown.bind(this),\n      handleKeyDown: this.handleKeyDown.bind(this),\n      focusInnerElement: this.focusInnerElement.bind(this),\n      focusTrapActive: true\n    });\n    this.addDestroyFunc(() => this.activeItem?.tabbedItem?.afterDetachedCallback?.());\n  }\n  setupHeader() {\n    const { enableCloseButton, cssClass } = this.params;\n    const addCssClasses = (el, suffix) => {\n      el.classList.add(`ag-tabs-${suffix}`);\n      if (cssClass) {\n        el.classList.add(`${cssClass}-${suffix}`);\n      }\n    };\n    if (enableCloseButton) {\n      this.setupCloseButton(addCssClasses);\n      this.eTabHeader = _getDocument6(this.gos).createElement(\"div\");\n      addCssClasses(this.eHeader, \"header-wrapper\");\n      _setAriaRole4(this.eHeader, \"presentation\");\n      this.eHeader.appendChild(this.eTabHeader);\n    } else {\n      this.eTabHeader = this.eHeader;\n    }\n    _setAriaRole4(this.eTabHeader, \"tablist\");\n    addCssClasses(this.eTabHeader, \"header\");\n  }\n  setupCloseButton(addCssClasses) {\n    const eDocument = _getDocument6(this.gos);\n    const eCloseButton = eDocument.createElement(\"button\");\n    addCssClasses(eCloseButton, \"close-button\");\n    const eIcon = _createIconNoSpan7(\"close\", this.gos, void 0, true);\n    _setAriaLabel5(eCloseButton, this.params.closeButtonAriaLabel);\n    eCloseButton.appendChild(eIcon);\n    this.addManagedElementListeners(eCloseButton, { click: () => this.params.onCloseClicked?.() });\n    const eCloseButtonWrapper = eDocument.createElement(\"div\");\n    addCssClasses(eCloseButtonWrapper, \"close-button-wrapper\");\n    _setAriaRole4(eCloseButtonWrapper, \"presentation\");\n    eCloseButtonWrapper.appendChild(eCloseButton);\n    this.eHeader.appendChild(eCloseButtonWrapper);\n    this.eCloseButton = eCloseButton;\n  }\n  handleKeyDown(e) {\n    switch (e.key) {\n      case KeyCode11.RIGHT:\n      case KeyCode11.LEFT: {\n        if (!this.eTabHeader.contains(_getActiveDomElement5(this.gos))) {\n          return;\n        }\n        const isRightKey = e.key === KeyCode11.RIGHT;\n        const isRtl = this.gos.get(\"enableRtl\");\n        const currentPosition = this.items.indexOf(this.activeItem);\n        const nextPosition = isRightKey !== isRtl ? Math.min(currentPosition + 1, this.items.length - 1) : Math.max(currentPosition - 1, 0);\n        if (currentPosition === nextPosition) {\n          return;\n        }\n        e.preventDefault();\n        const nextItem = this.items[nextPosition];\n        this.showItemWrapper(nextItem);\n        nextItem.eHeaderButton.focus();\n        break;\n      }\n      case KeyCode11.UP:\n      case KeyCode11.DOWN:\n        e.stopPropagation();\n        break;\n    }\n  }\n  onTabKeyDown(e) {\n    if (e.defaultPrevented) {\n      return;\n    }\n    const { focusService, eHeader, eBody, activeItem, params } = this;\n    const { suppressTrapFocus, enableCloseButton } = params;\n    const activeElement = _getActiveDomElement5(this.gos);\n    const target = e.target;\n    const backwards = e.shiftKey;\n    if (eHeader.contains(activeElement)) {\n      e.preventDefault();\n      if (enableCloseButton && backwards && !this.eCloseButton?.contains(activeElement)) {\n        this.eCloseButton?.focus();\n      } else if (suppressTrapFocus && backwards) {\n        this.focusService.findFocusableElementBeforeTabGuard(_getDocument6(this.gos).body, target)?.focus();\n      } else {\n        this.focusBody(e.shiftKey);\n      }\n      return;\n    }\n    let nextEl = null;\n    if (focusService.isTargetUnderManagedComponent(eBody, target)) {\n      if (backwards) {\n        nextEl = this.focusService.findFocusableElementBeforeTabGuard(eBody, target);\n      }\n      if (!nextEl && !suppressTrapFocus) {\n        nextEl = activeItem.eHeaderButton;\n      }\n    }\n    if (!nextEl && eBody.contains(activeElement)) {\n      nextEl = focusService.findNextFocusableElement(eBody, false, backwards);\n      if (!nextEl) {\n        if (suppressTrapFocus && !backwards) {\n          this.forceFocusOutOfContainer(backwards);\n        } else if (enableCloseButton && !backwards) {\n          e.preventDefault();\n          this.eCloseButton?.focus();\n        } else {\n          e.preventDefault();\n          this.focusHeader();\n        }\n        return;\n      }\n    }\n    if (nextEl) {\n      e.preventDefault();\n      nextEl.focus();\n    }\n  }\n  focusInnerElement(fromBottom) {\n    if (fromBottom) {\n      this.focusBody(true);\n    } else {\n      this.focusHeader();\n    }\n  }\n  focusHeader(preventScroll) {\n    this.activeItem.eHeaderButton.focus({ preventScroll });\n  }\n  focusBody(fromBottom) {\n    this.focusService.focusInto(this.eBody, fromBottom);\n  }\n  setAfterAttachedParams(params) {\n    this.afterAttachedParams = params;\n  }\n  showFirstItem() {\n    if (this.items.length > 0) {\n      this.showItemWrapper(this.items[0]);\n    }\n  }\n  addItem(item) {\n    const eHeaderButton = document.createElement(\"span\");\n    _setAriaRole4(eHeaderButton, \"tab\");\n    eHeaderButton.setAttribute(\"tabindex\", \"-1\");\n    eHeaderButton.appendChild(item.title);\n    eHeaderButton.classList.add(\"ag-tab\");\n    this.eTabHeader.appendChild(eHeaderButton);\n    _setAriaLabel5(eHeaderButton, item.titleLabel);\n    const wrapper = {\n      tabbedItem: item,\n      eHeaderButton\n    };\n    this.items.push(wrapper);\n    eHeaderButton.addEventListener(\"click\", this.showItemWrapper.bind(this, wrapper));\n  }\n  showItem(tabbedItem) {\n    const itemWrapper = this.items.find((wrapper) => wrapper.tabbedItem === tabbedItem);\n    if (itemWrapper) {\n      this.showItemWrapper(itemWrapper);\n    }\n  }\n  showItemWrapper(wrapper) {\n    const { tabbedItem, eHeaderButton } = wrapper;\n    this.params.onItemClicked?.({ item: tabbedItem });\n    if (this.activeItem === wrapper) {\n      this.params.onActiveItemClicked?.();\n      return;\n    }\n    if (this.lastScrollListener) {\n      this.lastScrollListener = this.lastScrollListener();\n    }\n    _clearElement4(this.eBody);\n    tabbedItem.bodyPromise.then((body) => {\n      this.eBody.appendChild(body);\n      const onlyUnmanaged = !this.focusService.isKeyboardMode();\n      if (!this.params.suppressFocusBodyOnOpen) {\n        this.focusService.focusInto(this.eBody, false, onlyUnmanaged);\n      }\n      if (tabbedItem.afterAttachedCallback) {\n        tabbedItem.afterAttachedCallback(this.afterAttachedParams);\n      }\n      if (this.params.keepScrollPosition) {\n        const scrollableContainer = tabbedItem.getScrollableContainer && tabbedItem.getScrollableContainer() || body;\n        [this.lastScrollListener] = this.addManagedElementListeners(scrollableContainer, {\n          scroll: () => {\n            this.tabbedItemScrollMap.set(tabbedItem.name, scrollableContainer.scrollTop);\n          }\n        });\n        const scrollPosition = this.tabbedItemScrollMap.get(tabbedItem.name);\n        if (scrollPosition !== void 0) {\n          setTimeout(() => {\n            scrollableContainer.scrollTop = scrollPosition;\n          }, 0);\n        }\n      }\n    });\n    if (this.activeItem) {\n      this.activeItem.eHeaderButton.classList.remove(\"ag-tab-selected\");\n      this.activeItem.tabbedItem.afterDetachedCallback?.();\n    }\n    eHeaderButton.classList.add(\"ag-tab-selected\");\n    this.activeItem = wrapper;\n  }\n};\n\n// enterprise-modules/core/src/rendering/groupCellRenderer.ts\nimport { Component as Component11, RefPlaceholder as RefPlaceholder9, _setAriaRole as _setAriaRole5, _setDisplayed as _setDisplayed5 } from \"ag-grid-community\";\n\n// enterprise-modules/core/src/rendering/groupCellRendererCtrl.ts\nimport {\n  BeanStub as BeanStub4,\n  CheckboxSelectionComponent,\n  KeyCode as KeyCode12,\n  RowDragComp,\n  _cloneObject,\n  _createIconNoSpan as _createIconNoSpan8,\n  _getGrandTotalRow,\n  _isElementInEventPath,\n  _isStopPropagationForAgGrid,\n  _missing,\n  _removeAriaExpanded,\n  _setAriaExpanded as _setAriaExpanded4,\n  _stopPropagationForAgGrid as _stopPropagationForAgGrid4,\n  _warnOnce as _warnOnce4\n} from \"ag-grid-community\";\nvar GroupCellRendererCtrl = class extends BeanStub4 {\n  wireBeans(beans) {\n    this.expressionService = beans.expressionService;\n    this.valueService = beans.valueService;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.userComponentFactory = beans.userComponentFactory;\n    this.ctrlsService = beans.ctrlsService;\n    this.funcColsService = beans.funcColsService;\n  }\n  init(comp, eGui, eCheckbox, eExpanded, eContracted, compClass, params) {\n    this.params = params;\n    this.eGui = eGui;\n    this.eCheckbox = eCheckbox;\n    this.eExpanded = eExpanded;\n    this.eContracted = eContracted;\n    this.comp = comp;\n    this.compClass = compClass;\n    const { node, colDef } = params;\n    const topLevelFooter = this.isTopLevelFooter();\n    if (!topLevelFooter) {\n      const embeddedRowMismatch = this.isEmbeddedRowMismatch();\n      if (embeddedRowMismatch) {\n        return;\n      }\n      if (node.footer && this.gos.get(\"groupHideOpenParents\")) {\n        const showRowGroup = colDef && colDef.showRowGroup;\n        const rowGroupColumnId = node.rowGroupColumn && node.rowGroupColumn.getColId();\n        if (showRowGroup !== rowGroupColumnId) {\n          return;\n        }\n      }\n    }\n    this.setupShowingValueForOpenedParent();\n    this.findDisplayedGroupNode();\n    if (!topLevelFooter) {\n      const showingFooterTotal = params.node.footer && params.node.rowGroupIndex === this.funcColsService.getRowGroupColumns().findIndex((c) => c.getColId() === params.colDef?.showRowGroup);\n      const isAlwaysShowing = this.gos.get(\"groupDisplayType\") != \"multipleColumns\" || this.gos.get(\"treeData\");\n      const showOpenGroupValue = isAlwaysShowing || this.gos.get(\"showOpenedGroup\") && !params.node.footer && (!params.node.group || params.node.rowGroupIndex != null && params.node.rowGroupIndex > this.funcColsService.getRowGroupColumns().findIndex((c) => c.getColId() === params.colDef?.showRowGroup));\n      const leafWithValues = !node.group && (this.params.colDef?.field || this.params.colDef?.valueGetter);\n      const isExpandable = this.isExpandable();\n      const showPivotModeLeafValue = this.columnModel.isPivotMode() && node.leafGroup && node.rowGroupColumn?.getColId() === params.column?.getColDef().showRowGroup;\n      const canSkipRenderingCell = !this.showingValueForOpenedParent && !isExpandable && !leafWithValues && !showOpenGroupValue && !showingFooterTotal && !showPivotModeLeafValue;\n      if (canSkipRenderingCell) {\n        return;\n      }\n    }\n    this.addExpandAndContract();\n    this.addFullWidthRowDraggerIfNeeded();\n    this.addCheckboxIfNeeded();\n    this.addValueElement();\n    this.setupIndent();\n    this.refreshAriaExpanded();\n  }\n  getCellAriaRole() {\n    const colDefAriaRole = this.params.colDef?.cellAriaRole;\n    const columnColDefAriaRole = this.params.column?.getColDef().cellAriaRole;\n    return colDefAriaRole || columnColDefAriaRole || \"gridcell\";\n  }\n  destroy() {\n    super.destroy();\n    this.expandListener = null;\n  }\n  refreshAriaExpanded() {\n    const { node, eGridCell } = this.params;\n    if (this.expandListener) {\n      this.expandListener = this.expandListener();\n    }\n    if (!this.isExpandable()) {\n      _removeAriaExpanded(eGridCell);\n      return;\n    }\n    const listener = () => {\n      _setAriaExpanded4(eGridCell, this.showingValueForOpenedParent || !!node.expanded);\n    };\n    [this.expandListener] = this.addManagedListeners(node, { expandedChanged: listener }) || null;\n    listener();\n  }\n  isTopLevelFooter() {\n    const totalRow = _getGrandTotalRow(this.gos);\n    if (!totalRow) {\n      return false;\n    }\n    if (this.params.value != null || this.params.node.level != -1) {\n      return false;\n    }\n    const colDef = this.params.colDef;\n    const doingFullWidth = colDef == null;\n    if (doingFullWidth) {\n      return true;\n    }\n    if (colDef.showRowGroup === true) {\n      return true;\n    }\n    const rowGroupCols = this.funcColsService.getRowGroupColumns();\n    if (!rowGroupCols || rowGroupCols.length === 0) {\n      return true;\n    }\n    const firstRowGroupCol = rowGroupCols[0];\n    return firstRowGroupCol.getId() === colDef.showRowGroup;\n  }\n  // if we are doing embedded full width rows, we only show the renderer when\n  // in the body, or if pinning in the pinned section, or if pinning and RTL,\n  // in the right section. otherwise we would have the cell repeated in each section.\n  isEmbeddedRowMismatch() {\n    if (!this.params.fullWidth || !this.gos.get(\"embedFullWidthRows\")) {\n      return false;\n    }\n    const pinnedLeftCell = this.params.pinned === \"left\";\n    const pinnedRightCell = this.params.pinned === \"right\";\n    const bodyCell = !pinnedLeftCell && !pinnedRightCell;\n    if (this.gos.get(\"enableRtl\")) {\n      if (this.visibleColsService.isPinningLeft()) {\n        return !pinnedRightCell;\n      }\n      return !bodyCell;\n    }\n    if (this.visibleColsService.isPinningLeft()) {\n      return !pinnedLeftCell;\n    }\n    return !bodyCell;\n  }\n  findDisplayedGroupNode() {\n    const column = this.params.column;\n    const rowNode = this.params.node;\n    if (this.showingValueForOpenedParent) {\n      let pointer = rowNode.parent;\n      while (pointer != null) {\n        if (pointer.rowGroupColumn && column.isRowGroupDisplayed(pointer.rowGroupColumn.getId())) {\n          this.displayedGroupNode = pointer;\n          break;\n        }\n        pointer = pointer.parent;\n      }\n    }\n    if (_missing(this.displayedGroupNode)) {\n      this.displayedGroupNode = rowNode;\n    }\n  }\n  setupShowingValueForOpenedParent() {\n    const rowNode = this.params.node;\n    const column = this.params.column;\n    if (!this.gos.get(\"groupHideOpenParents\")) {\n      this.showingValueForOpenedParent = false;\n      return;\n    }\n    if (!rowNode.groupData) {\n      this.showingValueForOpenedParent = false;\n      return;\n    }\n    const showingGroupNode = rowNode.rowGroupColumn != null;\n    if (showingGroupNode) {\n      const keyOfGroupingColumn = rowNode.rowGroupColumn.getId();\n      const configuredToShowThisGroupLevel = column.isRowGroupDisplayed(keyOfGroupingColumn);\n      if (configuredToShowThisGroupLevel) {\n        this.showingValueForOpenedParent = false;\n        return;\n      }\n    }\n    const valPresent = rowNode.groupData[column.getId()] != null;\n    this.showingValueForOpenedParent = valPresent;\n  }\n  addValueElement() {\n    if (this.displayedGroupNode.footer) {\n      this.addFooterValue();\n    } else {\n      this.addGroupValue();\n      this.addChildCount();\n    }\n  }\n  addGroupValue() {\n    const paramsAdjusted = this.adjustParamsWithDetailsFromRelatedColumn();\n    const innerCompDetails = this.getInnerCompDetails(paramsAdjusted);\n    const { valueFormatted, value } = paramsAdjusted;\n    let valueWhenNoRenderer = valueFormatted;\n    if (valueWhenNoRenderer == null) {\n      const isGroupColForNode = this.displayedGroupNode.rowGroupColumn && this.params.column?.isRowGroupDisplayed(this.displayedGroupNode.rowGroupColumn.getId());\n      if (this.displayedGroupNode.key === \"\" && this.displayedGroupNode.group && isGroupColForNode) {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        valueWhenNoRenderer = localeTextFunc(\"blanks\", \"(Blanks)\");\n      } else {\n        valueWhenNoRenderer = value ?? null;\n      }\n    }\n    this.comp.setInnerRenderer(innerCompDetails, valueWhenNoRenderer);\n  }\n  adjustParamsWithDetailsFromRelatedColumn() {\n    const relatedColumn = this.displayedGroupNode.rowGroupColumn;\n    const column = this.params.column;\n    if (!relatedColumn) {\n      return this.params;\n    }\n    const notFullWidth = column != null;\n    if (notFullWidth) {\n      const showingThisRowGroup = column.isRowGroupDisplayed(relatedColumn.getId());\n      if (!showingThisRowGroup) {\n        return this.params;\n      }\n    }\n    const params = this.params;\n    const { value, node } = this.params;\n    const valueFormatted = this.valueService.formatValue(relatedColumn, node, value);\n    const paramsAdjusted = {\n      ...params,\n      valueFormatted\n    };\n    return paramsAdjusted;\n  }\n  addFooterValue() {\n    let footerValueGetter = this.params.totalValueGetter;\n    if (!footerValueGetter) {\n      const legacyGetter = this.params.footerValueGetter;\n      if (legacyGetter) {\n        footerValueGetter = legacyGetter;\n        _warnOnce4(\"As of v31.3, footerValueGetter is deprecated. Use `totalValueGetter` instead.\");\n      }\n    }\n    let footerValue = \"\";\n    if (footerValueGetter) {\n      const paramsClone = _cloneObject(this.params);\n      paramsClone.value = this.params.value;\n      if (typeof footerValueGetter === \"function\") {\n        footerValue = footerValueGetter(paramsClone);\n      } else if (typeof footerValueGetter === \"string\") {\n        footerValue = this.expressionService.evaluate(footerValueGetter, paramsClone);\n      } else {\n        _warnOnce4(\"footerValueGetter should be either a function or a string (expression)\");\n      }\n    } else {\n      const localeTextFunc = this.localeService.getLocaleTextFunc();\n      const footerTotalPrefix = localeTextFunc(\"footerTotal\", \"Total\");\n      footerValue = footerTotalPrefix + \" \" + (this.params.value != null ? this.params.value : \"\");\n    }\n    const innerCompDetails = this.getInnerCompDetails(this.params);\n    this.comp.setInnerRenderer(innerCompDetails, footerValue);\n  }\n  getInnerCompDetails(params) {\n    if (params.fullWidth) {\n      return this.userComponentFactory.getFullWidthGroupRowInnerCellRenderer(\n        this.gos.get(\"groupRowRendererParams\"),\n        params\n      );\n    }\n    const innerCompDetails = this.userComponentFactory.getInnerRendererDetails(params, params);\n    const isGroupRowRenderer = (details) => details && details.componentClass == this.compClass;\n    if (innerCompDetails && !isGroupRowRenderer(innerCompDetails)) {\n      return innerCompDetails;\n    }\n    const relatedColumn = this.displayedGroupNode.rowGroupColumn;\n    const relatedColDef = relatedColumn ? relatedColumn.getColDef() : void 0;\n    if (!relatedColDef) {\n      return;\n    }\n    const relatedCompDetails = this.userComponentFactory.getCellRendererDetails(relatedColDef, params);\n    if (relatedCompDetails && !isGroupRowRenderer(relatedCompDetails)) {\n      return relatedCompDetails;\n    }\n    if (isGroupRowRenderer(relatedCompDetails) && relatedColDef.cellRendererParams && relatedColDef.cellRendererParams.innerRenderer) {\n      const res = this.userComponentFactory.getInnerRendererDetails(relatedColDef.cellRendererParams, params);\n      return res;\n    }\n  }\n  addChildCount() {\n    if (this.params.suppressCount) {\n      return;\n    }\n    this.addManagedListeners(this.displayedGroupNode, {\n      allChildrenCountChanged: this.updateChildCount.bind(this)\n    });\n    this.updateChildCount();\n  }\n  updateChildCount() {\n    const allChildrenCount = this.displayedGroupNode.allChildrenCount;\n    const showingGroupForThisNode = this.isShowRowGroupForThisRow();\n    const showCount = showingGroupForThisNode && allChildrenCount != null && allChildrenCount >= 0;\n    const countString = showCount ? `(${allChildrenCount})` : ``;\n    this.comp.setChildCount(countString);\n  }\n  isShowRowGroupForThisRow() {\n    if (this.gos.get(\"treeData\")) {\n      return true;\n    }\n    const rowGroupColumn = this.displayedGroupNode.rowGroupColumn;\n    if (!rowGroupColumn) {\n      return false;\n    }\n    const column = this.params.column;\n    const thisColumnIsInterested = column == null || column.isRowGroupDisplayed(rowGroupColumn.getId());\n    return thisColumnIsInterested;\n  }\n  addExpandAndContract() {\n    const params = this.params;\n    const setupIcon = (iconName, element) => {\n      const icon = _createIconNoSpan8(iconName, this.gos, null);\n      if (icon) {\n        element.appendChild(icon);\n        this.addDestroyFunc(() => element.removeChild(icon));\n      }\n    };\n    setupIcon(\"groupExpanded\", this.eExpanded);\n    setupIcon(\"groupContracted\", this.eContracted);\n    const eGroupCell = params.eGridCell;\n    const isDoubleClickEdit = this.params.column?.isCellEditable(params.node) && this.gos.get(\"enableGroupEdit\");\n    if (!isDoubleClickEdit && this.isExpandable() && !params.suppressDoubleClickExpand) {\n      this.addManagedListeners(eGroupCell, { dblclick: this.onCellDblClicked.bind(this) });\n    }\n    this.addManagedListeners(this.eExpanded, { click: this.onExpandClicked.bind(this) });\n    this.addManagedListeners(this.eContracted, { click: this.onExpandClicked.bind(this) });\n    this.addManagedListeners(eGroupCell, { keydown: this.onKeyDown.bind(this) });\n    this.addManagedListeners(params.node, { expandedChanged: this.showExpandAndContractIcons.bind(this) });\n    this.showExpandAndContractIcons();\n    const expandableChangedListener = this.onRowNodeIsExpandableChanged.bind(this);\n    this.addManagedListeners(this.displayedGroupNode, {\n      allChildrenCountChanged: expandableChangedListener,\n      masterChanged: expandableChangedListener,\n      groupChanged: expandableChangedListener,\n      hasChildrenChanged: expandableChangedListener\n    });\n  }\n  onExpandClicked(mouseEvent) {\n    if (_isStopPropagationForAgGrid(mouseEvent)) {\n      return;\n    }\n    _stopPropagationForAgGrid4(mouseEvent);\n    this.onExpandOrContract(mouseEvent);\n  }\n  onExpandOrContract(e) {\n    const rowNode = this.displayedGroupNode;\n    const nextExpandState = !rowNode.expanded;\n    if (!nextExpandState && rowNode.sticky) {\n      this.scrollToStickyNode(rowNode);\n    }\n    rowNode.setExpanded(nextExpandState, e);\n  }\n  scrollToStickyNode(rowNode) {\n    const gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n    const scrollFeature = gridBodyCtrl.getScrollFeature();\n    scrollFeature.setVerticalScrollPosition(rowNode.rowTop - rowNode.stickyRowTop);\n  }\n  isExpandable() {\n    if (this.showingValueForOpenedParent) {\n      return true;\n    }\n    const rowNode = this.displayedGroupNode;\n    const reducedLeafNode = this.columnModel.isPivotMode() && rowNode.leafGroup;\n    const expandableGroup = rowNode.isExpandable() && !rowNode.footer && !reducedLeafNode;\n    if (!expandableGroup) {\n      return false;\n    }\n    const column = this.params.column;\n    const displayingForOneColumnOnly = column != null && typeof column.getColDef().showRowGroup === \"string\";\n    if (displayingForOneColumnOnly) {\n      const showing = this.isShowRowGroupForThisRow();\n      return showing;\n    }\n    return true;\n  }\n  showExpandAndContractIcons() {\n    const { params, displayedGroupNode: displayedGroup, columnModel } = this;\n    const { node } = params;\n    const isExpandable = this.isExpandable();\n    if (isExpandable) {\n      const expanded = this.showingValueForOpenedParent ? true : node.expanded;\n      this.comp.setExpandedDisplayed(expanded);\n      this.comp.setContractedDisplayed(!expanded);\n    } else {\n      this.comp.setExpandedDisplayed(false);\n      this.comp.setContractedDisplayed(false);\n    }\n    const pivotMode = columnModel.isPivotMode();\n    const pivotModeAndLeafGroup = pivotMode && displayedGroup.leafGroup;\n    const addExpandableCss = isExpandable && !pivotModeAndLeafGroup;\n    const isTotalFooterNode = node.footer && node.level === -1;\n    this.comp.addOrRemoveCssClass(\"ag-cell-expandable\", addExpandableCss);\n    this.comp.addOrRemoveCssClass(\"ag-row-group\", addExpandableCss);\n    if (pivotMode) {\n      this.comp.addOrRemoveCssClass(\"ag-pivot-leaf-group\", !!pivotModeAndLeafGroup);\n    } else if (!isTotalFooterNode) {\n      this.comp.addOrRemoveCssClass(\"ag-row-group-leaf-indent\", !addExpandableCss);\n    }\n  }\n  onRowNodeIsExpandableChanged() {\n    this.showExpandAndContractIcons();\n    this.setIndent();\n    this.refreshAriaExpanded();\n  }\n  setupIndent() {\n    const node = this.params.node;\n    const suppressPadding = this.params.suppressPadding;\n    if (!suppressPadding) {\n      this.addManagedListeners(node, { uiLevelChanged: this.setIndent.bind(this) });\n      this.setIndent();\n    }\n  }\n  setIndent() {\n    if (this.gos.get(\"groupHideOpenParents\")) {\n      return;\n    }\n    const params = this.params;\n    const rowNode = params.node;\n    const fullWithRow = !!params.colDef;\n    const treeData = this.gos.get(\"treeData\");\n    const manyDimensionThisColumn = !fullWithRow || treeData || params.colDef.showRowGroup === true;\n    const paddingCount = manyDimensionThisColumn ? rowNode.uiLevel : 0;\n    if (this.indentClass) {\n      this.comp.addOrRemoveCssClass(this.indentClass, false);\n    }\n    this.indentClass = \"ag-row-group-indent-\" + paddingCount;\n    this.comp.addOrRemoveCssClass(this.indentClass, true);\n    this.eGui.style.setProperty(\"--ag-indentation-level\", String(paddingCount));\n  }\n  addFullWidthRowDraggerIfNeeded() {\n    if (!this.params.fullWidth || !this.params.rowDrag) {\n      return;\n    }\n    const rowDragComp = new RowDragComp(() => this.params.value, this.params.node);\n    this.createManagedBean(rowDragComp);\n    this.eGui.insertAdjacentElement(\"afterbegin\", rowDragComp.getGui());\n  }\n  isUserWantsSelected() {\n    const paramsCheckbox = this.params.checkbox;\n    return typeof paramsCheckbox === \"function\" || paramsCheckbox === true;\n  }\n  addCheckboxIfNeeded() {\n    const rowNode = this.displayedGroupNode;\n    const checkboxNeeded = this.isUserWantsSelected() && // footers cannot be selected\n    !rowNode.footer && // pinned rows cannot be selected\n    !rowNode.rowPinned && // details cannot be selected\n    !rowNode.detail;\n    if (checkboxNeeded) {\n      const cbSelectionComponent = new CheckboxSelectionComponent();\n      this.createBean(cbSelectionComponent);\n      cbSelectionComponent.init({\n        rowNode: this.params.node,\n        // when groupHideOpenParents = true and group expanded, we want the checkbox to refer to leaf node state (not group node state)\n        column: this.params.column,\n        overrides: {\n          isVisible: this.params.checkbox,\n          callbackParams: this.params,\n          removeHidden: true\n        }\n      });\n      this.eCheckbox.appendChild(cbSelectionComponent.getGui());\n      this.addDestroyFunc(() => {\n        this.eCheckbox.removeChild(cbSelectionComponent.getGui());\n        this.destroyBean(cbSelectionComponent);\n      });\n    }\n    this.comp.setCheckboxVisible(checkboxNeeded);\n  }\n  onKeyDown(event) {\n    const isEnterKey = event.key === KeyCode12.ENTER;\n    if (!isEnterKey || this.params.suppressEnterExpand) {\n      return;\n    }\n    const cellEditable = this.params.column && this.params.column.isCellEditable(this.params.node);\n    if (cellEditable) {\n      return;\n    }\n    this.onExpandOrContract(event);\n  }\n  onCellDblClicked(mouseEvent) {\n    if (_isStopPropagationForAgGrid(mouseEvent)) {\n      return;\n    }\n    const targetIsExpandIcon = _isElementInEventPath(this.eExpanded, mouseEvent) || _isElementInEventPath(this.eContracted, mouseEvent);\n    if (!targetIsExpandIcon) {\n      this.onExpandOrContract(mouseEvent);\n    }\n  }\n};\n\n// enterprise-modules/core/src/rendering/groupCellRenderer.ts\nvar groupTemplate = (\n  /* html */\n  `<span class=\"ag-cell-wrapper\">\n        <span class=\"ag-group-expanded\" data-ref=\"eExpanded\"></span>\n        <span class=\"ag-group-contracted\" data-ref=\"eContracted\"></span>\n        <span class=\"ag-group-checkbox ag-invisible\" data-ref=\"eCheckbox\"></span>\n        <span class=\"ag-group-value\" data-ref=\"eValue\"></span>\n        <span class=\"ag-group-child-count\" data-ref=\"eChildCount\"></span>\n    </span>`\n);\nvar GroupCellRenderer = class extends Component11 {\n  constructor() {\n    super(groupTemplate);\n    this.eExpanded = RefPlaceholder9;\n    this.eContracted = RefPlaceholder9;\n    this.eCheckbox = RefPlaceholder9;\n    this.eValue = RefPlaceholder9;\n    this.eChildCount = RefPlaceholder9;\n  }\n  init(params) {\n    const compProxy = {\n      setInnerRenderer: (compDetails, valueToDisplay) => this.setRenderDetails(compDetails, valueToDisplay),\n      setChildCount: (count) => this.eChildCount.textContent = count,\n      addOrRemoveCssClass: (cssClass, value) => this.addOrRemoveCssClass(cssClass, value),\n      setContractedDisplayed: (expanded) => _setDisplayed5(this.eContracted, expanded),\n      setExpandedDisplayed: (expanded) => _setDisplayed5(this.eExpanded, expanded),\n      setCheckboxVisible: (visible) => this.eCheckbox.classList.toggle(\"ag-invisible\", !visible)\n    };\n    const ctrl = this.createManagedBean(new GroupCellRendererCtrl());\n    const fullWidth = !params.colDef;\n    const eGui = this.getGui();\n    ctrl.init(compProxy, eGui, this.eCheckbox, this.eExpanded, this.eContracted, this.constructor, params);\n    if (fullWidth) {\n      _setAriaRole5(eGui, ctrl.getCellAriaRole());\n    }\n  }\n  setRenderDetails(compDetails, valueToDisplay) {\n    if (compDetails) {\n      const componentPromise = compDetails.newAgStackInstance();\n      if (componentPromise == null) {\n        return;\n      }\n      componentPromise.then((comp) => {\n        if (!comp) {\n          return;\n        }\n        const destroyComp = () => this.destroyBean(comp);\n        if (this.isAlive()) {\n          this.eValue.appendChild(comp.getGui());\n          this.addDestroyFunc(destroyComp);\n        } else {\n          destroyComp();\n        }\n      });\n    } else {\n      this.eValue.innerText = valueToDisplay;\n    }\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to have public here instead of private or protected\n  destroy() {\n    this.destroyBean(this.innerCellRenderer);\n    super.destroy();\n  }\n  refresh() {\n    return false;\n  }\n};\n\n// enterprise-modules/advanced-filter/dist/package/main.esm.mjs\nimport { BeanStub as BeanStub5, _exists as _exists3, _parseDateTimeFromString, _serialiseDate, _toStringOrNull } from \"ag-grid-community\";\nimport { BeanStub as BeanStub52, _exists as _exists7, _isClientSideRowModel, _isServerSideRowModel, _warnOnce as _warnOnce5 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub42, _getAbsoluteHeight, _getAbsoluteWidth, _removeFromParent as _removeFromParent2 } from \"ag-grid-community\";\nimport { Component as Component32, RefPlaceholder as RefPlaceholder32, _createIconNoSpan as _createIconNoSpan9, _makeNull as _makeNull2, _setDisabled } from \"ag-grid-community\";\nimport {\n  AgInputTextFieldSelector as AgInputTextFieldSelector2,\n  Component as Component22,\n  KeyCode as KeyCode22,\n  RefPlaceholder as RefPlaceholder22,\n  _isNothingFocused as _isNothingFocused2,\n  _makeNull\n} from \"ag-grid-community\";\nimport { KeyCode as KeyCode13, PopupComponent, RefPlaceholder as RefPlaceholder10, _exists as _exists32, _fuzzySuggestions as _fuzzySuggestions2 } from \"ag-grid-community\";\nimport { Component as Component12, _escapeString as _escapeString4, _exists as _exists22 } from \"ag-grid-community\";\nimport {\n  Component as Component42,\n  KeyCode as KeyCode32,\n  _clearElement as _clearElement5,\n  _getActiveDomElement as _getActiveDomElement6,\n  _setAriaColIndex,\n  _setAriaColSpan,\n  _setAriaRole as _setAriaRole6,\n  _setAriaRowIndex,\n  _setDisplayed as _setDisplayed6\n} from \"ag-grid-community\";\nimport { Component as Component92, RefPlaceholder as RefPlaceholder72, TooltipFeature as TooltipFeature3, _exists as _exists6, _setDisabled as _setDisabled2 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub22, DragSourceType } from \"ag-grid-community\";\nimport { Component as Component52, RefPlaceholder as RefPlaceholder42, TooltipFeature as TooltipFeature2, _setAriaLabel as _setAriaLabel22, _setAriaLevel as _setAriaLevel2 } from \"ag-grid-community\";\nimport {\n  AgInputTextFieldSelector as AgInputTextFieldSelector22,\n  _setAriaLabel as _setAriaLabel6,\n  _setAriaLabelledBy,\n  _setDisplayed as _setDisplayed22,\n  _stopPropagationForAgGrid as _stopPropagationForAgGrid5\n} from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub32,\n  KeyCode as KeyCode42,\n  _getActiveDomElement as _getActiveDomElement22,\n  _isStopPropagationForAgGrid as _isStopPropagationForAgGrid2,\n  _stopPropagationForAgGrid as _stopPropagationForAgGrid22\n} from \"ag-grid-community\";\nimport {\n  DragSourceType as DragSourceType2,\n  KeyCode as KeyCode62,\n  RefPlaceholder as RefPlaceholder62,\n  TabGuardComp as TabGuardComp5,\n  TooltipFeature as TooltipFeature22,\n  _createIconNoSpan as _createIconNoSpan22,\n  _removeAriaExpanded as _removeAriaExpanded2,\n  _setAriaDisabled as _setAriaDisabled2,\n  _setAriaExpanded as _setAriaExpanded5,\n  _setAriaLabel as _setAriaLabel52,\n  _setAriaLevel as _setAriaLevel22,\n  _setDisplayed as _setDisplayed42,\n  _setVisible,\n  _stopPropagationForAgGrid as _stopPropagationForAgGrid52\n} from \"ag-grid-community\";\nimport { Component as Component62, _exists as _exists4, _removeFromParent } from \"ag-grid-community\";\nimport {\n  AgInputDateField,\n  AgInputNumberField,\n  AgInputTextField,\n  Component as Component72,\n  KeyCode as KeyCode52,\n  RefPlaceholder as RefPlaceholder52,\n  _exists as _exists5,\n  _setAriaDescribedBy,\n  _setAriaLabel as _setAriaLabel32,\n  _setDisplayed as _setDisplayed32,\n  _stopPropagationForAgGrid as _stopPropagationForAgGrid32\n} from \"ag-grid-community\";\nimport { Component as Component82 } from \"ag-grid-community\";\nimport {\n  AgInputTextFieldSelector as AgInputTextFieldSelector3,\n  _setAriaLabel as _setAriaLabel42,\n  _setAriaLabelledBy as _setAriaLabelledBy2,\n  _stopPropagationForAgGrid as _stopPropagationForAgGrid42\n} from \"ag-grid-community\";\nfunction getAdvancedFilterModel(beans) {\n  return beans.filterManager?.getAdvancedFilterModel() ?? null;\n}\nfunction setAdvancedFilterModel(beans, advancedFilterModel) {\n  beans.filterManager?.setAdvancedFilterModel(advancedFilterModel);\n}\nfunction showAdvancedFilterBuilder(beans) {\n  beans.filterManager?.toggleAdvancedFilterBuilder(true, \"api\");\n}\nfunction hideAdvancedFilterBuilder(beans) {\n  beans.filterManager?.toggleAdvancedFilterBuilder(false, \"api\");\n}\nvar ADVANCED_FILTER_LOCALE_TEXT = {\n  ariaAdvancedFilterBuilderItem: (variableValues) => `${variableValues[0]}. Level ${variableValues[1]}. Press ENTER to edit`,\n  ariaAdvancedFilterBuilderItemValidation: (variableValues) => `${variableValues[0]}. Level ${variableValues[1]}. ${variableValues[2]} Press ENTER to edit`,\n  ariaAdvancedFilterBuilderList: \"Advanced Filter Builder List\",\n  ariaAdvancedFilterBuilderFilterItem: \"Filter Condition\",\n  ariaAdvancedFilterBuilderGroupItem: \"Filter Group\",\n  ariaAdvancedFilterBuilderColumn: \"Column\",\n  ariaAdvancedFilterBuilderOption: \"Option\",\n  ariaAdvancedFilterBuilderValue: \"Value\",\n  ariaAdvancedFilterBuilderJoinOperator: \"Join Operator\",\n  ariaAdvancedFilterInput: \"Advanced Filter Input\",\n  ariaLabelAdvancedFilterAutocomplete: \"Advanced Filter Autocomplete\",\n  advancedFilterContains: \"contains\",\n  advancedFilterNotContains: \"does not contain\",\n  advancedFilterTextEquals: \"equals\",\n  advancedFilterTextNotEqual: \"does not equal\",\n  advancedFilterStartsWith: \"begins with\",\n  advancedFilterEndsWith: \"ends with\",\n  advancedFilterBlank: \"is blank\",\n  advancedFilterNotBlank: \"is not blank\",\n  advancedFilterEquals: \"=\",\n  advancedFilterNotEqual: \"!=\",\n  advancedFilterGreaterThan: \">\",\n  advancedFilterGreaterThanOrEqual: \">=\",\n  advancedFilterLessThan: \"<\",\n  advancedFilterLessThanOrEqual: \"<=\",\n  advancedFilterTrue: \"is true\",\n  advancedFilterFalse: \"is false\",\n  advancedFilterAnd: \"AND\",\n  advancedFilterOr: \"OR\",\n  advancedFilterApply: \"Apply\",\n  advancedFilterBuilder: \"Builder\",\n  advancedFilterValidationMissingColumn: \"Column is missing\",\n  advancedFilterValidationMissingOption: \"Option is missing\",\n  advancedFilterValidationMissingValue: \"Value is missing\",\n  advancedFilterValidationInvalidColumn: \"Column not found\",\n  advancedFilterValidationInvalidOption: \"Option not found\",\n  advancedFilterValidationMissingQuote: \"Value is missing an end quote\",\n  advancedFilterValidationNotANumber: \"Value is not a number\",\n  advancedFilterValidationInvalidDate: \"Value is not a valid date\",\n  advancedFilterValidationMissingCondition: \"Condition is missing\",\n  advancedFilterValidationJoinOperatorMismatch: \"Join operators within a condition must be the same\",\n  advancedFilterValidationInvalidJoinOperator: \"Join operator not found\",\n  advancedFilterValidationMissingEndBracket: \"Missing end bracket\",\n  advancedFilterValidationExtraEndBracket: \"Too many end brackets\",\n  advancedFilterValidationMessage: (variableValues) => `Expression has an error. ${variableValues[0]} - ${variableValues[1]}.`,\n  advancedFilterValidationMessageAtEnd: (variableValues) => `Expression has an error. ${variableValues[0]} at end of expression.`,\n  advancedFilterBuilderTitle: \"Advanced Filter\",\n  advancedFilterBuilderApply: \"Apply\",\n  advancedFilterBuilderCancel: \"Cancel\",\n  advancedFilterBuilderAddButtonTooltip: \"Add Filter or Group\",\n  advancedFilterBuilderRemoveButtonTooltip: \"Remove\",\n  advancedFilterBuilderMoveUpButtonTooltip: \"Move Up\",\n  advancedFilterBuilderMoveDownButtonTooltip: \"Move Down\",\n  advancedFilterBuilderAddJoin: \"Add Group\",\n  advancedFilterBuilderAddCondition: \"Add Filter\",\n  advancedFilterBuilderSelectColumn: \"Select a column\",\n  advancedFilterBuilderSelectOption: \"Select an option\",\n  advancedFilterBuilderEnterValue: \"Enter a value...\",\n  advancedFilterBuilderValidationAlreadyApplied: \"Current filter already applied.\",\n  advancedFilterBuilderValidationIncomplete: \"Not all conditions are complete.\",\n  advancedFilterBuilderValidationSelectColumn: \"Must select a column.\",\n  advancedFilterBuilderValidationSelectOption: \"Must select an option.\",\n  advancedFilterBuilderValidationEnterValue: \"Must enter a value.\"\n};\nfunction getSearchString(value, position, endPosition) {\n  if (!value) {\n    return \"\";\n  }\n  const numChars = endPosition - position;\n  return numChars ? value.slice(0, value.length - numChars) : value;\n}\nfunction updateExpression(expression, startPosition, endPosition, updatedValuePart, appendSpace, appendQuote, empty) {\n  const secondPartStartPosition = endPosition + (!expression.length || empty ? 0 : 1);\n  let positionOffset = 0;\n  if (appendSpace) {\n    if (expression[secondPartStartPosition] === \" \") {\n      positionOffset = 1;\n    } else {\n      updatedValuePart += \" \";\n      if (appendQuote) {\n        updatedValuePart += `\"`;\n      }\n    }\n  }\n  const updatedValue = expression.slice(0, startPosition) + updatedValuePart + expression.slice(secondPartStartPosition);\n  return { updatedValue, updatedPosition: startPosition + updatedValuePart.length + positionOffset };\n}\nfunction findStartPosition(expression, position, endPosition) {\n  let startPosition = position;\n  while (startPosition < endPosition) {\n    const char = expression[startPosition];\n    if (char !== \" \") {\n      break;\n    }\n    startPosition++;\n  }\n  return startPosition;\n}\nfunction findEndPosition(expression, position, includeCloseBracket, isStartPositionUnknown) {\n  let endPosition = position;\n  let isEmpty = false;\n  while (endPosition < expression.length) {\n    const char = expression[endPosition];\n    if (char === \"(\") {\n      if (isStartPositionUnknown && expression[endPosition - 1] === \" \") {\n        isEmpty = true;\n      } else {\n        endPosition = endPosition - 1;\n      }\n      break;\n    } else if (char === \" \" || includeCloseBracket && char === \")\") {\n      endPosition = endPosition - 1;\n      break;\n    }\n    endPosition++;\n  }\n  return { endPosition, isEmpty };\n}\nfunction checkAndUpdateExpression(params, userValue, displayValue, endPosition) {\n  if (displayValue !== userValue) {\n    params.expression = updateExpression(\n      params.expression,\n      endPosition - userValue.length + 1,\n      endPosition,\n      displayValue\n    ).updatedValue;\n  }\n}\nfunction escapeQuotes(value) {\n  return value.replace(/(['\"])/, \"\\\\$1\");\n}\nvar ColumnParser = class {\n  constructor(params, startPosition) {\n    this.params = params;\n    this.startPosition = startPosition;\n    this.type = \"column\";\n    this.valid = true;\n    this.hasStartChar = false;\n    this.hasEndChar = false;\n    this.colName = \"\";\n  }\n  parse(char, position) {\n    if (char === ColFilterExpressionParser.COL_START_CHAR && !this.colName) {\n      this.hasStartChar = true;\n    } else if (char === ColFilterExpressionParser.COL_END_CHAR && this.hasStartChar) {\n      const isMatch = this.parseColumn(false, position);\n      if (isMatch) {\n        this.hasEndChar = true;\n        return false;\n      } else {\n        this.colName += char;\n      }\n    } else {\n      this.colName += char;\n    }\n    return void 0;\n  }\n  getDisplayValue() {\n    return (this.hasStartChar ? ColFilterExpressionParser.COL_START_CHAR : \"\") + this.colName + (this.hasEndChar ? ColFilterExpressionParser.COL_END_CHAR : \"\");\n  }\n  getColId() {\n    return this.colId;\n  }\n  complete(position) {\n    this.parseColumn(true, position);\n  }\n  getValidationError() {\n    return this.valid ? null : {\n      message: this.params.advancedFilterExpressionService.translate(\n        \"advancedFilterValidationInvalidColumn\"\n      ),\n      startPosition: this.startPosition,\n      endPosition: this.endPosition ?? this.params.expression.length - 1\n    };\n  }\n  parseColumn(fromComplete, endPosition) {\n    this.endPosition = endPosition;\n    const colValue = this.params.advancedFilterExpressionService.getColId(this.colName);\n    if (colValue && this.hasStartChar) {\n      this.colId = colValue.colId;\n      checkAndUpdateExpression(this.params, this.colName, colValue.columnName, endPosition - 1);\n      this.colName = colValue.columnName;\n      this.column = this.params.columnModel.getColDefCol(this.colId);\n      if (this.column) {\n        this.baseCellDataType = this.params.dataTypeService?.getBaseDataType(this.column) ?? \"text\";\n        return true;\n      }\n    }\n    if (fromComplete) {\n      this.valid = false;\n    }\n    this.baseCellDataType = \"text\";\n    return false;\n  }\n};\nvar OperatorParser = class {\n  constructor(params, startPosition, baseCellDataType) {\n    this.params = params;\n    this.startPosition = startPosition;\n    this.baseCellDataType = baseCellDataType;\n    this.type = \"operator\";\n    this.valid = true;\n    this.expectedNumOperands = 0;\n    this.operator = \"\";\n  }\n  parse(char, position) {\n    if (char === \" \" || char === \")\") {\n      const isMatch = this.parseOperator(false, position - 1);\n      if (isMatch) {\n        return true;\n      } else {\n        this.operator += char;\n      }\n    } else {\n      this.operator += char;\n    }\n    return void 0;\n  }\n  complete(position) {\n    this.parseOperator(true, position);\n  }\n  getValidationError() {\n    return this.valid ? null : {\n      message: this.params.advancedFilterExpressionService.translate(\n        \"advancedFilterValidationInvalidOption\"\n      ),\n      startPosition: this.startPosition,\n      endPosition: this.endPosition ?? this.params.expression.length - 1\n    };\n  }\n  getDisplayValue() {\n    return this.operator;\n  }\n  getOperatorKey() {\n    return this.parsedOperator;\n  }\n  parseOperator(fromComplete, endPosition) {\n    const operatorForType = this.params.advancedFilterExpressionService.getDataTypeExpressionOperator(\n      this.baseCellDataType\n    );\n    const parsedOperator = operatorForType.findOperator(this.operator);\n    this.endPosition = endPosition;\n    if (parsedOperator) {\n      this.parsedOperator = parsedOperator;\n      const operator = operatorForType.operators[parsedOperator];\n      this.expectedNumOperands = operator.numOperands;\n      const operatorDisplayValue = operator.displayValue;\n      checkAndUpdateExpression(this.params, this.operator, operatorDisplayValue, endPosition);\n      this.operator = operatorDisplayValue;\n      return true;\n    }\n    const isPartialMatch = parsedOperator === null;\n    if (fromComplete || !isPartialMatch) {\n      this.valid = false;\n    }\n    return false;\n  }\n};\nvar OperandParser = class {\n  constructor(params, startPosition, baseCellDataType, column) {\n    this.params = params;\n    this.startPosition = startPosition;\n    this.baseCellDataType = baseCellDataType;\n    this.column = column;\n    this.type = \"operand\";\n    this.valid = true;\n    this.operand = \"\";\n    this.validationMessage = null;\n  }\n  parse(char, position) {\n    if (char === \" \") {\n      if (this.quotes) {\n        this.operand += char;\n      } else {\n        this.parseOperand(false, position);\n        return true;\n      }\n    } else if (char === \")\") {\n      if (this.baseCellDataType === \"number\" || !this.quotes) {\n        this.parseOperand(false, position - 1);\n        return true;\n      } else {\n        this.operand += char;\n      }\n    } else if (!this.operand && !this.quotes && (char === `'` || char === `\"`)) {\n      this.quotes = char;\n    } else if (this.quotes && char === this.quotes) {\n      this.parseOperand(false, position);\n      return false;\n    } else {\n      this.operand += char;\n    }\n    return void 0;\n  }\n  complete(position) {\n    this.parseOperand(true, position);\n  }\n  getValidationError() {\n    return this.validationMessage ? {\n      message: this.validationMessage,\n      startPosition: this.startPosition,\n      endPosition: this.endPosition ?? this.params.expression.length - 1\n    } : null;\n  }\n  getRawValue() {\n    return this.operand;\n  }\n  getModelValue() {\n    return this.modelValue;\n  }\n  parseOperand(fromComplete, position) {\n    const { advancedFilterExpressionService } = this.params;\n    this.endPosition = position;\n    this.modelValue = this.operand;\n    if (fromComplete && this.quotes) {\n      this.valid = false;\n      this.validationMessage = advancedFilterExpressionService.translate(\"advancedFilterValidationMissingQuote\");\n    } else if (this.modelValue === \"\") {\n      this.valid = false;\n      this.validationMessage = advancedFilterExpressionService.translate(\"advancedFilterValidationMissingValue\");\n    } else {\n      const modelValue = advancedFilterExpressionService.getOperandModelValue(\n        this.operand,\n        this.baseCellDataType,\n        this.column\n      );\n      if (modelValue != null) {\n        this.modelValue = modelValue;\n      }\n      switch (this.baseCellDataType) {\n        case \"number\":\n          if (this.quotes || isNaN(this.modelValue)) {\n            this.valid = false;\n            this.validationMessage = advancedFilterExpressionService.translate(\n              \"advancedFilterValidationNotANumber\"\n            );\n          }\n          break;\n        case \"date\":\n        case \"dateString\":\n          if (modelValue == null) {\n            this.valid = false;\n            this.validationMessage = advancedFilterExpressionService.translate(\n              \"advancedFilterValidationInvalidDate\"\n            );\n          }\n          break;\n      }\n    }\n  }\n};\nvar ColFilterExpressionParser = class {\n  constructor(params, startPosition) {\n    this.params = params;\n    this.startPosition = startPosition;\n    this.isAwaiting = true;\n  }\n  parseExpression() {\n    let i = this.startPosition;\n    const { expression } = this.params;\n    while (i < expression.length) {\n      const char = expression[i];\n      if (char === \" \" && this.isAwaiting) {\n      } else {\n        this.isAwaiting = false;\n        if (!this.parser) {\n          let parser;\n          if (!this.columnParser) {\n            this.columnParser = new ColumnParser(this.params, i);\n            parser = this.columnParser;\n          } else if (!this.operatorParser) {\n            this.operatorParser = new OperatorParser(this.params, i, this.columnParser.baseCellDataType);\n            parser = this.operatorParser;\n          } else {\n            this.operandParser = new OperandParser(\n              this.params,\n              i,\n              this.columnParser.baseCellDataType,\n              this.columnParser.column\n            );\n            parser = this.operandParser;\n          }\n          this.parser = parser;\n        }\n        const hasCompletedOnPrevChar = this.parser.parse(char, i);\n        if (hasCompletedOnPrevChar != null) {\n          if (this.isComplete()) {\n            return this.returnEndPosition(hasCompletedOnPrevChar ? i - 1 : i, true);\n          }\n          this.parser = void 0;\n          this.isAwaiting = true;\n        }\n      }\n      i++;\n    }\n    this.parser?.complete?.(i - 1);\n    return this.returnEndPosition(i);\n  }\n  isValid() {\n    return this.isComplete() && this.columnParser.valid && this.operatorParser.valid && (!this.operandParser || this.operandParser.valid);\n  }\n  getValidationError() {\n    const validationError = this.columnParser?.getValidationError() ?? this.operatorParser?.getValidationError() ?? this.operandParser?.getValidationError();\n    if (validationError) {\n      return validationError;\n    }\n    const endPosition = this.params.expression.length;\n    let translateKey;\n    if (!this.columnParser) {\n      translateKey = \"advancedFilterValidationMissingColumn\";\n    } else if (!this.operatorParser) {\n      translateKey = \"advancedFilterValidationMissingOption\";\n    } else if (this.operatorParser.expectedNumOperands && !this.operandParser) {\n      translateKey = \"advancedFilterValidationMissingValue\";\n    }\n    if (translateKey) {\n      return {\n        message: this.params.advancedFilterExpressionService.translate(translateKey),\n        startPosition: endPosition,\n        endPosition\n      };\n    }\n    return null;\n  }\n  getFunctionString(params) {\n    return this.getFunctionCommon(params, (operandIndex, operatorIndex, colId, evaluatorParamsIndex) => {\n      const escapedColId = escapeQuotes(colId);\n      const operand = operandIndex == null ? \"\" : `, params.operands[${operandIndex}]`;\n      return `params.operators[${operatorIndex}].evaluator(expressionProxy.getValue('${escapedColId}', node), node, params.evaluatorParams[${evaluatorParamsIndex}]${operand})`;\n    });\n  }\n  getFunctionParsed(params) {\n    return this.getFunctionCommon(params, (operandIndex, operatorIndex, colId, evaluatorParamsIndex) => {\n      return (expressionProxy, node, p) => p.operators[operatorIndex].evaluator(\n        expressionProxy.getValue(colId, node),\n        node,\n        p.evaluatorParams[evaluatorParamsIndex],\n        operandIndex == null ? void 0 : p.operands[operandIndex]\n      );\n    });\n  }\n  getAutocompleteListParams(position) {\n    if (this.isColumnPosition(position)) {\n      return this.getColumnAutocompleteListParams(position);\n    }\n    if (this.isOperatorPosition(position)) {\n      return this.getOperatorAutocompleteListParams(position);\n    }\n    if (this.isBeyondEndPosition(position)) {\n      return void 0;\n    }\n    return { enabled: false };\n  }\n  updateExpression(position, updateEntry, type) {\n    const { expression } = this.params;\n    if (this.isColumnPosition(position)) {\n      return updateExpression(\n        this.params.expression,\n        this.startPosition,\n        this.columnParser?.getColId() ? this.columnParser.endPosition : findEndPosition(expression, position).endPosition,\n        this.params.advancedFilterExpressionService.getColumnValue(updateEntry),\n        true\n      );\n    } else if (this.isOperatorPosition(position)) {\n      const baseCellDataType = this.getBaseCellDataTypeFromOperatorAutocompleteType(type);\n      const hasOperand = this.hasOperand(baseCellDataType, updateEntry.key);\n      const doesOperandNeedQuotes = hasOperand && this.doesOperandNeedQuotes(baseCellDataType);\n      let update;\n      if (this.operatorParser?.startPosition != null && position < this.operatorParser.startPosition) {\n        update = updateExpression(\n          expression,\n          position,\n          position,\n          updateEntry.displayValue ?? updateEntry.key,\n          hasOperand,\n          doesOperandNeedQuotes\n        );\n      } else {\n        let endPosition;\n        let empty = false;\n        if (this.operatorParser?.getOperatorKey()) {\n          endPosition = this.operatorParser.endPosition;\n        } else {\n          const { endPosition: calculatedEndPosition, isEmpty } = findEndPosition(\n            expression,\n            position,\n            true,\n            true\n          );\n          endPosition = calculatedEndPosition;\n          empty = isEmpty;\n        }\n        update = updateExpression(\n          expression,\n          findStartPosition(expression, this.columnParser.endPosition + 1, endPosition),\n          endPosition,\n          updateEntry.displayValue ?? updateEntry.key,\n          hasOperand,\n          doesOperandNeedQuotes,\n          empty\n        );\n      }\n      return { ...update, hideAutocomplete: !hasOperand };\n    }\n    return null;\n  }\n  getModel() {\n    const colId = this.columnParser.getColId();\n    const model = {\n      filterType: this.columnParser.baseCellDataType,\n      colId,\n      type: this.operatorParser.getOperatorKey()\n    };\n    if (this.operatorParser.expectedNumOperands) {\n      model.filter = this.operandParser.getModelValue();\n    }\n    return model;\n  }\n  getFunctionCommon(params, processFunc) {\n    const colId = this.columnParser.getColId();\n    const operator = this.operatorParser?.getOperatorKey();\n    const { operators, evaluatorParams, operands } = params;\n    const operatorForColumn = this.params.advancedFilterExpressionService.getExpressionOperator(\n      this.columnParser.baseCellDataType,\n      operator\n    );\n    const operatorIndex = this.addToListAndGetIndex(operators, operatorForColumn);\n    const evaluatorParamsForColumn = this.params.advancedFilterExpressionService.getExpressionEvaluatorParams(colId);\n    const evaluatorParamsIndex = this.addToListAndGetIndex(evaluatorParams, evaluatorParamsForColumn);\n    const operandIndex = this.operatorParser?.expectedNumOperands === 0 ? void 0 : this.addToListAndGetIndex(operands, this.getOperandValue());\n    return processFunc(operandIndex, operatorIndex, colId, evaluatorParamsIndex);\n  }\n  getOperandValue() {\n    let operand = this.operandParser.getRawValue();\n    const { baseCellDataType, column } = this.columnParser;\n    switch (baseCellDataType) {\n      case \"number\":\n        operand = Number(operand);\n        break;\n      case \"date\":\n      case \"dateString\":\n        operand = this.params.valueService.parseValue(column, null, operand, void 0);\n        break;\n    }\n    if (baseCellDataType === \"dateString\") {\n      const { dataTypeService } = this.params;\n      return dataTypeService ? dataTypeService.getDateParserFunction(column)(operand) : operand;\n    }\n    return operand;\n  }\n  isComplete() {\n    return !!(this.operatorParser && (!this.operatorParser.expectedNumOperands || this.operatorParser.expectedNumOperands && this.operandParser));\n  }\n  isColumnPosition(position) {\n    return !this.columnParser || this.columnParser.endPosition == null || position <= this.columnParser.endPosition + 1;\n  }\n  isOperatorPosition(position) {\n    return !this.operatorParser || this.operatorParser.endPosition == null || position <= this.operatorParser.endPosition + 1;\n  }\n  isBeyondEndPosition(position) {\n    return this.isComplete() && this.endPosition != null && position > this.endPosition + 1 && this.endPosition + 1 < this.params.expression.length;\n  }\n  returnEndPosition(returnPosition, treatAsEnd) {\n    this.endPosition = treatAsEnd ? returnPosition : returnPosition - 1;\n    return returnPosition;\n  }\n  getColumnAutocompleteListParams(position) {\n    return this.params.advancedFilterExpressionService.generateAutocompleteListParams(\n      this.params.advancedFilterExpressionService.getColumnAutocompleteEntries(),\n      \"column\",\n      this.getColumnSearchString(position)\n    );\n  }\n  getColumnSearchString(position) {\n    const columnName = this.columnParser?.getDisplayValue() ?? \"\";\n    const searchString = getSearchString(\n      columnName,\n      position,\n      this.columnParser?.endPosition == null ? this.params.expression.length : this.columnParser.endPosition + 1\n    );\n    const containsStartChar = this.columnParser?.hasStartChar && searchString.length > 0;\n    const containsEndChar = this.columnParser?.hasEndChar && searchString.length === columnName.length + 2;\n    if (containsStartChar) {\n      return searchString.slice(1, containsEndChar ? -1 : void 0);\n    }\n    return searchString;\n  }\n  getOperatorAutocompleteListParams(position) {\n    const column = this.columnParser?.column;\n    if (!column) {\n      return { enabled: false };\n    }\n    const baseCellDataType = this.columnParser.baseCellDataType;\n    const searchString = this.operatorParser?.startPosition != null && position < this.operatorParser.startPosition ? \"\" : getSearchString(\n      this.operatorParser?.getDisplayValue() ?? \"\",\n      position,\n      this.operatorParser?.endPosition == null ? this.params.expression.length : this.operatorParser.endPosition + 1\n    );\n    return this.params.advancedFilterExpressionService.generateAutocompleteListParams(\n      this.params.advancedFilterExpressionService.getOperatorAutocompleteEntries(column, baseCellDataType),\n      `operator-${baseCellDataType}`,\n      searchString\n    );\n  }\n  getBaseCellDataTypeFromOperatorAutocompleteType(type) {\n    return type?.replace(\"operator-\", \"\");\n  }\n  hasOperand(baseCellDataType, operator) {\n    return !baseCellDataType || !operator || (this.params.advancedFilterExpressionService.getExpressionOperator(baseCellDataType, operator)?.numOperands ?? 0) > 0;\n  }\n  doesOperandNeedQuotes(baseCellDataType) {\n    return baseCellDataType !== \"number\";\n  }\n  addToListAndGetIndex(list, value) {\n    const index = list.length;\n    list.push(value);\n    return index;\n  }\n};\nColFilterExpressionParser.COL_START_CHAR = \"[\";\nColFilterExpressionParser.COL_END_CHAR = \"]\";\nfunction findMatch(searchValue, values, getDisplayValue) {\n  let partialMatch = false;\n  const searchValueLowerCase = searchValue.toLocaleLowerCase();\n  const partialSearchValue = searchValueLowerCase + \" \";\n  const parsedValue = Object.entries(values).find(([, value]) => {\n    const displayValueLowerCase = getDisplayValue(value).toLocaleLowerCase();\n    if (displayValueLowerCase.startsWith(partialSearchValue)) {\n      partialMatch = true;\n    }\n    return displayValueLowerCase === searchValueLowerCase;\n  });\n  if (parsedValue) {\n    return parsedValue[0];\n  } else if (partialMatch) {\n    return null;\n  } else {\n    return void 0;\n  }\n}\nfunction getEntries(operators, activeOperatorKeys) {\n  const keys = activeOperatorKeys ?? Object.keys(operators);\n  return keys.map((key) => ({\n    key,\n    displayValue: operators[key].displayValue\n  }));\n}\nvar TextFilterExpressionOperators = class {\n  constructor(params) {\n    this.params = params;\n    this.initOperators();\n  }\n  getEntries(activeOperators) {\n    return getEntries(this.operators, activeOperators);\n  }\n  findOperator(displayValue) {\n    return findMatch(displayValue, this.operators, ({ displayValue: displayValue2 }) => displayValue2);\n  }\n  initOperators() {\n    const { translate } = this.params;\n    this.operators = {\n      contains: {\n        displayValue: translate(\"advancedFilterContains\"),\n        evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, false, (v, o) => v.includes(o)),\n        numOperands: 1\n      },\n      notContains: {\n        displayValue: translate(\"advancedFilterNotContains\"),\n        evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, true, (v, o) => !v.includes(o)),\n        numOperands: 1\n      },\n      equals: {\n        displayValue: translate(\"advancedFilterTextEquals\"),\n        evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, false, (v, o) => v === o),\n        numOperands: 1\n      },\n      notEqual: {\n        displayValue: translate(\"advancedFilterTextNotEqual\"),\n        evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, true, (v, o) => v != o),\n        numOperands: 1\n      },\n      startsWith: {\n        displayValue: translate(\"advancedFilterStartsWith\"),\n        evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, false, (v, o) => v.startsWith(o)),\n        numOperands: 1\n      },\n      endsWith: {\n        displayValue: translate(\"advancedFilterEndsWith\"),\n        evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, false, (v, o) => v.endsWith(o)),\n        numOperands: 1\n      },\n      blank: {\n        displayValue: translate(\"advancedFilterBlank\"),\n        evaluator: (value) => value == null || typeof value === \"string\" && value.trim().length === 0,\n        numOperands: 0\n      },\n      notBlank: {\n        displayValue: translate(\"advancedFilterNotBlank\"),\n        evaluator: (value) => value != null && (typeof value !== \"string\" || value.trim().length > 0),\n        numOperands: 0\n      }\n    };\n  }\n  evaluateExpression(value, node, params, operand, nullsMatch, expression) {\n    if (value == null) {\n      return nullsMatch;\n    }\n    return params.caseSensitive ? expression(params.valueConverter(value, node), operand) : expression(params.valueConverter(value, node).toLocaleLowerCase(), operand.toLocaleLowerCase());\n  }\n};\nvar ScalarFilterExpressionOperators = class {\n  constructor(params) {\n    this.params = params;\n    this.initOperators();\n  }\n  getEntries(activeOperators) {\n    return getEntries(this.operators, activeOperators);\n  }\n  findOperator(displayValue) {\n    return findMatch(displayValue, this.operators, ({ displayValue: displayValue2 }) => displayValue2);\n  }\n  initOperators() {\n    const { translate, equals } = this.params;\n    this.operators = {\n      equals: {\n        displayValue: translate(\"advancedFilterEquals\"),\n        evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression(\n          value,\n          node,\n          params,\n          operand1,\n          !!params.includeBlanksInEquals,\n          equals\n        ),\n        numOperands: 1\n      },\n      notEqual: {\n        displayValue: translate(\"advancedFilterNotEqual\"),\n        evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression(\n          value,\n          node,\n          params,\n          operand1,\n          !!params.includeBlanksInEquals,\n          (v, o) => !equals(v, o)\n        ),\n        numOperands: 1\n      },\n      greaterThan: {\n        displayValue: translate(\"advancedFilterGreaterThan\"),\n        evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression(\n          value,\n          node,\n          params,\n          operand1,\n          !!params.includeBlanksInGreaterThan,\n          (v, o) => v > o\n        ),\n        numOperands: 1\n      },\n      greaterThanOrEqual: {\n        displayValue: translate(\"advancedFilterGreaterThanOrEqual\"),\n        evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression(\n          value,\n          node,\n          params,\n          operand1,\n          !!params.includeBlanksInGreaterThan,\n          (v, o) => v >= o\n        ),\n        numOperands: 1\n      },\n      lessThan: {\n        displayValue: translate(\"advancedFilterLessThan\"),\n        evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression(\n          value,\n          node,\n          params,\n          operand1,\n          !!params.includeBlanksInLessThan,\n          (v, o) => v < o\n        ),\n        numOperands: 1\n      },\n      lessThanOrEqual: {\n        displayValue: translate(\"advancedFilterLessThanOrEqual\"),\n        evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression(\n          value,\n          node,\n          params,\n          operand1,\n          !!params.includeBlanksInLessThan,\n          (v, o) => v <= o\n        ),\n        numOperands: 1\n      },\n      blank: {\n        displayValue: translate(\"advancedFilterBlank\"),\n        evaluator: (value) => value == null,\n        numOperands: 0\n      },\n      notBlank: {\n        displayValue: translate(\"advancedFilterNotBlank\"),\n        evaluator: (value) => value != null,\n        numOperands: 0\n      }\n    };\n  }\n  evaluateSingleOperandExpression(value, node, params, operand, nullsMatch, expression) {\n    if (value == null) {\n      return nullsMatch;\n    }\n    return expression(params.valueConverter(value, node), operand);\n  }\n};\nvar BooleanFilterExpressionOperators = class {\n  constructor(params) {\n    this.params = params;\n    this.initOperators();\n  }\n  getEntries(activeOperators) {\n    return getEntries(this.operators, activeOperators);\n  }\n  findOperator(displayValue) {\n    return findMatch(displayValue, this.operators, ({ displayValue: displayValue2 }) => displayValue2);\n  }\n  initOperators() {\n    const { translate } = this.params;\n    this.operators = {\n      true: {\n        displayValue: translate(\"advancedFilterTrue\"),\n        evaluator: (value) => !!value,\n        numOperands: 0\n      },\n      false: {\n        displayValue: translate(\"advancedFilterFalse\"),\n        evaluator: (value) => value === false,\n        numOperands: 0\n      },\n      blank: {\n        displayValue: translate(\"advancedFilterBlank\"),\n        evaluator: (value) => value == null,\n        numOperands: 0\n      },\n      notBlank: {\n        displayValue: translate(\"advancedFilterNotBlank\"),\n        evaluator: (value) => value != null,\n        numOperands: 0\n      }\n    };\n  }\n};\nvar AdvancedFilterExpressionService = class extends BeanStub5 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"advancedFilterExpressionService\";\n    this.columnNameToIdMap = {};\n    this.columnAutocompleteEntries = null;\n    this.expressionEvaluatorParams = {};\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.dataTypeService = beans.dataTypeService;\n  }\n  postConstruct() {\n    this.expressionJoinOperators = this.generateExpressionJoinOperators();\n    this.expressionOperators = this.generateExpressionOperators();\n  }\n  parseJoinOperator(model) {\n    const { type } = model;\n    return this.expressionJoinOperators[type] ?? type;\n  }\n  getColumnDisplayValue(model) {\n    const { colId } = model;\n    const columnEntries = this.getColumnAutocompleteEntries();\n    const columnEntry = columnEntries.find(({ key }) => key === colId);\n    let columnName;\n    if (columnEntry) {\n      columnName = columnEntry.displayValue;\n      this.columnNameToIdMap[columnName.toLocaleUpperCase()] = { colId, columnName };\n    } else {\n      columnName = colId;\n    }\n    return columnName;\n  }\n  getOperatorDisplayValue(model) {\n    return this.getExpressionOperator(model.filterType, model.type)?.displayValue ?? model.type;\n  }\n  getOperandModelValue(operand, baseCellDataType, column) {\n    switch (baseCellDataType) {\n      case \"number\":\n        return _exists3(operand) ? Number(operand) : null;\n      case \"date\":\n        return _serialiseDate(this.valueService.parseValue(column, null, operand, void 0), false);\n      case \"dateString\": {\n        const parsedDateString = this.valueService.parseValue(column, null, operand, void 0);\n        return this.dataTypeService ? _serialiseDate(\n          this.dataTypeService.getDateParserFunction(column)(parsedDateString) ?? null,\n          false\n        ) : parsedDateString;\n      }\n    }\n    return operand;\n  }\n  getOperandDisplayValue(model, skipFormatting) {\n    const { colId, filter } = model;\n    const column = this.columnModel.getColDefCol(colId);\n    let operand = \"\";\n    if (filter != null) {\n      let operand1;\n      switch (model.filterType) {\n        case \"number\":\n          operand1 = _toStringOrNull(filter) ?? \"\";\n          break;\n        case \"date\": {\n          const dateValue = _parseDateTimeFromString(filter);\n          operand1 = column ? this.valueService.formatValue(column, null, dateValue) : null;\n          break;\n        }\n        case \"dateString\": {\n          let dateStringStringValue;\n          if (this.dataTypeService) {\n            const dateStringDateValue = _parseDateTimeFromString(filter);\n            dateStringStringValue = column ? this.dataTypeService?.getDateFormatterFunction(column)(dateStringDateValue ?? void 0) : null;\n          } else {\n            dateStringStringValue = filter;\n          }\n          operand1 = column ? this.valueService.formatValue(column, null, dateStringStringValue) : null;\n          break;\n        }\n      }\n      if (model.filterType !== \"number\") {\n        operand1 = operand1 ?? _toStringOrNull(filter) ?? \"\";\n        if (!skipFormatting) {\n          operand1 = `\"${operand1}\"`;\n        }\n      }\n      operand = skipFormatting ? operand1 : ` ${operand1}`;\n    }\n    return operand;\n  }\n  parseColumnFilterModel(model) {\n    const columnName = this.getColumnDisplayValue(model) ?? \"\";\n    const operator = this.getOperatorDisplayValue(model) ?? \"\";\n    const operands = this.getOperandDisplayValue(model);\n    return `[${columnName}] ${operator}${operands}`;\n  }\n  updateAutocompleteCache(updateEntry, type) {\n    if (type === \"column\") {\n      const { key: colId, displayValue } = updateEntry;\n      this.columnNameToIdMap[updateEntry.displayValue.toLocaleUpperCase()] = {\n        colId,\n        columnName: displayValue\n      };\n    }\n  }\n  translate(key, variableValues) {\n    let defaultValue = ADVANCED_FILTER_LOCALE_TEXT[key];\n    if (typeof defaultValue === \"function\") {\n      defaultValue = defaultValue(variableValues);\n    }\n    return this.localeService.getLocaleTextFunc()(key, defaultValue, variableValues);\n  }\n  generateAutocompleteListParams(entries, type, searchString) {\n    return {\n      enabled: true,\n      type,\n      searchString,\n      entries\n    };\n  }\n  getColumnAutocompleteEntries() {\n    if (this.columnAutocompleteEntries) {\n      return this.columnAutocompleteEntries;\n    }\n    const columns = this.columnModel.getColDefCols() ?? [];\n    const entries = [];\n    const includeHiddenColumns = this.gos.get(\"includeHiddenColumnsInAdvancedFilter\");\n    columns.forEach((column) => {\n      if (column.getColDef().filter && (includeHiddenColumns || column.isVisible() || column.isRowGroupActive())) {\n        entries.push({\n          key: column.getColId(),\n          displayValue: this.columnNameService.getDisplayNameForColumn(column, \"advancedFilter\")\n        });\n      }\n    });\n    entries.sort((a, b) => {\n      const aValue = a.displayValue ?? \"\";\n      const bValue = b.displayValue ?? \"\";\n      if (aValue < bValue) {\n        return -1;\n      } else if (bValue > aValue) {\n        return 1;\n      }\n      return 0;\n    });\n    return entries;\n  }\n  getOperatorAutocompleteEntries(column, baseCellDataType) {\n    const activeOperators = this.getActiveOperators(column);\n    return this.getDataTypeExpressionOperator(baseCellDataType).getEntries(activeOperators);\n  }\n  getJoinOperatorAutocompleteEntries() {\n    return Object.entries(this.expressionJoinOperators).map(([key, displayValue]) => ({ key, displayValue }));\n  }\n  getDefaultAutocompleteListParams(searchString) {\n    return this.generateAutocompleteListParams(this.getColumnAutocompleteEntries(), \"column\", searchString);\n  }\n  getDataTypeExpressionOperator(baseCellDataType) {\n    return this.expressionOperators[baseCellDataType];\n  }\n  getExpressionOperator(baseCellDataType, operator) {\n    return this.getDataTypeExpressionOperator(baseCellDataType)?.operators?.[operator];\n  }\n  getExpressionJoinOperators() {\n    return this.expressionJoinOperators;\n  }\n  getColId(columnName) {\n    const upperCaseColumnName = columnName.toLocaleUpperCase();\n    const cachedColId = this.columnNameToIdMap[upperCaseColumnName];\n    if (cachedColId) {\n      return cachedColId;\n    }\n    const columnAutocompleteEntries = this.getColumnAutocompleteEntries();\n    const colEntry = columnAutocompleteEntries.find(\n      ({ displayValue }) => displayValue.toLocaleUpperCase() === upperCaseColumnName\n    );\n    if (colEntry) {\n      const { key: colId, displayValue } = colEntry;\n      const colValue = { colId, columnName: displayValue };\n      this.columnNameToIdMap[upperCaseColumnName] = colValue;\n      return colValue;\n    }\n    return null;\n  }\n  getExpressionEvaluatorParams(colId) {\n    let params = this.expressionEvaluatorParams[colId];\n    if (params) {\n      return params;\n    }\n    const column = this.columnModel.getColDefCol(colId);\n    if (!column) {\n      return { valueConverter: (v) => v };\n    }\n    const baseCellDataType = this.dataTypeService?.getBaseDataType(column);\n    switch (baseCellDataType) {\n      case \"dateString\":\n        params = {\n          valueConverter: this.dataTypeService?.getDateParserFunction(column) ?? ((v) => v)\n        };\n        break;\n      case \"object\":\n        if (column.getColDef().filterValueGetter) {\n          params = { valueConverter: (v) => v };\n        } else {\n          params = {\n            valueConverter: (value, node) => this.valueService.formatValue(column, node, value) ?? (typeof value.toString === \"function\" ? value.toString() : \"\")\n          };\n        }\n        break;\n      case \"text\":\n      case void 0:\n        params = { valueConverter: (v) => _toStringOrNull(v) };\n        break;\n      default:\n        params = { valueConverter: (v) => v };\n        break;\n    }\n    const { filterParams } = column.getColDef();\n    if (filterParams) {\n      [\"caseSensitive\", \"includeBlanksInEquals\", \"includeBlanksInLessThan\", \"includeBlanksInGreaterThan\"].forEach(\n        (param) => {\n          const paramValue = filterParams[param];\n          if (paramValue) {\n            params[param] = paramValue;\n          }\n        }\n      );\n    }\n    this.expressionEvaluatorParams[colId] = params;\n    return params;\n  }\n  getColumnDetails(colId) {\n    const column = this.columnModel.getColDefCol(colId) ?? void 0;\n    const baseCellDataType = (column ? this.dataTypeService?.getBaseDataType(column) : void 0) ?? \"text\";\n    return { column, baseCellDataType };\n  }\n  generateExpressionOperators() {\n    const translate = (key, variableValues) => this.translate(key, variableValues);\n    return {\n      text: new TextFilterExpressionOperators({ translate }),\n      boolean: new BooleanFilterExpressionOperators({ translate }),\n      object: new TextFilterExpressionOperators({ translate }),\n      number: new ScalarFilterExpressionOperators({ translate, equals: (v, o) => v === o }),\n      date: new ScalarFilterExpressionOperators({\n        translate,\n        equals: (v, o) => v.getTime() === o.getTime()\n      }),\n      dateString: new ScalarFilterExpressionOperators({\n        translate,\n        equals: (v, o) => v.getTime() === o.getTime()\n      })\n    };\n  }\n  getColumnValue({ displayValue }) {\n    return `${ColFilterExpressionParser.COL_START_CHAR}${displayValue}${ColFilterExpressionParser.COL_END_CHAR}`;\n  }\n  generateExpressionJoinOperators() {\n    return {\n      AND: this.translate(\"advancedFilterAnd\"),\n      OR: this.translate(\"advancedFilterOr\")\n    };\n  }\n  getActiveOperators(column) {\n    const filterOptions = column.getColDef().filterParams?.filterOptions;\n    if (!filterOptions) {\n      return void 0;\n    }\n    const isValid = filterOptions.every((filterOption) => typeof filterOption === \"string\");\n    return isValid ? filterOptions : void 0;\n  }\n  resetColumnCaches() {\n    this.columnAutocompleteEntries = null;\n    this.columnNameToIdMap = {};\n    this.expressionEvaluatorParams = {};\n  }\n};\nvar AgAutocompleteRow = class extends Component12 {\n  constructor() {\n    super(\n      /* html */\n      `\n        <div class=\"ag-autocomplete-row\" role=\"presentation\">\n            <div class=\"ag-autocomplete-row-label\"></div>\n        </div>`\n    );\n    this.hasHighlighting = false;\n  }\n  setState(value, selected) {\n    this.value = value;\n    this.render();\n    this.updateSelected(selected);\n  }\n  updateSelected(selected) {\n    this.addOrRemoveCssClass(\"ag-autocomplete-row-selected\", selected);\n  }\n  setSearchString(searchString) {\n    let keepHighlighting = false;\n    if (_exists22(searchString)) {\n      const index = this.value?.toLocaleLowerCase().indexOf(searchString.toLocaleLowerCase());\n      if (index >= 0) {\n        keepHighlighting = true;\n        this.hasHighlighting = true;\n        const highlightEndIndex = index + searchString.length;\n        const startPart = _escapeString4(this.value.slice(0, index));\n        const highlightedPart = _escapeString4(this.value.slice(index, highlightEndIndex));\n        const endPart = _escapeString4(this.value.slice(highlightEndIndex));\n        this.getGui().lastElementChild.innerHTML = `${startPart}<b>${highlightedPart}</b>${endPart}`;\n      }\n    }\n    if (!keepHighlighting && this.hasHighlighting) {\n      this.hasHighlighting = false;\n      this.render();\n    }\n  }\n  render() {\n    this.getGui().lastElementChild.innerHTML = _escapeString4(this.value) ?? \"&nbsp;\";\n  }\n};\nvar AgAutocompleteList = class extends PopupComponent {\n  constructor(params) {\n    super(\n      /* html */\n      `<div class=\"ag-autocomplete-list-popup\">\n            <div data-ref=\"eList\" class=\"ag-autocomplete-list\"></div>\n        <div>`\n    );\n    this.params = params;\n    this.eList = RefPlaceholder10;\n    this.searchString = \"\";\n  }\n  destroy() {\n    super.destroy();\n  }\n  postConstruct() {\n    this.autocompleteEntries = this.params.autocompleteEntries;\n    this.virtualList = this.createManagedBean(new VirtualList({ cssIdentifier: \"autocomplete\" }));\n    this.virtualList.setComponentCreator(this.createRowComponent.bind(this));\n    this.eList.appendChild(this.virtualList.getGui());\n    this.virtualList.setModel({\n      getRowCount: () => this.autocompleteEntries.length,\n      getRow: (index) => this.autocompleteEntries[index]\n    });\n    const virtualListGui = this.virtualList.getGui();\n    this.addManagedListeners(virtualListGui, {\n      click: () => this.params.onConfirmed(),\n      mousemove: this.onMouseMove.bind(this),\n      mousedown: (e) => e.preventDefault()\n    });\n    this.setSelectedValue(0);\n  }\n  onNavigationKeyDown(event, key) {\n    event.preventDefault();\n    const oldIndex = this.autocompleteEntries.indexOf(this.selectedValue);\n    const newIndex = key === KeyCode13.UP ? oldIndex - 1 : oldIndex + 1;\n    this.checkSetSelectedValue(newIndex);\n  }\n  setSearch(searchString) {\n    this.searchString = searchString;\n    if (_exists32(searchString)) {\n      this.runSearch();\n    } else {\n      this.autocompleteEntries = this.params.autocompleteEntries;\n      this.virtualList.refresh();\n      this.checkSetSelectedValue(0);\n    }\n    this.updateSearchInList();\n  }\n  runContainsSearch(searchString, searchStrings) {\n    let topMatch;\n    let topMatchStartsWithSearchString = false;\n    const lowerCaseSearchString = searchString.toLocaleLowerCase();\n    const allMatches = searchStrings.filter((string) => {\n      const lowerCaseString = string.toLocaleLowerCase();\n      const index = lowerCaseString.indexOf(lowerCaseSearchString);\n      const startsWithSearchString = index === 0;\n      const isMatch = index >= 0;\n      if (isMatch && (!topMatch || !topMatchStartsWithSearchString && startsWithSearchString || topMatchStartsWithSearchString === startsWithSearchString && string.length < topMatch.length)) {\n        topMatch = string;\n        topMatchStartsWithSearchString = startsWithSearchString;\n      }\n      return isMatch;\n    });\n    if (!topMatch && allMatches.length) {\n      topMatch = allMatches[0];\n    }\n    return { topMatch, allMatches };\n  }\n  runSearch() {\n    const { autocompleteEntries } = this.params;\n    const searchStrings = autocompleteEntries.map((v) => v.displayValue ?? v.key);\n    let matchingStrings;\n    let topSuggestion;\n    if (this.params.useFuzzySearch) {\n      matchingStrings = _fuzzySuggestions2({\n        inputValue: this.searchString,\n        allSuggestions: searchStrings,\n        hideIrrelevant: true,\n        addSequentialWeight: true\n      }).values;\n      topSuggestion = matchingStrings.length ? matchingStrings[0] : void 0;\n    } else {\n      const containsMatches = this.runContainsSearch(this.searchString, searchStrings);\n      matchingStrings = containsMatches.allMatches;\n      topSuggestion = containsMatches.topMatch;\n    }\n    let filteredEntries = autocompleteEntries.filter(\n      ({ key, displayValue }) => matchingStrings.includes(displayValue ?? key)\n    );\n    if (!filteredEntries.length && this.selectedValue && this.params?.forceLastSelection?.(this.selectedValue, this.searchString)) {\n      filteredEntries = [this.selectedValue];\n    }\n    this.autocompleteEntries = filteredEntries;\n    this.virtualList.refresh();\n    if (!topSuggestion) {\n      return;\n    }\n    const topSuggestionIndex = matchingStrings.indexOf(topSuggestion);\n    this.checkSetSelectedValue(topSuggestionIndex);\n  }\n  updateSearchInList() {\n    this.virtualList.forEachRenderedRow((row) => row.setSearchString(this.searchString));\n  }\n  checkSetSelectedValue(index) {\n    if (index >= 0 && index < this.autocompleteEntries.length) {\n      this.setSelectedValue(index);\n    }\n  }\n  setSelectedValue(index) {\n    const value = this.autocompleteEntries[index];\n    if (this.selectedValue === value) {\n      return;\n    }\n    this.selectedValue = value;\n    this.virtualList.ensureIndexVisible(index);\n    this.virtualList.forEachRenderedRow((cmp, idx) => {\n      cmp.updateSelected(index === idx);\n    });\n  }\n  createRowComponent(value) {\n    const row = new AgAutocompleteRow();\n    this.createBean(row);\n    row.setState(value.displayValue ?? value.key, value === this.selectedValue);\n    return row;\n  }\n  onMouseMove(mouseEvent) {\n    const rect = this.virtualList.getGui().getBoundingClientRect();\n    const scrollTop = this.virtualList.getScrollTop();\n    const mouseY = mouseEvent.clientY - rect.top + scrollTop;\n    const row = Math.floor(mouseY / this.virtualList.getRowHeight());\n    this.checkSetSelectedValue(row);\n  }\n  afterGuiAttached() {\n    this.virtualList.refresh();\n  }\n  getSelectedValue() {\n    if (!this.autocompleteEntries.length) {\n      return null;\n    }\n    return this.selectedValue ?? null;\n  }\n};\nvar AgAutocomplete = class extends Component22 {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-autocomplete\" role=\"presentation\">\n                <ag-input-text-field data-ref=\"eAutocompleteInput\"></ag-input-text-field>\n            </div>`,\n      [AgInputTextFieldSelector2]\n    );\n    this.eAutocompleteInput = RefPlaceholder22;\n    this.isListOpen = false;\n    this.lastPosition = 0;\n    this.valid = true;\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n  }\n  postConstruct() {\n    this.eAutocompleteInput.onValueChange((value) => this.onValueChanged(value));\n    this.eAutocompleteInput.getInputElement().setAttribute(\"autocomplete\", \"off\");\n    this.addGuiEventListener(\"keydown\", this.onKeyDown.bind(this));\n    this.addGuiEventListener(\"click\", this.updatePositionAndList.bind(this));\n    this.addDestroyFunc(() => {\n      this.destroyBean(this.autocompleteList);\n    });\n    this.addGuiEventListener(\"focusout\", () => this.onFocusOut());\n  }\n  onValueChanged(value) {\n    const parsedValue = _makeNull(value);\n    this.updateValue(parsedValue);\n    this.updateAutocompleteList(parsedValue);\n  }\n  updateValue(value) {\n    this.updateLastPosition();\n    this.dispatchLocalEvent({\n      type: \"eventValueChanged\",\n      value\n    });\n    this.validate(value);\n  }\n  updateAutocompleteList(value) {\n    const autocompleteListParams = this.listGenerator?.(value, this.lastPosition) ?? { enabled: false };\n    if (!autocompleteListParams.type || autocompleteListParams.type !== this.autocompleteListParams?.type) {\n      if (this.isListOpen) {\n        this.closeList();\n      }\n    }\n    this.autocompleteListParams = autocompleteListParams;\n    if (this.autocompleteListParams?.enabled) {\n      if (!this.isListOpen) {\n        this.openList();\n      }\n      const { searchString } = this.autocompleteListParams;\n      this.autocompleteList.setSearch(searchString ?? \"\");\n    } else {\n      if (this.isListOpen) {\n        this.closeList();\n      }\n    }\n  }\n  onKeyDown(event) {\n    const key = event.key;\n    this.updateLastPosition();\n    switch (key) {\n      case KeyCode22.ENTER:\n        this.onEnterKeyDown(event);\n        break;\n      case KeyCode22.TAB:\n        this.onTabKeyDown(event);\n        break;\n      case KeyCode22.DOWN:\n      case KeyCode22.UP:\n        this.onUpDownKeyDown(event, key);\n        break;\n      case KeyCode22.LEFT:\n      case KeyCode22.RIGHT:\n      case KeyCode22.PAGE_HOME:\n      case KeyCode22.PAGE_END:\n        setTimeout(() => {\n          this.updatePositionAndList();\n        });\n        break;\n      case KeyCode22.ESCAPE:\n        this.onEscapeKeyDown(event);\n        break;\n      case KeyCode22.SPACE:\n        if (event.ctrlKey && !this.isListOpen) {\n          event.preventDefault();\n          this.forceOpenList();\n        }\n        break;\n    }\n  }\n  confirmSelection() {\n    const selectedValue = this.autocompleteList?.getSelectedValue();\n    if (selectedValue) {\n      this.closeList();\n      this.dispatchLocalEvent({\n        type: \"eventOptionSelected\",\n        value: this.getValue(),\n        position: this.lastPosition,\n        updateEntry: selectedValue,\n        autocompleteType: this.autocompleteListParams.type\n      });\n    }\n  }\n  onTabKeyDown(event) {\n    if (this.isListOpen) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.confirmSelection();\n    }\n  }\n  onEnterKeyDown(event) {\n    event.preventDefault();\n    if (this.isListOpen) {\n      this.confirmSelection();\n    } else {\n      this.onCompleted();\n    }\n  }\n  onUpDownKeyDown(event, key) {\n    event.preventDefault();\n    if (!this.isListOpen) {\n      this.forceOpenList();\n    } else {\n      this.autocompleteList?.onNavigationKeyDown(event, key);\n    }\n  }\n  onEscapeKeyDown(event) {\n    if (this.isListOpen) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.closeList();\n      this.setCaret(this.lastPosition, true);\n    }\n  }\n  onFocusOut() {\n    if (this.isListOpen) {\n      this.closeList();\n    }\n  }\n  updatePositionAndList() {\n    this.updateLastPosition();\n    this.updateAutocompleteList(this.eAutocompleteInput.getValue() ?? null);\n  }\n  setCaret(position, setFocus) {\n    if (setFocus && _isNothingFocused2(this.gos)) {\n      this.eAutocompleteInput.getFocusableElement().focus();\n    }\n    const eInput = this.eAutocompleteInput.getInputElement();\n    eInput.setSelectionRange(position, position);\n    if (position === eInput.value.length) {\n      eInput.scrollLeft = eInput.scrollWidth;\n    }\n  }\n  forceOpenList() {\n    this.onValueChanged(this.eAutocompleteInput.getValue());\n  }\n  updateLastPosition() {\n    this.lastPosition = this.eAutocompleteInput.getInputElement().selectionStart ?? 0;\n  }\n  validate(value) {\n    if (!this.validator) {\n      return;\n    }\n    this.validationMessage = this.validator(value);\n    this.eAutocompleteInput.getInputElement().setCustomValidity(this.validationMessage ?? \"\");\n    this.valid = !this.validationMessage;\n    this.dispatchLocalEvent({\n      type: \"eventValidChanged\",\n      isValid: this.valid,\n      validationMessage: this.validationMessage\n    });\n  }\n  openList() {\n    this.isListOpen = true;\n    this.autocompleteList = this.createBean(\n      new AgAutocompleteList({\n        autocompleteEntries: this.autocompleteListParams.entries,\n        onConfirmed: () => this.confirmSelection(),\n        forceLastSelection: this.forceLastSelection\n      })\n    );\n    const ePopupGui = this.autocompleteList.getGui();\n    const positionParams = {\n      ePopup: ePopupGui,\n      type: \"autocomplete\",\n      eventSource: this.getGui(),\n      position: \"under\",\n      alignSide: this.gos.get(\"enableRtl\") ? \"right\" : \"left\",\n      keepWithinBounds: true\n    };\n    const addPopupRes = this.popupService.addPopup({\n      eChild: ePopupGui,\n      anchorToElement: this.getGui(),\n      positionCallback: () => this.popupService.positionPopupByComponent(positionParams),\n      ariaLabel: this.listAriaLabel\n    });\n    this.hidePopup = addPopupRes.hideFunc;\n    this.autocompleteList.afterGuiAttached();\n  }\n  closeList() {\n    this.isListOpen = false;\n    this.hidePopup();\n    this.destroyBean(this.autocompleteList);\n    this.autocompleteList = null;\n  }\n  onCompleted() {\n    if (this.isListOpen) {\n      this.closeList();\n    }\n    this.dispatchLocalEvent({\n      type: \"eventValueConfirmed\",\n      value: this.getValue(),\n      isValid: this.isValid()\n    });\n  }\n  getValue() {\n    return _makeNull(this.eAutocompleteInput.getValue());\n  }\n  setInputPlaceholder(placeholder) {\n    this.eAutocompleteInput.setInputPlaceholder(placeholder);\n    return this;\n  }\n  setInputAriaLabel(label) {\n    this.eAutocompleteInput.setInputAriaLabel(label);\n    return this;\n  }\n  setListAriaLabel(label) {\n    this.listAriaLabel = label;\n    return this;\n  }\n  setListGenerator(listGenerator) {\n    this.listGenerator = listGenerator;\n    return this;\n  }\n  setValidator(validator) {\n    this.validator = validator;\n    return this;\n  }\n  isValid() {\n    return this.valid;\n  }\n  setValue(params) {\n    const { value, position, silent, updateListOnlyIfOpen, restoreFocus } = params;\n    this.eAutocompleteInput.setValue(value, true);\n    this.setCaret(position ?? this.lastPosition, restoreFocus);\n    if (!silent) {\n      this.updateValue(value);\n    }\n    if (!updateListOnlyIfOpen || this.isListOpen) {\n      this.updateAutocompleteList(value);\n    }\n  }\n  setForceLastSelection(forceLastSelection) {\n    this.forceLastSelection = forceLastSelection;\n    return this;\n  }\n  setInputDisabled(disabled) {\n    this.eAutocompleteInput.setDisabled(disabled);\n    return this;\n  }\n};\nvar AgAutocompleteSelector = {\n  selector: \"AG-AUTOCOMPLETE\",\n  component: AgAutocomplete\n};\nvar AdvancedFilterComp = class extends Component32 {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-advanced-filter\" role=\"presentation\" tabindex=\"-1\">\n                <ag-autocomplete data-ref=\"eAutocomplete\"></ag-autocomplete>\n                <button class=\"ag-button ag-standard-button ag-advanced-filter-apply-button\" data-ref=\"eApplyFilterButton\"></button>\n                <button class=\"ag-advanced-filter-builder-button\" data-ref=\"eBuilderFilterButton\">\n                    <span data-ref=\"eBuilderFilterButtonIcon\" aria-hidden=\"true\"></span>\n                    <span class=\"ag-advanced-filter-builder-button-label\" data-ref=\"eBuilderFilterButtonLabel\"></span>\n                </button>\n            </div>`,\n      [AgAutocompleteSelector]\n    );\n    this.eAutocomplete = RefPlaceholder32;\n    this.eApplyFilterButton = RefPlaceholder32;\n    this.eBuilderFilterButton = RefPlaceholder32;\n    this.eBuilderFilterButtonIcon = RefPlaceholder32;\n    this.eBuilderFilterButtonLabel = RefPlaceholder32;\n    this.expressionParser = null;\n    this.isApplyDisabled = true;\n    this.builderOpen = false;\n  }\n  wireBeans(beans) {\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n    this.advancedFilterService = beans.advancedFilterService;\n    this.filterManager = beans.filterManager;\n  }\n  postConstruct() {\n    this.eAutocomplete.setListGenerator((_value, position) => this.generateAutocompleteListParams(position)).setValidator(() => this.validateValue()).setForceLastSelection(\n      (lastSelection, searchString) => this.forceLastSelection(lastSelection, searchString)\n    ).setInputAriaLabel(this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterInput\")).setListAriaLabel(this.advancedFilterExpressionService.translate(\"ariaLabelAdvancedFilterAutocomplete\"));\n    this.refresh();\n    this.addManagedListeners(this.eAutocomplete, {\n      eventValueChanged: ({ value }) => this.onValueChanged(value),\n      eventValueConfirmed: ({ isValid }) => this.onValueConfirmed(isValid),\n      eventOptionSelected: ({ position, updateEntry, autocompleteType }) => this.onOptionSelected(position, updateEntry, autocompleteType),\n      eventValidChanged: ({ isValid, validationMessage }) => this.onValidChanged(isValid, validationMessage)\n    });\n    this.setupApplyButton();\n    this.setupBuilderButton();\n  }\n  refresh() {\n    const expression = this.advancedFilterService.getExpressionDisplayValue();\n    this.eAutocomplete.setValue({\n      value: expression ?? \"\",\n      position: expression?.length,\n      updateListOnlyIfOpen: true\n    });\n  }\n  setInputDisabled(disabled) {\n    this.eAutocomplete.setInputDisabled(disabled);\n    _setDisabled(this.eApplyFilterButton, disabled || this.isApplyDisabled);\n  }\n  getTooltipParams() {\n    const res = super.getTooltipParams();\n    res.location = \"advancedFilter\";\n    return res;\n  }\n  setupApplyButton() {\n    this.eApplyFilterButton.innerText = this.advancedFilterExpressionService.translate(\"advancedFilterApply\");\n    this.activateTabIndex([this.eApplyFilterButton]);\n    this.addManagedElementListeners(this.eApplyFilterButton, {\n      click: () => this.onValueConfirmed(this.eAutocomplete.isValid())\n    });\n    _setDisabled(this.eApplyFilterButton, this.isApplyDisabled);\n  }\n  setupBuilderButton() {\n    this.eBuilderFilterButtonIcon.appendChild(_createIconNoSpan9(\"advancedFilterBuilder\", this.gos));\n    this.eBuilderFilterButtonLabel.innerText = this.advancedFilterExpressionService.translate(\"advancedFilterBuilder\");\n    this.activateTabIndex([this.eBuilderFilterButton]);\n    this.addManagedElementListeners(this.eBuilderFilterButton, { click: () => this.openBuilder() });\n    this.addManagedListeners(this.advancedFilterService.getCtrl(), {\n      advancedFilterBuilderClosed: () => this.closeBuilder()\n    });\n  }\n  onValueChanged(value) {\n    value = _makeNull2(value);\n    this.advancedFilterService.setExpressionDisplayValue(value);\n    this.expressionParser = this.advancedFilterService.createExpressionParser(value);\n    const updatedExpression = this.expressionParser?.parseExpression();\n    if (updatedExpression && updatedExpression !== value) {\n      this.eAutocomplete.setValue({ value: updatedExpression, silent: true, restoreFocus: true });\n    }\n  }\n  onValueConfirmed(isValid) {\n    if (!isValid || this.isApplyDisabled) {\n      return;\n    }\n    _setDisabled(this.eApplyFilterButton, true);\n    this.advancedFilterService.applyExpression();\n    this.filterManager?.onFilterChanged({ source: \"advancedFilter\" });\n  }\n  onOptionSelected(position, updateEntry, type) {\n    const { updatedValue, updatedPosition, hideAutocomplete } = this.updateExpression(position, updateEntry, type);\n    this.eAutocomplete.setValue({\n      value: updatedValue,\n      position: updatedPosition,\n      updateListOnlyIfOpen: hideAutocomplete,\n      restoreFocus: true\n    });\n  }\n  validateValue() {\n    return this.expressionParser?.isValid() ? null : this.expressionParser?.getValidationMessage() ?? null;\n  }\n  onValidChanged(isValid, validationMessage) {\n    this.isApplyDisabled = !isValid || this.advancedFilterService.isCurrentExpressionApplied();\n    _setDisabled(this.eApplyFilterButton, this.isApplyDisabled);\n    this.setTooltip({\n      newTooltipText: validationMessage,\n      showDelayOverride: 1e3\n    });\n  }\n  generateAutocompleteListParams(position) {\n    return this.expressionParser ? this.expressionParser.getAutocompleteListParams(position) : this.advancedFilterExpressionService.getDefaultAutocompleteListParams(\"\");\n  }\n  updateExpression(position, updateEntry, type) {\n    this.advancedFilterExpressionService.updateAutocompleteCache(updateEntry, type);\n    return this.expressionParser?.updateExpression(position, updateEntry, type) ?? this.advancedFilterService.getDefaultExpression(updateEntry);\n  }\n  forceLastSelection({ key, displayValue }, searchString) {\n    return !!searchString.toLocaleLowerCase().match(`^${(displayValue ?? key).toLocaleLowerCase()}\\\\s*$`);\n  }\n  openBuilder() {\n    if (this.builderOpen) {\n      return;\n    }\n    this.builderOpen = true;\n    _setDisabled(this.eBuilderFilterButton, true);\n    this.advancedFilterService.getCtrl().toggleFilterBuilder({ source: \"ui\", eventSource: this.eBuilderFilterButton });\n  }\n  closeBuilder() {\n    if (!this.builderOpen) {\n      return;\n    }\n    this.builderOpen = false;\n    _setDisabled(this.eBuilderFilterButton, false);\n    this.eBuilderFilterButton.focus();\n  }\n};\nvar AdvancedFilterHeaderComp = class extends Component42 {\n  constructor(enabled) {\n    super(\n      /* html */\n      `\n            <div class=\"ag-advanced-filter-header\" role=\"row\">\n            </div>`\n    );\n    this.enabled = enabled;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.focusService = beans.focusService;\n    this.headerNavigationService = beans.headerNavigationService;\n  }\n  postConstruct() {\n    this.setupAdvancedFilter(this.enabled);\n    this.addDestroyFunc(() => this.destroyBean(this.eAdvancedFilter));\n    const heightListener = () => {\n      if (this.enabled) {\n        this.setEnabledHeight();\n      }\n    };\n    this.addManagedEventListeners({\n      gridColumnsChanged: () => this.onGridColumnsChanged(),\n      columnHeaderHeightChanged: heightListener,\n      gridStylesChanged: heightListener\n    });\n    this.addManagedPropertyListener(\"headerHeight\", heightListener);\n    this.addManagedPropertyListener(\"floatingFiltersHeight\", heightListener);\n    this.addGuiEventListener(\"keydown\", (event) => this.onKeyDown(event));\n    this.addGuiEventListener(\"focusout\", (event) => {\n      if (!this.getFocusableElement().contains(event.relatedTarget)) {\n        this.focusService.clearAdvancedFilterColumn();\n      }\n    });\n  }\n  getFocusableElement() {\n    return this.eAdvancedFilter?.getGui() ?? this.getGui();\n  }\n  setEnabled(enabled) {\n    if (enabled === this.enabled) {\n      return;\n    }\n    this.setupAdvancedFilter(enabled);\n  }\n  refresh() {\n    this.eAdvancedFilter?.refresh();\n  }\n  getHeight() {\n    return this.height;\n  }\n  setInputDisabled(disabled) {\n    this.eAdvancedFilter?.setInputDisabled(disabled);\n  }\n  setupAdvancedFilter(enabled) {\n    const eGui = this.getGui();\n    if (enabled) {\n      this.eAdvancedFilter = this.createBean(new AdvancedFilterComp());\n      const eAdvancedFilterGui = this.eAdvancedFilter.getGui();\n      this.eAdvancedFilter.addCssClass(\"ag-advanced-filter-header-cell\");\n      this.setEnabledHeight();\n      this.setAriaRowIndex();\n      _setAriaRole6(eAdvancedFilterGui, \"gridcell\");\n      _setAriaColIndex(eAdvancedFilterGui, 1);\n      this.setAriaColumnCount(eAdvancedFilterGui);\n      eGui.appendChild(eAdvancedFilterGui);\n    } else {\n      _clearElement5(eGui);\n      this.destroyBean(this.eAdvancedFilter);\n      this.height = 0;\n    }\n    _setDisplayed6(eGui, enabled);\n    this.enabled = enabled;\n  }\n  setEnabledHeight() {\n    const eGui = this.getGui();\n    this.height = this.columnModel.getFloatingFiltersHeight();\n    const height = `${this.height}px`;\n    eGui.style.height = height;\n    eGui.style.minHeight = height;\n  }\n  setAriaColumnCount(eAdvancedFilterGui) {\n    _setAriaColSpan(eAdvancedFilterGui, this.columnModel.getCols().length);\n  }\n  setAriaRowIndex() {\n    _setAriaRowIndex(this.getGui(), this.headerNavigationService.getHeaderRowCount());\n  }\n  onGridColumnsChanged() {\n    if (!this.eAdvancedFilter) {\n      return;\n    }\n    this.setAriaColumnCount(this.eAdvancedFilter.getGui());\n    this.setAriaRowIndex();\n  }\n  onKeyDown(event) {\n    switch (event.key) {\n      case KeyCode32.ENTER: {\n        if (this.hasFocus()) {\n          if (this.focusService.focusInto(this.getFocusableElement())) {\n            event.preventDefault();\n          }\n        }\n        break;\n      }\n      case KeyCode32.ESCAPE:\n        if (!this.hasFocus()) {\n          this.getFocusableElement().focus();\n        }\n        break;\n      case KeyCode32.UP:\n        this.navigateUpDown(true, event);\n        break;\n      case KeyCode32.DOWN:\n        this.navigateUpDown(false, event);\n        break;\n      case KeyCode32.TAB:\n        if (this.hasFocus()) {\n          this.navigateLeftRight(event);\n        } else {\n          const nextFocusableEl = this.focusService.findNextFocusableElement(\n            this.getFocusableElement(),\n            null,\n            event.shiftKey\n          );\n          if (nextFocusableEl) {\n            event.preventDefault();\n            nextFocusableEl.focus();\n          } else {\n            this.navigateLeftRight(event);\n          }\n        }\n        break;\n    }\n  }\n  navigateUpDown(backwards, event) {\n    if (this.hasFocus()) {\n      if (this.focusService.focusNextFromAdvancedFilter(backwards)) {\n        event.preventDefault();\n      }\n    }\n  }\n  navigateLeftRight(event) {\n    if (event.shiftKey ? this.focusService.focusLastHeader() : this.focusService.focusNextFromAdvancedFilter(false, true)) {\n      event.preventDefault();\n    }\n  }\n  hasFocus() {\n    return _getActiveDomElement6(this.gos) === this.getFocusableElement();\n  }\n};\nvar AdvancedFilterBuilderDragFeature = class extends BeanStub22 {\n  constructor(comp, virtualList) {\n    super();\n    this.comp = comp;\n    this.virtualList = virtualList;\n  }\n  postConstruct() {\n    this.createManagedBean(\n      new VirtualListDragFeature(this.comp, this.virtualList, {\n        dragSourceType: DragSourceType.AdvancedFilterBuilder,\n        listItemDragStartEvent: \"advancedFilterBuilderDragStarted\",\n        listItemDragEndEvent: \"advancedFilterBuilderDragEnded\",\n        eventSource: this,\n        getCurrentDragValue: (listItemDragStartEvent) => this.getCurrentDragValue(listItemDragStartEvent),\n        isMoveBlocked: () => false,\n        getNumRows: (comp) => comp.getNumItems(),\n        moveItem: (currentDragValue, lastHoveredListItem) => this.moveItem(currentDragValue, lastHoveredListItem)\n      })\n    );\n  }\n  getCurrentDragValue(listItemDragStartEvent) {\n    return listItemDragStartEvent.item;\n  }\n  moveItem(currentDragValue, lastHoveredListItem) {\n    this.comp.moveItem(currentDragValue, lastHoveredListItem);\n  }\n};\nvar AddDropdownComp = class extends AgRichSelect {\n  constructor(params) {\n    super({\n      ...params,\n      template: (\n        /* html */\n        `\n                <div class=\"ag-picker-field\" role=\"presentation\">\n                    <div data-ref=\"eLabel\"></div>\n                    <div data-ref=\"eWrapper\" class=\"ag-wrapper ag-picker-collapsed\">\n                        <div data-ref=\"eDisplayField\" class=\"ag-picker-field-display\"></div>\n                        <ag-input-text-field data-ref=\"eInput\" class=\"ag-rich-select-field-input\"></ag-input-text-field>\n                        <span data-ref=\"eDeselect\" class=\"ag-rich-select-deselect-button ag-picker-field-icon\" role=\"presentation\"></span>\n                        <div data-ref=\"eIcon\" class=\"ag-picker-field-icon\" aria-hidden=\"true\"></div>\n                    </div>\n                </div>`\n      ),\n      agComponents: [AgInputTextFieldSelector22]\n    });\n    this.params = params;\n  }\n  showPicker() {\n    setTimeout(() => super.showPicker());\n  }\n  hidePicker() {\n    setTimeout(() => super.hidePicker());\n  }\n  postConstruct() {\n    super.postConstruct();\n    const { wrapperClassName, ariaLabel } = this.params;\n    _setDisplayed22(this.eDisplayField, false);\n    if (wrapperClassName) {\n      this.eWrapper.classList.add(wrapperClassName);\n    }\n    _setAriaLabelledBy(this.eWrapper, \"\");\n    _setAriaLabel6(this.eWrapper, ariaLabel);\n  }\n  onEnterKeyDown(event) {\n    _stopPropagationForAgGrid5(event);\n    if (this.isPickerDisplayed) {\n      super.onEnterKeyDown(event);\n    } else {\n      event.preventDefault();\n      this.showPicker();\n    }\n  }\n};\nvar AdvancedFilterBuilderItemNavigationFeature = class extends BeanStub32 {\n  constructor(eGui, focusWrapper, eFocusableComp) {\n    super();\n    this.eGui = eGui;\n    this.focusWrapper = focusWrapper;\n    this.eFocusableComp = eFocusableComp;\n  }\n  postConstruct() {\n    this.addManagedElementListeners(this.eGui, {\n      keydown: (event) => {\n        switch (event.key) {\n          case KeyCode42.TAB:\n            if (!event.defaultPrevented) {\n              _stopPropagationForAgGrid22(event);\n            }\n            break;\n          case KeyCode42.UP:\n          case KeyCode42.DOWN:\n            _stopPropagationForAgGrid22(event);\n            break;\n          case KeyCode42.ESCAPE:\n            if (_isStopPropagationForAgGrid2(event)) {\n              return;\n            }\n            if (this.eGui.contains(_getActiveDomElement22(this.gos))) {\n              event.preventDefault();\n              _stopPropagationForAgGrid22(event);\n              this.focusWrapper.focus();\n            }\n            break;\n        }\n      }\n    });\n    const highlightClass = \"ag-advanced-filter-builder-virtual-list-item-highlight\";\n    this.addManagedListeners(this.focusWrapper, {\n      keydown: (event) => {\n        switch (event.key) {\n          case KeyCode42.ENTER:\n            if (_isStopPropagationForAgGrid2(event)) {\n              return;\n            }\n            if (_getActiveDomElement22(this.gos) === this.focusWrapper) {\n              event.preventDefault();\n              _stopPropagationForAgGrid22(event);\n              this.eFocusableComp.getFocusableElement().focus();\n            }\n            break;\n        }\n      },\n      focusin: () => {\n        this.focusWrapper.classList.add(highlightClass);\n      },\n      focusout: (event) => {\n        if (!this.focusWrapper.contains(event.relatedTarget)) {\n          this.focusWrapper.classList.remove(highlightClass);\n        }\n      }\n    });\n  }\n};\nfunction getAdvancedFilterBuilderAddButtonParams(translate, maxPickerWidth) {\n  return {\n    pickerAriaLabelKey: \"ariaLabelAdvancedFilterBuilderAddField\",\n    pickerAriaLabelValue: \"Advanced Filter Builder Add Field\",\n    pickerType: \"ag-list\",\n    valueList: [\n      {\n        key: \"condition\",\n        displayValue: translate(\"advancedFilterBuilderAddCondition\")\n      },\n      {\n        key: \"join\",\n        displayValue: translate(\"advancedFilterBuilderAddJoin\")\n      }\n    ],\n    valueFormatter: (value) => value == null ? null : value.displayValue ?? value.key,\n    pickerIcon: \"advancedFilterBuilderAdd\",\n    maxPickerWidth: `${maxPickerWidth ?? 120}px`,\n    wrapperClassName: \"ag-advanced-filter-builder-item-button\",\n    ariaLabel: translate(\"advancedFilterBuilderAddButtonTooltip\")\n  };\n}\nvar AdvancedFilterBuilderItemAddComp = class extends Component52 {\n  constructor(item, focusWrapper) {\n    super(\n      /* html */\n      `\n            <div class=\"ag-advanced-filter-builder-item-wrapper\" role=\"presentation\">\n                <div data-ref=\"eItem\" class=\"ag-advanced-filter-builder-item\" role=\"presentation\">\n                    <div class=\"ag-advanced-filter-builder-item-tree-lines\" aria-hidden=\"true\">\n                        <div class=\"ag-advanced-filter-builder-item-tree-line-vertical-top ag-advanced-filter-builder-item-tree-line-horizontal\"></div>\n                    </div>\n                </div>\n            </div>\n        `\n    );\n    this.item = item;\n    this.focusWrapper = focusWrapper;\n    this.eItem = RefPlaceholder42;\n  }\n  wireBeans(beans) {\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n  }\n  postConstruct() {\n    _setAriaLevel2(this.focusWrapper, 2);\n    const addButtonParams = getAdvancedFilterBuilderAddButtonParams(\n      (key) => this.advancedFilterExpressionService.translate(key),\n      this.gos.get(\"advancedFilterBuilderParams\")?.addSelectWidth\n    );\n    const eAddButton = this.createManagedBean(new AddDropdownComp(addButtonParams));\n    this.addManagedListeners(eAddButton, {\n      fieldPickerValueSelected: ({ value }) => {\n        this.dispatchLocalEvent({\n          type: \"advancedFilterBuilderAdded\",\n          item: this.item,\n          isJoin: value.key === \"join\"\n        });\n      }\n    });\n    this.eItem.appendChild(eAddButton.getGui());\n    this.createManagedBean(\n      new TooltipFeature2({\n        getGui: () => eAddButton.getGui(),\n        getLocation: () => \"advancedFilter\",\n        getTooltipValue: () => this.advancedFilterExpressionService.translate(\"advancedFilterBuilderAddButtonTooltip\")\n      })\n    );\n    this.createManagedBean(\n      new AdvancedFilterBuilderItemNavigationFeature(this.getGui(), this.focusWrapper, eAddButton)\n    );\n    _setAriaLabel22(\n      this.focusWrapper,\n      this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderItem\", [\n        this.advancedFilterExpressionService.translate(\"advancedFilterBuilderAddButtonTooltip\"),\n        `${this.item.level + 1}`\n      ])\n    );\n  }\n  afterAdd() {\n  }\n};\nvar ConditionPillWrapperComp = class extends Component62 {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-advanced-filter-builder-item-condition\" role=\"presentation\"></div>\n        `\n    );\n    this.validationMessage = null;\n  }\n  wireBeans(beans) {\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n  }\n  init(params) {\n    const { item, createPill } = params;\n    this.item = item;\n    this.createPill = createPill;\n    this.filterModel = item.filterModel;\n    this.setupColumnCondition(this.filterModel);\n    this.validate();\n    this.addDestroyFunc(() => this.destroyBeans([this.eColumnPill, this.eOperatorPill, this.eOperandPill]));\n  }\n  getDragName() {\n    return this.filterModel.colId ? this.advancedFilterExpressionService.parseColumnFilterModel(this.filterModel) : this.getDefaultColumnDisplayValue();\n  }\n  getAriaLabel() {\n    return `${this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderFilterItem\")} ${this.getDragName()}`;\n  }\n  getValidationMessage() {\n    return this.validationMessage;\n  }\n  getFocusableElement() {\n    return this.eColumnPill.getFocusableElement();\n  }\n  setupColumnCondition(filterModel) {\n    const columnDetails = this.advancedFilterExpressionService.getColumnDetails(filterModel.colId);\n    this.baseCellDataType = columnDetails.baseCellDataType;\n    this.column = columnDetails.column;\n    this.numOperands = this.getNumOperands(this.getOperatorKey());\n    this.eColumnPill = this.createPill({\n      key: this.getColumnKey(),\n      displayValue: this.getColumnDisplayValue() ?? this.getDefaultColumnDisplayValue(),\n      cssClass: \"ag-advanced-filter-builder-column-pill\",\n      isSelect: true,\n      getEditorParams: () => ({ values: this.advancedFilterExpressionService.getColumnAutocompleteEntries() }),\n      update: (key) => this.setColumnKey(key),\n      pickerAriaLabelKey: \"ariaLabelAdvancedFilterBuilderColumnSelectField\",\n      pickerAriaLabelValue: \"Advanced Filter Builder Column Select Field\",\n      ariaLabel: this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderColumn\")\n    });\n    this.getGui().appendChild(this.eColumnPill.getGui());\n    if (_exists4(this.getColumnKey())) {\n      this.createOperatorPill();\n      if (this.hasOperand()) {\n        this.createOperandPill();\n      }\n    }\n  }\n  createOperatorPill() {\n    this.eOperatorPill = this.createPill({\n      key: this.getOperatorKey(),\n      displayValue: this.getOperatorDisplayValue() ?? this.getDefaultOptionSelectValue(),\n      cssClass: \"ag-advanced-filter-builder-option-pill\",\n      isSelect: true,\n      getEditorParams: () => ({ values: this.getOperatorAutocompleteEntries() }),\n      update: (key) => this.setOperatorKey(key),\n      pickerAriaLabelKey: \"ariaLabelAdvancedFilterBuilderOptionSelectField\",\n      pickerAriaLabelValue: \"Advanced Filter Builder Option Select Field\",\n      ariaLabel: this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderOption\")\n    });\n    this.eColumnPill.getGui().insertAdjacentElement(\"afterend\", this.eOperatorPill.getGui());\n  }\n  createOperandPill() {\n    const key = this.getOperandDisplayValue() ?? \"\";\n    this.eOperandPill = this.createPill({\n      key,\n      displayValue: key,\n      baseCellDataType: this.baseCellDataType,\n      cssClass: \"ag-advanced-filter-builder-value-pill\",\n      isSelect: false,\n      update: (key2) => this.setOperand(key2),\n      ariaLabel: this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderValue\")\n    });\n    this.getGui().appendChild(this.eOperandPill.getGui());\n  }\n  getColumnKey() {\n    return this.filterModel.colId;\n  }\n  getColumnDisplayValue() {\n    return this.advancedFilterExpressionService.getColumnDisplayValue(this.filterModel);\n  }\n  getOperatorKey() {\n    return this.filterModel.type;\n  }\n  getOperatorDisplayValue() {\n    return this.advancedFilterExpressionService.getOperatorDisplayValue(this.filterModel);\n  }\n  getOperandDisplayValue() {\n    return this.advancedFilterExpressionService.getOperandDisplayValue(this.filterModel, true);\n  }\n  hasOperand() {\n    return this.numOperands > 0;\n  }\n  getOperatorAutocompleteEntries() {\n    return this.column ? this.advancedFilterExpressionService.getOperatorAutocompleteEntries(this.column, this.baseCellDataType) : [];\n  }\n  setColumnKey(colId) {\n    if (!this.eOperatorPill) {\n      this.createOperatorPill();\n    }\n    const newColumnDetails = this.advancedFilterExpressionService.getColumnDetails(colId);\n    this.column = newColumnDetails.column;\n    const newBaseCellDataType = newColumnDetails.baseCellDataType;\n    if (this.baseCellDataType !== newBaseCellDataType) {\n      this.baseCellDataType = newBaseCellDataType;\n      this.setOperatorKey(void 0);\n      if (this.eOperatorPill) {\n        _removeFromParent(this.eOperatorPill.getGui());\n        this.destroyBean(this.eOperatorPill);\n        this.createOperatorPill();\n      }\n      this.validate();\n    }\n    this.filterModel.colId = colId;\n    this.filterModel.filterType = this.baseCellDataType;\n  }\n  setOperatorKey(operator) {\n    const newNumOperands = this.getNumOperands(operator);\n    if (newNumOperands !== this.numOperands) {\n      this.numOperands = newNumOperands;\n      if (newNumOperands === 0) {\n        this.destroyOperandPill();\n      } else {\n        this.createOperandPill();\n        if (this.baseCellDataType !== \"number\") {\n          this.setOperand(\"\");\n        }\n      }\n    }\n    this.filterModel.type = operator;\n    this.validate();\n  }\n  setOperand(operand) {\n    let parsedOperand = operand;\n    if (this.column) {\n      parsedOperand = this.advancedFilterExpressionService.getOperandModelValue(\n        operand,\n        this.baseCellDataType,\n        this.column\n      ) ?? \"\";\n    }\n    this.filterModel.filter = parsedOperand;\n    this.validate();\n  }\n  getNumOperands(operator) {\n    return this.advancedFilterExpressionService.getExpressionOperator(this.baseCellDataType, operator)?.numOperands ?? 0;\n  }\n  destroyOperandPill() {\n    delete this.filterModel.filter;\n    this.getGui().removeChild(this.eOperandPill.getGui());\n    this.destroyBean(this.eOperandPill);\n    this.eOperandPill = void 0;\n  }\n  validate() {\n    let validationMessage = null;\n    if (!_exists4(this.getColumnKey())) {\n      validationMessage = this.advancedFilterExpressionService.translate(\n        \"advancedFilterBuilderValidationSelectColumn\"\n      );\n    } else if (!_exists4(this.getOperatorKey())) {\n      validationMessage = this.advancedFilterExpressionService.translate(\n        \"advancedFilterBuilderValidationSelectOption\"\n      );\n    } else if (this.numOperands > 0 && !_exists4(this.getOperandDisplayValue())) {\n      validationMessage = this.advancedFilterExpressionService.translate(\n        \"advancedFilterBuilderValidationEnterValue\"\n      );\n    }\n    this.item.valid = !validationMessage;\n    if (validationMessage !== this.validationMessage) {\n      this.validationMessage = validationMessage;\n      this.dispatchLocalEvent({\n        type: \"advancedFilterBuilderValidChanged\"\n      });\n    }\n  }\n  getDefaultColumnDisplayValue() {\n    return this.advancedFilterExpressionService.translate(\"advancedFilterBuilderSelectColumn\");\n  }\n  getDefaultOptionSelectValue() {\n    return this.advancedFilterExpressionService.translate(\"advancedFilterBuilderSelectOption\");\n  }\n};\nvar InputPillComp = class extends Component72 {\n  constructor(params) {\n    super(\n      /* html */\n      `\n            <div class=\"ag-advanced-filter-builder-pill-wrapper\" role=\"presentation\">\n                <div data-ref=\"ePill\" class=\"ag-advanced-filter-builder-pill\" role=\"button\">\n                    <span data-ref=\"eLabel\" class=\"ag-advanced-filter-builder-pill-display\"></span>\n                </div>\n            </div>\n        `\n    );\n    this.params = params;\n    this.ePill = RefPlaceholder52;\n    this.eLabel = RefPlaceholder52;\n    this.value = params.value;\n  }\n  wireBeans(beans) {\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n  }\n  postConstruct() {\n    const { cssClass, ariaLabel } = this.params;\n    this.ePill.classList.add(cssClass);\n    this.activateTabIndex([this.ePill]);\n    this.eLabel.id = `${this.getCompId()}`;\n    _setAriaDescribedBy(this.ePill, this.eLabel.id);\n    _setAriaLabel32(this.ePill, ariaLabel);\n    this.renderValue();\n    this.addManagedListeners(this.ePill, {\n      click: (event) => {\n        event.preventDefault();\n        this.showEditor();\n      },\n      keydown: (event) => {\n        switch (event.key) {\n          case KeyCode52.ENTER:\n            event.preventDefault();\n            _stopPropagationForAgGrid32(event);\n            this.showEditor();\n            break;\n        }\n      }\n    });\n    this.addDestroyFunc(() => this.destroyBean(this.eEditor));\n  }\n  getFocusableElement() {\n    return this.ePill;\n  }\n  showEditor() {\n    if (this.eEditor) {\n      return;\n    }\n    _setDisplayed32(this.ePill, false);\n    this.eEditor = this.createEditorComp(this.params.type);\n    this.eEditor.setValue(this.value);\n    const eEditorGui = this.eEditor.getGui();\n    this.eEditor.addManagedElementListeners(eEditorGui, {\n      keydown: (event) => {\n        switch (event.key) {\n          case KeyCode52.ENTER:\n            event.preventDefault();\n            _stopPropagationForAgGrid32(event);\n            this.updateValue(true);\n            break;\n          case KeyCode52.ESCAPE:\n            event.preventDefault();\n            _stopPropagationForAgGrid32(event);\n            this.hideEditor(true);\n            break;\n        }\n      },\n      focusout: () => this.updateValue(false)\n    });\n    this.getGui().appendChild(eEditorGui);\n    this.eEditor.getFocusableElement().focus();\n  }\n  createEditorComp(type) {\n    let comp;\n    switch (type) {\n      case \"text\":\n        comp = new AgInputTextField();\n        break;\n      case \"number\":\n        comp = new AgInputNumberField();\n        break;\n      case \"date\":\n        comp = new AgInputDateField();\n        break;\n    }\n    return this.createBean(comp);\n  }\n  hideEditor(keepFocus) {\n    const { eEditor } = this;\n    if (!eEditor) {\n      return;\n    }\n    this.eEditor = void 0;\n    this.getGui().removeChild(eEditor.getGui());\n    this.destroyBean(eEditor);\n    _setDisplayed32(this.ePill, true);\n    if (keepFocus) {\n      this.ePill.focus();\n    }\n  }\n  renderValue() {\n    let value;\n    this.eLabel.classList.remove(\n      \"ag-advanced-filter-builder-value-empty\",\n      \"ag-advanced-filter-builder-value-number\",\n      \"ag-advanced-filter-builder-value-text\"\n    );\n    if (!_exists5(this.value)) {\n      value = this.advancedFilterExpressionService.translate(\"advancedFilterBuilderEnterValue\");\n      this.eLabel.classList.add(\"ag-advanced-filter-builder-value-empty\");\n    } else if (this.params.type === \"number\") {\n      value = this.value;\n      this.eLabel.classList.add(\"ag-advanced-filter-builder-value-number\");\n    } else {\n      value = `\"${this.value}\"`;\n      this.eLabel.classList.add(\"ag-advanced-filter-builder-value-text\");\n    }\n    this.eLabel.innerText = value;\n  }\n  updateValue(keepFocus) {\n    if (!this.eEditor) {\n      return;\n    }\n    const value = this.eEditor.getValue() ?? \"\";\n    this.dispatchLocalEvent({\n      type: \"fieldValueChanged\",\n      value\n    });\n    this.value = value;\n    this.renderValue();\n    this.hideEditor(keepFocus);\n  }\n};\nvar JoinPillWrapperComp = class extends Component82 {\n  wireBeans(beans) {\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n  }\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-advanced-filter-builder-item-condition\" role=\"presentation\"></div>\n        `\n    );\n  }\n  init(params) {\n    const { item, createPill } = params;\n    const filterModel = item.filterModel;\n    this.filterModel = filterModel;\n    this.ePill = createPill({\n      key: filterModel.type,\n      displayValue: this.advancedFilterExpressionService.parseJoinOperator(filterModel),\n      cssClass: \"ag-advanced-filter-builder-join-pill\",\n      isSelect: true,\n      getEditorParams: () => ({\n        values: this.advancedFilterExpressionService.getJoinOperatorAutocompleteEntries()\n      }),\n      update: (key) => filterModel.type = key,\n      pickerAriaLabelKey: \"ariaLabelAdvancedFilterBuilderJoinSelectField\",\n      pickerAriaLabelValue: \"Advanced Filter Builder Join Operator Select Field\",\n      ariaLabel: this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderJoinOperator\")\n    });\n    this.getGui().appendChild(this.ePill.getGui());\n    this.addDestroyFunc(() => this.destroyBean(this.ePill));\n  }\n  getDragName() {\n    return this.advancedFilterExpressionService.parseJoinOperator(this.filterModel);\n  }\n  getAriaLabel() {\n    return `${this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderGroupItem\")} ${this.getDragName()}`;\n  }\n  getValidationMessage() {\n    return null;\n  }\n  getFocusableElement() {\n    return this.ePill.getFocusableElement();\n  }\n};\nvar SelectPillComp = class extends AgRichSelect {\n  constructor(params) {\n    super({\n      ...params,\n      template: (\n        /* html */\n        `\n                <div class=\"ag-picker-field ag-advanced-filter-builder-pill-wrapper\" role=\"presentation\">\n                    <div data-ref=\"eLabel\"></div>\n                    <div data-ref=\"eWrapper\" class=\"ag-wrapper ag-advanced-filter-builder-pill ag-picker-collapsed\">\n                        <div data-ref=\"eDisplayField\" class=\"ag-picker-field-display ag-advanced-filter-builder-pill-display\"></div>\n                        <ag-input-text-field data-ref=\"eInput\" class=\"ag-rich-select-field-input\"></ag-input-text-field>\n                        <span data-ref=\"eDeselect\" class=\"ag-rich-select-deselect-button ag-picker-field-icon\" role=\"presentation\"></span>\n                        <div data-ref=\"eIcon\" class=\"ag-picker-field-icon\" aria-hidden=\"true\"></div>\n                    </div>\n                </div>`\n      ),\n      agComponents: [AgInputTextFieldSelector3]\n    });\n    this.params = params;\n  }\n  getFocusableElement() {\n    return this.eWrapper;\n  }\n  showPicker() {\n    setTimeout(() => super.showPicker());\n  }\n  hidePicker() {\n    setTimeout(() => super.hidePicker());\n  }\n  postConstruct() {\n    super.postConstruct();\n    const { wrapperClassName, ariaLabel } = this.params;\n    this.eWrapper.classList.add(wrapperClassName);\n    _setAriaLabelledBy2(this.eWrapper, \"\");\n    _setAriaLabel42(this.eWrapper, ariaLabel);\n  }\n  createPickerComponent() {\n    if (!this.values) {\n      const { values } = this.params.getEditorParams();\n      this.values = values;\n      const key = this.value.key;\n      const value = values.find((value2) => value2.key === key) ?? {\n        key,\n        displayValue: this.value.displayValue\n      };\n      this.value = value;\n    }\n    return super.createPickerComponent();\n  }\n  onEnterKeyDown(event) {\n    _stopPropagationForAgGrid42(event);\n    if (this.isPickerDisplayed) {\n      super.onEnterKeyDown(event);\n    } else {\n      event.preventDefault();\n      this.showPicker();\n    }\n  }\n};\nvar AdvancedFilterBuilderItemComp = class extends TabGuardComp5 {\n  constructor(item, dragFeature, focusWrapper) {\n    super(\n      /* html */\n      `\n            <div class=\"ag-advanced-filter-builder-item-wrapper\" role=\"presentation\">\n                <div class=\"ag-advanced-filter-builder-item\" role=\"presentation\">\n                    <div data-ref=\"eTreeLines\" class=\"ag-advanced-filter-builder-item-tree-lines\" aria-hidden=\"true\"></div>\n                    <span data-ref=\"eDragHandle\" class=\"ag-drag-handle\" aria-hidden=\"true\"></span>\n                    <span data-ref=\"eValidation\" class=\"ag-advanced-filter-builder-item-button ag-advanced-filter-builder-invalid\" aria-hidden=\"true\"></span>\n                </div>\n                <div data-ref=\"eButtons\" class=\"ag-advanced-filter-builder-item-buttons\">\n                    <span data-ref=\"eMoveUpButton\" class=\"ag-advanced-filter-builder-item-button\" role=\"button\"></span>\n                    <span data-ref=\"eMoveDownButton\" class=\"ag-advanced-filter-builder-item-button\" role=\"button\"></span>\n                    <div data-ref=\"eAddButton\" role=\"presentation\"></div>\n                    <span data-ref=\"eRemoveButton\" class=\"ag-advanced-filter-builder-item-button\" role=\"button\"></span>\n                </div>\n            </div>\n        `\n    );\n    this.item = item;\n    this.dragFeature = dragFeature;\n    this.focusWrapper = focusWrapper;\n    this.eTreeLines = RefPlaceholder62;\n    this.eDragHandle = RefPlaceholder62;\n    this.eButtons = RefPlaceholder62;\n    this.eValidation = RefPlaceholder62;\n    this.eMoveUpButton = RefPlaceholder62;\n    this.eMoveDownButton = RefPlaceholder62;\n    this.eAddButton = RefPlaceholder62;\n    this.eRemoveButton = RefPlaceholder62;\n    this.moveUpDisabled = false;\n    this.moveDownDisabled = false;\n  }\n  wireBeans(beans) {\n    this.dragAndDropService = beans.dragAndDropService;\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n  }\n  postConstruct() {\n    const { filterModel, level, showMove } = this.item;\n    const isJoin = filterModel.filterType === \"join\";\n    this.ePillWrapper = this.createManagedBean(isJoin ? new JoinPillWrapperComp() : new ConditionPillWrapperComp());\n    this.ePillWrapper.init({ item: this.item, createPill: (params) => this.createPill(params) });\n    this.eDragHandle.insertAdjacentElement(\"afterend\", this.ePillWrapper.getGui());\n    if (level === 0) {\n      const eTreeLine = document.createElement(\"div\");\n      eTreeLine.classList.add(\"ag-advanced-filter-builder-item-tree-line-vertical-bottom\");\n      eTreeLine.classList.add(\"ag-advanced-filter-builder-item-tree-line-root\");\n      this.eTreeLines.appendChild(eTreeLine);\n      _setDisplayed42(this.eDragHandle, false);\n      _setDisplayed42(this.eButtons, false);\n      _setAriaExpanded5(this.focusWrapper, true);\n    } else {\n      this.setupTreeLines(level);\n      this.eDragHandle.appendChild(_createIconNoSpan22(\"advancedFilterBuilderDrag\", this.gos));\n      this.setupValidation();\n      this.setupMoveButtons(showMove);\n      this.setupAddButton();\n      this.setupRemoveButton();\n      this.setupDragging();\n      this.updateAriaExpanded();\n    }\n    _setAriaLevel22(this.focusWrapper, level + 1);\n    this.initialiseTabGuard({});\n    this.createManagedBean(\n      new AdvancedFilterBuilderItemNavigationFeature(this.getGui(), this.focusWrapper, this.ePillWrapper)\n    );\n    this.updateAriaLabel();\n    this.addManagedListeners(this.ePillWrapper, {\n      advancedFilterBuilderValueChanged: () => this.dispatchLocalEvent({\n        type: \"advancedFilterBuilderValueChanged\"\n      }),\n      advancedFilterBuilderValidChanged: () => this.updateValidity()\n    });\n  }\n  setState(params) {\n    const { level } = this.item;\n    if (level === 0) {\n      return;\n    }\n    const { showMove } = this.item;\n    const { disableMoveUp, disableMoveDown, treeLines, showStartTreeLine } = params;\n    this.updateTreeLines(treeLines, showStartTreeLine);\n    this.updateAriaExpanded();\n    if (showMove) {\n      this.moveUpDisabled = !!disableMoveUp;\n      this.moveDownDisabled = !!disableMoveDown;\n      this.eMoveUpButton.classList.toggle(\"ag-advanced-filter-builder-item-button-disabled\", disableMoveUp);\n      this.eMoveDownButton.classList.toggle(\"ag-advanced-filter-builder-item-button-disabled\", disableMoveDown);\n      _setAriaDisabled2(this.eMoveUpButton, !!disableMoveUp);\n      _setAriaDisabled2(this.eMoveDownButton, !!disableMoveDown);\n      this.moveUpTooltipFeature.refreshToolTip();\n      this.moveDownTooltipFeature.refreshToolTip();\n    }\n  }\n  focusMoveButton(backwards) {\n    (backwards ? this.eMoveUpButton : this.eMoveDownButton).focus();\n  }\n  afterAdd() {\n    this.ePillWrapper.getFocusableElement().focus();\n  }\n  setupTreeLines(level) {\n    for (let i = 0; i < level; i++) {\n      const eTreeLine = document.createElement(\"div\");\n      this.eTreeLines.appendChild(eTreeLine);\n    }\n  }\n  updateTreeLines(treeLines, showStartTreeLine) {\n    const lastTreeLineIndex = treeLines.length - 1;\n    const { children } = this.eTreeLines;\n    for (let i = 0; i < lastTreeLineIndex; i++) {\n      const eTreeLine2 = children.item(i);\n      if (eTreeLine2) {\n        eTreeLine2.classList.toggle(\"ag-advanced-filter-builder-item-tree-line-vertical\", !treeLines[i]);\n      }\n    }\n    const eTreeLine = children.item(lastTreeLineIndex);\n    if (eTreeLine) {\n      eTreeLine.classList.add(\"ag-advanced-filter-builder-item-tree-line-horizontal\");\n      const isLastChild = treeLines[lastTreeLineIndex];\n      eTreeLine.classList.toggle(\"ag-advanced-filter-builder-item-tree-line-vertical-top\", isLastChild);\n      eTreeLine.classList.toggle(\"ag-advanced-filter-builder-item-tree-line-vertical\", !isLastChild);\n    }\n    this.eDragHandle.classList.toggle(\n      \"ag-advanced-filter-builder-item-tree-line-vertical-bottom\",\n      showStartTreeLine\n    );\n  }\n  setupValidation() {\n    this.eValidation.appendChild(_createIconNoSpan22(\"advancedFilterBuilderInvalid\", this.gos));\n    this.validationTooltipFeature = this.createManagedBean(\n      new TooltipFeature22({\n        getGui: () => this.eValidation,\n        getLocation: () => \"advancedFilter\",\n        getTooltipValue: () => this.ePillWrapper.getValidationMessage(),\n        getTooltipShowDelayOverride: () => 1e3\n      })\n    );\n    this.updateValidity();\n  }\n  setupAddButton() {\n    const addButtonParams = getAdvancedFilterBuilderAddButtonParams(\n      (key) => this.advancedFilterExpressionService.translate(key),\n      this.gos.get(\"advancedFilterBuilderParams\")?.addSelectWidth\n    );\n    const eAddButton = this.createManagedBean(new AddDropdownComp(addButtonParams));\n    this.addManagedListeners(eAddButton, {\n      fieldPickerValueSelected: ({ value }) => this.dispatchLocalEvent({\n        type: \"advancedFilterBuilderAdded\",\n        item: this.item,\n        isJoin: value.key === \"join\"\n      })\n    });\n    this.eAddButton.appendChild(eAddButton.getGui());\n    this.createManagedBean(\n      new TooltipFeature22({\n        getGui: () => this.eAddButton,\n        getLocation: () => \"advancedFilter\",\n        getTooltipValue: () => this.advancedFilterExpressionService.translate(\"advancedFilterBuilderAddButtonTooltip\")\n      })\n    );\n  }\n  setupRemoveButton() {\n    this.eRemoveButton.appendChild(_createIconNoSpan22(\"advancedFilterBuilderRemove\", this.gos));\n    this.addManagedListeners(this.eRemoveButton, {\n      click: () => this.removeItem(),\n      keydown: (event) => {\n        switch (event.key) {\n          case KeyCode62.ENTER:\n            event.preventDefault();\n            _stopPropagationForAgGrid52(event);\n            this.removeItem();\n            break;\n        }\n      }\n    });\n    this.createManagedBean(\n      new TooltipFeature22({\n        getGui: () => this.eRemoveButton,\n        getLocation: () => \"advancedFilter\",\n        getTooltipValue: () => this.advancedFilterExpressionService.translate(\"advancedFilterBuilderRemoveButtonTooltip\")\n      })\n    );\n    _setAriaLabel52(\n      this.eRemoveButton,\n      this.advancedFilterExpressionService.translate(\"advancedFilterBuilderRemoveButtonTooltip\")\n    );\n    this.activateTabIndex([this.eRemoveButton]);\n  }\n  setupMoveButtons(showMove) {\n    if (showMove) {\n      this.eMoveUpButton.appendChild(_createIconNoSpan22(\"advancedFilterBuilderMoveUp\", this.gos));\n      this.addManagedListeners(this.eMoveUpButton, {\n        click: () => this.moveItem(true),\n        keydown: (event) => {\n          switch (event.key) {\n            case KeyCode62.ENTER:\n              event.preventDefault();\n              _stopPropagationForAgGrid52(event);\n              this.moveItem(true);\n              break;\n          }\n        }\n      });\n      this.moveUpTooltipFeature = this.createManagedBean(\n        new TooltipFeature22({\n          getGui: () => this.eMoveUpButton,\n          getLocation: () => \"advancedFilter\",\n          getTooltipValue: () => this.moveUpDisabled ? null : this.advancedFilterExpressionService.translate(\n            \"advancedFilterBuilderMoveUpButtonTooltip\"\n          )\n        })\n      );\n      _setAriaLabel52(\n        this.eMoveUpButton,\n        this.advancedFilterExpressionService.translate(\"advancedFilterBuilderMoveUpButtonTooltip\")\n      );\n      this.eMoveDownButton.appendChild(_createIconNoSpan22(\"advancedFilterBuilderMoveDown\", this.gos));\n      this.addManagedListeners(this.eMoveDownButton, {\n        click: () => this.moveItem(false),\n        keydown: (event) => {\n          switch (event.key) {\n            case KeyCode62.ENTER:\n              event.preventDefault();\n              _stopPropagationForAgGrid52(event);\n              this.moveItem(false);\n              break;\n          }\n        }\n      });\n      this.moveDownTooltipFeature = this.createManagedBean(\n        new TooltipFeature22({\n          getGui: () => this.eMoveDownButton,\n          getLocation: () => \"advancedFilter\",\n          getTooltipValue: () => this.moveDownDisabled ? null : this.advancedFilterExpressionService.translate(\n            \"advancedFilterBuilderMoveDownButtonTooltip\"\n          )\n        })\n      );\n      _setAriaLabel52(\n        this.eMoveDownButton,\n        this.advancedFilterExpressionService.translate(\"advancedFilterBuilderMoveDownButtonTooltip\")\n      );\n      this.activateTabIndex([this.eMoveUpButton, this.eMoveDownButton]);\n    } else {\n      _setDisplayed42(this.eMoveUpButton, false);\n      _setDisplayed42(this.eMoveDownButton, false);\n    }\n  }\n  updateValidity() {\n    _setVisible(this.eValidation, !this.item.valid);\n    this.validationTooltipFeature.refreshToolTip();\n    this.updateAriaLabel();\n  }\n  createPill(params) {\n    const { key, displayValue, cssClass, update, ariaLabel } = params;\n    const onUpdated = (key2) => {\n      if (key2 == null) {\n        return;\n      }\n      update(key2);\n      this.dispatchLocalEvent({\n        type: \"advancedFilterBuilderValueChanged\"\n      });\n    };\n    if (params.isSelect) {\n      const { getEditorParams, pickerAriaLabelKey, pickerAriaLabelValue } = params;\n      const advancedFilterBuilderParams = this.gos.get(\"advancedFilterBuilderParams\");\n      const minPickerWidth = `${advancedFilterBuilderParams?.pillSelectMinWidth ?? 140}px`;\n      const maxPickerWidth = `${advancedFilterBuilderParams?.pillSelectMaxWidth ?? 200}px`;\n      const comp = this.createBean(\n        new SelectPillComp({\n          pickerAriaLabelKey,\n          pickerAriaLabelValue,\n          pickerType: \"ag-list\",\n          value: {\n            key,\n            displayValue\n          },\n          valueFormatter: (value) => value == null ? null : value.displayValue ?? value.key,\n          variableWidth: true,\n          minPickerWidth,\n          maxPickerWidth,\n          getEditorParams,\n          wrapperClassName: cssClass,\n          ariaLabel\n        })\n      );\n      this.addManagedListeners(comp, {\n        fieldPickerValueSelected: ({ value }) => onUpdated(value?.key)\n      });\n      return comp;\n    } else {\n      const comp = this.createBean(\n        new InputPillComp({\n          value: displayValue,\n          cssClass,\n          type: this.getInputType(params.baseCellDataType),\n          ariaLabel\n        })\n      );\n      this.addManagedListeners(comp, { fieldValueChanged: ({ value }) => onUpdated(value) });\n      return comp;\n    }\n  }\n  getInputType(baseCellDataType) {\n    switch (baseCellDataType) {\n      case \"text\":\n      case \"object\":\n      case \"boolean\":\n        return \"text\";\n      case \"number\":\n        return \"number\";\n      case \"date\":\n      case \"dateString\":\n        return \"date\";\n    }\n  }\n  setupDragging() {\n    const dragSource = {\n      type: DragSourceType2.AdvancedFilterBuilder,\n      eElement: this.eDragHandle,\n      dragItemName: () => this.ePillWrapper.getDragName(),\n      getDefaultIconName: () => \"notAllowed\",\n      getDragItem: () => ({}),\n      onDragStarted: () => this.dragFeature.dispatchLocalEvent({\n        type: \"advancedFilterBuilderDragStarted\",\n        item: this.item\n      }),\n      onDragStopped: () => this.dragFeature.dispatchLocalEvent({\n        type: \"advancedFilterBuilderDragEnded\"\n      })\n    };\n    this.dragAndDropService.addDragSource(dragSource, true);\n    this.addDestroyFunc(() => this.dragAndDropService.removeDragSource(dragSource));\n  }\n  updateAriaLabel() {\n    const wrapperLabel = this.ePillWrapper.getAriaLabel();\n    const level = `${this.item.level + 1}`;\n    const validationMessage = this.ePillWrapper.getValidationMessage();\n    let ariaLabel;\n    if (validationMessage) {\n      ariaLabel = this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderItemValidation\", [\n        wrapperLabel,\n        level,\n        validationMessage\n      ]);\n    } else {\n      ariaLabel = this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderItem\", [\n        wrapperLabel,\n        level\n      ]);\n    }\n    _setAriaLabel52(this.focusWrapper, ariaLabel);\n  }\n  updateAriaExpanded() {\n    _removeAriaExpanded2(this.focusWrapper);\n    const { filterModel } = this.item;\n    if (filterModel?.filterType === \"join\" && filterModel.conditions.length) {\n      _setAriaExpanded5(this.focusWrapper, true);\n    }\n  }\n  removeItem() {\n    this.dispatchLocalEvent({\n      type: \"advancedFilterBuilderRemoved\",\n      item: this.item\n    });\n  }\n  moveItem(backwards) {\n    this.dispatchLocalEvent({\n      type: \"advancedFilterBuilderMoved\",\n      item: this.item,\n      backwards\n    });\n  }\n};\nvar AdvancedFilterBuilderComp = class extends Component92 {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div role=\"presentation\" class=\"ag-advanced-filter-builder\" tabindex=\"-1\">\n                <div role=\"presentation\" class=\"ag-advanced-filter-builder-list\" data-ref=\"eList\"></div>\n                <div role=\"presentation\" class=\"ag-advanced-filter-builder-button-panel\">\n                    <button class=\"ag-button ag-standard-button ag-advanced-filter-builder-apply-button\" data-ref=\"eApplyFilterButton\"></button>\n                    <button class=\"ag-button ag-standard-button ag-advanced-filter-builder-cancel-button\" data-ref=\"eCancelFilterButton\"></button>\n                </div>\n            </div>`\n    );\n    this.eList = RefPlaceholder72;\n    this.eApplyFilterButton = RefPlaceholder72;\n    this.eCancelFilterButton = RefPlaceholder72;\n    this.validationMessage = null;\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.advancedFilterService = beans.advancedFilterService;\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n  }\n  postConstruct() {\n    const { showMoveButtons } = this.gos.get(\"advancedFilterBuilderParams\") ?? {};\n    this.showMove = !!showMoveButtons;\n    this.addManagedPropertyListener(\"advancedFilterBuilderParams\", ({ currentValue }) => {\n      this.showMove = !!currentValue?.showMoveButtons;\n      this.refreshList(false);\n    });\n    this.filterModel = this.setupFilterModel();\n    this.setupVirtualList();\n    this.dragFeature = this.createManagedBean(new AdvancedFilterBuilderDragFeature(this, this.virtualList));\n    this.setupButtons();\n  }\n  refresh() {\n    let indexToFocus = this.virtualList.getLastFocusedRow();\n    this.setupFilterModel();\n    this.validateItems();\n    this.refreshList(false);\n    if (indexToFocus != null) {\n      if (!this.virtualList.getComponentAt(indexToFocus)) {\n        indexToFocus = 0;\n      }\n      this.virtualList.focusRow(indexToFocus);\n    }\n  }\n  getNumItems() {\n    return this.items.length;\n  }\n  moveItem(item, destination) {\n    if (!destination || !item) {\n      return;\n    }\n    this.moveItemToIndex(item, destination.rowIndex, destination.position);\n  }\n  afterGuiAttached() {\n    this.virtualList.awaitStable(() => this.virtualList.focusRow(0));\n  }\n  setupVirtualList() {\n    this.virtualList = this.createManagedBean(\n      new VirtualList({\n        cssIdentifier: \"advanced-filter-builder\",\n        ariaRole: \"tree\",\n        listName: this.advancedFilterExpressionService.translate(\"ariaAdvancedFilterBuilderList\")\n      })\n    );\n    this.virtualList.setComponentCreator(this.createItemComponent.bind(this));\n    this.virtualList.setComponentUpdater(this.updateItemComponent.bind(this));\n    this.virtualList.setRowHeight(40);\n    this.eList.appendChild(this.virtualList.getGui());\n    this.virtualList.setModel({\n      getRowCount: () => this.items.length,\n      getRow: (index) => this.items[index],\n      areRowsEqual: (oldRow, newRow) => oldRow === newRow\n    });\n    this.buildList();\n    this.virtualList.refresh();\n  }\n  setupButtons() {\n    this.eApplyFilterButton.innerText = this.advancedFilterExpressionService.translate(\"advancedFilterBuilderApply\");\n    this.activateTabIndex([this.eApplyFilterButton]);\n    this.addManagedElementListeners(this.eApplyFilterButton, {\n      click: () => {\n        this.advancedFilterService.setModel(this.filterModel);\n        this.filterManager?.onFilterChanged({ source: \"advancedFilter\" });\n        this.close();\n      }\n    });\n    this.validationTooltipFeature = this.createManagedBean(\n      new TooltipFeature3({\n        getGui: () => this.eApplyFilterButton,\n        getLocation: () => \"advancedFilter\",\n        getTooltipValue: () => this.validationMessage,\n        getTooltipShowDelayOverride: () => 1e3\n      })\n    );\n    this.validate();\n    const mouseListener = (isEnter) => this.addOrRemoveCssClass(\"ag-advanced-filter-builder-validation\", isEnter);\n    this.addManagedListeners(this.eApplyFilterButton, {\n      mouseenter: () => mouseListener(true),\n      mouseleave: () => mouseListener(false)\n    });\n    this.eCancelFilterButton.innerText = this.advancedFilterExpressionService.translate(\"advancedFilterBuilderCancel\");\n    this.activateTabIndex([this.eCancelFilterButton]);\n    this.addManagedElementListeners(this.eCancelFilterButton, { click: () => this.close() });\n  }\n  removeItemFromParent(item) {\n    const sourceParentIndex = item.parent.conditions.indexOf(item.filterModel);\n    item.parent.conditions.splice(sourceParentIndex, 1);\n    return sourceParentIndex;\n  }\n  moveItemToIndex(item, destinationRowIndex, destinationPosition) {\n    const destinationItem = this.items[destinationRowIndex];\n    const destinationIsParent = destinationItem.filterModel?.filterType === \"join\" && destinationPosition === \"bottom\";\n    const destinationParent = destinationIsParent ? destinationItem.filterModel : destinationItem.parent;\n    if (!destinationParent) {\n      return;\n    }\n    if (this.isChildOrSelf(destinationParent, item.filterModel) || destinationItem === item) {\n      return;\n    }\n    this.removeItemFromParent(item);\n    let destinationParentIndex;\n    if (destinationIsParent) {\n      destinationParentIndex = 0;\n    } else {\n      destinationParentIndex = destinationParent.conditions.indexOf(destinationItem.filterModel);\n      if (destinationParentIndex === -1) {\n        destinationParentIndex = destinationParent.conditions.length;\n      } else if (destinationPosition === \"bottom\") {\n        destinationParentIndex += 1;\n      }\n    }\n    destinationParent.conditions.splice(destinationParentIndex, 0, item.filterModel);\n    this.refreshList(false);\n  }\n  isChildOrSelf(modelToCheck, potentialParentModel) {\n    return modelToCheck === potentialParentModel || potentialParentModel.filterType === \"join\" && potentialParentModel.conditions.some((condition) => this.isChildOrSelf(modelToCheck, condition));\n  }\n  setupFilterModel() {\n    const filterModel = this.formatFilterModel(this.advancedFilterService.getModel());\n    this.stringifiedModel = JSON.stringify(filterModel);\n    return filterModel;\n  }\n  formatFilterModel(filterModel) {\n    filterModel = filterModel ?? {\n      filterType: \"join\",\n      type: \"AND\",\n      conditions: []\n    };\n    if (filterModel.filterType !== \"join\") {\n      filterModel = {\n        filterType: \"join\",\n        type: \"AND\",\n        conditions: [filterModel]\n      };\n    }\n    return filterModel;\n  }\n  buildList() {\n    const parseFilterModel = (filterModel, items, level, parent) => {\n      items.push({ filterModel, level, parent, valid: true, showMove: this.showMove });\n      if (filterModel.filterType === \"join\") {\n        filterModel.conditions.forEach(\n          (childFilterModel) => parseFilterModel(childFilterModel, items, level + 1, filterModel)\n        );\n        if (level === 0) {\n          items.push({ filterModel: null, level: level + 1, parent: filterModel, valid: true });\n        }\n      }\n    };\n    this.items = [];\n    parseFilterModel(this.filterModel, this.items, 0);\n  }\n  refreshList(softRefresh) {\n    if (!softRefresh) {\n      const invalidModels = [];\n      this.items.forEach((item) => {\n        if (!item.valid) {\n          invalidModels.push(item.filterModel);\n        }\n      });\n      this.buildList();\n      if (invalidModels.length) {\n        this.items.forEach((item) => {\n          if (item.filterModel && invalidModels.includes(item.filterModel)) {\n            item.valid = false;\n          }\n        });\n      }\n    }\n    this.virtualList.refresh(softRefresh);\n    this.validate();\n  }\n  updateItemComponent(item, comp) {\n    const index = this.items.indexOf(item);\n    const populateTreeLines = (filterModel2, treeLines2) => {\n      const parentItem = this.items.find((itemToCheck) => itemToCheck.filterModel === filterModel2);\n      const parentFilterModel = parentItem?.parent;\n      if (parentFilterModel) {\n        const { conditions } = parentFilterModel;\n        populateTreeLines(parentFilterModel, treeLines2);\n        treeLines2.push(conditions[conditions.length - 1] === filterModel2);\n      }\n    };\n    const treeLines = [];\n    const { filterModel } = item;\n    if (filterModel) {\n      populateTreeLines(filterModel, treeLines);\n      treeLines[0] = false;\n    }\n    const showStartTreeLine = filterModel?.filterType === \"join\" && !!filterModel.conditions.length;\n    comp.setState({\n      disableMoveUp: index === 1,\n      disableMoveDown: !this.canMoveDown(item, index),\n      treeLines,\n      showStartTreeLine\n    });\n  }\n  createItemComponent(item, focusWrapper) {\n    const itemComp = this.createBean(\n      item.filterModel ? new AdvancedFilterBuilderItemComp(item, this.dragFeature, focusWrapper) : new AdvancedFilterBuilderItemAddComp(item, focusWrapper)\n    );\n    itemComp.addManagedListeners(itemComp, {\n      advancedFilterBuilderRemoved: ({ item: item2 }) => this.removeItem(item2),\n      advancedFilterBuilderValueChanged: () => this.validate(),\n      advancedFilterBuilderAdded: ({ item: item2, isJoin }) => this.addItem(item2, isJoin),\n      advancedFilterBuilderMoved: ({ item: item2, backwards }) => this.moveItemUpDown(item2, backwards)\n    });\n    if (itemComp instanceof AdvancedFilterBuilderItemComp) {\n      this.updateItemComponent(item, itemComp);\n    }\n    return itemComp;\n  }\n  addItem(item, isJoin) {\n    const { parent: itemParent, level, filterModel: itemFilterModel } = item;\n    const itemIsJoin = itemFilterModel?.filterType === \"join\";\n    const filterModel = isJoin ? {\n      filterType: \"join\",\n      type: \"AND\",\n      conditions: []\n    } : {};\n    const parent = itemIsJoin ? itemFilterModel : itemParent;\n    let insertIndex = itemIsJoin ? 0 : parent.conditions.indexOf(itemFilterModel);\n    if (insertIndex >= 0) {\n      if (!itemIsJoin) {\n        insertIndex += 1;\n      }\n      parent.conditions.splice(insertIndex, 0, filterModel);\n    } else {\n      parent.conditions.push(filterModel);\n    }\n    let index = this.items.indexOf(item);\n    const softRefresh = index >= 0;\n    if (softRefresh) {\n      if (item.filterModel) {\n        index++;\n      }\n      const newItems = [\n        {\n          filterModel,\n          level: itemIsJoin ? level + 1 : level,\n          parent,\n          valid: isJoin,\n          showMove: this.showMove\n        }\n      ];\n      this.items.splice(index, 0, ...newItems);\n    }\n    this.refreshList(softRefresh);\n    if (softRefresh) {\n      this.virtualList.getComponentAt(index)?.afterAdd();\n    }\n  }\n  removeItem(item) {\n    const parent = item.parent;\n    const { filterModel } = item;\n    const parentIndex = parent.conditions.indexOf(filterModel);\n    parent.conditions.splice(parentIndex, 1);\n    const isJoin = item.filterModel?.filterType === \"join\";\n    const index = this.items.indexOf(item);\n    const softRefresh = !isJoin && index >= 0;\n    if (softRefresh) {\n      this.items.splice(index, 1);\n    }\n    this.refreshList(softRefresh);\n    if (index >= 0) {\n      this.virtualList.focusRow(index);\n    }\n  }\n  moveItemUpDown(item, backwards) {\n    const itemIndex = this.items.indexOf(item);\n    const destinationIndex = backwards ? itemIndex - 1 : itemIndex + 1;\n    if (destinationIndex === 0 || !backwards && !this.canMoveDown(item, itemIndex)) {\n      return;\n    }\n    const destinationItem = this.items[destinationIndex];\n    const indexInParent = this.removeItemFromParent(item);\n    const { level, filterModel, parent } = item;\n    const {\n      level: destinationLevel,\n      filterModel: destinationFilterModel,\n      parent: destinationParent\n    } = destinationItem;\n    if (backwards) {\n      if (destinationLevel === level && destinationFilterModel.filterType === \"join\") {\n        destinationFilterModel.conditions.push(filterModel);\n      } else if (destinationLevel <= level) {\n        const destinationIndex2 = destinationParent.conditions.indexOf(destinationFilterModel);\n        destinationParent.conditions.splice(destinationIndex2, 0, filterModel);\n      } else {\n        const newParentItem = parent.conditions[indexInParent - 1];\n        newParentItem.conditions.push(filterModel);\n      }\n    } else {\n      if (destinationLevel === level) {\n        if (destinationFilterModel.filterType === \"join\") {\n          destinationFilterModel.conditions.splice(0, 0, filterModel);\n        } else {\n          const destinationIndex2 = destinationParent.conditions.indexOf(destinationFilterModel);\n          destinationParent.conditions.splice(destinationIndex2 + 1, 0, filterModel);\n        }\n      } else {\n        if (indexInParent < parent.conditions.length) {\n          parent.conditions.splice(indexInParent + 1, 0, filterModel);\n        } else {\n          const parentItem = this.items.find((itemToCheck) => itemToCheck.filterModel === parent);\n          const destinationIndex2 = parentItem.parent.conditions.indexOf(parentItem.filterModel) + 1;\n          parentItem.parent.conditions.splice(destinationIndex2, 0, filterModel);\n        }\n      }\n    }\n    this.refreshList(false);\n    const newIndex = this.items.findIndex(\n      ({ filterModel: filterModelToCheck }) => filterModelToCheck === filterModel\n    );\n    if (newIndex >= 0) {\n      const comp = this.virtualList.getComponentAt(newIndex);\n      if (comp instanceof AdvancedFilterBuilderItemComp) {\n        comp.focusMoveButton(backwards);\n      }\n    }\n  }\n  canMoveDown(item, index) {\n    return !(item.level === 1 && index === this.items.length - 2 || item.level === 1 && item.parent.conditions[item.parent.conditions.length - 1] === item.filterModel);\n  }\n  close() {\n    this.advancedFilterService.getCtrl().toggleFilterBuilder({ source: \"ui\" });\n  }\n  validate() {\n    let disableApply = !this.items.every(({ valid }) => valid);\n    if (!disableApply) {\n      disableApply = JSON.stringify(this.filterModel) === this.stringifiedModel;\n      if (disableApply) {\n        this.validationMessage = this.advancedFilterExpressionService.translate(\n          \"advancedFilterBuilderValidationAlreadyApplied\"\n        );\n      } else {\n        this.validationMessage = null;\n      }\n    } else {\n      this.validationMessage = this.advancedFilterExpressionService.translate(\n        \"advancedFilterBuilderValidationIncomplete\"\n      );\n    }\n    _setDisabled2(this.eApplyFilterButton, disableApply);\n    this.validationTooltipFeature.refreshToolTip();\n  }\n  validateItems() {\n    const clearOperator = (filterModel) => {\n      filterModel.type = void 0;\n    };\n    const clearOperand = (filterModel) => {\n      delete filterModel.filter;\n    };\n    this.items.forEach((item) => {\n      if (!item.valid || !item.filterModel || item.filterModel.filterType === \"join\") {\n        return;\n      }\n      const { filterModel } = item;\n      const { colId } = filterModel;\n      const hasColumn = this.advancedFilterExpressionService.getColumnAutocompleteEntries().find(({ key }) => key === colId);\n      const columnDetails = this.advancedFilterExpressionService.getColumnDetails(filterModel.colId);\n      if (!hasColumn || !columnDetails.column) {\n        item.valid = false;\n        filterModel.colId = void 0;\n        clearOperator(filterModel);\n        clearOperand(filterModel);\n        return;\n      }\n      const operatorForType = this.advancedFilterExpressionService.getDataTypeExpressionOperator(\n        columnDetails.baseCellDataType\n      );\n      const operator = operatorForType.operators[filterModel.type];\n      if (!operator) {\n        item.valid = false;\n        clearOperator(filterModel);\n        clearOperand(filterModel);\n        return;\n      }\n      if (operator.numOperands > 0 && !_exists6(filterModel.filter)) {\n        item.valid = false;\n        return;\n      }\n    });\n  }\n};\nvar AdvancedFilterCtrl = class extends BeanStub42 {\n  constructor(enabled) {\n    super();\n    this.enabled = enabled;\n  }\n  wireBeans(beans) {\n    this.ctrlsService = beans.ctrlsService;\n    this.popupService = beans.popupService;\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n    this.environment = beans.environment;\n  }\n  postConstruct() {\n    this.hasAdvancedFilterParent = !!this.gos.get(\"advancedFilterParent\");\n    this.ctrlsService.whenReady(this, () => this.setAdvancedFilterComp());\n    this.addManagedEventListeners({\n      advancedFilterEnabledChanged: ({ enabled }) => this.onEnabledChanged(enabled)\n    });\n    this.addManagedPropertyListener(\"advancedFilterParent\", () => this.updateComps());\n    this.addDestroyFunc(() => {\n      this.destroyAdvancedFilterComp();\n      this.destroyBean(this.eBuilderComp);\n      if (this.eBuilderDialog && this.eBuilderDialog.isAlive()) {\n        this.destroyBean(this.eBuilderDialog);\n      }\n    });\n  }\n  setupHeaderComp(eCompToInsertBefore) {\n    if (this.eHeaderComp) {\n      this.eHeaderComp?.getGui().remove();\n      this.destroyBean(this.eHeaderComp);\n    }\n    this.eHeaderComp = this.createManagedBean(\n      new AdvancedFilterHeaderComp(this.enabled && !this.hasAdvancedFilterParent)\n    );\n    eCompToInsertBefore.insertAdjacentElement(\"beforebegin\", this.eHeaderComp.getGui());\n  }\n  focusHeaderComp() {\n    if (this.eHeaderComp) {\n      this.eHeaderComp.getFocusableElement().focus();\n      return true;\n    }\n    return false;\n  }\n  refreshComp() {\n    this.eFilterComp?.refresh();\n    this.eHeaderComp?.refresh();\n  }\n  refreshBuilderComp() {\n    this.eBuilderComp?.refresh();\n  }\n  getHeaderHeight() {\n    return this.eHeaderComp?.getHeight() ?? 0;\n  }\n  setInputDisabled(disabled) {\n    this.eFilterComp?.setInputDisabled(disabled);\n    this.eHeaderComp?.setInputDisabled(disabled);\n  }\n  toggleFilterBuilder(params) {\n    const { source, force, eventSource } = params;\n    if (force && this.eBuilderDialog || force === false && !this.eBuilderDialog) {\n      return;\n    }\n    if (this.eBuilderDialog) {\n      this.builderDestroySource = source;\n      this.destroyBean(this.eBuilderDialog);\n      return;\n    }\n    this.setInputDisabled(true);\n    const { width, height, minWidth } = this.getBuilderDialogSize();\n    this.eBuilderComp = this.createBean(new AdvancedFilterBuilderComp());\n    this.eBuilderDialog = this.createBean(\n      new AgDialog({\n        title: this.advancedFilterExpressionService.translate(\"advancedFilterBuilderTitle\"),\n        component: this.eBuilderComp,\n        width,\n        height,\n        resizable: true,\n        movable: true,\n        maximizable: true,\n        centered: true,\n        closable: true,\n        minWidth,\n        afterGuiAttached: () => this.eBuilderComp?.afterGuiAttached(),\n        postProcessPopupParams: {\n          type: \"advancedFilterBuilder\",\n          eventSource\n        }\n      })\n    );\n    this.dispatchFilterBuilderVisibleChangedEvent(source, true);\n    this.eBuilderDialog.addEventListener(\"destroyed\", () => {\n      this.destroyBean(this.eBuilderComp);\n      this.eBuilderComp = void 0;\n      this.eBuilderDialog = void 0;\n      this.setInputDisabled(false);\n      this.dispatchLocalEvent({\n        type: \"advancedFilterBuilderClosed\"\n      });\n      this.dispatchFilterBuilderVisibleChangedEvent(this.builderDestroySource ?? \"ui\", false);\n      this.builderDestroySource = void 0;\n    });\n  }\n  dispatchFilterBuilderVisibleChangedEvent(source, visible) {\n    this.eventService.dispatchEvent({\n      type: \"advancedFilterBuilderVisibleChanged\",\n      source,\n      visible\n    });\n  }\n  getBuilderDialogSize() {\n    const minWidth = this.gos.get(\"advancedFilterBuilderParams\")?.minWidth ?? 500;\n    const popupParent = this.popupService.getPopupParent();\n    const maxWidth = Math.round(_getAbsoluteWidth(popupParent)) - 2;\n    const maxHeight = Math.round(_getAbsoluteHeight(popupParent) * 0.75) - 2;\n    const width = Math.min(Math.max(600, minWidth), maxWidth);\n    const height = Math.min(600, maxHeight);\n    return { width, height, minWidth };\n  }\n  onEnabledChanged(enabled) {\n    this.enabled = enabled;\n    this.updateComps();\n  }\n  updateComps() {\n    this.setAdvancedFilterComp();\n    this.setHeaderCompEnabled();\n    this.eventService.dispatchEvent({\n      type: \"headerHeightChanged\"\n    });\n  }\n  setAdvancedFilterComp() {\n    this.destroyAdvancedFilterComp();\n    if (!this.enabled) {\n      return;\n    }\n    const advancedFilterParent = this.gos.get(\"advancedFilterParent\");\n    this.hasAdvancedFilterParent = !!advancedFilterParent;\n    if (advancedFilterParent) {\n      const eAdvancedFilterComp = this.createBean(new AdvancedFilterComp());\n      const eAdvancedFilterCompGui = eAdvancedFilterComp.getGui();\n      this.environment.applyThemeClasses(eAdvancedFilterCompGui);\n      eAdvancedFilterCompGui.classList.add(this.gos.get(\"enableRtl\") ? \"ag-rtl\" : \"ag-ltr\");\n      advancedFilterParent.appendChild(eAdvancedFilterCompGui);\n      this.eFilterComp = eAdvancedFilterComp;\n    }\n  }\n  setHeaderCompEnabled() {\n    this.eHeaderComp?.setEnabled(this.enabled && !this.hasAdvancedFilterParent);\n  }\n  destroyAdvancedFilterComp() {\n    if (this.eFilterComp) {\n      _removeFromParent2(this.eFilterComp.getGui());\n      this.destroyBean(this.eFilterComp);\n    }\n  }\n};\nvar OperatorParser2 = class {\n  constructor(params) {\n    this.params = params;\n    this.operators = [];\n    this.operatorStartPositions = [];\n    this.operatorEndPositions = [];\n    this.activeOperator = 0;\n    this.validationError = null;\n  }\n  parseExpression(i) {\n    this.operators.push(\"\");\n    this.operatorStartPositions.push(i);\n    this.operatorEndPositions.push(void 0);\n    const { expression } = this.params;\n    while (i < expression.length) {\n      const char = expression[i];\n      if (char === \" \") {\n        const isComplete = this.parseOperator(i - 1);\n        if (isComplete) {\n          this.activeOperator++;\n          return i - 1;\n        } else {\n          this.operators[this.activeOperator] += char;\n        }\n      } else {\n        this.operators[this.activeOperator] += char;\n      }\n      i++;\n    }\n    this.parseOperator(i - 1);\n    return i;\n  }\n  isValid() {\n    return !this.validationError && (!this.operators.length || !!this.parsedOperator);\n  }\n  getValidationError() {\n    return this.validationError;\n  }\n  getFunction() {\n    return this.parsedOperator === \"OR\" ? \"||\" : \"&&\";\n  }\n  getModel() {\n    return this.parsedOperator === \"OR\" ? \"OR\" : \"AND\";\n  }\n  getAutocompleteListParams(position, operatorIndex) {\n    let searchString;\n    if (operatorIndex == null) {\n      searchString = \"\";\n    } else {\n      const operator = this.operators[operatorIndex];\n      const operatorEndPosition = this.operatorEndPositions[operatorIndex];\n      searchString = getSearchString(\n        operator,\n        position,\n        operatorEndPosition == null ? this.params.expression.length : operatorEndPosition + 1\n      );\n    }\n    let entries = this.params.advancedFilterExpressionService.getJoinOperatorAutocompleteEntries();\n    if (operatorIndex || operatorIndex == null && this.activeOperator) {\n      entries = entries.filter(({ key }) => key === this.parsedOperator);\n    }\n    return this.params.advancedFilterExpressionService.generateAutocompleteListParams(\n      entries,\n      \"join\",\n      searchString\n    );\n  }\n  updateExpression(position, updateEntry, operatorIndex) {\n    let { expression } = this.params;\n    const updatedValuePart = updateEntry.displayValue ?? updateEntry.key;\n    if (operatorIndex === 0) {\n      for (let i = this.operatorEndPositions.length - 1; i > 0; i--) {\n        const operatorEndPosition = this.operatorEndPositions[i];\n        if (operatorEndPosition == null) {\n          continue;\n        }\n        expression = updateExpression(\n          expression,\n          this.operatorStartPositions[i],\n          operatorEndPosition,\n          updatedValuePart\n        ).updatedValue;\n      }\n    }\n    const startPosition = this.operatorStartPositions.length > operatorIndex ? this.operatorStartPositions[operatorIndex] : position;\n    const endPosition = (this.operatorEndPositions.length > operatorIndex ? this.operatorEndPositions[operatorIndex] : void 0) ?? findEndPosition(expression, position, true).endPosition;\n    return updateExpression(expression, startPosition, endPosition, updatedValuePart, true);\n  }\n  getNumOperators() {\n    return this.operators.length;\n  }\n  getLastOperatorEndPosition() {\n    return this.operatorEndPositions[this.operatorEndPositions.length - 1];\n  }\n  parseOperator(endPosition) {\n    const operator = this.operators.length > this.activeOperator ? this.operators[this.activeOperator] : \"\";\n    const joinOperators = this.params.advancedFilterExpressionService.getExpressionJoinOperators();\n    const parsedValue = findMatch(operator, joinOperators, (v) => v);\n    if (parsedValue) {\n      this.operatorEndPositions[this.activeOperator] = endPosition;\n      const displayValue = joinOperators[parsedValue];\n      if (this.activeOperator) {\n        if (parsedValue !== this.parsedOperator) {\n          if (!this.validationError) {\n            this.validationError = {\n              message: this.params.advancedFilterExpressionService.translate(\n                \"advancedFilterValidationJoinOperatorMismatch\"\n              ),\n              startPosition: endPosition - operator.length + 1,\n              endPosition\n            };\n          }\n          return false;\n        }\n      } else {\n        this.parsedOperator = parsedValue;\n      }\n      if (operator !== displayValue) {\n        checkAndUpdateExpression(this.params, operator, displayValue, endPosition);\n        this.operators[this.activeOperator] = displayValue;\n      }\n      return true;\n    } else if (parsedValue === null) {\n      return false;\n    } else {\n      if (!this.validationError) {\n        this.validationError = {\n          message: this.params.advancedFilterExpressionService.translate(\n            \"advancedFilterValidationInvalidJoinOperator\"\n          ),\n          startPosition: endPosition - operator.length + 1,\n          endPosition\n        };\n      }\n      return true;\n    }\n  }\n};\nvar JoinFilterExpressionParser = class _JoinFilterExpressionParser {\n  constructor(params, startPosition) {\n    this.params = params;\n    this.startPosition = startPosition;\n    this.expectingExpression = true;\n    this.expectingOperator = false;\n    this.expressionParsers = [];\n    this.operatorParser = new OperatorParser2(this.params);\n    this.missingEndBracket = false;\n    this.extraEndBracket = false;\n  }\n  parseExpression() {\n    let i = this.startPosition;\n    const { expression } = this.params;\n    while (i < expression.length) {\n      const char = expression[i];\n      if (char === \"(\" && !this.expectingOperator) {\n        const nestedParser = new _JoinFilterExpressionParser(this.params, i + 1);\n        i = nestedParser.parseExpression();\n        this.expressionParsers.push(nestedParser);\n        this.expectingExpression = false;\n        this.expectingOperator = true;\n      } else if (char === \")\") {\n        this.endPosition = i - 1;\n        if (this.startPosition === 0) {\n          this.extraEndBracket = true;\n        }\n        return i;\n      } else if (char === \" \") {\n      } else if (this.expectingExpression) {\n        const nestedParser = new ColFilterExpressionParser(this.params, i);\n        i = nestedParser.parseExpression();\n        this.expressionParsers.push(nestedParser);\n        this.expectingExpression = false;\n        this.expectingOperator = true;\n      } else if (this.expectingOperator) {\n        i = this.operatorParser.parseExpression(i);\n        this.expectingOperator = false;\n        this.expectingExpression = true;\n      }\n      i++;\n    }\n    if (this.startPosition > 0) {\n      this.missingEndBracket = true;\n    }\n    return i;\n  }\n  isValid() {\n    return !this.missingEndBracket && !this.extraEndBracket && this.expressionParsers.length === this.operatorParser.getNumOperators() + 1 && this.operatorParser.isValid() && this.expressionParsers.every((expressionParser) => expressionParser.isValid());\n  }\n  getValidationError() {\n    const operatorError = this.operatorParser.getValidationError();\n    for (let i = 0; i < this.expressionParsers.length; i++) {\n      const expressionError = this.expressionParsers[i].getValidationError();\n      if (expressionError) {\n        return operatorError && operatorError.startPosition < expressionError.startPosition ? operatorError : expressionError;\n      }\n    }\n    if (operatorError) {\n      return operatorError;\n    }\n    if (this.extraEndBracket) {\n      return {\n        message: this.params.advancedFilterExpressionService.translate(\n          \"advancedFilterValidationExtraEndBracket\"\n        ),\n        startPosition: this.endPosition + 1,\n        endPosition: this.endPosition + 1\n      };\n    }\n    let translateKey;\n    if (this.expressionParsers.length === this.operatorParser.getNumOperators()) {\n      translateKey = \"advancedFilterValidationMissingCondition\";\n    } else if (this.missingEndBracket) {\n      translateKey = \"advancedFilterValidationMissingEndBracket\";\n    }\n    if (translateKey) {\n      return {\n        message: this.params.advancedFilterExpressionService.translate(translateKey),\n        startPosition: this.params.expression.length,\n        endPosition: this.params.expression.length\n      };\n    }\n    return null;\n  }\n  getFunctionString(params) {\n    const hasMultipleExpressions = this.expressionParsers.length > 1;\n    const expression = this.expressionParsers.map((expressionParser) => expressionParser.getFunctionString(params)).join(` ${this.operatorParser.getFunction()} `);\n    return hasMultipleExpressions ? `(${expression})` : expression;\n  }\n  getFunctionParsed(params) {\n    const operator = this.operatorParser.getFunction();\n    const funcs = this.expressionParsers.map((expressionParser) => expressionParser.getFunctionParsed(params));\n    const arrayFunc = operator === \"&&\" ? \"every\" : \"some\";\n    return (expressionProxy, node, p) => funcs[arrayFunc]((func) => func(expressionProxy, node, p));\n  }\n  getAutocompleteListParams(position) {\n    if (this.endPosition != null && position > this.endPosition + 1) {\n      return void 0;\n    }\n    if (!this.expressionParsers.length) {\n      return this.getColumnAutocompleteListParams();\n    }\n    const expressionParserIndex = this.getExpressionParserIndex(position);\n    if (expressionParserIndex == null) {\n      if (this.params.expression[position] === \"(\") {\n        return { enabled: false };\n      }\n      return this.getColumnAutocompleteListParams();\n    }\n    const expressionParser = this.expressionParsers[expressionParserIndex];\n    const autocompleteType = expressionParser.getAutocompleteListParams(position);\n    if (!autocompleteType) {\n      if (expressionParserIndex < this.expressionParsers.length - 1) {\n        return this.operatorParser.getAutocompleteListParams(position, expressionParserIndex);\n      }\n      if (this.expressionParsers.length === this.operatorParser.getNumOperators()) {\n        const operatorEndPosition = this.operatorParser.getLastOperatorEndPosition();\n        return operatorEndPosition == null || position <= operatorEndPosition + 1 ? this.operatorParser.getAutocompleteListParams(position, this.operatorParser.getNumOperators() - 1) : this.getColumnAutocompleteListParams();\n      }\n      if (this.params.expression[position - 1] === \")\") {\n        return { enabled: false };\n      }\n      return this.operatorParser.getAutocompleteListParams(position);\n    }\n    return autocompleteType;\n  }\n  updateExpression(position, updateEntry, type) {\n    const expression = this.params.expression;\n    const expressionParserIndex = this.getExpressionParserIndex(position);\n    if (expressionParserIndex == null) {\n      const updatedValuePart = type === \"column\" ? this.params.advancedFilterExpressionService.getColumnValue(updateEntry) : updateEntry.displayValue ?? updateEntry.key;\n      return updateExpression(expression, this.startPosition, this.startPosition, updatedValuePart, true);\n    }\n    const expressionParser = this.expressionParsers[expressionParserIndex];\n    const updatedExpression = expressionParser.updateExpression(position, updateEntry, type);\n    if (updatedExpression == null) {\n      if (type === \"column\") {\n        return updateExpression(\n          expression,\n          position,\n          expression.length - 1,\n          this.params.advancedFilterExpressionService.getColumnValue(updateEntry),\n          true\n        );\n      } else if (this.endPosition != null && position > this.endPosition + 1) {\n        return null;\n      } else {\n        return this.operatorParser.updateExpression(position, updateEntry, expressionParserIndex);\n      }\n    }\n    return updatedExpression;\n  }\n  getModel() {\n    if (this.expressionParsers.length > 1) {\n      return {\n        filterType: \"join\",\n        type: this.operatorParser.getModel(),\n        conditions: this.expressionParsers.map((parser) => parser.getModel())\n      };\n    } else {\n      return this.expressionParsers[0].getModel();\n    }\n  }\n  getColumnAutocompleteListParams() {\n    return this.params.advancedFilterExpressionService.generateAutocompleteListParams(\n      this.params.advancedFilterExpressionService.getColumnAutocompleteEntries(),\n      \"column\",\n      \"\"\n    );\n  }\n  getExpressionParserIndex(position) {\n    let expressionParserIndex;\n    for (let i = 0; i < this.expressionParsers.length; i++) {\n      const expressionParserToCheck = this.expressionParsers[i];\n      if (expressionParserToCheck.startPosition > position) {\n        break;\n      }\n      expressionParserIndex = i;\n    }\n    return expressionParserIndex;\n  }\n};\nvar FilterExpressionParser = class {\n  constructor(params) {\n    this.params = params;\n    this.valid = false;\n  }\n  parseExpression() {\n    this.joinExpressionParser = new JoinFilterExpressionParser(this.params, 0);\n    const i = this.joinExpressionParser.parseExpression();\n    this.valid = i >= this.params.expression.length - 1 && this.joinExpressionParser.isValid();\n    return this.params.expression;\n  }\n  isValid() {\n    return this.valid;\n  }\n  getValidationMessage() {\n    const error = this.joinExpressionParser.getValidationError();\n    if (!error) {\n      return null;\n    }\n    const { message, startPosition, endPosition } = error;\n    return startPosition < this.params.expression.length ? this.params.advancedFilterExpressionService.translate(\"advancedFilterValidationMessage\", [\n      message,\n      this.params.expression.slice(startPosition, endPosition + 1).trim()\n    ]) : this.params.advancedFilterExpressionService.translate(\"advancedFilterValidationMessageAtEnd\", [message]);\n  }\n  getFunctionString() {\n    const params = this.createFunctionParams();\n    return {\n      functionString: `return ${this.joinExpressionParser.getFunctionString(params)};`,\n      params\n    };\n  }\n  getFunctionParsed() {\n    const params = this.createFunctionParams();\n    return {\n      expressionFunction: this.joinExpressionParser.getFunctionParsed(params),\n      params\n    };\n  }\n  getAutocompleteListParams(position) {\n    return this.joinExpressionParser.getAutocompleteListParams(position) ?? { enabled: false };\n  }\n  updateExpression(position, updateEntry, type) {\n    return this.joinExpressionParser.updateExpression(position, updateEntry, type);\n  }\n  getModel() {\n    return this.isValid() ? this.joinExpressionParser.getModel() : null;\n  }\n  createFunctionParams() {\n    return {\n      operands: [],\n      operators: [],\n      evaluatorParams: []\n    };\n  }\n};\nvar AdvancedFilterService = class extends BeanStub52 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"advancedFilterService\";\n    this.appliedExpression = null;\n    this.expression = null;\n    this.isValid = true;\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.columnModel = beans.columnModel;\n    this.dataTypeService = beans.dataTypeService;\n    this.advancedFilterExpressionService = beans.advancedFilterExpressionService;\n  }\n  postConstruct() {\n    this.setEnabled(this.gos.get(\"enableAdvancedFilter\"), true);\n    this.ctrl = this.createManagedBean(new AdvancedFilterCtrl(this.enabled));\n    this.expressionProxy = {\n      getValue: (colId, node) => {\n        const column = this.columnModel.getColDefCol(colId);\n        return column ? this.valueService.getValue(column, node, true) : void 0;\n      }\n    };\n    this.addManagedPropertyListener(\"enableAdvancedFilter\", (event) => this.setEnabled(!!event.currentValue));\n    this.addManagedEventListeners({\n      newColumnsLoaded: (event) => this.onNewColumnsLoaded(event)\n    });\n    this.addManagedPropertyListener(\"includeHiddenColumnsInAdvancedFilter\", () => this.updateValidity());\n  }\n  isEnabled() {\n    return this.enabled;\n  }\n  isFilterPresent() {\n    return !!this.expressionFunction;\n  }\n  doesFilterPass(node) {\n    return this.expressionFunction(this.expressionProxy, node, this.expressionParams);\n  }\n  getModel() {\n    const expressionParser = this.createExpressionParser(this.appliedExpression);\n    expressionParser?.parseExpression();\n    return expressionParser?.getModel() ?? null;\n  }\n  setModel(model) {\n    const parseModel = (model2, isFirstParent) => {\n      if (model2.filterType === \"join\") {\n        const operator = this.advancedFilterExpressionService.parseJoinOperator(model2);\n        const expression2 = model2.conditions.map((condition) => parseModel(condition)).filter((condition) => _exists7(condition)).join(` ${operator} `);\n        return isFirstParent || model2.conditions.length <= 1 ? expression2 : `(${expression2})`;\n      } else {\n        return this.advancedFilterExpressionService.parseColumnFilterModel(model2);\n      }\n    };\n    const expression = model ? parseModel(model, true) : null;\n    this.setExpressionDisplayValue(expression);\n    this.applyExpression();\n    this.ctrl.refreshComp();\n    this.ctrl.refreshBuilderComp();\n  }\n  getExpressionDisplayValue() {\n    return this.expression;\n  }\n  setExpressionDisplayValue(expression) {\n    this.expression = expression;\n  }\n  isCurrentExpressionApplied() {\n    return this.appliedExpression === this.expression;\n  }\n  createExpressionParser(expression) {\n    if (!expression) {\n      return null;\n    }\n    return new FilterExpressionParser({\n      expression,\n      columnModel: this.columnModel,\n      dataTypeService: this.dataTypeService,\n      valueService: this.valueService,\n      advancedFilterExpressionService: this.advancedFilterExpressionService\n    });\n  }\n  getDefaultExpression(updateEntry) {\n    const updatedValue = this.advancedFilterExpressionService.getColumnValue(updateEntry) + \" \";\n    return {\n      updatedValue,\n      updatedPosition: updatedValue.length\n    };\n  }\n  isHeaderActive() {\n    return !this.gos.get(\"advancedFilterParent\");\n  }\n  getCtrl() {\n    return this.ctrl;\n  }\n  setEnabled(enabled, silent) {\n    const previousValue = this.enabled;\n    const isValidRowModel = _isClientSideRowModel(this.gos) || _isServerSideRowModel(this.gos);\n    if (enabled && !isValidRowModel) {\n      _warnOnce5(\"Advanced Filter is only supported with the Client-Side Row Model or Server-Side Row Model.\");\n    }\n    this.enabled = enabled && isValidRowModel;\n    if (!silent && this.enabled !== previousValue) {\n      this.eventService.dispatchEvent({\n        type: \"advancedFilterEnabledChanged\",\n        enabled: this.enabled\n      });\n    }\n  }\n  applyExpression() {\n    const expressionParser = this.createExpressionParser(this.expression);\n    expressionParser?.parseExpression();\n    this.applyExpressionFromParser(expressionParser);\n  }\n  applyExpressionFromParser(expressionParser) {\n    this.isValid = !expressionParser || expressionParser.isValid();\n    if (!expressionParser || !this.isValid) {\n      this.expressionFunction = null;\n      this.expressionParams = null;\n      this.appliedExpression = null;\n      return;\n    }\n    const { expressionFunction, params } = this.getFunction(expressionParser);\n    this.expressionFunction = expressionFunction;\n    this.expressionParams = params;\n    this.appliedExpression = this.expression;\n  }\n  getFunction(expressionParser) {\n    if (this.gos.get(\"suppressAdvancedFilterEval\")) {\n      return expressionParser.getFunctionParsed();\n    } else {\n      const { functionString, params } = expressionParser.getFunctionString();\n      return {\n        expressionFunction: new Function(\n          \"expressionProxy\",\n          \"node\",\n          \"params\",\n          functionString\n        ),\n        params\n      };\n    }\n  }\n  updateValidity() {\n    this.advancedFilterExpressionService.resetColumnCaches();\n    const expressionParser = this.createExpressionParser(this.expression);\n    expressionParser?.parseExpression();\n    const isValid = !expressionParser || expressionParser.isValid();\n    const updatedValidity = isValid !== this.isValid;\n    this.applyExpressionFromParser(expressionParser);\n    this.ctrl.refreshComp();\n    this.ctrl.refreshBuilderComp();\n    return updatedValidity;\n  }\n  onNewColumnsLoaded(event) {\n    if (event.source !== \"gridInitializing\" || !this.dataTypeService?.isPendingInference()) {\n      return;\n    }\n    this.ctrl.setInputDisabled(true);\n    const [destroyFunc] = this.addManagedEventListeners({\n      dataTypesInferred: () => {\n        destroyFunc?.();\n        this.ctrl.setInputDisabled(false);\n      }\n    });\n  }\n};\nvar VERSION2 = \"32.3.9\";\nvar AdvancedFilterCoreModule = _defineModule2({\n  version: VERSION2,\n  moduleName: `${ModuleNames2.AdvancedFilterModule}-core`,\n  beans: [AdvancedFilterService, AdvancedFilterExpressionService],\n  dependantModules: [EnterpriseCoreModule, _FilterCoreModule]\n});\nvar AdvancedFilterApiModule = _defineModule2({\n  version: VERSION2,\n  moduleName: `${ModuleNames2.AdvancedFilterModule}-api`,\n  apiFunctions: {\n    getAdvancedFilterModel,\n    setAdvancedFilterModel,\n    showAdvancedFilterBuilder,\n    hideAdvancedFilterBuilder\n  },\n  dependantModules: [AdvancedFilterCoreModule]\n});\nvar AdvancedFilterModule = _defineModule2({\n  version: VERSION2,\n  moduleName: ModuleNames2.AdvancedFilterModule,\n  dependantModules: [AdvancedFilterCoreModule, AdvancedFilterApiModule]\n});\n\n// enterprise-modules/charts/dist/package/main.esm.mjs\nvar main_esm_exports = {};\n__export(main_esm_exports, {\n  GridChartsModule: () => GridChartsModule,\n  agCharts: () => agCharts\n});\nimport { AgCharts as AgCharts2, time } from \"ag-charts-community\";\nimport { ModuleNames as ModuleNames22, _defineModule as _defineModule4 } from \"ag-grid-community\";\n\n// enterprise-modules/range-selection/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames3, _defineModule as _defineModule3 } from \"ag-grid-community\";\nimport {\n  AutoScrollService as AutoScrollService2,\n  BeanStub as BeanStub6,\n  CellCtrl,\n  _areEqual as _areEqual2,\n  _exists as _exists8,\n  _existsAndNotEmpty as _existsAndNotEmpty2,\n  _getCtrlForEventTarget,\n  _getSuppressMultiRanges,\n  _includes as _includes2,\n  _isCellSelectionEnabled,\n  _isDomLayout,\n  _isUsingNewCellSelectionAPI,\n  _last as _last3,\n  _makeNull as _makeNull3,\n  _missing as _missing2,\n  _shallowCompare,\n  _warnOnce as _warnOnce6\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub23, SelectionHandleType as SelectionHandleType4 } from \"ag-grid-community\";\nimport { SelectionHandleType as SelectionHandleType2, _getFillHandle, _last as _last32, _toStringOrNull as _toStringOrNull2, _warnOnce as _warnOnce22 } from \"ag-grid-community\";\nimport { Component as Component13, SelectionHandleType, _isVisible as _isVisible3, _last as _last22, _setDisplayed as _setDisplayed7 } from \"ag-grid-community\";\nimport { CellRangeType, SelectionHandleType as SelectionHandleType3, _last as _last4 } from \"ag-grid-community\";\nfunction getCellRanges(beans) {\n  return beans.rangeService?.getCellRanges() ?? null;\n}\nfunction addCellRange(beans, params) {\n  beans.rangeService?.addCellRange(params);\n}\nfunction clearRangeSelection(beans) {\n  beans.rangeService?.removeAllCellRanges();\n}\nvar RangeService = class extends BeanStub6 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rangeService\";\n    this.cellRanges = [];\n    this.bodyScrollListener = this.onBodyScroll.bind(this);\n    this.dragging = false;\n    this.intersectionRange = false;\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.dragService = beans.dragService;\n    this.columnModel = beans.columnModel;\n    this.visibleColsService = beans.visibleColsService;\n    this.cellNavigationService = beans.cellNavigationService;\n    this.pinnedRowModel = beans.pinnedRowModel;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.cellPositionUtils = beans.cellPositionUtils;\n    this.ctrlsService = beans.ctrlsService;\n    this.valueService = beans.valueService;\n  }\n  postConstruct() {\n    const onColumnsChanged = this.onColumnsChanged.bind(this);\n    const removeAllCellRanges = () => this.removeAllCellRanges();\n    const refreshLastRangeStart = this.refreshLastRangeStart.bind(this);\n    this.addManagedEventListeners({\n      newColumnsLoaded: onColumnsChanged,\n      columnVisible: onColumnsChanged,\n      columnValueChanged: onColumnsChanged,\n      columnPivotModeChanged: removeAllCellRanges,\n      columnRowGroupChanged: removeAllCellRanges,\n      columnPivotChanged: removeAllCellRanges,\n      columnGroupOpened: refreshLastRangeStart,\n      columnMoved: refreshLastRangeStart,\n      columnPinned: refreshLastRangeStart\n    });\n    this.ctrlsService.whenReady(this, (p) => {\n      const gridBodyCtrl = p.gridBodyCtrl;\n      this.autoScrollService = new AutoScrollService2({\n        scrollContainer: gridBodyCtrl.getBodyViewportElement(),\n        scrollAxis: \"xy\",\n        getVerticalPosition: () => gridBodyCtrl.getScrollFeature().getVScrollPosition().top,\n        setVerticalPosition: (position) => gridBodyCtrl.getScrollFeature().setVerticalScrollPosition(position),\n        getHorizontalPosition: () => gridBodyCtrl.getScrollFeature().getHScrollPosition().left,\n        setHorizontalPosition: (position) => gridBodyCtrl.getScrollFeature().setHorizontalScrollPosition(position),\n        shouldSkipVerticalScroll: () => !_isDomLayout(this.gos, \"normal\"),\n        shouldSkipHorizontalScroll: () => !gridBodyCtrl.getScrollFeature().isHorizontalScrollShowing()\n      });\n    });\n  }\n  // Called for both columns loaded & column visibility events\n  onColumnsChanged() {\n    this.refreshLastRangeStart();\n    const allColumns = this.visibleColsService.getAllCols();\n    this.cellRanges.forEach((cellRange) => {\n      const beforeCols = cellRange.columns;\n      cellRange.columns = cellRange.columns.filter(\n        (col) => col.isVisible() && allColumns.indexOf(col) !== -1\n      );\n      const colsInRangeChanged = !_areEqual2(beforeCols, cellRange.columns);\n      if (colsInRangeChanged) {\n        this.dispatchChangedEvent(false, true, cellRange.id);\n      }\n    });\n    const countBefore = this.cellRanges.length;\n    this.cellRanges = this.cellRanges.filter((range) => range.columns.length > 0);\n    if (countBefore > this.cellRanges.length) {\n      this.dispatchChangedEvent(false, true);\n    }\n  }\n  refreshLastRangeStart() {\n    const lastRange = _last3(this.cellRanges);\n    if (!lastRange) {\n      return;\n    }\n    this.refreshRangeStart(lastRange);\n  }\n  isContiguousRange(cellRange) {\n    const rangeColumns = cellRange.columns;\n    if (!rangeColumns.length) {\n      return false;\n    }\n    const allColumns = this.visibleColsService.getAllCols();\n    const allPositions = rangeColumns.map((c) => allColumns.indexOf(c)).sort((a, b) => a - b);\n    return _last3(allPositions) - allPositions[0] + 1 === rangeColumns.length;\n  }\n  getRangeStartRow(cellRange) {\n    if (cellRange.startRow && cellRange.endRow) {\n      return this.rowPositionUtils.before(cellRange.startRow, cellRange.endRow) ? cellRange.startRow : cellRange.endRow;\n    }\n    const rowPinned = this.pinnedRowModel.getPinnedTopRowCount() > 0 ? \"top\" : null;\n    return { rowIndex: 0, rowPinned };\n  }\n  getRangeEndRow(cellRange) {\n    if (cellRange.startRow && cellRange.endRow) {\n      return this.rowPositionUtils.before(cellRange.startRow, cellRange.endRow) ? cellRange.endRow : cellRange.startRow;\n    }\n    const pinnedBottomRowCount = this.pinnedRowModel.getPinnedBottomRowCount();\n    const pinnedBottom = pinnedBottomRowCount > 0;\n    if (pinnedBottom) {\n      return {\n        rowIndex: pinnedBottomRowCount - 1,\n        rowPinned: \"bottom\"\n      };\n    }\n    return {\n      rowIndex: this.rowModel.getRowCount() - 1,\n      rowPinned: null\n    };\n  }\n  setRangeToCell(cell, appendRange = false) {\n    if (!_isCellSelectionEnabled(this.gos)) {\n      return;\n    }\n    const columns = this.calculateColumnsBetween(cell.column, cell.column);\n    if (!columns) {\n      return;\n    }\n    const suppressMultiRangeSelections = _getSuppressMultiRanges(this.gos);\n    if (suppressMultiRangeSelections || !appendRange || _missing2(this.cellRanges)) {\n      this.removeAllCellRanges(true);\n    }\n    const rowForCell = {\n      rowIndex: cell.rowIndex,\n      rowPinned: cell.rowPinned\n    };\n    const cellRange = {\n      startRow: rowForCell,\n      endRow: rowForCell,\n      columns,\n      startColumn: cell.column\n    };\n    this.cellRanges.push(cellRange);\n    this.setNewestRangeStartCell(cell);\n    this.onDragStop();\n    this.dispatchChangedEvent(true, true);\n  }\n  extendLatestRangeToCell(cellPosition) {\n    if (this.isEmpty() || !this.newestRangeStartCell) {\n      return;\n    }\n    const cellRange = _last3(this.cellRanges);\n    this.updateRangeEnd(cellRange, cellPosition);\n  }\n  updateRangeEnd(cellRange, cellPosition, silent = false) {\n    const endColumn = cellPosition.column;\n    const colsToAdd = this.calculateColumnsBetween(cellRange.startColumn, endColumn);\n    if (!colsToAdd || this.isLastCellOfRange(cellRange, cellPosition)) {\n      return;\n    }\n    cellRange.columns = colsToAdd;\n    cellRange.endRow = { rowIndex: cellPosition.rowIndex, rowPinned: cellPosition.rowPinned };\n    if (!silent) {\n      this.dispatchChangedEvent(true, true, cellRange.id);\n    }\n  }\n  refreshRangeStart(cellRange) {\n    const { startColumn, columns } = cellRange;\n    const moveColInCellRange = (colToMove, moveToFront) => {\n      const otherCols = cellRange.columns.filter((col) => col !== colToMove);\n      if (colToMove) {\n        cellRange.startColumn = colToMove;\n        cellRange.columns = moveToFront ? [colToMove, ...otherCols] : [...otherCols, colToMove];\n      } else {\n        cellRange.columns = otherCols;\n      }\n    };\n    const { left, right } = this.getRangeEdgeColumns(cellRange);\n    const shouldMoveLeftCol = startColumn === columns[0] && startColumn !== left;\n    if (shouldMoveLeftCol) {\n      moveColInCellRange(left, true);\n      return;\n    }\n    const shouldMoveRightCol = startColumn === _last3(columns) && startColumn === right;\n    if (shouldMoveRightCol) {\n      moveColInCellRange(right, false);\n      return;\n    }\n  }\n  getRangeEdgeColumns(cellRange) {\n    const allColumns = this.visibleColsService.getAllCols();\n    const allIndices = cellRange.columns.map((c) => allColumns.indexOf(c)).filter((i) => i > -1).sort((a, b) => a - b);\n    return {\n      left: allColumns[allIndices[0]],\n      right: allColumns[_last3(allIndices)]\n    };\n  }\n  // returns true if successful, false if not successful\n  extendLatestRangeInDirection(event) {\n    if (this.isEmpty() || !this.newestRangeStartCell) {\n      return;\n    }\n    const key = event.key;\n    const ctrlKey = event.ctrlKey || event.metaKey;\n    const lastRange = _last3(this.cellRanges);\n    const startCell = this.newestRangeStartCell;\n    const firstCol = lastRange.columns[0];\n    const lastCol = _last3(lastRange.columns);\n    const endCellIndex = lastRange.endRow.rowIndex;\n    const endCellFloating = lastRange.endRow.rowPinned;\n    const endCellColumn = startCell.column === firstCol ? lastCol : firstCol;\n    const endCell = { column: endCellColumn, rowIndex: endCellIndex, rowPinned: endCellFloating };\n    const newEndCell = this.cellNavigationService.getNextCellToFocus(key, endCell, ctrlKey);\n    if (!newEndCell) {\n      return;\n    }\n    this.setCellRange({\n      rowStartIndex: startCell.rowIndex,\n      rowStartPinned: startCell.rowPinned,\n      rowEndIndex: newEndCell.rowIndex,\n      rowEndPinned: newEndCell.rowPinned,\n      columnStart: startCell.column,\n      columnEnd: newEndCell.column\n    });\n    return newEndCell;\n  }\n  setCellRange(params) {\n    if (!_isCellSelectionEnabled(this.gos)) {\n      return;\n    }\n    this.removeAllCellRanges(true);\n    this.addCellRange(params);\n  }\n  setCellRanges(cellRanges) {\n    if (_shallowCompare(this.cellRanges, cellRanges)) {\n      return;\n    }\n    this.removeAllCellRanges(true);\n    cellRanges.forEach((newRange) => {\n      if (newRange.columns && newRange.startRow) {\n        this.setNewestRangeStartCell({\n          rowIndex: newRange.startRow.rowIndex,\n          rowPinned: newRange.startRow.rowPinned,\n          column: newRange.columns[0]\n        });\n      }\n      this.cellRanges.push(newRange);\n    });\n    this.dispatchChangedEvent(false, true);\n  }\n  setNewestRangeStartCell(position) {\n    this.newestRangeStartCell = position;\n  }\n  clearCellRangeCellValues(params) {\n    let { cellRanges } = params;\n    const { cellEventSource = \"rangeService\", dispatchWrapperEvents, wrapperEventSource = \"deleteKey\" } = params;\n    if (dispatchWrapperEvents) {\n      this.eventService.dispatchEvent({\n        type: \"cellSelectionDeleteStart\",\n        source: wrapperEventSource\n      });\n      this.eventService.dispatchEvent({\n        type: \"rangeDeleteStart\",\n        source: wrapperEventSource\n      });\n    }\n    if (!cellRanges) {\n      cellRanges = this.cellRanges;\n    }\n    cellRanges.forEach((cellRange) => {\n      this.forEachRowInRange(cellRange, (rowPosition) => {\n        const rowNode = this.rowPositionUtils.getRowNode(rowPosition);\n        if (!rowNode) {\n          return;\n        }\n        for (let i = 0; i < cellRange.columns.length; i++) {\n          const column = this.columnModel.getCol(cellRange.columns[i]);\n          if (!column || !column.isCellEditable(rowNode)) {\n            continue;\n          }\n          const emptyValue = this.valueService.getDeleteValue(column, rowNode);\n          rowNode.setDataValue(column, emptyValue, cellEventSource);\n        }\n      });\n    });\n    if (dispatchWrapperEvents) {\n      this.eventService.dispatchEvent({\n        type: \"cellSelectionDeleteEnd\",\n        source: wrapperEventSource\n      });\n      this.eventService.dispatchEvent({\n        type: \"rangeDeleteEnd\",\n        source: wrapperEventSource\n      });\n    }\n  }\n  createCellRangeFromCellRangeParams(params) {\n    return this.createPartialCellRangeFromRangeParams(params, false);\n  }\n  // Range service can't normally support a range without columns, but charts can\n  createPartialCellRangeFromRangeParams(params, allowEmptyColumns) {\n    let columns;\n    let startsOnTheRight = false;\n    if (params.columns) {\n      columns = params.columns.map((c) => this.columnModel.getCol(c)).filter((c) => c);\n    } else {\n      const columnStart = this.columnModel.getCol(params.columnStart);\n      const columnEnd = this.columnModel.getCol(params.columnEnd);\n      if (!columnStart || !columnEnd) {\n        return;\n      }\n      columns = this.calculateColumnsBetween(columnStart, columnEnd);\n      if (columns && columns.length) {\n        startsOnTheRight = columns[0] !== columnStart;\n      }\n    }\n    if (!columns || !allowEmptyColumns && columns.length === 0) {\n      return;\n    }\n    const startRow = params.rowStartIndex != null ? {\n      rowIndex: params.rowStartIndex,\n      rowPinned: params.rowStartPinned || null\n    } : void 0;\n    const endRow = params.rowEndIndex != null ? {\n      rowIndex: params.rowEndIndex,\n      rowPinned: params.rowEndPinned || null\n    } : void 0;\n    return {\n      startRow,\n      endRow,\n      columns,\n      startColumn: startsOnTheRight ? _last3(columns) : columns[0]\n    };\n  }\n  addCellRange(params) {\n    const gos = this.gos;\n    if (!_isCellSelectionEnabled(gos)) {\n      return;\n    }\n    if (_isUsingNewCellSelectionAPI(gos) && _getSuppressMultiRanges(gos) && this.cellRanges.length > 0) {\n      return _warnOnce6(\"cannot add multiple ranges when `cellSelection.suppressMultiRanges = true`\");\n    }\n    const newRange = this.createCellRangeFromCellRangeParams(params);\n    if (newRange) {\n      if (newRange.startRow) {\n        this.setNewestRangeStartCell({\n          rowIndex: newRange.startRow.rowIndex,\n          rowPinned: newRange.startRow.rowPinned,\n          column: newRange.startColumn\n        });\n      }\n      this.cellRanges.push(newRange);\n      this.dispatchChangedEvent(false, true, newRange.id);\n    }\n  }\n  getCellRanges() {\n    return this.cellRanges;\n  }\n  isEmpty() {\n    return this.cellRanges.length === 0;\n  }\n  isMoreThanOneCell() {\n    const len = this.cellRanges.length;\n    if (len === 0) {\n      return false;\n    }\n    if (len > 1) {\n      return true;\n    }\n    const range = this.cellRanges[0];\n    const startRow = this.getRangeStartRow(range);\n    const endRow = this.getRangeEndRow(range);\n    return startRow.rowPinned !== endRow.rowPinned || startRow.rowIndex !== endRow.rowIndex || range.columns.length !== 1;\n  }\n  areAllRangesAbleToMerge() {\n    const rowToColumnMap = /* @__PURE__ */ new Map();\n    const len = this.cellRanges.length;\n    if (len <= 1)\n      return true;\n    this.cellRanges.forEach((range) => {\n      this.forEachRowInRange(range, (row) => {\n        const rowName = `${row.rowPinned || \"normal\"}_${row.rowIndex}`;\n        const columns = rowToColumnMap.get(rowName);\n        const currentRangeColIds = range.columns.map((col) => col.getId());\n        if (columns) {\n          const filteredColumns = currentRangeColIds.filter((col) => columns.indexOf(col) === -1);\n          columns.push(...filteredColumns);\n        } else {\n          rowToColumnMap.set(rowName, currentRangeColIds);\n        }\n      });\n    });\n    let columnsString;\n    for (const val of rowToColumnMap.values()) {\n      const currentValString = val.sort().join();\n      if (columnsString === void 0) {\n        columnsString = currentValString;\n        continue;\n      }\n      if (columnsString !== currentValString) {\n        return false;\n      }\n    }\n    return true;\n  }\n  forEachRowInRange(cellRange, callback) {\n    const topRow = this.getRangeStartRow(cellRange);\n    const bottomRow = this.getRangeEndRow(cellRange);\n    let currentRow = topRow;\n    while (currentRow) {\n      callback(currentRow);\n      if (this.rowPositionUtils.sameRow(currentRow, bottomRow)) {\n        break;\n      }\n      currentRow = this.cellNavigationService.getRowBelow(currentRow);\n    }\n  }\n  removeAllCellRanges(silent) {\n    if (this.isEmpty()) {\n      return;\n    }\n    this.onDragStop();\n    this.cellRanges.length = 0;\n    if (!silent) {\n      this.dispatchChangedEvent(false, true);\n    }\n  }\n  // as the user is dragging outside of the panel, the div starts to scroll, which in turn\n  // means we are selection more (or less) cells, but the mouse isn't moving, so we recalculate\n  // the selection my mimicking a new mouse event\n  onBodyScroll() {\n    if (this.dragging && this.lastMouseEvent) {\n      this.onDragging(this.lastMouseEvent);\n    }\n  }\n  isCellInAnyRange(cell) {\n    return this.getCellRangeCount(cell) > 0;\n  }\n  isCellInSpecificRange(cell, range) {\n    const columnInRange = range.columns !== null && _includes2(range.columns, cell.column);\n    const rowInRange = this.isRowInRange(cell.rowIndex, cell.rowPinned, range);\n    return columnInRange && rowInRange;\n  }\n  isLastCellOfRange(cellRange, cell) {\n    const { startRow, endRow } = cellRange;\n    const lastRow = this.rowPositionUtils.before(startRow, endRow) ? endRow : startRow;\n    const isLastRow = cell.rowIndex === lastRow.rowIndex && cell.rowPinned === lastRow.rowPinned;\n    const rangeFirstIndexColumn = cellRange.columns[0];\n    const rangeLastIndexColumn = _last3(cellRange.columns);\n    const lastRangeColumn = cellRange.startColumn === rangeFirstIndexColumn ? rangeLastIndexColumn : rangeFirstIndexColumn;\n    const isLastColumn = cell.column === lastRangeColumn;\n    return isLastColumn && isLastRow;\n  }\n  isBottomRightCell(cellRange, cell) {\n    const allColumns = this.visibleColsService.getAllCols();\n    const allPositions = cellRange.columns.map((c) => allColumns.indexOf(c)).sort((a, b) => a - b);\n    const { startRow, endRow } = cellRange;\n    const lastRow = this.rowPositionUtils.before(startRow, endRow) ? endRow : startRow;\n    const isRightColumn = allColumns.indexOf(cell.column) === _last3(allPositions);\n    const isLastRow = cell.rowIndex === lastRow.rowIndex && _makeNull3(cell.rowPinned) === _makeNull3(lastRow.rowPinned);\n    return isRightColumn && isLastRow;\n  }\n  // returns the number of ranges this cell is in\n  getCellRangeCount(cell) {\n    if (this.isEmpty()) {\n      return 0;\n    }\n    return this.cellRanges.filter((cellRange) => this.isCellInSpecificRange(cell, cellRange)).length;\n  }\n  isRowInRange(rowIndex, rowPinned, cellRange) {\n    const firstRow = this.getRangeStartRow(cellRange);\n    const lastRow = this.getRangeEndRow(cellRange);\n    const thisRow = { rowIndex, rowPinned: rowPinned || null };\n    const equalsFirstRow = thisRow.rowIndex === firstRow.rowIndex && thisRow.rowPinned == firstRow.rowPinned;\n    const equalsLastRow = thisRow.rowIndex === lastRow.rowIndex && thisRow.rowPinned == lastRow.rowPinned;\n    if (equalsFirstRow || equalsLastRow) {\n      return true;\n    }\n    const afterFirstRow = !this.rowPositionUtils.before(thisRow, firstRow);\n    const beforeLastRow = this.rowPositionUtils.before(thisRow, lastRow);\n    return afterFirstRow && beforeLastRow;\n  }\n  getDraggingRange() {\n    return this.draggingRange;\n  }\n  onDragStart(mouseEvent) {\n    if (!_isCellSelectionEnabled(this.gos)) {\n      return;\n    }\n    const { ctrlKey, metaKey, shiftKey } = mouseEvent;\n    const isMultiKey = ctrlKey || metaKey;\n    const allowMulti = !_getSuppressMultiRanges(this.gos);\n    const isMultiSelect = allowMulti ? isMultiKey : false;\n    const extendRange = shiftKey && _existsAndNotEmpty2(this.cellRanges);\n    if (!isMultiSelect && (!extendRange || _exists8(_last3(this.cellRanges).type))) {\n      this.removeAllCellRanges(true);\n    }\n    const startTarget = this.dragService.getStartTarget();\n    if (startTarget) {\n      this.updateValuesOnMove(startTarget);\n    }\n    if (!this.lastCellHovered) {\n      return;\n    }\n    this.dragging = true;\n    this.lastMouseEvent = mouseEvent;\n    this.intersectionRange = isMultiSelect && this.getCellRangeCount(this.lastCellHovered) > 1;\n    if (!extendRange) {\n      this.setNewestRangeStartCell(this.lastCellHovered);\n    }\n    if (this.cellRanges.length > 0) {\n      this.draggingRange = _last3(this.cellRanges);\n    } else {\n      const mouseRowPosition = {\n        rowIndex: this.lastCellHovered.rowIndex,\n        rowPinned: this.lastCellHovered.rowPinned\n      };\n      this.draggingRange = {\n        startRow: mouseRowPosition,\n        endRow: mouseRowPosition,\n        columns: [this.lastCellHovered.column],\n        startColumn: this.newestRangeStartCell.column\n      };\n      this.cellRanges.push(this.draggingRange);\n    }\n    this.ctrlsService.getGridBodyCtrl().addScrollEventListener(this.bodyScrollListener);\n    this.dispatchChangedEvent(true, false, this.draggingRange.id);\n  }\n  intersectLastRange(fromMouseClick) {\n    if (fromMouseClick && this.dragging) {\n      return;\n    }\n    if (_getSuppressMultiRanges(this.gos)) {\n      return;\n    }\n    if (this.isEmpty()) {\n      return;\n    }\n    const rowPosUtils = this.rowPositionUtils;\n    const lastRange = _last3(this.cellRanges);\n    const intersectionStartRow = this.getRangeStartRow(lastRange);\n    const intersectionEndRow = this.getRangeEndRow(lastRange);\n    const newRanges = [];\n    this.cellRanges.slice(0, -1).forEach((range) => {\n      const startRow = this.getRangeStartRow(range);\n      const endRow = this.getRangeEndRow(range);\n      const cols = range.columns;\n      const intersectCols = cols.filter((col) => lastRange.columns.indexOf(col) === -1);\n      if (intersectCols.length === cols.length) {\n        newRanges.push(range);\n        return;\n      }\n      if (rowPosUtils.before(intersectionEndRow, startRow) || rowPosUtils.before(endRow, intersectionStartRow)) {\n        newRanges.push(range);\n        return;\n      }\n      const rangeCountBefore = newRanges.length;\n      if (rowPosUtils.before(startRow, intersectionStartRow)) {\n        const top = {\n          columns: [...cols],\n          startColumn: lastRange.startColumn,\n          startRow: { ...startRow },\n          endRow: this.cellNavigationService.getRowAbove(intersectionStartRow)\n        };\n        newRanges.push(top);\n      }\n      if (intersectCols.length > 0) {\n        const middle = {\n          columns: intersectCols,\n          startColumn: _includes2(intersectCols, lastRange.startColumn) ? lastRange.startColumn : intersectCols[0],\n          startRow: this.rowMax([{ ...intersectionStartRow }, { ...startRow }]),\n          endRow: this.rowMin([{ ...intersectionEndRow }, { ...endRow }])\n        };\n        newRanges.push(middle);\n      }\n      if (rowPosUtils.before(intersectionEndRow, endRow)) {\n        newRanges.push({\n          columns: [...cols],\n          startColumn: lastRange.startColumn,\n          startRow: this.cellNavigationService.getRowBelow(intersectionEndRow),\n          endRow: { ...endRow }\n        });\n      }\n      if (newRanges.length - rangeCountBefore === 1) {\n        newRanges[newRanges.length - 1].id = range.id;\n      }\n    });\n    this.cellRanges = newRanges;\n    if (fromMouseClick) {\n      this.dispatchChangedEvent(false, true);\n    }\n  }\n  rowMax(rows) {\n    let max;\n    rows.forEach((row) => {\n      if (max === void 0 || this.rowPositionUtils.before(max, row)) {\n        max = row;\n      }\n    });\n    return max;\n  }\n  rowMin(rows) {\n    let min;\n    rows.forEach((row) => {\n      if (min === void 0 || this.rowPositionUtils.before(row, min)) {\n        min = row;\n      }\n    });\n    return min;\n  }\n  updateValuesOnMove(eventTarget) {\n    const cellCtrl = _getCtrlForEventTarget(this.gos, eventTarget, CellCtrl.DOM_DATA_KEY_CELL_CTRL);\n    const cell = cellCtrl?.getCellPosition();\n    this.cellHasChanged = false;\n    if (!cell || this.lastCellHovered && this.cellPositionUtils.equals(cell, this.lastCellHovered)) {\n      return;\n    }\n    if (cellCtrl?.isEditing()) {\n      this.dragService.cancelDrag(eventTarget);\n      return;\n    }\n    if (this.lastCellHovered) {\n      this.cellHasChanged = true;\n    }\n    this.lastCellHovered = cell;\n  }\n  onDragging(mouseEvent) {\n    if (!this.dragging || !mouseEvent) {\n      return;\n    }\n    this.updateValuesOnMove(mouseEvent.target);\n    this.lastMouseEvent = mouseEvent;\n    const cellPosition = this.lastCellHovered;\n    const isMouseAndStartInPinned = (position) => cellPosition && cellPosition.rowPinned === position && this.newestRangeStartCell.rowPinned === position;\n    const skipVerticalScroll = isMouseAndStartInPinned(\"top\") || isMouseAndStartInPinned(\"bottom\");\n    this.autoScrollService.check(mouseEvent, skipVerticalScroll);\n    if (!this.cellHasChanged) {\n      return;\n    }\n    const columns = this.calculateColumnsBetween(\n      this.newestRangeStartCell.column,\n      cellPosition.column\n    );\n    if (!columns) {\n      return;\n    }\n    this.draggingRange.endRow = {\n      rowIndex: cellPosition.rowIndex,\n      rowPinned: cellPosition.rowPinned\n    };\n    this.draggingRange.columns = columns;\n    this.dispatchChangedEvent(false, false, this.draggingRange.id);\n  }\n  onDragStop() {\n    if (!this.dragging) {\n      return;\n    }\n    const { id } = this.draggingRange;\n    this.autoScrollService.ensureCleared();\n    this.ctrlsService.getGridBodyCtrl().removeScrollEventListener(this.bodyScrollListener);\n    this.lastMouseEvent = null;\n    this.dragging = false;\n    this.draggingRange = void 0;\n    this.lastCellHovered = void 0;\n    if (this.intersectionRange) {\n      this.intersectionRange = false;\n      this.intersectLastRange();\n    }\n    this.dispatchChangedEvent(false, true, id);\n  }\n  dispatchChangedEvent(started, finished, id) {\n    this.eventService.dispatchEvent({\n      type: \"cellSelectionChanged\",\n      started,\n      finished,\n      id\n    });\n    this.eventService.dispatchEvent({\n      type: \"rangeSelectionChanged\",\n      started,\n      finished,\n      id\n    });\n  }\n  calculateColumnsBetween(columnFrom, columnTo) {\n    const allColumns = this.visibleColsService.getAllCols();\n    const isSameColumn = columnFrom === columnTo;\n    const fromIndex = allColumns.indexOf(columnFrom);\n    const logMissing = (column) => _warnOnce6(`column ${column.getId()} is not visible`);\n    if (fromIndex < 0) {\n      logMissing(columnFrom);\n      return;\n    }\n    const toIndex = isSameColumn ? fromIndex : allColumns.indexOf(columnTo);\n    if (toIndex < 0) {\n      logMissing(columnTo);\n      return;\n    }\n    if (isSameColumn) {\n      return [columnFrom];\n    }\n    const firstIndex = Math.min(fromIndex, toIndex);\n    const lastIndex = firstIndex === fromIndex ? toIndex : fromIndex;\n    const columns = [];\n    for (let i = firstIndex; i <= lastIndex; i++) {\n      columns.push(allColumns[i]);\n    }\n    return columns;\n  }\n};\nvar AbstractSelectionHandle = class extends Component13 {\n  constructor() {\n    super(...arguments);\n    this.changedCalculatedValues = false;\n    this.dragging = false;\n    this.shouldDestroyOnEndDragging = false;\n  }\n  wireBeans(beans) {\n    this.dragService = beans.dragService;\n    this.rangeService = beans.rangeService;\n    this.mouseEventService = beans.mouseEventService;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.cellPositionUtils = beans.cellPositionUtils;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  postConstruct() {\n    this.dragService.addDragSource({\n      dragStartPixels: 0,\n      eElement: this.getGui(),\n      onDragStart: this.onDragStart.bind(this),\n      onDragging: (e) => {\n        this.dragging = true;\n        this.rangeService.autoScrollService.check(e);\n        if (this.changedCalculatedValues) {\n          this.onDrag(e);\n          this.changedCalculatedValues = false;\n        }\n      },\n      onDragStop: (e) => {\n        this.dragging = false;\n        this.onDragEnd(e);\n        this.clearDragProperties();\n        if (this.shouldDestroyOnEndDragging) {\n          this.destroy();\n        }\n      },\n      onDragCancel: () => {\n        this.dragging = false;\n        this.onDragCancel();\n        this.clearDragProperties();\n      }\n    });\n    this.addManagedElementListeners(this.getGui(), { mousedown: this.preventRangeExtension.bind(this) });\n  }\n  isDragging() {\n    return this.dragging;\n  }\n  getCellCtrl() {\n    return this.cellCtrl;\n  }\n  setCellCtrl(cellComp) {\n    this.cellCtrl = cellComp;\n  }\n  getCellRange() {\n    return this.cellRange;\n  }\n  setCellRange(range) {\n    this.cellRange = range;\n  }\n  getRangeStartRow() {\n    return this.rangeStartRow;\n  }\n  setRangeStartRow(row) {\n    this.rangeStartRow = row;\n  }\n  getRangeEndRow() {\n    return this.rangeEndRow;\n  }\n  setRangeEndRow(row) {\n    this.rangeEndRow = row;\n  }\n  getLastCellHovered() {\n    return this.lastCellHovered;\n  }\n  preventRangeExtension(e) {\n    e.stopPropagation();\n  }\n  onDragStart(e) {\n    [this.cellHoverListener] = this.addManagedElementListeners(this.ctrlsService.get(\"gridCtrl\").getGui(), {\n      mousemove: this.updateValuesOnMove.bind(this)\n    });\n    document.body.classList.add(this.getDraggingCssClass());\n  }\n  getDraggingCssClass() {\n    return `ag-dragging-${this.type === SelectionHandleType.FILL ? \"fill\" : \"range\"}-handle`;\n  }\n  updateValuesOnMove(e) {\n    const cell = this.mouseEventService.getCellPositionForEvent(e);\n    if (!cell || this.lastCellHovered && this.cellPositionUtils.equals(cell, this.lastCellHovered)) {\n      return;\n    }\n    this.lastCellHovered = cell;\n    this.changedCalculatedValues = true;\n  }\n  clearDragProperties() {\n    this.clearValues();\n    this.rangeService.autoScrollService.ensureCleared();\n    document.body.classList.remove(this.getDraggingCssClass());\n  }\n  getType() {\n    return this.type;\n  }\n  refresh(cellCtrl) {\n    const oldCellComp = this.getCellCtrl();\n    const eGui = this.getGui();\n    const cellRange = _last22(this.rangeService.getCellRanges());\n    const start = cellRange.startRow;\n    const end = cellRange.endRow;\n    if (start && end) {\n      const isBefore = this.rowPositionUtils.before(end, start);\n      if (isBefore) {\n        this.setRangeStartRow(end);\n        this.setRangeEndRow(start);\n      } else {\n        this.setRangeStartRow(start);\n        this.setRangeEndRow(end);\n      }\n    }\n    if (oldCellComp !== cellCtrl || !_isVisible3(eGui)) {\n      this.setCellCtrl(cellCtrl);\n      const eParentOfValue = cellCtrl.getComp().getParentOfValue();\n      if (eParentOfValue) {\n        eParentOfValue.appendChild(eGui);\n      }\n    }\n    this.setCellRange(cellRange);\n  }\n  clearValues() {\n    this.lastCellHovered = void 0;\n    this.removeListeners();\n  }\n  removeListeners() {\n    if (this.cellHoverListener) {\n      this.cellHoverListener();\n      this.cellHoverListener = void 0;\n    }\n  }\n  destroy() {\n    if (!this.shouldDestroyOnEndDragging && this.isDragging()) {\n      _setDisplayed7(this.getGui(), false);\n      this.shouldDestroyOnEndDragging = true;\n      return;\n    }\n    this.shouldDestroyOnEndDragging = false;\n    super.destroy();\n    this.removeListeners();\n    const eGui = this.getGui();\n    if (eGui.parentElement) {\n      eGui.parentElement.removeChild(eGui);\n    }\n  }\n};\nfunction findLineByLeastSquares(values) {\n  const len = values.length;\n  let maxDecimals = 0;\n  if (len <= 1) {\n    return values;\n  }\n  for (let i = 0; i < values.length; i++) {\n    const value = values[i];\n    const splitExponent = value.toString().split(\"e-\");\n    if (splitExponent.length > 1) {\n      maxDecimals = Math.max(maxDecimals, parseInt(splitExponent[1], 10));\n      continue;\n    }\n    if (Math.floor(value) === value) {\n      continue;\n    }\n    maxDecimals = Math.max(maxDecimals, value.toString().split(\".\")[1].length);\n  }\n  let sum_x = 0;\n  let sum_y = 0;\n  let sum_xy = 0;\n  let sum_xx = 0;\n  let y = 0;\n  for (let x = 0; x < len; x++) {\n    y = values[x];\n    sum_x += x;\n    sum_y += y;\n    sum_xx += x * x;\n    sum_xy += x * y;\n  }\n  const m = (len * sum_xy - sum_x * sum_y) / (len * sum_xx - sum_x * sum_x);\n  const b = sum_y / len - m * sum_x / len;\n  const result = [];\n  for (let x = 0; x <= len; x++) {\n    result.push(parseFloat((x * m + b).toFixed(maxDecimals)));\n  }\n  return result;\n}\nvar AgFillHandle = class extends AbstractSelectionHandle {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-fill-handle\"></div>`\n    );\n    this.markedCells = [];\n    this.cellValues = [];\n    this.isUp = false;\n    this.isLeft = false;\n    this.isReduce = false;\n    this.type = SelectionHandleType2.FILL;\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.valueService = beans.valueService;\n    this.navigationService = beans.navigationService;\n    this.cellNavigationService = beans.cellNavigationService;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  updateValuesOnMove(e) {\n    super.updateValuesOnMove(e);\n    if (!this.initialXY) {\n      this.initialXY = this.mouseEventService.getNormalisedPosition(e);\n    }\n    const { x, y } = this.initialXY;\n    const { x: newX, y: newY } = this.mouseEventService.getNormalisedPosition(e);\n    const diffX = Math.abs(x - newX);\n    const diffY = Math.abs(y - newY);\n    const allowedDirection = this.getFillHandleDirection();\n    let direction;\n    if (allowedDirection === \"xy\") {\n      direction = diffX > diffY ? \"x\" : \"y\";\n    } else {\n      direction = allowedDirection;\n    }\n    if (direction !== this.dragAxis) {\n      this.dragAxis = direction;\n      this.changedCalculatedValues = true;\n    }\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  onDrag(_e) {\n    if (!this.initialPosition) {\n      const cellCtrl = this.getCellCtrl();\n      if (!cellCtrl) {\n        return;\n      }\n      this.initialPosition = cellCtrl.getCellPosition();\n    }\n    const lastCellHovered = this.getLastCellHovered();\n    if (lastCellHovered) {\n      this.markPathFrom(this.initialPosition, lastCellHovered);\n    }\n  }\n  onDragEnd(e) {\n    this.initialXY = null;\n    if (!this.markedCells.length) {\n      return;\n    }\n    const isX = this.dragAxis === \"x\";\n    const initialRange = this.getCellRange();\n    const colLen = initialRange.columns.length;\n    const rangeStartRow = this.getRangeStartRow();\n    const rangeEndRow = this.getRangeEndRow();\n    let finalRange;\n    if (!this.isUp && !this.isLeft) {\n      finalRange = this.rangeService.createCellRangeFromCellRangeParams({\n        rowStartIndex: rangeStartRow.rowIndex,\n        rowStartPinned: rangeStartRow.rowPinned,\n        columnStart: initialRange.columns[0],\n        rowEndIndex: isX ? rangeEndRow.rowIndex : this.lastCellMarked.rowIndex,\n        rowEndPinned: isX ? rangeEndRow.rowPinned : this.lastCellMarked.rowPinned,\n        columnEnd: isX ? this.lastCellMarked.column : initialRange.columns[colLen - 1]\n      });\n    } else {\n      const startRow = isX ? rangeStartRow : this.lastCellMarked;\n      finalRange = this.rangeService.createCellRangeFromCellRangeParams({\n        rowStartIndex: startRow.rowIndex,\n        rowStartPinned: startRow.rowPinned,\n        columnStart: isX ? this.lastCellMarked.column : initialRange.columns[0],\n        rowEndIndex: rangeEndRow.rowIndex,\n        rowEndPinned: rangeEndRow.rowPinned,\n        columnEnd: initialRange.columns[colLen - 1]\n      });\n    }\n    if (finalRange) {\n      this.eventService.dispatchEvent({\n        type: \"fillStart\"\n      });\n      this.handleValueChanged(initialRange, finalRange, e);\n      this.rangeService.setCellRanges([finalRange]);\n      this.eventService.dispatchEvent({\n        type: \"fillEnd\",\n        initialRange,\n        finalRange\n      });\n    }\n  }\n  onDragCancel() {\n    this.initialXY = null;\n    if (!this.markedCells.length) {\n      return;\n    }\n    this.clearMarkedPath();\n  }\n  getFillHandleDirection() {\n    const direction = _getFillHandle(this.gos)?.direction;\n    if (!direction) {\n      return \"xy\";\n    }\n    if (direction !== \"x\" && direction !== \"y\" && direction !== \"xy\") {\n      _warnOnce22(`valid values for fillHandleDirection are 'x', 'y' and 'xy'. Default to 'xy'.`);\n      return \"xy\";\n    }\n    return direction;\n  }\n  handleValueChanged(initialRange, finalRange, e) {\n    const initialRangeEndRow = this.rangeService.getRangeEndRow(initialRange);\n    const initialRangeStartRow = this.rangeService.getRangeStartRow(initialRange);\n    const finalRangeEndRow = this.rangeService.getRangeEndRow(finalRange);\n    const finalRangeStartRow = this.rangeService.getRangeStartRow(finalRange);\n    const isVertical = this.dragAxis === \"y\";\n    if (this.isReduce && !_getFillHandle(this.gos)?.suppressClearOnFillReduction) {\n      const columns = isVertical ? initialRange.columns : initialRange.columns.filter((col) => finalRange.columns.indexOf(col) < 0);\n      const startRow = isVertical ? this.cellNavigationService.getRowBelow(finalRangeEndRow) : finalRangeStartRow;\n      if (startRow) {\n        this.clearCellsInRange(startRow, initialRangeEndRow, columns);\n      }\n      return;\n    }\n    const values = [];\n    const initialValues = [];\n    const initialNonAggregatedValues = [];\n    const initialFormattedValues = [];\n    let withinInitialRange = true;\n    let idx = 0;\n    const resetValues = () => {\n      values.length = 0;\n      initialValues.length = 0;\n      initialNonAggregatedValues.length = 0;\n      initialFormattedValues.length = 0;\n      idx = 0;\n    };\n    const iterateAcrossCells = (column, columns) => {\n      let currentRow = this.isUp ? initialRangeEndRow : initialRangeStartRow;\n      let finished = false;\n      if (isVertical) {\n        withinInitialRange = true;\n        resetValues();\n      }\n      while (!finished && currentRow) {\n        const rowNode = this.rowPositionUtils.getRowNode(currentRow);\n        if (!rowNode) {\n          break;\n        }\n        if (isVertical && column) {\n          fillValues(values, column, rowNode, () => {\n            return !this.rowPositionUtils.sameRow(\n              currentRow,\n              this.isUp ? initialRangeStartRow : initialRangeEndRow\n            );\n          });\n        } else if (columns) {\n          withinInitialRange = true;\n          resetValues();\n          columns.forEach(\n            (col) => fillValues(\n              values,\n              col,\n              rowNode,\n              () => col !== (this.isLeft ? initialRange.columns[0] : _last32(initialRange.columns))\n            )\n          );\n        }\n        finished = this.rowPositionUtils.sameRow(currentRow, this.isUp ? finalRangeStartRow : finalRangeEndRow);\n        currentRow = this.isUp ? this.cellNavigationService.getRowAbove(currentRow) : this.cellNavigationService.getRowBelow(currentRow);\n      }\n    };\n    const fillValues = (currentValues, col, rowNode, updateInitialSet) => {\n      let currentValue;\n      let skipValue = false;\n      if (withinInitialRange) {\n        currentValue = this.valueService.getValue(col, rowNode);\n        initialValues.push(currentValue);\n        initialNonAggregatedValues.push(this.valueService.getValue(col, rowNode, void 0, true));\n        initialFormattedValues.push(this.valueService.formatValue(col, rowNode, currentValue));\n        withinInitialRange = updateInitialSet();\n      } else {\n        const { value, fromUserFunction, sourceCol, sourceRowNode } = this.processValues({\n          event: e,\n          values: currentValues,\n          initialValues,\n          initialNonAggregatedValues,\n          initialFormattedValues,\n          col,\n          rowNode,\n          idx: idx++\n        });\n        currentValue = value;\n        if (col.isCellEditable(rowNode)) {\n          const cellValue = this.valueService.getValue(col, rowNode);\n          if (!fromUserFunction) {\n            if (sourceCol && sourceCol.getColDef()?.useValueFormatterForExport !== false) {\n              currentValue = this.valueService.formatValue(sourceCol, sourceRowNode, currentValue) ?? currentValue;\n            }\n            if (col.getColDef().useValueParserForImport !== false) {\n              currentValue = this.valueService.parseValue(\n                col,\n                rowNode,\n                // if no sourceCol, then currentValue is a number\n                sourceCol ? currentValue : _toStringOrNull2(currentValue),\n                cellValue\n              );\n            }\n          }\n          if (!fromUserFunction || cellValue !== currentValue) {\n            rowNode.setDataValue(col, currentValue, \"rangeService\");\n          } else {\n            skipValue = true;\n          }\n        }\n      }\n      if (!skipValue) {\n        currentValues.push({\n          value: currentValue,\n          column: col,\n          rowNode\n        });\n      }\n    };\n    if (isVertical) {\n      initialRange.columns.forEach((col) => {\n        iterateAcrossCells(col);\n      });\n    } else {\n      const columns = this.isLeft ? [...finalRange.columns].reverse() : finalRange.columns;\n      iterateAcrossCells(void 0, columns);\n    }\n  }\n  clearCellsInRange(startRow, endRow, columns) {\n    const cellRange = {\n      startRow,\n      endRow,\n      columns,\n      startColumn: columns[0]\n    };\n    this.rangeService.clearCellRangeCellValues({ cellRanges: [cellRange] });\n  }\n  processValues(params) {\n    const { event, values, initialValues, initialNonAggregatedValues, initialFormattedValues, col, rowNode, idx } = params;\n    const userFillOperation = _getFillHandle(this.gos)?.setFillValue;\n    const isVertical = this.dragAxis === \"y\";\n    let direction;\n    if (isVertical) {\n      direction = this.isUp ? \"up\" : \"down\";\n    } else {\n      direction = this.isLeft ? \"left\" : \"right\";\n    }\n    if (userFillOperation) {\n      const params2 = this.gos.addGridCommonParams({\n        event,\n        values: values.map(({ value }) => value),\n        initialValues,\n        initialNonAggregatedValues,\n        initialFormattedValues,\n        currentIndex: idx,\n        currentCellValue: this.valueService.getValue(col, rowNode),\n        direction,\n        column: col,\n        rowNode\n      });\n      const userResult = userFillOperation(params2);\n      if (userResult !== false) {\n        return { value: userResult, fromUserFunction: true };\n      }\n    }\n    const allNumbers = !values.some(({ value }) => {\n      const asFloat = parseFloat(value);\n      return isNaN(asFloat) || asFloat.toString() !== value.toString();\n    });\n    if (event.altKey || !allNumbers) {\n      if (allNumbers && initialValues.length === 1) {\n        const multiplier = this.isUp || this.isLeft ? -1 : 1;\n        return { value: parseFloat(_last32(values).value) + 1 * multiplier, fromUserFunction: false };\n      }\n      const { value, column: sourceCol, rowNode: sourceRowNode } = values[idx % values.length];\n      return { value, fromUserFunction: false, sourceCol, sourceRowNode };\n    }\n    return {\n      value: _last32(findLineByLeastSquares(values.map(({ value }) => Number(value)))),\n      fromUserFunction: false\n    };\n  }\n  clearValues() {\n    this.clearMarkedPath();\n    this.clearCellValues();\n    this.lastCellMarked = void 0;\n    super.clearValues();\n  }\n  clearMarkedPath() {\n    this.markedCells.forEach((cell) => {\n      if (!cell.isAlive()) {\n        return;\n      }\n      const comp = cell.getComp();\n      comp.addOrRemoveCssClass(\"ag-selection-fill-top\", false);\n      comp.addOrRemoveCssClass(\"ag-selection-fill-right\", false);\n      comp.addOrRemoveCssClass(\"ag-selection-fill-bottom\", false);\n      comp.addOrRemoveCssClass(\"ag-selection-fill-left\", false);\n    });\n    this.markedCells.length = 0;\n    this.isUp = false;\n    this.isLeft = false;\n    this.isReduce = false;\n  }\n  clearCellValues() {\n    this.cellValues.length = 0;\n  }\n  markPathFrom(initialPosition, currentPosition) {\n    this.clearMarkedPath();\n    this.clearCellValues();\n    if (this.dragAxis === \"y\") {\n      if (this.rowPositionUtils.sameRow(currentPosition, initialPosition)) {\n        return;\n      }\n      const isBefore = this.rowPositionUtils.before(currentPosition, initialPosition);\n      const rangeStartRow = this.getRangeStartRow();\n      const rangeEndRow = this.getRangeEndRow();\n      if (isBefore && (currentPosition.rowPinned == rangeStartRow.rowPinned && currentPosition.rowIndex >= rangeStartRow.rowIndex || rangeStartRow.rowPinned != rangeEndRow.rowPinned && currentPosition.rowPinned == rangeEndRow.rowPinned && currentPosition.rowIndex <= rangeEndRow.rowIndex)) {\n        this.reduceVertical(initialPosition, currentPosition);\n        this.isReduce = true;\n      } else {\n        this.extendVertical(initialPosition, currentPosition, isBefore);\n        this.isReduce = false;\n      }\n    } else {\n      const initialColumn = initialPosition.column;\n      const currentColumn = currentPosition.column;\n      if (initialColumn === currentColumn) {\n        return;\n      }\n      const displayedColumns = this.visibleColsService.getAllCols();\n      const initialIndex = displayedColumns.indexOf(initialColumn);\n      const currentIndex = displayedColumns.indexOf(currentColumn);\n      if (currentIndex <= initialIndex && currentIndex >= displayedColumns.indexOf(this.getCellRange().columns[0])) {\n        this.reduceHorizontal(initialPosition, currentPosition);\n        this.isReduce = true;\n      } else {\n        this.extendHorizontal(initialPosition, currentPosition, currentIndex < initialIndex);\n        this.isReduce = false;\n      }\n    }\n    this.lastCellMarked = currentPosition;\n  }\n  extendVertical(initialPosition, endPosition, isMovingUp) {\n    const { navigationService, rangeService } = this;\n    let row = initialPosition;\n    do {\n      const cellRange = this.getCellRange();\n      const colLen = cellRange.columns.length;\n      for (let i = 0; i < colLen; i++) {\n        const column = cellRange.columns[i];\n        const rowPos = { rowIndex: row.rowIndex, rowPinned: row.rowPinned };\n        const cellPos = { ...rowPos, column };\n        const cellInRange = rangeService.isCellInSpecificRange(cellPos, cellRange);\n        const isInitialRow = this.rowPositionUtils.sameRow(row, initialPosition);\n        if (isMovingUp) {\n          this.isUp = true;\n        }\n        if (!isInitialRow) {\n          const cell = navigationService.getCellByPosition(cellPos);\n          if (cell) {\n            this.markedCells.push(cell);\n            const cellCtrl = cell.getComp();\n            if (!cellInRange) {\n              cellCtrl.addOrRemoveCssClass(\"ag-selection-fill-left\", i === 0);\n              cellCtrl.addOrRemoveCssClass(\"ag-selection-fill-right\", i === colLen - 1);\n            }\n            cellCtrl.addOrRemoveCssClass(\n              isMovingUp ? \"ag-selection-fill-top\" : \"ag-selection-fill-bottom\",\n              this.rowPositionUtils.sameRow(row, endPosition)\n            );\n          }\n        }\n      }\n      if (this.rowPositionUtils.sameRow(row, endPosition)) {\n        break;\n      }\n    } while (\n      // tslint:disable-next-line\n      row = isMovingUp ? this.cellNavigationService.getRowAbove(row) : this.cellNavigationService.getRowBelow(row)\n    );\n  }\n  reduceVertical(initialPosition, endPosition) {\n    let row = initialPosition;\n    do {\n      const cellRange = this.getCellRange();\n      const colLen = cellRange.columns.length;\n      const isLastRow = this.rowPositionUtils.sameRow(row, endPosition);\n      for (let i = 0; i < colLen; i++) {\n        const rowPos = { rowIndex: row.rowIndex, rowPinned: row.rowPinned };\n        const celPos = { ...rowPos, column: cellRange.columns[i] };\n        const cell = this.navigationService.getCellByPosition(celPos);\n        if (cell) {\n          this.markedCells.push(cell);\n          const cellComp = cell.getComp();\n          cellComp.addOrRemoveCssClass(\n            \"ag-selection-fill-bottom\",\n            this.rowPositionUtils.sameRow(row, endPosition)\n          );\n        }\n      }\n      if (isLastRow) {\n        break;\n      }\n    } while (row = this.cellNavigationService.getRowAbove(row));\n  }\n  extendHorizontal(initialPosition, endPosition, isMovingLeft) {\n    const allCols = this.visibleColsService.getAllCols();\n    const startCol = allCols.indexOf(isMovingLeft ? endPosition.column : initialPosition.column);\n    const endCol = allCols.indexOf(\n      isMovingLeft ? this.getCellRange().columns[0] : endPosition.column\n    );\n    const offset = isMovingLeft ? 0 : 1;\n    const colsToMark = allCols.slice(startCol + offset, endCol + offset);\n    const rangeStartRow = this.getRangeStartRow();\n    const rangeEndRow = this.getRangeEndRow();\n    colsToMark.forEach((column) => {\n      let row = rangeStartRow;\n      let isLastRow = false;\n      do {\n        isLastRow = this.rowPositionUtils.sameRow(row, rangeEndRow);\n        const cell = this.navigationService.getCellByPosition({\n          rowIndex: row.rowIndex,\n          rowPinned: row.rowPinned,\n          column\n        });\n        if (cell) {\n          this.markedCells.push(cell);\n          const cellComp = cell.getComp();\n          cellComp.addOrRemoveCssClass(\n            \"ag-selection-fill-top\",\n            this.rowPositionUtils.sameRow(row, rangeStartRow)\n          );\n          cellComp.addOrRemoveCssClass(\n            \"ag-selection-fill-bottom\",\n            this.rowPositionUtils.sameRow(row, rangeEndRow)\n          );\n          if (isMovingLeft) {\n            this.isLeft = true;\n            cellComp.addOrRemoveCssClass(\"ag-selection-fill-left\", column === colsToMark[0]);\n          } else {\n            cellComp.addOrRemoveCssClass(\"ag-selection-fill-right\", column === _last32(colsToMark));\n          }\n        }\n        row = this.cellNavigationService.getRowBelow(row);\n      } while (!isLastRow);\n    });\n  }\n  reduceHorizontal(initialPosition, endPosition) {\n    const allCols = this.visibleColsService.getAllCols();\n    const startCol = allCols.indexOf(endPosition.column);\n    const endCol = allCols.indexOf(initialPosition.column);\n    const colsToMark = allCols.slice(startCol, endCol);\n    const rangeStartRow = this.getRangeStartRow();\n    const rangeEndRow = this.getRangeEndRow();\n    colsToMark.forEach((column) => {\n      let row = rangeStartRow;\n      let isLastRow = false;\n      do {\n        isLastRow = this.rowPositionUtils.sameRow(row, rangeEndRow);\n        const cell = this.navigationService.getCellByPosition({\n          rowIndex: row.rowIndex,\n          rowPinned: row.rowPinned,\n          column\n        });\n        if (cell) {\n          this.markedCells.push(cell);\n          const cellComp = cell.getComp();\n          cellComp.addOrRemoveCssClass(\"ag-selection-fill-right\", column === colsToMark[0]);\n        }\n        row = this.cellNavigationService.getRowBelow(row);\n      } while (!isLastRow);\n    });\n  }\n  refresh(cellCtrl) {\n    const cellRange = this.rangeService.getCellRanges()[0];\n    const isColumnRange = !cellRange.startRow || !cellRange.endRow;\n    if (isColumnRange) {\n      this.destroy();\n      return;\n    }\n    super.refresh(cellCtrl);\n  }\n};\nvar AgRangeHandle = class extends AbstractSelectionHandle {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-range-handle\"></div>`\n    );\n    this.type = SelectionHandleType3.RANGE;\n    this.rangeFixed = false;\n  }\n  onDrag(e) {\n    const lastCellHovered = this.getLastCellHovered();\n    if (!lastCellHovered) {\n      return;\n    }\n    const cellRanges = this.rangeService.getCellRanges();\n    const lastRange = _last4(cellRanges);\n    if (!this.rangeFixed) {\n      this.fixRangeStartEnd(lastRange);\n      this.rangeFixed = true;\n    }\n    this.endPosition = {\n      rowIndex: lastCellHovered.rowIndex,\n      rowPinned: lastCellHovered.rowPinned,\n      column: lastCellHovered.column\n    };\n    if (cellRanges.length === 2 && cellRanges[0].type === CellRangeType.DIMENSION && lastRange.type === CellRangeType.VALUE) {\n      const rowChanged = !this.rowPositionUtils.sameRow(\n        this.endPosition,\n        this.rangeService.getRangeEndRow(lastRange)\n      );\n      if (rowChanged) {\n        this.rangeService.updateRangeEnd(\n          cellRanges[0],\n          {\n            ...this.endPosition,\n            column: cellRanges[0].columns[0]\n          },\n          true\n        );\n      }\n    }\n    this.rangeService.extendLatestRangeToCell(this.endPosition);\n  }\n  onDragEnd(e) {\n    const cellRange = _last4(this.rangeService.getCellRanges());\n    this.fixRangeStartEnd(cellRange);\n    this.rangeFixed = false;\n  }\n  onDragCancel() {\n    this.rangeFixed = false;\n  }\n  fixRangeStartEnd(cellRange) {\n    const startRow = this.rangeService.getRangeStartRow(cellRange);\n    const endRow = this.rangeService.getRangeEndRow(cellRange);\n    const column = cellRange.columns[0];\n    cellRange.startRow = startRow;\n    cellRange.endRow = endRow;\n    cellRange.startColumn = column;\n  }\n};\nvar SelectionHandleFactory = class extends BeanStub23 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"selectionHandleFactory\";\n  }\n  createSelectionHandle(type) {\n    return this.createBean(type === SelectionHandleType4.RANGE ? new AgRangeHandle() : new AgFillHandle());\n  }\n};\nvar VERSION3 = \"32.3.9\";\nvar RangeSelectionCoreModule = _defineModule3({\n  version: VERSION3,\n  moduleName: `${ModuleNames3.RangeSelectionModule}-core`,\n  beans: [RangeService, SelectionHandleFactory],\n  dependantModules: [EnterpriseCoreModule]\n});\nvar RangeSelectionApiModule = _defineModule3({\n  version: VERSION3,\n  moduleName: `${ModuleNames3.RangeSelectionModule}-api`,\n  apiFunctions: {\n    getCellRanges,\n    addCellRange,\n    clearRangeSelection,\n    clearCellSelection: clearRangeSelection\n  },\n  dependantModules: [RangeSelectionCoreModule]\n});\nvar RangeSelectionModule = _defineModule3({\n  version: VERSION3,\n  moduleName: ModuleNames3.RangeSelectionModule,\n  dependantModules: [RangeSelectionCoreModule, RangeSelectionApiModule]\n});\n\n// enterprise-modules/charts/dist/package/main.esm.mjs\nimport { BeanStub as BeanStub24, TabGuardComp as TabGuardComp6 } from \"ag-grid-community\";\nimport { Component as Component63 } from \"ag-grid-community\";\nimport { ChartMappings } from \"ag-grid-community\";\nimport { BeanStub as BeanStub7, _removeFromParent as _removeFromParent3 } from \"ag-grid-community\";\nimport { AgInputNumberFieldSelector, Component as Component14 } from \"ag-grid-community\";\nimport { AgCheckboxSelector as AgCheckboxSelector2, Component as Component33 } from \"ag-grid-community\";\nimport { AgPickerField as AgPickerField2, _getDocument as _getDocument7 } from \"ag-grid-community\";\nimport { _Util as _Util3 } from \"ag-charts-community\";\nimport { Component as Component23, KeyCode as KeyCode14, RefPlaceholder as RefPlaceholder23, _exists as _exists9, _setDisplayed as _setDisplayed8 } from \"ag-grid-community\";\nimport { _Util as _Util2 } from \"ag-charts-community\";\nimport { AgInputTextField as AgInputTextField2, RefPlaceholder as RefPlaceholder11 } from \"ag-grid-community\";\nimport { _Util } from \"ag-charts-community\";\nimport { AgCheckboxSelector as AgCheckboxSelector22, Component as Component43 } from \"ag-grid-community\";\nimport { AgAbstractLabel, AgInputNumberFieldSelector as AgInputNumberFieldSelector2, RefPlaceholder as RefPlaceholder33 } from \"ag-grid-community\";\nimport { AgAbstractInputField } from \"ag-grid-community\";\nimport { AgCheckboxSelector as AgCheckboxSelector3, Component as Component53, RefPlaceholder as RefPlaceholder43 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub33, Component as Component73, RefPlaceholder as RefPlaceholder53, _createIconNoSpan as _createIconNoSpan10, _isNothingFocused as _isNothingFocused3 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub43, _includes as _includes3, _isClientSideRowModel as _isClientSideRowModel2, _warnOnce as _warnOnce7 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub53, _warnOnce as _warnOnce23 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub62 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub15, _warnOnce as _warnOnce14 } from \"ag-grid-community\";\nimport { VERSION as CHARTS_VERSION, _ModuleSupport as _ModuleSupport4 } from \"ag-charts-community\";\nimport {\n  Component as Component40,\n  RefPlaceholder as RefPlaceholder19,\n  _clearElement as _clearElement42,\n  _getAbsoluteHeight as _getAbsoluteHeight2,\n  _getAbsoluteWidth as _getAbsoluteWidth2,\n  _includes as _includes7,\n  _mergeDeep,\n  _removeFromParent as _removeFromParent7,\n  _setDisplayed as _setDisplayed52,\n  _warnOnce as _warnOnce13\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub11, _warnOnce as _warnOnce8 } from \"ag-grid-community\";\nimport { _ModuleSupport as _ModuleSupport2, _Theme as _Theme2 } from \"ag-charts-community\";\nimport { _includes as _includes22, _warnOnce as _warnOnce32 } from \"ag-grid-community\";\nimport { _Theme } from \"ag-charts-community\";\nimport { BeanStub as BeanStub10, CellRangeType as CellRangeType2, _includes as _includes4 } from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub72,\n  ModuleNames as ModuleNames4,\n  _includes as _includes32,\n  _isClientSideRowModel as _isClientSideRowModel22,\n  _isServerSideRowModel as _isServerSideRowModel2,\n  _last as _last5,\n  _values,\n  _warnOnce as _warnOnce42\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub8, _missingOrEmpty as _missingOrEmpty2, _warnOnce as _warnOnce52 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub9, _warnOnce as _warnOnce62 } from \"ag-grid-community\";\nimport { _warnOnce as _warnOnce72 } from \"ag-grid-community\";\nimport { _ModuleSupport } from \"ag-charts-community\";\nimport { AgCharts, _ModuleSupport as _ModuleSupport3, _Theme as _Theme3 } from \"ag-charts-community\";\nimport { _includes as _includes5 } from \"ag-grid-community\";\nimport { _Util as _Util4 } from \"ag-charts-community\";\nimport { GROUP_AUTO_COLUMN_ID } from \"ag-grid-community\";\nimport { AgPromise as AgPromise2, Component as Component39, _warnOnce as _warnOnce12 } from \"ag-grid-community\";\nimport { Component as Component83, RefPlaceholder as RefPlaceholder63, _clearElement as _clearElement6, _createIconNoSpan as _createIconNoSpan23, _getDocument as _getDocument22 } from \"ag-grid-community\";\nimport { AgPromise as AgPromise3, Component as Component38 } from \"ag-grid-community\";\nimport { AgToggleButton as AgToggleButton3, Component as Component132, _getDocument as _getDocument32, _setDisplayed as _setDisplayed23, _warnOnce as _warnOnce9 } from \"ag-grid-community\";\nimport { AgSelect as AgSelect3, AgToggleButton as AgToggleButton2 } from \"ag-grid-community\";\nimport { AgSelect as AgSelect2, Component as Component102 } from \"ag-grid-community\";\nimport {\n  AgSelect,\n  Component as Component93,\n  DragSourceType as DragSourceType3,\n  _escapeString as _escapeString5,\n  _getActiveDomElement as _getActiveDomElement7,\n  _removeFromParent as _removeFromParent22\n} from \"ag-grid-community\";\nimport { AgSelect as AgSelect4, ChartMappings as ChartMappings2, Component as Component112, RefPlaceholder as RefPlaceholder73 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub12 } from \"ag-grid-community\";\nimport { AgCheckbox, AgSelect as AgSelect5, Component as Component122, _areEqual as _areEqual3, _clearElement as _clearElement22 } from \"ag-grid-community\";\nimport { AgToggleButton as AgToggleButton22 } from \"ag-grid-community\";\nimport { Component as Component34, _warnOnce as _warnOnce10 } from \"ag-grid-community\";\nimport {\n  AgCheckbox as AgCheckbox2,\n  AgSelectSelector as AgSelectSelector2,\n  Component as Component17,\n  RefPlaceholder as RefPlaceholder102,\n  _removeFromParent as _removeFromParent4,\n  _setDisplayed as _setDisplayed33\n} from \"ag-grid-community\";\nimport {\n  AgAbstractLabel as AgAbstractLabel2,\n  AgInputNumberFieldSelector as AgInputNumberFieldSelector3,\n  RefPlaceholder as RefPlaceholder82,\n  _exists as _exists23,\n  _getActiveDomElement as _getActiveDomElement23,\n  _setFixedWidth\n} from \"ag-grid-community\";\nimport {\n  AgSelectSelector,\n  Component as Component142,\n  RefPlaceholder as RefPlaceholder92,\n  _capitalise,\n  _includes as _includes6,\n  _removeFromParent as _removeFromParent32\n} from \"ag-grid-community\";\nimport { Component as Component15 } from \"ag-grid-community\";\nimport { Component as Component16 } from \"ag-grid-community\";\nimport { AgSelect as AgSelect6, Component as Component18, RefPlaceholder as RefPlaceholder112 } from \"ag-grid-community\";\nimport { Component as Component21, RefPlaceholder as RefPlaceholder13 } from \"ag-grid-community\";\nimport { Component as Component19 } from \"ag-grid-community\";\nimport { Component as Component20, RefPlaceholder as RefPlaceholder12 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub13 } from \"ag-grid-community\";\nimport { AgCheckbox as AgCheckbox3, AgSelect as AgSelect7, Component as Component222, RefPlaceholder as RefPlaceholder14 } from \"ag-grid-community\";\nimport {\n  AgSelect as AgSelect8,\n  AgToggleButton as AgToggleButton4,\n  Component as Component31,\n  RefPlaceholder as RefPlaceholder16,\n  _errorOnce,\n  _removeFromParent as _removeFromParent6\n} from \"ag-grid-community\";\nimport { Component as Component232 } from \"ag-grid-community\";\nimport { Component as Component24 } from \"ag-grid-community\";\nimport { Component as Component25 } from \"ag-grid-community\";\nimport { AgSelectSelector as AgSelectSelector3, Component as Component26 } from \"ag-grid-community\";\nimport { AgSelectSelector as AgSelectSelector4, Component as Component27, RefPlaceholder as RefPlaceholder15, _removeFromParent as _removeFromParent5 } from \"ag-grid-community\";\nimport { Component as Component28 } from \"ag-grid-community\";\nimport { Component as Component29 } from \"ag-grid-community\";\nimport { Component as Component30 } from \"ag-grid-community\";\nimport { Component as Component332, RefPlaceholder as RefPlaceholder17 } from \"ag-grid-community\";\nimport { AgInputTextField as AgInputTextField22, Component as Component322 } from \"ag-grid-community\";\nimport {\n  Component as Component37,\n  RefPlaceholder as RefPlaceholder18,\n  _clearElement as _clearElement32,\n  _createIconNoSpan as _createIconNoSpan32,\n  _getAbsoluteWidth as _getAbsoluteWidth3,\n  _radioCssClass as _radioCssClass2,\n  _setDisplayed as _setDisplayed43,\n  _shallowCompare as _shallowCompare2\n} from \"ag-grid-community\";\nimport { Component as Component36, KeyCode as KeyCode23, _setAriaLabel as _setAriaLabel7, _warnOnce as _warnOnce11 } from \"ag-grid-community\";\n__reExport(main_esm_exports, ag_charts_community_star);\nimport { _Scene } from \"ag-charts-community\";\nimport { _Scene as _Scene3 } from \"ag-charts-community\";\nimport { Component as Component35, _errorOnce as _errorOnce2 } from \"ag-grid-community\";\nimport { _Scene as _Scene2 } from \"ag-charts-community\";\nimport { _Scene as _Scene4 } from \"ag-charts-community\";\nimport { _Scene as _Scene5 } from \"ag-charts-community\";\nimport { _Scene as _Scene6 } from \"ag-charts-community\";\nimport { _Scene as _Scene7 } from \"ag-charts-community\";\nimport { _Scene as _Scene8 } from \"ag-charts-community\";\nimport { _Scene as _Scene9 } from \"ag-charts-community\";\nimport { _Scene as _Scene10 } from \"ag-charts-community\";\nimport { _Scene as _Scene11 } from \"ag-charts-community\";\nimport { _Scene as _Scene13 } from \"ag-charts-community\";\nimport { _Scene as _Scene12 } from \"ag-charts-community\";\nimport { _Scene as _Scene14 } from \"ag-charts-community\";\nimport { _Scene as _Scene15 } from \"ag-charts-community\";\nimport { _Scene as _Scene16 } from \"ag-charts-community\";\nimport { _Scene as _Scene17 } from \"ag-charts-community\";\nimport { _Scene as _Scene18, _Theme as _Theme4, _Util as _Util5 } from \"ag-charts-community\";\nimport { _Scene as _Scene19, _Theme as _Theme5 } from \"ag-charts-community\";\nimport { _Scene as _Scene20 } from \"ag-charts-community\";\nimport { _Scene as _Scene21, _Theme as _Theme6, _Util as _Util6 } from \"ag-charts-community\";\nimport { _Scene as _Scene22, _Theme as _Theme7 } from \"ag-charts-community\";\nimport { _Scene as _Scene23 } from \"ag-charts-community\";\nimport { _Scene as _Scene24 } from \"ag-charts-community\";\nimport { BeanStub as BeanStub14, _errorOnce as _errorOnce3 } from \"ag-grid-community\";\nimport * as ag_charts_community_star from \"ag-charts-community\";\nvar SERIES_TYPES = {\n  area: {\n    isCartesian: true,\n    canInvert: true\n  },\n  bar: {\n    isCartesian: true,\n    canInvert: true\n  },\n  histogram: {\n    isCartesian: true\n  },\n  line: {\n    isCartesian: true,\n    canInvert: true\n  },\n  pie: {\n    isPie: true\n  },\n  donut: {\n    isPie: true,\n    canInvert: true\n  },\n  scatter: {\n    isCartesian: true\n  },\n  bubble: {\n    isCartesian: true\n  },\n  \"radial-column\": {\n    isPolar: true,\n    isEnterprise: true,\n    isRadial: true,\n    canInvert: true\n  },\n  \"radial-bar\": {\n    isPolar: true,\n    isEnterprise: true,\n    isRadial: true,\n    canInvert: true\n  },\n  \"radar-line\": {\n    isPolar: true,\n    isEnterprise: true,\n    canInvert: true\n  },\n  \"radar-area\": {\n    isPolar: true,\n    isEnterprise: true,\n    canInvert: true\n  },\n  nightingale: {\n    isPolar: true,\n    isEnterprise: true,\n    canInvert: true\n  },\n  \"range-bar\": {\n    isCartesian: true,\n    isEnterprise: true,\n    canSwitchDirection: true\n  },\n  \"range-area\": {\n    isCartesian: true,\n    isEnterprise: true\n  },\n  \"box-plot\": {\n    isCartesian: true,\n    isEnterprise: true,\n    canSwitchDirection: true\n  },\n  treemap: {\n    isEnterprise: true,\n    isHierarchical: true\n  },\n  sunburst: {\n    isEnterprise: true,\n    isHierarchical: true\n  },\n  heatmap: {\n    isCartesian: true,\n    isEnterprise: true\n  },\n  waterfall: {\n    isCartesian: true,\n    isEnterprise: true,\n    canSwitchDirection: true\n  }\n};\nfunction isSeriesType(seriesType) {\n  return !!SERIES_TYPES[seriesType];\n}\nfunction isComboChart(chartType) {\n  return ChartMappings.COMBO_CHART_TYPES.includes(chartType);\n}\nfunction doesSeriesHaveProperty(seriesType, prop) {\n  return !!SERIES_TYPES[seriesType]?.[prop];\n}\nfunction isEnterpriseChartType(chartType) {\n  return doesSeriesHaveProperty(getSeriesType(chartType), \"isEnterprise\");\n}\nvar stackedChartTypes = /* @__PURE__ */ new Set([\"stackedColumn\", \"normalizedColumn\", \"stackedBar\", \"normalizedBar\"]);\nfunction isStacked(chartType) {\n  return stackedChartTypes.has(chartType);\n}\nfunction isCartesian(seriesType) {\n  return doesSeriesHaveProperty(seriesType, \"isCartesian\");\n}\nfunction isPolar(seriesType) {\n  return doesSeriesHaveProperty(seriesType, \"isPolar\");\n}\nfunction isRadial(seriesType) {\n  return doesSeriesHaveProperty(seriesType, \"isRadial\");\n}\nfunction isHierarchical(seriesType) {\n  return doesSeriesHaveProperty(seriesType, \"isHierarchical\");\n}\nfunction getCanonicalChartType(chartType) {\n  return chartType === \"doughnut\" ? \"donut\" : chartType;\n}\nfunction getSeriesTypeIfExists(chartType) {\n  return ChartMappings.CHART_TYPE_TO_SERIES_TYPE[chartType];\n}\nfunction getSeriesType(chartType) {\n  return getSeriesTypeIfExists(chartType) ?? \"line\";\n}\nfunction isPieChartSeries(seriesType) {\n  return doesSeriesHaveProperty(seriesType, \"isPie\");\n}\nfunction canOnlyHaveSingleSeries(chartType) {\n  return chartType === \"pie\" || chartType === \"waterfall\" || chartType === \"histogram\";\n}\nfunction getMaxNumCategories(chartType) {\n  return isHierarchical(getSeriesType(chartType)) ? void 0 : 1;\n}\nfunction getMaxNumSeries(chartType) {\n  if (isHierarchical(getSeriesType(chartType))) {\n    return 2;\n  } else if (canOnlyHaveSingleSeries(chartType)) {\n    return 1;\n  } else {\n    return void 0;\n  }\n}\nfunction supportsInvertedCategorySeries(chartType) {\n  return !isComboChart(chartType) && doesSeriesHaveProperty(getSeriesType(chartType), \"canInvert\");\n}\nfunction canSwitchDirection(chartType) {\n  return doesSeriesHaveProperty(getSeriesType(chartType), \"canSwitchDirection\");\n}\nfunction getFullChartNameTranslationKey(chartType) {\n  switch (chartType) {\n    case \"groupedColumn\":\n    case \"stackedColumn\":\n    case \"normalizedColumn\":\n    case \"groupedBar\":\n    case \"stackedBar\":\n    case \"normalizedBar\":\n    case \"stackedArea\":\n    case \"normalizedArea\":\n      return `${chartType}Full`;\n    case \"doughnut\":\n      return \"donut\";\n    case \"areaColumnCombo\":\n      return \"AreaColumnCombo\";\n    default:\n      return chartType;\n  }\n}\nvar ChartPanelFeature = class extends BeanStub7 {\n  constructor(chartController, eGui, cssClass, createPanels) {\n    super();\n    this.chartController = chartController;\n    this.eGui = eGui;\n    this.cssClass = cssClass;\n    this.createPanels = createPanels;\n    this.panels = [];\n  }\n  postConstruct() {\n    this.addManagedListeners(this.chartController, {\n      chartUpdated: () => this.refreshPanels(true),\n      chartApiUpdate: () => this.refreshPanels(false)\n    });\n  }\n  addComponent(component) {\n    this.createBean(component);\n    this.panels.push(component);\n    component.addCssClass(this.cssClass);\n    this.eGui.appendChild(component.getGui());\n  }\n  refreshPanels(reuse) {\n    const chartType = this.chartController.getChartType();\n    const isGrouping = this.chartController.isGrouping();\n    const seriesType = getSeriesType(chartType);\n    if (reuse && chartType === this.chartType && isGrouping === this.isGrouping) {\n      return;\n    }\n    this.destroyPanels();\n    this.createPanels(chartType, seriesType);\n    this.chartType = chartType;\n    this.isGrouping = isGrouping;\n  }\n  destroyPanels() {\n    this.panels.forEach((panel) => {\n      _removeFromParent3(panel.getGui());\n      this.destroyBean(panel);\n    });\n    this.panels = [];\n  }\n  destroy() {\n    this.destroyPanels();\n    super.destroy();\n  }\n};\nvar AnimationPanel = class extends Component14 {\n  constructor(chartMenuParamsFactory) {\n    super();\n    this.chartMenuParamsFactory = chartMenuParamsFactory;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const animationGroupParams = this.chartMenuParamsFactory.addEnableParams(\n      \"animation.enabled\",\n      {\n        cssIdentifier: \"charts-advanced-settings-top-level\",\n        direction: \"vertical\",\n        suppressOpenCloseIcons: true,\n        title: this.chartTranslationService.translate(\"animation\"),\n        suppressEnabledCheckbox: true,\n        useToggle: true\n      }\n    );\n    const animationHeightInputParams = this.chartMenuParamsFactory.getDefaultNumberInputParams(\n      \"animation.duration\",\n      \"durationMillis\",\n      {\n        min: 0\n      }\n    );\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"animationGroup\">\n                <ag-input-number-field data-ref=\"animationHeightInput\"></ag-input>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgInputNumberFieldSelector],\n      {\n        animationGroup: animationGroupParams,\n        animationHeightInput: animationHeightInputParams\n      }\n    );\n  }\n};\nvar AgColorInput = class extends AgInputTextField2 {\n  constructor() {\n    super({\n      template: (\n        /* html */\n        `\n            <div role=\"presentation\" class=\"ag-color-input\">\n                <div data-ref=\"eLabel\" class=\"ag-input-field-label\"></div>\n                <div data-ref=\"eWrapper\" class=\"ag-wrapper ag-input-wrapper\" role=\"presentation\">\n                    <input data-ref=\"eInput\" class=\"ag-input-field-input\">\n                    <div data-ref=\"eColor\" class=\"ag-color-input-color\"></div>\n                </div>\n            </div>`\n      )\n    });\n    this.eColor = RefPlaceholder11;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  setColor(color) {\n    const rgbaColor = color.toRgbaString();\n    this.setValue(_Util.Color.fromString(rgbaColor).toHexString().toUpperCase(), true);\n    this.eColor.style.backgroundColor = rgbaColor;\n  }\n  setValue(value, silent) {\n    const isValid = _Util.Color.validColorString(value ?? \"\");\n    this.eInput.setCustomValidity(isValid ? \"\" : this.chartTranslationService.translate(\"invalidColor\"));\n    super.setValue(value, silent);\n    if (isValid && !silent) {\n      this.dispatchLocalEvent({ type: \"colorChanged\" });\n    }\n    return this;\n  }\n  onColorChanged(callback) {\n    this.addManagedListeners(this, { colorChanged: () => callback(_Util.Color.fromString(this.value)) });\n  }\n};\nvar AgColorInputSelector = {\n  selector: \"AG-COLOR-INPUT\",\n  component: AgColorInput\n};\nvar _AgColorPanel = class _AgColorPanel2 extends Component23 {\n  constructor(config) {\n    super(\n      /* html */\n      `<div class=\"ag-color-panel\" tabindex=\"-1\">\n            <div data-ref=\"spectrumColor\" class=\"ag-spectrum-color\">\n                <div class=\"ag-spectrum-sat ag-spectrum-fill\">\n                    <div data-ref=\"spectrumVal\" class=\"ag-spectrum-val ag-spectrum-fill\">\n                        <div data-ref=\"spectrumDragger\" class=\"ag-spectrum-dragger\"></div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"ag-spectrum-tools\">\n                <div data-ref=\"spectrumHue\" class=\"ag-spectrum-hue ag-spectrum-tool\">\n                    <div class=\"ag-spectrum-hue-background\"></div>\n                    <div data-ref=\"spectrumHueSlider\" class=\"ag-spectrum-slider\"></div>\n                </div>\n                <div data-ref=\"spectrumAlpha\" class=\"ag-spectrum-alpha ag-spectrum-tool\">\n                    <div class=\"ag-spectrum-alpha-background\"></div>\n                    <div data-ref=\"spectrumAlphaSlider\" class=\"ag-spectrum-slider\"></div>\n                </div>\n                <ag-color-input data-ref=\"colorInput\"></ag-color-input>\n                <div data-ref=\"recentColors\" class=\"ag-recent-colors\"></div>\n            </div>\n        </div>`,\n      [AgColorInputSelector]\n    );\n    this.H = 1;\n    this.S = 1;\n    this.B = 1;\n    this.A = 1;\n    this.isSpectrumDragging = false;\n    this.isSpectrumHueDragging = false;\n    this.isSpectrumAlphaDragging = false;\n    this.colorChanged = false;\n    this.spectrumColor = RefPlaceholder23;\n    this.spectrumVal = RefPlaceholder23;\n    this.spectrumDragger = RefPlaceholder23;\n    this.spectrumHue = RefPlaceholder23;\n    this.spectrumHueSlider = RefPlaceholder23;\n    this.spectrumAlpha = RefPlaceholder23;\n    this.spectrumAlphaSlider = RefPlaceholder23;\n    this.colorInput = RefPlaceholder23;\n    this.recentColors = RefPlaceholder23;\n    this.picker = config.picker;\n  }\n  postConstruct() {\n    this.initTabIndex();\n    this.initRecentColors();\n    this.addGuiEventListener(\"focus\", () => this.spectrumColor.focus());\n    this.addGuiEventListener(\"keydown\", (e) => {\n      if (e.key === KeyCode14.ENTER && !e.defaultPrevented) {\n        this.destroy();\n      }\n    });\n    this.addManagedListeners(this.spectrumColor, { keydown: (e) => this.moveDragger(e) });\n    this.addManagedListeners(this.spectrumAlphaSlider, { keydown: (e) => this.moveAlphaSlider(e) });\n    this.addManagedListeners(this.spectrumHueSlider, { keydown: (e) => this.moveHueSlider(e) });\n    this.addManagedListeners(this.spectrumVal, { mousedown: this.onSpectrumDraggerDown.bind(this) });\n    this.addManagedListeners(this.spectrumHue, { mousedown: this.onSpectrumHueDown.bind(this) });\n    this.addManagedListeners(this.spectrumAlpha, { mousedown: this.onSpectrumAlphaDown.bind(this) });\n    this.addGuiEventListener(\"mousemove\", (e) => {\n      this.onSpectrumDraggerMove(e);\n      this.onSpectrumHueMove(e);\n      this.onSpectrumAlphaMove(e);\n    });\n    this.addManagedListeners(document, { mouseup: this.onMouseUp.bind(this) });\n    this.colorInput.onColorChanged(this.setColor.bind(this));\n    this.addManagedListeners(this.recentColors, {\n      click: this.onRecentColorClick.bind(this),\n      keydown: (e) => {\n        if (e.key === KeyCode14.ENTER || e.key === KeyCode14.SPACE) {\n          e.preventDefault();\n          this.onRecentColorClick(e);\n        }\n      }\n    });\n  }\n  initTabIndex() {\n    const tabIndex = this.tabIndex = this.gos.get(\"tabIndex\").toString();\n    this.spectrumColor.setAttribute(\"tabindex\", tabIndex);\n    this.spectrumHueSlider.setAttribute(\"tabindex\", tabIndex);\n    this.spectrumAlphaSlider.setAttribute(\"tabindex\", tabIndex);\n  }\n  refreshSpectrumRect() {\n    return this.spectrumValRect = this.spectrumVal.getBoundingClientRect();\n  }\n  refreshHueRect() {\n    return this.spectrumHueRect = this.spectrumHue.getBoundingClientRect();\n  }\n  refreshAlphaRect() {\n    return this.spectrumAlphaRect = this.spectrumAlpha.getBoundingClientRect();\n  }\n  onSpectrumDraggerDown(e) {\n    e.preventDefault();\n    this.refreshSpectrumRect();\n    this.isSpectrumDragging = true;\n    this.moveDragger(e);\n  }\n  onSpectrumDraggerMove(e) {\n    if (this.isSpectrumDragging) {\n      this.moveDragger(e);\n    }\n  }\n  onSpectrumHueDown(e) {\n    this.refreshHueRect();\n    this.isSpectrumHueDragging = true;\n    this.moveHueSlider(e);\n  }\n  onSpectrumHueMove(e) {\n    if (this.isSpectrumHueDragging) {\n      this.moveHueSlider(e);\n    }\n  }\n  onSpectrumAlphaDown(e) {\n    this.refreshAlphaRect();\n    this.isSpectrumAlphaDragging = true;\n    this.moveAlphaSlider(e);\n  }\n  onSpectrumAlphaMove(e) {\n    if (this.isSpectrumAlphaDragging) {\n      this.moveAlphaSlider(e);\n    }\n  }\n  onMouseUp() {\n    this.isSpectrumDragging = false;\n    this.isSpectrumHueDragging = false;\n    this.isSpectrumAlphaDragging = false;\n  }\n  moveDragger(e) {\n    const valRect = this.spectrumValRect;\n    if (!valRect) {\n      return;\n    }\n    let x;\n    let y;\n    if (e instanceof MouseEvent) {\n      x = e.clientX - valRect.left;\n      y = e.clientY - valRect.top;\n    } else {\n      const isLeft = e.key === KeyCode14.LEFT;\n      const isRight = e.key === KeyCode14.RIGHT;\n      const isUp = e.key === KeyCode14.UP;\n      const isDown = e.key === KeyCode14.DOWN;\n      const isVertical = isUp || isDown;\n      const isHorizontal = isLeft || isRight;\n      if (!isVertical && !isHorizontal) {\n        return;\n      }\n      e.preventDefault();\n      const { x: currentX, y: currentY } = this.getSpectrumValue();\n      x = currentX + (isHorizontal ? isLeft ? -5 : 5 : 0);\n      y = currentY + (isVertical ? isUp ? -5 : 5 : 0);\n    }\n    x = Math.max(x, 0);\n    x = Math.min(x, valRect.width);\n    y = Math.max(y, 0);\n    y = Math.min(y, valRect.height);\n    this.setSpectrumValue(x / valRect.width, 1 - y / valRect.height);\n  }\n  moveHueSlider(e) {\n    const rect = this.spectrumHueRect;\n    if (!rect) {\n      return;\n    }\n    const x = this.moveSlider(this.spectrumHueSlider, e);\n    if (x == null) {\n      return;\n    }\n    this.H = 1 - x / rect.width;\n    this.update();\n  }\n  moveAlphaSlider(e) {\n    const rect = this.spectrumAlphaRect;\n    if (!rect) {\n      return;\n    }\n    const x = this.moveSlider(this.spectrumAlphaSlider, e);\n    if (x == null) {\n      return;\n    }\n    this.A = x / rect.width;\n    this.update();\n  }\n  moveSlider(slider, e) {\n    const sliderRect = slider.getBoundingClientRect();\n    const parentRect = slider.parentElement?.getBoundingClientRect();\n    if (!slider || !parentRect) {\n      return null;\n    }\n    const offset = sliderRect.width / 2;\n    let x;\n    if (e instanceof MouseEvent) {\n      x = Math.floor(e.clientX - parentRect.left);\n    } else {\n      const isLeft = e.key === KeyCode14.LEFT;\n      const isRight = e.key === KeyCode14.RIGHT;\n      if (!isLeft && !isRight) {\n        return null;\n      }\n      e.preventDefault();\n      const diff = isLeft ? -5 : 5;\n      x = parseFloat(slider.style.left) + offset + diff;\n    }\n    x = Math.max(x, 0);\n    x = Math.min(x, parentRect.width);\n    slider.style.left = x - offset + \"px\";\n    return x;\n  }\n  update(suppressColorInputUpdate) {\n    const hue = this.H * 360;\n    const color = _Util2.Color.fromHSB(hue, this.S, this.B, this.A);\n    const rgbaColor = color.toRgbaString();\n    const colorWithoutAlpha = _Util2.Color.fromHSB(hue, this.S, this.B);\n    const rgbaColorWithoutAlpha = colorWithoutAlpha.toRgbaString();\n    const spectrumColor = _Util2.Color.fromHSB(hue, 1, 1);\n    const spectrumRgbaColor = spectrumColor.toRgbaString();\n    const colorPicker = this.picker;\n    const existingColor = _Util2.Color.fromString(colorPicker.getValue());\n    if (existingColor.toRgbaString() !== rgbaColor) {\n      this.colorChanged = true;\n    }\n    colorPicker.setValue(rgbaColor);\n    this.spectrumColor.style.backgroundColor = spectrumRgbaColor;\n    this.spectrumDragger.style.backgroundColor = rgbaColorWithoutAlpha;\n    this.spectrumHueSlider.style.backgroundColor = spectrumRgbaColor;\n    this.spectrumAlpha.style.setProperty(\n      \"--ag-internal-spectrum-alpha-color-from\",\n      _Util2.Color.fromHSB(hue, this.S, this.B, 0).toRgbaString()\n    );\n    this.spectrumAlpha.style.setProperty(\"--ag-internal-spectrum-alpha-color-to\", rgbaColorWithoutAlpha);\n    this.spectrumAlpha.style.setProperty(\"--ag-internal-spectrum-alpha-color\", rgbaColor);\n    if (!suppressColorInputUpdate) {\n      this.colorInput.setColor(color);\n    }\n  }\n  /**\n   * @param saturation In the [0, 1] interval.\n   * @param brightness In the [0, 1] interval.\n   */\n  setSpectrumValue(saturation, brightness, suppressColorInputUpdate) {\n    const valRect = this.spectrumValRect || this.refreshSpectrumRect();\n    if (valRect == null) {\n      return;\n    }\n    const dragger = this.spectrumDragger;\n    const draggerRect = dragger.getBoundingClientRect();\n    saturation = Math.max(0, saturation);\n    saturation = Math.min(1, saturation);\n    brightness = Math.max(0, brightness);\n    brightness = Math.min(1, brightness);\n    this.S = saturation;\n    this.B = brightness;\n    dragger.style.left = saturation * valRect.width - draggerRect.width / 2 + \"px\";\n    dragger.style.top = (1 - brightness) * valRect.height - draggerRect.height / 2 + \"px\";\n    this.update(suppressColorInputUpdate);\n  }\n  getSpectrumValue() {\n    const dragger = this.spectrumDragger;\n    const draggerRect = dragger.getBoundingClientRect();\n    const x = parseFloat(dragger.style.left) + draggerRect.width / 2;\n    const y = parseFloat(dragger.style.top) + draggerRect.height / 2;\n    return { x, y };\n  }\n  initRecentColors() {\n    const recentColors = _AgColorPanel2.recentColors;\n    const innerHtml = recentColors.map((color, index) => {\n      return (\n        /* html */\n        `<div class=\"ag-recent-color\" id=${index} style=\"background-color: ${color}; width: 15px; height: 15px;\" recent-color=\"${color}\" tabIndex=\"${this.tabIndex}\"></div>`\n      );\n    });\n    this.recentColors.innerHTML = innerHtml.join(\"\");\n    _setDisplayed8(this.recentColors, !!recentColors.length);\n  }\n  setValue(val) {\n    const color = _Util2.Color.fromString(val);\n    this.setColor(color, true);\n  }\n  setColor(color, updateColorInput) {\n    const [h, s, b] = color.toHSB();\n    this.H = (isNaN(h) ? 0 : h) / 360;\n    this.A = color.a;\n    const spectrumHueRect = this.spectrumHueRect || this.refreshHueRect();\n    const spectrumAlphaRect = this.spectrumAlphaRect || this.refreshAlphaRect();\n    this.spectrumHueSlider.style.left = `${(this.H - 1) * -spectrumHueRect.width - this.spectrumHueSlider.getBoundingClientRect().width / 2}px`;\n    this.spectrumAlphaSlider.style.left = `${this.A * spectrumAlphaRect.width - this.spectrumAlphaSlider.getBoundingClientRect().width / 2}px`;\n    this.setSpectrumValue(s, b, !updateColorInput);\n  }\n  onRecentColorClick(e) {\n    const target = e.target;\n    if (!_exists9(target.id)) {\n      return;\n    }\n    const id = parseInt(target.id, 10);\n    this.setValue(_AgColorPanel2.recentColors[id]);\n    this.destroy();\n  }\n  addRecentColor() {\n    const color = _Util2.Color.fromHSB(this.H * 360, this.S, this.B, this.A);\n    const rgbaColor = color.toRgbaString();\n    let recentColors = _AgColorPanel2.recentColors;\n    if (!this.colorChanged || recentColors[0] === rgbaColor) {\n      return;\n    }\n    recentColors = recentColors.filter((currentColor) => currentColor != rgbaColor);\n    recentColors = [rgbaColor].concat(recentColors);\n    if (recentColors.length > _AgColorPanel2.maxRecentColors) {\n      recentColors = recentColors.slice(0, _AgColorPanel2.maxRecentColors);\n    }\n    _AgColorPanel2.recentColors = recentColors;\n  }\n  destroy() {\n    this.addRecentColor();\n    super.destroy();\n  }\n};\n_AgColorPanel.maxRecentColors = 8;\n_AgColorPanel.recentColors = [];\nvar AgColorPanel = _AgColorPanel;\nvar AgColorPicker = class extends AgPickerField2 {\n  constructor(config) {\n    super({\n      pickerAriaLabelKey: \"ariaLabelColorPicker\",\n      pickerAriaLabelValue: \"Color Picker\",\n      pickerType: \"ag-list\",\n      className: \"ag-color-picker\",\n      pickerIcon: \"smallDown\",\n      ...config\n    });\n  }\n  postConstruct() {\n    const eDocument = _getDocument7(this.gos);\n    this.eDisplayFieldColor = eDocument.createElement(\"span\");\n    this.eDisplayFieldColor.classList.add(\"ag-color-picker-color\");\n    this.eDisplayFieldText = eDocument.createElement(\"span\");\n    this.eDisplayFieldText.classList.add(\"ag-color-picker-value\");\n    this.eDisplayField.appendChild(this.eDisplayFieldColor);\n    this.eDisplayField.appendChild(this.eDisplayFieldText);\n    super.postConstruct();\n    if (this.value) {\n      this.setValue(this.value);\n    }\n  }\n  createPickerComponent() {\n    const eGuiRect = this.eWrapper.getBoundingClientRect();\n    const parentRect = this.popupService.getParentRect();\n    const colorDialog = this.createBean(\n      new AgDialog({\n        closable: false,\n        modal: true,\n        hideTitleBar: true,\n        minWidth: 190,\n        width: 190,\n        height: 250,\n        x: eGuiRect.right - parentRect.left - 190,\n        y: eGuiRect.top - parentRect.top - 250 - (this.config.pickerGap ?? 0),\n        postProcessPopupParams: {\n          type: \"colorPicker\",\n          eventSource: this.eWrapper\n        }\n      })\n    );\n    return colorDialog;\n  }\n  renderAndPositionPicker() {\n    const pickerComponent = this.pickerComponent;\n    const colorPanel = this.createBean(new AgColorPanel({ picker: this }));\n    pickerComponent.addCssClass(\"ag-color-dialog\");\n    colorPanel.addDestroyFunc(() => {\n      if (pickerComponent.isAlive()) {\n        this.destroyBean(pickerComponent);\n      }\n    });\n    pickerComponent.setParentComponent(this);\n    pickerComponent.setBodyComponent(colorPanel);\n    colorPanel.setValue(this.getValue());\n    colorPanel.getGui().focus();\n    pickerComponent.addDestroyFunc(() => {\n      if (!this.isDestroyingPicker) {\n        this.beforeHidePicker();\n        this.isDestroyingPicker = true;\n        if (colorPanel.isAlive()) {\n          this.destroyBean(colorPanel);\n        }\n        if (this.isAlive()) {\n          this.getFocusableElement().focus();\n        }\n      } else {\n        this.isDestroyingPicker = false;\n      }\n    });\n    return () => this.pickerComponent?.close();\n  }\n  setValue(color) {\n    if (this.value === color) {\n      return this;\n    }\n    this.eDisplayFieldColor.style.backgroundColor = color;\n    this.eDisplayFieldText.textContent = _Util3.Color.fromString(color).toHexString().toUpperCase();\n    return super.setValue(color);\n  }\n  getValue() {\n    return this.value;\n  }\n};\nvar AgColorPickerSelector = {\n  selector: \"AG-COLOR-PICKER\",\n  component: AgColorPicker\n};\nvar CrosshairPanel = class extends Component33 {\n  constructor(chartMenuParamsFactory) {\n    super();\n    this.chartMenuParamsFactory = chartMenuParamsFactory;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const crosshairGroupParams = this.chartMenuParamsFactory.addEnableParams(\n      \"crosshair.enabled\",\n      {\n        cssIdentifier: \"charts-advanced-settings-top-level\",\n        direction: \"vertical\",\n        suppressOpenCloseIcons: true,\n        title: this.chartTranslationService.translate(\"crosshair\"),\n        suppressEnabledCheckbox: true,\n        useToggle: true\n      }\n    );\n    const crosshairLabelCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams(\n      \"crosshair.label.enabled\",\n      \"crosshairLabel\"\n    );\n    const crosshairSnapCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams(\n      \"crosshair.snap\",\n      \"crosshairSnap\"\n    );\n    const crosshairStrokeColorPickerParams = this.chartMenuParamsFactory.getDefaultColorPickerParams(\n      \"crosshair.stroke\",\n      \"color\"\n    );\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"crosshairGroup\">\n                <ag-checkbox data-ref=\"crosshairLabelCheckbox\"></ag-checkbox>\n                <ag-checkbox data-ref=\"crosshairSnapCheckbox\"></ag-checkbox>\n                <ag-color-picker data-ref=\"crosshairStrokeColorPicker\"></ag-color-picker>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgCheckboxSelector2, AgColorPickerSelector],\n      {\n        crosshairGroup: crosshairGroupParams,\n        crosshairLabelCheckbox: crosshairLabelCheckboxParams,\n        crosshairSnapCheckbox: crosshairSnapCheckboxParams,\n        crosshairStrokeColorPicker: crosshairStrokeColorPickerParams\n      }\n    );\n  }\n};\nvar AgInputRange = class extends AgAbstractInputField {\n  constructor(config) {\n    super(config, \"ag-range-field\", \"range\");\n  }\n  postConstruct() {\n    super.postConstruct();\n    const { min, max, step } = this.config;\n    if (min != null) {\n      this.setMinValue(min);\n    }\n    if (max != null) {\n      this.setMaxValue(max);\n    }\n    this.setStep(step || 1);\n  }\n  addInputListeners() {\n    this.addManagedElementListeners(this.eInput, {\n      input: (e) => {\n        const value = e.target.value;\n        this.setValue(value);\n      }\n    });\n  }\n  setMinValue(value) {\n    this.min = value;\n    this.eInput.setAttribute(\"min\", value.toString());\n    return this;\n  }\n  setMaxValue(value) {\n    this.max = value;\n    this.eInput.setAttribute(\"max\", value.toString());\n    return this;\n  }\n  setStep(value) {\n    this.eInput.setAttribute(\"step\", value.toString());\n    return this;\n  }\n  setValue(value, silent) {\n    if (this.min != null) {\n      value = Math.max(parseFloat(value), this.min).toString();\n    }\n    if (this.max != null) {\n      value = Math.min(parseFloat(value), this.max).toString();\n    }\n    const ret = super.setValue(value, silent);\n    this.eInput.value = value;\n    return ret;\n  }\n};\nvar AgInputRangeSelector = {\n  selector: \"AG-INPUT-RANGE\",\n  component: AgInputRange\n};\nvar AgSlider = class extends AgAbstractLabel {\n  constructor(config) {\n    super(\n      config,\n      /* html */\n      `<div class=\"ag-slider\">\n            <label data-ref=\"eLabel\"></label>\n            <div class=\"ag-wrapper ag-slider-wrapper\">\n                <ag-input-range data-ref=\"eSlider\"></ag-input-range>\n                <ag-input-number-field data-ref=\"eText\"></ag-input-number-field>\n            </div>\n        </div>`,\n      [AgInputRangeSelector, AgInputNumberFieldSelector2]\n    );\n    this.eLabel = RefPlaceholder33;\n    this.eSlider = RefPlaceholder33;\n    this.eText = RefPlaceholder33;\n    this.labelAlignment = \"top\";\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.eSlider.addCssClass(\"ag-slider-field\");\n    const { minValue, maxValue, textFieldWidth, step, value, onValueChange } = this.config;\n    if (minValue != null) {\n      this.setMinValue(minValue);\n    }\n    if (maxValue != null) {\n      this.setMaxValue(maxValue);\n    }\n    if (textFieldWidth != null) {\n      this.setTextFieldWidth(textFieldWidth);\n    }\n    if (step != null) {\n      this.setStep(step);\n    }\n    if (value != null) {\n      this.setValue(value);\n    }\n    if (onValueChange != null) {\n      this.onValueChange(onValueChange);\n    }\n  }\n  onValueChange(callbackFn) {\n    this.addManagedListeners(this.eText, {\n      fieldValueChanged: () => {\n        const textValue = parseFloat(this.eText.getValue());\n        this.eSlider.setValue(textValue.toString(), true);\n        callbackFn(textValue || 0);\n      }\n    });\n    this.addManagedListeners(this.eSlider, {\n      fieldValueChanged: () => {\n        const sliderValue = this.eSlider.getValue();\n        this.eText.setValue(sliderValue, true);\n        callbackFn(parseFloat(sliderValue));\n      }\n    });\n    return this;\n  }\n  setSliderWidth(width) {\n    this.eSlider.setWidth(width);\n    return this;\n  }\n  setTextFieldWidth(width) {\n    this.eText.setWidth(width);\n    return this;\n  }\n  setMinValue(minValue) {\n    this.eSlider.setMinValue(minValue);\n    this.eText.setMin(minValue);\n    return this;\n  }\n  setMaxValue(maxValue) {\n    this.eSlider.setMaxValue(maxValue);\n    this.eText.setMax(maxValue);\n    return this;\n  }\n  getValue() {\n    return this.eText.getValue();\n  }\n  setValue(value, silent) {\n    if (this.getValue() === value) {\n      return this;\n    }\n    this.eText.setValue(value, true);\n    this.eSlider.setValue(value, true);\n    if (!silent) {\n      this.dispatchLocalEvent({ type: \"fieldValueChanged\" });\n    }\n    return this;\n  }\n  setStep(step) {\n    this.eSlider.setStep(step);\n    this.eText.setStep(step);\n    return this;\n  }\n};\nvar AgSliderSelector = {\n  selector: \"AG-SLIDER\",\n  component: AgSlider\n};\nvar NavigatorPanel = class extends Component43 {\n  constructor(chartMenuParamsFactory) {\n    super();\n    this.chartMenuParamsFactory = chartMenuParamsFactory;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const navigatorGroupParams = this.chartMenuParamsFactory.addEnableParams(\n      \"navigator.enabled\",\n      {\n        cssIdentifier: \"charts-advanced-settings-top-level\",\n        direction: \"vertical\",\n        suppressOpenCloseIcons: true,\n        title: this.chartTranslationService.translate(\"navigator\"),\n        suppressEnabledCheckbox: true,\n        useToggle: true\n      }\n    );\n    const navigatorHeightSliderParams = this.chartMenuParamsFactory.getDefaultSliderParams(\n      \"navigator.height\",\n      \"height\",\n      60\n    );\n    navigatorHeightSliderParams.minValue = 10;\n    const navigatorMiniChartCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams(\n      \"navigator.miniChart.enabled\",\n      \"miniChart\"\n    );\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"navigatorGroup\">\n                <ag-slider data-ref=\"navigatorHeightSlider\"></ag-slider>\n                <ag-checkbox data-ref=\"navigatorMiniChartCheckbox\"></ag-checkbox>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgSliderSelector, AgCheckboxSelector22],\n      {\n        navigatorGroup: navigatorGroupParams,\n        navigatorHeightSlider: navigatorHeightSliderParams,\n        navigatorMiniChartCheckbox: navigatorMiniChartCheckboxParams\n      }\n    );\n  }\n};\nvar ZoomPanel = class extends Component53 {\n  constructor(chartMenuParamsFactory) {\n    super();\n    this.chartMenuParamsFactory = chartMenuParamsFactory;\n    this.zoomScrollingStepInput = RefPlaceholder43;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const zoomGroupParams = this.chartMenuParamsFactory.addEnableParams(\"zoom.enabled\", {\n      cssIdentifier: \"charts-advanced-settings-top-level\",\n      direction: \"vertical\",\n      suppressOpenCloseIcons: true,\n      title: this.chartTranslationService.translate(\"zoom\"),\n      suppressEnabledCheckbox: true,\n      useToggle: true\n    });\n    const zoomScrollingCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams(\n      \"zoom.enableScrolling\",\n      \"scrollingZoom\"\n    );\n    const zoomScrollingStepSliderParams = this.chartMenuParamsFactory.getDefaultSliderParams(\n      \"zoom.scrollingStep\",\n      \"scrollingStep\",\n      1\n    );\n    zoomScrollingStepSliderParams.step = 0.01;\n    zoomScrollingStepSliderParams.minValue = zoomScrollingStepSliderParams.step;\n    const zoomSelectingCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams(\n      \"zoom.enableSelecting\",\n      \"selectingZoom\"\n    );\n    zoomScrollingCheckboxParams.onValueChange = /* @__PURE__ */ ((onValueChange) => (value) => {\n      if (!onValueChange)\n        return;\n      onValueChange(value);\n      this.zoomScrollingStepInput.setDisabled(!value);\n    })(zoomScrollingCheckboxParams.onValueChange);\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"zoomGroup\">\n                <ag-checkbox data-ref=\"zoomSelectingCheckbox\"></ag-checkbox>\n                <ag-checkbox data-ref=\"zoomScrollingCheckbox\"></ag-checkbox>\n                <ag-slider data-ref=\"zoomScrollingStepInput\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgCheckboxSelector3, AgSliderSelector],\n      {\n        zoomGroup: zoomGroupParams,\n        zoomScrollingCheckbox: zoomScrollingCheckboxParams,\n        zoomScrollingStepInput: zoomScrollingStepSliderParams,\n        zoomSelectingCheckbox: zoomSelectingCheckboxParams\n      }\n    );\n    this.zoomScrollingStepInput.setDisabled(!zoomScrollingCheckboxParams.value);\n  }\n};\nvar INTERACTIVITY_GROUPS = [\"navigator\", \"zoom\", \"animation\", \"crosshair\"];\nvar AdvancedSettingsPanel = class extends Component63 {\n  constructor(chartMenuContext) {\n    super(\n      /* html */\n      `<div class=\"ag-chart-advanced-settings-wrapper\"></div>`\n    );\n    this.chartMenuContext = chartMenuContext;\n  }\n  postConstruct() {\n    this.chartPanelFeature = this.createManagedBean(\n      new ChartPanelFeature(\n        this.chartMenuContext.chartController,\n        this.getGui(),\n        \"ag-chart-advanced-settings-section\",\n        (chartType, seriesType) => this.createPanels(chartType, seriesType)\n      )\n    );\n    this.chartPanelFeature.refreshPanels();\n  }\n  createPanels(chartType, seriesType) {\n    INTERACTIVITY_GROUPS.forEach((group) => {\n      if (!this.isGroupPanelShownForSeries(group, seriesType)) {\n        return;\n      }\n      const comp = this.createPanel(group);\n      this.chartPanelFeature.addComponent(comp);\n    });\n  }\n  isGroupPanelShownForSeries(group, seriesType) {\n    return group === \"animation\" || isCartesian(seriesType);\n  }\n  createPanel(group) {\n    const { chartMenuParamsFactory, chartAxisMenuParamsFactory } = this.chartMenuContext;\n    switch (group) {\n      case \"navigator\":\n        return new NavigatorPanel(chartMenuParamsFactory);\n      case \"zoom\":\n        return new ZoomPanel(chartMenuParamsFactory);\n      case \"animation\":\n        return new AnimationPanel(chartMenuParamsFactory);\n      case \"crosshair\":\n        return new CrosshairPanel(chartAxisMenuParamsFactory);\n    }\n  }\n};\nvar AdvancedSettingsMenuFactory = class extends BeanStub24 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"advancedSettingsMenuFactory\";\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  showMenu(chartMenuContext, eventSource) {\n    this.hideMenu();\n    const menu = this.createBean(new AdvancedSettingsMenu(chartMenuContext));\n    this.activeDialog = this.createBean(\n      new AgDialog({\n        title: this.chartTranslationService.translate(\"advancedSettings\"),\n        component: menu,\n        width: 300,\n        height: 400,\n        resizable: true,\n        movable: true,\n        centered: true,\n        closable: true,\n        afterGuiAttached: () => {\n          this.focusService.findFocusableElements(menu.getGui())[0]?.focus();\n        },\n        closedCallback: () => {\n          this.activeMenu = this.destroyBean(this.activeMenu);\n          this.activeDialog = void 0;\n          eventSource?.focus({ preventScroll: true });\n        }\n      })\n    );\n    this.activeMenu = menu;\n  }\n  hideMenu() {\n    if (this.activeDialog) {\n      this.destroyBean(this.activeDialog);\n    }\n  }\n  destroy() {\n    this.activeMenu = this.destroyBean(this.activeMenu);\n    this.activeDialog = this.destroyBean(this.activeDialog);\n    super.destroy();\n  }\n};\nvar AdvancedSettingsMenu = class extends TabGuardComp6 {\n  constructor(chartMenuContext) {\n    super(\n      /* html */\n      `<div class=\"ag-chart-advanced-settings\"></div>`\n    );\n    this.chartMenuContext = chartMenuContext;\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    this.advancedSettingsPanel = this.createManagedBean(new AdvancedSettingsPanel(this.chartMenuContext));\n    this.getGui().appendChild(this.advancedSettingsPanel.getGui());\n    this.initialiseTabGuard({\n      onTabKeyDown: this.onTabKeyDown.bind(this),\n      focusTrapActive: true\n    });\n  }\n  onTabKeyDown(e) {\n    if (e.defaultPrevented) {\n      return;\n    }\n    e.preventDefault();\n    const backwards = e.shiftKey;\n    const panelGui = this.advancedSettingsPanel.getGui();\n    const nextEl = this.focusService.findNextFocusableElement(panelGui, false, backwards);\n    if (nextEl) {\n      nextEl.focus();\n    } else {\n      const focusableElements = this.focusService.findFocusableElements(panelGui);\n      if (focusableElements.length) {\n        focusableElements[backwards ? focusableElements.length - 1 : 0].focus();\n      }\n    }\n  }\n};\nvar ChartMenuListFactory = class extends BeanStub33 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"chartMenuListFactory\";\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n    this.chartMenuService = beans.chartMenuService;\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  showMenuList(params) {\n    const { eventSource, showMenu, chartMenuContext } = params;\n    const areChartToolPanelsEnabled = this.chartMenuService.doChartToolPanelsExist(\n      chartMenuContext.chartController\n    );\n    const menuItems = this.mapWithStockItems(\n      this.getMenuItems(chartMenuContext.chartController, areChartToolPanelsEnabled),\n      chartMenuContext,\n      showMenu,\n      eventSource,\n      areChartToolPanelsEnabled\n    );\n    if (!menuItems.length) {\n      return;\n    }\n    const chartMenuList = this.createBean(new ChartMenuList(menuItems));\n    this.activeChartMenuList = chartMenuList;\n    let multiplier = -1;\n    let alignSide = \"left\";\n    if (this.gos.get(\"enableRtl\")) {\n      multiplier = 1;\n      alignSide = \"right\";\n    }\n    const eGui = chartMenuList.getGui();\n    this.popupService.addPopup({\n      modal: true,\n      eChild: eGui,\n      closeOnEsc: true,\n      closedCallback: () => {\n        this.destroyBean(chartMenuList);\n        this.activeChartMenuList = void 0;\n        if (_isNothingFocused3(this.gos)) {\n          eventSource.focus({ preventScroll: true });\n        }\n      },\n      afterGuiAttached: (params2) => chartMenuList.afterGuiAttached(params2),\n      positionCallback: () => {\n        {\n          this.popupService.positionPopupByComponent({\n            type: \"chartMenu\",\n            eventSource,\n            ePopup: eGui,\n            alignSide,\n            nudgeX: 4 * multiplier,\n            nudgeY: 4,\n            position: \"under\",\n            keepWithinBounds: true\n          });\n        }\n      },\n      ariaLabel: \"Chart Menu\"\n    });\n  }\n  getMenuItems(chartController, areChartToolPanelsEnabled) {\n    const defaultItems = [\n      ...areChartToolPanelsEnabled ? [\"chartEdit\"] : [],\n      ...chartController.isEnterprise() ? [\"chartAdvancedSettings\"] : [],\n      chartController.isChartLinked() ? \"chartUnlink\" : \"chartLink\",\n      \"chartDownload\"\n    ];\n    const chartMenuItems = this.gos.get(\"chartMenuItems\");\n    if (!chartMenuItems) {\n      return defaultItems;\n    } else if (Array.isArray(chartMenuItems)) {\n      return chartMenuItems;\n    } else {\n      return chartMenuItems(\n        this.gos.addGridCommonParams({\n          defaultItems\n        })\n      );\n    }\n  }\n  mapWithStockItems(originalList, chartMenuContext, showMenu, eventSource, areChartToolPanelsEnabled) {\n    if (!originalList) {\n      return [];\n    }\n    const resultList = [];\n    originalList.forEach((menuItemOrString) => {\n      let result;\n      if (typeof menuItemOrString === \"string\") {\n        result = this.getStockMenuItem(\n          menuItemOrString,\n          chartMenuContext,\n          showMenu,\n          eventSource,\n          areChartToolPanelsEnabled\n        );\n      } else {\n        result = { ...menuItemOrString };\n      }\n      if (!result) {\n        return;\n      }\n      const { subMenu } = result;\n      if (Array.isArray(subMenu)) {\n        result.subMenu = this.mapWithStockItems(\n          subMenu,\n          chartMenuContext,\n          showMenu,\n          eventSource,\n          areChartToolPanelsEnabled\n        );\n      }\n      resultList.push(result);\n    });\n    return resultList;\n  }\n  getStockMenuItem(key, chartMenuContext, showMenu, eventSource, areChartToolPanelsEnabled) {\n    switch (key) {\n      case \"chartEdit\":\n        return areChartToolPanelsEnabled ? this.createMenuItem(\n          this.chartTranslationService.translate(\"chartEdit\"),\n          \"chartsMenuEdit\",\n          showMenu\n        ) : null;\n      case \"chartAdvancedSettings\":\n        return this.createMenuItem(\n          this.chartTranslationService.translate(\"chartAdvancedSettings\"),\n          \"chartsMenuAdvancedSettings\",\n          () => this.chartMenuService.openAdvancedSettings(chartMenuContext, eventSource)\n        );\n      case \"chartUnlink\":\n        return chartMenuContext.chartController.isChartLinked() ? this.createMenuItem(\n          this.chartTranslationService.translate(\"chartUnlink\"),\n          \"unlinked\",\n          () => this.chartMenuService.toggleLinked(chartMenuContext)\n        ) : null;\n      case \"chartLink\":\n        return !chartMenuContext.chartController.isChartLinked() ? this.createMenuItem(\n          this.chartTranslationService.translate(\"chartLink\"),\n          \"linked\",\n          () => this.chartMenuService.toggleLinked(chartMenuContext)\n        ) : null;\n      case \"chartDownload\":\n        return this.createMenuItem(\n          this.chartTranslationService.translate(\"chartDownload\"),\n          \"save\",\n          () => this.chartMenuService.downloadChart(chartMenuContext)\n        );\n    }\n    return null;\n  }\n  createMenuItem(name, iconName, action) {\n    return {\n      name,\n      icon: _createIconNoSpan10(iconName, this.gos, null),\n      action\n    };\n  }\n  destroy() {\n    this.destroyBean(this.activeChartMenuList);\n    super.destroy();\n  }\n};\nvar ChartMenuList = class extends Component73 {\n  constructor(menuItems) {\n    super(\n      /* html */\n      `\n            <div data-ref=\"eChartsMenu\" role=\"presentation\" class=\"ag-menu ag-chart-menu-popup\"></div>\n        `\n    );\n    this.menuItems = menuItems;\n    this.eChartsMenu = RefPlaceholder53;\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    this.mainMenuList = this.createManagedBean(new AgMenuList(0));\n    this.mainMenuList.addMenuItems(this.menuItems);\n    this.mainMenuList.addEventListener(\"closeMenu\", this.onHidePopup.bind(this));\n    this.eChartsMenu.appendChild(this.mainMenuList.getGui());\n  }\n  onHidePopup() {\n    this.hidePopupFunc?.();\n  }\n  afterGuiAttached({ hidePopup }) {\n    if (hidePopup) {\n      this.hidePopupFunc = hidePopup;\n      this.addDestroyFunc(hidePopup);\n    }\n    this.focusService.focusInto(this.mainMenuList.getGui());\n  }\n};\nvar ChartCrossFilterService = class _ChartCrossFilterService extends BeanStub43 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"chartCrossFilterService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.valueService = beans.valueService;\n    this.filterManager = beans.filterManager;\n    if (_isClientSideRowModel2(this.gos)) {\n      this.clientSideRowModel = beans.rowModel;\n    }\n  }\n  filter(event, reset = false) {\n    const filterModel = this.filterManager?.getFilterModel() ?? {};\n    if (reset) {\n      this.resetFilters(filterModel);\n      return;\n    }\n    const colId = _ChartCrossFilterService.extractFilterColId(event);\n    if (this.isValidColumnFilter(colId)) {\n      this.updateFilters(filterModel, event, colId);\n    } else {\n      _warnOnce7(\n        \"cross filtering requires a 'agSetColumnFilter' or 'agMultiColumnFilter' to be defined on the column with id: '\" + colId + \"'\"\n      );\n    }\n  }\n  resetFilters(filterModel) {\n    const filtersExist = Object.keys(filterModel).length > 0;\n    if (filtersExist) {\n      this.filterManager?.setFilterModel(null);\n      this.filterManager?.onFilterChanged({ source: \"api\" });\n    }\n  }\n  updateFilters(filterModel, event, colId) {\n    const dataKey = _ChartCrossFilterService.extractFilterColId(event);\n    const rawValue = event.datum[dataKey];\n    if (rawValue === void 0) {\n      return;\n    }\n    const selectedValue = rawValue.toString();\n    if (event.event.metaKey || event.event.ctrlKey) {\n      const existingGridValues = this.getCurrentGridValuesForCategory(colId);\n      const valueAlreadyExists = _includes3(existingGridValues, selectedValue);\n      let updatedValues;\n      if (valueAlreadyExists) {\n        updatedValues = existingGridValues.filter((v) => v !== selectedValue);\n      } else {\n        updatedValues = existingGridValues;\n        updatedValues.push(selectedValue);\n      }\n      filterModel[colId] = this.getUpdatedFilterModel(colId, updatedValues);\n    } else {\n      const updatedValues = [selectedValue];\n      filterModel = { [colId]: this.getUpdatedFilterModel(colId, updatedValues) };\n    }\n    this.filterManager?.setFilterModel(filterModel);\n  }\n  getUpdatedFilterModel(colId, updatedValues) {\n    const columnFilterType = this.getColumnFilterType(colId);\n    if (columnFilterType === \"agMultiColumnFilter\") {\n      return { filterType: \"multi\", filterModels: [null, { filterType: \"set\", values: updatedValues }] };\n    }\n    return { filterType: \"set\", values: updatedValues };\n  }\n  getCurrentGridValuesForCategory(colId) {\n    const filteredValues = [];\n    const column = this.getColumnById(colId);\n    this.clientSideRowModel?.forEachNodeAfterFilter((rowNode) => {\n      if (column && !rowNode.group) {\n        const value = this.valueService.getValue(column, rowNode) + \"\";\n        if (!filteredValues.includes(value)) {\n          filteredValues.push(value);\n        }\n      }\n    });\n    return filteredValues;\n  }\n  static extractFilterColId(event) {\n    return event.xKey || event.calloutLabelKey;\n  }\n  isValidColumnFilter(colId) {\n    if (colId.indexOf(\"-filtered-out\")) {\n      colId = colId.replace(\"-filtered-out\", \"\");\n    }\n    const filterType = this.getColumnFilterType(colId);\n    if (typeof filterType === \"boolean\") {\n      return filterType;\n    }\n    return _includes3([\"agSetColumnFilter\", \"agMultiColumnFilter\"], filterType);\n  }\n  getColumnFilterType(colId) {\n    const gridColumn = this.getColumnById(colId);\n    if (gridColumn) {\n      const colDef = gridColumn.getColDef();\n      return colDef.filter;\n    }\n  }\n  getColumnById(colId) {\n    return this.columnModel.getCol(colId);\n  }\n};\nvar CHART_TOOLBAR_ALLOW_LIST = [\n  \"chartUnlink\",\n  \"chartLink\",\n  \"chartDownload\",\n  \"chartMenu\"\n];\nvar CHART_TOOL_PANEL_MENU_OPTIONS = {\n  settings: \"chartSettings\",\n  data: \"chartData\",\n  format: \"chartFormat\"\n};\nvar ChartMenuService = class extends BeanStub53 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"chartMenuService\";\n  }\n  wireBeans(beans) {\n    this.advancedSettingsMenuFactory = beans.advancedSettingsMenuFactory;\n  }\n  downloadChart(chartMenuContext, dimensions, fileName, fileFormat) {\n    chartMenuContext.chartController.getChartProxy().downloadChart(dimensions, fileName, fileFormat);\n  }\n  toggleLinked(chartMenuContext) {\n    chartMenuContext.chartController.detachChartRange();\n  }\n  openAdvancedSettings(chartMenuContext, eventSource) {\n    this.advancedSettingsMenuFactory.showMenu(chartMenuContext, eventSource);\n  }\n  hideAdvancedSettings() {\n    this.advancedSettingsMenuFactory.hideMenu();\n  }\n  getChartToolbarOptions() {\n    const defaultChartToolbarOptions = [\"chartMenu\"];\n    const toolbarItemsFunc = this.gos.getCallback(\"getChartToolbarItems\");\n    const params = {\n      defaultItems: defaultChartToolbarOptions\n    };\n    return toolbarItemsFunc ? toolbarItemsFunc(params).filter((option) => {\n      if (!CHART_TOOLBAR_ALLOW_LIST.includes(option)) {\n        _warnOnce23(`'${option}' is not a valid Chart Toolbar Option`);\n        return false;\n      }\n      return true;\n    }) : defaultChartToolbarOptions;\n  }\n  getChartToolPanels(chartController) {\n    const chartToolPanelsDef = this.gos.get(\"chartToolPanelsDef\");\n    const panelsOverride = chartToolPanelsDef?.panels?.map((panel) => {\n      const menuOption = CHART_TOOL_PANEL_MENU_OPTIONS[panel];\n      if (!menuOption) {\n        _warnOnce23(`Invalid panel in chartToolPanelsDef.panels: '${panel}'`);\n      }\n      return menuOption;\n    }).filter((panel) => Boolean(panel));\n    let panels = panelsOverride ?? Object.values(CHART_TOOL_PANEL_MENU_OPTIONS);\n    if (chartController.isPivotChart()) {\n      panels = panels.filter((panel) => panel !== \"chartData\");\n    }\n    const defaultToolPanel = chartToolPanelsDef?.defaultToolPanel;\n    const defaultPanel = defaultToolPanel && CHART_TOOL_PANEL_MENU_OPTIONS[defaultToolPanel] || panels[0];\n    return {\n      panels,\n      defaultPanel\n    };\n  }\n  doesChartToolbarExist() {\n    const chartToolbarOptions = this.getChartToolbarOptions();\n    return chartToolbarOptions.length > 0;\n  }\n  doChartToolPanelsExist(chartController) {\n    const { panels } = this.getChartToolPanels(chartController);\n    return panels.length > 0;\n  }\n};\nvar _ChartTranslationService = class _ChartTranslationService2 extends BeanStub62 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"chartTranslationService\";\n  }\n  translate(toTranslate) {\n    const translate = this.localeService.getLocaleTextFunc();\n    const defaultTranslation = _ChartTranslationService2.DEFAULT_TRANSLATIONS[toTranslate];\n    return translate(toTranslate, defaultTranslation);\n  }\n};\n_ChartTranslationService.DEFAULT_TRANSLATIONS = {\n  pivotChartTitle: \"Pivot Chart\",\n  rangeChartTitle: \"Range Chart\",\n  settings: \"Chart\",\n  data: \"Set Up\",\n  format: \"Customize\",\n  categories: \"Categories\",\n  defaultCategory: \"(None)\",\n  series: \"Series\",\n  switchCategorySeries: \"Switch Category / Series\",\n  categoryValues: \"Category Values\",\n  seriesLabels: \"Series Labels\",\n  aggregate: \"Aggregate\",\n  xyValues: \"X Y Values\",\n  paired: \"Paired Mode\",\n  axis: \"Axis\",\n  xAxis: \"Horizontal Axis\",\n  yAxis: \"Vertical Axis\",\n  polarAxis: \"Polar Axis\",\n  radiusAxis: \"Radius Axis\",\n  navigator: \"Navigator\",\n  zoom: \"Zoom\",\n  animation: \"Animation\",\n  crosshair: \"Crosshair\",\n  color: \"Color\",\n  thickness: \"Thickness\",\n  preferredLength: \"Preferred Length\",\n  xType: \"X Type\",\n  axisType: \"Axis Type\",\n  automatic: \"Automatic\",\n  category: \"Category\",\n  number: \"Number\",\n  time: \"Time\",\n  timeFormat: \"Time Format\",\n  autoRotate: \"Auto Rotate\",\n  labelRotation: \"Rotation\",\n  circle: \"Circle\",\n  polygon: \"Polygon\",\n  square: \"Square\",\n  cross: \"Cross\",\n  diamond: \"Diamond\",\n  plus: \"Plus\",\n  triangle: \"Triangle\",\n  heart: \"Heart\",\n  orientation: \"Orientation\",\n  fixed: \"Fixed\",\n  parallel: \"Parallel\",\n  perpendicular: \"Perpendicular\",\n  radiusAxisPosition: \"Position\",\n  ticks: \"Ticks\",\n  gridLines: \"Grid Lines\",\n  width: \"Width\",\n  height: \"Height\",\n  length: \"Length\",\n  padding: \"Padding\",\n  spacing: \"Spacing\",\n  chartStyle: \"Chart Style\",\n  title: \"Title\",\n  chartTitles: \"Titles\",\n  chartTitle: \"Chart Title\",\n  chartSubtitle: \"Subtitle\",\n  horizontalAxisTitle: \"Horizontal Axis Title\",\n  verticalAxisTitle: \"Vertical Axis Title\",\n  polarAxisTitle: \"Polar Axis Title\",\n  titlePlaceholder: \"Chart Title\",\n  background: \"Background\",\n  font: \"Font\",\n  weight: \"Weight\",\n  top: \"Top\",\n  right: \"Right\",\n  bottom: \"Bottom\",\n  left: \"Left\",\n  labels: \"Labels\",\n  calloutLabels: \"Callout Labels\",\n  sectorLabels: \"Sector Labels\",\n  positionRatio: \"Position Ratio\",\n  size: \"Size\",\n  shape: \"Shape\",\n  minSize: \"Minimum Size\",\n  maxSize: \"Maximum Size\",\n  legend: \"Legend\",\n  position: \"Position\",\n  markerSize: \"Marker Size\",\n  markerStroke: \"Marker Stroke\",\n  markerPadding: \"Marker Padding\",\n  itemSpacing: \"Item Spacing\",\n  itemPaddingX: \"Item Padding X\",\n  itemPaddingY: \"Item Padding Y\",\n  layoutHorizontalSpacing: \"Horizontal Spacing\",\n  layoutVerticalSpacing: \"Vertical Spacing\",\n  strokeWidth: \"Stroke Width\",\n  offset: \"Offset\",\n  offsets: \"Offsets\",\n  tooltips: \"Tooltips\",\n  callout: \"Callout\",\n  markers: \"Markers\",\n  shadow: \"Shadow\",\n  blur: \"Blur\",\n  xOffset: \"X Offset\",\n  yOffset: \"Y Offset\",\n  lineWidth: \"Line Width\",\n  lineDash: \"Line Dash\",\n  lineDashOffset: \"Dash Offset\",\n  scrollingZoom: \"Scrolling\",\n  scrollingStep: \"Scrolling Step\",\n  selectingZoom: \"Selecting\",\n  durationMillis: \"Duration (ms)\",\n  crosshairLabel: \"Label\",\n  crosshairSnap: \"Snap to Node\",\n  normal: \"Normal\",\n  bold: \"Bold\",\n  italic: \"Italic\",\n  boldItalic: \"Bold Italic\",\n  predefined: \"Predefined\",\n  fillOpacity: \"Fill Opacity\",\n  strokeColor: \"Line Color\",\n  strokeOpacity: \"Line Opacity\",\n  miniChart: \"Mini-Chart\",\n  histogramBinCount: \"Bin count\",\n  connectorLine: \"Connector Line\",\n  seriesItems: \"Series Items\",\n  seriesItemType: \"Item Type\",\n  seriesItemPositive: \"Positive\",\n  seriesItemNegative: \"Negative\",\n  seriesItemLabels: \"Item Labels\",\n  columnGroup: \"Column\",\n  barGroup: \"Bar\",\n  pieGroup: \"Pie\",\n  lineGroup: \"Line\",\n  scatterGroup: \"X Y (Scatter)\",\n  areaGroup: \"Area\",\n  polarGroup: \"Polar\",\n  statisticalGroup: \"Statistical\",\n  hierarchicalGroup: \"Hierarchical\",\n  specializedGroup: \"Specialized\",\n  combinationGroup: \"Combination\",\n  groupedColumnTooltip: \"Grouped\",\n  stackedColumnTooltip: \"Stacked\",\n  normalizedColumnTooltip: \"100% Stacked\",\n  groupedBarTooltip: \"Grouped\",\n  stackedBarTooltip: \"Stacked\",\n  normalizedBarTooltip: \"100% Stacked\",\n  pieTooltip: \"Pie\",\n  donutTooltip: \"Donut\",\n  lineTooltip: \"Line\",\n  groupedAreaTooltip: \"Area\",\n  stackedAreaTooltip: \"Stacked\",\n  normalizedAreaTooltip: \"100% Stacked\",\n  scatterTooltip: \"Scatter\",\n  bubbleTooltip: \"Bubble\",\n  histogramTooltip: \"Histogram\",\n  radialColumnTooltip: \"Radial Column\",\n  radialBarTooltip: \"Radial Bar\",\n  radarLineTooltip: \"Radar Line\",\n  radarAreaTooltip: \"Radar Area\",\n  nightingaleTooltip: \"Nightingale\",\n  rangeBarTooltip: \"Range Bar\",\n  rangeAreaTooltip: \"Range Area\",\n  boxPlotTooltip: \"Box Plot\",\n  treemapTooltip: \"Treemap\",\n  sunburstTooltip: \"Sunburst\",\n  waterfallTooltip: \"Waterfall\",\n  heatmapTooltip: \"Heatmap\",\n  columnLineComboTooltip: \"Column & Line\",\n  areaColumnComboTooltip: \"Area & Column\",\n  customComboTooltip: \"Custom Combination\",\n  innerRadius: \"Inner Radius\",\n  startAngle: \"Start Angle\",\n  endAngle: \"End Angle\",\n  reverseDirection: \"Reverse Direction\",\n  groupPadding: \"Group Padding\",\n  seriesPadding: \"Series Padding\",\n  tile: \"Tile\",\n  whisker: \"Whisker\",\n  cap: \"Cap\",\n  capLengthRatio: \"Length Ratio\",\n  labelPlacement: \"Placement\",\n  inside: \"Inside\",\n  outside: \"Outside\",\n  noDataToChart: \"No data available to be charted.\",\n  pivotChartRequiresPivotMode: \"Pivot Chart requires Pivot Mode enabled.\",\n  chartSettingsToolbarTooltip: \"Menu\",\n  chartLinkToolbarTooltip: \"Linked to Grid\",\n  chartUnlinkToolbarTooltip: \"Unlinked from Grid\",\n  chartDownloadToolbarTooltip: \"Download Chart\",\n  chartMenuToolbarTooltip: \"Menu\",\n  chartEdit: \"Edit Chart\",\n  chartAdvancedSettings: \"Advanced Settings\",\n  chartLink: \"Link to Grid\",\n  chartUnlink: \"Unlink from Grid\",\n  chartDownload: \"Download Chart\",\n  histogramFrequency: \"Frequency\",\n  seriesChartType: \"Series Chart Type\",\n  seriesType: \"Series Type\",\n  secondaryAxis: \"Secondary Axis\",\n  seriesAdd: \"Add a series\",\n  categoryAdd: \"Add a category\",\n  bar: \"Bar\",\n  column: \"Column\",\n  histogram: \"Histogram\",\n  advancedSettings: \"Advanced Settings\",\n  direction: \"Direction\",\n  horizontal: \"Horizontal\",\n  vertical: \"Vertical\",\n  seriesGroupType: \"Group Type\",\n  groupedSeriesGroupType: \"Grouped\",\n  stackedSeriesGroupType: \"Stacked\",\n  normalizedSeriesGroupType: \"100% Stacked\",\n  legendEnabled: \"Enabled\",\n  invalidColor: \"Color value is invalid\",\n  groupedColumnFull: \"Grouped Column\",\n  stackedColumnFull: \"Stacked Column\",\n  normalizedColumnFull: \"100% Stacked Column\",\n  groupedBarFull: \"Grouped Bar\",\n  stackedBarFull: \"Stacked Bar\",\n  normalizedBarFull: \"100% Stacked Bar\",\n  stackedAreaFull: \"Stacked Area\",\n  normalizedAreaFull: \"100% Stacked Area\",\n  customCombo: \"Custom Combination\",\n  // menu items\n  groupedColumn: \"Grouped\",\n  stackedColumn: \"Stacked\",\n  pie: \"Pie\",\n  donut: \"Donut\",\n  line: \"Line\",\n  scatter: \"Scatter\",\n  bubble: \"Bubble\",\n  area: \"Area\",\n  stackedArea: \"Stacked\",\n  radarLine: \"Radar Line\",\n  radarArea: \"Radar Area\",\n  nightingale: \"Nightingale\",\n  radialColumn: \"Radial Column\",\n  radialBar: \"Radial Bar\",\n  boxPlot: \"Box Plot\",\n  rangeBar: \"Range Bar\",\n  rangeArea: \"Range Area\",\n  treemap: \"Treemap\",\n  sunburst: \"Sunburst\",\n  waterfall: \"Waterfall\",\n  heatmap: \"Heatmap\",\n  columnLineCombo: \"Column & Line\",\n  AreaColumnCombo: \"Area & Column\",\n  // aria\n  ariaChartMenuClose: \"Close Chart Edit Menu\",\n  ariaChartSelected: \"Selected\",\n  // group\n  group: \"Group\",\n  // time formats\n  timeFormatSlashesDDMMYYYY: \"DD/MM/YYYY\",\n  timeFormatSlashesMMDDYYYY: \"MM/DD/YYYY\",\n  timeFormatSlashesDDMMYY: \"DD/MM/YY\",\n  timeFormatSlashesMMDDYY: \"MM/DD/YY\",\n  timeFormatDotsDDMYY: \"DD.M.YY\",\n  timeFormatDotsMDDYY: \"M.DD.YY\",\n  timeFormatDashesYYYYMMDD: \"YYYY-MM-DD\",\n  timeFormatSpacesDDMMMMYYYY: \"DD MMMM YYYY\",\n  timeFormatHHMMSS: \"HH:MM:SS\",\n  timeFormatHHMMSSAmPm: \"HH:MM:SS AM/PM\",\n  // agg funcs\n  sum: \"Sum\",\n  first: \"First\",\n  last: \"Last\",\n  min: \"Min\",\n  max: \"Max\",\n  count: \"Count\",\n  avg: \"Average\"\n};\nvar ChartTranslationService = _ChartTranslationService;\nvar VERSION4 = \"32.3.9\";\nvar ALL_AXIS_TYPES = [\"number\", \"category\", \"grouped-category\", \"log\", \"time\"];\nfunction getLegacyAxisType(chartType) {\n  switch (chartType) {\n    case \"bar\":\n    case \"stackedBar\":\n    case \"normalizedBar\":\n      return [\"number\", \"category\"];\n    case \"groupedBar\":\n      return [\"number\", \"grouped-category\"];\n    case \"column\":\n    case \"stackedColumn\":\n    case \"normalizedColumn\":\n    case \"line\":\n    case \"area\":\n    case \"stackedArea\":\n    case \"normalizedArea\":\n    case \"histogram\":\n      return [\"category\", \"number\"];\n    case \"groupedColumn\":\n      return [\"grouped-category\", \"number\"];\n    case \"scatter\":\n    case \"bubble\":\n      return [\"number\", \"number\"];\n    default:\n      return void 0;\n  }\n}\nvar SKIP_JS_BUILTINS = /* @__PURE__ */ new Set([\"__proto__\", \"constructor\", \"prototype\"]);\nfunction get(source, expression, defaultValue) {\n  if (source == null) {\n    return defaultValue;\n  }\n  const keys = expression.split(\".\");\n  let objectToRead = source;\n  while (keys.length > 1) {\n    objectToRead = objectToRead[keys.shift()];\n    if (objectToRead == null) {\n      return defaultValue;\n    }\n  }\n  const value = objectToRead[keys[0]];\n  return value != null ? value : defaultValue;\n}\nfunction set(target, expression, value) {\n  if (target == null) {\n    return;\n  }\n  const keys = expression.split(\".\");\n  let objectToUpdate = target;\n  keys.filter((key) => !SKIP_JS_BUILTINS.has(key)).forEach((key, i) => {\n    if (!objectToUpdate[key]) {\n      objectToUpdate[key] = {};\n    }\n    if (i < keys.length - 1) {\n      objectToUpdate = objectToUpdate[key];\n    }\n  });\n  objectToUpdate[keys[keys.length - 1]] = value;\n}\nfunction createAgChartTheme(chartProxyParams, proxy, isEnterprise, chartThemeDefaults, updatedOverrides) {\n  const { chartOptionsToRestore, chartPaletteToRestore, chartThemeToRestore } = chartProxyParams;\n  const themeName = getSelectedTheme(chartProxyParams);\n  const stockTheme = isStockTheme(themeName);\n  const rootTheme = stockTheme ? { baseTheme: themeName } : lookupCustomChartTheme(chartProxyParams, themeName) ?? {};\n  const gridOptionsThemeOverrides = chartProxyParams.getGridOptionsChartThemeOverrides();\n  const apiThemeOverrides = chartProxyParams.apiChartThemeOverrides;\n  const standaloneChartType = getSeriesType(chartProxyParams.chartType);\n  const crossFilteringOverrides = chartProxyParams.crossFiltering ? createCrossFilterThemeOverrides(proxy, chartProxyParams, standaloneChartType) : void 0;\n  const isTitleEnabled = () => {\n    const isTitleEnabled2 = (obj) => {\n      if (!obj) {\n        return false;\n      }\n      return Object.keys(obj).some((key) => get(obj[key], \"title.enabled\", false));\n    };\n    return isTitleEnabled2(gridOptionsThemeOverrides) || isTitleEnabled2(apiThemeOverrides);\n  };\n  const overrides = [\n    stockTheme ? inbuiltStockThemeOverrides(chartProxyParams, isEnterprise, isTitleEnabled()) : void 0,\n    pieAndDonutOverrides(),\n    chartThemeDefaults,\n    crossFilteringOverrides,\n    gridOptionsThemeOverrides,\n    apiThemeOverrides,\n    { ...chartOptionsToRestore ?? {} },\n    updatedOverrides\n  ];\n  const theme = overrides.filter((v) => !!v).reduce(\n    (r, n) => ({\n      baseTheme: r,\n      overrides: n\n    }),\n    rootTheme\n  );\n  if (chartPaletteToRestore && themeName === chartThemeToRestore) {\n    const rootThemePalette = _Theme.getChartTheme(rootTheme).palette;\n    if (!isIdenticalPalette(chartPaletteToRestore, rootThemePalette)) {\n      theme.palette = chartPaletteToRestore;\n    }\n  }\n  return theme;\n}\nfunction isIdenticalPalette(paletteA, paletteB) {\n  const arrayCompare = (arrA, arrB) => {\n    if (arrA === arrB)\n      return true;\n    if (arrA?.length !== arrB?.length)\n      return false;\n    return arrA?.every((v, i) => v === arrB?.[i]) ?? false;\n  };\n  return arrayCompare(paletteA.fills, paletteB.fills) && arrayCompare(paletteA.strokes, paletteB.strokes);\n}\nfunction isStockTheme(themeName) {\n  return _includes22(Object.keys(_Theme.themes), themeName);\n}\nfunction createCrossFilterThemeOverrides(proxy, chartProxyParams, seriesType) {\n  const legend = {\n    listeners: {\n      legendItemClick: (e) => {\n        const chart = proxy.getChart();\n        chart.series.forEach((s) => {\n          s.toggleSeriesItem(e.itemId, e.enabled);\n          s.toggleSeriesItem(`${e.itemId}-filtered-out`, e.enabled);\n        });\n      }\n    }\n  };\n  return {\n    [seriesType]: {\n      tooltip: {\n        delay: 500\n      },\n      legend,\n      listeners: {\n        click: (e) => chartProxyParams.crossFilterCallback(e, true)\n      }\n    }\n  };\n}\nvar STATIC_INBUILT_STOCK_THEME_AXES_OVERRIDES = ALL_AXIS_TYPES.reduce(\n  (r, n) => ({ ...r, [n]: { title: { _enabledFromTheme: true } } }),\n  {}\n);\nfunction inbuiltStockThemeOverrides(params, isEnterprise, titleEnabled) {\n  const extraPadding = params.getExtraPaddingDirections();\n  return {\n    common: {\n      ...isEnterprise ? { animation: { duration: 500 } } : void 0,\n      axes: STATIC_INBUILT_STOCK_THEME_AXES_OVERRIDES,\n      padding: {\n        // don't add extra padding when a title is present!\n        top: !titleEnabled && extraPadding.includes(\"top\") ? 40 : 20,\n        right: extraPadding.includes(\"right\") ? 30 : 20,\n        bottom: extraPadding.includes(\"bottom\") ? 40 : 20,\n        left: extraPadding.includes(\"left\") ? 30 : 20\n      }\n    }\n  };\n}\nfunction pieAndDonutOverrides() {\n  return {\n    pie: {\n      series: {\n        title: { _enabledFromTheme: true },\n        calloutLabel: { _enabledFromTheme: true },\n        sectorLabel: {\n          enabled: false,\n          _enabledFromTheme: true\n        }\n      }\n    },\n    donut: {\n      series: {\n        title: { _enabledFromTheme: true },\n        calloutLabel: { _enabledFromTheme: true },\n        sectorLabel: {\n          enabled: false,\n          _enabledFromTheme: true\n        }\n      }\n    }\n  };\n}\nfunction getSelectedTheme(chartProxyParams) {\n  let chartThemeName = chartProxyParams.getChartThemeName();\n  const availableThemes = chartProxyParams.getChartThemes();\n  if (!_includes22(availableThemes, chartThemeName)) {\n    chartThemeName = availableThemes[0];\n  }\n  return chartThemeName;\n}\nfunction lookupCustomChartTheme(chartProxyParams, name) {\n  const { customChartThemes } = chartProxyParams;\n  const customChartTheme = customChartThemes && customChartThemes[name];\n  if (!customChartTheme) {\n    _warnOnce32(\n      `no stock theme exists with the name '${name}' and no custom chart theme with that name was supplied to 'customChartThemes'`\n    );\n  }\n  return customChartTheme;\n}\nvar ChartDatasource = class _ChartDatasource extends BeanStub72 {\n  wireBeans(beans) {\n    this.sortController = beans.sortController;\n    this.gridRowModel = beans.rowModel;\n    this.columnModel = beans.columnModel;\n    this.valueService = beans.valueService;\n    this.pivotResultColsService = beans.pivotResultColsService;\n    this.rowNodeSorter = beans.rowNodeSorter;\n    this.aggregationStage = beans.aggregationStage;\n  }\n  getData(params) {\n    if (params.crossFiltering) {\n      if (params.grouping) {\n        _warnOnce42(\"crossing filtering with row grouping is not supported.\");\n        return { chartData: [], columnNames: {} };\n      }\n      if (!_isClientSideRowModel22(this.gos)) {\n        _warnOnce42(\"crossing filtering is only supported in the client side row model.\");\n        return { chartData: [], columnNames: {} };\n      }\n    }\n    const isServerSide = _isServerSideRowModel2(this.gos);\n    if (isServerSide && params.pivoting) {\n      this.updatePivotKeysForSSRM();\n    }\n    const result = this.extractRowsFromGridRowModel(params);\n    result.chartData = this.aggregateRowsByDimension(params, result.chartData);\n    return result;\n  }\n  extractRowsFromGridRowModel(params) {\n    const { crossFiltering, startRow, endRow, valueCols, dimensionCols, grouping } = params;\n    let extractedRowData = [];\n    const columnNames = {};\n    const groupNodeIndexes = {};\n    const groupsToRemove = {};\n    let filteredNodes = {};\n    let allRowNodes = [];\n    let numRows;\n    if (crossFiltering) {\n      filteredNodes = this.getFilteredRowNodes();\n      allRowNodes = this.getAllRowNodes();\n      numRows = allRowNodes.length;\n    } else {\n      const modelLastRow = this.gridRowModel.getRowCount() - 1;\n      const hasNoRange = startRow === endRow && startRow === 0 && dimensionCols.length === 0 && valueCols.length === 0;\n      if (hasNoRange) {\n        numRows = 0;\n      } else {\n        const rangeLastRow = endRow >= 0 ? Math.min(endRow, modelLastRow) : modelLastRow;\n        numRows = rangeLastRow - startRow + 1;\n      }\n    }\n    if (numRows > 0) {\n      valueCols.forEach((col) => {\n        let columnNamesArr = [];\n        const pivotKeys = col.getColDef().pivotKeys;\n        if (pivotKeys) {\n          columnNamesArr = pivotKeys.slice();\n        }\n        const headerName = col.getColDef().headerName;\n        if (headerName) {\n          columnNamesArr.push(headerName);\n        }\n        if (columnNamesArr.length > 0) {\n          columnNames[col.getId()] = columnNamesArr;\n        }\n      });\n    }\n    let numRemovedNodes = 0;\n    let id = 0;\n    for (let i = 0; i < numRows; i++) {\n      const rowNode = crossFiltering ? allRowNodes[i] : this.gridRowModel.getRow(i + startRow);\n      if (rowNode.footer || rowNode.detail) {\n        numRemovedNodes++;\n        continue;\n      }\n      const data = {};\n      dimensionCols.forEach((col) => {\n        const colId = col.colId;\n        const column = this.columnModel.getCol(colId);\n        if (column) {\n          const valueObject = this.valueService.getValue(column, rowNode);\n          if (grouping) {\n            const valueString = valueObject?.toString ? String(valueObject.toString()) : \"\";\n            const labels2 = _ChartDatasource.getGroupLabels(rowNode, valueString);\n            data[colId] = {\n              labels: labels2,\n              // this is needed so that standalone can handle animations properly when data updates\n              id: id++,\n              toString: function() {\n                return this.labels.filter((l) => !!l).reverse().join(\" - \");\n              }\n            };\n            if (rowNode.group) {\n              groupNodeIndexes[labels2.toString()] = i - numRemovedNodes;\n            }\n            const groupKey = labels2.slice(1, labels2.length).toString();\n            if (groupKey) {\n              groupsToRemove[groupKey] = groupNodeIndexes[groupKey];\n            }\n          } else {\n            data[colId] = valueObject;\n          }\n        } else {\n          data[ChartDataModel.DEFAULT_CATEGORY] = i + 1;\n        }\n      });\n      valueCols.forEach((col) => {\n        const colId = col.getColId();\n        if (crossFiltering) {\n          const filteredOutColId = colId + \"-filtered-out\";\n          const value = this.valueService.getValue(col, rowNode);\n          const actualValue = value != null && typeof value.toNumber === \"function\" ? value.toNumber() : value;\n          if (filteredNodes[rowNode.id]) {\n            data[colId] = actualValue;\n            data[filteredOutColId] = params.aggFunc || params.isScatter ? void 0 : 0;\n          } else {\n            data[colId] = params.aggFunc || params.isScatter ? void 0 : 0;\n            data[filteredOutColId] = actualValue;\n          }\n        } else {\n          let value = this.valueService.getValue(col, rowNode);\n          if (value && Object.prototype.hasOwnProperty.call(value, \"toString\")) {\n            value = parseFloat(value.toString());\n          }\n          data[colId] = value != null && typeof value.toNumber === \"function\" ? value.toNumber() : value;\n        }\n      });\n      extractedRowData.push(data);\n    }\n    let groupChartData;\n    if (grouping) {\n      const groupIndexesToRemove = _values(groupsToRemove);\n      const allData = extractedRowData;\n      extractedRowData = [];\n      groupChartData = [];\n      for (let i = 0; i < allData.length; i++) {\n        (_includes32(groupIndexesToRemove, i) ? groupChartData : extractedRowData).push(allData[i]);\n      }\n    }\n    return { chartData: extractedRowData, columnNames, groupChartData };\n  }\n  aggregateRowsByDimension(params, dataFromGrid) {\n    const dimensionCols = params.dimensionCols;\n    if (!params.aggFunc || dimensionCols.length === 0) {\n      return dataFromGrid;\n    }\n    const lastCol = _last5(dimensionCols);\n    const lastColId = lastCol && lastCol.colId;\n    const map = {};\n    const dataAggregated = [];\n    dataFromGrid.forEach((data) => {\n      let currentMap = map;\n      dimensionCols.forEach((col) => {\n        const colId = col.colId;\n        const key = data[colId];\n        if (colId === lastColId) {\n          let groupItem = currentMap[key];\n          if (!groupItem) {\n            groupItem = { __children: [] };\n            dimensionCols.forEach((dimCol) => {\n              const dimColId = dimCol.colId;\n              groupItem[dimColId] = data[dimColId];\n            });\n            currentMap[key] = groupItem;\n            dataAggregated.push(groupItem);\n          }\n          groupItem.__children.push(data);\n        } else {\n          if (!currentMap[key]) {\n            currentMap[key] = {};\n          }\n          currentMap = currentMap[key];\n        }\n      });\n    });\n    if (this.gos.assertModuleRegistered(ModuleNames4.RowGroupingModule, \"Charting Aggregation\")) {\n      const aggStage = this.aggregationStage;\n      dataAggregated.forEach(\n        (groupItem) => params.valueCols.forEach((col) => {\n          if (params.crossFiltering) {\n            params.valueCols.forEach((valueCol) => {\n              const colId = valueCol.getColId();\n              const dataToAgg = groupItem.__children.filter((child) => typeof child[colId] !== \"undefined\").map((child) => child[colId]);\n              const aggResult = aggStage.aggregateValues(dataToAgg, params.aggFunc);\n              groupItem[valueCol.getId()] = aggResult && typeof aggResult.value !== \"undefined\" ? aggResult.value : aggResult;\n              const filteredOutColId = `${colId}-filtered-out`;\n              const dataToAggFiltered = groupItem.__children.filter((child) => typeof child[filteredOutColId] !== \"undefined\").map((child) => child[filteredOutColId]);\n              const aggResultFiltered = aggStage.aggregateValues(dataToAggFiltered, params.aggFunc);\n              groupItem[filteredOutColId] = aggResultFiltered && typeof aggResultFiltered.value !== \"undefined\" ? aggResultFiltered.value : aggResultFiltered;\n            });\n          } else {\n            const dataToAgg = groupItem.__children.map((child) => child[col.getId()]);\n            const aggResult = aggStage.aggregateValues(dataToAgg, params.aggFunc);\n            groupItem[col.getId()] = aggResult && typeof aggResult.value !== \"undefined\" ? aggResult.value : aggResult;\n          }\n        })\n      );\n    }\n    return dataAggregated;\n  }\n  updatePivotKeysForSSRM() {\n    const secondaryColumns = this.pivotResultColsService.getPivotResultCols()?.list;\n    if (!secondaryColumns) {\n      return;\n    }\n    const pivotKeySeparator = this.extractPivotKeySeparator(secondaryColumns);\n    secondaryColumns.forEach((col) => {\n      if (pivotKeySeparator === \"\") {\n        col.getColDef().pivotKeys = [];\n      } else {\n        const keys = col.getColId().split(pivotKeySeparator);\n        col.getColDef().pivotKeys = keys.slice(0, keys.length - 1);\n      }\n    });\n  }\n  extractPivotKeySeparator(secondaryColumns) {\n    if (secondaryColumns.length === 0) {\n      return \"\";\n    }\n    const extractSeparator = (columnGroup, childId) => {\n      const groupId = columnGroup.getGroupId();\n      if (!columnGroup.getParent()) {\n        return childId.split(groupId)[1][0];\n      }\n      return extractSeparator(columnGroup.getParent(), groupId);\n    };\n    const firstSecondaryCol = secondaryColumns[0];\n    if (firstSecondaryCol.getParent() == null) {\n      return \"\";\n    }\n    return extractSeparator(firstSecondaryCol.getParent(), firstSecondaryCol.getColId());\n  }\n  static getGroupLabels(rowNode, initialLabel) {\n    const labels2 = [initialLabel];\n    while (rowNode && rowNode.level !== 0) {\n      rowNode = rowNode.parent;\n      if (rowNode) {\n        labels2.push(rowNode.key);\n      }\n    }\n    return labels2;\n  }\n  getFilteredRowNodes() {\n    const filteredNodes = {};\n    this.gridRowModel.forEachNodeAfterFilterAndSort((rowNode) => {\n      filteredNodes[rowNode.id] = rowNode;\n    });\n    return filteredNodes;\n  }\n  getAllRowNodes() {\n    const allRowNodes = [];\n    this.gridRowModel.forEachNode((rowNode) => {\n      allRowNodes.push(rowNode);\n    });\n    return this.sortRowNodes(allRowNodes);\n  }\n  sortRowNodes(rowNodes) {\n    const sortOptions = this.sortController.getSortOptions();\n    const noSort = !sortOptions || sortOptions.length == 0;\n    if (noSort)\n      return rowNodes;\n    return this.rowNodeSorter.doFullSort(rowNodes, sortOptions);\n  }\n};\nvar ChartColumnService = class extends BeanStub8 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"chartColumnService\";\n    this.valueColsWithoutSeriesType = /* @__PURE__ */ new Set();\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.showRowGroupColsService = beans.showRowGroupColsService;\n    this.columnNameService = beans.columnNameService;\n    this.visibleColsService = beans.visibleColsService;\n    this.funcColsService = beans.funcColsService;\n    this.valueService = beans.valueService;\n    this.rowPositionUtils = beans.rowPositionUtils;\n  }\n  postConstruct() {\n    const clearValueCols = () => this.valueColsWithoutSeriesType.clear();\n    this.addManagedEventListeners({\n      newColumnsLoaded: clearValueCols,\n      rowDataUpdated: clearValueCols\n    });\n  }\n  getColumn(colId) {\n    return this.columnModel.getColDefCol(colId);\n  }\n  getAllDisplayedColumns() {\n    return this.visibleColsService.getAllCols();\n  }\n  getColDisplayName(col, includePath) {\n    const headerLocation = \"chart\";\n    const columnDisplayName = this.columnNameService.getDisplayNameForColumn(col, headerLocation);\n    if (includePath) {\n      const displayNames = [columnDisplayName];\n      const getDisplayName = (colGroup) => {\n        if (!colGroup) {\n          return;\n        }\n        const colGroupName = this.columnNameService.getDisplayNameForColumnGroup(colGroup, headerLocation);\n        if (!_missingOrEmpty2(colGroupName)) {\n          displayNames.unshift(colGroupName);\n          getDisplayName(colGroup.getParent());\n        }\n      };\n      getDisplayName(col.getParent());\n      return displayNames.join(\" - \");\n    }\n    return columnDisplayName;\n  }\n  getRowGroupColumns() {\n    return this.funcColsService.getRowGroupColumns();\n  }\n  getGroupDisplayColumns() {\n    return this.showRowGroupColsService?.getShowRowGroupCols() ?? [];\n  }\n  isPivotMode() {\n    return this.columnModel.isPivotMode();\n  }\n  isPivotActive() {\n    return this.columnModel.isPivotActive();\n  }\n  getChartColumns() {\n    const gridCols = this.columnModel.getCols();\n    const dimensionCols = /* @__PURE__ */ new Set();\n    const valueCols = /* @__PURE__ */ new Set();\n    gridCols.forEach((col) => {\n      const colDef = col.getColDef();\n      const chartDataType = colDef.chartDataType;\n      if (chartDataType) {\n        switch (chartDataType) {\n          case \"category\":\n          case \"time\":\n            dimensionCols.add(col);\n            return;\n          case \"series\":\n            valueCols.add(col);\n            return;\n          case \"excluded\":\n            return;\n          default:\n            _warnOnce52(\n              `unexpected chartDataType value '${chartDataType}' supplied, instead use 'category', 'series' or 'excluded'`\n            );\n            break;\n        }\n      }\n      if (colDef.colId === \"ag-Grid-AutoColumn\") {\n        dimensionCols.add(col);\n        return;\n      }\n      if (!col.isPrimary()) {\n        valueCols.add(col);\n        return;\n      }\n      (this.isInferredValueCol(col) ? valueCols : dimensionCols).add(col);\n    });\n    return { dimensionCols, valueCols };\n  }\n  isInferredValueCol(col) {\n    const colId = col.getColId();\n    if (colId === \"ag-Grid-AutoColumn\") {\n      return false;\n    }\n    const row = this.rowPositionUtils.getRowNode({ rowIndex: 0, rowPinned: null });\n    if (!row) {\n      return this.valueColsWithoutSeriesType.has(colId);\n    }\n    let cellValue = this.valueService.getValue(col, row);\n    if (cellValue == null) {\n      cellValue = this.extractLeafData(row, col);\n    }\n    if (cellValue != null && typeof cellValue.toNumber === \"function\") {\n      cellValue = cellValue.toNumber();\n    }\n    const isNumber5 = typeof cellValue === \"number\";\n    if (isNumber5) {\n      this.valueColsWithoutSeriesType.add(colId);\n    }\n    return isNumber5;\n  }\n  extractLeafData(row, col) {\n    if (!row.allLeafChildren) {\n      return null;\n    }\n    for (let i = 0; i < row.allLeafChildren.length; i++) {\n      const childRow = row.allLeafChildren[i];\n      const value = this.valueService.getValue(col, childRow);\n      if (value != null) {\n        return value;\n      }\n    }\n    return null;\n  }\n  destroy() {\n    this.valueColsWithoutSeriesType.clear();\n    super.destroy();\n  }\n};\nvar _ComboChartModel = class _ComboChartModel2 extends BeanStub9 {\n  constructor(chartDataModel) {\n    super();\n    this.suppressComboChartWarnings = false;\n    this.chartDataModel = chartDataModel;\n    this.seriesChartTypes = chartDataModel.params.seriesChartTypes ?? [];\n  }\n  postConstruct() {\n    this.initComboCharts();\n  }\n  update(seriesChartTypes) {\n    this.seriesChartTypes = seriesChartTypes ?? this.seriesChartTypes;\n    this.initComboCharts();\n    this.updateSeriesChartTypes();\n  }\n  initComboCharts() {\n    const seriesChartTypesExist = this.seriesChartTypes && this.seriesChartTypes.length > 0;\n    const customCombo = this.chartDataModel.chartType === \"customCombo\" || seriesChartTypesExist;\n    if (customCombo) {\n      this.chartDataModel.chartType = \"customCombo\";\n      this.savedCustomSeriesChartTypes = this.seriesChartTypes || [];\n    }\n  }\n  updateSeriesChartTypes() {\n    if (!this.chartDataModel.isComboChart()) {\n      return;\n    }\n    this.seriesChartTypes = this.seriesChartTypes.map((seriesChartType) => {\n      const primaryOnly = [\"groupedColumn\", \"stackedColumn\", \"stackedArea\"].includes(seriesChartType.chartType);\n      seriesChartType.secondaryAxis = primaryOnly ? false : seriesChartType.secondaryAxis;\n      return seriesChartType;\n    });\n    if (this.chartDataModel.chartType === \"customCombo\") {\n      this.updateSeriesChartTypesForCustomCombo();\n      return;\n    }\n    this.updateChartSeriesTypesForBuiltInCombos();\n  }\n  updateSeriesChartTypesForCustomCombo() {\n    const seriesChartTypesSupplied = this.seriesChartTypes && this.seriesChartTypes.length > 0;\n    if (!seriesChartTypesSupplied && !this.suppressComboChartWarnings) {\n      _warnOnce62(`'seriesChartTypes' are required when the 'customCombo' chart type is specified.`);\n    }\n    this.seriesChartTypes = this.seriesChartTypes.map((s) => {\n      if (!_ComboChartModel2.SUPPORTED_COMBO_CHART_TYPES.includes(s.chartType)) {\n        _warnOnce62(\n          `invalid chartType '${s.chartType}' supplied in 'seriesChartTypes', converting to 'line' instead.`\n        );\n        s.chartType = \"line\";\n      }\n      return s;\n    });\n    const getSeriesChartType = (valueCol) => {\n      if (!this.savedCustomSeriesChartTypes || this.savedCustomSeriesChartTypes.length === 0) {\n        this.savedCustomSeriesChartTypes = this.seriesChartTypes;\n      }\n      const providedSeriesChartType = this.savedCustomSeriesChartTypes.find((s) => s.colId === valueCol.colId);\n      if (!providedSeriesChartType) {\n        if (valueCol.selected && !this.suppressComboChartWarnings) {\n          _warnOnce62(`no 'seriesChartType' found for colId = '${valueCol.colId}', defaulting to 'line'.`);\n        }\n        return {\n          colId: valueCol.colId,\n          chartType: \"line\",\n          secondaryAxis: false\n        };\n      }\n      return providedSeriesChartType;\n    };\n    const updatedSeriesChartTypes = this.chartDataModel.valueColState.map(getSeriesChartType);\n    this.seriesChartTypes = updatedSeriesChartTypes;\n    this.savedCustomSeriesChartTypes = updatedSeriesChartTypes;\n    this.suppressComboChartWarnings = true;\n  }\n  updateChartSeriesTypesForBuiltInCombos() {\n    const { chartType, valueColState } = this.chartDataModel;\n    const primaryChartType = chartType === \"columnLineCombo\" ? \"groupedColumn\" : \"stackedArea\";\n    const secondaryChartType = chartType === \"columnLineCombo\" ? \"line\" : \"groupedColumn\";\n    const selectedCols = valueColState.filter((cs) => cs.selected);\n    const lineIndex = Math.ceil(selectedCols.length / 2);\n    this.seriesChartTypes = selectedCols.map((valueCol, i) => {\n      const seriesType = i >= lineIndex ? secondaryChartType : primaryChartType;\n      return { colId: valueCol.colId, chartType: seriesType, secondaryAxis: false };\n    });\n  }\n};\n_ComboChartModel.SUPPORTED_COMBO_CHART_TYPES = [\"line\", \"groupedColumn\", \"stackedColumn\", \"area\", \"stackedArea\"];\nvar ComboChartModel = _ComboChartModel;\nvar _ChartDataModel = class _ChartDataModel2 extends BeanStub10 {\n  constructor(params) {\n    super();\n    this.unlinked = false;\n    this.chartData = [];\n    this.valueColState = [];\n    this.dimensionColState = [];\n    this.columnNames = {};\n    this.crossFiltering = false;\n    this.grouping = false;\n    this.params = params;\n    this.chartId = params.chartId;\n    this.setParams(params);\n  }\n  wireBeans(beans) {\n    this.rangeService = beans.rangeService;\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  setParams(params) {\n    const {\n      chartType,\n      pivotChart,\n      chartThemeName,\n      switchCategorySeries,\n      aggFunc,\n      cellRange,\n      suppressChartRanges,\n      unlinkChart,\n      crossFiltering,\n      seriesGroupType\n    } = params;\n    this.chartType = chartType;\n    this.pivotChart = pivotChart ?? false;\n    this.chartThemeName = chartThemeName;\n    this.switchCategorySeries = !!switchCategorySeries;\n    this.aggFunc = aggFunc;\n    this.referenceCellRange = cellRange;\n    this.suppliedCellRange = cellRange;\n    this.suppressChartRanges = suppressChartRanges ?? false;\n    this.unlinked = !!unlinkChart;\n    this.crossFiltering = !!crossFiltering;\n    this.seriesGroupType = seriesGroupType;\n  }\n  postConstruct() {\n    this.datasource = this.createManagedBean(new ChartDatasource());\n    this.chartColumnService = this.createManagedBean(new ChartColumnService());\n    this.comboChartModel = this.createManagedBean(new ComboChartModel(this));\n    this.updateCellRanges({ setColsFromRange: true });\n    this.updateData();\n  }\n  updateModel(params) {\n    const { cellRange, seriesChartTypes } = params;\n    if (cellRange !== this.suppliedCellRange) {\n      this.dimensionCellRange = void 0;\n      this.valueCellRange = void 0;\n    }\n    this.setParams(params);\n    this.updateSelectedDimensions(cellRange?.columns);\n    this.updateCellRanges({ setColsFromRange: true });\n    const shouldUpdateComboModel = this.isComboChart() || seriesChartTypes;\n    if (shouldUpdateComboModel) {\n      this.comboChartModel.update(seriesChartTypes);\n    }\n    if (!this.unlinked) {\n      this.updateData();\n    }\n  }\n  updateCellRanges(params) {\n    const { updatedColState, resetOrder, maintainColState, setColsFromRange } = params ?? {};\n    if (this.valueCellRange) {\n      this.referenceCellRange = this.valueCellRange;\n    }\n    const { dimensionCols, valueCols } = this.chartColumnService.getChartColumns();\n    const allColsFromRanges = this.getAllColumnsFromRanges();\n    if (updatedColState) {\n      this.updateColumnState(updatedColState, resetOrder);\n    }\n    this.setDimensionCellRange(dimensionCols, allColsFromRanges, updatedColState);\n    this.setValueCellRange(valueCols, allColsFromRanges, setColsFromRange);\n    if (!updatedColState && !maintainColState) {\n      this.resetColumnState();\n      this.syncDimensionCellRange();\n    }\n    this.comboChartModel.updateSeriesChartTypes();\n  }\n  updateData() {\n    const { startRow, endRow } = this.getRowIndexes();\n    if (this.pivotChart) {\n      this.resetColumnState();\n    }\n    this.grouping = this.isGrouping();\n    const params = {\n      aggFunc: this.aggFunc,\n      dimensionCols: this.getSelectedDimensions(),\n      grouping: this.grouping,\n      pivoting: this.isPivotActive(),\n      crossFiltering: this.crossFiltering,\n      valueCols: this.getSelectedValueCols(),\n      startRow,\n      endRow,\n      isScatter: _includes4([\"scatter\", \"bubble\"], this.chartType)\n    };\n    const { chartData, columnNames, groupChartData } = this.datasource.getData(params);\n    this.chartData = chartData;\n    this.groupChartData = groupChartData;\n    this.columnNames = columnNames;\n    this.categoryAxisType = void 0;\n  }\n  isGrouping() {\n    const usingTreeData = this.gos.get(\"treeData\");\n    const groupedCols = usingTreeData ? null : this.chartColumnService.getRowGroupColumns();\n    const isGroupActive = usingTreeData || groupedCols && groupedCols.length > 0;\n    const colIds = this.getSelectedDimensions().map(({ colId }) => colId);\n    const displayedGroupCols = this.chartColumnService.getGroupDisplayColumns();\n    const groupDimensionSelected = displayedGroupCols.map((col) => col.getColId()).some((id) => colIds.includes(id));\n    return !!isGroupActive && groupDimensionSelected;\n  }\n  getSelectedValueCols() {\n    return this.valueColState.filter((cs) => cs.selected).map((cs) => cs.column);\n  }\n  getSelectedDimensions() {\n    return this.dimensionColState.filter((cs) => cs.selected);\n  }\n  getColDisplayName(col, includePath) {\n    return this.chartColumnService.getColDisplayName(col, includePath);\n  }\n  isPivotMode() {\n    return this.chartColumnService.isPivotMode();\n  }\n  getChartDataType(colId) {\n    const column = this.chartColumnService.getColumn(colId);\n    return column ? column.getColDef().chartDataType : void 0;\n  }\n  isPivotActive() {\n    return this.chartColumnService.isPivotActive();\n  }\n  createCellRange(type, ...columns) {\n    return {\n      id: this.chartId,\n      // set range ID to match chart ID so we can identify changes to the ranges for this chart\n      startRow: this.referenceCellRange.startRow,\n      endRow: this.referenceCellRange.endRow,\n      columns,\n      startColumn: type === CellRangeType2.DIMENSION || this.referenceCellRange.startColumn == null ? columns[0] : this.referenceCellRange.startColumn,\n      type\n    };\n  }\n  getAllColumnsFromRanges() {\n    if (this.pivotChart) {\n      return new Set(this.chartColumnService.getAllDisplayedColumns());\n    }\n    const columns = this.dimensionCellRange || this.valueCellRange ? [] : this.referenceCellRange.columns;\n    if (this.dimensionCellRange) {\n      columns.push(...this.dimensionCellRange.columns);\n    }\n    if (this.valueCellRange) {\n      columns.push(...this.valueCellRange.columns);\n    }\n    return new Set(columns);\n  }\n  getRowIndexes() {\n    let startRow = 0, endRow = 0;\n    const { rangeService, valueCellRange, dimensionCellRange } = this;\n    const cellRange = valueCellRange || dimensionCellRange;\n    if (rangeService && cellRange) {\n      startRow = rangeService.getRangeStartRow(cellRange).rowIndex;\n      const endRowPosition = rangeService.getRangeEndRow(cellRange);\n      endRow = endRowPosition.rowPinned === \"bottom\" ? -1 : endRowPosition.rowIndex;\n    }\n    return { startRow, endRow };\n  }\n  resetColumnState() {\n    const { dimensionCols, valueCols } = this.chartColumnService.getChartColumns();\n    const allCols = this.getAllColumnsFromRanges();\n    const isInitialising = this.valueColState.length < 1;\n    this.dimensionColState = [];\n    this.valueColState = [];\n    const supportsMultipleDimensions = isHierarchical(getSeriesType(this.chartType));\n    let hasSelectedDimension = false;\n    let order = 1;\n    const aggFuncDimension = this.suppliedCellRange.columns[0];\n    dimensionCols.forEach((column) => {\n      const isAutoGroupCol = column.getColId() === \"ag-Grid-AutoColumn\";\n      let selected = false;\n      if (this.crossFiltering && this.aggFunc) {\n        if (aggFuncDimension.getColId() === column.getColId()) {\n          selected = true;\n        }\n      } else {\n        selected = isAutoGroupCol ? true : (!hasSelectedDimension || supportsMultipleDimensions) && allCols.has(column);\n      }\n      this.dimensionColState.push({\n        column,\n        colId: column.getColId(),\n        displayName: this.getColDisplayName(column),\n        selected,\n        order: order++\n      });\n      if (selected) {\n        hasSelectedDimension = true;\n      }\n    });\n    const defaultCategory = {\n      colId: _ChartDataModel2.DEFAULT_CATEGORY,\n      displayName: this.chartTranslationService.translate(\"defaultCategory\"),\n      selected: !hasSelectedDimension,\n      // if no dimensions in range select the default\n      order: 0\n    };\n    this.dimensionColState.unshift(defaultCategory);\n    const valueColumnsFromReferenceRange = this.referenceCellRange.columns.filter(\n      (c) => valueCols.has(c)\n    );\n    valueCols.forEach((column) => {\n      if (isInitialising && _includes4(this.referenceCellRange.columns, column)) {\n        column = valueColumnsFromReferenceRange.shift();\n      }\n      this.valueColState.push({\n        column,\n        colId: column.getColId(),\n        displayName: this.getColDisplayName(column),\n        selected: allCols.has(column),\n        order: order++\n      });\n    });\n  }\n  updateColumnState(updatedCol, resetOrder) {\n    const idsMatch = (cs) => cs.colId === updatedCol.colId;\n    const { dimensionColState, valueColState } = this;\n    const matchedDimensionColState = dimensionColState.find(idsMatch);\n    const matchedValueColState = valueColState.find(idsMatch);\n    if (matchedDimensionColState) {\n      const supportsMultipleDimensions = isHierarchical(getSeriesType(this.chartType));\n      if (!supportsMultipleDimensions) {\n        const selectedColumnState = updatedCol.selected ? matchedDimensionColState : dimensionColState.filter((cs) => cs !== matchedDimensionColState).find(({ selected }) => selected);\n        dimensionColState.forEach((cs) => cs.selected = cs === selectedColumnState);\n      } else {\n        matchedDimensionColState.selected = updatedCol.selected;\n      }\n    } else if (matchedValueColState) {\n      matchedValueColState.selected = updatedCol.selected;\n    }\n    const allColumns = [...dimensionColState, ...valueColState];\n    const orderedColIds = [];\n    if (!resetOrder) {\n      allColumns.forEach((col, i) => {\n        if (i === updatedCol.order) {\n          orderedColIds.push(updatedCol.colId);\n        }\n        if (col.colId !== updatedCol.colId) {\n          orderedColIds.push(col.colId);\n        }\n      });\n      allColumns.forEach((col) => {\n        const order = orderedColIds.indexOf(col.colId);\n        col.order = order >= 0 ? orderedColIds.indexOf(col.colId) : allColumns.length - 1;\n      });\n    }\n    this.reorderColState();\n  }\n  reorderColState() {\n    const ascColStateOrder = (a, b) => a.order - b.order;\n    this.dimensionColState.sort(ascColStateOrder);\n    this.valueColState.sort(ascColStateOrder);\n  }\n  setDimensionCellRange(dimensionCols, colsInRange, updatedColState) {\n    this.dimensionCellRange = void 0;\n    const supportsMultipleDimensions = isHierarchical(getSeriesType(this.chartType));\n    if (!updatedColState && !this.dimensionColState.length) {\n      const selectedCols = new Array();\n      dimensionCols.forEach((col) => {\n        if (selectedCols.length > 0 && !supportsMultipleDimensions || !colsInRange.has(col)) {\n          return;\n        }\n        selectedCols.push(col);\n      });\n      if (selectedCols.length > 0) {\n        this.dimensionCellRange = this.createCellRange(CellRangeType2.DIMENSION, ...selectedCols);\n      }\n      return;\n    }\n    let selectedDimensionColStates = updatedColState ? [updatedColState] : [];\n    if (this.crossFiltering && this.aggFunc) {\n      const aggFuncDimension = this.suppliedCellRange.columns[0];\n      selectedDimensionColStates = this.dimensionColState.filter(\n        (cs) => cs.colId === aggFuncDimension.getColId()\n      );\n    } else if (supportsMultipleDimensions || selectedDimensionColStates.length === 0 || selectedDimensionColStates.some(({ column }) => !column || !dimensionCols.has(column))) {\n      selectedDimensionColStates = this.dimensionColState.filter((cs) => cs.selected);\n    }\n    const isDefaultCategory = selectedDimensionColStates.length === 1 ? selectedDimensionColStates[0].colId === _ChartDataModel2.DEFAULT_CATEGORY : false;\n    const selectedColumns = selectedDimensionColStates.map(({ column }) => column).filter((value) => value != null);\n    if (selectedColumns.length > 0 && !isDefaultCategory) {\n      this.dimensionCellRange = this.createCellRange(CellRangeType2.DIMENSION, ...selectedColumns);\n    }\n  }\n  setValueCellRange(valueCols, colsInRange, setColsFromRange) {\n    this.valueCellRange = void 0;\n    const selectedValueCols = [];\n    const maxSelection = getMaxNumSeries(this.chartType);\n    let numSelected = 0;\n    valueCols.forEach((col) => {\n      if (setColsFromRange) {\n        if ((maxSelection == null || numSelected < maxSelection) && colsInRange.has(col)) {\n          selectedValueCols.push(col);\n          numSelected++;\n        }\n      } else {\n        if (this.valueColState.some((colState) => colState.selected && colState.colId === col.getColId())) {\n          selectedValueCols.push(col);\n        }\n      }\n    });\n    if (selectedValueCols.length > 0) {\n      let orderedColIds = [];\n      if (this.valueColState.length > 0) {\n        orderedColIds = this.valueColState.map((c) => c.colId);\n      } else {\n        colsInRange.forEach((c) => orderedColIds.push(c.getColId()));\n      }\n      selectedValueCols.sort((a, b) => orderedColIds.indexOf(a.getColId()) - orderedColIds.indexOf(b.getColId()));\n      this.valueCellRange = this.createCellRange(CellRangeType2.VALUE, ...selectedValueCols);\n    }\n  }\n  resetCellRanges(dimension, value) {\n    if (!dimension && !value) {\n      return;\n    }\n    const { dimensionCols, valueCols } = this.chartColumnService.getChartColumns();\n    const allColsFromRanges = this.getAllColumnsFromRanges();\n    if (dimension) {\n      this.setDimensionCellRange(dimensionCols, allColsFromRanges);\n    }\n    if (value) {\n      this.setValueCellRange(valueCols, allColsFromRanges);\n    }\n  }\n  updateSelectedDimensions(columns) {\n    const colIdSet = new Set(columns.map((column) => column.getColId()));\n    const supportsMultipleDimensions = isHierarchical(getSeriesType(this.chartType));\n    if (!supportsMultipleDimensions) {\n      const foundColState = this.dimensionColState.find((colState) => colIdSet.has(colState.colId)) || this.dimensionColState[0];\n      const selectedColumnId = foundColState.colId;\n      this.dimensionColState = this.dimensionColState.map((colState) => ({\n        ...colState,\n        selected: colState.colId === selectedColumnId\n      }));\n    } else {\n      const foundColStates = this.dimensionColState.filter((colState) => colIdSet.has(colState.colId));\n      const selectedColumnIds = new Set(foundColStates.map((colState) => colState.colId));\n      this.dimensionColState = this.dimensionColState.map((colState) => ({\n        ...colState,\n        selected: selectedColumnIds.has(colState.colId)\n      }));\n    }\n  }\n  syncDimensionCellRange() {\n    const selectedDimensions = this.getSelectedDimensions();\n    if (selectedDimensions.length === 0)\n      return;\n    const selectedCols = selectedDimensions.map(({ column }) => column).filter((value) => value != null);\n    if (selectedCols.length > 0) {\n      this.dimensionCellRange = this.createCellRange(CellRangeType2.DIMENSION, ...selectedCols);\n    }\n  }\n  isComboChart(chartType) {\n    return isComboChart(chartType ?? this.chartType);\n  }\n};\n_ChartDataModel.DEFAULT_CATEGORY = \"AG-GRID-DEFAULT-CATEGORY\";\nvar ChartDataModel = _ChartDataModel;\nvar validateIfDefined = (validationFn) => {\n  return (value) => {\n    if (value == void 0)\n      return true;\n    return validationFn(value);\n  };\n};\nvar isString = (value) => typeof value === \"string\";\nvar isBoolean = (value) => typeof value === \"boolean\";\nvar isValidSeriesChartType = (value) => typeof value === \"object\";\nvar createWarnMessage = (property, expectedType) => (value) => `AG Grid - unable to update chart as invalid params supplied:  \\`${property}: ${value}\\`, expected ${expectedType}.`;\nvar createEnterpriseMessage = (feature) => {\n  const url = \"https://www.ag-grid.com/javascript-data-grid/integrated-charts-installation/\";\n  return `${feature} is not supported in AG Charts Community (either 'ag-grid-charts-enterprise' or '@ag-grid-enterprise/charts-enterprise' hasn't been loaded). See ${url} for more details.`;\n};\nvar _ChartParamsValidator = class _ChartParamsValidator2 {\n  static isEnterprise() {\n    return _ModuleSupport.enterpriseModule.isEnterprise;\n  }\n  static isValidChartType(value) {\n    return !!getSeriesTypeIfExists(value) || isComboChart(value);\n  }\n  static isLegacyChartType(value) {\n    return _ChartParamsValidator2.legacyChartTypes.includes(value);\n  }\n  static validateUpdateParams(params) {\n    const paramsToValidate = params;\n    switch (paramsToValidate.type) {\n      case \"rangeChartUpdate\":\n        return _ChartParamsValidator2.validateUpdateRangeChartParams(params);\n      case \"pivotChartUpdate\":\n        return _ChartParamsValidator2.validateUpdatePivotChartParams(params);\n      case \"crossFilterChartUpdate\":\n        return _ChartParamsValidator2.validateUpdateCrossFilterChartParams(\n          params\n        );\n      default:\n        _warnOnce72(\n          `Invalid value supplied for 'type': ${params.type}. It must be either 'rangeChartUpdate', 'pivotChartUpdate', or 'crossFilterChartUpdate'.`\n        );\n        return false;\n    }\n  }\n  static validateCreateParams(params) {\n    return validateProperties(params, [\n      _ChartParamsValidator2.enterpriseChartTypeValidation,\n      _ChartParamsValidator2.switchCategorySeriesValidation\n    ]);\n  }\n  static validateUpdateRangeChartParams(params) {\n    const validations = [\n      ..._ChartParamsValidator2.commonUpdateValidations,\n      _ChartParamsValidator2.enterpriseChartTypeValidation,\n      ..._ChartParamsValidator2.cellRangeValidations,\n      {\n        property: \"seriesChartTypes\",\n        validationFn: (value) => value === void 0 || Array.isArray(value) && value.every(isValidSeriesChartType),\n        warnMessage: createWarnMessage(\"seriesChartTypes\", \"Array of SeriesChartType\")\n      }\n    ];\n    return validateProperties(\n      params,\n      validations,\n      [\n        ..._ChartParamsValidator2.baseUpdateChartParams,\n        \"cellRange\",\n        \"suppressChartRanges\",\n        \"switchCategorySeries\",\n        \"aggFunc\",\n        \"seriesChartTypes\",\n        \"seriesGroupType\"\n      ],\n      \"UpdateRangeChartParams\"\n    );\n  }\n  static validateUpdatePivotChartParams(params) {\n    const validations = [..._ChartParamsValidator2.commonUpdateValidations];\n    return validateProperties(\n      params,\n      validations,\n      [..._ChartParamsValidator2.baseUpdateChartParams],\n      \"UpdatePivotChartParams\"\n    );\n  }\n  static validateUpdateCrossFilterChartParams(params) {\n    const validations = [\n      ..._ChartParamsValidator2.commonUpdateValidations,\n      ..._ChartParamsValidator2.cellRangeValidations\n    ];\n    return validateProperties(\n      params,\n      validations,\n      [..._ChartParamsValidator2.baseUpdateChartParams, \"cellRange\", \"suppressChartRanges\", \"aggFunc\"],\n      \"UpdateCrossFilterChartParams\"\n    );\n  }\n};\n_ChartParamsValidator.legacyChartTypes = [\"doughnut\"];\n_ChartParamsValidator.baseUpdateChartParams = [\n  \"type\",\n  \"chartId\",\n  \"chartType\",\n  \"chartThemeName\",\n  \"chartThemeOverrides\",\n  \"unlinkChart\"\n];\n_ChartParamsValidator.validateChartType = validateIfDefined((chartType) => {\n  if (_ChartParamsValidator.isValidChartType(chartType))\n    return true;\n  if (_ChartParamsValidator.isLegacyChartType(chartType)) {\n    const renamedChartType = getCanonicalChartType(chartType);\n    _warnOnce72(`The chart type '${chartType}' has been deprecated. Please use '${renamedChartType}' instead.`);\n    return renamedChartType;\n  }\n  return false;\n});\n_ChartParamsValidator.validateAgChartThemeOverrides = validateIfDefined((themeOverrides) => {\n  return typeof themeOverrides === \"object\";\n});\n_ChartParamsValidator.validateChartParamsCellRange = validateIfDefined((cellRange) => {\n  return typeof cellRange === \"object\";\n});\n_ChartParamsValidator.validateAggFunc = validateIfDefined((aggFunc) => {\n  return typeof aggFunc === \"string\" || typeof aggFunc === \"function\";\n});\n_ChartParamsValidator.enterpriseChartTypeValidation = {\n  property: \"chartType\",\n  validationFn: validateIfDefined(\n    (chartType) => _ChartParamsValidator.isEnterprise() || !chartType || !isEnterpriseChartType(chartType)\n  ),\n  warnMessage: (chartType) => createEnterpriseMessage(`The '${chartType}' chart type`)\n};\n_ChartParamsValidator.switchCategorySeriesValidation = {\n  property: \"switchCategorySeries\",\n  validationFn: validateIfDefined((switchCategorySeries) => {\n    if (!switchCategorySeries || _ChartParamsValidator.isEnterprise()) {\n      return true;\n    }\n    return void 0;\n  }),\n  warnMessage: () => createEnterpriseMessage(`'switchCategorySeries' has been ignored as it`),\n  warnIfFixed: true\n};\n_ChartParamsValidator.commonUpdateValidations = [\n  { property: \"chartId\", validationFn: isString, warnMessage: createWarnMessage(\"chartId\", \"string\") },\n  {\n    property: \"chartType\",\n    validationFn: _ChartParamsValidator.validateChartType,\n    warnMessage: createWarnMessage(\"chartType\", \"ChartType\")\n  },\n  {\n    property: \"chartThemeName\",\n    validationFn: isString,\n    warnMessage: createWarnMessage(\"chartThemeName\", \"string\")\n  },\n  {\n    property: \"chartThemeOverrides\",\n    validationFn: _ChartParamsValidator.validateAgChartThemeOverrides,\n    warnMessage: createWarnMessage(\"chartThemeOverrides\", \"AgChartThemeOverrides\")\n  },\n  { property: \"unlinkChart\", validationFn: isBoolean, warnMessage: createWarnMessage(\"unlinkChart\", \"boolean\") }\n];\n_ChartParamsValidator.cellRangeValidations = [\n  {\n    property: \"cellRange\",\n    validationFn: _ChartParamsValidator.validateChartParamsCellRange,\n    warnMessage: createWarnMessage(\"cellRange\", \"ChartParamsCellRange\")\n  },\n  {\n    property: \"suppressChartRanges\",\n    validationFn: isBoolean,\n    warnMessage: createWarnMessage(\"suppressChartRanges\", \"boolean\")\n  },\n  {\n    property: \"aggFunc\",\n    validationFn: _ChartParamsValidator.validateAggFunc,\n    warnMessage: createWarnMessage(\"aggFunc\", \"string or IAggFunc\")\n  },\n  _ChartParamsValidator.switchCategorySeriesValidation\n];\nvar ChartParamsValidator = _ChartParamsValidator;\nfunction validateProperties(params, validations, validPropertyNames, paramsType) {\n  let validatedProperties = void 0;\n  for (const validation of validations) {\n    const { property, validationFn, warnMessage, warnIfFixed } = validation;\n    if (property in params) {\n      const value = params[property];\n      const validationResult = validationFn(value);\n      if (validationResult === true)\n        continue;\n      if (validationResult === false) {\n        _warnOnce72(warnMessage(value));\n        return false;\n      }\n      validatedProperties = validatedProperties || { ...params };\n      validatedProperties[property] = validationResult;\n      if (warnIfFixed) {\n        _warnOnce72(warnMessage(value));\n      }\n    }\n  }\n  if (validPropertyNames) {\n    for (const property in params) {\n      if (!validPropertyNames.includes(property)) {\n        _warnOnce72(`Unexpected property supplied. ${paramsType} does not contain: \\`${property}\\`.`);\n        return false;\n      }\n    }\n  }\n  if (validatedProperties)\n    return validatedProperties;\n  return true;\n}\nvar DEFAULT_THEMES = [\"ag-default\", \"ag-material\", \"ag-sheets\", \"ag-polychroma\", \"ag-vivid\"];\nvar ChartController = class extends BeanStub11 {\n  constructor(model) {\n    super();\n    this.model = model;\n    this.isEnterprise = () => _ModuleSupport2.enterpriseModule.isEnterprise;\n  }\n  wireBeans(beans) {\n    this.rangeService = beans.rangeService;\n  }\n  postConstruct() {\n    this.setChartRange();\n    if (this.model.unlinked) {\n      if (this.rangeService) {\n        this.rangeService.setCellRanges([]);\n      }\n    }\n    const listener = this.updateForGridChange.bind(this, {});\n    this.addManagedEventListeners({\n      cellSelectionChanged: (event) => {\n        if (event.id && event.id === this.model.chartId) {\n          this.updateForRangeChange();\n        }\n      },\n      columnMoved: listener,\n      columnPinned: listener,\n      columnVisible: listener,\n      columnRowGroupChanged: listener,\n      modelUpdated: listener,\n      cellValueChanged: this.updateForDataChange.bind(this)\n    });\n  }\n  update(params) {\n    if (!this.validUpdateType(params))\n      return false;\n    const validationResult = ChartParamsValidator.validateUpdateParams(params);\n    if (!validationResult)\n      return false;\n    const validParams = validationResult === true ? params : validationResult;\n    this.applyValidatedChartParams(validParams);\n    return true;\n  }\n  applyValidatedChartParams(params) {\n    const { chartId, chartType, chartThemeName, unlinkChart } = params;\n    const common = {\n      chartId,\n      pivotChart: this.model.pivotChart,\n      chartType: chartType ?? this.model.chartType,\n      chartThemeName: chartThemeName ?? this.model.chartThemeName,\n      unlinkChart: unlinkChart ?? this.model.unlinked,\n      cellRange: this.model.suppliedCellRange,\n      switchCategorySeries: this.model.switchCategorySeries,\n      aggFunc: this.model.aggFunc,\n      seriesChartTypes: void 0,\n      suppressChartRanges: false,\n      crossFiltering: false\n    };\n    const chartModelParams = { ...common };\n    switch (params.type) {\n      case \"rangeChartUpdate\":\n        chartModelParams.cellRange = this.createCellRange(params) ?? this.model.suppliedCellRange;\n        chartModelParams.switchCategorySeries = params.switchCategorySeries ?? this.model.switchCategorySeries;\n        chartModelParams.aggFunc = params.aggFunc ?? this.model.aggFunc;\n        chartModelParams.seriesChartTypes = params.seriesChartTypes;\n        chartModelParams.suppressChartRanges = params.suppressChartRanges ?? this.model.suppressChartRanges;\n        chartModelParams.seriesGroupType = params.seriesGroupType ?? this.model.seriesGroupType;\n        break;\n      case \"crossFilterChartUpdate\":\n        chartModelParams.cellRange = this.createCellRange(params) ?? this.model.suppliedCellRange;\n        chartModelParams.switchCategorySeries = false;\n        chartModelParams.aggFunc = params.aggFunc ?? this.model.aggFunc;\n        chartModelParams.crossFiltering = true;\n        chartModelParams.suppressChartRanges = params.suppressChartRanges ?? this.model.suppressChartRanges;\n        break;\n      case \"pivotChartUpdate\":\n        chartModelParams.switchCategorySeries = false;\n        break;\n    }\n    this.model.updateModel(chartModelParams);\n    const removeChartCellRanges = chartModelParams.unlinkChart || chartModelParams.suppressChartRanges;\n    removeChartCellRanges ? this.rangeService?.setCellRanges([]) : this.setChartRange();\n  }\n  updateForGridChange(params) {\n    if (this.model.unlinked) {\n      return;\n    }\n    const { maintainColState, setColsFromRange } = params ?? {};\n    this.model.updateCellRanges({ maintainColState, setColsFromRange });\n    this.model.updateData();\n    this.setChartRange();\n  }\n  updateForDataChange() {\n    if (this.model.unlinked) {\n      return;\n    }\n    this.model.updateData();\n    this.raiseChartModelUpdateEvent();\n  }\n  updateForRangeChange() {\n    this.updateForGridChange({ setColsFromRange: true });\n    this.raiseChartRangeSelectionChangedEvent();\n  }\n  updateForPanelChange(params) {\n    this.model.updateCellRanges(params);\n    this.model.updateData();\n    if (params.skipAnimation) {\n      this.getChartProxy().getChartRef().skipAnimations();\n    }\n    this.setChartRange();\n    this.raiseChartRangeSelectionChangedEvent();\n  }\n  updateThemeOverrides(updatedOverrides) {\n    this.chartProxy.updateThemeOverrides(updatedOverrides);\n  }\n  getChartUpdateParams(updatedOverrides) {\n    const selectedCols = this.getSelectedValueColState();\n    const fields = selectedCols.map((c) => ({ colId: c.colId, displayName: c.displayName }));\n    const data = this.getChartData();\n    const selectedDimensions = this.getSelectedDimensions();\n    const params = {\n      data,\n      groupData: this.model.groupChartData,\n      grouping: this.isGrouping(),\n      categories: selectedDimensions.map((selectedDimension) => ({\n        id: selectedDimension.colId,\n        name: selectedDimension.displayName,\n        chartDataType: this.model.categoryAxisType ?? this.model.getChartDataType(selectedDimension.colId)\n      })),\n      fields,\n      chartId: this.getChartId(),\n      getCrossFilteringContext: () => ({ lastSelectedChartId: \"xxx\" }),\n      //this.params.crossFilteringContext, //TODO\n      seriesChartTypes: this.getSeriesChartTypes(),\n      updatedOverrides,\n      seriesGroupType: this.model.seriesGroupType\n    };\n    return this.isCategorySeriesSwitched() ? this.invertCategorySeriesParams(params) : params;\n  }\n  invertCategorySeriesParams(params) {\n    const [category] = params.categories;\n    const categories = [{ id: ChartDataModel.DEFAULT_CATEGORY, name: \"\" }];\n    const fields = params.data.map((value, index) => {\n      const categoryKey = `${category.id}:${index}`;\n      const categoryValue = value[category.id];\n      const seriesLabel = categoryValue == null ? \"\" : String(categoryValue);\n      return { colId: categoryKey, displayName: seriesLabel };\n    });\n    const data = params.fields.map((field) => {\n      const row = {\n        [ChartDataModel.DEFAULT_CATEGORY]: field.displayName\n      };\n      for (const [index, value] of params.data.entries()) {\n        const categoryKey = `${category.id}:${index}`;\n        const seriesLabelValue = value[field.colId];\n        row[categoryKey] = seriesLabelValue;\n      }\n      return row;\n    });\n    return {\n      ...params,\n      categories,\n      fields,\n      data\n    };\n  }\n  getChartModel() {\n    const modelType = this.model.pivotChart ? \"pivot\" : \"range\";\n    const seriesChartTypes = this.isComboChart() ? this.model.comboChartModel.seriesChartTypes : void 0;\n    return {\n      modelType,\n      chartId: this.model.chartId,\n      chartType: this.model.chartType,\n      chartThemeName: this.getChartThemeName(),\n      chartOptions: this.chartProxy.getChartThemeOverrides(),\n      chartPalette: this.chartProxy.getChartPalette(),\n      cellRange: this.getCellRangeParams(),\n      switchCategorySeries: this.model.switchCategorySeries,\n      suppressChartRanges: this.model.suppressChartRanges,\n      aggFunc: this.model.aggFunc,\n      unlinkChart: this.model.unlinked,\n      seriesChartTypes,\n      seriesGroupType: this.model.seriesGroupType\n    };\n  }\n  getChartId() {\n    return this.model.chartId;\n  }\n  getChartData() {\n    return this.model.chartData;\n  }\n  getChartType() {\n    return this.model.chartType;\n  }\n  setChartType(chartType) {\n    this.updateMultiSeriesAndCategory(this.model.chartType, chartType);\n    this.model.chartType = chartType;\n    this.model.comboChartModel.updateSeriesChartTypes();\n    this.model.switchCategorySeries = false;\n    this.model.categoryAxisType = void 0;\n    this.model.seriesGroupType = void 0;\n    this.raiseChartModelUpdateEvent();\n    this.raiseChartOptionsChangedEvent();\n  }\n  isCategorySeriesSwitched() {\n    return this.model.switchCategorySeries && !this.model.isGrouping();\n  }\n  switchCategorySeries(inverted) {\n    if (!supportsInvertedCategorySeries(this.getChartType()))\n      return;\n    this.model.switchCategorySeries = inverted;\n    this.raiseChartModelUpdateEvent();\n  }\n  getAggFunc() {\n    return this.model.aggFunc;\n  }\n  setAggFunc(value, silent) {\n    if (this.model.aggFunc === value)\n      return;\n    this.model.aggFunc = value;\n    if (silent)\n      return;\n    this.model.updateData();\n    this.raiseChartModelUpdateEvent();\n  }\n  updateMultiSeriesAndCategory(previousChartType, chartType) {\n    const updateForMax = (columns, maxNum) => {\n      let numSelected = 0;\n      for (const colState of columns) {\n        if (!colState.selected)\n          continue;\n        if (numSelected >= maxNum) {\n          colState.selected = false;\n        } else {\n          numSelected++;\n        }\n      }\n      if (numSelected === 0) {\n        columns[0].selected = true;\n      }\n    };\n    const maxNumDimensions = getMaxNumCategories(chartType);\n    const maxNumSeries = getMaxNumSeries(chartType);\n    const updateDimensionColState = maxNumDimensions != null && (getMaxNumCategories(previousChartType) ?? 100) > (maxNumDimensions ?? 100);\n    const updateValueColState = maxNumSeries != null && (getMaxNumSeries(previousChartType) ?? 100) > (maxNumSeries ?? 100);\n    if (updateDimensionColState) {\n      updateForMax(this.model.dimensionColState, maxNumDimensions);\n    }\n    if (updateValueColState) {\n      updateForMax(this.model.valueColState, maxNumSeries);\n    }\n    if (updateDimensionColState || updateValueColState) {\n      this.model.resetCellRanges(updateDimensionColState, updateValueColState);\n      this.setChartRange(true);\n    }\n  }\n  setChartThemeName(chartThemeName, silent) {\n    this.model.chartThemeName = chartThemeName;\n    if (!silent) {\n      this.raiseChartModelUpdateEvent();\n      this.raiseChartOptionsChangedEvent();\n    }\n  }\n  getChartThemeName() {\n    return this.model.chartThemeName;\n  }\n  isPivotChart() {\n    return this.model.pivotChart;\n  }\n  isPivotMode() {\n    return this.model.isPivotMode();\n  }\n  isGrouping() {\n    return this.model.isGrouping();\n  }\n  isCrossFilterChart() {\n    return this.model.crossFiltering;\n  }\n  getThemeNames() {\n    return this.gos.get(\"chartThemes\") || DEFAULT_THEMES;\n  }\n  getThemes() {\n    const themeNames = this.getThemeNames();\n    return themeNames.map((themeName) => {\n      const stockTheme = isStockTheme(themeName);\n      const theme = stockTheme ? themeName : this.chartProxy.lookupCustomChartTheme(themeName);\n      return _Theme2.getChartTheme(theme);\n    });\n  }\n  getPalettes() {\n    const themes = this.getThemes();\n    return themes.map((theme) => {\n      return theme.palette;\n    });\n  }\n  getThemeTemplateParameters() {\n    const themes = this.getThemes();\n    return themes.map((theme) => {\n      return theme.getTemplateParameters();\n    });\n  }\n  getValueColState() {\n    return this.model.valueColState.map(this.displayNameMapper.bind(this));\n  }\n  getSelectedValueColState() {\n    return this.getValueColState().filter((cs) => cs.selected);\n  }\n  getSelectedDimensions() {\n    return this.model.getSelectedDimensions();\n  }\n  displayNameMapper(col) {\n    const { column } = col;\n    if (column) {\n      col.displayName = this.model.getColDisplayName(column, this.model.isPivotMode());\n    } else {\n      const columnNames = this.model.columnNames[col.colId];\n      col.displayName = columnNames ? columnNames.join(\" - \") : this.model.getColDisplayName(column);\n    }\n    return col;\n  }\n  getColStateForMenu() {\n    return { dimensionCols: this.model.dimensionColState, valueCols: this.getValueColState() };\n  }\n  setChartRange(silent = false) {\n    if (this.rangeService && !this.model.suppressChartRanges && !this.model.unlinked) {\n      this.rangeService.setCellRanges(this.getCellRanges());\n    }\n    if (!silent) {\n      this.raiseChartModelUpdateEvent();\n    }\n  }\n  detachChartRange() {\n    this.model.unlinked = !this.model.unlinked;\n    if (this.model.unlinked) {\n      if (this.rangeService) {\n        this.rangeService.setCellRanges([]);\n      }\n    } else {\n      this.updateForGridChange();\n    }\n    this.dispatchLocalEvent({ type: \"chartLinkedChanged\" });\n  }\n  setChartProxy(chartProxy) {\n    this.chartProxy = chartProxy;\n  }\n  getChartProxy() {\n    return this.chartProxy;\n  }\n  isActiveXYChart() {\n    return [\"scatter\", \"bubble\"].includes(this.getChartType());\n  }\n  isChartLinked() {\n    return !this.model.unlinked;\n  }\n  customComboExists() {\n    const savedCustomSeriesChartTypes = this.model.comboChartModel.savedCustomSeriesChartTypes;\n    return savedCustomSeriesChartTypes && savedCustomSeriesChartTypes.length > 0;\n  }\n  getSeriesChartTypes() {\n    return this.model.comboChartModel.seriesChartTypes;\n  }\n  isComboChart(chartType) {\n    return this.model.isComboChart(chartType);\n  }\n  updateSeriesChartType(colId, chartType, secondaryAxis) {\n    const seriesChartType = this.model.comboChartModel.seriesChartTypes.find((s) => s.colId === colId);\n    if (seriesChartType) {\n      const updateChartType = this.model.chartType !== \"customCombo\";\n      if (updateChartType) {\n        this.model.chartType = \"customCombo\";\n      }\n      const prevSeriesChartType = seriesChartType.chartType;\n      if (chartType != null) {\n        seriesChartType.chartType = chartType;\n      }\n      if (secondaryAxis != null) {\n        seriesChartType.secondaryAxis = secondaryAxis;\n      }\n      this.model.comboChartModel.savedCustomSeriesChartTypes = this.model.comboChartModel.seriesChartTypes;\n      this.model.comboChartModel.updateSeriesChartTypes();\n      this.updateForDataChange();\n      if (updateChartType) {\n        this.dispatchLocalEvent({\n          type: \"chartTypeChanged\"\n        });\n      }\n      if (prevSeriesChartType !== chartType) {\n        this.dispatchLocalEvent({\n          type: \"chartSeriesChartTypeChanged\"\n        });\n      }\n      this.raiseChartOptionsChangedEvent();\n    }\n  }\n  getActiveSeriesChartTypes() {\n    const selectedColIds = this.getSelectedValueColState().map((c) => c.colId);\n    return this.getSeriesChartTypes().filter((s) => selectedColIds.includes(s.colId));\n  }\n  getChartSeriesTypes(chartType) {\n    const targetChartType = chartType ?? this.getChartType();\n    return this.isComboChart(targetChartType) ? [\"line\", \"bar\", \"area\"] : [getSeriesType(targetChartType)];\n  }\n  getChartSeriesType() {\n    const seriesChartTypes = this.getSeriesChartTypes();\n    if (seriesChartTypes.length === 0) {\n      return \"bar\";\n    }\n    const ct = seriesChartTypes[0].chartType;\n    if (ct === \"columnLineCombo\") {\n      return \"bar\";\n    }\n    if (ct === \"areaColumnCombo\") {\n      return \"area\";\n    }\n    return getSeriesType(ct);\n  }\n  getCellRanges() {\n    return [this.model.dimensionCellRange, this.model.valueCellRange].filter((r) => r);\n  }\n  createCellRange(params) {\n    return params.cellRange && this.rangeService?.createPartialCellRangeFromRangeParams(params.cellRange, true);\n  }\n  validUpdateType(params) {\n    if (!params.type) {\n      _warnOnce8(\n        `Unable to update chart as the 'type' is missing. It must be either 'rangeChartUpdate', 'pivotChartUpdate', or 'crossFilterChartUpdate'.`\n      );\n      return false;\n    }\n    const chartTypeMap = {\n      \"Range Chart\": () => !this.isPivotChart() && !this.isCrossFilterChart(),\n      \"Pivot Chart\": () => this.isPivotChart(),\n      \"Cross Filter Chart\": () => this.isCrossFilterChart()\n    };\n    const currentChartType = Object.keys(chartTypeMap).find((type) => chartTypeMap[type]()) ?? \"Range Chart\";\n    const valid = params.type === `${currentChartType[0].toLowerCase()}${currentChartType.slice(1).replace(/ /g, \"\")}Update`;\n    if (!valid) {\n      _warnOnce8(\n        `Unable to update chart as a '${params.type}' update type is not permitted on a ${currentChartType}.`\n      );\n    }\n    return valid;\n  }\n  getCellRangeParams() {\n    const cellRanges = this.getCellRanges();\n    const firstCellRange = cellRanges[0];\n    const startRow = firstCellRange && firstCellRange.startRow || null;\n    const endRow = firstCellRange && firstCellRange.endRow || null;\n    return {\n      rowStartIndex: startRow && startRow.rowIndex,\n      rowStartPinned: startRow && startRow.rowPinned,\n      rowEndIndex: endRow && endRow.rowIndex,\n      rowEndPinned: endRow && endRow.rowPinned,\n      columns: cellRanges.reduce(\n        (columns, value) => columns.concat(value.columns.map((c) => c.getId())),\n        []\n      )\n    };\n  }\n  setCategoryAxisType(categoryAxisType) {\n    this.model.categoryAxisType = categoryAxisType;\n    this.raiseChartModelUpdateEvent();\n  }\n  getSeriesGroupType() {\n    return this.model.seriesGroupType ?? this.chartProxy.getSeriesGroupType();\n  }\n  setSeriesGroupType(seriesGroupType) {\n    this.model.seriesGroupType = seriesGroupType;\n    this.raiseChartModelUpdateEvent();\n  }\n  raiseChartModelUpdateEvent() {\n    this.dispatchLocalEvent({ type: \"chartModelUpdate\" });\n  }\n  raiseChartUpdatedEvent() {\n    this.dispatchLocalEvent({ type: \"chartUpdated\" });\n  }\n  raiseChartApiUpdateEvent() {\n    this.dispatchLocalEvent({ type: \"chartApiUpdate\" });\n  }\n  raiseChartOptionsChangedEvent() {\n    const { chartId, chartType } = this.getChartModel();\n    this.eventService.dispatchEvent({\n      type: \"chartOptionsChanged\",\n      chartId,\n      chartType,\n      chartThemeName: this.getChartThemeName(),\n      chartOptions: this.chartProxy.getChartThemeOverrides()\n    });\n  }\n  raiseChartRangeSelectionChangedEvent() {\n    this.eventService.dispatchEvent({\n      type: \"chartRangeSelectionChanged\",\n      id: this.model.chartId,\n      chartId: this.model.chartId,\n      cellRange: this.getCellRangeParams()\n    });\n  }\n  destroy() {\n    super.destroy();\n    if (this.rangeService) {\n      this.rangeService.setCellRanges([]);\n    }\n  }\n};\nfunction deproxy(chartOrProxy) {\n  if (chartOrProxy.chart != null) {\n    return chartOrProxy.chart;\n  }\n  return chartOrProxy;\n}\nvar ChartProxy = class {\n  constructor(chartProxyParams) {\n    this.chartProxyParams = chartProxyParams;\n    this.clearThemeOverrides = false;\n    this.isEnterpriseCharts = _ModuleSupport3.enterpriseModule.isEnterprise;\n    this.chart = chartProxyParams.chartInstance;\n    this.chartType = chartProxyParams.chartType;\n    this.crossFiltering = chartProxyParams.crossFiltering;\n    this.crossFilterCallback = chartProxyParams.crossFilterCallback;\n    this.standaloneChartType = getSeriesType(this.chartType);\n    if (this.chart == null) {\n      this.chart = AgCharts.create(this.getCommonChartOptions());\n    } else {\n      this.clearThemeOverrides = true;\n    }\n  }\n  crossFilteringReset() {\n  }\n  update(params) {\n    this.getChartRef().update(this.getUpdateOptions(params, this.getCommonChartOptions(params.updatedOverrides)));\n  }\n  updateThemeOverrides(themeOverrides) {\n    this.getChartRef().updateDelta({ theme: { overrides: themeOverrides } });\n  }\n  getChart() {\n    return deproxy(this.chart);\n  }\n  getChartRef() {\n    return this.chart;\n  }\n  downloadChart(dimensions, fileName, fileFormat) {\n    const { chart } = this;\n    const rawChart = deproxy(chart);\n    const imageFileName = fileName || (rawChart.title ? rawChart.title.text : \"chart\");\n    const { width, height } = dimensions || {};\n    chart.download({ width, height, fileName: imageFileName, fileFormat });\n  }\n  getChartImageDataURL(type) {\n    return this.getChart().getCanvasDataURL(type);\n  }\n  getChartOptions() {\n    return this.chart.getOptions();\n  }\n  getChartThemeOverrides() {\n    const chartOptionsTheme = this.getChartOptions().theme;\n    return chartOptionsTheme.overrides ?? {};\n  }\n  getChartPalette() {\n    return _Theme3.getChartTheme(this.getChartOptions().theme).palette;\n  }\n  setPaired(paired) {\n    const seriesType = getSeriesType(this.chartProxyParams.chartType);\n    this.chart.updateDelta({ theme: { overrides: { [seriesType]: { paired } } } });\n  }\n  isPaired() {\n    const seriesType = getSeriesType(this.chartProxyParams.chartType);\n    return get(this.getChartThemeOverrides(), `${seriesType}.paired`, true);\n  }\n  lookupCustomChartTheme(themeName) {\n    return lookupCustomChartTheme(this.chartProxyParams, themeName);\n  }\n  getSeriesGroupType() {\n    return void 0;\n  }\n  transformCategoryData(data, categoryKey) {\n    return data.map((d, index) => {\n      const value = d[categoryKey];\n      const valueString = value && value.toString ? value.toString() : \"\";\n      const datum = { ...d };\n      datum[categoryKey] = { id: index, value, toString: () => valueString };\n      return datum;\n    });\n  }\n  getCommonChartOptions(updatedOverrides) {\n    const existingOptions = this.clearThemeOverrides ? {} : this.chart?.getOptions() ?? {};\n    const formattingPanelOverrides = this.chart != null ? this.getActiveFormattingPanelOverrides() : void 0;\n    this.clearThemeOverrides = false;\n    const theme = createAgChartTheme(\n      this.chartProxyParams,\n      this,\n      this.isEnterpriseCharts,\n      this.getChartThemeDefaults(),\n      updatedOverrides ?? formattingPanelOverrides\n    );\n    const newOptions = {\n      ...existingOptions,\n      mode: \"integrated\"\n    };\n    newOptions.theme = theme;\n    newOptions.container = this.chartProxyParams.parentElement;\n    return newOptions;\n  }\n  getChartThemeDefaults() {\n    const seriesOverrides = this.getSeriesChartThemeDefaults();\n    const seriesChartOptions = seriesOverrides ? {\n      [this.standaloneChartType]: seriesOverrides\n    } : {};\n    const crosshair = {\n      enabled: true,\n      snap: true,\n      label: {\n        enabled: false\n      }\n    };\n    const common = this.isEnterpriseCharts ? {\n      zoom: {\n        enabled: true\n      },\n      animation: {\n        enabled: true,\n        duration: 500\n      },\n      axes: {\n        number: { crosshair },\n        category: { crosshair },\n        log: { crosshair },\n        time: { crosshair }\n      }\n    } : {};\n    common.minHeight = 0;\n    common.minWidth = 0;\n    common.navigator = {\n      enabled: false\n    };\n    return {\n      common,\n      ...seriesChartOptions\n    };\n  }\n  getSeriesChartThemeDefaults() {\n    return void 0;\n  }\n  getActiveFormattingPanelOverrides() {\n    if (this.clearThemeOverrides) {\n      return {};\n    }\n    const inUseTheme = this.chart?.getOptions().theme;\n    return inUseTheme?.overrides ?? {};\n  }\n  destroy({ keepChartInstance = false } = {}) {\n    if (keepChartInstance) {\n      this.chart.resetAnimations();\n      return this.chart;\n    }\n    this.destroyChart();\n  }\n  destroyChart() {\n    if (this.chart) {\n      this.chart.destroy();\n      this.chart = void 0;\n    }\n  }\n};\nvar CartesianChartProxy = class extends ChartProxy {\n  constructor(params) {\n    super(params);\n    this.crossFilteringAllPoints = /* @__PURE__ */ new Set();\n    this.crossFilteringSelectedPoints = [];\n  }\n  getUpdateOptions(params, commonChartOptions) {\n    const axes = this.getAxes(params, commonChartOptions);\n    return {\n      ...commonChartOptions,\n      data: this.getData(params, axes),\n      axes,\n      series: this.getSeries(params)\n    };\n  }\n  getData(params, axes) {\n    const supportsCrossFiltering = [\"area\", \"line\"].includes(this.standaloneChartType);\n    return this.crossFiltering && supportsCrossFiltering ? this.getCrossFilterData(params) : this.getDataTransformedData(params, axes);\n  }\n  getDataTransformedData(params, axes) {\n    const xAxisType = axes[0].type;\n    const { categories, data } = params;\n    const [category] = categories;\n    switch (xAxisType) {\n      case \"category\":\n        return this.transformCategoryData(data, category.id);\n      case \"time\":\n        return this.transformTimeData(data, category.id);\n      default:\n        return data;\n    }\n  }\n  getXAxisType(params) {\n    if (params.grouping) {\n      return \"grouped-category\";\n    } else if (this.isXAxisOfType(params, \"time\", (value) => value instanceof Date)) {\n      return \"time\";\n    } else if (this.isXAxisOfType(params, \"number\")) {\n      return \"number\";\n    }\n    return \"category\";\n  }\n  isXAxisOfType(params, type, isInstance) {\n    const [category] = params.categories;\n    if (category?.chartDataType) {\n      return category.chartDataType === type;\n    }\n    if (!isInstance) {\n      return false;\n    }\n    const testDatum = params.data[0];\n    if (!testDatum) {\n      return false;\n    }\n    return isInstance(testDatum[category.id]);\n  }\n  transformTimeData(data, categoryKey) {\n    const firstValue = data[0]?.[categoryKey];\n    if (firstValue instanceof Date) {\n      return data;\n    }\n    return data.map((datum) => {\n      const value = datum[categoryKey];\n      return typeof value === \"string\" ? {\n        ...datum,\n        [categoryKey]: new Date(value)\n      } : datum;\n    });\n  }\n  crossFilteringReset() {\n    this.crossFilteringSelectedPoints = [];\n    this.crossFilteringAllPoints.clear();\n  }\n  crossFilteringPointSelected(point) {\n    return this.crossFilteringSelectedPoints.length == 0 || this.crossFilteringSelectedPoints.includes(point);\n  }\n  crossFilteringDeselectedPoints() {\n    return this.crossFilteringSelectedPoints.length > 0 && this.crossFilteringAllPoints.size !== this.crossFilteringSelectedPoints.length;\n  }\n  extractLineAreaCrossFilterSeries(series, params) {\n    const [category] = params.categories;\n    const getYKey = (yKey) => {\n      if (this.standaloneChartType === \"area\") {\n        const lastSelectedChartId = params.getCrossFilteringContext().lastSelectedChartId;\n        return lastSelectedChartId === params.chartId ? yKey + \"-total\" : yKey;\n      }\n      return yKey + \"-total\";\n    };\n    return series.map((s) => {\n      s.yKey = getYKey(s.yKey);\n      s.listeners = {\n        nodeClick: (e) => {\n          const value = e.datum[s.xKey];\n          const multiSelection = e.event.metaKey || e.event.ctrlKey;\n          this.crossFilteringAddSelectedPoint(multiSelection, value);\n          this.crossFilterCallback(e);\n        }\n      };\n      s.marker = {\n        itemStyler: (p) => {\n          const value = p.datum[category.id];\n          return {\n            fill: p.highlighted ? \"yellow\" : p.fill,\n            size: p.highlighted ? 14 : this.crossFilteringPointSelected(value) ? 8 : 0\n          };\n        }\n      };\n      if (this.standaloneChartType === \"area\") {\n        s.fillOpacity = this.crossFilteringDeselectedPoints() ? 0.3 : 1;\n      }\n      if (this.standaloneChartType === \"line\") {\n        s.strokeOpacity = this.crossFilteringDeselectedPoints() ? 0.3 : 1;\n      }\n      return s;\n    });\n  }\n  getCrossFilterData(params) {\n    this.crossFilteringAllPoints.clear();\n    const [category] = params.categories;\n    const colId = params.fields[0].colId;\n    const filteredOutColId = `${colId}-filtered-out`;\n    const lastSelectedChartId = params.getCrossFilteringContext().lastSelectedChartId;\n    return params.data.map((d) => {\n      const value = d[category.id];\n      this.crossFilteringAllPoints.add(value);\n      const pointSelected = this.crossFilteringPointSelected(value);\n      if (this.standaloneChartType === \"area\" && lastSelectedChartId === params.chartId) {\n        d[`${colId}-total`] = pointSelected ? d[colId] : d[colId] + d[filteredOutColId];\n      }\n      if (this.standaloneChartType === \"line\") {\n        d[`${colId}-total`] = pointSelected ? d[colId] : d[colId] + d[filteredOutColId];\n      }\n      return d;\n    });\n  }\n  crossFilteringAddSelectedPoint(multiSelection, value) {\n    multiSelection ? this.crossFilteringSelectedPoints.push(value) : this.crossFilteringSelectedPoints = [value];\n  }\n  isHorizontal(commonChartOptions) {\n    const seriesType = this.standaloneChartType;\n    if (seriesType !== \"waterfall\" && seriesType !== \"box-plot\" && seriesType !== \"range-bar\") {\n      return false;\n    }\n    const theme = commonChartOptions.theme;\n    const isHorizontal = (theme2) => {\n      const direction = theme2?.overrides?.[seriesType]?.series?.direction;\n      if (direction != null) {\n        return direction === \"horizontal\";\n      }\n      if (typeof theme2?.baseTheme === \"object\") {\n        return isHorizontal(theme2.baseTheme);\n      }\n      return false;\n    };\n    return isHorizontal(theme);\n  }\n};\nvar AreaChartProxy = class extends CartesianChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getAxes(params) {\n    const axes = [\n      {\n        type: this.getXAxisType(params),\n        position: \"bottom\"\n      },\n      {\n        type: \"number\",\n        position: \"left\"\n      }\n    ];\n    if (this.isNormalised()) {\n      const numberAxis = axes[1];\n      numberAxis.label = { ...numberAxis.label, formatter: (params2) => Math.round(params2.value) + \"%\" };\n    }\n    return axes;\n  }\n  getSeries(params) {\n    const [category] = params.categories;\n    const series = params.fields.map(\n      (f) => ({\n        type: this.standaloneChartType,\n        xKey: category.id,\n        xName: category.name,\n        yKey: f.colId,\n        yName: f.displayName,\n        normalizedTo: this.chartType === \"normalizedArea\" ? 100 : void 0,\n        stacked: [\"normalizedArea\", \"stackedArea\"].includes(this.chartType)\n      })\n    );\n    return this.crossFiltering ? this.extractLineAreaCrossFilterSeries(series, params) : series;\n  }\n  isNormalised() {\n    return !this.crossFiltering && this.chartType === \"normalizedArea\";\n  }\n};\nfunction hexToRGBA(hex, alpha) {\n  const r = parseInt(hex.slice(1, 3), 16);\n  const g = parseInt(hex.slice(3, 5), 16);\n  const b = parseInt(hex.slice(5, 7), 16);\n  return alpha ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgba(${r}, ${g}, ${b})`;\n}\nfunction changeOpacity(fills, alpha) {\n  return fills.map((fill) => {\n    const c = _Util4.Color.fromString(fill);\n    return new _Util4.Color(c.r, c.g, c.b, alpha).toHexString();\n  });\n}\nvar HORIZONTAL_CHART_TYPES = /* @__PURE__ */ new Set([\"bar\", \"groupedBar\", \"stackedBar\", \"normalizedBar\"]);\nvar BarChartProxy = class extends CartesianChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getAxes(params) {\n    const axes = [\n      {\n        type: this.getXAxisType(params),\n        position: this.isHorizontal() ? \"left\" : \"bottom\"\n      },\n      {\n        type: \"number\",\n        position: this.isHorizontal() ? \"bottom\" : \"left\"\n      }\n    ];\n    if (this.isNormalised()) {\n      const numberAxis = axes[1];\n      numberAxis.label = { ...numberAxis.label, formatter: (params2) => Math.round(params2.value) + \"%\" };\n    }\n    return axes;\n  }\n  getSeries(params) {\n    const [category] = params.categories;\n    const series = params.fields.map(\n      (f) => ({\n        type: this.standaloneChartType,\n        direction: this.isHorizontal() ? \"horizontal\" : \"vertical\",\n        stacked: this.crossFiltering || isStacked(this.chartType),\n        normalizedTo: this.isNormalised() ? 100 : void 0,\n        xKey: category.id,\n        xName: category.name,\n        yKey: f.colId,\n        yName: f.displayName\n      })\n    );\n    return this.crossFiltering ? this.extractCrossFilterSeries(series) : series;\n  }\n  extractCrossFilterSeries(series) {\n    const palette = this.getChartPalette();\n    const updatePrimarySeries = (seriesOptions, index) => {\n      return {\n        ...seriesOptions,\n        highlightStyle: { item: { fill: void 0 } },\n        fill: palette?.fills?.[index],\n        stroke: palette?.strokes?.[index],\n        listeners: {\n          nodeClick: this.crossFilterCallback\n        }\n      };\n    };\n    const updateFilteredOutSeries = (seriesOptions) => {\n      const yKey = seriesOptions.yKey + \"-filtered-out\";\n      return {\n        ...seriesOptions,\n        yKey,\n        fill: hexToRGBA(seriesOptions.fill, \"0.3\"),\n        stroke: hexToRGBA(seriesOptions.stroke, \"0.3\"),\n        showInLegend: false\n      };\n    };\n    const allSeries = [];\n    for (let i = 0; i < series.length; i++) {\n      const originalSeries = series[i];\n      allSeries.push(updatePrimarySeries(originalSeries, i));\n      allSeries.push(updateFilteredOutSeries(updatePrimarySeries(originalSeries, i)));\n    }\n    return allSeries;\n  }\n  isNormalised() {\n    const normalisedCharts = [\"normalizedColumn\", \"normalizedBar\"];\n    return !this.crossFiltering && _includes5(normalisedCharts, this.chartType);\n  }\n  isHorizontal() {\n    return HORIZONTAL_CHART_TYPES.has(this.chartType);\n  }\n};\nvar HistogramChartProxy = class extends CartesianChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getSeries(params) {\n    const firstField = params.fields[0];\n    return [\n      {\n        type: this.standaloneChartType,\n        xKey: firstField.colId,\n        xName: firstField.displayName,\n        yName: this.chartProxyParams.translate(\"histogramFrequency\"),\n        areaPlot: false\n        // only constant width is supported via integrated charts\n      }\n    ];\n  }\n  getAxes(_params) {\n    return [\n      {\n        type: \"number\",\n        position: \"bottom\"\n      },\n      {\n        type: \"number\",\n        position: \"left\"\n      }\n    ];\n  }\n};\nvar LineChartProxy = class extends CartesianChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getAxes(params) {\n    return [\n      {\n        type: this.getXAxisType(params),\n        position: \"bottom\"\n      },\n      {\n        type: \"number\",\n        position: \"left\"\n      }\n    ];\n  }\n  getSeries(params) {\n    const [category] = params.categories;\n    const series = params.fields.map(\n      (f) => ({\n        type: this.standaloneChartType,\n        xKey: category.id,\n        xName: category.name,\n        yKey: f.colId,\n        yName: f.displayName\n      })\n    );\n    return this.crossFiltering ? this.extractLineAreaCrossFilterSeries(series, params) : series;\n  }\n};\nvar ScatterChartProxy = class extends CartesianChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getAxes(_params) {\n    return [\n      {\n        type: \"number\",\n        position: \"bottom\"\n      },\n      {\n        type: \"number\",\n        position: \"left\"\n      }\n    ];\n  }\n  getSeries(params) {\n    const [category] = params.categories;\n    const paired = this.isPaired();\n    const seriesDefinitions = this.getSeriesDefinitions(params.fields, paired);\n    const labelFieldDefinition = category.id === ChartDataModel.DEFAULT_CATEGORY ? void 0 : category;\n    const series = seriesDefinitions.map((seriesDefinition) => {\n      if (seriesDefinition?.sizeField) {\n        const opts2 = {\n          type: \"bubble\",\n          xKey: seriesDefinition.xField.colId,\n          xName: seriesDefinition.xField.displayName ?? void 0,\n          yKey: seriesDefinition.yField.colId,\n          yName: seriesDefinition.yField.displayName ?? void 0,\n          title: `${seriesDefinition.yField.displayName} vs ${seriesDefinition.xField.displayName}`,\n          sizeKey: seriesDefinition.sizeField.colId,\n          sizeName: seriesDefinition.sizeField.displayName ?? \"\",\n          labelKey: labelFieldDefinition ? labelFieldDefinition.id : seriesDefinition.yField.colId,\n          labelName: labelFieldDefinition ? labelFieldDefinition.name : void 0\n        };\n        return opts2;\n      }\n      const opts = {\n        type: \"scatter\",\n        xKey: seriesDefinition.xField.colId,\n        xName: seriesDefinition.xField.displayName ?? void 0,\n        yKey: seriesDefinition.yField.colId,\n        yName: seriesDefinition.yField.displayName ?? void 0,\n        title: `${seriesDefinition.yField.displayName} vs ${seriesDefinition.xField.displayName}`,\n        labelKey: labelFieldDefinition ? labelFieldDefinition.id : seriesDefinition.yField.colId,\n        labelName: labelFieldDefinition ? labelFieldDefinition.name : void 0\n      };\n      return opts;\n    });\n    return this.crossFiltering ? this.extractCrossFilterSeries(series, params) : series;\n  }\n  extractCrossFilterSeries(series, params) {\n    const { data } = params;\n    const palette = this.getChartPalette();\n    const filteredOutKey = (key) => `${key}-filtered-out`;\n    const calcMarkerDomain = (data2, sizeKey) => {\n      const markerDomain = [Infinity, -Infinity];\n      if (sizeKey != null) {\n        for (const datum of data2) {\n          const value = datum[sizeKey] ?? datum[filteredOutKey(sizeKey)];\n          if (value < markerDomain[0]) {\n            markerDomain[0] = value;\n          }\n          if (value > markerDomain[1]) {\n            markerDomain[1] = value;\n          }\n        }\n      }\n      if (markerDomain[0] <= markerDomain[1]) {\n        return markerDomain;\n      }\n      return void 0;\n    };\n    const updatePrimarySeries = (series2, idx) => {\n      const fill = palette?.fills?.[idx];\n      const stroke = palette?.strokes?.[idx];\n      let markerDomain = void 0;\n      if (series2.type === \"bubble\") {\n        const { sizeKey } = series2;\n        markerDomain = calcMarkerDomain(data, sizeKey);\n      }\n      return {\n        ...series2,\n        fill,\n        stroke,\n        domain: markerDomain,\n        highlightStyle: { item: { fill: \"yellow\" } },\n        listeners: {\n          ...series2.listeners,\n          nodeClick: this.crossFilterCallback\n        }\n      };\n    };\n    const updateFilteredOutSeries = (series2) => {\n      const { yKey, xKey } = series2;\n      let alteredSizeKey = {};\n      if (series2.type === \"bubble\") {\n        alteredSizeKey = { sizeKey: filteredOutKey(series2.sizeKey) };\n      }\n      return {\n        ...series2,\n        ...alteredSizeKey,\n        yKey: filteredOutKey(yKey),\n        xKey: filteredOutKey(xKey),\n        fillOpacity: 0.3,\n        strokeOpacity: 0.3,\n        showInLegend: false,\n        listeners: {\n          ...series2.listeners,\n          nodeClick: (e) => {\n            const value = e.datum[filteredOutKey(xKey)];\n            const filterableEvent = {\n              ...e,\n              xKey,\n              datum: { ...e.datum, [xKey]: value }\n            };\n            this.crossFilterCallback(filterableEvent);\n          }\n        }\n      };\n    };\n    const updatedSeries = series.map(updatePrimarySeries);\n    return [...updatedSeries, ...updatedSeries.map(updateFilteredOutSeries)];\n  }\n  getSeriesDefinitions(fields, paired) {\n    if (fields.length < 2) {\n      return [];\n    }\n    const isBubbleChart = this.chartType === \"bubble\";\n    if (paired) {\n      if (isBubbleChart) {\n        return fields.map(\n          (currentXField, i) => i % 3 === 0 ? {\n            xField: currentXField,\n            yField: fields[i + 1],\n            sizeField: fields[i + 2]\n          } : null\n        ).filter((x) => x && x.yField && x.sizeField);\n      }\n      return fields.map(\n        (currentXField, i) => i % 2 === 0 ? {\n          xField: currentXField,\n          yField: fields[i + 1]\n        } : null\n      ).filter((x) => x && x.yField);\n    }\n    const xField = fields[0];\n    if (isBubbleChart) {\n      return fields.map(\n        (yField, i) => i % 2 === 1 ? {\n          xField,\n          yField,\n          sizeField: fields[i + 1]\n        } : null\n      ).filter((x) => x && x.sizeField);\n    }\n    return fields.filter((value, i) => i > 0).map((yField) => ({ xField, yField }));\n  }\n};\nvar WaterfallChartProxy = class extends CartesianChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getAxes(params, commonChartOptions) {\n    return [\n      {\n        type: this.getXAxisType(params),\n        position: this.isHorizontal(commonChartOptions) ? \"left\" : \"bottom\"\n      },\n      {\n        type: \"number\",\n        position: this.isHorizontal(commonChartOptions) ? \"bottom\" : \"left\"\n      }\n    ];\n  }\n  getSeries(params) {\n    const [category] = params.categories;\n    const [firstField] = params.fields;\n    const firstSeries = {\n      type: this.standaloneChartType,\n      xKey: category.id,\n      xName: category.name,\n      yKey: firstField.colId,\n      yName: firstField.displayName ?? void 0\n    };\n    return [firstSeries];\n  }\n};\nvar ComboChartProxy = class extends CartesianChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getAxes(params) {\n    const fields = params ? params.fields : [];\n    const fieldsMap = new Map(fields.map((f) => [f.colId, f]));\n    const { primaryYKeys, secondaryYKeys } = this.getYKeys(fields, params.seriesChartTypes);\n    const axes = [\n      {\n        type: this.getXAxisType(params),\n        position: \"bottom\"\n      }\n    ];\n    if (primaryYKeys.length > 0) {\n      axes.push({\n        type: \"number\",\n        keys: primaryYKeys,\n        position: \"left\"\n      });\n    }\n    if (secondaryYKeys.length > 0) {\n      secondaryYKeys.forEach((secondaryYKey) => {\n        const field = fieldsMap.get(secondaryYKey);\n        const secondaryAxisIsVisible = field && field.colId === secondaryYKey;\n        if (!secondaryAxisIsVisible) {\n          return;\n        }\n        const secondaryAxisOptions = {\n          type: \"number\",\n          keys: [secondaryYKey],\n          position: \"right\"\n        };\n        axes.push(secondaryAxisOptions);\n      });\n    }\n    return axes;\n  }\n  getSeries(params) {\n    const { fields, seriesChartTypes } = params;\n    const [category] = params.categories;\n    return fields.map((field) => {\n      const seriesChartType = seriesChartTypes.find((s) => s.colId === field.colId);\n      if (seriesChartType) {\n        const chartType = seriesChartType.chartType;\n        const grouped = [\"groupedColumn\", \"groupedBar\"].includes(chartType);\n        const groupedOpts = grouped ? { grouped: true } : {};\n        return {\n          type: getSeriesType(chartType),\n          xKey: category.id,\n          yKey: field.colId,\n          yName: field.displayName,\n          stacked: [\"stackedArea\", \"stackedColumn\"].includes(chartType),\n          ...groupedOpts\n        };\n      }\n    });\n  }\n  getYKeys(fields, seriesChartTypes) {\n    const primaryYKeys = [];\n    const secondaryYKeys = [];\n    fields.forEach((field) => {\n      const colId = field.colId;\n      const seriesChartType = seriesChartTypes.find((s) => s.colId === colId);\n      if (seriesChartType) {\n        seriesChartType.secondaryAxis ? secondaryYKeys.push(colId) : primaryYKeys.push(colId);\n      }\n    });\n    return { primaryYKeys, secondaryYKeys };\n  }\n};\nvar CATEGORY_LABEL_KEY = \"AG-GRID-DEFAULT-LABEL-KEY\";\nfunction createCategoryHierarchy(data, categoryKeys) {\n  const hierarchy = buildNestedHierarchy(data, getItemDepth, getItemCategoryLabel);\n  return formatCategoryHierarchy(hierarchy);\n  function getItemDepth(item) {\n    return categoryKeys.length;\n  }\n  function getItemCategoryLabel(item, categoryIndex) {\n    const categoryKey = categoryKeys[categoryIndex];\n    const categoryValue = item[categoryKey];\n    return getCategoryLabel(categoryValue);\n  }\n  function getCategoryLabel(value) {\n    if (value == null)\n      return null;\n    return String(value);\n  }\n}\nfunction createAutoGroupHierarchy(data, getItemLabels) {\n  const hierarchy = buildNestedHierarchy(data, getItemDepth, getItemGroupLabel);\n  return formatCategoryHierarchy(hierarchy);\n  function getItemDepth(item) {\n    return getItemLabels(item)?.length ?? 0;\n  }\n  function getItemGroupLabel(item, groupIndex) {\n    const labels2 = getItemLabels(item);\n    if (!labels2)\n      return null;\n    const labelIndex = labels2.length - 1 - groupIndex;\n    return labels2[labelIndex];\n  }\n}\nfunction formatCategoryHierarchy(hierarchy, key = null, isChild) {\n  const { depth, rootValues, value, children: inputChildren } = hierarchy;\n  if (rootValues) {\n    return rootValues.map((item) => ({ [CATEGORY_LABEL_KEY]: key, ...item }));\n  } else if (depth === 0) {\n    return [{ [CATEGORY_LABEL_KEY]: key, ...value }];\n  }\n  const children = [];\n  for (const [childKey, childHierarchy] of inputChildren.entries()) {\n    children.push(...formatCategoryHierarchy(childHierarchy, childKey, true));\n  }\n  return isChild ? [\n    {\n      [CATEGORY_LABEL_KEY]: key,\n      children,\n      ...value ?? {}\n    }\n  ] : children;\n}\nfunction buildNestedHierarchy(data, getItemDepth, getItemGroupKey) {\n  const hierarchy = { depth: 0, children: /* @__PURE__ */ new Map() };\n  data.forEach((item) => {\n    const itemDepth = getItemDepth(item);\n    createNestedItemHierarchy(item, itemDepth, getItemGroupKey, 0, hierarchy);\n  });\n  return hierarchy;\n  function createNestedItemHierarchy(item, itemDepth, getItemGroupKey2, currentDepth, hierarchy2) {\n    if (currentDepth === itemDepth) {\n      if (currentDepth === 0) {\n        if (!hierarchy2.rootValues) {\n          hierarchy2.rootValues = [];\n        }\n        hierarchy2.rootValues.push(item);\n      } else {\n        hierarchy2.value = item;\n      }\n      return hierarchy2;\n    } else {\n      const key = getItemGroupKey2(item, currentDepth);\n      const existingChildHierarchy = hierarchy2.children.get(key);\n      const childHierarchy = createNestedItemHierarchy(\n        item,\n        itemDepth,\n        getItemGroupKey2,\n        currentDepth + 1,\n        existingChildHierarchy || { depth: 0, children: /* @__PURE__ */ new Map() }\n      );\n      hierarchy2.children.set(key, childHierarchy);\n      hierarchy2.depth = Math.max(1 + childHierarchy.depth, hierarchy2.depth);\n      return hierarchy2;\n    }\n  }\n}\nvar HierarchicalChartProxy = class extends ChartProxy {\n  constructor(chartProxyParams) {\n    super(chartProxyParams);\n  }\n  getUpdateOptions(params, commonChartOptions) {\n    const { fields } = params;\n    const [sizeField, colorField] = fields;\n    return {\n      ...commonChartOptions,\n      series: this.getSeries(sizeField, colorField),\n      data: this.getData(params, sizeField, colorField)\n    };\n  }\n  getSeriesChartThemeDefaults() {\n    return {\n      gradientLegend: {\n        gradient: {\n          preferredLength: 200\n        }\n      }\n    };\n  }\n  getSeries(sizeField, colorField) {\n    return [\n      {\n        type: this.standaloneChartType,\n        labelKey: CATEGORY_LABEL_KEY,\n        // Size and color fields are inferred from the range data\n        sizeKey: sizeField?.colId,\n        sizeName: sizeField?.displayName ?? void 0,\n        colorKey: colorField?.colId,\n        colorName: colorField?.displayName ?? void 0\n      }\n    ];\n  }\n  getData(params, sizeField, colorField) {\n    const { categories, data, groupData, grouping: isGrouped } = params;\n    if (isGrouped) {\n      const processedData = colorField ? data.concat(\n        groupData?.map((groupDatum) => {\n          const newDatum = { ...groupDatum };\n          delete newDatum[sizeField.colId];\n          return newDatum;\n        }) ?? []\n      ) : data;\n      return createAutoGroupHierarchy(processedData, (item) => item[GROUP_AUTO_COLUMN_ID]?.labels ?? null);\n    } else {\n      const categoryKeys = categories.map(({ id }) => id);\n      return createCategoryHierarchy(data, categoryKeys);\n    }\n  }\n};\nfunction calculateOffsets(offset) {\n  const outerRadiusOffset = offset.currentOffset;\n  offset.currentOffset -= offset.offsetAmount;\n  const innerRadiusOffset = offset.currentOffset;\n  offset.currentOffset -= offset.offsetAmount;\n  return { outerRadiusOffset, innerRadiusOffset };\n}\nvar PieChartProxy = class extends ChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getUpdateOptions(params, commonChartOptions) {\n    return {\n      ...commonChartOptions,\n      data: this.crossFiltering ? this.getCrossFilterData(params) : params.data,\n      series: this.getSeries(params)\n    };\n  }\n  getSeries(params) {\n    const [category] = params.categories;\n    const numFields = params.fields.length;\n    const offset = {\n      currentOffset: 0,\n      offsetAmount: numFields > 1 ? 20 : 40\n    };\n    const series = this.getFields(params).map(\n      (f) => {\n        const options = {\n          type: this.standaloneChartType,\n          angleKey: f.colId,\n          angleName: f.displayName,\n          sectorLabelKey: f.colId,\n          calloutLabelName: category.name,\n          calloutLabelKey: category.id\n        };\n        if (this.chartType === \"donut\" || this.chartType === \"doughnut\") {\n          const { outerRadiusOffset, innerRadiusOffset } = calculateOffsets(offset);\n          const title = f.displayName ? {\n            title: { text: f.displayName, showInLegend: numFields > 1 }\n          } : void 0;\n          return {\n            ...options,\n            type: \"donut\",\n            outerRadiusOffset,\n            innerRadiusOffset,\n            ...title,\n            calloutLine: {\n              colors: this.getChartPalette()?.strokes\n            }\n          };\n        }\n        return options;\n      }\n    );\n    return this.crossFiltering ? this.extractCrossFilterSeries(series) : series;\n  }\n  getCrossFilterData(params) {\n    const colId = params.fields[0].colId;\n    const filteredOutColId = `${colId}-filtered-out`;\n    return params.data.map((d) => {\n      const total = d[colId] + d[filteredOutColId];\n      d[`${colId}-total`] = total;\n      d[filteredOutColId] = 1;\n      d[colId] = d[colId] / total;\n      return d;\n    });\n  }\n  extractCrossFilterSeries(series) {\n    const palette = this.getChartPalette();\n    const primaryOptions = (seriesOptions) => {\n      return {\n        ...seriesOptions,\n        legendItemKey: seriesOptions.calloutLabelKey,\n        calloutLabel: { enabled: false },\n        // hide labels on primary series\n        highlightStyle: { item: { fill: void 0 } },\n        radiusKey: seriesOptions.angleKey,\n        angleKey: seriesOptions.angleKey + \"-total\",\n        radiusMin: 0,\n        radiusMax: 1,\n        listeners: {\n          nodeClick: this.crossFilterCallback\n        }\n      };\n    };\n    const filteredOutOptions = (seriesOptions, angleKey2) => {\n      return {\n        ...primaryOpts,\n        radiusKey: angleKey2 + \"-filtered-out\",\n        fills: changeOpacity(seriesOptions.fills ?? palette?.fills ?? [], 0.3),\n        strokes: changeOpacity(seriesOptions.strokes ?? palette?.strokes ?? [], 0.3),\n        showInLegend: false\n      };\n    };\n    const primarySeries = series[0];\n    const angleKey = primarySeries.angleKey;\n    const primaryOpts = primaryOptions(primarySeries);\n    return [filteredOutOptions(primaryOptions(primarySeries), angleKey), primaryOpts];\n  }\n  getFields(params) {\n    return this.chartType === \"pie\" ? params.fields.slice(0, 1) : params.fields;\n  }\n};\nvar PolarChartProxy = class extends ChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getAxes(_) {\n    const radialBar = this.standaloneChartType === \"radial-bar\";\n    return [\n      { type: radialBar ? \"angle-number\" : \"angle-category\" },\n      { type: radialBar ? \"radius-category\" : \"radius-number\" }\n    ];\n  }\n  getSeries(params) {\n    const { fields, categories, seriesGroupType } = params;\n    const [category] = categories;\n    const radialBar = this.standaloneChartType === \"radial-bar\";\n    const seriesGroupTypeOptions = this.getSeriesGroupTypeOptions(seriesGroupType);\n    return fields.map((f) => ({\n      type: this.standaloneChartType,\n      angleKey: radialBar ? f.colId : category.id,\n      angleName: radialBar ? f.displayName ?? void 0 : category.name,\n      radiusKey: radialBar ? category.id : f.colId,\n      radiusName: radialBar ? category.name : f.displayName ?? void 0,\n      ...seriesGroupTypeOptions\n    }));\n  }\n  getSeriesGroupType() {\n    const standaloneChartType = this.standaloneChartType;\n    if (![\"nightingale\", \"radial-bar\", \"radial-column\"].includes(standaloneChartType)) {\n      return void 0;\n    }\n    const firstSeriesProperties = this.getChart().series?.[0]?.properties.toJson();\n    const getStackedValue = () => firstSeriesProperties.normalizedTo ? \"normalized\" : \"stacked\";\n    if (standaloneChartType === \"nightingale\") {\n      return firstSeriesProperties.grouped ? \"grouped\" : getStackedValue();\n    } else {\n      return firstSeriesProperties.stacked ? getStackedValue() : \"grouped\";\n    }\n  }\n  getUpdateOptions(params, commonChartOptions) {\n    const axes = this.getAxes(params);\n    return {\n      ...commonChartOptions,\n      data: this.getData(params, axes),\n      axes,\n      series: this.getSeries(params)\n    };\n  }\n  getData(params, axes) {\n    const isCategoryAxis = axes.some((axis) => axis.type === \"angle-category\" || axis.type === \"radius-category\");\n    if (isCategoryAxis) {\n      const [category] = params.categories;\n      return this.transformCategoryData(params.data, category.id);\n    } else {\n      return params.data;\n    }\n  }\n  getSeriesGroupTypeOptions(seriesGroupType) {\n    if (!seriesGroupType) {\n      return {};\n    }\n    return {\n      grouped: seriesGroupType === \"grouped\" || void 0,\n      stacked: seriesGroupType !== \"grouped\" || void 0,\n      normalizedTo: seriesGroupType === \"normalized\" ? 100 : void 0\n    };\n  }\n};\nfunction flatMap(items, iteratee) {\n  return items.reduce((acc, item, index, array) => acc.concat(iteratee(item, index, array)), new Array());\n}\nvar HEATMAP_CATEGORY_KEY = \"AG-GRID-DEFAULT-HEATMAP-CATEGORY-KEY\";\nvar HEATMAP_SERIES_KEY = \"AG-GRID-DEFAULT-HEATMAP-SERIES-KEY\";\nvar HEATMAP_VALUE_KEY = \"AG-GRID-DEFAULT-HEATMAP-VALUE-KEY\";\nvar HeatmapChartProxy = class extends ChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getUpdateOptions(params, commonChartOptions) {\n    const xSeriesKey = HEATMAP_SERIES_KEY;\n    const xValueKey = HEATMAP_VALUE_KEY;\n    const yKey = HEATMAP_CATEGORY_KEY;\n    return {\n      ...commonChartOptions,\n      series: this.getSeries(params, xSeriesKey, xValueKey, yKey),\n      data: this.getData(params, xSeriesKey, xValueKey, yKey)\n    };\n  }\n  getSeries(params, xSeriesKey, xValueKey, yKey) {\n    const [category] = params.categories;\n    return [\n      {\n        type: this.standaloneChartType,\n        // The axis keys reference synthetic fields based on the category values and series column names\n        yKey,\n        xKey: xSeriesKey,\n        // The color key references a synthetic field based on the series column value for a specific cell\n        colorKey: xValueKey,\n        yName: category.name,\n        // We don't know how to label the 'x' series, as it is a synthetic series created from the set of all input columns\n        // In future releases we may want to consider inferring the series label from column groupings etc\n        xName: void 0,\n        colorName: void 0\n      }\n    ];\n  }\n  getData(params, xSeriesKey, xValueKey, yKey) {\n    const [category] = params.categories;\n    return flatMap(params.data, (datum, index) => {\n      const value = datum[category.id];\n      const valueString = value == null ? \"\" : String(value);\n      const yValue = { id: index, value, toString: () => valueString };\n      return params.fields.map(({ colId, displayName }) => ({\n        ...datum,\n        [xSeriesKey]: displayName,\n        [xValueKey]: datum[colId],\n        [yKey]: yValue\n      }));\n    });\n  }\n  getSeriesChartThemeDefaults() {\n    return {\n      gradientLegend: {\n        gradient: {\n          preferredLength: 200\n        }\n      },\n      series: {\n        tooltip: {\n          renderer: renderHeatmapTooltip\n        }\n      }\n    };\n  }\n};\nfunction renderHeatmapTooltip(params) {\n  const { xKey, yKey, colorKey, yName, datum } = params;\n  const table = [\n    { label: yName, value: datum[yKey] },\n    { label: datum[xKey], value: colorKey && datum[colorKey] }\n  ];\n  const html = table.map(({ label, value }) => `<b>${sanitizeHtml(String(label))}:</b> ${sanitizeHtml(String(value))}`).join(\"<br>\");\n  return {\n    title: \"\",\n    content: html\n  };\n}\nfunction sanitizeHtml(input) {\n  const ESCAPED_CHARS = {\n    \"&\": \"&amp;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\"\n  };\n  const characterClass = `[${Object.keys(ESCAPED_CHARS).join(\"\")}]`;\n  const pattern = new RegExp(characterClass, \"g\");\n  return input.replace(pattern, (char) => ESCAPED_CHARS[char]);\n}\nvar StatisticalChartProxy = class extends CartesianChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getAxes(params, commonChartOptions) {\n    return [\n      {\n        type: this.getXAxisType(params),\n        position: this.isHorizontal(commonChartOptions) ? \"left\" : \"bottom\"\n      },\n      {\n        type: \"number\",\n        position: this.isHorizontal(commonChartOptions) ? \"bottom\" : \"left\"\n      }\n    ];\n  }\n  computeSeriesStatistics(params, computeStatsFn) {\n    const { data, fields } = params;\n    const [category] = params.categories;\n    const categoryKey = category.id || ChartDataModel.DEFAULT_CATEGORY;\n    const groupedData = this.groupDataByCategory(categoryKey, data);\n    return Array.from(groupedData).map(([categoryValue, categoryData]) => {\n      const categoryResult = { [category.id]: categoryValue };\n      fields.forEach((field, seriesIndex) => {\n        const seriesValues = categoryData.map((datum) => datum[field.colId]).filter((value) => typeof value === \"number\" && !isNaN(value));\n        Object.entries(computeStatsFn(seriesValues)).forEach(([statKey, value]) => {\n          const propertyKey = `${statKey}:${seriesIndex}`;\n          categoryResult[propertyKey] = seriesValues.length > 0 ? value : null;\n        });\n      });\n      return categoryResult;\n    });\n  }\n  groupDataByCategory(categoryKey, data) {\n    const getCategory = (datum) => {\n      if (categoryKey === ChartDataModel.DEFAULT_CATEGORY) {\n        return 1;\n      }\n      const categoryValue = datum[categoryKey];\n      if (categoryValue === null || categoryValue === void 0) {\n        return \"\";\n      }\n      return categoryValue instanceof Date ? categoryValue.getTime() : categoryValue;\n    };\n    return data.reduce((acc, datum) => {\n      const category = getCategory(datum);\n      const existingCategoryData = acc.get(category);\n      if (existingCategoryData) {\n        existingCategoryData.push(datum);\n      } else {\n        acc.set(category, [datum]);\n      }\n      return acc;\n    }, /* @__PURE__ */ new Map());\n  }\n};\nvar BoxPlotChartProxy = class extends StatisticalChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getSeries(params) {\n    const [category] = params.categories;\n    return params.fields.map((field, seriesIndex) => ({\n      type: this.standaloneChartType,\n      // xKey/xName refer to category buckets\n      xKey: category.id,\n      xName: category.name,\n      // yName is used to label the series\n      yName: field.displayName ?? void 0,\n      // custom field labels shown in the tooltip\n      minName: \"Min\",\n      q1Name: \"Q1\",\n      medianName: \"Median\",\n      q3Name: \"Q3\",\n      maxName: \"Max\",\n      // generated 'synthetic fields' from getData()\n      minKey: `min:${seriesIndex}`,\n      q1Key: `q1:${seriesIndex}`,\n      medianKey: `median:${seriesIndex}`,\n      q3Key: `q3:${seriesIndex}`,\n      maxKey: `max:${seriesIndex}`\n    }));\n  }\n  getData(params) {\n    return this.computeSeriesStatistics(params, (seriesValues) => {\n      const sortedValues = seriesValues.sort((a, b) => a - b);\n      return {\n        min: sortedValues[0],\n        q1: this.quantile(sortedValues, 0.25),\n        median: this.quantile(sortedValues, 0.5),\n        q3: this.quantile(sortedValues, 0.75),\n        max: sortedValues[sortedValues.length - 1]\n      };\n    });\n  }\n  quantile(sortedValues, q) {\n    const position = (sortedValues.length - 1) * q;\n    const indexBelow = Math.floor(position);\n    const aboveValue = position - indexBelow;\n    if (sortedValues[indexBelow + 1] !== void 0) {\n      return sortedValues[indexBelow] + aboveValue * (sortedValues[indexBelow + 1] - sortedValues[indexBelow]);\n    }\n    return sortedValues[indexBelow];\n  }\n};\nvar RangeChartProxy = class extends StatisticalChartProxy {\n  constructor(params) {\n    super(params);\n  }\n  getSeries(params) {\n    const [category] = params.categories;\n    return params.fields.map((field, seriesIndex) => ({\n      type: this.standaloneChartType,\n      // xKey/xName refer to category buckets\n      xKey: category.id,\n      xName: category.name,\n      // yName is used to label the series\n      yName: field.displayName ?? void 0,\n      // custom field labels shown in the tooltip\n      yLowName: \"Min\",\n      yHighName: \"Max\",\n      // generated 'synthetic fields' from getData()\n      yLowKey: `min:${seriesIndex}`,\n      yHighKey: `max:${seriesIndex}`\n    }));\n  }\n  getData(params) {\n    return this.computeSeriesStatistics(params, (seriesValues) => {\n      return {\n        min: Math.min(...seriesValues),\n        max: Math.max(...seriesValues)\n      };\n    });\n  }\n};\nvar ChartToolbar = class extends Component83 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-chart-menu\" data-ref=\"eMenu\"></div>`\n    );\n    this.eMenu = RefPlaceholder63;\n    this.buttonListenersDestroyFuncs = [];\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  updateParams(params) {\n    const { buttons } = params;\n    this.createButtons(buttons);\n  }\n  createButtons(buttons) {\n    this.buttonListenersDestroyFuncs.forEach((func) => func?.());\n    this.buttonListenersDestroyFuncs = [];\n    const menuEl = this.eMenu;\n    _clearElement6(menuEl);\n    buttons.forEach((buttonConfig) => {\n      const { buttonName, iconName, callback } = buttonConfig;\n      const buttonEl = this.createButton(iconName);\n      const tooltipTitle = this.chartTranslationService.translate(\n        buttonName + \"ToolbarTooltip\"\n      );\n      if (tooltipTitle && buttonEl instanceof HTMLElement) {\n        buttonEl.title = tooltipTitle;\n      }\n      this.buttonListenersDestroyFuncs.push(\n        ...this.addManagedElementListeners(buttonEl, {\n          click: (event) => callback(event.currentTarget)\n        })\n      );\n      menuEl.appendChild(buttonEl);\n    });\n  }\n  createButton(iconName) {\n    const buttonEl = _createIconNoSpan23(iconName, this.gos, void 0, true);\n    buttonEl.classList.add(\"ag-chart-menu-icon\");\n    const wrapperEl = _getDocument22(this.gos).createElement(\"button\");\n    wrapperEl.appendChild(buttonEl);\n    wrapperEl.classList.add(\"ag-chart-menu-toolbar-button\");\n    return wrapperEl;\n  }\n  destroy() {\n    this.buttonListenersDestroyFuncs = [];\n    super.destroy();\n  }\n};\nvar AgPillSelect = class extends Component93 {\n  constructor(config) {\n    super(\n      /* html */\n      `<div class=\"ag-pill-select\" role=\"presentation\"></div>`\n    );\n    this.config = config ?? {};\n    const { selectedValueList, valueFormatter, valueList } = this.config;\n    this.selectedValues = selectedValueList ?? [];\n    this.valueList = valueList ?? [];\n    this.valueFormatter = valueFormatter ?? ((value) => _escapeString5(value));\n  }\n  postConstruct() {\n    const { ariaLabel, onValuesChange, dragSourceId } = this.config;\n    this.dropZonePanel = this.createManagedBean(\n      new PillSelectDropZonePanel(\n        {\n          getValues: () => this.selectedValues,\n          setValues: (values) => this.updateValues(values),\n          isDraggable: () => this.selectedValues.length > 1\n        },\n        (value) => this.valueFormatter(value),\n        ariaLabel,\n        dragSourceId\n      )\n    );\n    const eGui = this.getGui();\n    eGui.appendChild(this.dropZonePanel.getGui());\n    this.initSelect();\n    if (onValuesChange != null) {\n      this.onValuesChange = onValuesChange;\n    }\n  }\n  setValues(valueList, selectedValues) {\n    const { added, removed, updated } = this.getChanges(this.valueList, valueList);\n    let refreshSelect = false;\n    if (added.length || removed.length || updated.length) {\n      refreshSelect = true;\n    }\n    this.valueList = valueList;\n    this.updateValues(selectedValues, refreshSelect, true);\n    return this;\n  }\n  setValueFormatter(valueFormatter) {\n    this.valueFormatter = valueFormatter;\n    return this;\n  }\n  initSelect() {\n    const options = this.createSelectOptions();\n    if (!options.length) {\n      return false;\n    }\n    const { selectPlaceholder: placeholder } = this.config;\n    this.eSelect = this.createBean(\n      new AgSelect({\n        options,\n        placeholder,\n        onValueChange: (value) => this.addValue(value),\n        pickerIcon: \"chartsMenuAdd\"\n      })\n    );\n    this.getGui().appendChild(this.eSelect.getGui());\n    return true;\n  }\n  createSelectOptions() {\n    const options = [];\n    const { maxSelection } = this.config;\n    if (maxSelection && this.selectedValues.length >= maxSelection) {\n      return options;\n    }\n    this.valueList.forEach((value) => {\n      if (!this.selectedValues.includes(value)) {\n        options.push({ value, text: this.valueFormatter(value) });\n      }\n    });\n    return options;\n  }\n  addValue(value) {\n    this.dropZonePanel.addItem(value);\n  }\n  updateValues(values, forceRefreshSelect, silent) {\n    const previousSelectedValues = this.selectedValues;\n    this.selectedValues = values;\n    const changes = this.getChanges(previousSelectedValues, values);\n    const refreshSelect = forceRefreshSelect || changes.added.length || changes.removed.length;\n    const activeElement = _getActiveDomElement7(this.gos);\n    const selectHasFocus = this.eSelect?.getGui().contains(activeElement);\n    const dropZoneHasFocus = this.dropZonePanel?.getGui().contains(activeElement);\n    if (!silent) {\n      this.onValuesChange?.(changes);\n    }\n    const emptyRefreshedSelect = refreshSelect ? !this.refreshSelect() : false;\n    this.dropZonePanel.refreshGui();\n    if (refreshSelect && selectHasFocus) {\n      if (emptyRefreshedSelect) {\n        this.dropZonePanel.focusList(true);\n      } else {\n        this.eSelect?.getFocusableElement().focus();\n      }\n    }\n    if (dropZoneHasFocus && !values.length) {\n      this.eSelect?.getFocusableElement().focus();\n    }\n  }\n  getChanges(previousSelectedValues, newSelectedValues) {\n    const added = newSelectedValues.filter((value) => !previousSelectedValues.includes(value));\n    const removed = previousSelectedValues.filter((value) => !newSelectedValues.includes(value));\n    const updated = newSelectedValues.filter((value, index) => previousSelectedValues[index] !== value);\n    return { added, removed, updated, selected: newSelectedValues };\n  }\n  refreshSelect() {\n    if (!this.eSelect) {\n      return this.initSelect();\n    }\n    const options = this.createSelectOptions();\n    if (!options.length) {\n      _removeFromParent22(this.eSelect.getGui());\n      this.eSelect = this.destroyBean(this.eSelect);\n      return false;\n    }\n    this.eSelect.clearOptions().addOptions(options).setValue(void 0, true);\n    return true;\n  }\n  destroy() {\n    this.destroyBean(this.eSelect);\n    super.destroy();\n  }\n};\nvar PillSelectDragComp = class extends PillDragComp {\n  constructor(value, dragSourceDropTarget, ghost, valueFormatter, draggable, sourceId) {\n    super(dragSourceDropTarget, ghost, false);\n    this.value = value;\n    this.valueFormatter = valueFormatter;\n    this.draggable = draggable;\n    this.sourceId = sourceId;\n  }\n  getItem() {\n    return this.value;\n  }\n  getDisplayName() {\n    return this.valueFormatter(this.value);\n  }\n  getAriaDisplayName() {\n    return this.getDisplayName();\n  }\n  getTooltip() {\n    return void 0;\n  }\n  createGetDragItem() {\n    return () => ({\n      value: this.value\n    });\n  }\n  getDragSourceType() {\n    return DragSourceType3.ChartPanel;\n  }\n  getDragSourceId() {\n    return this.sourceId;\n  }\n  isDraggable() {\n    return this.draggable;\n  }\n};\nvar PillSelectDropZonePanel = class extends PillDropZonePanel {\n  constructor(model, valueFormatter, ariaLabel, sourceId) {\n    super(false);\n    this.model = model;\n    this.valueFormatter = valueFormatter;\n    this.ariaLabel = ariaLabel;\n    this.sourceId = sourceId;\n  }\n  postConstruct() {\n    super.init();\n  }\n  isItemDroppable(item, draggingEvent) {\n    return this.isSourceEventFromTarget(draggingEvent) || this.sourceId != null && this.sourceId === draggingEvent.dragSource.sourceId;\n  }\n  updateItems(items) {\n    this.model.setValues(items);\n  }\n  getExistingItems() {\n    return this.model.getValues();\n  }\n  getIconName() {\n    return this.isPotentialDndItems() ? \"move\" : \"notAllowed\";\n  }\n  getAriaLabel() {\n    return this.ariaLabel;\n  }\n  createPillComponent(item, dropTarget, ghost) {\n    return new PillSelectDragComp(\n      item,\n      dropTarget,\n      ghost,\n      this.valueFormatter,\n      this.model.isDraggable(),\n      this.sourceId\n    );\n  }\n  getItems(dragItem) {\n    return [dragItem.value];\n  }\n  isInterestedIn(type) {\n    return type === DragSourceType3.ChartPanel;\n  }\n};\nvar DragDataPanel = class extends Component102 {\n  constructor(chartController, allowMultipleSelection, maxSelection, template) {\n    super(template);\n    this.chartController = chartController;\n    this.allowMultipleSelection = allowMultipleSelection;\n    this.maxSelection = maxSelection;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  addItem(eItem) {\n    this.groupComp.addItem(eItem);\n  }\n  createGroup(columns, valueFormatter, selectLabelKey, dragSourceId, skipAnimation) {\n    if (this.allowMultipleSelection) {\n      const selectedValueList = columns.filter((col) => col.selected);\n      this.valuePillSelect = this.groupComp.createManagedBean(\n        new AgPillSelect({\n          valueList: columns,\n          selectedValueList,\n          valueFormatter,\n          selectPlaceholder: this.chartTranslationService.translate(selectLabelKey),\n          dragSourceId,\n          onValuesChange: (params) => this.onValueChange(params),\n          maxSelection: this.maxSelection\n        })\n      );\n      this.groupComp.addItem(this.valuePillSelect);\n    } else {\n      const params = this.createValueSelectParams(columns);\n      params.onValueChange = (updatedColState) => {\n        columns.forEach((col) => {\n          col.selected = false;\n        });\n        updatedColState.selected = true;\n        if (updatedColState.colId === ChartDataModel.DEFAULT_CATEGORY) {\n          this.chartController.setAggFunc(void 0, true);\n        }\n        this.chartController.updateForPanelChange({ updatedColState, skipAnimation: skipAnimation?.() });\n      };\n      this.valueSelect = this.groupComp.createManagedBean(new AgSelect2(params));\n      this.groupComp.addItem(this.valueSelect);\n    }\n  }\n  refreshValueSelect(columns) {\n    if (!this.valueSelect) {\n      return;\n    }\n    const { options, value } = this.createValueSelectParams(columns);\n    this.valueSelect.clearOptions().addOptions(options).setValue(value, true);\n  }\n  createValueSelectParams(columns) {\n    let selectedValue;\n    const options = columns.map((value) => {\n      const text = value.displayName ?? \"\";\n      if (value.selected) {\n        selectedValue = value;\n      }\n      return {\n        value,\n        text\n      };\n    });\n    return {\n      options,\n      value: selectedValue\n    };\n  }\n  onValueChange({ added, updated, removed, selected }) {\n    let updatedColState;\n    let resetOrder;\n    const updateOrder = () => {\n      selected.forEach((col, index) => {\n        col.order = index;\n      });\n      resetOrder = true;\n    };\n    if (added.length) {\n      updatedColState = added[0];\n      updatedColState.selected = true;\n      updateOrder();\n    } else if (removed.length) {\n      updatedColState = removed[0];\n      updatedColState.selected = false;\n    } else if (updated.length) {\n      updateOrder();\n      updatedColState = updated[0];\n    }\n    if (updatedColState) {\n      this.chartController.updateForPanelChange({ updatedColState, resetOrder });\n    }\n  }\n  destroy() {\n    this.valuePillSelect = void 0;\n    this.valueSelect = void 0;\n    super.destroy();\n  }\n};\nvar DEFAULT_AGG_FUNC = \"sum\";\nvar CategoriesDataPanel = class extends DragDataPanel {\n  constructor(chartController, title, allowMultipleSelection, dimensionCols, isOpen) {\n    const maxSelection = void 0;\n    super(\n      chartController,\n      allowMultipleSelection,\n      maxSelection,\n      /* html */\n      `<div id=\"categoriesGroup\"></div>`\n    );\n    this.title = title;\n    this.dimensionCols = dimensionCols;\n    this.isOpen = isOpen;\n  }\n  postConstruct() {\n    this.groupComp = this.createBean(\n      new AgGroupComponent({\n        title: this.title,\n        enabled: true,\n        suppressEnabledCheckbox: true,\n        suppressOpenCloseIcons: false,\n        cssIdentifier: \"charts-data\",\n        expanded: this.isOpen\n      })\n    );\n    this.createGroup(\n      this.dimensionCols,\n      (col) => col.displayName ?? \"\",\n      \"categoryAdd\",\n      \"categorySelect\",\n      () => !this.chartController.getAggFunc()\n    );\n    this.createAggFuncControls(this.dimensionCols);\n    this.getGui().appendChild(this.groupComp.getGui());\n  }\n  refresh(dimensionCols) {\n    this.valuePillSelect?.setValues(\n      dimensionCols,\n      dimensionCols.filter((col) => col.selected)\n    );\n    this.refreshValueSelect(dimensionCols);\n    this.refreshAggFuncControls(dimensionCols, this.chartController.getAggFunc());\n  }\n  createAggFuncControls(dimensionCols) {\n    const aggFunc = this.chartController.getAggFunc();\n    this.groupComp.addItem(\n      this.aggFuncToggle = this.createBean(\n        new AgToggleButton2({\n          label: this.chartTranslationService.translate(\"aggregate\"),\n          labelAlignment: \"left\",\n          labelWidth: \"flex\",\n          inputWidth: \"flex\",\n          value: aggFunc != void 0,\n          onValueChange: (value) => {\n            const aggFunc2 = value ? DEFAULT_AGG_FUNC : void 0;\n            this.chartController.setAggFunc(aggFunc2);\n            this.aggFuncSelect?.setValue(aggFunc2, true);\n            this.aggFuncSelect?.setDisplayed(aggFunc2 != void 0);\n          }\n        })\n      )\n    );\n    this.groupComp.addItem(\n      this.aggFuncSelect = this.createBean(\n        new AgSelect3({\n          options: [\n            { value: \"sum\", text: this.chartTranslationService.translate(\"sum\") },\n            { value: \"first\", text: this.chartTranslationService.translate(\"first\") },\n            { value: \"last\", text: this.chartTranslationService.translate(\"last\") },\n            { value: \"min\", text: this.chartTranslationService.translate(\"min\") },\n            { value: \"max\", text: this.chartTranslationService.translate(\"max\") },\n            { value: \"count\", text: this.chartTranslationService.translate(\"count\") },\n            { value: \"avg\", text: this.chartTranslationService.translate(\"avg\") }\n          ],\n          value: typeof aggFunc === \"string\" ? aggFunc : void 0,\n          onValueChange: (value) => {\n            this.chartController.setAggFunc(value);\n          }\n        })\n      )\n    );\n    this.refreshAggFuncControls(dimensionCols, aggFunc);\n  }\n  refreshAggFuncControls(dimensionCols, aggFunc) {\n    const selectedDimensions = dimensionCols.filter((col) => col.selected);\n    const supportsAggregation = selectedDimensions.some((col) => col.colId !== ChartDataModel.DEFAULT_CATEGORY);\n    this.aggFuncToggle?.setValue(aggFunc != void 0);\n    this.aggFuncSelect?.setValue(typeof aggFunc === \"string\" ? aggFunc : void 0, true);\n    this.aggFuncToggle?.setDisplayed(supportsAggregation);\n    this.aggFuncSelect?.setDisplayed(supportsAggregation && aggFunc != void 0);\n  }\n  clearAggFuncControls() {\n    this.aggFuncToggle = this.destroyBean(this.aggFuncToggle);\n    this.aggFuncSelect = this.destroyBean(this.aggFuncSelect);\n  }\n  destroy() {\n    this.clearAggFuncControls();\n    this.groupComp = this.destroyBean(this.groupComp);\n    super.destroy();\n  }\n};\nvar ChartMenuParamsFactory = class extends BeanStub12 {\n  constructor(chartOptionsProxy) {\n    super();\n    this.chartOptionsProxy = chartOptionsProxy;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  getDefaultColorPickerParams(expression, labelKey, options) {\n    return this.addValueParams(\n      expression,\n      {\n        label: this.chartTranslationService.translate(labelKey ?? \"color\"),\n        labelWidth: \"flex\",\n        inputWidth: \"flex\",\n        labelAlignment: \"top\",\n        pickerGap: 6\n      },\n      options\n    );\n  }\n  getDefaultNumberInputParams(expression, labelKey, options) {\n    return this.addValueParams(\n      expression,\n      {\n        label: this.chartTranslationService.translate(labelKey),\n        labelAlignment: \"top\",\n        labelWidth: \"flex\",\n        inputWidth: \"flex\",\n        precision: options?.precision,\n        step: options?.step,\n        min: options?.min,\n        max: options?.max\n      },\n      {\n        parseInputValue: (value) => {\n          const numberValue = Number(value);\n          return isNaN(numberValue) ? void 0 : numberValue;\n        },\n        formatInputValue: (value) => {\n          return value == null ? \"\" : `${value}`;\n        }\n      }\n    );\n  }\n  getDefaultSliderParams(expression, labelKey, defaultMaxValue, isArray) {\n    let value = this.chartOptionsProxy.getValue(expression) ?? 0;\n    if (isArray && Array.isArray(value)) {\n      value = value[0];\n    }\n    const params = this.getDefaultSliderParamsWithoutValueParams(value, labelKey, defaultMaxValue);\n    params.onValueChange = (value2) => this.chartOptionsProxy.setValue(expression, isArray ? [value2] : value2);\n    return params;\n  }\n  getDefaultSliderParamsWithoutValueParams(value, labelKey, defaultMaxValue) {\n    return {\n      label: this.chartTranslationService.translate(labelKey),\n      minValue: 0,\n      maxValue: Math.max(value, defaultMaxValue),\n      textFieldWidth: 45,\n      value: `${value}`\n    };\n  }\n  getDefaultCheckboxParams(expression, labelKey, options) {\n    const value = this.chartOptionsProxy.getValue(expression);\n    const params = {\n      label: this.chartTranslationService.translate(labelKey),\n      value,\n      readOnly: options?.readOnly,\n      passive: options?.passive\n    };\n    params.onValueChange = (value2) => {\n      this.chartOptionsProxy.setValue(expression, typeof value2 === \"boolean\" ? value2 : void 0);\n    };\n    return params;\n  }\n  getDefaultSelectParams(expression, labelKey, dropdownOptions) {\n    return this.getDefaultSelectParamsWithoutValueParams(\n      labelKey,\n      dropdownOptions,\n      this.chartOptionsProxy.getValue(expression),\n      (value) => {\n        this.chartOptionsProxy.setValue(expression, value);\n      }\n    );\n  }\n  getDefaultSelectParamsWithoutValueParams(labelKey, options, value, onValueChange) {\n    return {\n      label: this.chartTranslationService.translate(labelKey),\n      labelAlignment: \"top\",\n      options,\n      pickerGap: 6,\n      value,\n      onValueChange\n    };\n  }\n  getDefaultFontPanelParams(expression, labelKey) {\n    const keyMapper = (key) => `${expression}.${key}`;\n    return this.addEnableParams(keyMapper(\"enabled\"), {\n      name: this.chartTranslationService.translate(labelKey),\n      suppressEnabledCheckbox: false,\n      chartMenuParamsFactory: this,\n      keyMapper\n    });\n  }\n  addValueParams(expression, params, options) {\n    const optionsValue = this.chartOptionsProxy.getValue(expression);\n    params.value = options?.formatInputValue ? options.formatInputValue(optionsValue) : optionsValue;\n    params.onValueChange = (value) => {\n      const optionsValue2 = options?.parseInputValue ? options.parseInputValue(value) : value;\n      this.chartOptionsProxy.setValue(expression, optionsValue2);\n    };\n    return params;\n  }\n  addEnableParams(expression, params) {\n    params.enabled = this.chartOptionsProxy.getValue(expression) ?? false;\n    params.onEnableChange = (value) => this.chartOptionsProxy.setValue(expression, value);\n    return params;\n  }\n  getChartOptions() {\n    return this.chartOptionsProxy;\n  }\n};\nvar ChartSpecificDataPanel = class extends Component112 {\n  constructor(chartMenuContext, isOpen) {\n    super();\n    this.chartMenuContext = chartMenuContext;\n    this.isOpen = isOpen;\n    this.chartSpecificGroup = RefPlaceholder73;\n    this.hasContent = false;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n    this.chartService = beans.chartService;\n  }\n  postConstruct() {\n    const title = this.getTitle();\n    const chartSpecificGroupParams = {\n      title,\n      enabled: true,\n      suppressEnabledCheckbox: true,\n      suppressOpenCloseIcons: false,\n      cssIdentifier: \"charts-data\",\n      expanded: this.isOpen,\n      items: [...this.createDirectionSelect(), this.createGroupTypeSelect()]\n    };\n    this.setTemplate(\n      /* html */\n      `\n            <div id=\"chartSpecificGroup\">\n                <ag-group-component data-ref=\"chartSpecificGroup\"></ag-group-component>\n            </div>`,\n      [AgGroupComponentSelector],\n      {\n        chartSpecificGroup: chartSpecificGroupParams\n      }\n    );\n    this.setDisplayed(this.hasContent);\n  }\n  refresh() {\n    this.hasContent = false;\n    this.chartSpecificGroup.setTitle(this.getTitle());\n    this.updateDirectionSelect();\n    this.updateGroupTypeSelect();\n    this.setDisplayed(this.hasContent);\n  }\n  getTitle() {\n    const chartType = this.chartMenuContext.chartController.getChartType();\n    return this.chartTranslationService.translate(getFullChartNameTranslationKey(chartType));\n  }\n  createDirectionSelect() {\n    if (!this.chartService.isEnterprise()) {\n      return [];\n    }\n    const { chartOptionsService, chartController } = this.chartMenuContext;\n    const chartOptionsSeriesProxy = chartOptionsService.getSeriesOptionsProxy(\n      () => getSeriesType(chartController.getChartType())\n    );\n    const chartSeriesMenuParamsFactory = this.createManagedBean(\n      new ChartMenuParamsFactory(chartOptionsSeriesProxy)\n    );\n    const options = [\"horizontal\", \"vertical\"].map((value) => ({\n      value,\n      text: this.chartTranslationService.translate(value)\n    }));\n    const params = chartSeriesMenuParamsFactory.getDefaultSelectParams(\"direction\", \"direction\", options);\n    const onValueChange = params.onValueChange;\n    params.onValueChange = (value) => {\n      onValueChange(value);\n      chartController.raiseChartModelUpdateEvent();\n    };\n    this.directionSelect = this.createManagedBean(new AgSelect4(params));\n    this.updateDirectionSelect();\n    return [this.directionSelect];\n  }\n  updateDirectionSelect() {\n    const isDisplayed = canSwitchDirection(this.chartMenuContext.chartController.getChartType());\n    this.updateDisplayed(this.directionSelect, isDisplayed);\n  }\n  createGroupTypeSelect() {\n    const { chartController, chartMenuParamsFactory } = this.chartMenuContext;\n    this.groupTypeSelect = this.createManagedBean(\n      new AgSelect4(\n        chartMenuParamsFactory.getDefaultSelectParamsWithoutValueParams(\n          \"seriesGroupType\",\n          ChartMappings2.SERIES_GROUP_TYPES.map((value) => ({\n            value,\n            text: this.chartTranslationService.translate(`${value}SeriesGroupType`)\n          })),\n          chartController.getSeriesGroupType(),\n          (value) => chartController.setSeriesGroupType(value)\n        )\n      )\n    );\n    this.updateGroupTypeSelect();\n    return this.groupTypeSelect;\n  }\n  updateGroupTypeSelect() {\n    const isDisplayed = [\"radialColumn\", \"radialBar\", \"nightingale\"].includes(\n      this.chartMenuContext.chartController.getChartType()\n    );\n    this.updateDisplayed(this.groupTypeSelect, isDisplayed);\n  }\n  updateDisplayed(select, isDisplayed) {\n    select?.setDisplayed(isDisplayed);\n    if (select) {\n      this.hasContent = this.hasContent || isDisplayed;\n    }\n  }\n};\nvar SeriesChartTypePanel = class extends Component122 {\n  constructor(chartController, columns, isOpen) {\n    super(\n      /* html */\n      `<div id=\"seriesChartTypeGroup\"></div>`\n    );\n    this.chartController = chartController;\n    this.columns = columns;\n    this.isOpen = isOpen;\n    this.selectedColIds = [];\n    this.chartTypeComps = /* @__PURE__ */ new Map();\n    this.secondaryAxisComps = /* @__PURE__ */ new Map();\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    this.createSeriesChartTypeGroup(this.columns);\n  }\n  refresh(columns) {\n    if (!_areEqual3(this.getValidColIds(columns), this.selectedColIds)) {\n      this.recreate(columns);\n    } else {\n      this.refreshComps();\n    }\n  }\n  recreate(columns) {\n    this.isOpen = this.seriesChartTypeGroupComp.isExpanded();\n    _clearElement22(this.getGui());\n    this.destroyBean(this.seriesChartTypeGroupComp);\n    this.columns = columns;\n    this.selectedColIds = [];\n    this.clearComps();\n    this.postConstruct();\n  }\n  getValidColIds(columns) {\n    const seriesChartTypes = this.chartController.getSeriesChartTypes();\n    return columns.filter((col) => col.selected && !!seriesChartTypes.filter((s) => s.colId === col.colId)[0]).map(({ colId }) => colId);\n  }\n  createSeriesChartTypeGroup(columns) {\n    this.seriesChartTypeGroupComp = this.createBean(\n      new AgGroupComponent({\n        title: this.chartTranslationService.translate(\"seriesChartType\"),\n        enabled: true,\n        suppressEnabledCheckbox: true,\n        suppressOpenCloseIcons: false,\n        cssIdentifier: \"charts-data\",\n        expanded: this.isOpen\n      })\n    );\n    const seriesChartTypes = this.chartController.getSeriesChartTypes();\n    columns.forEach((col) => {\n      if (!col.selected) {\n        return;\n      }\n      const seriesChartType = seriesChartTypes.filter((s) => s.colId === col.colId)[0];\n      if (!seriesChartType) {\n        return;\n      }\n      this.selectedColIds.push(col.colId);\n      const seriesItemGroup = this.seriesChartTypeGroupComp.createManagedBean(\n        new AgGroupComponent({\n          title: col.displayName,\n          enabled: true,\n          suppressEnabledCheckbox: true,\n          suppressOpenCloseIcons: true,\n          cssIdentifier: \"charts-format-sub-level\"\n        })\n      );\n      const isSecondaryAxisDisabled = (chartType) => [\"groupedColumn\", \"stackedColumn\", \"stackedArea\"].includes(chartType);\n      const secondaryAxisComp = this.seriesChartTypeGroupComp.createManagedBean(\n        new AgCheckbox({\n          label: this.chartTranslationService.translate(\"secondaryAxis\"),\n          labelWidth: \"flex\",\n          disabled: isSecondaryAxisDisabled(seriesChartType.chartType),\n          value: !!seriesChartType.secondaryAxis,\n          onValueChange: (enabled) => this.chartController.updateSeriesChartType(col.colId, void 0, enabled)\n        })\n      );\n      seriesItemGroup.addItem(secondaryAxisComp);\n      const options = [\"line\", \"area\", \"stackedArea\", \"groupedColumn\", \"stackedColumn\"].map(\n        (value) => ({\n          value,\n          text: this.chartTranslationService.translate(getFullChartNameTranslationKey(value))\n        })\n      );\n      const chartTypeComp = seriesItemGroup.createManagedBean(\n        new AgSelect5({\n          options,\n          value: seriesChartType.chartType,\n          onValueChange: (chartType) => this.chartController.updateSeriesChartType(col.colId, chartType)\n        })\n      );\n      seriesItemGroup.addItem(chartTypeComp);\n      this.seriesChartTypeGroupComp.addItem(seriesItemGroup);\n      this.chartTypeComps.set(col.colId, chartTypeComp);\n      this.secondaryAxisComps.set(col.colId, secondaryAxisComp);\n    });\n    this.getGui().appendChild(this.seriesChartTypeGroupComp.getGui());\n  }\n  refreshComps() {\n    const seriesChartTypes = this.chartController.getSeriesChartTypes();\n    this.selectedColIds.forEach((colId) => {\n      const seriesChartType = seriesChartTypes.find((chartType) => chartType.colId === colId);\n      if (!seriesChartType) {\n        return;\n      }\n      const chartTypeComp = this.chartTypeComps.get(colId);\n      const secondaryAxisComp = this.secondaryAxisComps.get(colId);\n      chartTypeComp?.setValue(seriesChartType.chartType);\n      secondaryAxisComp?.setValue(!!seriesChartType.secondaryAxis);\n      secondaryAxisComp?.setDisabled(this.isSecondaryAxisDisabled(seriesChartType.chartType));\n    });\n  }\n  clearComps() {\n    this.chartTypeComps.clear();\n    this.secondaryAxisComps.clear();\n  }\n  isSecondaryAxisDisabled(chartType) {\n    return [\"groupedColumn\", \"stackedColumn\", \"stackedArea\"].includes(chartType);\n  }\n  destroy() {\n    this.clearComps();\n    this.seriesChartTypeGroupComp = this.destroyBean(this.seriesChartTypeGroupComp);\n    super.destroy();\n  }\n};\nvar SeriesDataPanel = class extends DragDataPanel {\n  constructor(chartController, chartOptionsService, title, allowMultipleSelect, maxSelection, valueCols, isOpen) {\n    super(\n      chartController,\n      allowMultipleSelect,\n      maxSelection,\n      /* html */\n      `<div id=\"seriesGroup\"></div>`\n    );\n    this.chartOptionsService = chartOptionsService;\n    this.title = title;\n    this.valueCols = valueCols;\n    this.isOpen = isOpen;\n  }\n  postConstruct() {\n    this.groupComp = this.createBean(\n      new AgGroupComponent({\n        title: this.title,\n        enabled: true,\n        suppressEnabledCheckbox: true,\n        suppressOpenCloseIcons: false,\n        cssIdentifier: \"charts-data\",\n        expanded: this.isOpen\n      })\n    );\n    if (this.chartController.isActiveXYChart()) {\n      const pairedModeToggle = this.groupComp.createManagedBean(\n        new AgToggleButton22({\n          label: this.chartTranslationService.translate(\"paired\"),\n          labelAlignment: \"left\",\n          labelWidth: \"flex\",\n          inputWidth: \"flex\",\n          value: this.chartOptionsService.getPairedMode(),\n          onValueChange: (newValue) => {\n            this.chartOptionsService.setPairedMode(!!newValue);\n            this.chartController.updateForGridChange({ maintainColState: true });\n          }\n        })\n      );\n      this.groupComp.addItem(pairedModeToggle);\n    }\n    this.createGroup(this.valueCols, this.generateGetSeriesLabel(this.valueCols), \"seriesAdd\", \"seriesSelect\");\n    this.getGui().appendChild(this.groupComp.getGui());\n  }\n  refresh(valueCols) {\n    this.valuePillSelect?.setValueFormatter(this.generateGetSeriesLabel(valueCols));\n    this.valuePillSelect?.setValues(\n      valueCols,\n      valueCols.filter((col) => col.selected)\n    );\n    this.refreshValueSelect(valueCols);\n  }\n  generateGetSeriesLabel(valueCols) {\n    if (!this.chartController.isActiveXYChart()) {\n      return (col) => col.displayName ?? \"\";\n    }\n    const selectedCols = valueCols.filter((col) => col.selected);\n    const isBubble = this.chartController.getChartType() === \"bubble\";\n    const isInPairedMode = this.chartOptionsService.getPairedMode();\n    const indexToAxisLabel = /* @__PURE__ */ new Map();\n    indexToAxisLabel.set(0, \"X\");\n    indexToAxisLabel.set(1, \"Y\");\n    indexToAxisLabel.set(2, \"size\");\n    return (col) => {\n      const escapedLabel = col.displayName ?? \"\";\n      if (!col.selected) {\n        return escapedLabel;\n      }\n      const index = selectedCols.indexOf(col);\n      if (index === -1) {\n        return escapedLabel;\n      }\n      let axisLabel;\n      if (isInPairedMode) {\n        axisLabel = indexToAxisLabel.get(index % (isBubble ? 3 : 2));\n      } else {\n        if (index === 0) {\n          axisLabel = \"X\";\n        } else {\n          axisLabel = isBubble && index % 2 === 0 ? \"size\" : \"Y\";\n        }\n      }\n      return `${escapedLabel} (${axisLabel})`;\n    };\n  }\n  destroy() {\n    this.groupComp = this.destroyBean(this.groupComp);\n    super.destroy();\n  }\n};\nvar DefaultDataPanelDef = {\n  groups: [\n    { type: \"categories\", isOpen: true },\n    { type: \"series\", isOpen: true },\n    { type: \"seriesChartType\", isOpen: true },\n    { type: \"chartSpecific\", isOpen: true }\n  ]\n};\nvar ChartDataPanel = class extends Component132 {\n  constructor(chartMenuContext) {\n    super(\n      /* html */\n      `<div class=\"ag-chart-data-wrapper ag-scrollable-container\"></div>`\n    );\n    this.chartMenuContext = chartMenuContext;\n    this.isSwitchCategorySeriesToggled = false;\n    this.restoreSwitchCategorySeriesToggleFocus = false;\n    this.panels = [];\n    this.chartController = chartMenuContext.chartController;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n    this.chartService = beans.chartService;\n  }\n  postConstruct() {\n    this.createSwitchCategorySeriesToggle();\n    this.isSwitchCategorySeriesToggled = this.chartController.isCategorySeriesSwitched();\n    this.updatePanels();\n    const listener = this.updatePanels.bind(this);\n    this.addManagedListeners(this.chartController, {\n      chartModelUpdate: listener,\n      chartApiUpdate: listener\n    });\n  }\n  destroy() {\n    this.clearPanelComponents();\n    super.destroy();\n  }\n  updatePanels() {\n    const currentChartType = this.chartType;\n    const isSwitchCategorySeriesToggledCurrent = this.isSwitchCategorySeriesToggled;\n    const { dimensionCols, valueCols } = this.chartController.getColStateForMenu();\n    this.chartType = this.chartController.getChartType();\n    this.isSwitchCategorySeriesToggled = this.chartController.isCategorySeriesSwitched();\n    const hasChangedSwitchCategorySeries = this.isSwitchCategorySeriesToggled !== isSwitchCategorySeriesToggledCurrent;\n    if (this.canRefresh(currentChartType, this.chartType) && !hasChangedSwitchCategorySeries) {\n      this.categoriesDataPanel?.refresh(dimensionCols);\n      this.seriesDataPanel?.refresh(valueCols);\n      this.seriesChartTypePanel?.refresh(valueCols);\n      this.chartSpecificPanel?.refresh();\n    } else {\n      this.recreatePanels(dimensionCols, valueCols);\n    }\n    const isSwitchCategorySeriesDisplayed = supportsInvertedCategorySeries(this.chartType) && this.chartService.isEnterprise() && !this.chartController.isGrouping();\n    _setDisplayed23(this.switchCategorySeriesToggle.getGui(), isSwitchCategorySeriesDisplayed);\n    if (hasChangedSwitchCategorySeries) {\n      this.switchCategorySeriesToggle?.setValue(this.chartController.isCategorySeriesSwitched());\n    }\n    if (this.restoreSwitchCategorySeriesToggleFocus) {\n      this.restoreSwitchCategorySeriesToggleFocus = false;\n      if (isSwitchCategorySeriesDisplayed) {\n        this.switchCategorySeriesToggle.getFocusableElement().focus();\n      }\n    }\n  }\n  canRefresh(oldChartType, newChartType) {\n    if (oldChartType === void 0)\n      return false;\n    if (oldChartType === newChartType) {\n      return true;\n    }\n    const isCombo = (chartType) => [\"columnLineCombo\", \"areaColumnCombo\", \"customCombo\"].includes(chartType);\n    if (isCombo(oldChartType) && isCombo(newChartType)) {\n      return true;\n    }\n    return false;\n  }\n  recreatePanels(dimensionCols, valueCols) {\n    this.clearPanelComponents();\n    const { chartType } = this;\n    if (!chartType)\n      return;\n    const isCategorySeriesSwitched = this.chartController.isCategorySeriesSwitched();\n    this.getDataPanelDef().groups?.forEach(({ type, isOpen }) => {\n      if (type === (isCategorySeriesSwitched ? \"series\" : \"categories\")) {\n        this.categoriesDataPanel = this.createBean(\n          new CategoriesDataPanel(\n            this.chartController,\n            this.getCategoryGroupTitle(isCategorySeriesSwitched),\n            this.getCategoryGroupMultipleSelect(chartType, isCategorySeriesSwitched),\n            dimensionCols,\n            isOpen\n          )\n        );\n        this.panels.push(this.categoriesDataPanel);\n      } else if (type === (isCategorySeriesSwitched ? \"categories\" : \"series\")) {\n        this.seriesDataPanel = this.createBean(\n          new SeriesDataPanel(\n            this.chartController,\n            this.chartMenuContext.chartOptionsService,\n            this.getSeriesGroupTitle(isCategorySeriesSwitched),\n            this.getSeriesGroupMultipleSelect(chartType, isCategorySeriesSwitched),\n            this.getSeriesGroupMaxSelection(chartType, isCategorySeriesSwitched),\n            valueCols,\n            isOpen\n          )\n        );\n        this.panels.push(this.seriesDataPanel);\n      } else if (type === \"seriesChartType\") {\n        if (this.chartController.isComboChart()) {\n          this.seriesChartTypePanel = this.createBean(\n            new SeriesChartTypePanel(this.chartController, valueCols, isOpen)\n          );\n          this.panels.push(this.seriesChartTypePanel);\n        }\n      } else if (type === \"chartSpecific\") {\n        this.chartSpecificPanel = this.createBean(new ChartSpecificDataPanel(this.chartMenuContext, isOpen));\n        this.panels.push(this.chartSpecificPanel);\n      } else {\n        _warnOnce9(`Invalid charts data panel group name supplied: '${type}'`);\n      }\n    });\n    (isCategorySeriesSwitched ? this.categoriesDataPanel : this.seriesDataPanel)?.addItem(\n      this.switchCategorySeriesToggle.getGui()\n    );\n    this.addPanelComponents();\n  }\n  addPanelComponents() {\n    if (!this.panels.length) {\n      return;\n    }\n    const eDocument = _getDocument32(this.gos);\n    const fragment = eDocument.createDocumentFragment();\n    for (const panel of this.panels) {\n      panel.addCssClass(\"ag-chart-data-section\");\n      fragment.appendChild(panel.getGui());\n    }\n    this.getGui().appendChild(fragment);\n  }\n  clearPanelComponents() {\n    const eGui = this.getGui();\n    this.panels.forEach((panel) => {\n      eGui.removeChild(panel.getGui());\n      this.destroyBean(panel);\n    });\n    this.panels = [];\n  }\n  getDataPanelDef() {\n    return this.gos.get(\"chartToolPanelsDef\")?.dataPanel ?? DefaultDataPanelDef;\n  }\n  getCategoryGroupTitle(isCategorySeriesSwitched) {\n    if (isCategorySeriesSwitched)\n      return this.chartTranslationService.translate(\"seriesLabels\");\n    return this.chartTranslationService.translate(this.chartController.isActiveXYChart() ? \"labels\" : \"categories\");\n  }\n  getCategoryGroupMultipleSelect(chartType, isCategorySeriesSwitched) {\n    if (isCategorySeriesSwitched)\n      return false;\n    return getMaxNumCategories(chartType) !== 1;\n  }\n  getSeriesGroupTitle(isCategorySeriesSwitched) {\n    if (isCategorySeriesSwitched)\n      return this.chartTranslationService.translate(\"categoryValues\");\n    return this.chartTranslationService.translate(this.chartController.isActiveXYChart() ? \"xyValues\" : \"series\");\n  }\n  getSeriesGroupMultipleSelect(chartType, isCategorySeriesSwitched) {\n    return this.getSeriesGroupMaxSelection(chartType, isCategorySeriesSwitched) !== 1;\n  }\n  getSeriesGroupMaxSelection(chartType, isCategorySeriesSwitched) {\n    if (isCategorySeriesSwitched)\n      return void 0;\n    return getMaxNumSeries(chartType);\n  }\n  createSwitchCategorySeriesToggle() {\n    this.switchCategorySeriesToggle = this.createManagedBean(\n      new AgToggleButton3({\n        label: this.chartTranslationService.translate(\"switchCategorySeries\"),\n        labelAlignment: \"left\",\n        labelWidth: \"flex\",\n        inputWidth: \"flex\",\n        value: this.chartController.isCategorySeriesSwitched(),\n        onValueChange: (value) => {\n          this.restoreSwitchCategorySeriesToggleFocus = true;\n          this.chartController.switchCategorySeries(value);\n        }\n      })\n    );\n  }\n};\nvar AgAngleSelect = class extends AgAbstractLabel2 {\n  constructor(config) {\n    super(\n      config,\n      /* html */\n      `<div class=\"ag-angle-select\">\n            <div data-ref=\"eLabel\"></div>\n            <div class=\"ag-wrapper ag-angle-select-wrapper\">\n                <div class=\"ag-angle-select-field\">\n                    <div data-ref=\"eParentCircle\" class=\"ag-angle-select-parent-circle\">\n                        <div data-ref=\"eChildCircle\" class=\"ag-angle-select-child-circle\"></div>\n                    </div>\n                </div>\n                <ag-input-number-field data-ref=\"eAngleValue\"></ag-input-number-field>\n            </div>\n        </div>`,\n      [AgInputNumberFieldSelector3]\n    );\n    this.eLabel = RefPlaceholder82;\n    this.eParentCircle = RefPlaceholder82;\n    this.eChildCircle = RefPlaceholder82;\n    this.eAngleValue = RefPlaceholder82;\n    this.radius = 0;\n    this.offsetX = 0;\n    this.offsetY = 0;\n  }\n  wireBeans(beans) {\n    this.dragService = beans.dragService;\n  }\n  postConstruct() {\n    super.postConstruct();\n    const { value, onValueChange } = this.config;\n    if (value != null) {\n      this.setValue(value, void 0, true);\n    }\n    if (onValueChange != null) {\n      this.onValueChange(onValueChange);\n    }\n    this.dragListener = {\n      eElement: this.eParentCircle,\n      dragStartPixels: 0,\n      onDragStart: () => {\n        this.parentCircleRect = this.eParentCircle.getBoundingClientRect();\n      },\n      onDragging: (e) => this.calculateAngleDrag(e),\n      onDragStop: () => {\n      }\n    };\n    this.dragService.addDragSource(this.dragListener);\n    this.eAngleValue.setLabel(\"\").setLabelWidth(5).setInputWidth(45).setMin(0).setMax(360).setValue(`${this.degrees}`).onValueChange((value2) => {\n      if (value2 == null || value2 === \"\") {\n        value2 = \"0\";\n      }\n      value2 = this.eAngleValue.normalizeValue(value2);\n      let floatValue = parseFloat(value2);\n      if (floatValue > 180) {\n        floatValue = floatValue - 360;\n      }\n      this.setValue(floatValue);\n    });\n    this.updateNumberInput();\n    if (_exists23(this.getValue())) {\n      this.eAngleValue.setValue(this.normalizeNegativeValue(this.getValue()).toString());\n    }\n    this.addManagedListeners(this, {\n      fieldValueChanged: () => {\n        if (this.eAngleValue.getInputElement().contains(_getActiveDomElement23(this.gos))) {\n          return;\n        }\n        this.updateNumberInput();\n      }\n    });\n  }\n  updateNumberInput() {\n    const normalizedValue = this.normalizeNegativeValue(this.getValue());\n    this.eAngleValue.setValue(normalizedValue.toString());\n  }\n  positionChildCircle(radians) {\n    const rect = this.parentCircleRect || { width: 24, height: 24 };\n    const eChildCircle = this.eChildCircle;\n    const centerX = rect.width / 2;\n    const centerY = rect.height / 2;\n    eChildCircle.style.left = `${centerX + Math.cos(radians) * 8}px`;\n    eChildCircle.style.top = `${centerY + Math.sin(radians) * 8}px`;\n  }\n  calculatePolar() {\n    const x = this.offsetX;\n    const y = this.offsetY;\n    const radians = Math.atan2(y, x);\n    this.degrees = this.toDegrees(radians);\n    this.radius = Math.sqrt(x * x + y * y);\n    this.positionChildCircle(radians);\n  }\n  calculateCartesian() {\n    const radians = this.toRadians(this.getValue());\n    const radius = this.getRadius();\n    this.setOffsetX(Math.cos(radians) * radius).setOffsetY(Math.sin(radians) * radius);\n  }\n  setOffsetX(offset) {\n    if (this.offsetX !== offset) {\n      this.offsetX = offset;\n      this.calculatePolar();\n    }\n    return this;\n  }\n  setOffsetY(offset) {\n    if (this.offsetY !== offset) {\n      this.offsetY = offset;\n      this.calculatePolar();\n    }\n    return this;\n  }\n  calculateAngleDrag(e) {\n    const rect = this.parentCircleRect;\n    const centerX = rect.width / 2;\n    const centerY = rect.height / 2;\n    const x = e.clientX - rect.left;\n    const y = e.clientY - rect.top;\n    const dx = x - centerX;\n    const dy = y - centerY;\n    const radians = Math.atan2(dy, dx);\n    this.setValue(radians, true);\n  }\n  toDegrees(radians) {\n    return radians / Math.PI * 180;\n  }\n  toRadians(degrees) {\n    return degrees / 180 * Math.PI;\n  }\n  normalizeNegativeValue(degrees) {\n    return degrees < 0 ? 360 + degrees : degrees;\n  }\n  normalizeAngle180(radians) {\n    radians %= Math.PI * 2;\n    if (radians < -Math.PI) {\n      radians += Math.PI * 2;\n    } else if (radians >= Math.PI) {\n      radians -= Math.PI * 2;\n    }\n    return radians;\n  }\n  getRadius() {\n    return this.radius;\n  }\n  setRadius(r) {\n    if (this.radius === r) {\n      return this;\n    }\n    this.radius = r;\n    this.calculateCartesian();\n    return this;\n  }\n  onValueChange(callbackFn) {\n    this.addManagedListeners(this, {\n      fieldValueChanged: () => {\n        callbackFn(this.degrees);\n      }\n    });\n    return this;\n  }\n  getValue(radians) {\n    return radians ? this.toRadians(this.degrees) : this.degrees;\n  }\n  setValue(degrees, radians, silent) {\n    let radiansValue;\n    if (!radians) {\n      radiansValue = this.normalizeAngle180(this.toRadians(degrees));\n    } else {\n      radiansValue = degrees;\n    }\n    degrees = this.toDegrees(radiansValue);\n    if (this.degrees !== degrees) {\n      this.degrees = Math.floor(degrees);\n      this.calculateCartesian();\n      this.positionChildCircle(radiansValue);\n      if (!silent) {\n        this.dispatchLocalEvent({ type: \"fieldValueChanged\" });\n      }\n    }\n    return this;\n  }\n  setWidth(width) {\n    _setFixedWidth(this.getGui(), width);\n    return this;\n  }\n  setDisabled(disabled) {\n    super.setDisabled(disabled);\n    this.eAngleValue.setDisabled(disabled);\n    return this;\n  }\n  destroy() {\n    this.dragService.removeDragSource(this.dragListener);\n    super.destroy();\n  }\n};\nvar FontPanel = class extends Component142 {\n  constructor(params) {\n    super();\n    this.params = params;\n    this.fontGroup = RefPlaceholder92;\n    this.activeComps = [];\n    this.chartOptions = params.chartMenuParamsFactory.getChartOptions();\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const {\n      cssIdentifier = \"charts-format-sub-level\",\n      name: title,\n      enabled,\n      onEnableChange,\n      suppressEnabledCheckbox,\n      chartMenuParamsFactory,\n      keyMapper\n    } = this.params;\n    const fontGroupParams = {\n      cssIdentifier,\n      direction: \"vertical\",\n      suppressOpenCloseIcons: true,\n      title,\n      enabled,\n      suppressEnabledCheckbox: true,\n      onEnableChange: (enabled2) => {\n        if (onEnableChange) {\n          onEnableChange(enabled2);\n        }\n      },\n      useToggle: !suppressEnabledCheckbox\n    };\n    this.setTemplate(\n      /* html */\n      `<div class=\"ag-font-panel\">\n        <ag-group-component data-ref=\"fontGroup\">\n            <ag-select data-ref=\"familySelect\"></ag-select>\n            <ag-select data-ref=\"weightStyleSelect\"></ag-select>\n            <div class=\"ag-charts-font-size-color\">\n                <ag-select data-ref=\"sizeSelect\"></ag-select>\n                <ag-color-picker data-ref=\"colorPicker\"></ag-color-picker>\n            </div>\n        </ag-group-component>\n    </div>`,\n      [AgGroupComponentSelector, AgSelectSelector, AgColorPickerSelector],\n      {\n        fontGroup: fontGroupParams,\n        familySelect: this.getFamilySelectParams(),\n        weightStyleSelect: this.getWeightStyleSelectParams(),\n        sizeSelect: this.getSizeSelectParams(),\n        colorPicker: chartMenuParamsFactory.getDefaultColorPickerParams(keyMapper(\"color\"))\n      }\n    );\n    this.addOrRemoveCssClass(\"ag-font-panel-no-header\", !title);\n  }\n  addItem(comp, prepend) {\n    if (prepend) {\n      this.fontGroup.prependItem(comp);\n    } else {\n      this.fontGroup.addItem(comp);\n    }\n    this.activeComps.push(comp);\n  }\n  setEnabled(enabled) {\n    this.fontGroup.setEnabled(enabled);\n  }\n  getFamilySelectParams() {\n    const families = [\n      \"Arial, sans-serif\",\n      \"Aria Black, sans-serif\",\n      \"Book Antiqua,  serif\",\n      \"Charcoal, sans-serif\",\n      \"Comic Sans MS, cursive\",\n      \"Courier, monospace\",\n      \"Courier New, monospace\",\n      \"Gadget, sans-serif\",\n      \"Geneva, sans-serif\",\n      \"Helvetica, sans-serif\",\n      \"Impact, sans-serif\",\n      \"Lucida Console, monospace\",\n      \"Lucida Grande, sans-serif\",\n      \"Lucida Sans Unicode,  sans-serif\",\n      \"Monaco, monospace\",\n      \"Palatino Linotype, serif\",\n      \"Palatino, serif\",\n      \"Times New Roman, serif\",\n      \"Times, serif\",\n      \"Verdana, sans-serif\"\n    ];\n    const family = this.getInitialFontValue(\"fontFamily\");\n    let initialValue = families[0];\n    if (family) {\n      const lowerCaseValues = families.map((f) => f.toLowerCase());\n      const valueIndex = lowerCaseValues.indexOf(family.toLowerCase());\n      if (valueIndex >= 0) {\n        initialValue = families[valueIndex];\n      } else {\n        const capitalisedFontValue = _capitalise(family);\n        families.push(capitalisedFontValue);\n        initialValue = capitalisedFontValue;\n      }\n    }\n    const options = families.sort().map((value) => ({ value, text: value }));\n    return this.params.chartMenuParamsFactory.getDefaultSelectParamsWithoutValueParams(\n      \"font\",\n      options,\n      `${initialValue}`,\n      (newValue) => this.setFont({ fontFamily: newValue })\n    );\n  }\n  getSizeSelectParams() {\n    const sizes = [8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36];\n    const size = this.getInitialFontValue(\"fontSize\");\n    if (!_includes6(sizes, size)) {\n      sizes.push(size);\n    }\n    const options = sizes.sort((a, b) => a - b).map((value) => ({ value: `${value}`, text: `${value}` }));\n    return this.params.chartMenuParamsFactory.getDefaultSelectParamsWithoutValueParams(\n      \"size\",\n      options,\n      `${size}`,\n      (newValue) => this.setFont({ fontSize: parseInt(newValue, 10) })\n    );\n  }\n  getWeightStyleSelectParams() {\n    const weight = this.getInitialFontValue(\"fontWeight\") ?? \"normal\";\n    const style = this.getInitialFontValue(\"fontStyle\") ?? \"normal\";\n    const weightStyles = [\n      { name: \"normal\", weight: \"normal\", style: \"normal\" },\n      { name: \"bold\", weight: \"bold\", style: \"normal\" },\n      { name: \"italic\", weight: \"normal\", style: \"italic\" },\n      { name: \"boldItalic\", weight: \"bold\", style: \"italic\" }\n    ];\n    let selectedOption = weightStyles.find((x) => x.weight === weight && x.style === style);\n    if (!selectedOption) {\n      selectedOption = { name: \"predefined\", weight, style };\n      weightStyles.unshift(selectedOption);\n    }\n    const options = weightStyles.map((ws) => ({\n      value: ws.name,\n      text: this.chartTranslationService.translate(ws.name)\n    }));\n    return this.params.chartMenuParamsFactory.getDefaultSelectParamsWithoutValueParams(\n      \"weight\",\n      options,\n      selectedOption.name,\n      (newValue) => {\n        const selectedWeightStyle = weightStyles.find((x) => x.name === newValue);\n        this.setFont({ fontWeight: selectedWeightStyle.weight, fontStyle: selectedWeightStyle.style });\n      }\n    );\n  }\n  destroyActiveComps() {\n    this.activeComps.forEach((comp) => {\n      _removeFromParent32(comp.getGui());\n      this.destroyBean(comp);\n    });\n  }\n  destroy() {\n    this.destroyActiveComps();\n    super.destroy();\n  }\n  setFont(font) {\n    const { keyMapper } = this.params;\n    Object.entries(font).forEach(([fontKey, value]) => {\n      if (value) {\n        this.chartOptions.setValue(keyMapper(fontKey), value);\n      }\n    });\n  }\n  getInitialFontValue(fontKey) {\n    const { keyMapper } = this.params;\n    return this.chartOptions.getValue(keyMapper(fontKey));\n  }\n};\nvar AxisTicksPanel = class extends Component15 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const { chartMenuUtils } = this;\n    const axisTicksGroupParams = chartMenuUtils.addEnableParams(\"tick.enabled\", {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      suppressOpenCloseIcons: true,\n      title: this.chartTranslationService.translate(\"ticks\"),\n      suppressEnabledCheckbox: true,\n      useToggle: true\n    });\n    const axisTicksColorPickerParams = chartMenuUtils.getDefaultColorPickerParams(\"tick.stroke\");\n    const axisTicksWidthSliderParams = chartMenuUtils.getDefaultSliderParams(\"tick.width\", \"width\", 10);\n    const axisTicksSizeSliderParams = chartMenuUtils.getDefaultSliderParams(\"tick.size\", \"length\", 30);\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"axisTicksGroup\">\n                <ag-color-picker data-ref=\"axisTicksColorPicker\"></ag-color-picker>\n                <ag-slider data-ref=\"axisTicksWidthSlider\"></ag-slider>\n                <ag-slider data-ref=\"axisTicksSizeSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgColorPickerSelector, AgSliderSelector],\n      {\n        axisTicksGroup: axisTicksGroupParams,\n        axisTicksColorPicker: axisTicksColorPickerParams,\n        axisTicksWidthSlider: axisTicksWidthSliderParams,\n        axisTicksSizeSlider: axisTicksSizeSliderParams\n      }\n    );\n  }\n};\nvar GridLinePanel = class extends Component16 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n    this.chartOptions = chartMenuUtils.getChartOptions();\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const gridLineGroupParams = this.chartMenuUtils.addEnableParams(\"gridLine.enabled\", {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      suppressOpenCloseIcons: true,\n      title: this.chartTranslationService.translate(\"gridLines\"),\n      suppressEnabledCheckbox: true,\n      useToggle: true\n    });\n    const gridLineColorPickerParams = this.getGridLineColorPickerParams(\"color\");\n    const gridLineWidthSliderParams = this.getGridLineWidthSliderParams(\"thickness\");\n    const gridLineLineDashSliderParams = this.getGridLineDashSliderParams(\"lineDash\");\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"gridLineGroup\">\n                <ag-color-picker data-ref=\"gridLineColorPicker\"></ag-color-picker>\n                <ag-slider data-ref=\"gridLineWidthSlider\"></ag-slider>\n                <ag-slider data-ref=\"gridLineLineDashSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgColorPickerSelector, AgSliderSelector],\n      {\n        gridLineGroup: gridLineGroupParams,\n        gridLineColorPicker: gridLineColorPickerParams,\n        gridLineWidthSlider: gridLineWidthSliderParams,\n        gridLineLineDashSlider: gridLineLineDashSliderParams\n      }\n    );\n  }\n  getGridLineColorPickerParams(labelKey) {\n    return this.chartMenuUtils.getDefaultColorPickerParams(\"gridLine.style\", labelKey, {\n      formatInputValue: (value) => {\n        return value?.[0]?.stroke;\n      },\n      parseInputValue: (value) => {\n        const styles = this.chartOptions.getValue(\"gridLine.style\") ?? [];\n        if (styles.length === 0)\n          return [{ stroke: value, lineDash: [] }];\n        return [{ ...styles[0], stroke: value }];\n      }\n    });\n  }\n  getGridLineWidthSliderParams(labelKey) {\n    return this.chartMenuUtils.getDefaultSliderParams(\"gridLine.width\", labelKey, 10);\n  }\n  getGridLineDashSliderParams(labelKey) {\n    const initialStyles = this.chartOptions.getValue(\"gridLine.style\");\n    const initialValue = initialStyles?.[0]?.lineDash?.[0];\n    const params = this.chartMenuUtils.getDefaultSliderParamsWithoutValueParams(initialValue ?? 0, labelKey, 30);\n    params.onValueChange = (value) => {\n      const stroke = this.chartOptions.getValue(\"gridLine.style.0.stroke\");\n      this.chartOptions.setValue(\"gridLine.style\", [\n        { lineDash: [value], stroke }\n      ]);\n    };\n    return params;\n  }\n};\nvar DEFAULT_TIME_AXIS_FORMAT = \"%d %B %Y\";\nvar CartesianAxisPanel = class extends Component17 {\n  constructor(axisType, options) {\n    super();\n    this.axisType = axisType;\n    this.options = options;\n    this.axisGroup = RefPlaceholder102;\n    this.axisTypeSelect = RefPlaceholder102;\n    this.axisPositionSelect = RefPlaceholder102;\n    this.axisTimeFormatSelect = RefPlaceholder102;\n    this.activePanels = [];\n    this.axisLabelUpdateFuncs = [];\n    const { chartOptionsService, seriesType } = options;\n    this.chartOptionsSeriesProxy = chartOptionsService.getSeriesOptionsProxy(() => seriesType);\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const {\n      isExpandedOnInit: expanded,\n      chartOptionsService,\n      chartController,\n      registerGroupComponent\n    } = this.options;\n    const labelKey = this.axisType;\n    const axisGroupParams = {\n      cssIdentifier: \"charts-format-top-level\",\n      direction: \"vertical\",\n      title: this.translate(labelKey),\n      expanded,\n      suppressEnabledCheckbox: true\n    };\n    const chartAxisOptionsProxy = chartOptionsService.getCartesianAxisOptionsProxy(this.axisType);\n    const chartAxisOptions = this.createManagedBean(new ChartMenuParamsFactory(chartAxisOptionsProxy));\n    const chartAxisThemeOverrides = this.createManagedBean(\n      new ChartMenuParamsFactory(chartOptionsService.getCartesianAxisThemeOverridesProxy(this.axisType))\n    );\n    const axisTypeSelectParams = this.getAxisTypeSelectParams(\n      chartAxisOptions,\n      chartOptionsService.getCartesianAxisAppliedThemeOverridesProxy(this.axisType)\n    );\n    const axisPositionSelectParams = this.getAxisPositionSelectParams(chartAxisOptions);\n    const axisTimeFormatSelectParams = this.getAxisTimeFormatSelectParams(chartAxisOptions);\n    const axisColorInputParams = this.getAxisColorInputParams(chartAxisThemeOverrides);\n    const axisLineWidthSliderParams = this.getAxisLineWidthSliderParams(chartAxisThemeOverrides);\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"axisGroup\">\n                <ag-select data-ref=\"axisTypeSelect\"></ag-select>\n                <ag-select data-ref=\"axisTimeFormatSelect\"></ag-select>\n                <ag-select data-ref=\"axisPositionSelect\"></ag-select>\n                <ag-color-picker data-ref=\"axisColorInput\"></ag-color-picker>\n                <ag-slider data-ref=\"axisLineWidthSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgSelectSelector2, AgColorPickerSelector, AgSliderSelector],\n      {\n        axisGroup: axisGroupParams,\n        axisTypeSelect: axisTypeSelectParams ?? void 0,\n        axisPositionSelect: axisPositionSelectParams ?? void 0,\n        axisTimeFormatSelect: axisTimeFormatSelectParams ?? void 0,\n        axisColorInput: axisColorInputParams,\n        axisLineWidthSlider: axisLineWidthSliderParams\n      }\n    );\n    registerGroupComponent(this.axisGroup);\n    this.axisTypeSelect.setDisplayed(!!axisTypeSelectParams.options?.length);\n    if (!axisPositionSelectParams)\n      this.removeTemplateComponent(this.axisPositionSelect);\n    const updateTimeFormatVisibility = () => {\n      const isTimeAxis = chartAxisOptionsProxy.getValue(\"type\") === \"time\";\n      _setDisplayed33(this.axisTimeFormatSelect.getGui(), isTimeAxis);\n    };\n    if (!axisTimeFormatSelectParams) {\n      this.removeTemplateComponent(this.axisTimeFormatSelect);\n    } else {\n      updateTimeFormatVisibility();\n      this.addManagedEventListeners({\n        chartOptionsChanged: () => {\n          updateTimeFormatVisibility();\n        }\n      });\n    }\n    this.initGridLines(chartAxisThemeOverrides);\n    this.initAxisTicks(chartAxisThemeOverrides);\n    this.initAxisLabels(chartAxisThemeOverrides);\n    const updateAxisLabelRotations = () => this.axisLabelUpdateFuncs.forEach((func) => func());\n    this.addManagedListeners(chartController, {\n      chartUpdated: updateAxisLabelRotations,\n      chartModelUpdate: () => setTimeout(() => {\n        if (!this.isAlive()) {\n          return;\n        }\n        this.refreshAxisTypeSelect(chartAxisOptions);\n        updateTimeFormatVisibility();\n      })\n    });\n  }\n  getAxisTypeSelectParams(chartAxisOptions, chartAxisAppliedThemeOverrides) {\n    const chartOptions = chartAxisOptions.getChartOptions();\n    const axisTypeSelectOptions = this.getAxisTypeSelectOptions();\n    const params = chartAxisOptions.getDefaultSelectParams(\"type\", \"axisType\", axisTypeSelectOptions);\n    params.onValueChange = (value) => {\n      const previousAxisType = chartOptions.getValue(\"type\");\n      if (value === previousAxisType)\n        return;\n      const previousAxisThemeOverrides = chartAxisAppliedThemeOverrides.getValue(\"*\");\n      const previousAxisIsTimeAxis = previousAxisType === \"time\";\n      const updatedAxisIsTimeAxis = value === \"time\";\n      const updatedLabelFormat = previousAxisIsTimeAxis !== updatedAxisIsTimeAxis ? updatedAxisIsTimeAxis ? DEFAULT_TIME_AXIS_FORMAT : void 0 : null;\n      this.options.chartOptionsService.setCartesianCategoryAxisType(this.axisType, value);\n      if (updatedLabelFormat !== null) {\n        const existingLabel = chartOptions.getValue(\"label\") ?? {};\n        chartOptions.setValue(\"label\", {\n          ...existingLabel,\n          format: updatedLabelFormat\n        });\n      }\n      chartAxisAppliedThemeOverrides.setValue(\"*\", previousAxisThemeOverrides);\n    };\n    return params;\n  }\n  refreshAxisTypeSelect(chartAxisOptions) {\n    const options = this.getAxisTypeSelectOptions();\n    const hasOptions = !!options.length;\n    this.axisTypeSelect.setDisplayed(hasOptions);\n    if (!hasOptions) {\n      return;\n    }\n    this.axisTypeSelect.clearOptions().addOptions(options).setValue(chartAxisOptions.getChartOptions().getValue(\"type\"));\n  }\n  getAxisTypeSelectOptions() {\n    const { chartController } = this.options;\n    const chartType = chartController.getChartType();\n    const supportsNumericalAxis = () => {\n      const testDatum = chartController.getChartData()[0];\n      if (!testDatum) {\n        return false;\n      }\n      return chartController.getSelectedDimensions().every((col) => !isNaN(parseFloat(testDatum[col.colId])));\n    };\n    if ([\"heatmap\", \"histogram\", \"boxPlot\", \"rangeBar\", \"scatter\", \"bubble\"].includes(chartType) || chartController.isGrouping() || !this.isCategoryAxis() || chartController.isCategorySeriesSwitched() || !supportsNumericalAxis()) {\n      return [];\n    }\n    return [\"category\", \"number\", \"time\"].map((value) => ({\n      value,\n      text: this.translate(value)\n    }));\n  }\n  isCategoryAxis() {\n    const isHorizontal = this.chartOptionsSeriesProxy.getValue(\"direction\") === \"horizontal\";\n    return isHorizontal && this.axisType === \"yAxis\" || !isHorizontal && this.axisType === \"xAxis\";\n  }\n  getAxisPositionSelectParams(chartAxisOptions) {\n    const axisPositionSelectOptions = ((chartType, axisType) => {\n      switch (chartType) {\n        case \"heatmap\":\n          return null;\n        default:\n          switch (axisType) {\n            case \"xAxis\":\n              return [\n                { value: \"top\", text: this.translate(\"top\") },\n                { value: \"bottom\", text: this.translate(\"bottom\") }\n              ];\n            case \"yAxis\":\n              return [\n                { value: \"left\", text: this.translate(\"left\") },\n                { value: \"right\", text: this.translate(\"right\") }\n              ];\n          }\n      }\n    })(this.options.chartController.getChartType(), this.axisType);\n    if (!axisPositionSelectOptions)\n      return null;\n    return chartAxisOptions.getDefaultSelectParams(\"position\", \"position\", axisPositionSelectOptions);\n  }\n  getAxisTimeFormatSelectParams(chartAxisOptions) {\n    if (!this.isCategoryAxis()) {\n      return null;\n    }\n    const axisTimeFormatSelectOptions = [\n      { value: \"%d/%m/%Y\", text: this.translate(\"timeFormatSlashesDDMMYYYY\") },\n      { value: \"%m/%d/%Y\", text: this.translate(\"timeFormatSlashesMMDDYYYY\") },\n      { value: \"%d/%m/%y\", text: this.translate(\"timeFormatSlashesDDMMYY\") },\n      { value: \"%m/%d/%y\", text: this.translate(\"timeFormatSlashesMMDDYY\") },\n      { value: \"%d.%e.%y\", text: this.translate(\"timeFormatDotsDDMYY\") },\n      { value: \"%e.%d.%y\", text: this.translate(\"timeFormatDotsMDDYY\") },\n      { value: \"%Y-%m-%d\", text: this.translate(\"timeFormatDashesYYYYMMDD\") },\n      { value: \"%d %B %Y\", text: this.translate(\"timeFormatSpacesDDMMMMYYYY\") },\n      { value: \"%H:%M:%S\", text: this.translate(\"timeFormatHHMMSS\") },\n      { value: \"%I:%M:%S %p\", text: this.translate(\"timeFormatHHMMSSAmPm\") }\n    ];\n    return chartAxisOptions.getDefaultSelectParams(\"label.format\", \"timeFormat\", axisTimeFormatSelectOptions);\n  }\n  getAxisColorInputParams(chartAxisThemeOverrides) {\n    return chartAxisThemeOverrides.getDefaultColorPickerParams(\"line.stroke\");\n  }\n  getAxisLineWidthSliderParams(chartAxisThemeOverrides) {\n    const chartOptions = chartAxisThemeOverrides.getChartOptions();\n    const getAxisLineWidth = () => {\n      const isAxisLineEnabled = chartOptions.getValue(\"line.enabled\");\n      if (!isAxisLineEnabled)\n        return null;\n      return chartOptions.getValue(\"line.width\");\n    };\n    const setAxisLineWidth = (value) => {\n      chartOptions.setValues([\n        { expression: \"line.enabled\", value: value != null },\n        { expression: \"line.width\", value: value ?? 0 }\n      ]);\n    };\n    const axisLineWidthSliderParams = chartAxisThemeOverrides.getDefaultSliderParamsWithoutValueParams(\n      getAxisLineWidth() ?? 0,\n      \"thickness\",\n      10\n    );\n    axisLineWidthSliderParams.onValueChange = (newValue) => {\n      setAxisLineWidth(newValue === 0 ? null : newValue);\n    };\n    return axisLineWidthSliderParams;\n  }\n  initGridLines(chartAxisThemeOverrides) {\n    const chartType = this.options.chartController.getChartType();\n    if (chartType === \"heatmap\") {\n      return;\n    }\n    const gridLineComp = this.createBean(new GridLinePanel(chartAxisThemeOverrides));\n    this.axisGroup.addItem(gridLineComp);\n    this.activePanels.push(gridLineComp);\n  }\n  initAxisTicks(chartAxisThemeOverrides) {\n    if (!this.hasConfigurableAxisTicks())\n      return;\n    const axisTicksComp = this.createBean(new AxisTicksPanel(chartAxisThemeOverrides));\n    this.axisGroup.addItem(axisTicksComp);\n    this.activePanels.push(axisTicksComp);\n  }\n  hasConfigurableAxisTicks() {\n    const chartType = this.options.chartController.getChartType();\n    switch (chartType) {\n      case \"radarLine\":\n      case \"radarArea\":\n      case \"rangeBar\":\n      case \"boxPlot\":\n      case \"waterfall\":\n        return false;\n      default:\n        return true;\n    }\n  }\n  initAxisLabels(chartAxisThemeOverrides) {\n    const params = {\n      name: this.translate(\"labels\"),\n      enabled: true,\n      suppressEnabledCheckbox: true,\n      chartMenuParamsFactory: chartAxisThemeOverrides,\n      keyMapper: (key) => `label.${key}`\n    };\n    const labelPanelComp = this.createBean(new FontPanel(params));\n    this.axisGroup.addItem(labelPanelComp);\n    this.activePanels.push(labelPanelComp);\n    this.addAdditionalLabelComps(labelPanelComp, chartAxisThemeOverrides);\n  }\n  addAdditionalLabelComps(labelPanelComp, chartAxisThemeOverrides) {\n    this.addLabelPadding(labelPanelComp, chartAxisThemeOverrides);\n    const rotationComp = this.createRotationWidget(\"labelRotation\", chartAxisThemeOverrides);\n    const autoRotateCb = this.initLabelRotation(rotationComp, chartAxisThemeOverrides);\n    labelPanelComp.addItem(autoRotateCb);\n    labelPanelComp.addItem(rotationComp);\n  }\n  initLabelRotation(rotationComp, chartAxisThemeOverrides) {\n    const chartOptions = chartAxisThemeOverrides.getChartOptions();\n    const getLabelRotationValue = () => {\n      return chartOptions.getValue(\"label.rotation\");\n    };\n    const getLabelAutoRotateValue = () => {\n      return chartOptions.getValue(\"label.autoRotate\");\n    };\n    const updateAutoRotate = (autoRotate2) => {\n      if (autoRotate2)\n        this.prevRotation = getLabelRotationValue();\n      chartOptions.setValues([\n        { expression: \"label.autoRotate\", value: autoRotate2 },\n        // Clear the rotation option when activating auto-rotate, reinstate the previous value when deactivating\n        { expression: \"label.rotation\", value: autoRotate2 ? void 0 : this.prevRotation }\n      ]);\n      rotationComp.setDisplayed(!autoRotate2);\n    };\n    const rotation = getLabelRotationValue();\n    const autoRotate = typeof rotation === \"number\" ? false : getLabelAutoRotateValue();\n    const autoRotateCheckbox = this.createBean(\n      new AgCheckbox2({\n        label: this.translate(\"autoRotate\"),\n        value: autoRotate,\n        onValueChange: updateAutoRotate\n      })\n    );\n    rotationComp.setDisplayed(!autoRotate);\n    return autoRotateCheckbox;\n  }\n  createRotationWidget(labelKey, chartAxisThemeOverrides) {\n    const chartOptions = chartAxisThemeOverrides.getChartOptions();\n    const getLabelRotationValue = () => {\n      return chartOptions.getValue(\"label.rotation\");\n    };\n    const setLabelRotationValue = (value) => {\n      return chartOptions.setValue(\"label.rotation\", value);\n    };\n    const degreesSymbol = String.fromCharCode(176);\n    const label = `${this.chartTranslationService.translate(labelKey)} ${degreesSymbol}`;\n    const angleSelect = new AgAngleSelect({\n      label,\n      labelWidth: \"flex\",\n      value: getLabelRotationValue() ?? 0,\n      onValueChange: setLabelRotationValue\n    });\n    this.axisLabelUpdateFuncs.push(() => {\n      angleSelect.setValue(getLabelRotationValue() ?? 0);\n    });\n    return this.createBean(angleSelect);\n  }\n  addLabelPadding(labelPanelComp, chartAxisThemeOverrides) {\n    const labelPaddingSlider = this.createBean(\n      new AgSlider(chartAxisThemeOverrides.getDefaultSliderParams(\"label.padding\", \"padding\", 30))\n    );\n    labelPanelComp.addItem(labelPaddingSlider);\n  }\n  translate(key) {\n    return this.chartTranslationService.translate(key);\n  }\n  removeTemplateComponent(component) {\n    _removeFromParent4(component.getGui());\n    this.destroyBean(component);\n  }\n  destroyActivePanels() {\n    this.activePanels.forEach((panel) => {\n      _removeFromParent4(panel.getGui());\n      this.destroyBean(panel);\n    });\n  }\n  destroy() {\n    this.destroyActivePanels();\n    super.destroy();\n  }\n};\nvar PolarAxisPanel = class extends Component18 {\n  constructor(options) {\n    super();\n    this.options = options;\n    this.axisGroup = RefPlaceholder112;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const { isExpandedOnInit: expanded, chartAxisMenuParamsFactory, registerGroupComponent } = this.options;\n    const axisGroupParams = {\n      cssIdentifier: \"charts-format-top-level\",\n      direction: \"vertical\",\n      title: this.translate(\"polarAxis\"),\n      expanded,\n      suppressEnabledCheckbox: true\n    };\n    const axisColorInputParams = chartAxisMenuParamsFactory.getDefaultColorPickerParams(\"line.stroke\");\n    const axisLineWidthSliderParams = chartAxisMenuParamsFactory.getDefaultSliderParams(\n      \"line.width\",\n      \"thickness\",\n      10\n    );\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"axisGroup\">\n                <ag-color-picker data-ref=\"axisColorInput\"></ag-color-picker>\n                <ag-slider data-ref=\"axisLineWidthSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgColorPickerSelector, AgSliderSelector],\n      {\n        axisGroup: axisGroupParams,\n        axisColorInput: axisColorInputParams,\n        axisLineWidthSlider: axisLineWidthSliderParams\n      }\n    );\n    registerGroupComponent(this.axisGroup);\n    this.initAxis();\n    this.initAxisLabels();\n    this.initRadiusAxis();\n  }\n  initAxis() {\n    const chartType = this.options.chartController.getChartType();\n    const hasConfigurableAxisShape = [\"radarLine\", \"radarArea\"].includes(chartType);\n    if (hasConfigurableAxisShape) {\n      const options = [\n        { value: \"circle\", text: this.translate(\"circle\") },\n        { value: \"polygon\", text: this.translate(\"polygon\") }\n      ];\n      this.axisGroup.addItem(\n        this.createSelect({\n          labelKey: \"shape\",\n          options,\n          property: \"shape\"\n        })\n      );\n    }\n    if (chartType !== \"pie\") {\n      this.axisGroup.addItem(\n        this.createSlider({\n          labelKey: \"innerRadius\",\n          defaultMaxValue: 1,\n          property: \"innerRadiusRatio\"\n        })\n      );\n    }\n  }\n  initAxisLabels() {\n    const params = {\n      name: this.translate(\"labels\"),\n      enabled: true,\n      suppressEnabledCheckbox: true,\n      chartMenuParamsFactory: this.options.chartAxisMenuParamsFactory,\n      keyMapper: (key) => `label.${key}`\n    };\n    const labelPanelComp = this.createManagedBean(new FontPanel(params));\n    const labelOrientationComp = this.createOrientationWidget();\n    labelPanelComp.addItem(labelOrientationComp);\n    this.axisGroup.addItem(labelPanelComp);\n  }\n  createOrientationWidget() {\n    const options = [\n      { value: \"fixed\", text: this.translate(\"fixed\") },\n      { value: \"parallel\", text: this.translate(\"parallel\") },\n      { value: \"perpendicular\", text: this.translate(\"perpendicular\") }\n    ];\n    return this.createSelect({\n      labelKey: \"orientation\",\n      options,\n      property: \"label.orientation\"\n    });\n  }\n  initRadiusAxis() {\n    const chartSeriesType = getSeriesType(this.options.chartController.getChartType());\n    if (!isRadial(chartSeriesType))\n      return;\n    const items = [\n      this.createSlider({\n        labelKey: \"groupPadding\",\n        defaultMaxValue: 1,\n        property: \"paddingInner\"\n      }),\n      this.createSlider({\n        labelKey: \"seriesPadding\",\n        defaultMaxValue: 1,\n        property: \"groupPaddingInner\"\n      })\n    ];\n    const paddingPanelComp = this.createManagedBean(\n      new AgGroupComponent({\n        cssIdentifier: \"charts-format-sub-level\",\n        direction: \"vertical\",\n        suppressOpenCloseIcons: true,\n        enabled: true,\n        suppressEnabledCheckbox: true,\n        title: this.translate(\"padding\"),\n        items\n      })\n    ).hideEnabledCheckbox(true).hideOpenCloseIcons(true);\n    this.axisGroup.addItem(paddingPanelComp);\n  }\n  createSlider(config) {\n    const { labelKey, defaultMaxValue, step = 0.05, property } = config;\n    const params = this.options.chartAxisMenuParamsFactory.getDefaultSliderParams(\n      property,\n      labelKey,\n      defaultMaxValue\n    );\n    params.step = step;\n    return this.createManagedBean(new AgSlider(params));\n  }\n  createSelect(config) {\n    const { labelKey, options, property } = config;\n    return this.createManagedBean(\n      new AgSelect6(this.options.chartAxisMenuParamsFactory.getDefaultSelectParams(property, labelKey, options))\n    );\n  }\n  translate(key) {\n    return this.chartTranslationService.translate(key);\n  }\n};\nvar BackgroundPanel = class extends Component19 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const chartBackgroundGroupParams = this.chartMenuUtils.addEnableParams(\n      \"background.visible\",\n      {\n        cssIdentifier: \"charts-format-sub-level\",\n        direction: \"vertical\",\n        suppressOpenCloseIcons: true,\n        title: this.chartTranslationService.translate(\"background\"),\n        suppressEnabledCheckbox: true,\n        useToggle: true\n      }\n    );\n    const colorPickerParams = this.chartMenuUtils.getDefaultColorPickerParams(\"background.fill\");\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"chartBackgroundGroup\">\n                <ag-color-picker data-ref=\"colorPicker\"></ag-color-picker>\n            </ag-group-component>\n        <div>`,\n      [AgGroupComponentSelector, AgColorPickerSelector],\n      {\n        chartBackgroundGroup: chartBackgroundGroupParams,\n        colorPicker: colorPickerParams\n      }\n    );\n  }\n};\nvar PaddingPanel = class extends Component20 {\n  constructor(chartMenuUtils, chartController) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n    this.chartController = chartController;\n    this.paddingTopSlider = RefPlaceholder12;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const chartPaddingGroupParams = {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      suppressOpenCloseIcons: true,\n      title: this.chartTranslationService.translate(\"padding\"),\n      suppressEnabledCheckbox: true\n    };\n    const getSliderParams = (property) => this.chartMenuUtils.getDefaultSliderParams(\"padding.\" + property, property, 200);\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"chartPaddingGroup\">\n                <ag-slider data-ref=\"paddingTopSlider\"></ag-slider>\n                <ag-slider data-ref=\"paddingRightSlider\"></ag-slider>\n                <ag-slider data-ref=\"paddingBottomSlider\"></ag-slider>\n                <ag-slider data-ref=\"paddingLeftSlider\"></ag-slider>\n            </ag-group-component>\n        <div>`,\n      [AgGroupComponentSelector, AgSliderSelector],\n      {\n        chartPaddingGroup: chartPaddingGroupParams,\n        paddingTopSlider: getSliderParams(\"top\"),\n        paddingRightSlider: getSliderParams(\"right\"),\n        paddingBottomSlider: getSliderParams(\"bottom\"),\n        paddingLeftSlider: getSliderParams(\"left\")\n      }\n    );\n    this.addManagedEventListeners({\n      chartOptionsChanged: (e) => {\n        this.updateTopPadding(e.chartOptions);\n      }\n    });\n  }\n  updateTopPadding(chartOptions) {\n    const topPadding = [...this.chartController.getChartSeriesTypes(), \"common\"].map((seriesType) => chartOptions[seriesType]?.padding?.top).find((value) => value != null);\n    if (topPadding != null) {\n      this.paddingTopSlider.setValue(`${topPadding}`);\n    }\n  }\n};\nvar ChartPanel = class extends Component21 {\n  constructor(options) {\n    super();\n    this.options = options;\n    this.chartGroup = RefPlaceholder13;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const {\n      chartController,\n      chartMenuParamsFactory,\n      isExpandedOnInit: expanded,\n      registerGroupComponent\n    } = this.options;\n    const chartGroupParams = {\n      cssIdentifier: \"charts-format-top-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"chartStyle\"),\n      expanded,\n      suppressEnabledCheckbox: true,\n      items: [\n        this.createManagedBean(new PaddingPanel(chartMenuParamsFactory, chartController)),\n        this.createManagedBean(new BackgroundPanel(chartMenuParamsFactory))\n      ]\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"chartGroup\"></ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector],\n      { chartGroup: chartGroupParams }\n    );\n    registerGroupComponent(this.chartGroup);\n  }\n};\nvar GroupExpansionFeature = class extends BeanStub13 {\n  constructor(groupContainer) {\n    super();\n    this.groupContainer = groupContainer;\n    this.id = 0;\n    this.groupComponents = /* @__PURE__ */ new Map();\n  }\n  addGroupComponent(groupComponent) {\n    const id = this.id++;\n    this.groupComponents.set(id, groupComponent);\n    if (groupComponent.isExpanded()) {\n      this.expandedGroupComponent = id;\n    }\n    groupComponent.onExpandedChange((expanded) => {\n      if (expanded) {\n        const previouslyExpandedGroupComponent = this.expandedGroupComponent;\n        this.expandedGroupComponent = id;\n        if (previouslyExpandedGroupComponent != null) {\n          const groupComponentGui = groupComponent.getGui();\n          const groupPositionInViewport = groupComponentGui.offsetTop - this.groupContainer.parentElement.scrollTop;\n          this.groupComponents.get(previouslyExpandedGroupComponent)?.toggleGroupExpand(false, true);\n          let newScrollTop = groupComponentGui.offsetTop - groupPositionInViewport;\n          if (newScrollTop < 0) {\n            newScrollTop = 0;\n          }\n          if (newScrollTop !== this.groupContainer.parentElement.scrollTop) {\n            this.groupContainer.parentElement.scrollTop = newScrollTop;\n          }\n        }\n      } else {\n        this.expandedGroupComponent = void 0;\n      }\n    });\n  }\n  destroy() {\n    this.groupComponents.clear();\n    super.destroy();\n  }\n};\nvar LegendPanel = class extends Component222 {\n  constructor(options) {\n    super();\n    this.options = options;\n    this.legendGroup = RefPlaceholder14;\n    this.isGradient = [\"treemap\", \"sunburst\", \"heatmap\"].includes(options.seriesType);\n    this.key = this.isGradient ? \"gradientLegend\" : \"legend\";\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const { chartMenuParamsFactory, isExpandedOnInit: expanded, registerGroupComponent } = this.options;\n    const positionSelect = this.createManagedBean(\n      new AgSelect7(\n        chartMenuParamsFactory.getDefaultSelectParams(\n          `${this.key}.position`,\n          \"position\",\n          [\"top\", \"right\", \"bottom\", \"left\"].map((position) => ({\n            value: position,\n            text: this.chartTranslationService.translate(position)\n          }))\n        )\n      )\n    );\n    const enabledGroup = this.createManagedBean(\n      new AgGroupComponent(\n        chartMenuParamsFactory.addEnableParams(`${this.key}.enabled`, {\n          cssIdentifier: \"charts-format-sub-level\",\n          direction: \"vertical\",\n          suppressOpenCloseIcons: true,\n          title: this.chartTranslationService.translate(\"legendEnabled\"),\n          suppressEnabledCheckbox: true,\n          useToggle: true,\n          items: [\n            this.createLabelPanel(chartMenuParamsFactory),\n            positionSelect,\n            ...this.getItems(chartMenuParamsFactory)\n          ]\n        })\n      )\n    );\n    const legendGroupParams = {\n      cssIdentifier: \"charts-format-top-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"legend\"),\n      suppressEnabledCheckbox: true,\n      expanded,\n      items: [enabledGroup]\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"legendGroup\">\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector],\n      {\n        legendGroup: legendGroupParams\n      }\n    );\n    registerGroupComponent(this.legendGroup);\n  }\n  getItems(chartMenuParamsFactory) {\n    const createSlider = (expression, labelKey, defaultMaxValue) => this.createManagedBean(\n      new AgSlider(\n        chartMenuParamsFactory.getDefaultSliderParams(\n          `${this.key}.${expression}`,\n          labelKey,\n          defaultMaxValue\n        )\n      )\n    );\n    if (this.isGradient) {\n      return [\n        this.createManagedBean(\n          new AgCheckbox3(\n            chartMenuParamsFactory.addValueParams(\"gradientLegend.reverseOrder\", {\n              label: this.chartTranslationService.translate(\"reverseDirection\"),\n              labelWidth: \"flex\"\n            })\n          )\n        ),\n        createSlider(\"gradient.thickness\", \"thickness\", 40),\n        createSlider(\"gradient.preferredLength\", \"preferredLength\", 300),\n        createSlider(\"spacing\", \"spacing\", 200)\n      ];\n    }\n    return [\n      createSlider(\"spacing\", \"spacing\", 200),\n      createSlider(\"item.marker.size\", \"markerSize\", 40),\n      createSlider(\"item.marker.strokeWidth\", \"markerStroke\", 10),\n      createSlider(\"item.marker.padding\", \"itemSpacing\", 20),\n      createSlider(\"item.paddingX\", \"layoutHorizontalSpacing\", 50),\n      createSlider(\"item.paddingY\", \"layoutVerticalSpacing\", 50)\n    ];\n  }\n  createLabelPanel(chartMenuParamsFactory) {\n    const rootKey = this.isGradient ? \"gradientLegend.scale.label\" : \"legend.item.label\";\n    const params = {\n      enabled: true,\n      suppressEnabledCheckbox: true,\n      chartMenuParamsFactory,\n      keyMapper: (key) => `${rootKey}.${key}`,\n      cssIdentifier: \"charts-format-sub-level-no-header\"\n    };\n    return this.createManagedBean(new FontPanel(params));\n  }\n};\nvar CalloutPanel = class extends Component232 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const calloutGroupParams = {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"callout\"),\n      enabled: true,\n      suppressOpenCloseIcons: true,\n      suppressEnabledCheckbox: true\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"calloutGroup\">\n                <ag-slider data-ref=\"calloutLengthSlider\"></ag-slider>\n                <ag-slider data-ref=\"calloutStrokeWidthSlider\"></ag-slider>\n                <ag-slider data-ref=\"labelOffsetSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgSliderSelector],\n      {\n        calloutGroup: calloutGroupParams,\n        calloutLengthSlider: this.chartMenuUtils.getDefaultSliderParams(\"calloutLine.length\", \"length\", 40),\n        calloutStrokeWidthSlider: this.chartMenuUtils.getDefaultSliderParams(\n          \"calloutLine.strokeWidth\",\n          \"strokeWidth\",\n          10\n        ),\n        labelOffsetSlider: this.chartMenuUtils.getDefaultSliderParams(\"calloutLabel.offset\", \"offset\", 30)\n      }\n    );\n  }\n};\nvar CapsPanel = class extends Component24 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const capsGroupParams = {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"cap\"),\n      enabled: true,\n      suppressOpenCloseIcons: true,\n      suppressEnabledCheckbox: true\n    };\n    const capLengthRatioSliderParams = this.chartMenuUtils.getDefaultSliderParams(\n      \"cap.lengthRatio\",\n      \"capLengthRatio\",\n      1\n    );\n    capLengthRatioSliderParams.step = 0.05;\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"capsGroup\">\n                <ag-slider data-ref=\"capLengthRatioSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgSliderSelector],\n      {\n        capsGroup: capsGroupParams,\n        capLengthRatioSlider: capLengthRatioSliderParams\n      }\n    );\n  }\n};\nvar ConnectorLinePanel = class extends Component25 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const lineGroupParams = {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"connectorLine\"),\n      enabled: true,\n      suppressOpenCloseIcons: true,\n      suppressEnabledCheckbox: true\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"lineGroup\">\n                <ag-color-picker data-ref=\"lineColorPicker\"></ag-color-picker>\n                <ag-slider data-ref=\"lineStrokeWidthSlider\"></ag-slider>\n                <ag-slider data-ref=\"lineOpacitySlider\"></ag-slider>\n                <ag-slider data-ref=\"lineDashSlider\"></ag-slider>                \n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgColorPickerSelector, AgSliderSelector],\n      {\n        lineGroup: lineGroupParams,\n        lineColorPicker: this.chartMenuUtils.getDefaultColorPickerParams(\"line.stroke\"),\n        lineStrokeWidthSlider: this.getSliderParams(\"strokeWidth\", 10, \"line.strokeWidth\"),\n        lineDashSlider: this.getSliderParams(\"lineDash\", 30, \"line.lineDash\", 1, true),\n        lineOpacitySlider: this.getSliderParams(\"strokeOpacity\", 1, \"line.strokeOpacity\", 0.05)\n      }\n    );\n  }\n  getSliderParams(labelKey, maxValue, seriesOptionKey, step = 1, isArray = false) {\n    const params = this.chartMenuUtils.getDefaultSliderParams(seriesOptionKey, labelKey, maxValue, isArray);\n    params.step = step;\n    return params;\n  }\n};\nfunction getShapeSelectOptions(chartTranslationService) {\n  return [\"square\", \"circle\", \"cross\", \"diamond\", \"plus\", \"triangle\", \"heart\"].map((value) => ({\n    value,\n    text: chartTranslationService.translate(value)\n  }));\n}\nvar MarkersPanel = class extends Component26 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const seriesMarkersGroupParams = this.chartMenuUtils.addEnableParams(\"marker.enabled\", {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"markers\"),\n      suppressEnabledCheckbox: true,\n      useToggle: true,\n      suppressOpenCloseIcons: true\n    });\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"seriesMarkersGroup\">\n                <ag-select data-ref=\"seriesMarkerShapeSelect\"></ag-select>\n                <ag-slider data-ref=\"seriesMarkerSizeSlider\"></ag-slider>\n                <ag-slider data-ref=\"seriesMarkerStrokeWidthSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgSelectSelector3, AgSliderSelector],\n      {\n        seriesMarkersGroup: seriesMarkersGroupParams,\n        seriesMarkerShapeSelect: this.chartMenuUtils.getDefaultSelectParams(\n          \"marker.shape\",\n          \"shape\",\n          getShapeSelectOptions(this.chartTranslationService)\n        ),\n        seriesMarkerSizeSlider: this.chartMenuUtils.getDefaultSliderParams(\"marker.size\", \"size\", 60),\n        seriesMarkerStrokeWidthSlider: this.chartMenuUtils.getDefaultSliderParams(\n          \"marker.strokeWidth\",\n          \"strokeWidth\",\n          10\n        )\n      }\n    );\n  }\n};\nvar SeriesItemsPanel = class extends Component27 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n    this.seriesItemsGroup = RefPlaceholder15;\n    this.activePanels = [];\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const seriesItemsGroupParams = {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"seriesItems\"),\n      enabled: true,\n      suppressOpenCloseIcons: true,\n      suppressEnabledCheckbox: true\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"seriesItemsGroup\">\n                <ag-select data-ref=\"seriesItemSelect\"></ag-select>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgSelectSelector4],\n      {\n        seriesItemsGroup: seriesItemsGroupParams,\n        seriesItemSelect: this.getSeriesItemsParams()\n      }\n    );\n    this.initSeriesControls();\n  }\n  getSeriesItemsParams() {\n    const options = [\n      { value: \"positive\", text: this.chartTranslationService.translate(\"seriesItemPositive\") },\n      { value: \"negative\", text: this.chartTranslationService.translate(\"seriesItemNegative\") }\n    ];\n    const seriesItemChangedCallback = (newValue) => {\n      this.destroyActivePanels();\n      this.initSeriesControls(newValue);\n    };\n    return this.chartMenuUtils.getDefaultSelectParamsWithoutValueParams(\n      \"seriesItemType\",\n      options,\n      \"positive\",\n      seriesItemChangedCallback\n    );\n  }\n  initSeriesControls(itemType = \"positive\") {\n    this.initSlider(\"strokeWidth\", 10, `item.${itemType}.strokeWidth`);\n    this.initSlider(\"lineDash\", 30, `item.${itemType}.lineDash`, 1, true);\n    this.initSlider(\"strokeOpacity\", 1, `item.${itemType}.strokeOpacity`, 0.05, false);\n    this.initSlider(\"fillOpacity\", 1, `item.${itemType}.fillOpacity`, 0.05, false);\n    this.initItemLabels(itemType);\n  }\n  initSlider(labelKey, maxValue, seriesOptionKey, step = 1, isArray = false) {\n    const params = this.chartMenuUtils.getDefaultSliderParams(seriesOptionKey, labelKey, maxValue, isArray);\n    params.step = step;\n    const itemSlider = this.seriesItemsGroup.createManagedBean(new AgSlider(params));\n    this.seriesItemsGroup.addItem(itemSlider);\n    this.activePanels.push(itemSlider);\n  }\n  initItemLabels(itemType) {\n    const sectorParams = this.chartMenuUtils.getDefaultFontPanelParams(\n      `item.${itemType}.label`,\n      \"seriesItemLabels\"\n    );\n    const labelPanelComp = this.createBean(new FontPanel(sectorParams));\n    this.seriesItemsGroup.addItem(labelPanelComp);\n    this.activePanels.push(labelPanelComp);\n  }\n  destroyActivePanels() {\n    this.activePanels.forEach((panel) => {\n      _removeFromParent5(panel.getGui());\n      this.destroyBean(panel);\n    });\n  }\n  destroy() {\n    this.destroyActivePanels();\n    super.destroy();\n  }\n};\nvar ShadowPanel = class extends Component28 {\n  constructor(chartMenuUtils, propertyKey = \"shadow\") {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n    this.propertyKey = propertyKey;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const propertyNamespace = this.propertyKey;\n    const shadowGroupParams = this.chartMenuUtils.addEnableParams(\n      `${propertyNamespace}.enabled`,\n      {\n        cssIdentifier: \"charts-format-sub-level\",\n        direction: \"vertical\",\n        suppressOpenCloseIcons: true,\n        title: this.chartTranslationService.translate(\"shadow\"),\n        suppressEnabledCheckbox: true,\n        useToggle: true\n      }\n    );\n    const shadowColorPickerParams = this.chartMenuUtils.getDefaultColorPickerParams(`${propertyNamespace}.color`);\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"shadowGroup\">\n                <ag-color-picker data-ref=\"shadowColorPicker\"></ag-color-picker>\n                <ag-slider data-ref=\"shadowBlurSlider\"></ag-slider>\n                <ag-slider data-ref=\"shadowXOffsetSlider\"></ag-slider>\n                <ag-slider data-ref=\"shadowYOffsetSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgColorPickerSelector, AgSliderSelector],\n      {\n        shadowGroup: shadowGroupParams,\n        shadowColorPicker: shadowColorPickerParams,\n        shadowBlurSlider: this.getSliderParams(\"blur\", 0, 20),\n        shadowXOffsetSlider: this.getSliderParams(\"xOffset\", -10, 10),\n        shadowYOffsetSlider: this.getSliderParams(\"yOffset\", -10, 10)\n      }\n    );\n  }\n  getSliderParams(property, minValue, defaultMaxValue) {\n    const expression = `${this.propertyKey}.${property}`;\n    const params = this.chartMenuUtils.getDefaultSliderParams(expression, property, defaultMaxValue);\n    params.minValue = minValue;\n    return params;\n  }\n};\nvar TileSpacingPanel = class extends Component29 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const groupParams = {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      enabled: true,\n      suppressOpenCloseIcons: true,\n      suppressEnabledCheckbox: true\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"groupSpacing\">\n                <ag-slider data-ref=\"groupPaddingSlider\"></ag-slider>\n                <ag-slider data-ref=\"groupSpacingSlider\"></ag-slider>\n            </ag-group-component>\n            <ag-group-component data-ref=\"tileSpacing\">\n                <ag-slider data-ref=\"tilePaddingSlider\"></ag-slider>\n                <ag-slider data-ref=\"tileSpacingSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgSliderSelector],\n      {\n        groupSpacing: { ...groupParams, title: this.chartTranslationService.translate(\"group\") },\n        tileSpacing: { ...groupParams, title: this.chartTranslationService.translate(\"tile\") },\n        groupPaddingSlider: this.getSliderParams(\"padding\", \"group.padding\"),\n        groupSpacingSlider: this.getSliderParams(\"spacing\", \"group.gap\"),\n        tilePaddingSlider: this.getSliderParams(\"padding\", \"tile.padding\"),\n        tileSpacingSlider: this.getSliderParams(\"spacing\", \"tile.gap\")\n      }\n    );\n  }\n  getSliderParams(labelKey, key) {\n    return this.chartMenuUtils.getDefaultSliderParams(key, labelKey, 10);\n  }\n};\nvar WhiskersPanel = class extends Component30 {\n  constructor(chartMenuUtils) {\n    super();\n    this.chartMenuUtils = chartMenuUtils;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const whiskersGroupParams = {\n      cssIdentifier: \"charts-format-sub-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"whisker\"),\n      enabled: true,\n      suppressOpenCloseIcons: true,\n      suppressEnabledCheckbox: true\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"whiskersGroup\">\n                <ag-color-picker data-ref=\"whiskerColorPicker\"></ag-color-picker>\n                <ag-slider data-ref=\"whiskerThicknessSlider\"></ag-slider>\n                <ag-slider data-ref=\"whiskerOpacitySlider\"></ag-slider>\n                <ag-slider data-ref=\"whiskerLineDashSlider\"></ag-slider>\n                <ag-slider data-ref=\"whiskerLineDashOffsetSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector, AgColorPickerSelector, AgSliderSelector],\n      {\n        whiskersGroup: whiskersGroupParams,\n        whiskerColorPicker: this.chartMenuUtils.getDefaultColorPickerParams(\"whisker.stroke\"),\n        whiskerThicknessSlider: this.chartMenuUtils.getDefaultSliderParams(\n          \"whisker.strokeWidth\",\n          \"strokeWidth\",\n          10\n        ),\n        whiskerOpacitySlider: this.chartMenuUtils.getDefaultSliderParams(\n          \"whisker.strokeOpacity\",\n          \"strokeOpacity\",\n          1\n        ),\n        whiskerLineDashSlider: this.chartMenuUtils.getDefaultSliderParams(\n          \"whisker.lineDash\",\n          \"lineDash\",\n          30,\n          true\n        ),\n        whiskerLineDashOffsetSlider: this.chartMenuUtils.getDefaultSliderParams(\n          \"whisker.lineDashOffset\",\n          \"lineDashOffset\",\n          30\n        )\n      }\n    );\n  }\n};\nvar tooltips = \"tooltips\";\nvar strokeWidth = \"strokeWidth\";\nvar lineDash = \"lineDash\";\nvar lineOpacity = \"lineOpacity\";\nvar fillOpacity = \"fillOpacity\";\nvar labels = \"labels\";\nvar shadow = \"shadow\";\nvar SeriesPanel = class extends Component31 {\n  constructor(options) {\n    super();\n    this.options = options;\n    this.seriesGroup = RefPlaceholder16;\n    this.activePanels = [];\n    this.widgetFuncs = {\n      lineWidth: () => this.initStrokeWidth(\"lineWidth\"),\n      [strokeWidth]: () => this.initStrokeWidth(\"strokeWidth\"),\n      lineColor: () => this.initLineColor(),\n      [lineDash]: () => this.initLineDash(),\n      [lineOpacity]: () => this.initOpacity(\"strokeOpacity\"),\n      [fillOpacity]: () => this.initOpacity(\"fillOpacity\"),\n      markers: () => new MarkersPanel(this.chartMenuUtils),\n      [labels]: () => this.initLabels(),\n      sectorLabels: () => this.initSectorLabels(),\n      [shadow]: () => new ShadowPanel(this.chartMenuUtils),\n      [tooltips]: () => this.initTooltips(),\n      bins: () => this.initBins(),\n      whiskers: () => new WhiskersPanel(this.chartMenuUtils),\n      caps: () => new CapsPanel(this.chartMenuUtils),\n      connectorLine: () => new ConnectorLinePanel(this.chartMenuUtils),\n      seriesItems: () => new SeriesItemsPanel(this.chartMenuUtils),\n      tileSpacing: () => new TileSpacingPanel(this.chartMenuUtils),\n      shape: () => this.initShape(),\n      size: () => this.initSize(\"size\", \"size\"),\n      minSize: () => this.initSize(\"size\", \"minSize\"),\n      maxSize: () => this.initSize(\"maxSize\", \"maxSize\")\n    };\n    this.seriesWidgetMappings = {\n      bar: [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels, shadow],\n      pie: [tooltips, strokeWidth, lineOpacity, fillOpacity, labels, \"sectorLabels\", shadow],\n      donut: [tooltips, strokeWidth, lineOpacity, fillOpacity, labels, \"sectorLabels\", shadow],\n      line: [tooltips, \"lineWidth\", lineDash, lineOpacity, \"markers\", labels],\n      scatter: [tooltips, \"shape\", \"size\", strokeWidth, labels],\n      bubble: [tooltips, \"shape\", \"minSize\", \"maxSize\", strokeWidth, labels],\n      area: [tooltips, \"lineWidth\", lineDash, lineOpacity, fillOpacity, \"markers\", labels, shadow],\n      histogram: [tooltips, \"bins\", strokeWidth, lineDash, lineOpacity, fillOpacity, labels, shadow],\n      \"radial-column\": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels],\n      \"radial-bar\": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels],\n      \"radar-line\": [tooltips, strokeWidth, lineDash, lineOpacity, \"markers\", labels],\n      \"radar-area\": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, \"markers\", labels],\n      nightingale: [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels],\n      \"box-plot\": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, \"whiskers\", \"caps\"],\n      \"range-bar\": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels],\n      \"range-area\": [tooltips, \"lineWidth\", lineDash, lineOpacity, fillOpacity, \"markers\", labels, shadow],\n      treemap: [tooltips, \"tileSpacing\"],\n      sunburst: [tooltips],\n      heatmap: [tooltips, labels, \"lineColor\", \"lineWidth\", lineOpacity],\n      waterfall: [tooltips, \"connectorLine\", \"seriesItems\"]\n    };\n    this.seriesType = options.seriesType;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const {\n      isExpandedOnInit: expanded,\n      chartOptionsService,\n      chartController,\n      registerGroupComponent\n    } = this.options;\n    const seriesGroupParams = {\n      cssIdentifier: \"charts-format-top-level\",\n      direction: \"vertical\",\n      title: this.translate(\"series\"),\n      expanded,\n      suppressEnabledCheckbox: true\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"seriesGroup\">\n            </ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector],\n      { seriesGroup: seriesGroupParams }\n    );\n    registerGroupComponent(this.seriesGroup);\n    this.chartMenuUtils = this.createManagedBean(\n      new ChartMenuParamsFactory(chartOptionsService.getSeriesOptionsProxy(() => this.seriesType))\n    );\n    this.addManagedListeners(chartController, { chartSeriesChartTypeChanged: this.refreshWidgets.bind(this) });\n    this.refreshWidgets();\n  }\n  refreshWidgets() {\n    const { chartController } = this.options;\n    this.destroyActivePanels();\n    const chart = chartController.getChartProxy().getChart();\n    chart.waitForUpdate().then(() => {\n      const componentWasRemoved = !this.isAlive();\n      if (componentWasRemoved) {\n        return;\n      }\n      if (chartController.isComboChart()) {\n        this.updateSeriesType();\n        this.initSeriesSelect();\n      }\n      (this.seriesWidgetMappings[this.seriesType] ?? []).forEach((w) => {\n        const widgetFuncResult = this.widgetFuncs[w]();\n        let widget;\n        if (Array.isArray(widgetFuncResult)) {\n          const comp = this.createBean(widgetFuncResult[0]);\n          widget = comp;\n          widgetFuncResult[1](comp);\n        } else {\n          widget = this.createBean(widgetFuncResult);\n        }\n        this.seriesGroup.addItem(widget);\n        this.activePanels.push(widget);\n      });\n    }).catch((e) => _errorOnce(`chart rendering failed`, e));\n  }\n  initSeriesSelect() {\n    const seriesSelect = this.createBean(\n      new AgSelect8(\n        this.chartMenuUtils.getDefaultSelectParamsWithoutValueParams(\n          \"seriesType\",\n          this.getSeriesSelectOptions(),\n          `${this.seriesType}`,\n          (newValue) => {\n            this.seriesType = newValue;\n            this.refreshWidgets();\n          }\n        )\n      )\n    );\n    this.seriesGroup.addItem(seriesSelect);\n    this.activePanels.push(seriesSelect);\n  }\n  initTooltips() {\n    return new AgToggleButton4(\n      this.chartMenuUtils.addValueParams(\"tooltip.enabled\", {\n        label: this.translate(\"tooltips\"),\n        labelAlignment: \"left\",\n        labelWidth: \"flex\",\n        inputWidth: \"flex\"\n      })\n    );\n  }\n  initLineColor() {\n    return new AgColorPicker(this.chartMenuUtils.getDefaultColorPickerParams(\"stroke\", \"strokeColor\"));\n  }\n  initStrokeWidth(labelKey) {\n    return new AgSlider(this.chartMenuUtils.getDefaultSliderParams(\"strokeWidth\", labelKey, 10));\n  }\n  initLineDash() {\n    return new AgSlider(this.chartMenuUtils.getDefaultSliderParams(\"lineDash\", \"lineDash\", 30, true));\n  }\n  initOpacity(type) {\n    const params = this.chartMenuUtils.getDefaultSliderParams(type, type, 1);\n    params.step = 0.05;\n    return new AgSlider(params);\n  }\n  initLabels() {\n    const isPieChart = isPieChartSeries(this.seriesType);\n    const seriesOptionLabelProperty = isPieChart ? \"calloutLabel\" : \"label\";\n    const labelKey = isPieChart ? \"calloutLabels\" : \"labels\";\n    const labelParams = this.chartMenuUtils.getDefaultFontPanelParams(seriesOptionLabelProperty, labelKey);\n    const fontPanel = new FontPanel(labelParams);\n    const addItems = (labelPanelComp) => {\n      if (isPieChart) {\n        const calloutPanelComp = labelPanelComp.createManagedBean(new CalloutPanel(this.chartMenuUtils));\n        labelPanelComp.addItem(calloutPanelComp);\n        this.activePanels.push(calloutPanelComp);\n      }\n      if (this.seriesType === \"range-bar\") {\n        const options = [\n          { value: \"inside\", text: this.translate(\"inside\") },\n          { value: \"outside\", text: this.translate(\"outside\") }\n        ];\n        const placementSelect = labelPanelComp.createManagedBean(\n          new AgSelect8(\n            this.chartMenuUtils.getDefaultSelectParams(\"label.placement\", \"labelPlacement\", options)\n          )\n        );\n        labelPanelComp.addItem(placementSelect);\n        this.activePanels.push(placementSelect);\n        const paddingSlider = labelPanelComp.createManagedBean(\n          new AgSlider(this.chartMenuUtils.getDefaultSliderParams(\"label.padding\", \"padding\", 200))\n        );\n        labelPanelComp.addItem(paddingSlider);\n        this.activePanels.push(paddingSlider);\n      }\n    };\n    return [fontPanel, addItems];\n  }\n  initSectorLabels() {\n    const sectorParams = this.chartMenuUtils.getDefaultFontPanelParams(\"sectorLabel\", \"sectorLabels\");\n    const fontPanel = new FontPanel(sectorParams);\n    const addItems = (sectorPanelComp) => {\n      const positionRatioParams = this.chartMenuUtils.getDefaultSliderParams(\n        \"sectorLabel.positionRatio\",\n        \"positionRatio\",\n        1\n      );\n      positionRatioParams.step = 0.05;\n      const positionRatioComp = sectorPanelComp.createManagedBean(new AgSlider(positionRatioParams));\n      sectorPanelComp.addItem(positionRatioComp);\n    };\n    return [fontPanel, addItems];\n  }\n  initBins() {\n    const params = this.chartMenuUtils.getDefaultSliderParams(\"binCount\", \"histogramBinCount\", 20);\n    const chartOptions = this.chartMenuUtils.getChartOptions();\n    const value = (chartOptions.getValue(\"bins\") ?? chartOptions.getValue(\"calculatedBins\", true)).length;\n    params.value = `${value}`;\n    params.maxValue = Math.max(value, 20);\n    return new AgSlider(params);\n  }\n  initShape() {\n    return new AgSelect8(\n      this.chartMenuUtils.getDefaultSelectParams(\n        \"shape\",\n        \"shape\",\n        getShapeSelectOptions(this.chartTranslationService)\n      )\n    );\n  }\n  initSize(expression, labelKey) {\n    return new AgSlider(this.chartMenuUtils.getDefaultSliderParams(expression, labelKey, 60));\n  }\n  getSeriesSelectOptions() {\n    const activeSeriesTypes = this.getActiveSeriesTypes();\n    return [\"area\", \"bar\", \"line\"].filter((seriesType) => activeSeriesTypes.includes(seriesType)).map((value) => ({ value, text: this.translate(value) }));\n  }\n  updateSeriesType() {\n    const activeSeriesTypes = this.getActiveSeriesTypes();\n    const invalidSeriesType = !activeSeriesTypes.includes(this.seriesType);\n    if (invalidSeriesType && activeSeriesTypes.length > 0) {\n      this.seriesType = activeSeriesTypes[0];\n    }\n  }\n  getActiveSeriesTypes() {\n    return this.options.chartController.getActiveSeriesChartTypes().map((s) => getSeriesType(s.chartType));\n  }\n  translate(key) {\n    return this.chartTranslationService.translate(key);\n  }\n  destroyActivePanels() {\n    this.activePanels.forEach((panel) => {\n      _removeFromParent6(panel.getGui());\n      this.destroyBean(panel);\n    });\n  }\n  destroy() {\n    this.destroyActivePanels();\n    super.destroy();\n  }\n};\nvar TitlePanel = class extends Component322 {\n  constructor(chartMenuUtils, name, key) {\n    super(\n      /* html */\n      `<div></div>`\n    );\n    this.chartMenuUtils = chartMenuUtils;\n    this.name = name;\n    this.key = key;\n    this.chartOptions = chartMenuUtils.getChartOptions();\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    this.initFontPanel();\n  }\n  hasTitle() {\n    const title = this.chartOptions.getValue(this.key);\n    return title && title.enabled && title.text && title.text.length > 0;\n  }\n  initFontPanel() {\n    const hasTitle = this.hasTitle();\n    const fontPanelParams = {\n      name: this.chartTranslationService.translate(this.name),\n      enabled: hasTitle,\n      suppressEnabledCheckbox: false,\n      chartMenuParamsFactory: this.chartMenuUtils,\n      keyMapper: (key) => `${this.key}.${key}`,\n      onEnableChange: (enabled) => this.onEnableChange(enabled)\n    };\n    this.fontPanel = this.createManagedBean(new FontPanel(fontPanelParams));\n    this.fontPanel.addItem(this.createBean(new AgInputTextField22(this.getTextInputParams())), true);\n    this.fontPanel.addItem(this.createBean(new AgSlider(this.getSpacingSliderParams())));\n    this.getGui().appendChild(this.fontPanel.getGui());\n  }\n  getTextInputParams() {\n    return this.chartMenuUtils.addValueParams(`${this.key}.text`, {\n      label: this.chartTranslationService.translate(\"title\"),\n      labelAlignment: \"top\"\n    });\n  }\n  getSpacingSliderParams() {\n    return this.chartMenuUtils.getDefaultSliderParams(`${this.key}.spacing`, \"spacing\", 100);\n  }\n  onEnableChange(enabled) {\n    this.chartOptions.setValue(`${this.key}.enabled`, enabled);\n  }\n};\nvar ChartTitlePanel = class extends TitlePanel {\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.chartMenuService = beans.chartMenuService;\n  }\n  postConstruct() {\n    this.titlePlaceholder = this.chartTranslationService.translate(\"titlePlaceholder\");\n    super.postConstruct();\n    this.addManagedEventListeners({\n      chartTitleEdit: () => {\n        this.fontPanel.setEnabled(this.hasTitle());\n      }\n    });\n  }\n  getTextInputParams() {\n    const params = super.getTextInputParams();\n    if (this.shouldOverrideTextWithPlaceholder(params.value)) {\n      params.value = this.titlePlaceholder;\n    }\n    return params;\n  }\n  getSpacingSliderParams() {\n    const params = super.getSpacingSliderParams();\n    params.value = \"10\";\n    return params;\n  }\n  onEnableChange(enabled) {\n    if (this.chartMenuService.doesChartToolbarExist()) {\n      const topPadding = this.chartOptions.getValue(\"padding.top\");\n      this.chartOptions.setValue(\"padding.top\", enabled ? topPadding - 20 : topPadding + 20);\n    }\n    this.chartOptions.setValue(`${this.key}.enabled`, enabled);\n    const currentTitleText = this.chartOptions.getValue(`${this.key}.text`);\n    if (enabled && this.shouldOverrideTextWithPlaceholder(currentTitleText)) {\n      this.chartOptions.setValue(`${this.key}.text`, this.titlePlaceholder);\n    }\n  }\n  shouldOverrideTextWithPlaceholder(currentTitleText) {\n    return currentTitleText === \"Title\" || currentTitleText?.trim().length === 0;\n  }\n};\nvar TitlesPanel = class extends Component332 {\n  constructor(options) {\n    super();\n    this.options = options;\n    this.titleGroup = RefPlaceholder17;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    const {\n      chartMenuParamsFactory,\n      chartAxisMenuParamsFactory,\n      chartOptionsService,\n      seriesType,\n      isExpandedOnInit: expanded = false,\n      registerGroupComponent\n    } = this.options;\n    const axisTitlePanels = [];\n    if (isCartesian(seriesType)) {\n      const createAxisParamsFactory = (axisType) => this.createManagedBean(\n        new ChartMenuParamsFactory(chartOptionsService.getCartesianAxisThemeOverridesProxy(axisType))\n      );\n      axisTitlePanels.push(\n        this.createManagedBean(new TitlePanel(createAxisParamsFactory(\"xAxis\"), \"horizontalAxisTitle\", \"title\"))\n      );\n      axisTitlePanels.push(\n        this.createManagedBean(new TitlePanel(createAxisParamsFactory(\"yAxis\"), \"verticalAxisTitle\", \"title\"))\n      );\n    } else if (isPolar(seriesType)) {\n      axisTitlePanels.push(\n        this.createManagedBean(new TitlePanel(chartAxisMenuParamsFactory, \"polarAxisTitle\", \"title\"))\n      );\n    }\n    const titleGroupParams = {\n      cssIdentifier: \"charts-format-top-level\",\n      direction: \"vertical\",\n      title: this.chartTranslationService.translate(\"chartTitles\"),\n      expanded,\n      suppressEnabledCheckbox: true,\n      items: [\n        this.createManagedBean(new ChartTitlePanel(chartMenuParamsFactory, \"chartTitle\", \"title\")),\n        this.createManagedBean(new TitlePanel(chartMenuParamsFactory, \"chartSubtitle\", \"subtitle\")),\n        ...axisTitlePanels\n      ]\n    };\n    this.setTemplate(\n      /* html */\n      `<div>\n            <ag-group-component data-ref=\"titleGroup\"></ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector],\n      { titleGroup: titleGroupParams }\n    );\n    registerGroupComponent(this.titleGroup);\n  }\n};\nvar DefaultFormatPanelDef = {\n  groups: [{ type: \"chart\" }, { type: \"titles\" }, { type: \"legend\" }, { type: \"series\" }, { type: \"axis\" }]\n};\nvar FormatPanel = class extends Component34 {\n  constructor(chartMenuContext) {\n    super(\n      /* html */\n      `<div class=\"ag-chart-format-wrapper\"></div>`\n    );\n    this.chartMenuContext = chartMenuContext;\n  }\n  postConstruct() {\n    this.groupExpansionFeature = this.createManagedBean(new GroupExpansionFeature(this.getGui()));\n    this.chartPanelFeature = this.createManagedBean(\n      new ChartPanelFeature(\n        this.chartMenuContext.chartController,\n        this.getGui(),\n        \"ag-chart-format-section\",\n        (_chartType, seriesType) => this.createPanels(seriesType)\n      )\n    );\n    this.chartPanelFeature.refreshPanels();\n  }\n  createPanels(seriesType) {\n    let panelExpandedOnInit = false;\n    this.getFormatPanelDef().groups?.forEach(({ type: group, isOpen: isExpandedOnInit = false }) => {\n      if (!this.isGroupPanelShownInSeries(group, seriesType)) {\n        return;\n      }\n      if (isExpandedOnInit) {\n        if (panelExpandedOnInit) {\n          _warnOnce10(\n            `As of v32, only one charts customize panel group can be expanded at a time. '${group}' will not be expanded.`\n          );\n        }\n        panelExpandedOnInit = true;\n      }\n      const registerGroupComponent = (groupComponent) => this.groupExpansionFeature.addGroupComponent(groupComponent);\n      const opts = {\n        ...this.chartMenuContext,\n        isExpandedOnInit,\n        seriesType,\n        registerGroupComponent\n      };\n      switch (group) {\n        case \"chart\":\n          this.chartPanelFeature.addComponent(new ChartPanel(opts));\n          break;\n        case \"titles\":\n          this.chartPanelFeature.addComponent(new TitlesPanel(opts));\n          break;\n        case \"legend\":\n          this.chartPanelFeature.addComponent(new LegendPanel(opts));\n          break;\n        case \"axis\":\n          if (isPolar(seriesType)) {\n            this.chartPanelFeature.addComponent(new PolarAxisPanel(opts));\n          } else if (isCartesian(seriesType)) {\n            this.chartPanelFeature.addComponent(new CartesianAxisPanel(\"xAxis\", opts));\n            this.chartPanelFeature.addComponent(new CartesianAxisPanel(\"yAxis\", opts));\n          }\n          break;\n        case \"horizontalAxis\":\n          this.chartPanelFeature.addComponent(new CartesianAxisPanel(\"xAxis\", opts));\n          break;\n        case \"verticalAxis\":\n          this.chartPanelFeature.addComponent(new CartesianAxisPanel(\"yAxis\", opts));\n          break;\n        case \"series\":\n          this.chartPanelFeature.addComponent(new SeriesPanel(opts));\n          break;\n        case \"navigator\":\n          _warnOnce10(\n            `'navigator' is now displayed in the charts advanced settings instead of the customize panel, and this setting will be ignored.`\n          );\n          break;\n        default:\n          _warnOnce10(`Invalid charts customize panel group name supplied: '${group}'`);\n      }\n    });\n  }\n  getFormatPanelDef() {\n    const userProvidedFormatPanelDef = this.gos.get(\"chartToolPanelsDef\")?.formatPanel;\n    return userProvidedFormatPanelDef ? userProvidedFormatPanelDef : DefaultFormatPanelDef;\n  }\n  isGroupPanelShownInSeries(group, seriesType) {\n    return [\"chart\", \"titles\", \"legend\", \"series\"].includes(group) || isCartesian(seriesType) && [\"axis\", \"horizontalAxis\", \"verticalAxis\"].includes(group) || isPolar(seriesType) && group === \"axis\";\n  }\n};\nfunction createColumnRects(params) {\n  const { stacked, size, padding, xScalePadding, xScaleDomain, yScaleDomain } = params;\n  const xScale = new _Scene.BandScale();\n  xScale.domain = xScaleDomain;\n  xScale.range = [padding, size - padding];\n  xScale.paddingInner = xScalePadding;\n  xScale.paddingOuter = xScalePadding;\n  const yScale = new _Scene.LinearScale();\n  yScale.domain = yScaleDomain;\n  yScale.range = [size - padding, padding];\n  const createBars = (series, xScale2, yScale2) => {\n    return series.map((datum, i) => {\n      const top = yScale2.convert(datum);\n      const rect = new _Scene.Rect();\n      rect.x = xScale2.convert(i);\n      rect.y = top;\n      rect.width = xScale2.bandwidth;\n      rect.height = yScale2.convert(0) - top;\n      rect.strokeWidth = 0;\n      rect.crisp = true;\n      return rect;\n    });\n  };\n  if (stacked) {\n    return params.data.map((d) => createBars(d, xScale, yScale));\n  }\n  return createBars(params.data, xScale, yScale);\n}\nfunction createLinePaths(root, data, size, padding) {\n  const xScale = new _Scene.LinearScale();\n  xScale.domain = [0, 4];\n  xScale.range = [padding, size - padding];\n  const yScale = new _Scene.LinearScale();\n  yScale.domain = [0, 10];\n  yScale.range = [size - padding, padding];\n  const lines = data.map((series) => {\n    const line = new _Scene.Path();\n    line.strokeWidth = 3;\n    line.lineCap = \"round\";\n    line.fill = void 0;\n    series.forEach((datum, i) => {\n      line.path[i > 0 ? \"lineTo\" : \"moveTo\"](xScale.convert(i), yScale.convert(datum));\n    });\n    return line;\n  });\n  const linesGroup = new _Scene.Group();\n  linesGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding * 2, size - padding * 2));\n  linesGroup.append(lines);\n  root.append(linesGroup);\n  return lines;\n}\nfunction createPolarPaths(root, data, size, radius, innerRadius, markerSize = 0) {\n  const angleScale = new _Scene.LinearScale();\n  angleScale.domain = [0, 7];\n  angleScale.range = [-Math.PI, Math.PI].map((angle) => angle + Math.PI / 2);\n  const radiusScale = new _Scene.LinearScale();\n  radiusScale.domain = [0, 10];\n  radiusScale.range = [radius, innerRadius];\n  const markers = [];\n  const center = size / 2;\n  const paths = data.map((series) => {\n    const path = new _Scene.Path();\n    path.strokeWidth = 1;\n    path.strokeOpacity = 0.5;\n    path.lineCap = \"round\";\n    path.fill = void 0;\n    path.fillOpacity = 0.8;\n    series.forEach((datum, i) => {\n      const angle = angleScale.convert(i);\n      const r = radius + innerRadius - radiusScale.convert(datum);\n      const x = r * Math.cos(angle) + center;\n      const y = r * Math.sin(angle) + center;\n      path.path[i > 0 ? \"lineTo\" : \"moveTo\"](x, y);\n      if (markerSize > 0) {\n        const marker = new _Scene.Circle();\n        marker.x = x;\n        marker.y = y;\n        marker.size = markerSize;\n        markers.push(marker);\n      }\n    });\n    path.path.closePath();\n    return path;\n  });\n  const group = new _Scene.Group();\n  group.append([...paths, ...markers]);\n  root.append(group);\n  return { paths, markers };\n}\nfunction accumulateData(data) {\n  let [min, max] = [Infinity, -Infinity];\n  const processedData = data.reduce((acc, curr, currIndex) => {\n    const previous = currIndex > 0 ? acc[currIndex - 1] : void 0;\n    acc[currIndex] ?? (acc[currIndex] = []);\n    const current = acc[currIndex];\n    curr.forEach((datum, datumIndex) => {\n      if (previous) {\n        datum += previous[datumIndex];\n      }\n      current[datumIndex] = datum;\n      if (current[datumIndex] < min) {\n        min = current[datumIndex];\n      }\n      if (current[datumIndex] > max) {\n        max = current[datumIndex];\n      }\n    });\n    return acc;\n  }, []);\n  return { processedData, min, max };\n}\nvar CANVAS_CLASS = \"ag-chart-mini-thumbnail-canvas\";\nvar ERROR_MESSAGE = \"AG Grid - chart update failed\";\nvar MiniChart = class extends Component35 {\n  constructor(container, tooltipName) {\n    super();\n    this.tooltipName = tooltipName;\n    this.size = 58;\n    this.padding = 5;\n    this.root = new _Scene2.Group();\n    const scene = new _Scene2.Scene({\n      width: this.size,\n      height: this.size\n    });\n    scene.canvas.element.classList.add(CANVAS_CLASS);\n    scene.setRoot(this.root);\n    scene.setContainer(container);\n    this.scene = scene;\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    this.scene.canvas.element.title = this.chartTranslationService.translate(this.tooltipName);\n    this.scene.render().catch((e) => {\n      _errorOnce2(`${ERROR_MESSAGE}`, e);\n    });\n  }\n};\nvar MiniChartWithAxes = class extends MiniChart {\n  constructor(container, tooltipName) {\n    super(container, tooltipName);\n    this.stroke = \"gray\";\n    this.axisOvershoot = 3;\n  }\n  postConstruct() {\n    const size = this.size;\n    const padding = this.padding;\n    const leftAxis = new _Scene3.Line();\n    leftAxis.x1 = padding;\n    leftAxis.y1 = padding;\n    leftAxis.x2 = padding;\n    leftAxis.y2 = size - padding + this.axisOvershoot;\n    leftAxis.stroke = this.stroke;\n    const bottomAxis = new _Scene3.Line();\n    bottomAxis.x1 = padding - this.axisOvershoot + 1;\n    bottomAxis.y1 = size - padding;\n    bottomAxis.x2 = size - padding + 1;\n    bottomAxis.y2 = size - padding;\n    bottomAxis.stroke = this.stroke;\n    const root = this.root;\n    root.append(leftAxis);\n    root.append(bottomAxis);\n    super.postConstruct();\n  }\n};\nvar MiniColumn = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"groupedColumnTooltip\");\n    this.columnData = [2, 3, 4];\n    const { root, columnData, size, padding } = this;\n    this.columns = createColumnRects({\n      stacked: false,\n      root,\n      data: columnData,\n      size,\n      padding,\n      xScaleDomain: [0, 1, 2],\n      yScaleDomain: [0, 4],\n      xScalePadding: 0.3\n    });\n    root.append(this.columns);\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.columns.forEach((column, i) => {\n      column.fill = fills[i];\n      column.stroke = strokes[i];\n    });\n  }\n};\nMiniColumn.chartType = \"groupedColumn\";\nvar _MiniStackedColumn = class _MiniStackedColumn2 extends MiniChartWithAxes {\n  constructor(container, fills, strokes, _themeTemplateParameters, _isCustomTheme, data = _MiniStackedColumn2.data, yScaleDomain = [0, 16], tooltipName = \"stackedColumnTooltip\") {\n    super(container, tooltipName);\n    const { root, size, padding } = this;\n    this.stackedColumns = createColumnRects({\n      stacked: true,\n      root,\n      data,\n      size,\n      padding,\n      xScaleDomain: [0, 1, 2],\n      yScaleDomain,\n      xScalePadding: 0.3\n    });\n    root.append([].concat.apply([], this.stackedColumns));\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.stackedColumns.forEach(\n      (series, i) => series.forEach((column) => {\n        column.fill = fills[i];\n        column.stroke = strokes[i];\n      })\n    );\n  }\n};\n_MiniStackedColumn.chartType = \"stackedColumn\";\n_MiniStackedColumn.data = [\n  [8, 12, 16],\n  [6, 9, 12],\n  [2, 3, 4]\n];\nvar MiniStackedColumn = _MiniStackedColumn;\nvar _MiniNormalizedColumn = class _MiniNormalizedColumn2 extends MiniStackedColumn {\n  constructor(container, fills, strokes, themeTemplateParameters, isCustomTheme) {\n    super(\n      container,\n      fills,\n      strokes,\n      themeTemplateParameters,\n      isCustomTheme,\n      _MiniNormalizedColumn2.data,\n      [0, 10],\n      \"normalizedColumnTooltip\"\n    );\n  }\n};\n_MiniNormalizedColumn.chartType = \"normalizedColumn\";\n_MiniNormalizedColumn.data = [\n  [10, 10, 10],\n  [6, 7, 8],\n  [2, 4, 6]\n];\nvar MiniNormalizedColumn = _MiniNormalizedColumn;\nvar MiniBar = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"groupedBarTooltip\");\n    const padding = this.padding;\n    const size = this.size;\n    const data = [2, 3, 4];\n    const yScale = new _Scene4.BandScale();\n    yScale.domain = [0, 1, 2];\n    yScale.range = [padding, size - padding];\n    yScale.paddingInner = 0.3;\n    yScale.paddingOuter = 0.3;\n    const xScale = new _Scene4.LinearScale();\n    xScale.domain = [0, 4];\n    xScale.range = [size - padding, padding];\n    const bottom = xScale.convert(0);\n    const height = yScale.bandwidth;\n    this.bars = data.map((datum, i) => {\n      const rect = new _Scene4.Rect();\n      rect.x = padding;\n      rect.y = yScale.convert(i);\n      rect.width = bottom - xScale.convert(datum);\n      rect.height = height;\n      rect.strokeWidth = 0;\n      rect.crisp = true;\n      return rect;\n    });\n    this.updateColors(fills, strokes);\n    this.root.append(this.bars);\n  }\n  updateColors(fills, strokes) {\n    this.bars.forEach((bar, i) => {\n      bar.fill = fills[i];\n      bar.stroke = strokes[i];\n    });\n  }\n};\nMiniBar.chartType = \"groupedBar\";\nvar _MiniStackedBar = class _MiniStackedBar2 extends MiniChartWithAxes {\n  constructor(container, fills, strokes, _themeTemplateParameters, _isCustomTheme, data = _MiniStackedBar2.data, xScaleDomain = [0, 16], tooltipName = \"stackedBarTooltip\") {\n    super(container, tooltipName);\n    const size = this.size;\n    const padding = this.padding;\n    const yScale = new _Scene5.BandScale();\n    yScale.domain = [0, 1, 2];\n    yScale.range = [padding, size - padding];\n    yScale.paddingInner = 0.3;\n    yScale.paddingOuter = 0.3;\n    const xScale = new _Scene5.LinearScale();\n    xScale.domain = xScaleDomain;\n    xScale.range = [size - padding, padding];\n    const bottom = xScale.convert(0);\n    const height = yScale.bandwidth;\n    this.bars = data.map(\n      (series) => series.map((datum, i) => {\n        const rect = new _Scene5.Rect();\n        rect.x = padding;\n        rect.y = yScale.convert(i);\n        rect.width = bottom - xScale.convert(datum);\n        rect.height = height;\n        rect.strokeWidth = 0;\n        rect.crisp = true;\n        return rect;\n      })\n    );\n    this.updateColors(fills, strokes);\n    this.root.append([].concat.apply([], this.bars));\n  }\n  updateColors(fills, strokes) {\n    this.bars.forEach(\n      (series, i) => series.forEach((bar) => {\n        bar.fill = fills[i];\n        bar.stroke = strokes[i];\n      })\n    );\n  }\n};\n_MiniStackedBar.chartType = \"stackedBar\";\n_MiniStackedBar.data = [\n  [8, 12, 16],\n  [6, 9, 12],\n  [2, 3, 4]\n];\nvar MiniStackedBar = _MiniStackedBar;\nvar _MiniNormalizedBar = class _MiniNormalizedBar2 extends MiniStackedBar {\n  constructor(container, fills, strokes, themeTemplateParameters, isCustomTheme) {\n    super(\n      container,\n      fills,\n      strokes,\n      themeTemplateParameters,\n      isCustomTheme,\n      _MiniNormalizedBar2.data,\n      [0, 10],\n      \"normalizedBarTooltip\"\n    );\n  }\n};\n_MiniNormalizedBar.chartType = \"normalizedBar\";\n_MiniNormalizedBar.data = [\n  [10, 10, 10],\n  [6, 7, 8],\n  [2, 4, 6]\n];\nvar MiniNormalizedBar = _MiniNormalizedBar;\nvar toRadians = _Scene6.toRadians;\nvar MiniDonut = class extends MiniChart {\n  constructor(container, fills, strokes, _themeTemplateParameters, _isCustomTheme, centerRadiusScaler = 0.6, tooltipName = \"donutTooltip\") {\n    super(container, tooltipName);\n    const radius = (this.size - this.padding * 2) / 2;\n    const center = radius + this.padding;\n    const angles = [\n      [toRadians(-90), toRadians(30)],\n      [toRadians(30), toRadians(120)],\n      [toRadians(120), toRadians(180)],\n      [toRadians(180), toRadians(210)],\n      [toRadians(210), toRadians(240)],\n      [toRadians(240), toRadians(270)]\n    ];\n    this.sectors = angles.map(([startAngle, endAngle]) => {\n      const sector = new _Scene6.Sector();\n      sector.centerX = center;\n      sector.centerY = center;\n      sector.innerRadius = radius * centerRadiusScaler;\n      sector.outerRadius = radius;\n      sector.startAngle = startAngle;\n      sector.endAngle = endAngle;\n      sector.stroke = void 0;\n      sector.strokeWidth = 0;\n      sector.inset = 0.75;\n      return sector;\n    });\n    this.updateColors(fills, strokes);\n    this.root.append(this.sectors);\n  }\n  updateColors(fills, strokes) {\n    this.sectors.forEach((sector, i) => {\n      sector.fill = fills[i % fills.length];\n      sector.stroke = strokes[i % strokes.length];\n    });\n  }\n};\nMiniDonut.chartType = \"donut\";\nvar MiniPie = class extends MiniDonut {\n  constructor(container, fills, strokes, themeTemplateParameters, isCustomTheme) {\n    super(container, fills, strokes, themeTemplateParameters, isCustomTheme, 0, \"pieTooltip\");\n  }\n};\nMiniPie.chartType = \"pie\";\nvar MiniLine = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"lineTooltip\");\n    this.data = [\n      [9, 7, 8, 5, 6],\n      [5, 6, 3, 4, 1],\n      [1, 3, 4, 8, 7]\n    ];\n    this.lines = createLinePaths(this.root, this.data, this.size, this.padding);\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.lines.forEach((line, i) => {\n      line.stroke = fills[i];\n    });\n  }\n};\nMiniLine.chartType = \"line\";\nvar MiniScatter = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"scatterTooltip\");\n    const size = this.size;\n    const padding = this.padding;\n    const data = [\n      [\n        [0.3, 3],\n        [1.1, 0.9],\n        [2, 0.4],\n        [3.4, 2.4]\n      ],\n      [\n        [0, 0.3],\n        [1, 2],\n        [2.4, 1.4],\n        [3, 0]\n      ]\n    ];\n    const xScale = new _Scene7.LinearScale();\n    xScale.domain = [-0.5, 4];\n    xScale.range = [padding * 2, size - padding];\n    const yScale = new _Scene7.LinearScale();\n    yScale.domain = [-0.5, 3.5];\n    yScale.range = [size - padding, padding];\n    const points = [];\n    data.forEach((series) => {\n      series.forEach(([x, y]) => {\n        const arc = new _Scene7.Arc();\n        arc.strokeWidth = 0;\n        arc.centerX = xScale.convert(x);\n        arc.centerY = yScale.convert(y);\n        arc.radius = 2.5;\n        points.push(arc);\n      });\n    });\n    this.points = points;\n    this.updateColors(fills, strokes);\n    const pointsGroup = new _Scene7.Group();\n    pointsGroup.setClipRect(new _Scene7.BBox(padding, padding, size - padding * 2, size - padding * 2));\n    pointsGroup.append(this.points);\n    this.root.append(pointsGroup);\n  }\n  updateColors(fills, strokes) {\n    this.points.forEach((line, i) => {\n      line.stroke = strokes[i % strokes.length];\n      line.fill = fills[i % fills.length];\n    });\n  }\n};\nMiniScatter.chartType = \"scatter\";\nvar MiniBubble = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"bubbleTooltip\");\n    const size = this.size;\n    const padding = this.padding;\n    const data = [\n      [\n        [0.1, 0.3, 5],\n        [0.5, 0.4, 7],\n        [0.2, 0.8, 7]\n      ],\n      [\n        [0.8, 0.7, 5],\n        [0.7, 0.3, 9]\n      ]\n    ];\n    const xScale = new _Scene8.LinearScale();\n    xScale.domain = [0, 1];\n    xScale.range = [padding * 2, size - padding];\n    const yScale = new _Scene8.LinearScale();\n    yScale.domain = [0, 1];\n    yScale.range = [size - padding, padding];\n    const points = [];\n    data.forEach((series) => {\n      series.forEach(([x, y, radius]) => {\n        const arc = new _Scene8.Arc();\n        arc.strokeWidth = 0;\n        arc.centerX = xScale.convert(x);\n        arc.centerY = yScale.convert(y);\n        arc.radius = radius;\n        arc.fillOpacity = 0.7;\n        points.push(arc);\n      });\n    });\n    this.points = points;\n    this.updateColors(fills, strokes);\n    const pointsGroup = new _Scene8.Group();\n    pointsGroup.setClipRect(new _Scene8.BBox(padding, padding, size - padding * 2, size - padding * 2));\n    pointsGroup.append(this.points);\n    this.root.append(pointsGroup);\n  }\n  updateColors(fills, strokes) {\n    this.points.forEach((line, i) => {\n      line.stroke = strokes[i % strokes.length];\n      line.fill = fills[i % fills.length];\n    });\n  }\n};\nMiniBubble.chartType = \"bubble\";\nvar _MiniArea = class _MiniArea2 extends MiniChartWithAxes {\n  constructor(container, fills, strokes, _themeTemplateParameters, _isCustomTheme, data = _MiniArea2.data) {\n    super(container, \"groupedAreaTooltip\");\n    const size = this.size;\n    const padding = this.padding;\n    const xScale = new _Scene9.BandScale();\n    xScale.domain = [0, 1, 2];\n    xScale.paddingInner = 1;\n    xScale.paddingOuter = 0;\n    xScale.range = [padding + 0.5, size - padding - 0.5];\n    const yScale = new _Scene9.LinearScale();\n    yScale.domain = [0, 6];\n    yScale.range = [size - padding + 0.5, padding];\n    const xCount = data.length;\n    const last = xCount * 2 - 1;\n    const pathData = [];\n    const bottomY = yScale.convert(0);\n    data.forEach((datum, i) => {\n      const x = xScale.convert(i);\n      datum.forEach((yDatum, j) => {\n        const y = yScale.convert(yDatum);\n        const points = pathData[j] || (pathData[j] = []);\n        points[i] = {\n          x,\n          y\n        };\n        points[last - i] = {\n          x,\n          y: bottomY\n        };\n      });\n    });\n    this.areas = pathData.reverse().map((points) => {\n      const area = new _Scene9.Path();\n      area.strokeWidth = 1;\n      area.strokeOpacity = 0.75;\n      area.fillOpacity = 0.7;\n      const path = area.path;\n      path.clear();\n      points.forEach((point, i) => path[i > 0 ? \"lineTo\" : \"moveTo\"](point.x, point.y));\n      path.closePath();\n      return area;\n    });\n    this.updateColors(fills, strokes);\n    this.root.append(this.areas);\n  }\n  updateColors(fills, strokes) {\n    this.areas.forEach((area, i) => {\n      area.fill = fills[i];\n      area.stroke = strokes[i];\n    });\n  }\n};\n_MiniArea.chartType = \"area\";\n_MiniArea.data = [\n  [1, 3, 5],\n  [2, 6, 4],\n  [5, 3, 1]\n];\nvar MiniArea = _MiniArea;\nvar _MiniStackedArea = class _MiniStackedArea2 extends MiniChartWithAxes {\n  constructor(container, fills, strokes, _themeTemplateParameters, _isCustomTheme, data = _MiniStackedArea2.data, tooltipName = \"stackedAreaTooltip\") {\n    super(container, tooltipName);\n    const size = this.size;\n    const padding = this.padding;\n    const xScale = new _Scene10.BandScale();\n    xScale.domain = [0, 1, 2];\n    xScale.paddingInner = 1;\n    xScale.paddingOuter = 0;\n    xScale.range = [padding + 0.5, size - padding - 0.5];\n    const yScale = new _Scene10.LinearScale();\n    yScale.domain = [0, 16];\n    yScale.range = [size - padding + 0.5, padding + 0.5];\n    const xCount = data.length;\n    const last = xCount * 2 - 1;\n    const pathData = [];\n    data.forEach((datum, i) => {\n      const x = xScale.convert(i);\n      let total = 0;\n      datum.forEach((yDatum, j) => {\n        const y = yScale.convert(total + yDatum);\n        const points = pathData[j] || (pathData[j] = []);\n        points[i] = {\n          x,\n          y\n        };\n        points[last - i] = {\n          x,\n          y: yScale.convert(total)\n          // bottom y\n        };\n        total += yDatum;\n      });\n    });\n    this.areas = pathData.map((points) => {\n      const area = new _Scene10.Path();\n      area.strokeWidth = 0;\n      const path = area.path;\n      path.clear();\n      points.forEach((point, i) => path[i > 0 ? \"lineTo\" : \"moveTo\"](point.x, point.y));\n      path.closePath();\n      return area;\n    });\n    this.updateColors(fills, strokes);\n    this.root.append(this.areas);\n  }\n  updateColors(fills, strokes) {\n    this.areas.forEach((area, i) => {\n      area.fill = fills[i];\n      area.stroke = strokes[i];\n    });\n  }\n};\n_MiniStackedArea.chartType = \"stackedArea\";\n_MiniStackedArea.data = [\n  [2, 3, 2],\n  [3, 6, 5],\n  [6, 2, 2]\n];\nvar MiniStackedArea = _MiniStackedArea;\nvar _MiniNormalizedArea = class _MiniNormalizedArea2 extends MiniStackedArea {\n  constructor(container, fills, strokes, themeTemplateParameters, isCustomTheme, data = _MiniNormalizedArea2.data) {\n    super(container, fills, strokes, themeTemplateParameters, isCustomTheme, data, \"normalizedAreaTooltip\");\n  }\n};\n_MiniNormalizedArea.chartType = \"normalizedArea\";\n_MiniNormalizedArea.data = MiniStackedArea.data.map((stack) => {\n  const sum = stack.reduce((p, c) => p + c, 0);\n  return stack.map((v) => v / sum * 16);\n});\nvar MiniNormalizedArea = _MiniNormalizedArea;\nvar MiniHistogram = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"histogramTooltip\");\n    const padding = this.padding;\n    const size = this.size;\n    const data = [2, 5, 11, 13, 10, 6, 1];\n    const xScale = new _Scene11.LinearScale();\n    xScale.domain = [0, data.length];\n    xScale.range = [padding, size - padding];\n    const yScale = new _Scene11.LinearScale();\n    yScale.domain = [0, data.reduce((a, b) => Math.max(a, b), 0)];\n    yScale.range = [size - padding, padding];\n    const bottom = yScale.convert(0);\n    this.bars = data.map((datum, i) => {\n      const top = yScale.convert(datum);\n      const left = xScale.convert(i);\n      const right = xScale.convert(i + 1);\n      const rect = new _Scene11.Rect();\n      rect.x = left;\n      rect.y = top;\n      rect.width = right - left;\n      rect.height = bottom - top;\n      rect.strokeWidth = 1;\n      rect.strokeOpacity = 0.75;\n      rect.crisp = true;\n      return rect;\n    });\n    this.updateColors(fills, strokes);\n    this.root.append(this.bars);\n  }\n  updateColors([fill], [stroke]) {\n    this.bars.forEach((bar) => {\n      bar.fill = fill;\n      bar.stroke = stroke;\n    });\n  }\n};\nMiniHistogram.chartType = \"histogram\";\nvar MiniChartWithPolarAxes = class extends MiniChart {\n  constructor(container, tooltipName) {\n    super(container, tooltipName);\n    this.stroke = \"gray\";\n    this.showRadiusAxisLine = true;\n    this.showAngleAxisLines = true;\n  }\n  postConstruct() {\n    const size = this.size;\n    const padding = this.padding;\n    const combinedPadding = padding * 2;\n    const axisLineRadius = (size - combinedPadding) / 2;\n    const gridRadii = this.showAngleAxisLines ? [axisLineRadius, axisLineRadius * 0.8, axisLineRadius * 0.6, axisLineRadius * 0.4] : [];\n    const radiusAxisLine = new _Scene12.Line();\n    radiusAxisLine.x1 = size / 2;\n    radiusAxisLine.y1 = padding;\n    radiusAxisLine.x2 = size / 2;\n    radiusAxisLine.y2 = size - padding - axisLineRadius - gridRadii[gridRadii.length - 1];\n    radiusAxisLine.stroke = this.stroke;\n    radiusAxisLine.strokeOpacity = 0.5;\n    radiusAxisLine.fill = void 0;\n    radiusAxisLine.visible = this.showRadiusAxisLine;\n    const x = padding + axisLineRadius;\n    this.gridLines = gridRadii.map((radius, index) => {\n      const gridLine = new _Scene12.Path();\n      gridLine.path.arc(x, x, radius, 0, 2 * Math.PI);\n      gridLine.strokeWidth = 1;\n      gridLine.stroke = this.stroke;\n      gridLine.strokeOpacity = index === 0 ? 0.5 : 0.2;\n      gridLine.fill = void 0;\n      return gridLine;\n    });\n    const root = this.root;\n    root.append(radiusAxisLine);\n    if (this.gridLines.length > 0)\n      root.append(this.gridLines);\n    super.postConstruct();\n  }\n};\nvar MiniRadialColumn = class extends MiniChartWithPolarAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"radialColumnTooltip\");\n    this.data = [\n      [6, 8, 10, 2, 6, 5],\n      [4, 4, 3, 6, 4, 4],\n      [5, 4, 2, 9, 8, 9]\n    ];\n    this.showRadiusAxisLine = false;\n    const { padding, size, data } = this;\n    const radius = (size - padding * 2) / 2;\n    const innerRadiusRatio = 0.4;\n    const axisInnerRadius = radius * innerRadiusRatio;\n    const angleScale = new _Scene13.BandScale();\n    angleScale.domain = data[0].map((_, index) => index);\n    angleScale.range = [0, 2 * Math.PI];\n    angleScale.paddingInner = 0;\n    angleScale.paddingOuter = 0;\n    const bandwidth = angleScale.bandwidth * 0.7;\n    const { processedData, max } = accumulateData(data);\n    const radiusScale = new _Scene13.LinearScale();\n    radiusScale.domain = [0, max];\n    radiusScale.range = [axisInnerRadius, radius];\n    const center = this.size / 2;\n    this.series = processedData.map((series, seriesIndex) => {\n      const firstSeries = seriesIndex === 0;\n      const previousSeries = firstSeries ? void 0 : processedData[seriesIndex - 1];\n      const seriesGroup = new _Scene13.TranslatableGroup({ zIndex: 1e6 });\n      const seriesColumns = series.map((datum, i) => {\n        const previousDatum = previousSeries?.[i];\n        const outerRadius = radiusScale.convert(datum);\n        const innerRadius = radiusScale.convert(previousDatum ?? 0);\n        const startAngle = angleScale.convert(i);\n        const endAngle = startAngle + bandwidth;\n        const columnWidth = _Scene13.getRadialColumnWidth(startAngle, endAngle, radius, 0.5, 0.5);\n        const column = new _Scene13.RadialColumnShape();\n        column.columnWidth = columnWidth;\n        column.innerRadius = innerRadius;\n        column.outerRadius = outerRadius;\n        column.startAngle = startAngle;\n        column.endAngle = endAngle;\n        column.isBeveled = true;\n        column.axisInnerRadius = axisInnerRadius;\n        column.axisOuterRadius = radius;\n        column.stroke = void 0;\n        column.strokeWidth = 0;\n        return column;\n      });\n      seriesGroup.append(seriesColumns);\n      seriesGroup.translationX = center;\n      seriesGroup.translationY = center;\n      return seriesGroup;\n    });\n    this.root.append(this.series);\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.series.forEach((group, i) => {\n      for (const sector of group.children()) {\n        sector.fill = fills[i % fills.length];\n        sector.stroke = strokes[i % strokes.length];\n      }\n    });\n  }\n};\nMiniRadialColumn.chartType = \"radialColumn\";\nvar MiniRadialBar = class extends MiniChartWithPolarAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"radialBarTooltip\");\n    this.data = [\n      [6, 8, 10],\n      [4, 4, 3],\n      [5, 4, 2]\n    ];\n    this.showRadiusAxisLine = false;\n    const radius = (this.size - this.padding) / 2;\n    const innerRadiusRatio = 0.4;\n    const innerRadius = radius * innerRadiusRatio;\n    const radiusScale = new _Scene14.BandScale();\n    radiusScale.domain = this.data[0].map((_, index) => index);\n    radiusScale.range = [innerRadius, radius];\n    radiusScale.paddingInner = 0.5;\n    radiusScale.paddingOuter = 0;\n    const bandwidth = radiusScale.bandwidth;\n    const { processedData, max } = accumulateData(this.data);\n    const angleScale = new _Scene14.LinearScale();\n    angleScale.domain = [0, Math.ceil(max * 1.5)];\n    const start = 3 / 2 * Math.PI;\n    const end = start + 2 * Math.PI;\n    angleScale.range = [start, end];\n    const center = this.size / 2;\n    this.series = processedData.map((series, index) => {\n      const previousSeries = index < 0 ? void 0 : processedData[index - 1];\n      const seriesGroup = new _Scene14.Group({ zIndex: 1e6 });\n      const seriesSectors = series.map((datum, i) => {\n        const previousDatum = previousSeries?.[i] ?? 0;\n        const outerRadius = radiusScale.convert(i);\n        const innerRadius2 = outerRadius - bandwidth;\n        const startAngle = angleScale.convert(previousDatum);\n        const endAngle = angleScale.convert(datum);\n        const sector = new _Scene14.Sector();\n        sector.centerX = center;\n        sector.centerY = center;\n        sector.innerRadius = innerRadius2;\n        sector.outerRadius = outerRadius;\n        sector.startAngle = startAngle;\n        sector.endAngle = endAngle;\n        sector.stroke = void 0;\n        sector.strokeWidth = 0;\n        return sector;\n      });\n      seriesGroup.append(seriesSectors);\n      return seriesGroup;\n    });\n    this.root.append(this.series);\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.series.forEach((group, i) => {\n      for (const sector of group.children()) {\n        sector.fill = fills[i % fills.length];\n        sector.stroke = strokes[i % strokes.length];\n      }\n    });\n  }\n};\nMiniRadialBar.chartType = \"radialBar\";\nvar MiniRadarLine = class extends MiniChartWithPolarAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"radarLineTooltip\");\n    this.markerSize = 4;\n    this.data = [\n      [8, 7, 8, 7, 8, 8, 7, 8],\n      [6, 8, 5, 10, 6, 7, 4, 6],\n      [0, 3, 3, 5, 4, 4, 2, 0]\n    ];\n    this.showRadiusAxisLine = false;\n    const radius = (this.size - this.padding * 2) / 2;\n    const innerRadius = 0;\n    const { paths, markers } = createPolarPaths(\n      this.root,\n      this.data,\n      this.size,\n      radius,\n      innerRadius,\n      this.markerSize\n    );\n    this.lines = paths;\n    this.markers = markers;\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.lines.forEach((line, i) => {\n      const n = this.data[i].length;\n      line.stroke = fills[i];\n      const startIdx = i * n;\n      const endIdx = startIdx + n;\n      const markers = this.markers.slice(startIdx, endIdx);\n      markers.forEach((marker) => {\n        marker.stroke = strokes[i];\n        marker.fill = fills[i];\n      });\n    });\n  }\n};\nMiniRadarLine.chartType = \"radarLine\";\nvar MiniRadarArea = class extends MiniChartWithPolarAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"radarAreaTooltip\");\n    this.data = [\n      [8, 10, 5, 7, 4, 1, 5, 8],\n      [1, 1, 2, 7, 7, 8, 10, 1],\n      [4, 5, 9, 9, 4, 2, 3, 4]\n    ];\n    this.showRadiusAxisLine = false;\n    const radius = (this.size - this.padding * 2) / 2;\n    const innerRadius = radius - this.size * 0.3;\n    this.areas = createPolarPaths(this.root, this.data, this.size, radius, innerRadius).paths;\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.areas.forEach((area, i) => {\n      area.fill = fills[i];\n      area.stroke = strokes[i];\n    });\n  }\n};\nMiniRadarArea.chartType = \"radarArea\";\nvar MiniNightingale = class extends MiniChartWithPolarAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"nightingaleTooltip\");\n    this.data = [\n      [6, 10, 9, 8, 7, 8],\n      [4, 6, 5, 4, 5, 5],\n      [3, 5, 4, 3, 4, 7]\n    ];\n    this.showRadiusAxisLine = false;\n    const radius = (this.size - this.padding * 2) / 2;\n    const angleScale = new _Scene15.BandScale();\n    angleScale.domain = this.data[0].map((_, index) => index);\n    angleScale.range = [-Math.PI, Math.PI];\n    angleScale.paddingInner = 0;\n    angleScale.paddingOuter = 0;\n    const bandwidth = angleScale.bandwidth * 0.7;\n    const { processedData, max } = accumulateData(this.data);\n    const radiusScale = new _Scene15.LinearScale();\n    radiusScale.domain = [0, max];\n    radiusScale.range = [0, radius];\n    const center = this.size / 2;\n    this.series = processedData.map((series, index) => {\n      const previousSeries = index < 0 ? void 0 : processedData[index - 1];\n      const seriesGroup = new _Scene15.Group({ zIndex: 1e6 });\n      const seriesSectors = series.map((datum, i) => {\n        const previousDatum = previousSeries?.[i];\n        const outerRadius = radiusScale.convert(datum);\n        const innerRadius = radiusScale.convert(previousDatum ?? 0);\n        const startAngle = angleScale.convert(i);\n        const endAngle = startAngle + bandwidth;\n        const sector = new _Scene15.Sector();\n        sector.centerX = center;\n        sector.centerY = center;\n        sector.innerRadius = innerRadius;\n        sector.outerRadius = outerRadius;\n        sector.startAngle = startAngle;\n        sector.endAngle = endAngle;\n        sector.stroke = void 0;\n        sector.strokeWidth = 0;\n        return sector;\n      });\n      seriesGroup.append(seriesSectors);\n      return seriesGroup;\n    });\n    this.root.append(this.series);\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.series.forEach((group, i) => {\n      for (const sector of group.children()) {\n        sector.fill = fills[i % fills.length];\n        sector.stroke = strokes[i % strokes.length];\n      }\n    });\n  }\n};\nMiniNightingale.chartType = \"nightingale\";\nvar MiniRangeBar = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"rangeBarTooltip\");\n    const data = [3, 3.5, 3];\n    this.bars = this.createRangeBar(this.root, data, this.size, this.padding, \"vertical\");\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.bars.forEach((bar, i) => {\n      bar.fill = fills[i];\n      bar.stroke = strokes[i];\n    });\n  }\n  createRangeBar(root, data, size, padding, direction) {\n    const barAlongX = direction === \"horizontal\";\n    const scalePadding = 2 * padding;\n    const xScale = new _Scene16.BandScale();\n    xScale.domain = data.map((_, index) => index);\n    xScale.range = [padding, size - padding];\n    xScale.paddingInner = 0.3;\n    xScale.paddingOuter = 0.3;\n    const lowRatio = 0.7;\n    const highRatio = 1.3;\n    const yScale = new _Scene16.LinearScale();\n    yScale.domain = [\n      data.reduce((a, b) => Math.min(a, b), Infinity) * lowRatio,\n      data.reduce((a, b) => Math.max(a, b), 0) * highRatio\n    ];\n    yScale.range = [scalePadding, size - scalePadding];\n    const width = xScale.bandwidth;\n    const bars = data.map((datum, i) => {\n      const [low, high] = [datum * lowRatio, datum * highRatio];\n      const x = xScale.convert(i);\n      const y = yScale.convert(low);\n      const height = yScale.convert(high) - y;\n      const rect = new _Scene16.Rect();\n      rect.x = barAlongX ? y : x;\n      rect.y = barAlongX ? x : y;\n      rect.width = barAlongX ? height : width;\n      rect.height = barAlongX ? width : height;\n      rect.strokeWidth = 0;\n      rect.crisp = true;\n      return rect;\n    });\n    root.append(bars);\n    return bars;\n  }\n};\nMiniRangeBar.chartType = \"rangeBar\";\nvar MiniRangeArea = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"rangeAreaTooltip\");\n    const period = 4;\n    const dataSeriesMidpoints = [\n      zigzag({ offset: 0.375 * period, length: period, pattern: { low: 3, high: 5, period } }),\n      zigzag({ offset: 0.375 * period, length: period, pattern: { low: 2.25, high: 4.25, period } }),\n      zigzag({ offset: 0.75 * period, length: period, pattern: { low: 2.5, high: 4.5, period } })\n    ];\n    const dataSeriesWidth = 1.75;\n    const data = dataSeriesMidpoints.map(\n      (series) => series.map(([x, y]) => ({\n        x,\n        low: y - 0.5 * dataSeriesWidth,\n        high: y + 0.5 * dataSeriesWidth\n      }))\n    );\n    const { lines, areas } = this.createRangeArea(this.root, data, this.size, this.padding);\n    this.lines = lines;\n    this.areas = areas;\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    fills = swapArrayItems(fills, 1, 2);\n    strokes = swapArrayItems(strokes, 1, 2);\n    this.lines.forEach(([highLine, lowLine], i) => {\n      highLine.fill = void 0;\n      highLine.stroke = strokes[i];\n      lowLine.fill = void 0;\n      lowLine.stroke = strokes[i];\n    });\n    this.areas.forEach((area, i) => {\n      area.fill = fills[i];\n    });\n  }\n  createRangeArea(root, data, size, padding) {\n    const xMin = data.reduce((acc, series) => series.reduce((acc2, { x }) => Math.min(acc2, x), acc), Infinity);\n    const xMax = data.reduce((acc, series) => series.reduce((acc2, { x }) => Math.max(acc2, x), acc), -Infinity);\n    const yMin = data.reduce((acc, series) => series.reduce((acc2, { low }) => Math.min(acc2, low), acc), Infinity);\n    const yMax = data.reduce(\n      (acc, series) => series.reduce((acc2, { high }) => Math.max(acc2, high), acc),\n      -Infinity\n    );\n    const xScale = new _Scene17.LinearScale();\n    xScale.domain = [xMin, xMax];\n    xScale.range = [padding, size - padding];\n    const scalePadding = 2 * padding;\n    const yScale = new _Scene17.LinearScale();\n    yScale.domain = [yMin, yMax];\n    yScale.range = [size - scalePadding, scalePadding];\n    const lines = [];\n    const areas = [];\n    const lowPoints = data.map((series) => {\n      const highLine = new _Scene17.Path();\n      const lowLine = new _Scene17.Path();\n      const area = new _Scene17.Path();\n      lines.push([highLine, lowLine]);\n      areas.push(area);\n      highLine.strokeWidth = 0;\n      lowLine.strokeWidth = 0;\n      area.strokeWidth = 0;\n      area.fillOpacity = 0.8;\n      highLine.path.clear();\n      lowLine.path.clear();\n      area.path.clear();\n      return series.map((datum, datumIndex) => {\n        const { x, low, high } = datum;\n        const scaledX = xScale.convert(x);\n        const yLow = yScale.convert(low);\n        const yHigh = yScale.convert(high);\n        const command = datumIndex > 0 ? \"lineTo\" : \"moveTo\";\n        highLine.path[command](scaledX, yHigh);\n        lowLine.path[command](scaledX, yLow);\n        area.path[command](scaledX, yHigh);\n        return [scaledX, yLow];\n      });\n    });\n    lowPoints.forEach((seriesLowPoints, seriesIndex) => {\n      const n = seriesLowPoints.length - 1;\n      const area = areas[seriesIndex];\n      for (let datumIndex = n; datumIndex >= 0; datumIndex--) {\n        const [x, y] = seriesLowPoints[datumIndex];\n        area.path[\"lineTo\"](x, y);\n      }\n    });\n    root.append(areas.concat(...lines));\n    return { lines, areas };\n  }\n};\nMiniRangeArea.chartType = \"rangeArea\";\nfunction zigzag(options) {\n  const { offset, length, pattern } = options;\n  const points = getZigzagInflectionPoints(offset, length, pattern);\n  const xMin = 0;\n  const xMax = length;\n  if (points.length === 0 || points[0][0] !== xMin)\n    points.unshift(getZigzagPoint(xMin, offset, pattern));\n  if (points[points.length - 1][0] !== xMax)\n    points.push(getZigzagPoint(xMax, offset, pattern));\n  return points;\n  function getZigzagInflectionPoints(offset2, length2, pattern2) {\n    const { period } = pattern2;\n    const scaledOffset = offset2 / period;\n    const patternInflectionPoints = [0, 0.5];\n    const inflectionPoints = patternInflectionPoints.map((x) => x - scaledOffset).map(getRemainderAbs).sort((a, b) => a - b);\n    const repeatedPoints = Array.from(\n      { length: Math.floor(inflectionPoints.length * (period / length2)) },\n      (_, i) => inflectionPoints[i % inflectionPoints.length] + Math.floor(i / inflectionPoints.length)\n    );\n    return repeatedPoints.map((x) => x * period).map((x) => getZigzagPoint(x, offset2, pattern2));\n  }\n  function getZigzagPoint(x, offset2, pattern2) {\n    return [x, getZigzagValue(offset2 + x, pattern2)];\n  }\n  function getZigzagValue(x, pattern2) {\n    const { low, high, period } = pattern2;\n    const scaledX = getRemainderAbs(x / period);\n    const y = scaledX > 0.5 ? 1 - 2 * (scaledX - 0.5) : 2 * scaledX;\n    return low + (high - low) * y;\n  }\n}\nfunction getRemainderAbs(value) {\n  const remainder = value % 1;\n  return remainder < 0 ? remainder + 1 : remainder;\n}\nfunction swapArrayItems(items, leftIndex, rightIndex) {\n  const results = [...items];\n  const temp = results[leftIndex];\n  results[leftIndex] = results[rightIndex];\n  results[rightIndex] = temp;\n  return results;\n}\nvar MiniBoxPlot = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes, themeTemplateParameters, isCustomTheme) {\n    super(container, \"boxPlotTooltip\");\n    const padding = this.padding;\n    const size = this.size;\n    const data = [11, 11.5, 10.5];\n    const maxRatio = 1.2;\n    const q3Ratio = 1.1;\n    const q1Ratio = 0.9;\n    const minRatio = 0.8;\n    const yScale = new _Scene18.LinearScale();\n    yScale.domain = [\n      data.reduce((a, b) => Math.min(a, b), Infinity) * minRatio,\n      data.reduce((a, b) => Math.max(a, b), 0) * maxRatio\n    ];\n    yScale.range = [size - 1.5 * padding, padding];\n    const xScale = new _Scene18.BandScale();\n    xScale.domain = data.map((_, index) => index);\n    xScale.range = [padding, size - padding];\n    xScale.paddingInner = 0.4;\n    xScale.paddingOuter = 0.2;\n    const bandwidth = Math.round(xScale.bandwidth);\n    const halfBandWidth = Math.round(xScale.bandwidth / 2);\n    this.boxPlotGroups = data.map((datum, i) => {\n      const [minValue, q1Value, q3Value, maxValue] = [\n        datum * minRatio,\n        datum * q1Ratio,\n        datum * q3Ratio,\n        datum * maxRatio\n      ];\n      const top = Math.round(yScale.convert(q3Value));\n      const left = Math.round(xScale.convert(i));\n      const right = Math.round(left + bandwidth);\n      const bottom = Math.round(yScale.convert(q1Value));\n      const min = Math.round(yScale.convert(minValue));\n      const mid = Math.round(yScale.convert(datum));\n      const max = Math.round(yScale.convert(maxValue));\n      const whiskerX = left + halfBandWidth;\n      const boxPlotGroup = new _Scene18.Group();\n      const box = new _Scene18.Rect();\n      const median = new _Scene18.Line();\n      const topWhisker = new _Scene18.Line();\n      const bottomWhisker = new _Scene18.Line();\n      const topCap = new _Scene18.Line();\n      const bottomCap = new _Scene18.Line();\n      box.x = left;\n      box.y = top;\n      box.width = bandwidth;\n      box.height = bottom - top;\n      box.strokeWidth = 1;\n      box.strokeOpacity = 0.75;\n      box.crisp = true;\n      this.setLineProperties(median, left, right, mid, mid);\n      this.setLineProperties(topWhisker, whiskerX, whiskerX, max, top);\n      this.setLineProperties(bottomWhisker, whiskerX, whiskerX, min, bottom);\n      this.setLineProperties(topCap, left, right, max, max);\n      this.setLineProperties(bottomCap, left, right, min, min);\n      boxPlotGroup.append([box, median, topWhisker, bottomWhisker, topCap, bottomCap]);\n      return boxPlotGroup;\n    });\n    this.updateColors(fills, strokes, themeTemplateParameters, isCustomTheme);\n    this.root.append(this.boxPlotGroups);\n  }\n  updateColors(fills, strokes, themeTemplateParameters, isCustomTheme) {\n    const themeBackgroundColor = themeTemplateParameters?.get(_Theme4.DEFAULT_BACKGROUND_COLOUR);\n    const backgroundFill = (Array.isArray(themeBackgroundColor) ? themeBackgroundColor[0] : themeBackgroundColor) ?? \"white\";\n    this.boxPlotGroups.forEach((group, i) => {\n      for (const node of group.children()) {\n        const fill = fills[i % fills.length];\n        node.fill = isCustomTheme ? fill : _Util5.interpolateColor(fill, backgroundFill)(0.7);\n        node.stroke = strokes[i % strokes.length];\n      }\n    });\n  }\n  setLineProperties(line, x1, x2, y1, y2) {\n    line.x1 = x1;\n    line.x2 = x2;\n    line.y1 = y1;\n    line.y2 = y2;\n    line.strokeOpacity = 0.75;\n  }\n};\nMiniBoxPlot.chartType = \"boxPlot\";\nvar MiniTreemap = class extends MiniChart {\n  constructor(container, fills, strokes, themeTemplate, isCustomTheme) {\n    super(container, \"treemapTooltip\");\n    const { size, padding } = this;\n    const data = [\n      [1, 1],\n      [3, 2, 1]\n    ];\n    const treeSize = data.length;\n    const treePadding = treeSize % 2 === 0 ? 0.3 : 0.2;\n    const range = [padding, size - padding];\n    const columns = data.length;\n    const columnParts = columns * (columns + 1) / 2;\n    const columnPadding = treePadding / (columns - 1);\n    const availableRange = range[1] - range[0];\n    const availableWidth = availableRange - treePadding;\n    let previousX = range[0];\n    this.rects = data.reduce((rects, d, columnIndex) => {\n      rects ?? (rects = []);\n      const widthRatio = (columns - columnIndex) / columnParts;\n      const width = availableWidth * widthRatio;\n      const rows = d.length;\n      const rowParts = d.reduce((parts, ratio) => parts += ratio, 0);\n      const rowPadding = treePadding / (rows - 1 || 1);\n      const availableHeight = rows > 1 ? availableRange - treePadding : availableRange;\n      let previousY = range[0];\n      const xRects = d.map((ratio) => {\n        const rect = new _Scene19.Rect();\n        const height = availableHeight * ratio / rowParts;\n        rect.x = previousX;\n        rect.y = previousY;\n        rect.width = width;\n        rect.height = height;\n        rect.strokeWidth = 0.75;\n        rect.crisp = true;\n        previousY += height + rowPadding;\n        return rect;\n      });\n      previousX += width + columnPadding;\n      rects.push(...xRects);\n      return rects;\n    }, []);\n    this.updateColors(fills, strokes, themeTemplate, isCustomTheme);\n    const rectGroup = new _Scene19.Group();\n    rectGroup.setClipRect(new _Scene19.BBox(padding, padding, size - padding, size - padding));\n    rectGroup.append(this.rects);\n    this.root.append(rectGroup);\n  }\n  updateColors(fills, strokes, themeTemplate, isCustomTheme) {\n    const defaultBackgroundColor = themeTemplate?.get(_Theme5.DEFAULT_BACKGROUND_COLOUR);\n    const backgroundFill = (Array.isArray(defaultBackgroundColor) ? defaultBackgroundColor[0] : defaultBackgroundColor) ?? \"white\";\n    this.rects.forEach((rect, i) => {\n      rect.fill = fills[i % strokes.length];\n      rect.stroke = isCustomTheme ? strokes[i % strokes.length] : backgroundFill;\n    });\n  }\n};\nMiniTreemap.chartType = \"treemap\";\nvar MiniSunburst = class extends MiniChartWithPolarAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"sunburstTooltip\");\n    this.data = [\n      [[], []],\n      [[], []],\n      [[], []]\n    ];\n    this.angleOffset = -Math.PI / 2;\n    this.innerRadiusRatio = 0;\n    this.showRadiusAxisLine = false;\n    this.showAngleAxisLines = false;\n    const { data, size, padding, angleOffset, innerRadiusRatio } = this;\n    const radius = (size - padding * 2) / 2;\n    const angleRange = [angleOffset + 0, angleOffset + 2 * Math.PI];\n    const angleExtent = Math.abs(angleRange[1] - angleRange[0]);\n    const radiusRange = [radius * innerRadiusRatio, radius];\n    const radiusExtent = Math.abs(radiusRange[1] - radiusRange[0]);\n    let maxDepth = 0;\n    const findMaxDepth = (data2, parentDepth) => {\n      data2.forEach((child) => {\n        const depth = parentDepth + 1;\n        maxDepth = Math.max(maxDepth, depth);\n        findMaxDepth(child, depth);\n      });\n    };\n    findMaxDepth(data, 0);\n    const radiusRatio = radiusExtent / maxDepth;\n    const center = this.size / 2;\n    const startAngle = angleRange[0];\n    this.series = [];\n    const createSectors = (data2, depth, startAngle2, availableAngle, group) => {\n      const isArray = Array.isArray(data2);\n      if (!isArray) {\n        return;\n      }\n      const childDepth = depth + 1;\n      let previousAngle = startAngle2;\n      data2.forEach((child, childIndex, children) => {\n        let childGroup = group;\n        if (!childGroup) {\n          childGroup = new _Scene20.Group();\n          this.series.push(childGroup);\n        }\n        const innerRadius = radiusRange[0] + depth * radiusRatio;\n        const outerRadius = radiusRange[0] + childDepth * radiusRatio;\n        const angleRatio = 1 / children.length;\n        const start = previousAngle;\n        const end = start + availableAngle * angleRatio;\n        const sector = new _Scene20.Sector();\n        sector.centerX = center;\n        sector.centerY = center;\n        sector.innerRadius = innerRadius;\n        sector.outerRadius = outerRadius;\n        sector.startAngle = start;\n        sector.endAngle = end;\n        sector.stroke = void 0;\n        sector.strokeWidth = 0;\n        sector.inset = 0.75;\n        previousAngle = end;\n        childGroup.append(sector);\n        createSectors(child, childDepth, start, Math.abs(end - start), childGroup);\n      });\n    };\n    createSectors(data, 0, startAngle, angleExtent);\n    this.root.append(this.series);\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.series.forEach((group, i) => {\n      for (const sector of group.children()) {\n        sector.fill = fills[i % fills.length];\n        sector.stroke = strokes[i % strokes.length];\n      }\n    });\n  }\n};\nMiniSunburst.chartType = \"sunburst\";\nvar MiniHeatmap = class extends MiniChart {\n  constructor(container, fills, strokes, themeTemplate, isCustomTheme) {\n    super(container, \"heatmapTooltip\");\n    const { size, padding } = this;\n    const heatmapSize = 3;\n    const data = Array.from(\n      { length: heatmapSize },\n      (_, __) => Array.from({ length: heatmapSize }, (_2, yIndex) => yIndex)\n    );\n    const domain = data.map((_, index) => index);\n    const xScale = new _Scene21.BandScale();\n    xScale.domain = domain;\n    xScale.range = [padding, size - padding];\n    xScale.paddingInner = 0.01;\n    xScale.paddingOuter = 0.1;\n    const yScale = new _Scene21.BandScale();\n    yScale.domain = domain;\n    yScale.range = [padding, size - padding];\n    yScale.paddingInner = 0.01;\n    yScale.paddingOuter = 0.1;\n    const width = xScale.bandwidth ?? 0;\n    const height = yScale.bandwidth ?? 0;\n    this.rects = data.reduce((rects, d, index) => {\n      rects ?? (rects = []);\n      const xRects = d.map((_, yIndex) => {\n        const rect = new _Scene21.Rect();\n        rect.x = xScale.convert(index);\n        rect.y = yScale.convert(yIndex);\n        rect.width = width;\n        rect.height = height;\n        rect.strokeWidth = 0;\n        rect.crisp = true;\n        return rect;\n      });\n      rects.push(...xRects);\n      return rects;\n    }, []);\n    this.updateColors(fills, strokes, themeTemplate, isCustomTheme);\n    const rectGroup = new _Scene21.Group();\n    rectGroup.setClipRect(new _Scene21.BBox(padding, padding, size - padding, size - padding));\n    rectGroup.append(this.rects);\n    this.root.append(rectGroup);\n  }\n  updateColors(fills, strokes, themeTemplate, isCustomTheme) {\n    const defaultColorRange = themeTemplate?.get(_Theme6.DEFAULT_DIVERGING_SERIES_COLOR_RANGE);\n    const defaultBackgroundColor = themeTemplate?.get(_Theme6.DEFAULT_BACKGROUND_COLOUR);\n    const backgroundFill = (Array.isArray(defaultBackgroundColor) ? defaultBackgroundColor[0] : defaultBackgroundColor) ?? \"white\";\n    const colorRange = isCustomTheme ? [fills[0], fills[1]] : defaultColorRange;\n    const stroke = isCustomTheme ? strokes[0] : backgroundFill;\n    const fillFn = _Util6.interpolateColor(colorRange[0], colorRange[1]);\n    this.rects.forEach((rect, i) => {\n      rect.fill = fillFn(i * 0.2);\n      rect.stroke = stroke;\n    });\n  }\n};\nMiniHeatmap.chartType = \"heatmap\";\nvar MiniWaterfall = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes, themeTemplate, isCustomTheme) {\n    super(container, \"waterfallTooltip\");\n    this.data = [4, 3, -3, 6, -3];\n    this.bars = this.createWaterfall(this.root, this.data, this.size, this.padding, \"vertical\").bars;\n    this.updateColors(fills, strokes, themeTemplate, isCustomTheme);\n  }\n  updateColors(fills, strokes, themeTemplate, isCustomTheme) {\n    const { data } = this;\n    const positive = {\n      fill: isCustomTheme ? fills[0] : themeTemplate?.get(_Theme7.PALETTE_ALT_UP_FILL),\n      stroke: isCustomTheme ? strokes[0] : themeTemplate?.get(_Theme7.PALETTE_ALT_UP_STROKE)\n    };\n    const negative = {\n      fill: isCustomTheme ? fills[1] : themeTemplate?.get(_Theme7.PALETTE_ALT_DOWN_FILL),\n      stroke: isCustomTheme ? strokes[1] : themeTemplate?.get(_Theme7.PALETTE_ALT_DOWN_STROKE)\n    };\n    this.bars.forEach((bar, i) => {\n      const isPositive = data[i] >= 0;\n      bar.fill = isPositive ? positive.fill : negative.fill;\n      bar.stroke = isPositive ? positive.stroke : negative.stroke;\n    });\n  }\n  createWaterfall(root, data, size, padding, direction) {\n    const scalePadding = 2 * padding;\n    const { processedData, min, max } = accumulateData(data.map((d) => [d]));\n    const flatData = processedData.reduce((flat, d) => flat.concat(d), []);\n    const yScale = new _Scene22.LinearScale();\n    yScale.domain = [Math.min(min, 0), max];\n    yScale.range = [size - scalePadding, scalePadding];\n    const xScale = new _Scene22.BandScale();\n    xScale.domain = data.map((_, index) => index);\n    xScale.range = [padding, size - padding];\n    xScale.paddingInner = 0.2;\n    xScale.paddingOuter = 0.3;\n    const width = xScale.bandwidth;\n    const connectorLine = new _Scene22.Path();\n    connectorLine.stroke = \"#575757\";\n    connectorLine.strokeWidth = 0;\n    const pixelAlignmentOffset = Math.floor(connectorLine.strokeWidth) % 2 / 2;\n    const connectorPath = connectorLine.path;\n    connectorPath.clear();\n    const barAlongX = direction === \"horizontal\";\n    const bars = flatData.map((datum, i) => {\n      const previousDatum = i > 0 ? flatData[i - 1] : 0;\n      const rawValue = data[i];\n      const isPositive = rawValue > 0;\n      const currY = Math.round(yScale.convert(datum));\n      const trailY = Math.round(yScale.convert(previousDatum));\n      const y = (isPositive ? currY : trailY) - pixelAlignmentOffset;\n      const bottomY = (isPositive ? trailY : currY) + pixelAlignmentOffset;\n      const height = Math.abs(bottomY - y);\n      const x = xScale.convert(i);\n      const rect = new _Scene22.Rect();\n      rect.x = barAlongX ? y : x;\n      rect.y = barAlongX ? x : y;\n      rect.width = barAlongX ? height : width;\n      rect.height = barAlongX ? width : height;\n      rect.strokeWidth = 0;\n      rect.crisp = true;\n      const moveTo = currY + pixelAlignmentOffset;\n      const lineTo = trailY + pixelAlignmentOffset;\n      if (i > 0) {\n        const lineToX = barAlongX ? lineTo : rect.x;\n        const lineToY = barAlongX ? rect.y : lineTo;\n        connectorPath.lineTo(lineToX, lineToY);\n      }\n      const moveToX = barAlongX ? moveTo : rect.x;\n      const moveToY = barAlongX ? rect.y : moveTo;\n      connectorPath.moveTo(moveToX, moveToY);\n      return rect;\n    });\n    root.append([connectorLine, ...bars]);\n    return { bars };\n  }\n};\nMiniWaterfall.chartType = \"waterfall\";\nvar MiniColumnLineCombo = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"columnLineComboTooltip\");\n    this.columnData = [3, 4];\n    this.lineData = [[5, 4, 6, 5, 4]];\n    const { root, columnData, lineData, size, padding } = this;\n    this.columns = createColumnRects({\n      stacked: false,\n      root,\n      data: columnData,\n      size,\n      padding,\n      xScaleDomain: [0, 1],\n      yScaleDomain: [0, 4],\n      xScalePadding: 0.5\n    });\n    root.append(this.columns);\n    this.lines = createLinePaths(root, lineData, size, padding);\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.columns.forEach((bar, i) => {\n      bar.fill = fills[i];\n      bar.stroke = strokes[i];\n    });\n    this.lines.forEach((line, i) => {\n      line.stroke = fills[i + 2];\n    });\n  }\n};\nMiniColumnLineCombo.chartType = \"columnLineCombo\";\nvar MiniAreaColumnCombo = class extends MiniChartWithAxes {\n  constructor(container, fills, strokes) {\n    super(container, \"areaColumnComboTooltip\");\n    this.columnData = [3, 4.5];\n    this.areaData = [[5, 4, 6, 5, 4]];\n    const { root, columnData, areaData, size, padding } = this;\n    this.columns = createColumnRects({\n      stacked: false,\n      root,\n      data: columnData,\n      size,\n      padding,\n      xScaleDomain: [0, 1],\n      yScaleDomain: [0, 6],\n      xScalePadding: 0.5\n    });\n    const xScale = new _Scene23.BandScale();\n    xScale.range = [padding, size - padding];\n    xScale.domain = [0, 1, 2, 3, 4];\n    xScale.paddingInner = 1;\n    xScale.paddingOuter = 0;\n    const yScale = new _Scene23.LinearScale();\n    yScale.range = [size - padding, padding];\n    yScale.domain = [0, 6];\n    const pathData = [];\n    const yZero = yScale.convert(0);\n    const firstX = xScale.convert(0);\n    areaData.forEach((series, i) => {\n      const points = pathData[i] || (pathData[i] = []);\n      series.forEach((data, j) => {\n        const yDatum = data;\n        const xDatum = j;\n        const x = xScale.convert(xDatum);\n        const y = yScale.convert(yDatum);\n        points[j] = { x, y };\n      });\n      const lastX = xScale.convert(series.length - 1);\n      pathData[i].push(\n        {\n          x: lastX,\n          y: yZero\n        },\n        {\n          x: firstX,\n          y: yZero\n        }\n      );\n    });\n    this.areas = pathData.map((points) => {\n      const area = new _Scene23.Path();\n      area.strokeWidth = 0;\n      area.fillOpacity = 0.8;\n      const path = area.path;\n      points.forEach((point, i) => path[i > 0 ? \"lineTo\" : \"moveTo\"](point.x, point.y));\n      return area;\n    });\n    root.append(this.areas);\n    root.append([].concat.apply([], this.columns));\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.areas.forEach((area, i) => {\n      area.fill = fills[i];\n      area.stroke = strokes[i];\n    });\n    this.columns.forEach((bar, i) => {\n      bar.fill = fills[i + 1];\n      bar.stroke = strokes[i + 1];\n    });\n  }\n};\nMiniAreaColumnCombo.chartType = \"areaColumnCombo\";\nvar MiniCustomCombo = class extends MiniChart {\n  constructor(container, fills, strokes) {\n    super(container, \"customComboTooltip\");\n    this.columnData = [3, 4];\n    this.lineData = [[5, 4, 6, 5, 4]];\n    const { root, columnData, lineData, size, padding } = this;\n    this.columns = createColumnRects({\n      stacked: false,\n      root,\n      data: columnData,\n      size,\n      padding,\n      xScaleDomain: [0, 1],\n      yScaleDomain: [0, 4],\n      xScalePadding: 0.5\n    });\n    root.append(this.columns);\n    this.lines = createLinePaths(root, lineData, size, padding);\n    const axisStroke = \"grey\";\n    const axisOvershoot = 3;\n    const leftAxis = new _Scene24.Line();\n    leftAxis.x1 = padding;\n    leftAxis.y1 = padding;\n    leftAxis.x2 = padding;\n    leftAxis.y2 = size - padding + axisOvershoot;\n    leftAxis.stroke = axisStroke;\n    const bottomAxis = new _Scene24.Line();\n    bottomAxis.x1 = padding - axisOvershoot + 1;\n    bottomAxis.y1 = size - padding;\n    bottomAxis.x2 = size - padding + 1;\n    bottomAxis.y2 = size - padding;\n    bottomAxis.stroke = axisStroke;\n    const penIcon = new _Scene24.Path();\n    this.buildPenIconPath(penIcon);\n    penIcon.fill = \"whitesmoke\";\n    penIcon.stroke = \"darkslategrey\";\n    penIcon.strokeWidth = 1;\n    root.append([bottomAxis, leftAxis, penIcon]);\n    this.updateColors(fills, strokes);\n  }\n  updateColors(fills, strokes) {\n    this.columns.forEach((bar, i) => {\n      bar.fill = fills[i];\n      bar.stroke = strokes[i];\n    });\n    this.lines.forEach((line, i) => {\n      line.stroke = fills[i + 2];\n    });\n  }\n  buildPenIconPath(penIcon) {\n    const { path } = penIcon;\n    path.moveTo(25.76, 43.46);\n    path.lineTo(31.27, 48.53);\n    path.moveTo(49.86, 22);\n    path.lineTo(49.86, 22);\n    path.cubicCurveTo(49.01994659053345, 21.317514933510974, 47.89593834348529, 21.09645997825817, 46.86, 21.41);\n    path.lineTo(46.86, 21.41);\n    path.cubicCurveTo(45.55460035985361, 21.77260167850787, 44.38777081121966, 22.517979360321792, 43.51, 23.55);\n    path.lineTo(25.51, 43.8);\n    path.lineTo(25.43, 43.89);\n    path.lineTo(23.01, 51.89);\n    path.lineTo(22.83, 52.46);\n    path.lineTo(31.02, 48.86);\n    path.lineTo(49.02, 28.52);\n    path.lineTo(49.02, 28.52);\n    path.cubicCurveTo(49.940716461596224, 27.521914221246085, 50.54302631059587, 26.2720342455763, 50.75, 24.93);\n    path.lineTo(50.75, 24.93);\n    path.cubicCurveTo(50.95363374988308, 23.866379846512814, 50.62080640232334, 22.77066734274871, 49.86, 22);\n    path.closePath();\n    path.moveTo(41.76, 25.5);\n    path.lineTo(47.34, 30.5);\n    path.moveTo(40.74, 26.65);\n    path.lineTo(46.25, 31.71);\n  }\n};\nMiniCustomCombo.chartType = \"customCombo\";\nvar miniChartMapping = {\n  columnGroup: {\n    column: { range: true, pivot: true, enterprise: false, icon: MiniColumn },\n    stackedColumn: { range: true, pivot: true, enterprise: false, icon: MiniStackedColumn },\n    normalizedColumn: { range: true, pivot: true, enterprise: false, icon: MiniNormalizedColumn }\n  },\n  barGroup: {\n    bar: { range: true, pivot: true, enterprise: false, icon: MiniBar },\n    stackedBar: { range: true, pivot: true, enterprise: false, icon: MiniStackedBar },\n    normalizedBar: { range: true, pivot: true, enterprise: false, icon: MiniNormalizedBar }\n  },\n  pieGroup: {\n    pie: { range: true, pivot: true, enterprise: false, icon: MiniPie },\n    donut: { range: true, pivot: true, enterprise: false, icon: MiniDonut },\n    doughnut: { range: true, pivot: true, enterprise: false, icon: MiniDonut }\n  },\n  lineGroup: { line: { range: true, pivot: true, enterprise: false, icon: MiniLine } },\n  scatterGroup: {\n    scatter: { range: true, pivot: true, enterprise: false, icon: MiniScatter },\n    bubble: { range: true, pivot: true, enterprise: false, icon: MiniBubble }\n  },\n  areaGroup: {\n    area: { range: true, pivot: true, enterprise: false, icon: MiniArea },\n    stackedArea: { range: true, pivot: true, enterprise: false, icon: MiniStackedArea },\n    normalizedArea: { range: true, pivot: true, enterprise: false, icon: MiniNormalizedArea }\n  },\n  polarGroup: {\n    radarLine: { range: true, pivot: false, enterprise: true, icon: MiniRadarLine },\n    radarArea: { range: true, pivot: false, enterprise: true, icon: MiniRadarArea },\n    nightingale: { range: true, pivot: false, enterprise: true, icon: MiniNightingale },\n    radialColumn: { range: true, pivot: false, enterprise: true, icon: MiniRadialColumn },\n    radialBar: { range: true, pivot: false, enterprise: true, icon: MiniRadialBar }\n  },\n  statisticalGroup: {\n    boxPlot: { range: true, pivot: false, enterprise: true, icon: MiniBoxPlot },\n    histogram: { range: true, pivot: false, enterprise: false, icon: MiniHistogram },\n    rangeBar: { range: true, pivot: false, enterprise: true, icon: MiniRangeBar },\n    rangeArea: { range: true, pivot: false, enterprise: true, icon: MiniRangeArea }\n  },\n  hierarchicalGroup: {\n    treemap: { range: true, pivot: true, enterprise: true, icon: MiniTreemap },\n    sunburst: { range: true, pivot: true, enterprise: true, icon: MiniSunburst }\n  },\n  specializedGroup: {\n    heatmap: { range: true, pivot: false, enterprise: true, icon: MiniHeatmap },\n    waterfall: { range: true, pivot: false, enterprise: true, icon: MiniWaterfall }\n  },\n  combinationGroup: {\n    columnLineCombo: { range: true, pivot: true, enterprise: false, icon: MiniColumnLineCombo },\n    areaColumnCombo: { range: true, pivot: true, enterprise: false, icon: MiniAreaColumnCombo },\n    customCombo: { range: true, pivot: true, enterprise: false, icon: MiniCustomCombo }\n  }\n};\nvar DEFAULT_CHART_GROUPS = {\n  columnGroup: [\"column\", \"stackedColumn\", \"normalizedColumn\"],\n  barGroup: [\"bar\", \"stackedBar\", \"normalizedBar\"],\n  pieGroup: [\"pie\", \"donut\"],\n  lineGroup: [\"line\"],\n  scatterGroup: [\"scatter\", \"bubble\"],\n  areaGroup: [\"area\", \"stackedArea\", \"normalizedArea\"],\n  polarGroup: [\"radarLine\", \"radarArea\", \"nightingale\", \"radialColumn\", \"radialBar\"],\n  statisticalGroup: [\"boxPlot\", \"histogram\", \"rangeBar\", \"rangeArea\"],\n  hierarchicalGroup: [\"treemap\", \"sunburst\"],\n  specializedGroup: [\"heatmap\", \"waterfall\"],\n  combinationGroup: [\"columnLineCombo\", \"areaColumnCombo\", \"customCombo\"]\n};\nvar MiniChartsContainer = class extends Component36 {\n  constructor(chartController, fills, strokes, themeTemplateParameters, isCustomTheme, chartGroups = DEFAULT_CHART_GROUPS) {\n    super(\n      /* html */\n      `<div class=\"ag-chart-settings-mini-wrapper\"></div>`\n    );\n    this.wrappers = /* @__PURE__ */ new Map();\n    this.chartController = chartController;\n    this.fills = fills;\n    this.strokes = strokes;\n    this.themeTemplateParameters = themeTemplateParameters;\n    this.isCustomTheme = isCustomTheme;\n    this.chartGroups = { ...chartGroups };\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    if (!this.chartController.customComboExists() && this.chartGroups.combinationGroup) {\n      this.chartGroups.combinationGroup = this.chartGroups.combinationGroup.filter(\n        (chartType) => chartType !== \"customCombo\"\n      );\n    }\n    const eGui = this.getGui();\n    const isEnterprise = this.chartController.isEnterprise();\n    const isPivotChart = this.chartController.isPivotChart();\n    const isRangeChart = !isPivotChart;\n    const displayedMenuGroups = Object.keys(this.chartGroups).map((group) => {\n      const menuGroup = group in miniChartMapping ? miniChartMapping[group] : void 0;\n      if (!menuGroup) {\n        _warnOnce11(`invalid chartGroupsDef config '${group}'`);\n        return null;\n      }\n      const chartGroupValues = this.chartGroups[group] ?? [];\n      const menuItems = chartGroupValues.map((chartType) => {\n        const menuItem = chartType in menuGroup ? menuGroup[chartType] : void 0;\n        if (!menuItem) {\n          _warnOnce11(`invalid chartGroupsDef config '${group}.${chartType}'`);\n          return null;\n        }\n        if (!isEnterprise && menuItem.enterprise) {\n          return null;\n        }\n        if (isRangeChart && menuItem.range)\n          return menuItem;\n        if (isPivotChart && menuItem.pivot)\n          return menuItem;\n        return null;\n      }).filter((menuItem) => menuItem != null);\n      if (menuItems.length === 0)\n        return null;\n      return {\n        label: this.chartTranslationService.translate(group),\n        items: menuItems\n      };\n    }).filter((menuGroup) => menuGroup != null);\n    for (const { label, items } of displayedMenuGroups) {\n      const groupComponent = this.createBean(\n        new AgGroupComponent({\n          title: label,\n          suppressEnabledCheckbox: true,\n          enabled: true,\n          suppressOpenCloseIcons: true,\n          cssIdentifier: \"charts-settings\",\n          direction: \"horizontal\",\n          suppressKeyboardNavigation: true\n        })\n      );\n      for (const menuItem of items) {\n        const MiniClass = menuItem.icon;\n        const miniWrapper = document.createElement(\"div\");\n        miniWrapper.classList.add(\"ag-chart-mini-thumbnail\");\n        miniWrapper.setAttribute(\"tabindex\", \"0\");\n        miniWrapper.setAttribute(\"role\", \"button\");\n        const miniClassChartType = MiniClass.chartType;\n        const listener = () => {\n          this.chartController.setChartType(miniClassChartType);\n          this.updateSelectedMiniChart();\n        };\n        this.addManagedListeners(miniWrapper, {\n          click: listener,\n          keydown: (event) => {\n            if (event.key == KeyCode23.ENTER || event.key === KeyCode23.SPACE) {\n              event.preventDefault();\n              listener();\n            }\n          }\n        });\n        this.wrappers.set(miniClassChartType, miniWrapper);\n        this.createBean(\n          new MiniClass(\n            miniWrapper,\n            this.fills,\n            this.strokes,\n            this.themeTemplateParameters,\n            this.isCustomTheme\n          )\n        );\n        groupComponent.addItem(miniWrapper);\n      }\n      eGui.appendChild(groupComponent.getGui());\n    }\n    this.updateSelectedMiniChart();\n  }\n  updateSelectedMiniChart() {\n    const selectedChartType = this.chartController.getChartType();\n    this.wrappers.forEach((miniChart, miniChartType) => {\n      const selected = miniChartType === selectedChartType;\n      miniChart.classList.toggle(\"ag-selected\", selected);\n      const chartName = this.chartTranslationService.translate(getFullChartNameTranslationKey(miniChartType));\n      const ariaLabel = selected ? `${chartName}. ${this.chartTranslationService.translate(\"ariaChartSelected\")}` : chartName;\n      _setAriaLabel7(miniChart, ariaLabel);\n    });\n  }\n  destroy() {\n    this.wrappers.clear();\n    super.destroy();\n  }\n};\nvar ChartSettingsPanel = class extends Component37 {\n  constructor(chartController) {\n    super(\n      /* html */\n      `<div class=\"ag-chart-settings-wrapper\">\n            <div data-ref=\"eMiniChartsContainer\" class=\"ag-chart-settings-mini-charts-container ag-scrollable-container\"></div>\n            <div data-ref=\"eNavBar\" class=\"ag-chart-settings-nav-bar\">\n                <div data-ref=\"ePrevBtn\" class=\"ag-chart-settings-prev\">\n                    <button type=\"button\" class=\"ag-button ag-chart-settings-prev-button\"></button>\n                </div>\n                <div data-ref=\"eCardSelector\" class=\"ag-chart-settings-card-selector\"></div>\n                <div data-ref=\"eNextBtn\" class=\"ag-chart-settings-next\">\n                    <button type=\"button\" class=\"ag-button ag-chart-settings-next-button\"></button>\n                </div>\n            </div>\n        </div>`\n    );\n    this.chartController = chartController;\n    this.eMiniChartsContainer = RefPlaceholder18;\n    this.eNavBar = RefPlaceholder18;\n    this.eCardSelector = RefPlaceholder18;\n    this.ePrevBtn = RefPlaceholder18;\n    this.eNextBtn = RefPlaceholder18;\n    this.miniChartsContainers = [];\n    this.cardItems = [];\n    this.activePaletteIndex = 0;\n    this.palettes = [];\n    this.themes = [];\n  }\n  postConstruct() {\n    this.resetPalettes();\n    this.ePrevBtn.insertAdjacentElement(\"afterbegin\", _createIconNoSpan32(\"previous\", this.gos));\n    this.eNextBtn.insertAdjacentElement(\"afterbegin\", _createIconNoSpan32(\"next\", this.gos));\n    this.addManagedElementListeners(this.ePrevBtn, { click: () => this.setActivePalette(this.getPrev(), \"left\") });\n    this.addManagedElementListeners(this.eNextBtn, { click: () => this.setActivePalette(this.getNext(), \"right\") });\n    const reset = () => this.resetPalettes(true);\n    this.addManagedListeners(this.chartController, {\n      chartTypeChanged: reset,\n      chartApiUpdate: reset\n    });\n    this.scrollSelectedIntoView();\n  }\n  scrollSelectedIntoView() {\n    setTimeout(() => {\n      const isMiniChartsContainerVisible = (miniChartsContainers) => {\n        return !miniChartsContainers.getGui().classList.contains(\"ag-hidden\");\n      };\n      const currentMiniChartContainer = this.miniChartsContainers.find(isMiniChartsContainerVisible);\n      const currentChart = currentMiniChartContainer.getGui().querySelector(\".ag-selected\");\n      if (currentChart) {\n        const parent = currentChart.offsetParent;\n        if (parent) {\n          this.eMiniChartsContainer.scrollTo(0, parent.offsetTop);\n        }\n      }\n    }, 250);\n  }\n  resetPalettes(forceReset) {\n    const palettes = this.chartController.getPalettes();\n    const themeTemplateParameters = this.chartController.getThemeTemplateParameters();\n    const chartGroups = this.gos.get(\"chartToolPanelsDef\")?.settingsPanel?.chartGroupsDef;\n    if (_shallowCompare2(palettes, this.palettes) && !forceReset || this.isAnimating) {\n      return;\n    }\n    this.palettes = palettes;\n    this.themes = this.chartController.getThemeNames();\n    this.activePaletteIndex = this.themes.findIndex((name) => name === this.chartController.getChartThemeName());\n    this.cardItems = [];\n    _clearElement32(this.eCardSelector);\n    this.destroyMiniCharts();\n    const { themes } = this;\n    this.palettes.forEach((palette, index) => {\n      const isActivePalette = this.activePaletteIndex === index;\n      const { fills = [], strokes = [] } = palette;\n      const themeName = themes[index];\n      const isCustomTheme = !isStockTheme(themeName);\n      const miniChartsContainer = this.createBean(\n        new MiniChartsContainer(\n          this.chartController,\n          fills,\n          strokes,\n          themeTemplateParameters[index],\n          isCustomTheme,\n          chartGroups\n        )\n      );\n      this.miniChartsContainers.push(miniChartsContainer);\n      this.eMiniChartsContainer.appendChild(miniChartsContainer.getGui());\n      this.addCardLink(index);\n      if (isActivePalette) {\n        miniChartsContainer.updateSelectedMiniChart();\n      } else {\n        miniChartsContainer.setDisplayed(false);\n      }\n    });\n    _setDisplayed43(this.eNavBar, this.palettes.length > 1);\n    _radioCssClass2(this.cardItems[this.activePaletteIndex], \"ag-selected\", \"ag-not-selected\");\n  }\n  addCardLink(index) {\n    const link = document.createElement(\"div\");\n    link.classList.add(\"ag-chart-settings-card-item\");\n    this.addManagedElementListeners(link, {\n      click: () => {\n        this.setActivePalette(index, index < this.activePaletteIndex ? \"left\" : \"right\");\n      }\n    });\n    this.eCardSelector.appendChild(link);\n    this.cardItems.push(link);\n  }\n  getPrev() {\n    let prev = this.activePaletteIndex - 1;\n    if (prev < 0) {\n      prev = this.palettes.length - 1;\n    }\n    return prev;\n  }\n  getNext() {\n    let next = this.activePaletteIndex + 1;\n    if (next >= this.palettes.length) {\n      next = 0;\n    }\n    return next;\n  }\n  setActivePalette(index, animationDirection) {\n    if (this.isAnimating || this.activePaletteIndex === index) {\n      return;\n    }\n    _radioCssClass2(this.cardItems[index], \"ag-selected\", \"ag-not-selected\");\n    const currentPalette = this.miniChartsContainers[this.activePaletteIndex];\n    const currentGui = currentPalette.getGui();\n    const futurePalette = this.miniChartsContainers[index];\n    const nextGui = futurePalette.getGui();\n    currentPalette.updateSelectedMiniChart();\n    futurePalette.updateSelectedMiniChart();\n    const multiplier = animationDirection === \"left\" ? -1 : 1;\n    const final = nextGui.style.left = `${_getAbsoluteWidth3(this.getGui()) * multiplier}px`;\n    this.activePaletteIndex = index;\n    this.isAnimating = true;\n    const animatingClass = \"ag-animating\";\n    futurePalette.setDisplayed(true);\n    currentPalette.addCssClass(animatingClass);\n    futurePalette.addCssClass(animatingClass);\n    this.chartController.setChartThemeName(this.themes[index]);\n    window.setTimeout(() => {\n      currentGui.style.left = `${-parseFloat(final)}px`;\n      nextGui.style.left = \"0px\";\n    }, 0);\n    window.setTimeout(() => {\n      this.isAnimating = false;\n      currentPalette.removeCssClass(animatingClass);\n      futurePalette.removeCssClass(animatingClass);\n      currentPalette.setDisplayed(false);\n    }, 300);\n  }\n  destroyMiniCharts() {\n    _clearElement32(this.eMiniChartsContainer);\n    this.miniChartsContainers = this.destroyBeans(this.miniChartsContainers);\n  }\n  destroy() {\n    this.destroyMiniCharts();\n    super.destroy();\n  }\n};\nvar _TabbedChartMenu = class _TabbedChartMenu2 extends Component38 {\n  constructor(panels, chartMenuContext) {\n    super();\n    this.panels = panels;\n    this.chartMenuContext = chartMenuContext;\n    this.tabs = [];\n  }\n  wireBeans(beans) {\n    this.chartTranslationService = beans.chartTranslationService;\n  }\n  postConstruct() {\n    this.panels.forEach((panel) => {\n      const panelType = panel.replace(\"chart\", \"\").toLowerCase();\n      const panelComp = this.createPanel(panelType);\n      const tabItem = this.createTab(panel, panelType, panelComp);\n      this.tabs.push(tabItem);\n      this.addDestroyFunc(() => this.destroyBean(panelComp));\n    });\n    this.tabbedLayout = new TabbedLayout({\n      items: this.tabs,\n      cssClass: \"ag-chart-tabbed-menu\",\n      keepScrollPosition: true,\n      suppressFocusBodyOnOpen: true,\n      suppressTrapFocus: true,\n      enableCloseButton: true,\n      closeButtonAriaLabel: this.chartTranslationService.translate(\"ariaChartMenuClose\"),\n      onCloseClicked: () => {\n        this.eventSource?.focus({ preventScroll: true });\n        this.dispatchLocalEvent({ type: \"closed\" });\n      }\n    });\n    this.createBean(this.tabbedLayout);\n  }\n  createTab(name, title, panelComp) {\n    const eWrapperDiv = document.createElement(\"div\");\n    eWrapperDiv.classList.add(\"ag-chart-tab\", `ag-chart-${title}`);\n    this.createBean(panelComp);\n    eWrapperDiv.appendChild(panelComp.getGui());\n    const titleEl = document.createElement(\"div\");\n    const translatedTitle = this.chartTranslationService.translate(title);\n    titleEl.innerText = translatedTitle;\n    return {\n      title: titleEl,\n      titleLabel: translatedTitle,\n      bodyPromise: AgPromise3.resolve(eWrapperDiv),\n      getScrollableContainer: () => {\n        const scrollableContainer = eWrapperDiv.querySelector(\".ag-scrollable-container\");\n        return scrollableContainer || eWrapperDiv;\n      },\n      name\n    };\n  }\n  showTab(tab) {\n    const tabItem = this.tabs[tab];\n    this.tabbedLayout.showItem(tabItem);\n  }\n  getGui() {\n    return this.tabbedLayout && this.tabbedLayout.getGui();\n  }\n  showMenu(eventSource, suppressFocus) {\n    this.eventSource = eventSource;\n    if (!suppressFocus) {\n      this.tabbedLayout?.focusHeader(true);\n    }\n  }\n  destroy() {\n    if (this.parentComponent && this.parentComponent.isAlive()) {\n      this.destroyBean(this.parentComponent);\n    }\n    super.destroy();\n  }\n  createPanel(panelType) {\n    switch (panelType) {\n      case _TabbedChartMenu2.TAB_DATA:\n        return new ChartDataPanel(this.chartMenuContext);\n      case _TabbedChartMenu2.TAB_FORMAT:\n        return new FormatPanel(this.chartMenuContext);\n      default:\n        return new ChartSettingsPanel(this.chartMenuContext.chartController);\n    }\n  }\n};\n_TabbedChartMenu.TAB_DATA = \"data\";\n_TabbedChartMenu.TAB_FORMAT = \"format\";\nvar TabbedChartMenu = _TabbedChartMenu;\nvar ChartMenu = class extends Component39 {\n  constructor(eChartContainer, eMenuPanelContainer, chartMenuContext) {\n    super(\n      /* html */\n      `<div class=\"ag-chart-menu-wrapper\"></div>`\n    );\n    this.eChartContainer = eChartContainer;\n    this.eMenuPanelContainer = eMenuPanelContainer;\n    this.chartMenuContext = chartMenuContext;\n    this.buttons = {\n      chartLink: { iconName: \"linked\", callback: () => this.chartMenuService.toggleLinked(this.chartMenuContext) },\n      chartUnlink: {\n        iconName: \"unlinked\",\n        callback: () => this.chartMenuService.toggleLinked(this.chartMenuContext)\n      },\n      chartDownload: { iconName: \"save\", callback: () => this.chartMenuService.downloadChart(this.chartMenuContext) },\n      chartMenu: { iconName: \"menuAlt\", callback: (eventSource) => this.showMenuList(eventSource) }\n    };\n    this.panels = [];\n    this.menuVisible = false;\n    this.chartController = chartMenuContext.chartController;\n  }\n  wireBeans(beans) {\n    this.chartMenuService = beans.chartMenuService;\n    this.chartMenuListFactory = beans.chartMenuListFactory;\n    this.environment = beans.environment;\n  }\n  postConstruct() {\n    this.chartToolbar = this.createManagedBean(new ChartToolbar());\n    this.getGui().appendChild(this.chartToolbar.getGui());\n    this.refreshToolbarAndPanels();\n    this.addManagedEventListeners({\n      chartCreated: (e) => {\n        if (e.chartId === this.chartController.getChartId()) {\n          const showDefaultToolPanel = Boolean(this.gos.get(\"chartToolPanelsDef\")?.defaultToolPanel);\n          if (showDefaultToolPanel) {\n            this.showMenu({ panel: this.defaultPanel, suppressFocus: true });\n          }\n        }\n      }\n    });\n    this.addManagedListeners(this.chartController, {\n      chartLinkedChanged: this.refreshToolbarAndPanels.bind(this)\n    });\n    this.refreshMenuClasses();\n    this.addManagedListeners(this.chartController, { chartApiUpdate: this.refreshToolbarAndPanels.bind(this) });\n  }\n  isVisible() {\n    return this.menuVisible;\n  }\n  getExtraPaddingDirections() {\n    return [\"chartMenu\", \"chartLink\", \"chartUnlink\", \"chartDownload\"].some(\n      (v) => this.chartToolbarOptions.includes(v)\n    ) ? [\"top\"] : [];\n  }\n  refreshToolbarAndPanels() {\n    this.initToolbarOptionsAndPanels();\n    this.updateToolbar();\n  }\n  initToolbarOptionsAndPanels() {\n    const { panels, defaultPanel } = this.chartMenuService.getChartToolPanels(this.chartController);\n    this.panels = panels;\n    this.defaultPanel = defaultPanel;\n    this.chartToolbarOptions = this.chartMenuService.getChartToolbarOptions();\n  }\n  updateToolbar() {\n    const buttons = this.chartToolbarOptions.map((buttonName) => {\n      const { iconName, callback } = this.buttons[buttonName];\n      return {\n        buttonName,\n        iconName,\n        callback\n      };\n    });\n    this.chartToolbar.updateParams({ buttons });\n  }\n  createMenuPanel(defaultTab) {\n    const menuPanel = this.menuPanel = this.createBean(\n      new AgPanel({\n        height: \"100%\",\n        closable: true,\n        hideTitleBar: true,\n        cssIdentifier: \"chart-menu\"\n      })\n    );\n    menuPanel.setParentComponent(this);\n    this.eMenuPanelContainer.appendChild(menuPanel.getGui());\n    this.tabbedMenu = this.createBean(new TabbedChartMenu(this.panels, this.chartMenuContext));\n    this.addManagedListeners(this.tabbedMenu, {\n      closed: () => {\n        this.hideMenu();\n      }\n    });\n    this.addManagedListeners(menuPanel, { destroyed: () => this.destroyBean(this.tabbedMenu) });\n    return new AgPromise2((res) => {\n      window.setTimeout(() => {\n        menuPanel.setBodyComponent(this.tabbedMenu);\n        this.tabbedMenu.showTab(defaultTab);\n        res(menuPanel);\n      }, 100);\n    });\n  }\n  showContainer(eventSource, suppressFocus) {\n    if (!this.menuPanel) {\n      return;\n    }\n    this.menuVisible = true;\n    this.refreshMenuClasses();\n    this.tabbedMenu.showMenu(eventSource, suppressFocus);\n  }\n  showMenu(params) {\n    const { panel, eventSource, suppressFocus } = params ?? {};\n    if (this.menuPanel && !panel) {\n      this.showContainer(eventSource, suppressFocus);\n    } else {\n      const menuPanel = panel || this.defaultPanel;\n      let tab = this.panels.indexOf(menuPanel);\n      if (tab < 0) {\n        _warnOnce12(`'${panel}' is not a valid Chart Tool Panel name`);\n        tab = this.panels.indexOf(this.defaultPanel);\n      }\n      if (this.menuPanel) {\n        this.tabbedMenu.showTab(tab);\n        this.showContainer(eventSource, suppressFocus);\n      } else {\n        this.createMenuPanel(tab).then(() => this.showContainer(eventSource, suppressFocus));\n      }\n    }\n  }\n  hideMenu() {\n    this.menuVisible = false;\n    this.refreshMenuClasses();\n  }\n  refreshMenuClasses() {\n    this.eChartContainer.classList.toggle(\"ag-chart-menu-visible\", this.menuVisible);\n    this.eChartContainer.classList.toggle(\"ag-chart-menu-hidden\", !this.menuVisible);\n  }\n  showMenuList(eventSource) {\n    this.chartMenuListFactory.showMenuList({\n      eventSource,\n      showMenu: () => this.showMenu({ eventSource }),\n      chartMenuContext: this.chartMenuContext\n    });\n  }\n  destroy() {\n    super.destroy();\n    if (this.menuPanel && this.menuPanel.isAlive()) {\n      this.destroyBean(this.menuPanel);\n    }\n    if (this.tabbedMenu && this.tabbedMenu.isAlive()) {\n      this.destroyBean(this.tabbedMenu);\n    }\n  }\n};\nvar CARTESIAN_AXIS_TYPES = [\"number\", \"category\", \"time\", \"grouped-category\"];\nvar POLAR_AXIS_TYPES = [\"angle-category\", \"angle-number\", \"radius-category\", \"radius-number\"];\nvar VALID_AXIS_TYPES = [...CARTESIAN_AXIS_TYPES, ...POLAR_AXIS_TYPES];\nvar ChartOptionsService = class extends BeanStub14 {\n  constructor(chartController) {\n    super();\n    this.chartController = chartController;\n  }\n  getChartThemeOverridesProxy() {\n    return {\n      getValue: (expression) => this.getChartOption(expression),\n      setValue: (expression, value) => this.setChartThemeOverrides([{ expression, value }]),\n      setValues: (properties) => this.setChartThemeOverrides(properties)\n    };\n  }\n  getAxisThemeOverridesProxy() {\n    return {\n      getValue: (expression) => this.getAxisProperty(expression),\n      setValue: (expression, value) => this.setAxisThemeOverrides([{ expression, value }]),\n      setValues: (properties) => this.setAxisThemeOverrides(properties)\n    };\n  }\n  getCartesianAxisOptionsProxy(axisType) {\n    return {\n      getValue: (expression) => this.getCartesianAxisProperty(axisType, expression),\n      setValue: (expression, value) => this.setCartesianAxisOptions(axisType, [{ expression, value }]),\n      setValues: (properties) => this.setCartesianAxisOptions(axisType, properties)\n    };\n  }\n  getCartesianAxisThemeOverridesProxy(axisType) {\n    return {\n      getValue: (expression) => this.getCartesianAxisProperty(axisType, expression),\n      setValue: (expression, value) => this.setCartesianAxisThemeOverrides(axisType, [{ expression, value }]),\n      setValues: (properties) => this.setCartesianAxisThemeOverrides(axisType, properties)\n    };\n  }\n  getCartesianAxisAppliedThemeOverridesProxy(axisType) {\n    return {\n      getValue: (expression) => this.getCartesianAxisThemeOverride(\n        axisType,\n        // Allow the caller to specify a wildcard expression to retrieve the whole set of overrides\n        expression === \"*\" ? null : expression\n      ),\n      setValue: (expression, value) => this.setCartesianAxisThemeOverrides(\n        axisType,\n        // Allow the caller to specify a wildcard expression to set the whole set of overrides\n        [{ expression: expression === \"*\" ? null : expression, value }]\n      ),\n      setValues: (properties) => this.setCartesianAxisThemeOverrides(axisType, properties)\n    };\n  }\n  getSeriesOptionsProxy(getSelectedSeries) {\n    return {\n      getValue: (expression, calculated) => this.getSeriesOption(getSelectedSeries(), expression, calculated),\n      setValue: (expression, value) => this.setSeriesOptions(getSelectedSeries(), [{ expression, value }]),\n      setValues: (properties) => this.setSeriesOptions(getSelectedSeries(), properties)\n    };\n  }\n  /**\n   * Determine the set of theme overrides that should be retained when transitioning from one chart type to another.\n   */\n  getPersistedChartThemeOverrides(existingChartOptions, existingAxes, existingChartType, targetChartType) {\n    const retainedThemeOverrideKeys = this.getRetainedChartThemeOverrideKeys(existingChartType, targetChartType);\n    const retainedChartAxisThemeOverrideKeys = this.getRetainedChartAxisThemeOverrideKeys(\n      null,\n      existingChartType,\n      targetChartType\n    );\n    const targetChartOptions = this.createChartOptions();\n    for (const expression of retainedThemeOverrideKeys) {\n      const value = this.retrieveChartOptionsThemeOverride(existingChartOptions, existingChartType, expression);\n      if (value !== void 0) {\n        this.assignChartOptionsThemeOverride(targetChartOptions, targetChartType, expression, value);\n      }\n    }\n    if (existingAxes) {\n      this.assignPersistedAxisOverrides({\n        existingAxes,\n        retainedChartAxisThemeOverrideKeys,\n        existingChartOptions,\n        targetChartOptions,\n        existingChartType,\n        targetChartType\n      });\n    }\n    return targetChartOptions.theme.overrides;\n  }\n  assignPersistedAxisOverrides(params) {\n    const {\n      existingAxes,\n      retainedChartAxisThemeOverrideKeys,\n      existingChartOptions,\n      targetChartOptions,\n      existingChartType,\n      targetChartType\n    } = params;\n    for (const { expression, targetAxisTypes } of retainedChartAxisThemeOverrideKeys) {\n      for (const existingAxisType of existingAxes.map((axis) => axis.type)) {\n        const value = this.retrieveChartOptionsThemeOverride(\n          existingChartOptions,\n          existingChartType,\n          [\"axes\", existingAxisType, expression].join(\".\")\n        );\n        if (value !== void 0) {\n          for (const targetAxisType of targetAxisTypes) {\n            this.assignChartOptionsThemeOverride(\n              targetChartOptions,\n              targetChartType,\n              [\"axes\", targetAxisType, expression].join(\".\"),\n              value\n            );\n          }\n        }\n      }\n    }\n  }\n  getRetainedChartThemeOverrideKeys(existingChartType, targetChartType) {\n    const UNIVERSAL_PERSISTED_THEME_OVERRIDES = [\"animation\"];\n    const PERSISTED_CARTESIAN_CHART_THEME_OVERRIDES = [\"zoom\", \"navigator\"];\n    const chartSpecificThemeOverrideKeys = ((previousChartType, updatedChartType) => {\n      const expressions = new Array();\n      if (isCartesian(getSeriesType(previousChartType)) && isCartesian(getSeriesType(updatedChartType))) {\n        expressions.push(...PERSISTED_CARTESIAN_CHART_THEME_OVERRIDES);\n      }\n      return expressions;\n    })(existingChartType, targetChartType);\n    return [...UNIVERSAL_PERSISTED_THEME_OVERRIDES, ...chartSpecificThemeOverrideKeys];\n  }\n  getRetainedChartAxisThemeOverrideKeys(axisType, existingChartType, targetChartType) {\n    if (isCartesian(getSeriesType(existingChartType)) && isCartesian(getSeriesType(targetChartType))) {\n      const retainedKeys = this.getRetainedCartesianAxisThemeOverrideKeys(axisType);\n      return retainedKeys.map((expression) => ({ expression, targetAxisTypes: CARTESIAN_AXIS_TYPES }));\n    }\n    return [];\n  }\n  getRetainedCartesianAxisThemeOverrideKeys(axisType) {\n    const axisPositionSuffixes = axisType === \"xAxis\" ? [\"\", \".top\", \".bottom\"] : axisType === \"yAxis\" ? [\"\", \".left\", \".right\"] : [\"\", \".left\", \".right\", \".top\", \".bottom\"];\n    const PERSISTED_CARTESIAN_AXIS_THEME_OVERRIDES = [\"crosshair\"];\n    const expressions = new Array();\n    for (const expression of PERSISTED_CARTESIAN_AXIS_THEME_OVERRIDES) {\n      for (const axisPositionSuffix of axisPositionSuffixes) {\n        expressions.push(`${expression}${axisPositionSuffix}`);\n      }\n    }\n    return expressions;\n  }\n  getChartOption(expression) {\n    return get(this.getChart(), expression, void 0);\n  }\n  setChartThemeOverrides(properties) {\n    const chartType = this.getChartType();\n    const chartOptions = this.createChartOptions();\n    for (const { expression, value } of properties) {\n      this.assignChartOptionsThemeOverride(chartOptions, chartType, expression, value);\n    }\n    this.applyChartOptions(chartOptions);\n  }\n  applyChartOptions(chartOptions, options) {\n    if (Object.keys(chartOptions).length === 0)\n      return;\n    this.updateChart(chartOptions);\n    const shouldRaiseEvent = !options?.silent;\n    if (shouldRaiseEvent)\n      this.raiseChartOptionsChangedEvent();\n  }\n  awaitChartOptionUpdate(func) {\n    const chart = this.chartController.getChartProxy().getChart();\n    chart.waitForUpdate().then(() => func()).catch((e) => _errorOnce3(`chart update failed`, e));\n  }\n  getAxisProperty(expression) {\n    return get(this.getChart().axes?.[0], expression, void 0);\n  }\n  setAxisThemeOverrides(properties) {\n    const chart = this.getChart();\n    const chartType = this.getChartType();\n    const chartOptions = this.createChartOptions();\n    for (const { expression, value } of properties) {\n      const relevantAxes = chart.axes?.filter((axis) => {\n        const parts = expression.split(\".\");\n        let current = axis;\n        for (const part of parts) {\n          if (!(part in current)) {\n            return false;\n          }\n          current = current[part];\n        }\n        return true;\n      });\n      if (!relevantAxes)\n        continue;\n      for (const axis of relevantAxes) {\n        if (!this.isValidAxisType(axis))\n          continue;\n        this.assignChartAxisThemeOverride(chartOptions, chartType, axis.type, null, expression, value);\n      }\n    }\n    this.applyChartOptions(chartOptions);\n  }\n  getCartesianAxisProperty(axisType, expression) {\n    const axes = this.getChartAxes();\n    const axis = this.getCartesianAxis(axes, axisType);\n    return get(axis, expression, void 0);\n  }\n  getCartesianAxisThemeOverride(axisType, expression) {\n    const axes = this.getChartAxes();\n    const chartAxis = this.getCartesianAxis(axes, axisType);\n    if (!chartAxis || !this.isValidAxisType(chartAxis))\n      return void 0;\n    const chartType = this.getChartType();\n    const chartOptions = this.getChart().getOptions();\n    return this.retrieveChartAxisThemeOverride(\n      chartOptions,\n      chartType,\n      chartAxis.type,\n      axisType === \"yAxis\" ? [\"left\", \"right\"] : [\"bottom\", \"top\"],\n      expression\n    );\n  }\n  setCartesianAxisThemeOverrides(axisType, properties) {\n    const axes = this.getChartAxes();\n    const chartAxis = this.getCartesianAxis(axes, axisType);\n    if (!chartAxis || !this.isValidAxisType(chartAxis))\n      return;\n    const chartType = this.getChartType();\n    const chartOptions = this.createChartOptions();\n    for (const { expression, value } of properties) {\n      this.assignChartAxisThemeOverride(\n        chartOptions,\n        chartType,\n        chartAxis.type,\n        axisType === \"yAxis\" ? [\"left\", \"right\"] : [\"bottom\", \"top\"],\n        expression,\n        value\n      );\n    }\n    this.applyChartOptions(chartOptions);\n  }\n  setCartesianAxisOptions(axisType, properties) {\n    this.updateCartesianAxisOptions(axisType, (chartOptions, axes, chartAxis) => {\n      const axisIndex = axes.indexOf(chartAxis);\n      for (const { expression, value } of properties) {\n        this.assignChartOption(chartOptions, `axes.${axisIndex}.${expression}`, value);\n      }\n    });\n  }\n  updateCartesianAxisOptions(axisType, updateFunc) {\n    const existingChartOptions = this.getChart().getOptions();\n    const axisOptions = \"axes\" in existingChartOptions ? existingChartOptions.axes : void 0;\n    if (!existingChartOptions || !axisOptions)\n      return;\n    const axes = this.getChartAxes();\n    const chartAxis = this.getCartesianAxis(axes, axisType);\n    if (!chartAxis)\n      return;\n    const chartOptions = this.createChartOptions();\n    chartOptions.axes = axisOptions;\n    updateFunc(chartOptions, axes, chartAxis, existingChartOptions);\n    this.applyChartOptions(chartOptions);\n  }\n  setCartesianCategoryAxisType(axisType, value) {\n    this.updateCartesianAxisOptions(axisType, (chartOptions, _axes, chartAxis, existingChartOptions) => {\n      const chartType = this.getChartType();\n      this.assignPersistedAxisOverrides({\n        existingAxes: [chartAxis],\n        retainedChartAxisThemeOverrideKeys: this.getRetainedChartAxisThemeOverrideKeys(\n          axisType,\n          chartType,\n          chartType\n        ),\n        existingChartOptions,\n        targetChartOptions: chartOptions,\n        existingChartType: chartType,\n        targetChartType: chartType\n      });\n      this.assignChartOption(chartOptions, `axes.0.type`, value);\n      this.chartController.setCategoryAxisType(value);\n    });\n  }\n  getCartesianAxis(axes, axisType) {\n    if (axes.length < 2) {\n      return void 0;\n    }\n    switch (axisType) {\n      case \"xAxis\":\n        return axes[0].direction === \"x\" ? axes[0] : axes[1];\n      case \"yAxis\":\n        return axes[1].direction === \"y\" ? axes[1] : axes[0];\n    }\n  }\n  getSeriesOption(seriesType, expression, calculated) {\n    const series = this.getChart().series.find((s) => isMatchingSeries(seriesType, s));\n    return get(calculated ? series : series?.properties.toJson(), expression, void 0);\n  }\n  setSeriesOptions(seriesType, properties) {\n    const chartOptions = this.createChartOptions();\n    for (const { expression, value } of properties) {\n      this.assignChartOptionsSeriesThemeOverride(chartOptions, seriesType, `series.${expression}`, value);\n    }\n    this.applyChartOptions(chartOptions);\n  }\n  getPairedMode() {\n    return this.chartController.getChartProxy().isPaired();\n  }\n  setPairedMode(paired) {\n    this.chartController.getChartProxy().setPaired(paired);\n  }\n  getChartAxes() {\n    const chart = this.getChart();\n    return chart.axes ?? [];\n  }\n  retrieveChartAxisThemeOverride(chartOptions, chartType, axisType, axisPositions, expression) {\n    if (axisPositions) {\n      for (const axisPosition of axisPositions) {\n        const value = this.retrieveChartOptionsThemeOverride(\n          chartOptions,\n          chartType,\n          [\"axes\", axisType, axisPosition, ...expression ? [expression] : []].join(\".\")\n        );\n        if (value === void 0)\n          continue;\n        return value;\n      }\n    } else {\n      return this.retrieveChartOptionsThemeOverride(\n        chartOptions,\n        chartType,\n        [\"axes\", axisType, ...expression ? [expression] : []].join(\".\")\n      );\n    }\n  }\n  assignChartAxisThemeOverride(chartOptions, chartType, axisType, axisPositions, expression, value) {\n    if (axisPositions) {\n      for (const axisPosition of axisPositions) {\n        this.assignChartOptionsThemeOverride(\n          chartOptions,\n          chartType,\n          [\"axes\", axisType, axisPosition, ...expression ? [expression] : []].join(\".\"),\n          value\n        );\n      }\n    } else {\n      this.assignChartOptionsThemeOverride(\n        chartOptions,\n        chartType,\n        [\"axes\", axisType, ...expression ? [expression] : []].join(\".\"),\n        value\n      );\n    }\n  }\n  isValidAxisType(chartAxis) {\n    return VALID_AXIS_TYPES.includes(chartAxis.type);\n  }\n  getChartType() {\n    return this.chartController.getChartType();\n  }\n  getChart() {\n    return this.chartController.getChartProxy().getChart();\n  }\n  updateChart(chartOptions) {\n    const chartRef = this.chartController.getChartProxy().getChartRef();\n    chartRef.skipAnimations();\n    chartRef.updateDelta(chartOptions);\n  }\n  createChartOptions() {\n    const chartOptions = {\n      theme: {\n        overrides: {}\n      }\n    };\n    return chartOptions;\n  }\n  retrieveChartOptionsThemeOverride(chartOptions, chartType, expression) {\n    const chartSeriesTypes = this.getChartThemeOverridesSeriesTypeKeys(chartType);\n    for (const seriesType of chartSeriesTypes) {\n      const value = this.retrieveChartOptionsSeriesThemeOverride(chartOptions, seriesType, expression);\n      if (value === void 0)\n        continue;\n      return value;\n    }\n    return void 0;\n  }\n  assignChartOptionsThemeOverride(chartOptions, chartType, expression, value) {\n    const chartSeriesTypes = this.getChartThemeOverridesSeriesTypeKeys(chartType);\n    for (const seriesType of chartSeriesTypes) {\n      this.assignChartOptionsSeriesThemeOverride(chartOptions, seriesType, expression, value);\n    }\n  }\n  retrieveChartOptionsSeriesThemeOverride(chartOptions, seriesType, expression) {\n    return this.retrieveChartOption(\n      chartOptions,\n      [\"theme\", \"overrides\", seriesType, ...expression ? [expression] : []].join(\".\")\n    );\n  }\n  assignChartOptionsSeriesThemeOverride(chartOptions, seriesType, expression, value) {\n    this.assignChartOption(\n      chartOptions,\n      [\"theme\", \"overrides\", seriesType, ...expression ? [expression] : []].join(\".\"),\n      value\n    );\n  }\n  getChartThemeOverridesSeriesTypeKeys(chartType) {\n    const chartSeriesTypes = this.chartController.getChartSeriesTypes(chartType);\n    if (this.chartController.isComboChart()) {\n      chartSeriesTypes.push(\"common\");\n    }\n    return chartSeriesTypes;\n  }\n  retrieveChartOption(chartOptions, expression) {\n    return get(chartOptions, expression, void 0);\n  }\n  assignChartOption(chartOptions, expression, value) {\n    set(chartOptions, expression, value);\n  }\n  raiseChartOptionsChangedEvent() {\n    const chartModel = this.chartController.getChartModel();\n    this.eventService.dispatchEvent({\n      type: \"chartOptionsChanged\",\n      chartId: chartModel.chartId,\n      chartType: chartModel.chartType,\n      chartThemeName: this.chartController.getChartThemeName(),\n      chartOptions: chartModel.chartOptions\n    });\n  }\n  destroy() {\n    super.destroy();\n  }\n};\nfunction isMatchingSeries(seriesType, series) {\n  return isSeriesType(seriesType) && series.type === seriesType;\n}\nvar GridChartComp = class _GridChartComp extends Component40 {\n  constructor(params) {\n    super(\n      /* html */\n      `<div class=\"ag-chart\">\n            <div data-ref=\"eChartContainer\" class=\"ag-chart-components-wrapper ag-chart-menu-hidden\">\n                <div data-ref=\"eChart\" class=\"ag-chart-canvas-wrapper\"></div>\n                <div data-ref=\"eEmpty\" class=\"ag-chart-empty-text ag-unselectable\"></div>\n            </div>\n            <div data-ref=\"eMenuContainer\" class=\"ag-chart-docked-container\"></div>\n            </div>`\n    );\n    this.eChart = RefPlaceholder19;\n    this.eChartContainer = RefPlaceholder19;\n    this.eMenuContainer = RefPlaceholder19;\n    this.eEmpty = RefPlaceholder19;\n    this.params = params;\n  }\n  wireBeans(beans) {\n    this.crossFilterService = beans.chartCrossFilterService;\n    this.chartTranslationService = beans.chartTranslationService;\n    this.chartMenuService = beans.chartMenuService;\n    this.focusService = beans.focusService;\n    this.popupService = beans.popupService;\n  }\n  postConstruct() {\n    const modelParams = {\n      ...this.params,\n      chartType: getCanonicalChartType(this.params.chartType),\n      chartThemeName: this.getThemeName()\n    };\n    const isRtl = this.gos.get(\"enableRtl\");\n    this.addCssClass(isRtl ? \"ag-rtl\" : \"ag-ltr\");\n    const model = this.createBean(new ChartDataModel(modelParams));\n    this.chartController = this.createManagedBean(new ChartController(model));\n    this.chartOptionsService = this.createManagedBean(new ChartOptionsService(this.chartController));\n    this.validateCustomThemes();\n    this.createChart();\n    if (this.params.insideDialog) {\n      this.addDialog();\n    }\n    this.addMenu();\n    this.addManagedElementListeners(this.getGui(), { focusin: this.setActiveChartCellRange.bind(this) });\n    this.addManagedListeners(this.chartController, { chartModelUpdate: this.update.bind(this) });\n    this.addManagedPropertyListeners(\n      [\"chartThemeOverrides\", \"chartThemes\"],\n      this.reactivePropertyUpdate.bind(this)\n    );\n    this.update();\n    this.raiseChartCreatedEvent();\n  }\n  createChart() {\n    let chartInstance = void 0;\n    if (this.chartProxy) {\n      chartInstance = this.chartProxy.destroy({ keepChartInstance: true });\n    }\n    const crossFilterCallback = (event, reset) => {\n      const ctx = this.params.crossFilteringContext;\n      ctx.lastSelectedChartId = reset ? \"\" : this.chartController.getChartId();\n      if (reset) {\n        this.params.crossFilteringResetCallback();\n      }\n      this.crossFilterService.filter(event, reset);\n    };\n    const chartType = this.chartController.getChartType();\n    const chartProxyParams = {\n      chartType,\n      chartInstance,\n      getChartThemeName: this.getChartThemeName.bind(this),\n      getChartThemes: this.getChartThemes.bind(this),\n      customChartThemes: this.gos.get(\"customChartThemes\"),\n      getGridOptionsChartThemeOverrides: () => this.getGridOptionsChartThemeOverrides(),\n      getExtraPaddingDirections: () => this.chartMenu?.getExtraPaddingDirections() ?? [],\n      apiChartThemeOverrides: this.params.chartThemeOverrides,\n      crossFiltering: this.params.crossFiltering ?? false,\n      crossFilterCallback,\n      parentElement: this.eChart,\n      grouping: this.chartController.isGrouping(),\n      chartThemeToRestore: this.params.chartThemeName,\n      chartOptionsToRestore: this.params.chartOptionsToRestore,\n      chartPaletteToRestore: this.params.chartPaletteToRestore,\n      seriesChartTypes: this.chartController.getSeriesChartTypes(),\n      translate: (toTranslate) => this.chartTranslationService.translate(toTranslate)\n    };\n    this.params.chartOptionsToRestore = void 0;\n    this.chartType = chartType;\n    this.chartProxy = _GridChartComp.createChartProxy(chartProxyParams);\n    if (!this.chartProxy) {\n      _warnOnce13(\"invalid chart type supplied: \" + chartProxyParams.chartType);\n      return;\n    }\n    this.chartController.setChartProxy(this.chartProxy);\n    this.createMenuContext();\n  }\n  createMenuContext() {\n    if (this.chartMenuContext) {\n      return;\n    }\n    const chartMenuParamsFactory = this.createManagedBean(\n      new ChartMenuParamsFactory(this.chartOptionsService.getChartThemeOverridesProxy())\n    );\n    const chartAxisMenuParamsFactory = this.createManagedBean(\n      new ChartMenuParamsFactory(this.chartOptionsService.getAxisThemeOverridesProxy())\n    );\n    this.chartMenuContext = {\n      chartController: this.chartController,\n      chartOptionsService: this.chartOptionsService,\n      chartMenuParamsFactory,\n      chartAxisMenuParamsFactory\n    };\n  }\n  getChartThemeName() {\n    return this.chartController.getChartThemeName();\n  }\n  getChartThemes() {\n    return this.chartController.getThemeNames();\n  }\n  getGridOptionsChartThemeOverrides() {\n    return this.gos.get(\"chartThemeOverrides\");\n  }\n  static createChartProxy(chartProxyParams) {\n    switch (chartProxyParams.chartType) {\n      case \"column\":\n      case \"bar\":\n      case \"groupedColumn\":\n      case \"stackedColumn\":\n      case \"normalizedColumn\":\n      case \"groupedBar\":\n      case \"stackedBar\":\n      case \"normalizedBar\":\n        return new BarChartProxy(chartProxyParams);\n      case \"pie\":\n      case \"donut\":\n      case \"doughnut\":\n        return new PieChartProxy(chartProxyParams);\n      case \"area\":\n      case \"stackedArea\":\n      case \"normalizedArea\":\n        return new AreaChartProxy(chartProxyParams);\n      case \"line\":\n        return new LineChartProxy(chartProxyParams);\n      case \"scatter\":\n      case \"bubble\":\n        return new ScatterChartProxy(chartProxyParams);\n      case \"histogram\":\n        return new HistogramChartProxy(chartProxyParams);\n      case \"radarLine\":\n      case \"radarArea\":\n      case \"nightingale\":\n      case \"radialColumn\":\n      case \"radialBar\":\n        return new PolarChartProxy(chartProxyParams);\n      case \"rangeBar\":\n      case \"rangeArea\":\n        return new RangeChartProxy(chartProxyParams);\n      case \"boxPlot\":\n        return new BoxPlotChartProxy(chartProxyParams);\n      case \"treemap\":\n      case \"sunburst\":\n        return new HierarchicalChartProxy(chartProxyParams);\n      case \"heatmap\":\n        return new HeatmapChartProxy(chartProxyParams);\n      case \"waterfall\":\n        return new WaterfallChartProxy(chartProxyParams);\n      case \"columnLineCombo\":\n      case \"areaColumnCombo\":\n      case \"customCombo\":\n        return new ComboChartProxy(chartProxyParams);\n      default:\n        throw `AG Grid: Unable to create chart as an invalid chartType = '${chartProxyParams.chartType}' was supplied.`;\n    }\n  }\n  addDialog() {\n    const title = this.chartTranslationService.translate(\n      this.params.pivotChart ? \"pivotChartTitle\" : \"rangeChartTitle\"\n    );\n    const { width, height } = this.getBestDialogSize();\n    const afterGuiAttached = this.params.focusDialogOnOpen ? () => setTimeout(() => this.focusService.focusInto(this.getGui())) : void 0;\n    this.chartDialog = new AgDialog({\n      resizable: true,\n      movable: true,\n      maximizable: true,\n      title,\n      width,\n      height,\n      component: this,\n      centered: true,\n      closable: true,\n      afterGuiAttached,\n      postProcessPopupParams: {\n        type: \"chart\"\n      }\n    });\n    this.createBean(this.chartDialog);\n    this.chartDialog.addEventListener(\"destroyed\", () => {\n      this.destroy();\n      this.chartMenuService.hideAdvancedSettings();\n      const lastFocusedCell = this.focusService.getFocusedCell();\n      setTimeout(() => {\n        if (this.focusService.isAlive()) {\n          if (lastFocusedCell) {\n            this.focusService.setFocusedCell({ ...lastFocusedCell, forceBrowserFocus: true });\n          } else {\n            this.focusService.focusGridInnerElement();\n          }\n        }\n      });\n    });\n  }\n  getBestDialogSize() {\n    const popupParent = this.popupService.getPopupParent();\n    const maxWidth = _getAbsoluteWidth2(popupParent) * 0.75;\n    const maxHeight = _getAbsoluteHeight2(popupParent) * 0.75;\n    const ratio = 0.553;\n    const chart = this.chartProxy.getChart();\n    let width = this.params.insideDialog ? 850 : chart.width;\n    let height = this.params.insideDialog ? 470 : chart.height;\n    if (width > maxWidth || height > maxHeight) {\n      width = Math.min(width, maxWidth);\n      height = Math.round(width * ratio);\n      if (height > maxHeight) {\n        height = maxHeight;\n        width = Math.min(width, Math.round(height / ratio));\n      }\n    }\n    return { width, height };\n  }\n  addMenu() {\n    if (!this.params.crossFiltering) {\n      this.chartMenu = this.createBean(\n        new ChartMenu(this.eChartContainer, this.eMenuContainer, this.chartMenuContext)\n      );\n      this.eChartContainer.appendChild(this.chartMenu.getGui());\n    }\n  }\n  update(params) {\n    if (params?.chartId) {\n      const validUpdate = this.chartController.update(params);\n      if (!validUpdate) {\n        return;\n      }\n    }\n    const updatedChartType = this.chartTypeChanged(params);\n    const persistedThemeOverrides = updatedChartType || this.chartEmpty ? ((updatedChartType2) => {\n      const currentChartType = this.chartType;\n      const targetChartType = updatedChartType2;\n      const existingChartInstance = this.chartProxy.getChart();\n      const existingChartOptions = existingChartInstance?.getOptions();\n      const existingAxes = existingChartInstance?.axes;\n      return this.chartOptionsService.getPersistedChartThemeOverrides(\n        existingChartOptions,\n        existingAxes,\n        currentChartType,\n        targetChartType ?? currentChartType\n      );\n    })(updatedChartType) : void 0;\n    if (updatedChartType)\n      this.createChart();\n    if (persistedThemeOverrides && params?.chartThemeOverrides) {\n      _mergeDeep(persistedThemeOverrides, params.chartThemeOverrides);\n    }\n    const updatedThemeOverrides = persistedThemeOverrides ?? params?.chartThemeOverrides;\n    this.updateChart(updatedThemeOverrides);\n    if (params?.chartId) {\n      this.chartProxy.getChart().waitForUpdate().then(() => {\n        this.chartController.raiseChartApiUpdateEvent();\n      });\n    }\n  }\n  updateChart(updatedOverrides) {\n    const { chartProxy } = this;\n    const selectedCols = this.chartController.getSelectedValueColState();\n    const data = this.chartController.getChartData();\n    const chartEmpty = this.handleEmptyChart(data, selectedCols.length);\n    this.chartEmpty = chartEmpty;\n    if (chartEmpty) {\n      if (updatedOverrides)\n        this.chartController.updateThemeOverrides(updatedOverrides);\n      return;\n    }\n    const chartUpdateParams = this.chartController.getChartUpdateParams(updatedOverrides);\n    chartProxy.update(chartUpdateParams);\n    this.chartProxy.getChart().waitForUpdate().then(() => {\n      this.chartController.raiseChartUpdatedEvent();\n    });\n  }\n  chartTypeChanged(updateParams) {\n    const [currentType, updatedChartType] = [this.chartController.getChartType(), updateParams?.chartType];\n    const targetChartType = updatedChartType ? getCanonicalChartType(updatedChartType) : void 0;\n    if (this.chartType !== currentType)\n      return targetChartType ?? currentType;\n    if (targetChartType && currentType !== targetChartType)\n      return targetChartType;\n    return null;\n  }\n  getChartModel() {\n    return this.chartController.getChartModel();\n  }\n  getChartImageDataURL(fileFormat) {\n    return this.chartProxy.getChartImageDataURL(fileFormat);\n  }\n  handleEmptyChart(data, numFields) {\n    const pivotModeDisabled = this.chartController.isPivotChart() && !this.chartController.isPivotMode();\n    const chartType = this.chartController.getChartType();\n    let minFieldsRequired = 1;\n    if (this.chartController.isActiveXYChart()) {\n      minFieldsRequired = chartType === \"bubble\" ? 3 : 2;\n    } else if (isHierarchical(getSeriesType(chartType))) {\n      minFieldsRequired = 0;\n    }\n    const isEmptyChart = numFields < minFieldsRequired || data.length === 0;\n    if (this.eChart) {\n      const isEmpty = pivotModeDisabled || isEmptyChart;\n      _setDisplayed52(this.eChart, !isEmpty);\n      _setDisplayed52(this.eEmpty, isEmpty);\n    }\n    if (pivotModeDisabled) {\n      this.eEmpty.innerText = this.chartTranslationService.translate(\"pivotChartRequiresPivotMode\");\n      return true;\n    }\n    if (isEmptyChart) {\n      this.eEmpty.innerText = this.chartTranslationService.translate(\"noDataToChart\");\n      return true;\n    }\n    return false;\n  }\n  downloadChart(dimensions, fileName, fileFormat) {\n    this.chartProxy.downloadChart(dimensions, fileName, fileFormat);\n  }\n  openChartToolPanel(panel) {\n    const menuPanel = panel ? CHART_TOOL_PANEL_MENU_OPTIONS[panel] : panel;\n    this.chartMenu.showMenu({ panel: menuPanel });\n  }\n  closeChartToolPanel() {\n    this.chartMenu.hideMenu();\n  }\n  getChartId() {\n    return this.chartController.getChartId();\n  }\n  getUnderlyingChart() {\n    return this.chartProxy.getChartRef();\n  }\n  crossFilteringReset() {\n    this.chartProxy.crossFilteringReset();\n  }\n  setActiveChartCellRange(focusEvent) {\n    if (this.getGui().contains(focusEvent.relatedTarget)) {\n      return;\n    }\n    this.chartController.setChartRange(true);\n    this.focusService.clearFocusedCell();\n  }\n  getThemeName() {\n    const availableChartThemes = this.gos.get(\"chartThemes\") || DEFAULT_THEMES;\n    if (availableChartThemes.length === 0) {\n      throw new Error(\"Cannot create chart: no chart themes available.\");\n    }\n    const { chartThemeName } = this.params;\n    return _includes7(availableChartThemes, chartThemeName) ? chartThemeName : availableChartThemes[0];\n  }\n  getAllKeysInObjects(objects) {\n    const allValues = {};\n    objects.filter((obj) => obj != null).forEach((obj) => {\n      Object.keys(obj).forEach((key) => allValues[key] = null);\n    });\n    return Object.keys(allValues);\n  }\n  validateCustomThemes() {\n    const suppliedThemes = this.getChartThemes();\n    const customChartThemes = this.gos.get(\"customChartThemes\");\n    if (customChartThemes) {\n      this.getAllKeysInObjects([customChartThemes]).forEach((customThemeName) => {\n        if (!_includes7(suppliedThemes, customThemeName)) {\n          _warnOnce13(\n            \"a custom chart theme with the name '\" + customThemeName + \"' has been supplied but not added to the 'chartThemes' list\"\n          );\n        }\n      });\n    }\n  }\n  reactivePropertyUpdate() {\n    this.chartController.setChartThemeName(this.getThemeName(), true);\n    const chartId = this.getChartId();\n    const modelType = this.chartController.isCrossFilterChart() ? \"crossFilter\" : this.getChartModel().modelType;\n    const chartThemeOverrides = this.gos.get(\"chartThemeOverrides\") || {};\n    this.update({\n      type: `${modelType}ChartUpdate`,\n      chartId,\n      chartThemeOverrides\n    });\n  }\n  raiseChartCreatedEvent() {\n    this.chartProxy.getChart().waitForUpdate().then(() => {\n      this.eventService.dispatchEvent({\n        type: \"chartCreated\",\n        chartId: this.chartController.getChartId()\n      });\n    });\n  }\n  raiseChartDestroyedEvent() {\n    this.eventService.dispatchEvent({\n      type: \"chartDestroyed\",\n      chartId: this.chartController.getChartId()\n    });\n  }\n  destroy() {\n    super.destroy();\n    if (this.chartProxy) {\n      this.chartProxy.destroy();\n    }\n    this.destroyBean(this.chartMenu);\n    if (this.chartDialog && this.chartDialog.isAlive()) {\n      this.destroyBean(this.chartDialog);\n    }\n    this.onDestroyColorSchemeChangeListener?.();\n    const eGui = this.getGui();\n    _clearElement42(eGui);\n    _removeFromParent7(eGui);\n    this.raiseChartDestroyedEvent();\n  }\n};\nvar DEBUG = false;\nfunction upgradeChartModel(model) {\n  const originalVersion = model.version;\n  if (model.version == null) {\n    model.version = heuristicVersionDetection(model);\n  }\n  model = migrateIfBefore(\"23.0.0\", model, migrateV23);\n  model = migrateIfBefore(\"24.0.0\", model, migrateV24);\n  model = migrateIfBefore(\"25.1.0\", model, migrateV25_1);\n  model = migrateIfBefore(\"26.0.0\", model, migrateV26);\n  model = migrateIfBefore(\"26.1.0\", model, migrateV26_1);\n  model = migrateIfBefore(\"26.2.0\", model, migrateV26_2);\n  model = migrateIfBefore(\"28.0.0\", model, migrateV28);\n  model = migrateIfBefore(\"28.2.0\", model, migrateV28_2);\n  model = migrateIfBefore(\"29.0.0\", model, migrateV29);\n  model = migrateIfBefore(\"29.1.0\", model, migrateV29_1);\n  model = migrateIfBefore(\"29.2.0\", model, migrateV29_2);\n  model = migrateIfBefore(\"30.0.0\", model, migrateV30);\n  model = migrateIfBefore(\"31.0.0\", model, migrateV31);\n  model = migrateIfBefore(\"32.0.0\", model, migrateV32);\n  model = cleanup(model);\n  model = migrateIfBefore(VERSION4, model, (m) => m);\n  if (DEBUG && originalVersion !== model.version) {\n    console.log(\"AG Grid: ChartModel migration complete\", { model });\n  }\n  return model;\n}\nfunction migrateV23(model) {\n  model = jsonRename(\"chartOptions.legend.item.marker.type\", \"shape\", model);\n  model = jsonRename(\"chartOptions.seriesDefaults.marker.type\", \"shape\", model);\n  model = jsonRename(\"chartOptions.legend.padding\", \"spacing\", model);\n  return model;\n}\nfunction migrateV24(model) {\n  model = jsonDelete(\"chartOptions.seriesDefaults.marker.minSize\", model);\n  const {\n    chartType,\n    chartPalette,\n    // Migrate.\n    chartOptions: { xAxis, yAxis, ...chartOptions },\n    ...chartModel\n  } = model;\n  const axesTypes = getLegacyAxisType(chartType);\n  const axes = axesTypes?.map((type, i) => ({\n    type,\n    ...i === 0 ? xAxis : yAxis\n  }));\n  const LEGACY_PALETTES = {\n    borneo: \"ag-default\",\n    material: \"ag-material\",\n    bright: \"ag-vivid\"\n  };\n  return {\n    chartType,\n    chartThemeName: LEGACY_PALETTES[chartPalette] ?? \"ag-default\",\n    chartOptions: {\n      ...chartOptions,\n      axes,\n      xAxis,\n      yAxis\n    },\n    ...chartModel\n  };\n}\nfunction migrateV25_1(model) {\n  model = jsonRename(\"chartOptions.seriesDefaults.label.minRequiredAngle\", \"minAngle\", model);\n  return model;\n}\nfunction migrateV26(model) {\n  const highlightOptUpdate = ({ dimOpacity, ...opts }) => ({\n    ...opts,\n    ...dimOpacity != null ? { series: { dimOpacity } } : {}\n  });\n  model = jsonMutate(\"chartOptions.seriesDefaults.highlightStyle\", model, highlightOptUpdate);\n  model = jsonDelete(\"chart\", model);\n  model = jsonDelete(\"chartOptions.seriesDefaults.tooltipClass\", model);\n  model = jsonDelete(\"chartOptions.seriesDefaults.tooltipTracking\", model);\n  model = jsonDeleteDefault(\"chartOptions.axes[].label.rotation\", 0, model);\n  model = jsonDeleteDefault(\"chartOptions.axes[].label.rotation\", 335, model);\n  return model;\n}\nfunction migrateV26_1(model) {\n  const highlightOptUpdate = ({ item, series, ...opts }) => ({\n    item: { ...opts, ...item },\n    ...series ? { series } : {}\n  });\n  model = jsonMutate(\"chartOptions.seriesDefaults.highlightStyle\", model, highlightOptUpdate);\n  model = jsonMutate(\"chartOptions.series[].highlightStyle\", model, highlightOptUpdate);\n  return model;\n}\nfunction migrateV26_2(model) {\n  model = jsonMove(\"chartOptions.seriesDefaults.fill.opacity\", \"chartOptions.seriesDefaults.fillOpacity\", model);\n  model = jsonMove(\"chartOptions.seriesDefaults.stroke.opacity\", \"chartOptions.seriesDefaults.strokeOpacity\", model);\n  model = jsonMove(\"chartOptions.seriesDefaults.stroke.width\", \"chartOptions.seriesDefaults.strokeWidth\", model);\n  model = jsonDelete(\"chartOptions.seriesDefaults.fill\", model);\n  model = jsonDelete(\"chartOptions.seriesDefaults.stroke\", model);\n  model = jsonDelete(\"chartOptions.seriesDefaults.callout.colors\", model);\n  model = jsonDelete(\"chartOptions.xAxis\", model);\n  model = jsonDelete(\"chartOptions.yAxis\", model);\n  const {\n    chartType: providedChartType,\n    chartOptions: { axes, series, seriesDefaults, ...otherChartOptions },\n    ...otherModelProps\n  } = model;\n  const chartType = getCanonicalChartType(providedChartType);\n  const seriesType = getSeriesType(chartType);\n  const seriesTypes = [seriesType];\n  const chartTypeMixin = {};\n  if (!isPieChartSeries(seriesType)) {\n    const minimalAxis = { top: {}, bottom: {}, left: {}, right: {} };\n    const updatedAxes = axes.map(({ type, ...axisProps }) => ({\n      [type]: { ...minimalAxis, ...axisProps }\n    })).reduce(merge, {});\n    ALL_AXIS_TYPES.filter((v) => updatedAxes[v] == null).forEach((v) => {\n      updatedAxes[v] = { ...minimalAxis };\n    });\n    chartTypeMixin.axes = updatedAxes;\n  }\n  const updatedChartOptions = seriesTypes.map((t) => ({\n    [t]: {\n      ...chartTypeMixin,\n      series: seriesDefaults,\n      ...otherChartOptions\n    }\n  })).reduce(merge, {});\n  model = {\n    ...otherModelProps,\n    chartType,\n    chartOptions: updatedChartOptions\n  };\n  return model;\n}\nfunction migrateV28(model) {\n  model = jsonDelete(\"chartOptions.*.title.padding\", model);\n  model = jsonDelete(\"chartOptions.*.subtitle.padding\", model);\n  model = jsonDelete(\"chartOptions.*.axes.*.title.padding\", model);\n  model = jsonBackfill(\"chartOptions.*.axes.*.title.enabled\", false, model);\n  return model;\n}\nfunction migrateV28_2(model) {\n  model = jsonRename(\"chartOptions.pie.series.callout\", \"calloutLine\", model);\n  model = jsonRename(\"chartOptions.pie.series.label\", \"calloutLabel\", model);\n  model = jsonRename(\"chartOptions.pie.series.labelKey\", \"sectorLabelKey\", model);\n  model = jsonRename(\"chartOptions.pie.series.labelName\", \"sectorLabelName\", model);\n  model = jsonRename(\"chartOptions.donut.series.callout\", \"calloutLine\", model);\n  model = jsonRename(\"chartOptions.donut.series.label\", \"calloutLabel\", model);\n  model = jsonRename(\"chartOptions.donut.series.labelKey\", \"sectorLabelKey\", model);\n  model = jsonRename(\"chartOptions.donut.series.labelName\", \"sectorLabelName\", model);\n  return model;\n}\nfunction migrateV29(model) {\n  model = jsonMoveIfMissing(\"chartOptions.scatter.series.fill\", \"chartOptions.scatter.series.marker.fill\", model);\n  model = jsonMoveIfMissing(\n    \"chartOptions.scatter.series.fillOpacity\",\n    \"chartOptions.scatter.series.marker.fillOpacity\",\n    model\n  );\n  model = jsonMoveIfMissing(\"chartOptions.scatter.series.stroke\", \"chartOptions.scatter.series.marker.stroke\", model);\n  model = jsonMoveIfMissing(\n    \"chartOptions.scatter.series.strokeOpacity\",\n    \"chartOptions.scatter.series.marker.strokeOpacity\",\n    model\n  );\n  model = jsonMoveIfMissing(\n    \"chartOptions.scatter.series.strokeWidth\",\n    \"chartOptions.scatter.series.marker.strokeWidth\",\n    model\n  );\n  model = jsonMove(\"chartOptions.scatter.series.paired\", \"chartOptions.scatter.paired\", model);\n  return model;\n}\nfunction migrateV29_1(model) {\n  model = jsonDelete(\"chartOptions.axes[].tick.count\", model);\n  return model;\n}\nfunction migrateV29_2(model) {\n  const tooltipOptUpdate = ({ tracking, ...opts }) => {\n    const output = { ...opts };\n    if (tracking === false) {\n      output.position ?? (output.position = { type: \"pointer\" });\n      output.range ?? (output.range = \"nearest\");\n    } else if (tracking === true) {\n      output.position ?? (output.position = { type: \"node\" });\n      output.range ?? (output.range = \"nearest\");\n    }\n    return output;\n  };\n  model = jsonMutate(\"chartOptions.*.tooltip\", model, tooltipOptUpdate);\n  return model;\n}\nfunction migrateV30(model) {\n  model = jsonRename(\"chartOptions.pie.series.labelKey\", \"sectorLabelKey\", model);\n  model = jsonRename(\"chartOptions.pie.series.labelName\", \"sectorLabelName\", model);\n  model = migrateV29_1(model);\n  model = migrateV29_2(model);\n  model = jsonDelete(\"chartOptions.*.series.flipXY\", model);\n  model = jsonAdd(\"chartOptions.common.legend.enabled\", true, model);\n  model = jsonBackfill(\"chartOptions.common.legend.position\", \"right\", model);\n  return model;\n}\nfunction migrateV31(model) {\n  const V30_LEGACY_PALETTES = {\n    \"ag-pastel\": \"ag-sheets\",\n    \"ag-solar\": \"ag-polychroma\"\n  };\n  const updatedModel = jsonRename(\"chartOptions.column\", \"bar\", model);\n  const chartThemeName = V30_LEGACY_PALETTES[updatedModel.chartThemeName] || updatedModel.chartThemeName;\n  return {\n    ...updatedModel,\n    chartThemeName\n  };\n}\nfunction migrateV32(model) {\n  model = jsonMutateProperty(\"chartOptions.*.autoSize\", true, model, (parent, targetProp) => {\n    if (parent[targetProp] === true) {\n    } else if (parent[targetProp] === false) {\n      parent[\"minHeight\"] = 600;\n      parent[\"minWidth\"] = 300;\n    }\n    delete parent[targetProp];\n  });\n  return model;\n}\nfunction cleanup(model) {\n  model = jsonDelete(\"chartOptions.*.width\", model);\n  model = jsonDelete(\"chartOptions.*.height\", model);\n  model = jsonBackfill(\"chartOptions.*.axes.category.label.autoRotate\", true, model);\n  return model;\n}\nfunction heuristicVersionDetection(model) {\n  const modelAny = model;\n  if (model.version != null) {\n    return model.version;\n  }\n  const hasKey = (obj, ...keys) => {\n    return Object.keys(obj || {}).some((k) => keys.includes(k));\n  };\n  const chartOptions = modelAny.chartOptions;\n  const seriesOptions = hasKey(chartOptions, \"seriesDefaults\") ? chartOptions?.seriesDefaults : chartOptions?.[Object.keys(chartOptions)[0]];\n  const hints = {\n    \"27.0.0\": hasKey(modelAny, \"seriesChartTypes\"),\n    \"26.2.0\": !hasKey(chartOptions, \"seriesDefaults\"),\n    \"26.1.0\": hasKey(seriesOptions?.highlightStyle, \"item\"),\n    \"26.0.0\": hasKey(seriesOptions?.highlightStyle, \"series\"),\n    // '26.0.0': modelAny.chart === undefined,\n    \"25.1.0\": hasKey(seriesOptions?.label, \"minAngle\"),\n    \"25.0.0\": hasKey(modelAny, \"modelType\", \"aggFunc\", \"unlinkChart\", \"suppressChartRanges\") || hasKey(seriesOptions, \"lineDash\", \"lineDashOffset\"),\n    \"24.0.0\": hasKey(modelAny, \"chartThemeName\", \"chart\") || hasKey(chartOptions, \"series\"),\n    \"23.2.0\": hasKey(chartOptions, \"navigator\"),\n    \"23.0.0\": hasKey(chartOptions?.legend?.item?.marker, \"shape\"),\n    \"22.1.0\": hasKey(modelAny, \"chartPalette\", \"chartType\")\n  };\n  const defaultVersion = \"27.1.0\";\n  const matchingHints = Object.entries(hints).filter(([_, match]) => match);\n  if (DEBUG)\n    console.log(\"AG Grid: ChartModel migration\", { heuristicVersionCandidates: matchingHints });\n  const [heuristicVersion = defaultVersion] = matchingHints[0];\n  if (DEBUG)\n    console.log(\"AG Grid: ChartModel migration\", { heuristicVersion });\n  return heuristicVersion;\n}\nfunction migrateIfBefore(maxVersion, model, migration) {\n  if (versionNumber(maxVersion) > versionNumber(model.version)) {\n    if (DEBUG)\n      console.log(\"AG Grid: ChartModel migration\", { migratingTo: maxVersion });\n    const result = migration(model);\n    result.version = maxVersion;\n    if (DEBUG)\n      console.log(\"AG Grid: ChartModel migration\", { migratedTo: maxVersion, result });\n    return result;\n  }\n  return model;\n}\nfunction versionParts(version) {\n  const split = typeof version === \"string\" ? version.split(\".\").map((v) => Number(v)) : [];\n  if (split.length !== 3 || split.some((v) => isNaN(v))) {\n    throw new Error(\"AG Grid - Illegal version string: \" + version);\n  }\n  return {\n    major: split[0],\n    minor: split[1],\n    patch: split[2]\n  };\n}\nfunction versionNumber(version) {\n  const { major, minor, patch } = versionParts(version);\n  return major * 1e4 + minor * 100 + patch;\n}\nfunction jsonDeleteDefault(path, defaultValue, json) {\n  return jsonMutateProperty(path, true, json, (parent, prop) => {\n    if (parent[prop] === defaultValue) {\n      delete parent[prop];\n    }\n  });\n}\nfunction jsonBackfill(path, defaultValue, json) {\n  return jsonMutateProperty(path, false, json, (parent, prop) => {\n    if (parent[prop] == null) {\n      parent[prop] = defaultValue;\n    }\n  });\n}\nfunction jsonAdd(path, value, json) {\n  if (typeof path === \"string\") {\n    path = path.split(\".\");\n  }\n  const nextPath = path[0];\n  if (path.length > 1) {\n    json[nextPath] = jsonAdd(path.slice(1), value, json[nextPath] ?? {});\n  }\n  const hasProperty = Object.keys(json).includes(nextPath);\n  if (!hasProperty) {\n    json[nextPath] = value;\n  }\n  return json;\n}\nfunction jsonMove(from, to, json) {\n  let valueToMove = void 0;\n  let valueFound = false;\n  json = jsonMutateProperty(from, true, json, (parent, prop) => {\n    valueFound = true;\n    valueToMove = parent[prop];\n    delete parent[prop];\n  });\n  if (!valueFound) {\n    return json;\n  }\n  return jsonMutateProperty(to, false, json, (parent, prop) => {\n    parent[prop] = valueToMove;\n  });\n}\nfunction jsonMoveIfMissing(from, to, json) {\n  let valueToMove = void 0;\n  let valueFound = false;\n  json = jsonMutateProperty(from, true, json, (parent, prop) => {\n    valueFound = true;\n    valueToMove = parent[prop];\n    delete parent[prop];\n  });\n  if (!valueFound) {\n    return json;\n  }\n  return jsonMutateProperty(to, false, json, (parent, prop) => {\n    if (parent[prop] === void 0) {\n      parent[prop] = valueToMove;\n    }\n  });\n}\nfunction jsonRename(path, renameTo, json) {\n  return jsonMutateProperty(path, true, json, (parent, prop) => {\n    parent[renameTo] = parent[prop];\n    delete parent[prop];\n  });\n}\nfunction jsonDelete(path, json) {\n  return jsonMutateProperty(path, true, json, (parent, prop) => delete parent[prop]);\n}\nfunction jsonMutateProperty(path, skipMissing, json, mutator) {\n  const pathElements = path instanceof Array ? path : path.split(\".\");\n  const parentPathElements = pathElements.slice(0, pathElements.length - 1);\n  const targetName = pathElements[pathElements.length - 1];\n  return jsonMutate(parentPathElements, json, (parent) => {\n    const hasProperty = Object.keys(parent).includes(targetName);\n    if (skipMissing && !hasProperty) {\n      return parent;\n    }\n    const result = { ...parent };\n    mutator(result, targetName);\n    return result;\n  });\n}\nfunction jsonMutate(path, json, mutator) {\n  const pathElements = path instanceof Array ? path : path.split(\".\");\n  json = { ...json };\n  if (pathElements.length === 0) {\n    return mutator(json);\n  } else if (pathElements[0].startsWith(\"{\")) {\n    const pathOptions = pathElements[0].substring(1, pathElements[0].lastIndexOf(\"}\")).split(\",\");\n    for (const pathOption of pathOptions) {\n      if (json[pathOption] != null) {\n        json[pathOption] = jsonMutate(pathElements.slice(1), json[pathOption], mutator);\n      }\n    }\n  } else if (pathElements[0].endsWith(\"[]\")) {\n    const arrayName = pathElements[0].substring(0, path[0].indexOf(\"[\"));\n    if (json[arrayName] instanceof Array) {\n      json[arrayName] = json[arrayName].map((v) => jsonMutate(pathElements.slice(1), v, mutator));\n    }\n  } else if (pathElements[0] === \"*\") {\n    for (const jsonProp in json) {\n      json[jsonProp] = jsonMutate(pathElements.slice(1), json[jsonProp], mutator);\n    }\n  } else if (json[pathElements[0]] != null) {\n    json[pathElements[0]] = jsonMutate(pathElements.slice(1), json[pathElements[0]], mutator);\n  }\n  return json;\n}\nvar merge = (r, n) => ({ ...r, ...n });\nvar ChartService = class extends BeanStub15 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"chartService\";\n    this.activeCharts = /* @__PURE__ */ new Set();\n    this.activeChartComps = /* @__PURE__ */ new Set();\n    this.crossFilteringContext = {\n      lastSelectedChartId: \"\"\n    };\n    this.isEnterprise = () => _ModuleSupport4.enterpriseModule.isEnterprise;\n  }\n  wireBeans(beans) {\n    this.visibleColsService = beans.visibleColsService;\n    this.rangeService = beans.rangeService;\n    this.environment = beans.environment;\n    this.focusService = beans.focusService;\n  }\n  updateChart(params) {\n    if (this.activeChartComps.size === 0) {\n      _warnOnce14(`No active charts to update.`);\n      return;\n    }\n    const chartComp = [...this.activeChartComps].find((chartComp2) => chartComp2.getChartId() === params.chartId);\n    if (!chartComp) {\n      _warnOnce14(`Unable to update chart. No active chart found with ID: ${params.chartId}.`);\n      return;\n    }\n    chartComp.update(params);\n  }\n  getChartModels() {\n    const models = [];\n    const versionedModel = (c) => {\n      return { ...c, version: VERSION4 };\n    };\n    this.activeChartComps.forEach((c) => models.push(versionedModel(c.getChartModel())));\n    return models;\n  }\n  getChartRef(chartId) {\n    let chartRef;\n    this.activeCharts.forEach((cr) => {\n      if (cr.chartId === chartId) {\n        chartRef = cr;\n      }\n    });\n    return chartRef;\n  }\n  getChartComp(chartId) {\n    let chartComp;\n    this.activeChartComps.forEach((comp) => {\n      if (comp.getChartId() === chartId) {\n        chartComp = comp;\n      }\n    });\n    return chartComp;\n  }\n  getChartImageDataURL(params) {\n    let url;\n    this.activeChartComps.forEach((c) => {\n      if (c.getChartId() === params.chartId) {\n        url = c.getChartImageDataURL(params.fileFormat);\n      }\n    });\n    return url;\n  }\n  downloadChart(params) {\n    const chartComp = Array.from(this.activeChartComps).find((c) => c.getChartId() === params.chartId);\n    chartComp?.downloadChart(params.dimensions, params.fileName, params.fileFormat);\n  }\n  openChartToolPanel(params) {\n    const chartComp = Array.from(this.activeChartComps).find((c) => c.getChartId() === params.chartId);\n    chartComp?.openChartToolPanel(params.panel);\n  }\n  closeChartToolPanel(chartId) {\n    const chartComp = Array.from(this.activeChartComps).find((c) => c.getChartId() === chartId);\n    chartComp?.closeChartToolPanel();\n  }\n  createChartFromCurrentRange(chartType = \"groupedColumn\", fromApi) {\n    const cellRange = this.getSelectedRange();\n    return this.createChart({ cellRange, chartType, focusDialogOnOpen: !fromApi });\n  }\n  restoreChart(model, chartContainer) {\n    if (!model) {\n      _warnOnce14(\"unable to restore chart as no chart model is provided\");\n      return;\n    }\n    if (model.version !== VERSION4) {\n      model = upgradeChartModel(model);\n    }\n    let cellRange;\n    let pivotChart;\n    let suppressChartRanges;\n    let chartPaletteToRestore;\n    if (model.modelType === \"pivot\") {\n      this.gos.updateGridOptions({ options: { pivotMode: true }, source: \"pivotChart\" });\n      cellRange = this.createCellRange(void 0, true);\n      pivotChart = true;\n      suppressChartRanges = true;\n    } else {\n      cellRange = this.createCellRange(model.cellRange);\n      chartPaletteToRestore = model.chartPalette;\n      suppressChartRanges = model.suppressChartRanges;\n    }\n    if (!cellRange) {\n      return;\n    }\n    return this.createChart({\n      ...model,\n      cellRange,\n      pivotChart,\n      suppressChartRanges,\n      chartContainer,\n      chartOptionsToRestore: model.chartOptions,\n      chartPaletteToRestore\n    });\n  }\n  createRangeChart(params, fromApi) {\n    const cellRange = this.createCellRange(params.cellRange);\n    if (!cellRange) {\n      return;\n    }\n    return this.createChart({\n      ...params,\n      cellRange,\n      focusDialogOnOpen: !fromApi\n    });\n  }\n  createPivotChart(params, fromApi) {\n    this.gos.updateGridOptions({ options: { pivotMode: true }, source: \"pivotChart\" });\n    const cellRange = this.createCellRange(void 0, true);\n    if (!cellRange) {\n      return;\n    }\n    return this.createChart({\n      ...params,\n      cellRange,\n      pivotChart: true,\n      suppressChartRanges: true,\n      focusDialogOnOpen: !fromApi\n    });\n  }\n  createCrossFilterChart(params, fromApi) {\n    const cellRange = this.createCellRange(params.cellRange);\n    if (!cellRange) {\n      return;\n    }\n    const suppressChartRangesSupplied = typeof params.suppressChartRanges !== \"undefined\" && params.suppressChartRanges !== null;\n    const suppressChartRanges = suppressChartRangesSupplied ? params.suppressChartRanges : true;\n    return this.createChart({\n      ...params,\n      cellRange,\n      suppressChartRanges,\n      crossFiltering: true,\n      focusDialogOnOpen: !fromApi\n    });\n  }\n  createChart(params) {\n    const validationResult = ChartParamsValidator.validateCreateParams(params);\n    if (!validationResult) {\n      return void 0;\n    }\n    params = validationResult === true ? params : validationResult;\n    const { chartType, chartContainer } = params;\n    const createChartContainerFunc = this.gos.getCallback(\"createChartContainer\");\n    const gridChartParams = {\n      ...params,\n      chartId: this.generateId(),\n      chartType: getCanonicalChartType(chartType),\n      insideDialog: !(chartContainer || createChartContainerFunc),\n      crossFilteringContext: this.crossFilteringContext,\n      crossFilteringResetCallback: () => this.activeChartComps.forEach((c) => c.crossFilteringReset())\n    };\n    const chartComp = new GridChartComp(gridChartParams);\n    this.createBean(chartComp);\n    const chartRef = this.createChartRef(chartComp);\n    if (chartContainer) {\n      chartContainer.appendChild(chartComp.getGui());\n      this.environment.applyThemeClasses(chartContainer);\n    } else if (createChartContainerFunc) {\n      createChartContainerFunc(chartRef);\n    } else {\n      chartComp.addEventListener(\"destroyed\", () => {\n        this.activeChartComps.delete(chartComp);\n        this.activeCharts.delete(chartRef);\n      });\n    }\n    return chartRef;\n  }\n  createChartRef(chartComp) {\n    const chartRef = {\n      destroyChart: () => {\n        if (this.activeCharts.has(chartRef)) {\n          this.destroyBean(chartComp);\n          this.activeChartComps.delete(chartComp);\n          this.activeCharts.delete(chartRef);\n        }\n      },\n      focusChart: () => {\n        this.focusService.focusInto(chartComp.getGui());\n      },\n      chartElement: chartComp.getGui(),\n      chart: chartComp.getUnderlyingChart(),\n      chartId: chartComp.getChartModel().chartId\n    };\n    this.activeCharts.add(chartRef);\n    this.activeChartComps.add(chartComp);\n    return chartRef;\n  }\n  getSelectedRange() {\n    const ranges = this.rangeService?.getCellRanges() ?? [];\n    return ranges.length > 0 ? ranges[0] : { columns: [] };\n  }\n  generateId() {\n    return `id-${Math.random().toString(36).substring(2, 18)}`;\n  }\n  createCellRange(cellRangeParams, allRange) {\n    const rangeParams = allRange ? {\n      rowStartIndex: null,\n      rowStartPinned: void 0,\n      rowEndIndex: null,\n      rowEndPinned: void 0,\n      columns: this.visibleColsService.getAllCols().map((col) => col.getColId())\n    } : cellRangeParams;\n    const cellRange = rangeParams && this.rangeService?.createPartialCellRangeFromRangeParams(rangeParams, true);\n    if (!cellRange) {\n      _warnOnce14(\n        `unable to create chart as ${allRange ? \"there are no columns in the grid\" : \"no range is selected\"}.`\n      );\n    }\n    return cellRange;\n  }\n  destroy() {\n    this.activeCharts.forEach((chart) => chart.destroyChart());\n    super.destroy();\n  }\n};\nChartService.CHARTS_VERSION = CHARTS_VERSION;\nfunction getChartModels(beans) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.getChartModels());\n}\nfunction getChartRef(beans, chartId) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.getChartRef(chartId));\n}\nfunction getChartImageDataURL(beans, params) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.getChartImageDataURL(params));\n}\nfunction downloadChart(beans, params) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.downloadChart(params));\n}\nfunction openChartToolPanel(beans, params) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.openChartToolPanel(params));\n}\nfunction closeChartToolPanel(beans, params) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.closeChartToolPanel(params.chartId));\n}\nfunction createRangeChart(beans, params) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.createRangeChart(params, true));\n}\nfunction createPivotChart(beans, params) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.createPivotChart(params, true));\n}\nfunction createCrossFilterChart(beans, params) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.createCrossFilterChart(params, true));\n}\nfunction updateChart(beans, params) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.updateChart(params));\n}\nfunction restoreChart(beans, chartModel, chartContainer) {\n  return beans.frameworkOverrides.wrapIncoming(() => beans.chartService?.restoreChart(chartModel, chartContainer));\n}\nvar VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION = 28;\nvar VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION = 6;\nfunction isValidVersion(version) {\n  return version && version.match(/\\d+\\.\\d+\\.\\d+/);\n}\nfunction isValidMajorVersion({\n  gridMajorVersion,\n  chartsMajorVersion\n}) {\n  const gridMajor = parseInt(gridMajorVersion, 10);\n  const chartsMajor = parseInt(chartsMajorVersion, 10);\n  const gridMajorDifference = gridMajor - VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION;\n  const chartsMajorDifference = chartsMajor - VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION;\n  const isFirstOrAfterVersion = gridMajorDifference >= 0;\n  return gridMajorDifference === chartsMajorDifference && isFirstOrAfterVersion;\n}\nfunction gridChartVersion(gridVersion) {\n  if (!gridVersion || !isValidVersion(gridVersion)) {\n    return void 0;\n  }\n  const [gridMajor, gridMinor] = gridVersion.split(\".\") || [];\n  const gridMajorMinor = `${gridMajor}.${gridMinor}.x`;\n  const gridMajorNumber = parseInt(gridMajor, 10);\n  const chartsMajor = gridMajorNumber - VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION + VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION;\n  if (chartsMajor < 0) {\n    return void 0;\n  }\n  const chartsMinor = gridMinor;\n  const chartsMajorMinor = `${chartsMajor}.${chartsMinor}.x`;\n  return {\n    gridMajorMinor,\n    chartsMajorMinor\n  };\n}\nfunction validGridChartsVersionErrorMessage({\n  type,\n  gridVersion,\n  chartsVersion\n}) {\n  const invalidMessage = \"AG Grid: AG Grid version is incompatible. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information.\";\n  if (!gridVersion) {\n    return invalidMessage;\n  }\n  const version = gridChartVersion(gridVersion);\n  if (!version) {\n    return invalidMessage;\n  }\n  const { gridMajorMinor, chartsMajorMinor } = version;\n  if (type === \"incompatible\") {\n    return `AG Grid version ${gridVersion} and AG Charts version ${chartsVersion} is not supported. AG Grid version ${gridMajorMinor} should be used with AG Chart ${chartsMajorMinor}. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information.`;\n  } else if (type === \"invalidCharts\") {\n    return `AG Grid version ${gridMajorMinor} should be used with AG Chart ${chartsMajorMinor}. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information.`;\n  }\n  return invalidMessage;\n}\nfunction validGridChartsVersion({\n  gridVersion,\n  chartsVersion\n}) {\n  if (!isValidVersion(chartsVersion)) {\n    return {\n      isValid: false,\n      message: validGridChartsVersionErrorMessage({ type: \"invalidCharts\", gridVersion, chartsVersion })\n    };\n  }\n  if (!isValidVersion(gridVersion)) {\n    return {\n      isValid: false,\n      message: validGridChartsVersionErrorMessage({ type: \"invalidGrid\", gridVersion, chartsVersion })\n    };\n  }\n  const [gridMajor, gridMinor] = gridVersion.split(\".\") || [];\n  const [chartsMajor, chartsMinor, chartsPatch] = chartsVersion.split(\".\") || [];\n  const isValidMajor = isValidMajorVersion({\n    gridMajorVersion: gridMajor,\n    chartsMajorVersion: chartsMajor\n  });\n  if (isValidMajor && gridMinor === chartsMinor || chartsPatch.includes(\"beta\")) {\n    return {\n      isValid: true\n    };\n  } else if (!isValidMajor || gridMinor !== chartsMinor) {\n    return {\n      isValid: false,\n      message: validGridChartsVersionErrorMessage({ type: \"incompatible\", gridVersion, chartsVersion })\n    };\n  }\n  return {\n    isValid: false,\n    message: validGridChartsVersionErrorMessage({ type: \"invalid\", gridVersion, chartsVersion })\n  };\n}\nvar GridChartsCoreModule = _defineModule4({\n  version: VERSION4,\n  validate: () => {\n    return validGridChartsVersion({\n      gridVersion: VERSION4,\n      chartsVersion: ChartService.CHARTS_VERSION\n    });\n  },\n  moduleName: `${ModuleNames22.GridChartsModule}-core`,\n  beans: [\n    ChartService,\n    ChartTranslationService,\n    ChartCrossFilterService,\n    ChartMenuListFactory,\n    ChartMenuService,\n    AdvancedSettingsMenuFactory\n  ],\n  userComponents: [\n    {\n      name: \"agMenuItem\",\n      classImp: AgMenuItemRenderer\n    }\n  ],\n  dependantModules: [RangeSelectionModule, EnterpriseCoreModule]\n});\nvar GridChartsApiModule = _defineModule4({\n  version: VERSION4,\n  moduleName: `${ModuleNames22.GridChartsModule}-api`,\n  apiFunctions: {\n    getChartModels,\n    getChartRef,\n    getChartImageDataURL,\n    downloadChart,\n    openChartToolPanel,\n    closeChartToolPanel,\n    createRangeChart,\n    createPivotChart,\n    createCrossFilterChart,\n    updateChart,\n    restoreChart\n  },\n  dependantModules: [GridChartsCoreModule]\n});\nvar GridChartsModule = _defineModule4({\n  version: VERSION4,\n  moduleName: ModuleNames22.GridChartsModule,\n  dependantModules: [GridChartsCoreModule, GridChartsApiModule]\n});\nvar agCharts = {\n  time,\n  AgCharts: AgCharts2\n};\n\n// enterprise-modules/clipboard/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames5, _defineModule as _defineModule5 } from \"ag-grid-community\";\nimport { CsvExportModule } from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub16,\n  ChangedPath,\n  _exists as _exists10,\n  _getActiveDomElement as _getActiveDomElement8,\n  _getDocument as _getDocument8,\n  _isClientSideRowModel as _isClientSideRowModel3,\n  _last as _last6,\n  _removeFromArray,\n  _warnOnce as _warnOnce15\n} from \"ag-grid-community\";\nfunction copyToClipboard(beans, params) {\n  beans.clipboardService?.copyToClipboard(params);\n}\nfunction cutToClipboard(beans, params) {\n  beans.clipboardService?.cutToClipboard(params);\n}\nfunction copySelectedRowsToClipboard(beans, params) {\n  beans.clipboardService?.copySelectedRowsToClipboard(params);\n}\nfunction copySelectedRangeToClipboard(beans, params) {\n  beans.clipboardService?.copySelectedRangeToClipboard(params);\n}\nfunction copySelectedRangeDown(beans) {\n  beans.clipboardService?.copyRangeDown();\n}\nfunction pasteFromClipboard(beans) {\n  beans.clipboardService?.pasteFromClipboard();\n}\nvar SOURCE_PASTE = \"paste\";\nvar EXPORT_TYPE_DRAG_COPY = \"dragCopy\";\nvar EXPORT_TYPE_CLIPBOARD = \"clipboard\";\nvar apiError = (method) => `AG Grid: Unable to use the Clipboard API (navigator.clipboard.${method}()). The reason why it could not be used has been logged in the previous line. For this reason the grid has defaulted to using a workaround which doesn't perform as well. Either fix why Clipboard API is blocked, OR stop this message from appearing by setting grid property suppressClipboardApi=true (which will default the grid to using the workaround rather than the API.`;\nvar ClipboardService = class _ClipboardService extends BeanStub16 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"clipboardService\";\n    this.lastPasteOperationTime = 0;\n    this.navigatorApiFailed = false;\n  }\n  wireBeans(beans) {\n    this.csvCreator = beans.csvCreator;\n    this.selectionService = beans.selectionService;\n    this.rowModel = beans.rowModel;\n    this.ctrlsService = beans.ctrlsService;\n    this.valueService = beans.valueService;\n    this.focusService = beans.focusService;\n    this.rowRenderer = beans.rowRenderer;\n    this.visibleColsService = beans.visibleColsService;\n    this.funcColsService = beans.funcColsService;\n    this.cellNavigationService = beans.cellNavigationService;\n    this.cellPositionUtils = beans.cellPositionUtils;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.rangeService = beans.rangeService;\n  }\n  postConstruct() {\n    if (_isClientSideRowModel3(this.gos)) {\n      this.clientSideRowModel = this.rowModel;\n    }\n    this.ctrlsService.whenReady(this, (p) => {\n      this.gridCtrl = p.gridCtrl;\n    });\n  }\n  pasteFromClipboard() {\n    const allowNavigator = !this.gos.get(\"suppressClipboardApi\");\n    if (allowNavigator && !this.navigatorApiFailed && navigator.clipboard && navigator.clipboard.readText) {\n      navigator.clipboard.readText().then(this.processClipboardData.bind(this)).catch((e) => {\n        _warnOnce15(`${e}\n${apiError(\"readText\")}`);\n        this.navigatorApiFailed = true;\n        this.pasteFromClipboardLegacy();\n      });\n    } else {\n      this.pasteFromClipboardLegacy();\n    }\n  }\n  pasteFromClipboardLegacy() {\n    let defaultPrevented = false;\n    const handlePasteEvent = (e) => {\n      const currentPastOperationTime = (/* @__PURE__ */ new Date()).getTime();\n      if (currentPastOperationTime - this.lastPasteOperationTime < 50) {\n        defaultPrevented = true;\n        e.preventDefault();\n      }\n      this.lastPasteOperationTime = currentPastOperationTime;\n    };\n    this.executeOnTempElement(\n      (textArea) => {\n        textArea.addEventListener(\"paste\", handlePasteEvent);\n        textArea.focus({ preventScroll: true });\n      },\n      (element) => {\n        const data = element.value;\n        if (!defaultPrevented) {\n          this.processClipboardData(data);\n        } else {\n          this.refocusLastFocusedCell();\n        }\n        element.removeEventListener(\"paste\", handlePasteEvent);\n      }\n    );\n  }\n  refocusLastFocusedCell() {\n    const focusedCell = this.focusService.getFocusedCell();\n    if (focusedCell) {\n      this.focusService.setFocusedCell({\n        rowIndex: focusedCell.rowIndex,\n        column: focusedCell.column,\n        rowPinned: focusedCell.rowPinned,\n        forceBrowserFocus: true\n      });\n    }\n  }\n  getClipboardDelimiter() {\n    const delimiter = this.gos.get(\"clipboardDelimiter\");\n    return _exists10(delimiter) ? delimiter : \"\t\";\n  }\n  processClipboardData(data) {\n    if (data == null) {\n      return;\n    }\n    let parsedData = _ClipboardService.stringToArray(data, this.getClipboardDelimiter());\n    const userFunc = this.gos.getCallback(\"processDataFromClipboard\");\n    if (userFunc) {\n      parsedData = userFunc({ data: parsedData });\n    }\n    if (parsedData == null) {\n      return;\n    }\n    if (this.gos.get(\"suppressLastEmptyLineOnPaste\")) {\n      this.removeLastLineIfBlank(parsedData);\n    }\n    const pasteOperation = (cellsToFlash, updatedRowNodes, focusedCell, changedPath) => {\n      const rangeActive = this.rangeService?.isMoreThanOneCell();\n      const pasteIntoRange = rangeActive && !this.hasOnlyOneValueToPaste(parsedData);\n      if (pasteIntoRange) {\n        this.pasteIntoActiveRange(this.rangeService, parsedData, cellsToFlash, updatedRowNodes, changedPath);\n      } else {\n        this.pasteStartingFromFocusedCell(parsedData, cellsToFlash, updatedRowNodes, focusedCell, changedPath);\n      }\n    };\n    this.doPasteOperation(pasteOperation);\n  }\n  // This will parse a delimited string into an array of arrays.\n  static stringToArray(strData, delimiter = \",\") {\n    const data = [];\n    const isNewline = (char) => char === \"\\r\" || char === \"\\n\";\n    let insideQuotedField = false;\n    if (strData === \"\") {\n      return [[\"\"]];\n    }\n    for (let row = 0, column = 0, position = 0; position < strData.length; position++) {\n      const previousChar = strData[position - 1];\n      const currentChar = strData[position];\n      const nextChar = strData[position + 1];\n      const ensureDataExists = () => {\n        if (!data[row]) {\n          data[row] = [];\n        }\n        if (!data[row][column]) {\n          data[row][column] = \"\";\n        }\n      };\n      ensureDataExists();\n      if (currentChar === '\"') {\n        if (insideQuotedField) {\n          if (nextChar === '\"') {\n            data[row][column] += '\"';\n            position++;\n          } else {\n            insideQuotedField = false;\n          }\n        } else if (previousChar === void 0 || previousChar === delimiter || isNewline(previousChar)) {\n          insideQuotedField = true;\n        }\n      }\n      if (!insideQuotedField && currentChar !== '\"') {\n        if (currentChar === delimiter) {\n          column++;\n          ensureDataExists();\n          continue;\n        } else if (isNewline(currentChar)) {\n          column = 0;\n          row++;\n          ensureDataExists();\n          if (currentChar === \"\\r\" && nextChar === \"\\n\") {\n            position++;\n          }\n          continue;\n        }\n      }\n      data[row][column] += currentChar;\n    }\n    return data;\n  }\n  // common code to paste operations, e.g. paste to cell, paste to range, and copy range down\n  doPasteOperation(pasteOperationFunc) {\n    const source = \"clipboard\";\n    this.eventService.dispatchEvent({\n      type: \"pasteStart\",\n      source\n    });\n    let changedPath;\n    if (this.clientSideRowModel) {\n      const onlyChangedColumns = this.gos.get(\"aggregateOnlyChangedColumns\");\n      changedPath = new ChangedPath(onlyChangedColumns, this.clientSideRowModel.getRootNode());\n    }\n    const cellsToFlash = {};\n    const updatedRowNodes = [];\n    const focusedCell = this.focusService.getFocusedCell();\n    pasteOperationFunc(cellsToFlash, updatedRowNodes, focusedCell, changedPath);\n    const nodesToRefresh = [...updatedRowNodes];\n    if (changedPath) {\n      this.clientSideRowModel.doAggregate(changedPath);\n      changedPath.forEachChangedNodeDepthFirst((rowNode) => {\n        nodesToRefresh.push(rowNode);\n      });\n    }\n    this.rowRenderer.refreshCells({ rowNodes: nodesToRefresh });\n    this.dispatchFlashCells(cellsToFlash);\n    this.fireRowChanged(updatedRowNodes);\n    this.refocusLastFocusedCell();\n    this.eventService.dispatchEvent({\n      type: \"pasteEnd\",\n      source\n    });\n  }\n  pasteIntoActiveRange(rangeService, clipboardData, cellsToFlash, updatedRowNodes, changedPath) {\n    const abortRepeatingPasteIntoRows = this.getRangeSize(rangeService) % clipboardData.length != 0;\n    let indexOffset = 0;\n    let dataRowIndex = 0;\n    const rowCallback = (currentRow, rowNode, columns, index) => {\n      const atEndOfClipboardData = index - indexOffset >= clipboardData.length;\n      if (atEndOfClipboardData) {\n        if (abortRepeatingPasteIntoRows) {\n          return;\n        }\n        indexOffset += dataRowIndex;\n        dataRowIndex = 0;\n      }\n      const currentRowData = clipboardData[index - indexOffset];\n      updatedRowNodes.push(rowNode);\n      const processCellFromClipboardFunc = this.gos.getCallback(\"processCellFromClipboard\");\n      columns.forEach((column, idx) => {\n        if (!column.isCellEditable(rowNode) || column.isSuppressPaste(rowNode)) {\n          return;\n        }\n        if (idx >= currentRowData.length) {\n          idx = idx % currentRowData.length;\n        }\n        const newValue = this.processCell(\n          rowNode,\n          column,\n          currentRowData[idx],\n          EXPORT_TYPE_DRAG_COPY,\n          processCellFromClipboardFunc,\n          true\n        );\n        rowNode.setDataValue(column, newValue, SOURCE_PASTE);\n        if (changedPath) {\n          changedPath.addParentNode(rowNode.parent, [column]);\n        }\n        const { rowIndex, rowPinned } = currentRow;\n        const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex, column, rowPinned });\n        cellsToFlash[cellId] = true;\n      });\n      dataRowIndex++;\n    };\n    this.iterateActiveRanges(false, rowCallback);\n  }\n  getDisplayedColumnsStartingAt(column) {\n    let currentColumn = column;\n    const columns = [];\n    while (currentColumn != null) {\n      columns.push(currentColumn);\n      currentColumn = this.visibleColsService.getColAfter(currentColumn);\n    }\n    return columns;\n  }\n  pasteStartingFromFocusedCell(parsedData, cellsToFlash, updatedRowNodes, focusedCell, changedPath) {\n    if (!focusedCell) {\n      return;\n    }\n    const currentRow = { rowIndex: focusedCell.rowIndex, rowPinned: focusedCell.rowPinned };\n    const columnsToPasteInto = this.getDisplayedColumnsStartingAt(focusedCell.column);\n    if (this.isPasteSingleValueIntoRange(parsedData)) {\n      this.pasteSingleValueIntoRange(parsedData, updatedRowNodes, cellsToFlash, changedPath);\n    } else {\n      this.pasteMultipleValues(\n        parsedData,\n        currentRow,\n        updatedRowNodes,\n        columnsToPasteInto,\n        cellsToFlash,\n        EXPORT_TYPE_CLIPBOARD,\n        changedPath\n      );\n    }\n  }\n  // if range is active, and only one cell, then we paste this cell into all cells in the active range.\n  isPasteSingleValueIntoRange(parsedData) {\n    return this.hasOnlyOneValueToPaste(parsedData) && this.rangeService != null && !this.rangeService.isEmpty();\n  }\n  pasteSingleValueIntoRange(parsedData, updatedRowNodes, cellsToFlash, changedPath) {\n    const value = parsedData[0][0];\n    const rowCallback = (currentRow, rowNode, columns) => {\n      updatedRowNodes.push(rowNode);\n      columns.forEach(\n        (column) => this.updateCellValue(rowNode, column, value, cellsToFlash, EXPORT_TYPE_CLIPBOARD, changedPath)\n      );\n    };\n    this.iterateActiveRanges(false, rowCallback);\n  }\n  hasOnlyOneValueToPaste(parsedData) {\n    return parsedData.length === 1 && parsedData[0].length === 1;\n  }\n  copyRangeDown() {\n    if (!this.rangeService || this.rangeService.isEmpty()) {\n      return;\n    }\n    const firstRowValues = [];\n    const pasteOperation = (cellsToFlash, updatedRowNodes, focusedCell, changedPath) => {\n      const processCellForClipboardFunc = this.gos.getCallback(\"processCellForClipboard\");\n      const processCellFromClipboardFunc = this.gos.getCallback(\"processCellFromClipboard\");\n      const rowCallback = (currentRow, rowNode, columns) => {\n        if (!firstRowValues.length) {\n          columns.forEach((column) => {\n            const value = this.processCell(\n              rowNode,\n              column,\n              this.valueService.getValue(column, rowNode),\n              EXPORT_TYPE_DRAG_COPY,\n              processCellForClipboardFunc,\n              false,\n              true\n            );\n            firstRowValues.push(value);\n          });\n        } else {\n          updatedRowNodes.push(rowNode);\n          columns.forEach((column, index) => {\n            if (!column.isCellEditable(rowNode) || column.isSuppressPaste(rowNode)) {\n              return;\n            }\n            const firstRowValue = this.processCell(\n              rowNode,\n              column,\n              firstRowValues[index],\n              EXPORT_TYPE_DRAG_COPY,\n              processCellFromClipboardFunc,\n              true\n            );\n            rowNode.setDataValue(column, firstRowValue, SOURCE_PASTE);\n            if (changedPath) {\n              changedPath.addParentNode(rowNode.parent, [column]);\n            }\n            const { rowIndex, rowPinned } = currentRow;\n            const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex, column, rowPinned });\n            cellsToFlash[cellId] = true;\n          });\n        }\n      };\n      this.iterateActiveRanges(true, rowCallback);\n    };\n    this.doPasteOperation(pasteOperation);\n  }\n  removeLastLineIfBlank(parsedData) {\n    const lastLine = _last6(parsedData);\n    const lastLineIsBlank = lastLine && lastLine.length === 1 && lastLine[0] === \"\";\n    if (lastLineIsBlank) {\n      if (parsedData.length === 1) {\n        return;\n      }\n      _removeFromArray(parsedData, lastLine);\n    }\n  }\n  fireRowChanged(rowNodes) {\n    if (this.gos.get(\"editType\") !== \"fullRow\") {\n      return;\n    }\n    rowNodes.forEach((rowNode) => {\n      this.eventService.dispatchEvent({\n        type: \"rowValueChanged\",\n        node: rowNode,\n        data: rowNode.data,\n        rowIndex: rowNode.rowIndex,\n        rowPinned: rowNode.rowPinned\n      });\n    });\n  }\n  pasteMultipleValues(clipboardGridData, currentRow, updatedRowNodes, columnsToPasteInto, cellsToFlash, type, changedPath) {\n    let rowPointer = currentRow;\n    const skipGroupRows = this.clientSideRowModel != null && !this.gos.get(\"enableGroupEdit\") && !this.gos.get(\"treeData\");\n    const getNextGoodRowNode = () => {\n      while (true) {\n        if (!rowPointer) {\n          return null;\n        }\n        const res = this.rowPositionUtils.getRowNode(rowPointer);\n        rowPointer = this.cellNavigationService.getRowBelow({\n          rowPinned: rowPointer.rowPinned,\n          rowIndex: rowPointer.rowIndex\n        });\n        if (res == null) {\n          return null;\n        }\n        const skipRow = res.detail || res.footer || skipGroupRows && res.group;\n        if (!skipRow) {\n          return res;\n        }\n      }\n    };\n    clipboardGridData.forEach((clipboardRowData) => {\n      const rowNode = getNextGoodRowNode();\n      if (!rowNode) {\n        return;\n      }\n      clipboardRowData.forEach(\n        (value, index) => this.updateCellValue(rowNode, columnsToPasteInto[index], value, cellsToFlash, type, changedPath)\n      );\n      updatedRowNodes.push(rowNode);\n    });\n  }\n  updateCellValue(rowNode, column, value, cellsToFlash, type, changedPath) {\n    if (!rowNode || !column || !column.isCellEditable(rowNode) || column.isSuppressPaste(rowNode)) {\n      return;\n    }\n    const processedValue = this.processCell(\n      rowNode,\n      column,\n      value,\n      type,\n      this.gos.getCallback(\"processCellFromClipboard\"),\n      true\n    );\n    rowNode.setDataValue(column, processedValue, SOURCE_PASTE);\n    const { rowIndex, rowPinned } = rowNode;\n    const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex, column, rowPinned });\n    cellsToFlash[cellId] = true;\n    if (changedPath) {\n      changedPath.addParentNode(rowNode.parent, [column]);\n    }\n  }\n  copyToClipboard(params = {}) {\n    this.copyOrCutToClipboard(params);\n  }\n  cutToClipboard(params = {}, source = \"api\") {\n    if (this.gos.get(\"suppressCutToClipboard\")) {\n      return;\n    }\n    this.eventService.dispatchEvent({\n      type: \"cutStart\",\n      source\n    });\n    this.copyOrCutToClipboard(params, true);\n    this.eventService.dispatchEvent({\n      type: \"cutEnd\",\n      source\n    });\n  }\n  copyOrCutToClipboard(params, cut) {\n    let { includeHeaders, includeGroupHeaders } = params;\n    if (includeHeaders == null) {\n      includeHeaders = this.gos.get(\"copyHeadersToClipboard\");\n    }\n    if (includeGroupHeaders == null) {\n      includeGroupHeaders = this.gos.get(\"copyGroupHeadersToClipboard\");\n    }\n    const copyParams = { includeHeaders, includeGroupHeaders };\n    const rowSelection = this.gos.get(\"rowSelection\");\n    const cellSelection = this.gos.get(\"cellSelection\");\n    let cellClearType = null;\n    if (this.shouldCopyCells(cellSelection, rowSelection)) {\n      this.copySelectedRangeToClipboard(copyParams);\n      cellClearType = 0;\n    } else if (this.shouldCopyRows(rowSelection)) {\n      this.copySelectedRowsToClipboard(copyParams);\n      cellClearType = 1;\n    } else if (this.focusService.isAnyCellFocused()) {\n      this.copyFocusedCellToClipboard(copyParams);\n      cellClearType = 2;\n    }\n    if (cut && cellClearType !== null) {\n      this.clearCellsAfterCopy(cellClearType);\n    }\n  }\n  shouldCopyCells(cellSelection, rowSelection) {\n    if (!this.rangeService || this.rangeService.isEmpty()) {\n      return false;\n    }\n    if (cellSelection) {\n      const shouldCopyRowsInstead = typeof rowSelection === \"object\" && rowSelection.copySelectedRows && !this.selectionService.isEmpty();\n      return !shouldCopyRowsInstead;\n    } else {\n      const suppressCopySingleCellRanges = this.gos.get(\"suppressCopySingleCellRanges\");\n      const shouldSkip = !this.rangeService.isMoreThanOneCell() && suppressCopySingleCellRanges;\n      return !shouldSkip;\n    }\n  }\n  shouldCopyRows(rowSelection) {\n    if (this.selectionService.isEmpty()) {\n      return false;\n    }\n    if (rowSelection && typeof rowSelection !== \"string\") {\n      return rowSelection.copySelectedRows ?? false;\n    } else {\n      return !this.gos.get(\"suppressCopyRowsToClipboard\");\n    }\n  }\n  clearCellsAfterCopy(type) {\n    this.eventService.dispatchEvent({ type: \"keyShortcutChangedCellStart\" });\n    if (type === 0) {\n      this.rangeService.clearCellRangeCellValues({ cellEventSource: \"clipboardService\" });\n    } else if (type === 1) {\n      this.clearSelectedRows();\n    } else {\n      const focusedCell = this.focusService.getFocusedCell();\n      if (focusedCell == null) {\n        return;\n      }\n      const rowNode = this.rowPositionUtils.getRowNode(focusedCell);\n      if (rowNode) {\n        this.clearCellValue(rowNode, focusedCell.column);\n      }\n    }\n    this.eventService.dispatchEvent({ type: \"keyShortcutChangedCellEnd\" });\n  }\n  clearSelectedRows() {\n    const selected = this.selectionService.getSelectedNodes();\n    const columns = this.visibleColsService.getAllCols();\n    for (const row of selected) {\n      for (const col of columns) {\n        this.clearCellValue(row, col);\n      }\n    }\n  }\n  clearCellValue(rowNode, column) {\n    if (!column.isCellEditable(rowNode)) {\n      return;\n    }\n    const emptyValue = this.valueService.getDeleteValue(column, rowNode);\n    rowNode.setDataValue(column, emptyValue, \"clipboardService\");\n  }\n  iterateActiveRanges(onlyFirst, rowCallback, columnCallback) {\n    if (!this.rangeService || this.rangeService.isEmpty()) {\n      return;\n    }\n    const cellRanges = this.rangeService.getCellRanges();\n    if (onlyFirst) {\n      this.iterateActiveRange(cellRanges[0], rowCallback, columnCallback, true);\n    } else {\n      cellRanges.forEach(\n        (range, idx) => this.iterateActiveRange(range, rowCallback, columnCallback, idx === cellRanges.length - 1)\n      );\n    }\n  }\n  iterateActiveRange(range, rowCallback, columnCallback, isLastRange) {\n    if (!this.rangeService) {\n      return;\n    }\n    let currentRow = this.rangeService.getRangeStartRow(range);\n    const lastRow = this.rangeService.getRangeEndRow(range);\n    if (columnCallback && range.columns) {\n      columnCallback(range.columns);\n    }\n    let rangeIndex = 0;\n    let isLastRow = false;\n    while (!isLastRow && currentRow != null) {\n      const rowNode = this.rowPositionUtils.getRowNode(currentRow);\n      isLastRow = this.rowPositionUtils.sameRow(currentRow, lastRow);\n      rowCallback(currentRow, rowNode, range.columns, rangeIndex++, isLastRow && isLastRange);\n      currentRow = this.cellNavigationService.getRowBelow(currentRow);\n    }\n  }\n  copySelectedRangeToClipboard(params = {}) {\n    if (!this.rangeService || this.rangeService.isEmpty()) {\n      return;\n    }\n    const allRangesMerge = this.rangeService.areAllRangesAbleToMerge();\n    const { data, cellsToFlash } = allRangesMerge ? this.buildDataFromMergedRanges(this.rangeService, params) : this.buildDataFromRanges(this.rangeService, params);\n    this.copyDataToClipboard(data);\n    this.dispatchFlashCells(cellsToFlash);\n  }\n  buildDataFromMergedRanges(rangeService, params) {\n    const columnsSet = /* @__PURE__ */ new Set();\n    const ranges = rangeService.getCellRanges();\n    const rowPositionsMap = /* @__PURE__ */ new Map();\n    const allRowPositions = [];\n    const allCellsToFlash = {};\n    ranges.forEach((range) => {\n      range.columns.forEach((col) => columnsSet.add(col));\n      const { rowPositions, cellsToFlash } = this.getRangeRowPositionsAndCellsToFlash(rangeService, range);\n      rowPositions.forEach((rowPosition) => {\n        const rowPositionAsString = `${rowPosition.rowIndex}-${rowPosition.rowPinned || \"null\"}`;\n        if (!rowPositionsMap.get(rowPositionAsString)) {\n          rowPositionsMap.set(rowPositionAsString, true);\n          allRowPositions.push(rowPosition);\n        }\n      });\n      Object.assign(allCellsToFlash, cellsToFlash);\n    });\n    const allColumns = this.visibleColsService.getAllCols();\n    const exportedColumns = Array.from(columnsSet);\n    exportedColumns.sort((a, b) => {\n      const posA = allColumns.indexOf(a);\n      const posB = allColumns.indexOf(b);\n      return posA - posB;\n    });\n    const data = this.buildExportParams({\n      columns: exportedColumns,\n      rowPositions: allRowPositions,\n      includeHeaders: params.includeHeaders,\n      includeGroupHeaders: params.includeGroupHeaders\n    });\n    return { data, cellsToFlash: allCellsToFlash };\n  }\n  buildDataFromRanges(rangeService, params) {\n    const ranges = rangeService.getCellRanges();\n    const data = [];\n    const allCellsToFlash = {};\n    ranges.forEach((range) => {\n      const { rowPositions, cellsToFlash } = this.getRangeRowPositionsAndCellsToFlash(rangeService, range);\n      Object.assign(allCellsToFlash, cellsToFlash);\n      data.push(\n        this.buildExportParams({\n          columns: range.columns,\n          rowPositions,\n          includeHeaders: params.includeHeaders,\n          includeGroupHeaders: params.includeGroupHeaders\n        })\n      );\n    });\n    return { data: data.join(\"\\n\"), cellsToFlash: allCellsToFlash };\n  }\n  getRangeRowPositionsAndCellsToFlash(rangeService, range) {\n    const rowPositions = [];\n    const cellsToFlash = {};\n    const startRow = rangeService.getRangeStartRow(range);\n    const lastRow = rangeService.getRangeEndRow(range);\n    let node = startRow;\n    while (node) {\n      rowPositions.push(node);\n      range.columns.forEach((column) => {\n        const { rowIndex, rowPinned } = node;\n        const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex, column, rowPinned });\n        cellsToFlash[cellId] = true;\n      });\n      if (this.rowPositionUtils.sameRow(node, lastRow)) {\n        break;\n      }\n      node = this.cellNavigationService.getRowBelow(node);\n    }\n    return { rowPositions, cellsToFlash };\n  }\n  getCellsToFlashFromRowNodes(rowNodes) {\n    const allDisplayedColumns = this.visibleColsService.getAllCols();\n    const cellsToFlash = {};\n    for (let i = 0; i < rowNodes.length; i++) {\n      const { rowIndex, rowPinned } = rowNodes[i];\n      if (rowIndex == null) {\n        continue;\n      }\n      for (let j = 0; j < allDisplayedColumns.length; j++) {\n        const column = allDisplayedColumns[j];\n        const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex, column, rowPinned });\n        cellsToFlash[cellId] = true;\n      }\n    }\n    return cellsToFlash;\n  }\n  copyFocusedCellToClipboard(params = {}) {\n    const focusedCell = this.focusService.getFocusedCell();\n    if (focusedCell == null) {\n      return;\n    }\n    const cellId = this.cellPositionUtils.createId(focusedCell);\n    const currentRow = { rowPinned: focusedCell.rowPinned, rowIndex: focusedCell.rowIndex };\n    const column = focusedCell.column;\n    const data = this.buildExportParams({\n      columns: [column],\n      rowPositions: [currentRow],\n      includeHeaders: params.includeHeaders,\n      includeGroupHeaders: params.includeGroupHeaders\n    });\n    this.copyDataToClipboard(data);\n    this.dispatchFlashCells({ [cellId]: true });\n  }\n  copySelectedRowsToClipboard(params = {}) {\n    const { columnKeys, includeHeaders, includeGroupHeaders } = params;\n    const data = this.buildExportParams({\n      columns: columnKeys,\n      includeHeaders,\n      includeGroupHeaders\n    });\n    this.copyDataToClipboard(data);\n    const rowNodes = this.selectionService.getSelectedNodes() || [];\n    this.dispatchFlashCells(this.getCellsToFlashFromRowNodes(rowNodes));\n  }\n  buildExportParams(params) {\n    const { columns, rowPositions, includeHeaders = false, includeGroupHeaders = false } = params;\n    const exportParams = {\n      columnKeys: columns,\n      rowPositions,\n      skipColumnHeaders: !includeHeaders,\n      skipColumnGroupHeaders: !includeGroupHeaders,\n      suppressQuotes: true,\n      columnSeparator: this.getClipboardDelimiter(),\n      onlySelected: !rowPositions,\n      processCellCallback: this.gos.getCallback(\"processCellForClipboard\"),\n      processRowGroupCallback: (params2) => this.processRowGroupCallback(params2),\n      processHeaderCallback: this.gos.getCallback(\"processHeaderForClipboard\"),\n      processGroupHeaderCallback: this.gos.getCallback(\"processGroupHeaderForClipboard\")\n    };\n    return this.csvCreator.getDataAsCsv(exportParams, true);\n  }\n  processRowGroupCallback(params) {\n    const { node, column } = params;\n    const isTreeData = this.gos.get(\"treeData\");\n    const isSuppressGroupMaintainValueType = this.gos.get(\"suppressGroupMaintainValueType\");\n    const getValueFromNode = () => {\n      if (isTreeData || isSuppressGroupMaintainValueType || !column) {\n        return node.key;\n      }\n      const value2 = node.groupData?.[column.getId()];\n      if (!value2 || !node.rowGroupColumn || node.rowGroupColumn.getColDef().useValueFormatterForExport === false) {\n        return value2;\n      }\n      return this.valueService.formatValue(node.rowGroupColumn, node, value2) ?? value2;\n    };\n    let value = getValueFromNode();\n    if (params.node.footer) {\n      let suffix = \"\";\n      if (value && value.length) {\n        suffix = ` ${value}`;\n      }\n      value = `Total${suffix}`;\n    }\n    const processCellForClipboard = this.gos.getCallback(\"processCellForClipboard\");\n    if (processCellForClipboard) {\n      let column2 = node.rowGroupColumn;\n      if (!column2 && node.footer && node.level === -1) {\n        column2 = this.funcColsService.getRowGroupColumns()[0];\n      }\n      return processCellForClipboard({\n        value,\n        node,\n        column: column2,\n        type: \"clipboard\",\n        formatValue: (valueToFormat) => this.valueService.formatValue(column2, node, valueToFormat) ?? valueToFormat,\n        parseValue: (valueToParse) => this.valueService.parseValue(column2, node, valueToParse, this.valueService.getValue(column2, node))\n      });\n    }\n    return value;\n  }\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  dispatchFlashCells(cellsToFlash) {\n    window.setTimeout(() => {\n      this.eventService.dispatchEvent({\n        type: \"flashCells\",\n        cells: cellsToFlash\n      });\n    }, 0);\n  }\n  processCell(rowNode, column, value, type, func, canParse, canFormat) {\n    if (func) {\n      const params = {\n        column,\n        node: rowNode,\n        value,\n        type,\n        formatValue: (valueToFormat) => this.valueService.formatValue(column, rowNode ?? null, valueToFormat) ?? valueToFormat,\n        parseValue: (valueToParse) => this.valueService.parseValue(\n          column,\n          rowNode ?? null,\n          valueToParse,\n          this.valueService.getValue(column, rowNode)\n        )\n      };\n      return func(params);\n    }\n    if (canParse && column.getColDef().useValueParserForImport !== false) {\n      return this.valueService.parseValue(\n        column,\n        rowNode ?? null,\n        value,\n        this.valueService.getValue(column, rowNode)\n      );\n    }\n    if (canFormat && column.getColDef().useValueFormatterForExport !== false) {\n      return this.valueService.formatValue(column, rowNode ?? null, value) ?? value;\n    }\n    return value;\n  }\n  copyDataToClipboard(data) {\n    const userProvidedFunc = this.gos.getCallback(\"sendToClipboard\");\n    if (userProvidedFunc) {\n      userProvidedFunc({ data });\n      return;\n    }\n    const allowNavigator = !this.gos.get(\"suppressClipboardApi\");\n    if (allowNavigator && navigator.clipboard) {\n      navigator.clipboard.writeText(data).catch((e) => {\n        _warnOnce15(`${e}\n${apiError(\"writeText\")}`);\n        this.copyDataToClipboardLegacy(data);\n      });\n      return;\n    }\n    this.copyDataToClipboardLegacy(data);\n  }\n  copyDataToClipboardLegacy(data) {\n    this.executeOnTempElement((element) => {\n      const eDocument = _getDocument8(this.gos);\n      const focusedElementBefore = _getActiveDomElement8(this.gos);\n      element.value = data || \" \";\n      element.select();\n      element.focus({ preventScroll: true });\n      const result = eDocument.execCommand(\"copy\");\n      if (!result) {\n        _warnOnce15(\n          \"Browser did not allow document.execCommand('copy'). Ensure api.copySelectedRowsToClipboard() is invoked via a user event, i.e. button click, otherwise the browser will prevent it for security reasons.\"\n        );\n      }\n      if (focusedElementBefore != null && focusedElementBefore.focus != null) {\n        focusedElementBefore.focus({ preventScroll: true });\n      }\n    });\n  }\n  executeOnTempElement(callbackNow, callbackAfter) {\n    const eDoc = _getDocument8(this.gos);\n    const eTempInput = eDoc.createElement(\"textarea\");\n    eTempInput.style.width = \"1px\";\n    eTempInput.style.height = \"1px\";\n    eTempInput.style.top = eDoc.documentElement.scrollTop + \"px\";\n    eTempInput.style.left = eDoc.documentElement.scrollLeft + \"px\";\n    eTempInput.style.position = \"absolute\";\n    eTempInput.style.opacity = \"0\";\n    const guiRoot = this.gridCtrl.getGui();\n    guiRoot.appendChild(eTempInput);\n    try {\n      callbackNow(eTempInput);\n    } catch (err) {\n      _warnOnce15(\"Browser does not support document.execCommand('copy') for clipboard operations\");\n    }\n    if (callbackAfter) {\n      window.setTimeout(() => {\n        callbackAfter(eTempInput);\n        guiRoot.removeChild(eTempInput);\n      }, 100);\n    } else {\n      guiRoot.removeChild(eTempInput);\n    }\n  }\n  getRangeSize(rangeService) {\n    const ranges = rangeService.getCellRanges();\n    let startRangeIndex = 0;\n    let endRangeIndex = 0;\n    if (ranges.length > 0) {\n      startRangeIndex = rangeService.getRangeStartRow(ranges[0]).rowIndex;\n      endRangeIndex = rangeService.getRangeEndRow(ranges[0]).rowIndex;\n    }\n    return startRangeIndex - endRangeIndex + 1;\n  }\n};\nvar VERSION5 = \"32.3.9\";\nvar ClipboardCoreModule = _defineModule5({\n  version: VERSION5,\n  moduleName: `${ModuleNames5.ClipboardModule}-core`,\n  beans: [ClipboardService],\n  dependantModules: [EnterpriseCoreModule, CsvExportModule]\n});\nvar ClipboardApiModule = _defineModule5({\n  version: VERSION5,\n  moduleName: `${ModuleNames5.ClipboardModule}-api`,\n  apiFunctions: {\n    copyToClipboard,\n    cutToClipboard,\n    copySelectedRowsToClipboard,\n    copySelectedRangeToClipboard,\n    copySelectedRangeDown,\n    pasteFromClipboard\n  },\n  dependantModules: [ClipboardCoreModule]\n});\nvar ClipboardModule = _defineModule5({\n  version: VERSION5,\n  moduleName: ModuleNames5.ClipboardModule,\n  dependantModules: [ClipboardCoreModule, ClipboardApiModule]\n});\n\n// enterprise-modules/column-tool-panel/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames23, _defineModule as _defineModule8 } from \"ag-grid-community\";\n\n// enterprise-modules/row-grouping/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames6, _ColumnFilterModule, _FloatingFilterModule, _defineModule as _defineModule6 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub17, _exists as _exists11, _existsAndNotEmpty as _existsAndNotEmpty3, _includes as _includes8, _iterateObject, _last as _last7 } from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub25,\n  _errorOnce as _errorOnce4,\n  _getGrandTotalRow as _getGrandTotalRow2,\n  _getGroupAggFiltering,\n  _missingOrEmpty as _missingOrEmpty3\n} from \"ag-grid-community\";\nimport {\n  AgColumn,\n  BeanStub as BeanStub34,\n  GROUP_AUTO_COLUMN_ID as GROUP_AUTO_COLUMN_ID2,\n  _isColumnsSortingCoupledToGroup,\n  _isGroupMultiAutoColumn,\n  _mergeDeep as _mergeDeep2,\n  _missing as _missing3,\n  _warnOnce as _warnOnce16\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub44 } from \"ag-grid-community\";\nimport { Component as Component210, _setAriaRole as _setAriaRole7 } from \"ag-grid-community\";\nimport { _createIconNoSpan as _createIconNoSpan11 } from \"ag-grid-community\";\nimport { DragSourceType as DragSourceType22 } from \"ag-grid-community\";\nimport {\n  Component as Component41,\n  DragSourceType as DragSourceType4,\n  KeyCode as KeyCode15,\n  RefPlaceholder as RefPlaceholder20,\n  SortIndicatorSelector,\n  _loadTemplate as _loadTemplate4\n} from \"ag-grid-community\";\nimport { _createIconNoSpan as _createIconNoSpan24 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub54, _getGroupAggFiltering as _getGroupAggFiltering2 } from \"ag-grid-community\";\nimport {\n  AgPromise as AgPromise4,\n  AgSelect as AgSelect9,\n  FilterWrapperComp,\n  RefPlaceholder as RefPlaceholder24,\n  TabGuardComp as TabGuardComp7,\n  _clearElement as _clearElement7,\n  _loadTemplate as _loadTemplate22,\n  _setDisplayed as _setDisplayed9,\n  _warnOnce as _warnOnce24\n} from \"ag-grid-community\";\nimport { AgInputTextField as AgInputTextField3, AgPromise as AgPromise22, Component as Component310, RefPlaceholder as RefPlaceholder34, _clearElement as _clearElement23 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub82 } from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub63,\n  RowNode,\n  _areEqual as _areEqual4,\n  _exists as _exists24,\n  _existsAndNotEmpty as _existsAndNotEmpty22,\n  _removeFromArray as _removeFromArray2,\n  _warnOnce as _warnOnce33\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub73, _warnOnce as _warnOnce43 } from \"ag-grid-community\";\nimport { RowNode as RowNode2 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub92, _cloneObject as _cloneObject2, _iterateObject as _iterateObject2 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub102, _iterateObject as _iterateObject3, _missing as _missing22 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub112 } from \"ag-grid-community\";\nimport { _createIconNoSpan as _createIconNoSpan33 } from \"ag-grid-community\";\nvar defaultAggFuncNames = {\n  sum: \"Sum\",\n  first: \"First\",\n  last: \"Last\",\n  min: \"Min\",\n  max: \"Max\",\n  count: \"Count\",\n  avg: \"Average\"\n};\nvar AggFuncService = class extends BeanStub17 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"aggFuncService\";\n    this.aggFuncsMap = {};\n    this.initialised = false;\n  }\n  postConstruct() {\n    this.init();\n  }\n  init() {\n    if (this.initialised) {\n      return;\n    }\n    this.initialiseWithDefaultAggregations();\n    this.addAggFuncs(this.gos.get(\"aggFuncs\"));\n  }\n  initialiseWithDefaultAggregations() {\n    const aggMap = this.aggFuncsMap;\n    aggMap[\"sum\"] = aggSum;\n    aggMap[\"first\"] = aggFirst;\n    aggMap[\"last\"] = aggLast;\n    aggMap[\"min\"] = aggMin;\n    aggMap[\"max\"] = aggMax;\n    aggMap[\"count\"] = aggCount;\n    aggMap[\"avg\"] = aggAvg;\n    this.initialised = true;\n  }\n  isAggFuncPossible(column, func) {\n    const allKeys = this.getFuncNames(column);\n    const allowed = _includes8(allKeys, func);\n    const funcExists = _exists11(this.aggFuncsMap[func]);\n    return allowed && funcExists;\n  }\n  getDefaultFuncLabel(fctName) {\n    return defaultAggFuncNames[fctName] ?? fctName;\n  }\n  getDefaultAggFunc(column) {\n    const defaultAgg = column.getColDef().defaultAggFunc;\n    if (_exists11(defaultAgg) && this.isAggFuncPossible(column, defaultAgg)) {\n      return defaultAgg;\n    }\n    if (this.isAggFuncPossible(column, \"sum\")) {\n      return \"sum\";\n    }\n    const allKeys = this.getFuncNames(column);\n    return _existsAndNotEmpty3(allKeys) ? allKeys[0] : null;\n  }\n  addAggFuncs(aggFuncs) {\n    this.init();\n    _iterateObject(aggFuncs, (key, aggFunc) => {\n      this.aggFuncsMap[key] = aggFunc;\n    });\n  }\n  getAggFunc(name) {\n    this.init();\n    return this.aggFuncsMap[name];\n  }\n  getFuncNames(column) {\n    const userAllowedFuncs = column.getColDef().allowedAggFuncs;\n    return userAllowedFuncs == null ? Object.keys(this.aggFuncsMap).sort() : userAllowedFuncs;\n  }\n  clear() {\n    this.aggFuncsMap = {};\n  }\n};\nfunction aggSum(params) {\n  const { values } = params;\n  let result = null;\n  for (let i = 0; i < values.length; i++) {\n    const value = values[i];\n    if (typeof value === \"number\") {\n      if (result === null) {\n        result = value;\n      } else {\n        result += typeof result === \"number\" ? value : BigInt(value);\n      }\n    } else if (typeof value === \"bigint\") {\n      if (result === null) {\n        result = value;\n      } else {\n        result = (typeof result === \"bigint\" ? result : BigInt(result)) + value;\n      }\n    }\n  }\n  return result;\n}\nfunction aggFirst(params) {\n  return params.values.length > 0 ? params.values[0] : null;\n}\nfunction aggLast(params) {\n  return params.values.length > 0 ? _last7(params.values) : null;\n}\nfunction aggMin(params) {\n  const { values } = params;\n  let result = null;\n  for (let i = 0; i < values.length; i++) {\n    const value = values[i];\n    if ((typeof value === \"number\" || typeof value === \"bigint\") && (result === null || result > value)) {\n      result = value;\n    }\n  }\n  return result;\n}\nfunction aggMax(params) {\n  const { values } = params;\n  let result = null;\n  for (let i = 0; i < values.length; i++) {\n    const value = values[i];\n    if ((typeof value === \"number\" || typeof value === \"bigint\") && (result === null || result < value)) {\n      result = value;\n    }\n  }\n  return result;\n}\nfunction aggCount(params) {\n  const { values } = params;\n  let result = 0;\n  for (let i = 0; i < values.length; i++) {\n    const value = values[i];\n    result += value != null && typeof value.value === \"number\" ? value.value : 1;\n  }\n  const existingAggData = params.rowNode?.aggData?.[params.column.getColId()];\n  if (existingAggData && existingAggData.value === result) {\n    return existingAggData;\n  }\n  return {\n    value: result,\n    toString: function() {\n      return this.value.toString();\n    },\n    // used for sorting\n    toNumber: function() {\n      return this.value;\n    }\n  };\n}\nfunction aggAvg(params) {\n  const { values } = params;\n  let sum = 0;\n  let count = 0;\n  for (let i = 0; i < values.length; i++) {\n    const currentValue = values[i];\n    let valueToAdd = null;\n    if (typeof currentValue === \"number\" || typeof currentValue === \"bigint\") {\n      valueToAdd = currentValue;\n      count++;\n    } else if (currentValue != null && (typeof currentValue.value === \"number\" || typeof currentValue.value === \"bigint\") && typeof currentValue.count === \"number\") {\n      valueToAdd = currentValue.value * (typeof currentValue.value === \"number\" ? currentValue.count : BigInt(currentValue.count));\n      count += currentValue.count;\n    }\n    if (typeof valueToAdd === \"number\") {\n      sum += typeof sum === \"number\" ? valueToAdd : BigInt(valueToAdd);\n    } else if (typeof valueToAdd === \"bigint\") {\n      sum = (typeof sum === \"bigint\" ? sum : BigInt(sum)) + valueToAdd;\n    }\n  }\n  let value = null;\n  if (count > 0) {\n    value = sum / (typeof sum === \"number\" ? count : BigInt(count));\n  }\n  const existingAggData = params.rowNode?.aggData?.[params.column?.getColId()];\n  if (existingAggData && existingAggData.count === count && existingAggData.value === value) {\n    return existingAggData;\n  }\n  return {\n    count,\n    value,\n    // the grid by default uses toString to render values for an object, so this\n    // is a trick to get the default cellRenderer to display the avg value\n    toString: function() {\n      return typeof this.value === \"number\" || typeof this.value === \"bigint\" ? this.value.toString() : \"\";\n    },\n    // used for sorting\n    toNumber: function() {\n      return this.value;\n    }\n  };\n}\nvar AggregationStage = class extends BeanStub25 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"aggregationStage\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.aggFuncService = beans.aggFuncService;\n    this.funcColsService = beans.funcColsService;\n    this.pivotResultColsService = beans.pivotResultColsService;\n    this.valueService = beans.valueService;\n  }\n  // it's possible to recompute the aggregate without doing the other parts\n  // + api.refreshClientSideRowModel('aggregate')\n  execute(params) {\n    const noValueColumns = _missingOrEmpty3(this.funcColsService.getValueColumns());\n    const noUserAgg = !this.gos.getCallback(\"getGroupRowAgg\");\n    const changedPathActive = params.changedPath && params.changedPath.isActive();\n    if (noValueColumns && noUserAgg && changedPathActive) {\n      return;\n    }\n    const aggDetails = this.createAggDetails(params);\n    this.recursivelyCreateAggData(aggDetails);\n  }\n  createAggDetails(params) {\n    const pivotActive = this.columnModel.isPivotActive();\n    const measureColumns = this.funcColsService.getValueColumns();\n    const pivotColumns = pivotActive ? this.funcColsService.getPivotColumns() : [];\n    const aggDetails = {\n      alwaysAggregateAtRootLevel: this.gos.get(\"alwaysAggregateAtRootLevel\"),\n      groupIncludeTotalFooter: !!_getGrandTotalRow2(this.gos),\n      changedPath: params.changedPath,\n      valueColumns: measureColumns,\n      pivotColumns,\n      filteredOnly: !this.isSuppressAggFilteredOnly(),\n      userAggFunc: this.gos.getCallback(\"getGroupRowAgg\")\n    };\n    return aggDetails;\n  }\n  isSuppressAggFilteredOnly() {\n    const isGroupAggFiltering = _getGroupAggFiltering(this.gos) !== void 0;\n    return isGroupAggFiltering || this.gos.get(\"suppressAggFilteredOnly\");\n  }\n  recursivelyCreateAggData(aggDetails) {\n    const callback = (rowNode) => {\n      const hasNoChildren = !rowNode.hasChildren();\n      if (hasNoChildren) {\n        if (rowNode.aggData) {\n          rowNode.setAggData(null);\n        }\n        return;\n      }\n      const isRootNode = rowNode.level === -1;\n      if (isRootNode && !aggDetails.groupIncludeTotalFooter) {\n        const notPivoting = !this.columnModel.isPivotMode();\n        if (!aggDetails.alwaysAggregateAtRootLevel && notPivoting) {\n          rowNode.setAggData(null);\n          return;\n        }\n      }\n      this.aggregateRowNode(rowNode, aggDetails);\n    };\n    aggDetails.changedPath.forEachChangedNodeDepthFirst(callback, true);\n  }\n  aggregateRowNode(rowNode, aggDetails) {\n    const measureColumnsMissing = aggDetails.valueColumns.length === 0;\n    const pivotColumnsMissing = aggDetails.pivotColumns.length === 0;\n    let aggResult;\n    if (aggDetails.userAggFunc) {\n      aggResult = aggDetails.userAggFunc({ nodes: rowNode.childrenAfterFilter });\n    } else if (measureColumnsMissing) {\n      aggResult = null;\n    } else if (pivotColumnsMissing) {\n      aggResult = this.aggregateRowNodeUsingValuesOnly(rowNode, aggDetails);\n    } else {\n      aggResult = this.aggregateRowNodeUsingValuesAndPivot(rowNode);\n    }\n    rowNode.setAggData(aggResult);\n    if (rowNode.sibling) {\n      rowNode.sibling.setAggData(aggResult);\n    }\n  }\n  aggregateRowNodeUsingValuesAndPivot(rowNode) {\n    const result = {};\n    const secondaryColumns = this.pivotResultColsService.getPivotResultCols()?.list ?? [];\n    let canSkipTotalColumns = true;\n    for (let i = 0; i < secondaryColumns.length; i++) {\n      const secondaryCol = secondaryColumns[i];\n      const colDef = secondaryCol.getColDef();\n      if (colDef.pivotTotalColumnIds != null) {\n        canSkipTotalColumns = false;\n        continue;\n      }\n      const keys = colDef.pivotKeys ?? [];\n      let values;\n      if (rowNode.leafGroup) {\n        values = this.getValuesFromMappedSet(rowNode.childrenMapped, keys, colDef.pivotValueColumn);\n      } else {\n        values = this.getValuesPivotNonLeaf(rowNode, colDef.colId);\n      }\n      result[colDef.colId] = this.aggregateValues(\n        values,\n        colDef.pivotValueColumn.getAggFunc(),\n        colDef.pivotValueColumn,\n        rowNode,\n        secondaryCol\n      );\n    }\n    if (!canSkipTotalColumns) {\n      for (let i = 0; i < secondaryColumns.length; i++) {\n        const secondaryCol = secondaryColumns[i];\n        const colDef = secondaryCol.getColDef();\n        if (colDef.pivotTotalColumnIds == null || !colDef.pivotTotalColumnIds.length) {\n          continue;\n        }\n        const aggResults = colDef.pivotTotalColumnIds.map(\n          (currentColId) => result[currentColId]\n        );\n        result[colDef.colId] = this.aggregateValues(\n          aggResults,\n          colDef.pivotValueColumn.getAggFunc(),\n          colDef.pivotValueColumn,\n          rowNode,\n          secondaryCol\n        );\n      }\n    }\n    return result;\n  }\n  aggregateRowNodeUsingValuesOnly(rowNode, aggDetails) {\n    const result = {};\n    const changedValueColumns = aggDetails.changedPath.isActive() ? aggDetails.changedPath.getValueColumnsForNode(rowNode, aggDetails.valueColumns) : aggDetails.valueColumns;\n    const notChangedValueColumns = aggDetails.changedPath.isActive() ? aggDetails.changedPath.getNotValueColumnsForNode(rowNode, aggDetails.valueColumns) : null;\n    const values2d = this.getValuesNormal(rowNode, changedValueColumns, aggDetails.filteredOnly);\n    const oldValues = rowNode.aggData;\n    changedValueColumns.forEach((valueColumn, index) => {\n      result[valueColumn.getId()] = this.aggregateValues(\n        values2d[index],\n        valueColumn.getAggFunc(),\n        valueColumn,\n        rowNode\n      );\n    });\n    if (notChangedValueColumns && oldValues) {\n      notChangedValueColumns.forEach((valueColumn) => {\n        result[valueColumn.getId()] = oldValues[valueColumn.getId()];\n      });\n    }\n    return result;\n  }\n  getValuesPivotNonLeaf(rowNode, colId) {\n    return rowNode.childrenAfterFilter.map((childNode) => childNode.aggData[colId]);\n  }\n  getValuesFromMappedSet(mappedSet, keys, valueColumn) {\n    let mapPointer = mappedSet;\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      mapPointer = mapPointer ? mapPointer[key] : null;\n    }\n    if (!mapPointer) {\n      return [];\n    }\n    return mapPointer.map((rowNode) => this.valueService.getValue(valueColumn, rowNode));\n  }\n  getValuesNormal(rowNode, valueColumns, filteredOnly) {\n    const values = [];\n    valueColumns.forEach(() => values.push([]));\n    const valueColumnCount = valueColumns.length;\n    const nodeList = filteredOnly ? rowNode.childrenAfterFilter : rowNode.childrenAfterGroup;\n    const rowCount = nodeList.length;\n    for (let i = 0; i < rowCount; i++) {\n      const childNode = nodeList[i];\n      for (let j = 0; j < valueColumnCount; j++) {\n        const valueColumn = valueColumns[j];\n        const value = this.valueService.getValue(valueColumn, childNode);\n        values[j].push(value);\n      }\n    }\n    return values;\n  }\n  aggregateValues(values, aggFuncOrString, column, rowNode, pivotResultColumn) {\n    const aggFunc = typeof aggFuncOrString === \"string\" ? this.aggFuncService.getAggFunc(aggFuncOrString) : aggFuncOrString;\n    if (typeof aggFunc !== \"function\") {\n      _errorOnce4(`unrecognised aggregation function ${aggFuncOrString}`);\n      return null;\n    }\n    const aggFuncAny = aggFunc;\n    const params = this.gos.addGridCommonParams({\n      values,\n      column,\n      colDef: column ? column.getColDef() : void 0,\n      pivotResultColumn,\n      rowNode,\n      data: rowNode ? rowNode.data : void 0\n    });\n    return aggFuncAny(params);\n  }\n};\nvar AutoColService = class extends BeanStub34 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"autoColService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.columnFactory = beans.columnFactory;\n  }\n  createAutoCols(rowGroupCols) {\n    const autoCols = [];\n    const doingTreeData = this.gos.get(\"treeData\");\n    let doingMultiAutoColumn = _isGroupMultiAutoColumn(this.gos);\n    if (doingTreeData && doingMultiAutoColumn) {\n      _warnOnce16(\n        'you cannot mix groupDisplayType = \"multipleColumns\" with treeData, only one column can be used to display groups when doing tree data'\n      );\n      doingMultiAutoColumn = false;\n    }\n    if (doingMultiAutoColumn) {\n      rowGroupCols.forEach((rowGroupCol, index) => {\n        autoCols.push(this.createOneAutoCol(rowGroupCol, index));\n      });\n    } else {\n      autoCols.push(this.createOneAutoCol());\n    }\n    return autoCols;\n  }\n  updateAutoCols(autoGroupCols, source) {\n    autoGroupCols.forEach((col, index) => this.updateOneAutoCol(col, index, source));\n  }\n  // rowGroupCol and index are missing if groupDisplayType != \"multipleColumns\"\n  createOneAutoCol(rowGroupCol, index) {\n    let colId;\n    if (rowGroupCol) {\n      colId = `${GROUP_AUTO_COLUMN_ID2}-${rowGroupCol.getId()}`;\n    } else {\n      colId = GROUP_AUTO_COLUMN_ID2;\n    }\n    const colDef = this.createAutoColDef(colId, rowGroupCol, index);\n    colDef.colId = colId;\n    const newCol = new AgColumn(colDef, null, colId, true);\n    this.createBean(newCol);\n    return newCol;\n  }\n  /**\n   * Refreshes an auto group col to load changes from defaultColDef or autoGroupColDef\n   */\n  updateOneAutoCol(colToUpdate, index, source) {\n    const oldColDef = colToUpdate.getColDef();\n    const underlyingColId = typeof oldColDef.showRowGroup == \"string\" ? oldColDef.showRowGroup : void 0;\n    const underlyingColumn = underlyingColId != null ? this.columnModel.getColDefCol(underlyingColId) : void 0;\n    const colDef = this.createAutoColDef(colToUpdate.getId(), underlyingColumn ?? void 0, index);\n    colToUpdate.setColDef(colDef, null, source);\n    this.columnFactory.applyColumnState(colToUpdate, colDef, source);\n  }\n  createAutoColDef(colId, underlyingColumn, index) {\n    let res = this.createBaseColDef(underlyingColumn);\n    const autoGroupColumnDef = this.gos.get(\"autoGroupColumnDef\");\n    _mergeDeep2(res, autoGroupColumnDef);\n    res = this.columnFactory.addColumnDefaultAndTypes(res, colId);\n    if (!this.gos.get(\"treeData\")) {\n      const noFieldOrValueGetter = _missing3(res.field) && _missing3(res.valueGetter) && _missing3(res.filterValueGetter) && res.filter !== \"agGroupColumnFilter\";\n      if (noFieldOrValueGetter) {\n        res.filter = false;\n      }\n    }\n    if (index && index > 0) {\n      res.headerCheckboxSelection = false;\n    }\n    const isSortingCoupled = _isColumnsSortingCoupledToGroup(this.gos);\n    const hasOwnData = res.valueGetter || res.field != null;\n    if (isSortingCoupled && !hasOwnData) {\n      res.sortIndex = void 0;\n      res.initialSort = void 0;\n    }\n    return res;\n  }\n  createBaseColDef(rowGroupCol) {\n    const userDef = this.gos.get(\"autoGroupColumnDef\");\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const res = {\n      headerName: localeTextFunc(\"group\", \"Group\")\n    };\n    const userHasProvidedGroupCellRenderer = userDef && (userDef.cellRenderer || userDef.cellRendererSelector);\n    if (!userHasProvidedGroupCellRenderer) {\n      res.cellRenderer = \"agGroupCellRenderer\";\n    }\n    if (rowGroupCol) {\n      const colDef = rowGroupCol.getColDef();\n      Object.assign(res, {\n        headerName: this.columnNameService.getDisplayNameForColumn(rowGroupCol, \"header\"),\n        headerValueGetter: colDef.headerValueGetter\n      });\n      if (colDef.cellRenderer) {\n        Object.assign(res, {\n          cellRendererParams: {\n            innerRenderer: colDef.cellRenderer,\n            innerRendererParams: colDef.cellRendererParams\n          }\n        });\n      }\n      res.showRowGroup = rowGroupCol.getColId();\n    } else {\n      res.showRowGroup = true;\n    }\n    return res;\n  }\n};\nvar DropZoneColumnComp = class extends PillDragComp {\n  constructor(column, dragSourceDropTarget, ghost, dropZonePurpose, horizontal) {\n    super(\n      dragSourceDropTarget,\n      ghost,\n      horizontal,\n      /* html */\n      `\n                <span role=\"option\">\n                    <span data-ref=\"eDragHandle\" class=\"ag-drag-handle ag-column-drop-cell-drag-handle\" role=\"presentation\"></span>\n                    <span data-ref=\"eText\" class=\"ag-column-drop-cell-text\" aria-hidden=\"true\"></span>\n                    <ag-sort-indicator data-ref=\"eSortIndicator\"></ag-sort-indicator>\n                    <span data-ref=\"eButton\" class=\"ag-column-drop-cell-button\" role=\"presentation\"></span>\n                </span>\n            `,\n      [SortIndicatorSelector]\n    );\n    this.column = column;\n    this.dropZonePurpose = dropZonePurpose;\n    this.eSortIndicator = RefPlaceholder20;\n    this.popupShowing = false;\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.popupService = beans.popupService;\n    this.sortController = beans.sortController;\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.funcColsService = beans.funcColsService;\n    this.aggFuncService = beans.aggFuncService;\n  }\n  postConstruct() {\n    this.displayName = this.columnNameService.getDisplayNameForColumn(this.column, \"columnDrop\");\n    super.postConstruct();\n    this.setupSort();\n    this.addManagedEventListeners({\n      sortChanged: () => {\n        this.setupAria();\n      }\n    });\n    if (this.isGroupingZone()) {\n      this.addManagedPropertyListener(\"groupLockGroupColumns\", () => {\n        this.refreshRemove();\n        this.refreshDraggable();\n        this.setupAria();\n      });\n    }\n  }\n  getItem() {\n    return this.column;\n  }\n  getDisplayName() {\n    return this.displayName;\n  }\n  getTooltip() {\n    return this.column.getColDef().headerTooltip;\n  }\n  addAdditionalAriaInstructions(ariaInstructions, translate) {\n    const isSortSuppressed = this.gos.get(\"rowGroupPanelSuppressSort\");\n    const isFunctionsReadOnly = this.gos.get(\"functionsReadOnly\");\n    if (this.isAggregationZone() && !isFunctionsReadOnly) {\n      const aggregationMenuAria = translate(\n        \"ariaDropZoneColumnValueItemDescription\",\n        \"Press ENTER to change the aggregation type\"\n      );\n      ariaInstructions.push(aggregationMenuAria);\n    }\n    if (this.isGroupingZone() && this.column.isSortable() && !isSortSuppressed) {\n      const sortProgressAria = translate(\"ariaDropZoneColumnGroupItemDescription\", \"Press ENTER to sort\");\n      ariaInstructions.push(sortProgressAria);\n    }\n    super.addAdditionalAriaInstructions(ariaInstructions, translate);\n  }\n  isDraggable() {\n    return this.isReadOnly();\n  }\n  isRemovable() {\n    return this.isReadOnly();\n  }\n  isReadOnly() {\n    return !this.isGroupingAndLocked() && !this.gos.get(\"functionsReadOnly\");\n  }\n  getAriaDisplayName() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const { name, aggFuncName } = this.getColumnAndAggFuncName();\n    const aggSeparator = translate(\"ariaDropZoneColumnComponentAggFuncSeparator\", \" of \");\n    const sortDirection = {\n      asc: translate(\"ariaDropZoneColumnComponentSortAscending\", \"ascending\"),\n      desc: translate(\"ariaDropZoneColumnComponentSortDescending\", \"descending\")\n    };\n    const columnSort = this.column.getSort();\n    const isSortSuppressed = this.gos.get(\"rowGroupPanelSuppressSort\");\n    return [\n      aggFuncName && `${aggFuncName}${aggSeparator}`,\n      name,\n      this.isGroupingZone() && !isSortSuppressed && columnSort && `, ${sortDirection[columnSort]}`\n    ].filter((part) => !!part).join(\"\");\n  }\n  getColumnAndAggFuncName() {\n    const name = this.displayName;\n    let aggFuncName = \"\";\n    if (this.isAggregationZone()) {\n      const aggFunc = this.column.getAggFunc();\n      const aggFuncString = typeof aggFunc === \"string\" ? aggFunc : \"agg\";\n      const localeTextFunc = this.localeService.getLocaleTextFunc();\n      aggFuncName = localeTextFunc(aggFuncString, aggFuncString);\n    }\n    return { name, aggFuncName };\n  }\n  setupSort() {\n    const canSort = this.column.isSortable();\n    const isGroupingZone = this.isGroupingZone();\n    if (!canSort || !isGroupingZone) {\n      return;\n    }\n    if (!this.gos.get(\"rowGroupPanelSuppressSort\")) {\n      this.eSortIndicator.setupSort(this.column, true);\n      const performSort = (event) => {\n        event.preventDefault();\n        const sortUsingCtrl = this.gos.get(\"multiSortKey\") === \"ctrl\";\n        const multiSort = sortUsingCtrl ? event.ctrlKey || event.metaKey : event.shiftKey;\n        this.sortController.progressSort(this.column, multiSort, \"uiColumnSorted\");\n      };\n      this.addGuiEventListener(\"click\", performSort);\n      this.addGuiEventListener(\"keydown\", (e) => {\n        const isEnter = e.key === KeyCode15.ENTER;\n        if (isEnter && this.isGroupingZone()) {\n          performSort(e);\n        }\n      });\n    }\n  }\n  getDefaultIconName() {\n    return \"hide\";\n  }\n  createGetDragItem() {\n    const { column } = this;\n    return () => {\n      const visibleState = {};\n      visibleState[column.getId()] = column.isVisible();\n      return {\n        columns: [column],\n        visibleState\n      };\n    };\n  }\n  setupComponents() {\n    super.setupComponents();\n    if (this.isAggregationZone() && !this.gos.get(\"functionsReadOnly\")) {\n      this.addGuiEventListener(\"click\", this.onShowAggFuncSelection.bind(this));\n    }\n  }\n  onKeyDown(e) {\n    super.onKeyDown(e);\n    const isEnter = e.key === KeyCode15.ENTER;\n    if (isEnter && this.isAggregationZone() && !this.gos.get(\"functionsReadOnly\")) {\n      e.preventDefault();\n      this.onShowAggFuncSelection();\n    }\n  }\n  getDisplayValue() {\n    const { name, aggFuncName } = this.getColumnAndAggFuncName();\n    return this.isAggregationZone() ? `${aggFuncName}(${name})` : name;\n  }\n  onShowAggFuncSelection() {\n    if (this.popupShowing) {\n      return;\n    }\n    this.popupShowing = true;\n    const virtualList = new VirtualList({ cssIdentifier: \"select-agg-func\" });\n    const rows = this.aggFuncService.getFuncNames(this.column);\n    const eGui = this.getGui();\n    const virtualListGui = virtualList.getGui();\n    virtualList.setModel({\n      getRow: function(index) {\n        return rows[index];\n      },\n      getRowCount: function() {\n        return rows.length;\n      }\n    });\n    this.createBean(virtualList);\n    const ePopup = _loadTemplate4(\n      /* html*/\n      `<div class=\"ag-select-agg-func-popup\"></div>`\n    );\n    ePopup.style.top = \"0px\";\n    ePopup.style.left = \"0px\";\n    ePopup.appendChild(virtualListGui);\n    ePopup.style.width = `${eGui.clientWidth}px`;\n    const [focusoutListener] = this.addManagedElementListeners(ePopup, {\n      focusout: (e) => {\n        if (!ePopup.contains(e.relatedTarget) && addPopupRes) {\n          addPopupRes.hideFunc();\n        }\n      }\n    });\n    const popupHiddenFunc = (callbackEvent) => {\n      this.destroyBean(virtualList);\n      this.popupShowing = false;\n      if (callbackEvent?.key === \"Escape\") {\n        eGui.focus();\n      }\n      if (focusoutListener) {\n        focusoutListener();\n      }\n    };\n    const translate = this.localeService.getLocaleTextFunc();\n    const addPopupRes = this.popupService.addPopup({\n      modal: true,\n      eChild: ePopup,\n      closeOnEsc: true,\n      closedCallback: popupHiddenFunc,\n      ariaLabel: translate(\"ariaLabelAggregationFunction\", \"Aggregation Function\")\n    });\n    if (addPopupRes) {\n      virtualList.setComponentCreator(this.createAggSelect.bind(this, addPopupRes.hideFunc));\n    }\n    virtualList.addGuiEventListener(\"keydown\", (e) => {\n      if (e.key === KeyCode15.ENTER || e.key === KeyCode15.SPACE) {\n        const row = virtualList.getLastFocusedRow();\n        if (row == null) {\n          return;\n        }\n        const comp = virtualList.getComponentAt(row);\n        if (comp) {\n          comp.selectItem();\n        }\n      }\n    });\n    this.popupService.positionPopupByComponent({\n      type: \"aggFuncSelect\",\n      eventSource: eGui,\n      ePopup,\n      keepWithinBounds: true,\n      column: this.column,\n      position: \"under\"\n    });\n    virtualList.refresh();\n    let rowToFocus = rows.findIndex((r) => r === this.column.getAggFunc());\n    if (rowToFocus === -1) {\n      rowToFocus = 0;\n    }\n    virtualList.focusRow(rowToFocus);\n  }\n  createAggSelect(hidePopup, value) {\n    const itemSelected = () => {\n      hidePopup();\n      this.getGui().focus();\n      this.funcColsService.setColumnAggFunc(this.column, value, \"toolPanelDragAndDrop\");\n    };\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const aggFuncString = value.toString();\n    const aggFuncStringTranslated = localeTextFunc(aggFuncString, aggFuncString);\n    const comp = new AggItemComp(itemSelected, aggFuncStringTranslated);\n    return comp;\n  }\n  isGroupingAndLocked() {\n    return this.isGroupingZone() && this.columnModel.isColGroupLocked(this.column);\n  }\n  isAggregationZone() {\n    return this.dropZonePurpose === \"aggregation\";\n  }\n  isGroupingZone() {\n    return this.dropZonePurpose === \"rowGroup\";\n  }\n  getDragSourceType() {\n    return DragSourceType4.ToolPanel;\n  }\n  destroy() {\n    super.destroy();\n    this.column = null;\n  }\n};\nvar AggItemComp = class extends Component41 {\n  constructor(itemSelected, value) {\n    super(\n      /* html */\n      `<div class=\"ag-select-agg-func-item\"/>`\n    );\n    this.selectItem = itemSelected;\n    this.getGui().innerText = value;\n    this.addGuiEventListener(\"click\", this.selectItem);\n  }\n};\nvar BaseDropZonePanel = class extends PillDropZonePanel {\n  constructor(horizontal, dropZonePurpose) {\n    super(horizontal);\n    this.dropZonePurpose = dropZonePurpose;\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n  }\n  init(params) {\n    super.init(params);\n    this.addManagedEventListeners({ newColumnsLoaded: this.refreshGui.bind(this) });\n    this.addManagedPropertyListeners(\n      [\"functionsReadOnly\", \"rowGroupPanelSuppressSort\", \"groupLockGroupColumns\"],\n      this.refreshGui.bind(this)\n    );\n  }\n  getItems(dragItem) {\n    return dragItem.columns ?? [];\n  }\n  isInterestedIn(type) {\n    return type === DragSourceType22.HeaderCell || type === DragSourceType22.ToolPanel;\n  }\n  minimumAllowedNewInsertIndex() {\n    const numberOfLockedCols = this.gos.get(\"groupLockGroupColumns\");\n    const numberOfGroupCols = this.funcColsService.getRowGroupColumns().length;\n    if (numberOfLockedCols === -1) {\n      return numberOfGroupCols;\n    }\n    return Math.min(numberOfLockedCols, numberOfGroupCols);\n  }\n  showOrHideColumnOnExit(draggingEvent) {\n    return this.isRowGroupPanel() && !this.gos.get(\"suppressRowGroupHidesColumns\") && !draggingEvent.fromNudge;\n  }\n  handleDragEnterEnd(draggingEvent) {\n    const hideColumnOnExit = this.showOrHideColumnOnExit(draggingEvent);\n    if (hideColumnOnExit) {\n      const dragItem = draggingEvent.dragSource.getDragItem();\n      const columns = dragItem.columns;\n      this.setColumnsVisible(columns, false, \"uiColumnDragged\");\n    }\n  }\n  handleDragLeaveEnd(draggingEvent) {\n    const showColumnOnExit = this.showOrHideColumnOnExit(draggingEvent);\n    if (showColumnOnExit) {\n      const dragItem = draggingEvent.dragSource.getDragItem();\n      this.setColumnsVisible(dragItem.columns, true, \"uiColumnDragged\");\n    }\n  }\n  setColumnsVisible(columns, visible, source) {\n    if (columns) {\n      const allowedCols = columns.filter((c) => !c.getColDef().lockVisible);\n      this.columnModel.setColsVisible(allowedCols, visible, source);\n    }\n  }\n  isRowGroupPanel() {\n    return this.dropZonePurpose === \"rowGroup\";\n  }\n  createPillComponent(column, dropTarget, ghost, horizontal) {\n    return new DropZoneColumnComp(column, dropTarget, ghost, this.dropZonePurpose, horizontal);\n  }\n};\nvar PivotDropZonePanel = class extends BaseDropZonePanel {\n  constructor(horizontal) {\n    super(horizontal, \"pivot\");\n  }\n  postConstruct() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const emptyMessage = localeTextFunc(\"pivotColumnsEmptyMessage\", \"Drag here to set column labels\");\n    const title = localeTextFunc(\"pivots\", \"Column Labels\");\n    super.init({\n      icon: _createIconNoSpan11(\"pivotPanel\", this.gos, null),\n      emptyMessage,\n      title\n    });\n    this.addManagedEventListeners({\n      newColumnsLoaded: this.refresh.bind(this),\n      columnPivotChanged: this.refresh.bind(this),\n      columnPivotModeChanged: this.checkVisibility.bind(this)\n    });\n    this.refresh();\n  }\n  getAriaLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const label = translate(\"ariaPivotDropZonePanelLabel\", \"Column Labels\");\n    return label;\n  }\n  getTooltipParams() {\n    const res = super.getTooltipParams();\n    res.location = \"pivotColumnsList\";\n    return res;\n  }\n  refresh() {\n    this.checkVisibility();\n    this.refreshGui();\n  }\n  checkVisibility() {\n    const pivotMode = this.columnModel.isPivotMode();\n    if (this.isHorizontal()) {\n      switch (this.gos.get(\"pivotPanelShow\")) {\n        case \"always\":\n          this.setDisplayed(pivotMode);\n          break;\n        case \"onlyWhenPivoting\": {\n          const pivotActive = this.columnModel.isPivotActive();\n          this.setDisplayed(pivotMode && pivotActive);\n          break;\n        }\n        default:\n          this.setDisplayed(false);\n          break;\n      }\n    } else {\n      this.setDisplayed(pivotMode);\n    }\n  }\n  isItemDroppable(column, draggingEvent) {\n    if (this.gos.get(\"functionsReadOnly\") || !column.isPrimary()) {\n      return false;\n    }\n    return column.isAllowPivot() && (!column.isPivotActive() || this.isSourceEventFromTarget(draggingEvent));\n  }\n  updateItems(columns) {\n    this.funcColsService.setPivotColumns(columns, \"toolPanelUi\");\n  }\n  getIconName() {\n    return this.isPotentialDndItems() ? \"pivot\" : \"notAllowed\";\n  }\n  getExistingItems() {\n    return this.funcColsService.getPivotColumns();\n  }\n};\nvar RowGroupDropZonePanel = class extends BaseDropZonePanel {\n  constructor(horizontal) {\n    super(horizontal, \"rowGroup\");\n  }\n  postConstruct() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const emptyMessage = localeTextFunc(\"rowGroupColumnsEmptyMessage\", \"Drag here to set row groups\");\n    const title = localeTextFunc(\"groups\", \"Row Groups\");\n    super.init({\n      icon: _createIconNoSpan24(\"rowGroupPanel\", this.gos, null),\n      emptyMessage,\n      title\n    });\n    this.addManagedEventListeners({ columnRowGroupChanged: this.refreshGui.bind(this) });\n  }\n  getAriaLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const label = translate(\"ariaRowGroupDropZonePanelLabel\", \"Row Groups\");\n    return label;\n  }\n  getTooltipParams() {\n    const res = super.getTooltipParams();\n    res.location = \"rowGroupColumnsList\";\n    return res;\n  }\n  isItemDroppable(column, draggingEvent) {\n    if (this.gos.get(\"functionsReadOnly\") || !column.isPrimary()) {\n      return false;\n    }\n    return column.isAllowRowGroup() && (!column.isRowGroupActive() || this.isSourceEventFromTarget(draggingEvent));\n  }\n  updateItems(columns) {\n    this.funcColsService.setRowGroupColumns(columns, \"toolPanelUi\");\n  }\n  getIconName() {\n    return this.isPotentialDndItems() ? \"group\" : \"notAllowed\";\n  }\n  getExistingItems() {\n    return this.funcColsService.getRowGroupColumns();\n  }\n};\nvar AgGridHeaderDropZones = class extends Component210 {\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n  }\n  constructor() {\n    super();\n  }\n  postConstruct() {\n    this.setGui(this.createNorthPanel());\n    const onRowGroupChanged = this.onRowGroupChanged.bind(this);\n    this.addManagedEventListeners({\n      columnRowGroupChanged: onRowGroupChanged,\n      newColumnsLoaded: onRowGroupChanged\n    });\n    this.addManagedPropertyListener(\"rowGroupPanelShow\", onRowGroupChanged);\n    this.addManagedPropertyListener(\"pivotPanelShow\", () => this.onPivotPanelShow());\n    this.onRowGroupChanged();\n  }\n  createNorthPanel() {\n    const topPanelGui = document.createElement(\"div\");\n    topPanelGui.classList.add(\"ag-column-drop-wrapper\");\n    _setAriaRole7(topPanelGui, \"presentation\");\n    this.rowGroupComp = new RowGroupDropZonePanel(true);\n    this.createManagedBean(this.rowGroupComp);\n    this.pivotComp = new PivotDropZonePanel(true);\n    this.createManagedBean(this.pivotComp);\n    topPanelGui.appendChild(this.rowGroupComp.getGui());\n    topPanelGui.appendChild(this.pivotComp.getGui());\n    const listener = this.onDropPanelVisible.bind(this);\n    this.addManagedListeners(this.rowGroupComp, {\n      displayChanged: listener\n    });\n    this.addManagedListeners(this.pivotComp, {\n      displayChanged: listener\n    });\n    this.onDropPanelVisible();\n    return topPanelGui;\n  }\n  onDropPanelVisible() {\n    const bothDisplayed = this.rowGroupComp.isDisplayed() && this.pivotComp.isDisplayed();\n    const classStr = \"ag-column-drop-horizontal-half-width\";\n    this.rowGroupComp.addOrRemoveCssClass(classStr, bothDisplayed);\n    this.pivotComp.addOrRemoveCssClass(classStr, bothDisplayed);\n  }\n  onRowGroupChanged() {\n    if (!this.rowGroupComp) {\n      return;\n    }\n    const rowGroupPanelShow = this.gos.get(\"rowGroupPanelShow\");\n    if (rowGroupPanelShow === \"always\") {\n      this.rowGroupComp.setDisplayed(true);\n    } else if (rowGroupPanelShow === \"onlyWhenGrouping\") {\n      const grouping = !this.funcColsService.isRowGroupEmpty();\n      this.rowGroupComp.setDisplayed(grouping);\n    } else {\n      this.rowGroupComp.setDisplayed(false);\n    }\n  }\n  onPivotPanelShow() {\n    if (!this.pivotComp) {\n      return;\n    }\n    const pivotPanelShow = this.gos.get(\"pivotPanelShow\");\n    if (pivotPanelShow === \"always\") {\n      this.pivotComp.setDisplayed(true);\n    } else if (pivotPanelShow === \"onlyWhenPivoting\") {\n      const pivoting = this.columnModel.isPivotActive();\n      this.pivotComp.setDisplayed(pivoting);\n    } else {\n      this.pivotComp.setDisplayed(false);\n    }\n  }\n};\nvar AgGridHeaderDropZonesSelector = {\n  selector: \"AG-GRID-HEADER-DROP-ZONES\",\n  component: AgGridHeaderDropZones\n};\nvar ColumnDropZoneService = class extends BeanStub44 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnDropZonesService\";\n  }\n  getDropZoneSelector() {\n    return AgGridHeaderDropZonesSelector;\n  }\n};\nvar FilterAggregatesStage = class extends BeanStub54 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"filterAggregatesStage\";\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.columnModel = beans.columnModel;\n  }\n  execute(params) {\n    const isPivotMode2 = this.columnModel.isPivotMode();\n    const isAggFilterActive = this.filterManager?.isAggregateFilterPresent() || this.filterManager?.isAggregateQuickFilterPresent();\n    const defaultPrimaryColumnPredicate = (params2) => !params2.node.group;\n    const defaultSecondaryColumnPredicate = (params2) => params2.node.leafGroup;\n    const applyFilterToNode = _getGroupAggFiltering2(this.gos) || (isPivotMode2 ? defaultSecondaryColumnPredicate : defaultPrimaryColumnPredicate);\n    const { changedPath } = params;\n    const preserveChildren = (node, recursive = false) => {\n      if (node.childrenAfterFilter) {\n        node.childrenAfterAggFilter = node.childrenAfterFilter;\n        if (recursive) {\n          node.childrenAfterAggFilter.forEach((child) => preserveChildren(child, recursive));\n        }\n        this.setAllChildrenCount(node);\n      }\n      if (node.sibling) {\n        node.sibling.childrenAfterAggFilter = node.childrenAfterAggFilter;\n      }\n    };\n    const filterChildren = (node) => {\n      node.childrenAfterAggFilter = node.childrenAfterFilter?.filter((child) => {\n        const shouldFilterRow = applyFilterToNode({ node: child });\n        if (shouldFilterRow) {\n          const doesNodePassFilter = this.filterManager.doesRowPassAggregateFilters({ rowNode: child });\n          if (doesNodePassFilter) {\n            preserveChildren(child, true);\n            return true;\n          }\n        }\n        const hasChildPassed = child.childrenAfterAggFilter?.length;\n        return hasChildPassed;\n      }) || null;\n      this.setAllChildrenCount(node);\n      if (node.sibling) {\n        node.sibling.childrenAfterAggFilter = node.childrenAfterAggFilter;\n      }\n    };\n    changedPath.forEachChangedNodeDepthFirst(isAggFilterActive ? filterChildren : preserveChildren, true);\n  }\n  /** for tree data, we include all children, groups and leafs */\n  setAllChildrenCountTreeData(rowNode) {\n    const childrenAfterAggFilter = rowNode.childrenAfterAggFilter;\n    let allChildrenCount = 0;\n    if (childrenAfterAggFilter) {\n      const length = childrenAfterAggFilter.length;\n      allChildrenCount = length;\n      for (let i = 0; i < length; ++i) {\n        allChildrenCount += childrenAfterAggFilter[i].allChildrenCount ?? 0;\n      }\n    }\n    rowNode.setAllChildrenCount(\n      // Maintain the historical behaviour:\n      // - allChildrenCount is 0 in the root if there are no children\n      // - allChildrenCount is null in any non-root row if there are no children\n      allChildrenCount === 0 && rowNode.level >= 0 ? null : allChildrenCount\n    );\n  }\n  /* for grid data, we only count the leafs */\n  setAllChildrenCountGridGrouping(rowNode) {\n    let allChildrenCount = 0;\n    rowNode.childrenAfterAggFilter.forEach((child) => {\n      if (child.group) {\n        allChildrenCount += child.allChildrenCount;\n      } else {\n        allChildrenCount++;\n      }\n    });\n    rowNode.setAllChildrenCount(allChildrenCount);\n  }\n  setAllChildrenCount(rowNode) {\n    if (!rowNode.hasChildren()) {\n      rowNode.setAllChildrenCount(null);\n      return;\n    }\n    if (this.gos.get(\"treeData\")) {\n      this.setAllChildrenCountTreeData(rowNode);\n    } else {\n      this.setAllChildrenCountGridGrouping(rowNode);\n    }\n  }\n};\nvar GroupFilter = class extends TabGuardComp7 {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-group-filter\">\n                <div data-ref=\"eGroupField\"></div>\n                <div data-ref=\"eUnderlyingFilter\"></div>\n            </div>\n        `\n    );\n    this.eGroupField = RefPlaceholder24;\n    this.eUnderlyingFilter = RefPlaceholder24;\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.columnNameService = beans.columnNameService;\n    this.funcColsService = beans.funcColsService;\n  }\n  postConstruct() {\n    this.initialiseTabGuard({});\n  }\n  init(params) {\n    return this.updateParams(params).then(() => {\n      this.addManagedEventListeners({\n        columnRowGroupChanged: () => this.onColumnRowGroupChanged(),\n        filterDestroyed: (event) => this.onFilterDestroyed(event)\n      });\n    });\n  }\n  refresh(params) {\n    this.updateParams(params);\n    return true;\n  }\n  updateParams(params) {\n    this.params = params;\n    this.validateParams();\n    return this.updateGroups();\n  }\n  validateParams() {\n    const { colDef } = this.params;\n    if (colDef.field) {\n      _warnOnce24(\n        'Group Column Filter does not work with the colDef property \"field\". This property will be ignored.'\n      );\n    }\n    if (colDef.filterValueGetter) {\n      _warnOnce24(\n        'Group Column Filter does not work with the colDef property \"filterValueGetter\". This property will be ignored.'\n      );\n    }\n    if (colDef.filterParams) {\n      _warnOnce24(\n        'Group Column Filter does not work with the colDef property \"filterParams\". This property will be ignored.'\n      );\n    }\n  }\n  updateGroups() {\n    const sourceColumns = this.updateGroupField();\n    return this.getUnderlyingFilters(sourceColumns);\n  }\n  getSourceColumns() {\n    this.groupColumn = this.params.column;\n    if (this.gos.get(\"treeData\")) {\n      _warnOnce24(\n        \"Group Column Filter does not work with Tree Data enabled. Please disable Tree Data, or use a different filter.\"\n      );\n      return [];\n    }\n    const sourceColumns = this.funcColsService.getSourceColumnsForGroupColumn(this.groupColumn);\n    if (!sourceColumns) {\n      _warnOnce24(\"Group Column Filter only works on group columns. Please use a different filter.\");\n      return [];\n    }\n    return sourceColumns;\n  }\n  updateGroupField() {\n    _clearElement7(this.eGroupField);\n    if (this.eGroupFieldSelect) {\n      this.destroyBean(this.eGroupFieldSelect);\n    }\n    const allSourceColumns = this.getSourceColumns();\n    const sourceColumns = allSourceColumns.filter((sourceColumn) => sourceColumn.isFilterAllowed());\n    if (!sourceColumns.length) {\n      this.selectedColumn = void 0;\n      _setDisplayed9(this.eGroupField, false);\n      return null;\n    }\n    if (allSourceColumns.length === 1) {\n      this.selectedColumn = sourceColumns[0];\n      _setDisplayed9(this.eGroupField, false);\n    } else {\n      if (!this.selectedColumn || !sourceColumns.some((column) => column.getId() === this.selectedColumn.getId())) {\n        this.selectedColumn = sourceColumns[0];\n      }\n      this.createGroupFieldSelectElement(sourceColumns);\n      this.eGroupField.appendChild(this.eGroupFieldSelect.getGui());\n      this.eGroupField.appendChild(_loadTemplate22(\n        /* html */\n        `<div class=\"ag-filter-separator\"></div>`\n      ));\n      _setDisplayed9(this.eGroupField, true);\n    }\n    return sourceColumns;\n  }\n  createGroupFieldSelectElement(sourceColumns) {\n    this.eGroupFieldSelect = this.createManagedBean(new AgSelect9());\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    this.eGroupFieldSelect.setLabel(localeTextFunc(\"groupFilterSelect\", \"Select field:\"));\n    this.eGroupFieldSelect.setLabelAlignment(\"top\");\n    this.eGroupFieldSelect.addOptions(\n      sourceColumns.map((sourceColumn) => ({\n        value: sourceColumn.getId(),\n        text: this.columnNameService.getDisplayNameForColumn(sourceColumn, \"groupFilter\", false) ?? void 0\n      }))\n    );\n    this.eGroupFieldSelect.setValue(this.selectedColumn.getId());\n    this.eGroupFieldSelect.onValueChange((newValue) => this.updateSelectedColumn(newValue));\n    this.eGroupFieldSelect.addCssClass(\"ag-group-filter-field-select-wrapper\");\n    if (sourceColumns.length === 1) {\n      this.eGroupFieldSelect.setDisabled(true);\n    }\n  }\n  getUnderlyingFilters(sourceColumns) {\n    if (!sourceColumns) {\n      this.filterColumnPairs = void 0;\n      this.selectedFilter = void 0;\n      this.groupColumn.setFilterActive(false, \"columnRowGroupChanged\");\n      return AgPromise4.resolve();\n    }\n    const filterPromises = [];\n    const filterColumnPairs = [];\n    sourceColumns.forEach((column) => {\n      const filterWrapper = this.filterManager.getOrCreateFilterWrapper(column);\n      if (filterWrapper?.filterPromise) {\n        filterPromises.push(\n          filterWrapper.filterPromise.then((filter) => {\n            if (filter) {\n              filterColumnPairs.push({\n                filter,\n                column\n              });\n            }\n            if (column.getId() === this.selectedColumn.getId()) {\n              this.selectedFilter = filter ?? void 0;\n            }\n            return filter;\n          })\n        );\n      }\n    });\n    return AgPromise4.all(filterPromises).then(() => {\n      this.filterColumnPairs = filterColumnPairs;\n      this.groupColumn.setFilterActive(this.isFilterActive(), \"columnRowGroupChanged\");\n    });\n  }\n  addUnderlyingFilterElement() {\n    _clearElement7(this.eUnderlyingFilter);\n    if (!this.selectedColumn) {\n      return AgPromise4.resolve();\n    }\n    const comp = this.createManagedBean(new FilterWrapperComp(this.selectedColumn, \"COLUMN_MENU\"));\n    this.filterWrapperComp = comp;\n    if (!comp.hasFilter()) {\n      return AgPromise4.resolve();\n    }\n    this.eUnderlyingFilter.appendChild(comp.getGui());\n    return comp.getFilter()?.then(() => {\n      comp.afterGuiAttached?.(this.afterGuiAttachedParams);\n      if (!this.afterGuiAttachedParams?.suppressFocus && this.eGroupFieldSelect && !this.eGroupFieldSelect.isDisabled()) {\n        this.eGroupFieldSelect.getFocusableElement().focus();\n      }\n    }) ?? AgPromise4.resolve();\n  }\n  updateSelectedColumn(columnId) {\n    if (!columnId) {\n      return;\n    }\n    this.filterWrapperComp?.afterGuiDetached();\n    this.destroyBean(this.filterWrapperComp);\n    const selectedFilterColumnPair = this.getFilterColumnPair(columnId);\n    this.selectedColumn = selectedFilterColumnPair?.column;\n    this.selectedFilter = selectedFilterColumnPair?.filter;\n    this.dispatchLocalEvent({\n      type: \"selectedColumnChanged\"\n    });\n    this.addUnderlyingFilterElement();\n  }\n  isFilterActive() {\n    return !!this.filterColumnPairs?.some(({ filter }) => filter.isFilterActive());\n  }\n  doesFilterPass() {\n    return true;\n  }\n  getModel() {\n    return null;\n  }\n  setModel() {\n    return AgPromise4.resolve();\n  }\n  afterGuiAttached(params) {\n    this.afterGuiAttachedParams = params;\n    this.addUnderlyingFilterElement();\n  }\n  afterGuiDetached() {\n    _clearElement7(this.eUnderlyingFilter);\n    this.selectedFilter?.afterGuiDetached?.();\n  }\n  onColumnRowGroupChanged() {\n    this.updateGroups().then(() => {\n      this.dispatchLocalEvent({\n        type: \"columnRowGroupChanged\"\n      });\n    });\n  }\n  onFilterDestroyed({ column: eventColumn, source }) {\n    if (source === \"gridDestroyed\") {\n      return;\n    }\n    const colId = eventColumn.getColId();\n    if (this.filterColumnPairs?.some(({ column }) => column.getColId() === colId)) {\n      setTimeout(() => {\n        if (this.isAlive()) {\n          this.updateGroups();\n        }\n      });\n    }\n  }\n  getFilterColumnPair(columnId) {\n    if (!columnId) {\n      return void 0;\n    }\n    return this.filterColumnPairs?.find(({ column }) => column.getId() === columnId);\n  }\n  getSelectedFilter() {\n    return this.selectedFilter;\n  }\n  getSelectedColumn() {\n    return this.selectedColumn;\n  }\n  isFilterAllowed() {\n    return !!this.selectedColumn;\n  }\n  destroy() {\n    super.destroy();\n  }\n};\nvar GroupFloatingFilterComp = class extends Component310 {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div data-ref=\"eFloatingFilter\" class=\"ag-group-floating-filter ag-floating-filter-input\" role=\"presentation\"></div>\n        `\n    );\n    this.eFloatingFilter = RefPlaceholder34;\n    this.haveAddedColumnListeners = false;\n  }\n  wireBeans(beans) {\n    this.columnNameService = beans.columnNameService;\n    this.filterManager = beans.filterManager;\n  }\n  init(params) {\n    this.params = params;\n    const canShowUnderlyingFloatingFilter = this.gos.get(\"groupDisplayType\") === \"multipleColumns\";\n    return new AgPromise22((resolve) => {\n      this.params.parentFilterInstance((parentFilterInstance) => {\n        this.parentFilterInstance = parentFilterInstance;\n        if (canShowUnderlyingFloatingFilter) {\n          this.setupUnderlyingFloatingFilterElement().then(() => resolve());\n        } else {\n          this.setupReadOnlyFloatingFilterElement();\n          resolve();\n        }\n      });\n    }).then(() => {\n      this.addManagedListeners(this.parentFilterInstance, {\n        selectedColumnChanged: this.onSelectedColumnChanged.bind(this),\n        columnRowGroupChanged: this.onColumnRowGroupChanged.bind(this)\n      });\n    });\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    this.params = params;\n    this.setParams();\n  }\n  setParams() {\n    const displayName = this.columnNameService.getDisplayNameForColumn(\n      this.params.column,\n      \"header\",\n      true\n    );\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eFloatingFilterText?.setInputAriaLabel(`${displayName} ${translate(\"ariaFilterInput\", \"Filter Input\")}`);\n  }\n  setupReadOnlyFloatingFilterElement() {\n    if (!this.eFloatingFilterText) {\n      this.eFloatingFilterText = this.createManagedBean(new AgInputTextField3());\n      this.eFloatingFilterText.setDisabled(true).addGuiEventListener(\"click\", () => this.params.showParentFilter());\n      this.setParams();\n    }\n    this.updateDisplayedValue();\n    this.eFloatingFilter.appendChild(this.eFloatingFilterText.getGui());\n  }\n  setupUnderlyingFloatingFilterElement() {\n    this.showingUnderlyingFloatingFilter = false;\n    this.underlyingFloatingFilter = void 0;\n    _clearElement23(this.eFloatingFilter);\n    const column = this.parentFilterInstance.getSelectedColumn();\n    if (column && !column.isVisible()) {\n      const compDetails = this.filterManager.getFloatingFilterCompDetails(column, this.params.showParentFilter);\n      if (compDetails) {\n        if (!this.haveAddedColumnListeners) {\n          this.haveAddedColumnListeners = true;\n          this.addManagedListeners(column, {\n            visibleChanged: this.onColumnVisibleChanged.bind(this),\n            colDefChanged: this.onColDefChanged.bind(this)\n          });\n        }\n        return compDetails.newAgStackInstance().then((floatingFilter) => {\n          this.underlyingFloatingFilter = floatingFilter;\n          this.underlyingFloatingFilter?.onParentModelChanged(\n            this.parentFilterInstance.getSelectedFilter()?.getModel()\n          );\n          this.appendChild(floatingFilter.getGui());\n          this.showingUnderlyingFloatingFilter = true;\n        });\n      }\n    }\n    this.setupReadOnlyFloatingFilterElement();\n    return AgPromise22.resolve();\n  }\n  onColumnVisibleChanged() {\n    this.setupUnderlyingFloatingFilterElement();\n  }\n  onColDefChanged(event) {\n    if (!event.column) {\n      return;\n    }\n    const compDetails = this.filterManager.getFloatingFilterCompDetails(\n      event.column,\n      this.params.showParentFilter\n    );\n    if (compDetails) {\n      if (this.underlyingFloatingFilter?.refresh) {\n        this.underlyingFloatingFilter.refresh(compDetails.params);\n      } else {\n        this.underlyingFloatingFilter?.onParamsUpdated?.(compDetails.params);\n      }\n    }\n  }\n  onParentModelChanged(_model, event) {\n    if (this.showingUnderlyingFloatingFilter) {\n      this.underlyingFloatingFilter?.onParentModelChanged(\n        this.parentFilterInstance.getSelectedFilter()?.getModel(),\n        event\n      );\n    } else {\n      this.updateDisplayedValue();\n    }\n  }\n  updateDisplayedValue() {\n    if (!this.parentFilterInstance || !this.eFloatingFilterText) {\n      return;\n    }\n    const selectedFilter = this.parentFilterInstance.getSelectedFilter();\n    if (!selectedFilter) {\n      this.eFloatingFilterText.setValue(\"\");\n      this.eFloatingFilterText.setDisplayed(false);\n      return;\n    }\n    this.eFloatingFilterText.setDisplayed(true);\n    if (selectedFilter.getModelAsString) {\n      const filterModel = selectedFilter.getModel();\n      this.eFloatingFilterText.setValue(filterModel == null ? \"\" : selectedFilter.getModelAsString(filterModel));\n    } else {\n      this.eFloatingFilterText.setValue(\"\");\n    }\n  }\n  onSelectedColumnChanged() {\n    if (!this.showingUnderlyingFloatingFilter) {\n      this.updateDisplayedValue();\n    }\n  }\n  onColumnRowGroupChanged() {\n    if (!this.showingUnderlyingFloatingFilter) {\n      this.updateDisplayedValue();\n    }\n  }\n  destroy() {\n    super.destroy();\n  }\n};\nvar BatchRemover = class {\n  constructor() {\n    this.allSets = {};\n    this.allParents = [];\n  }\n  removeFromChildrenAfterGroup(parent, child) {\n    const set2 = this.getSet(parent);\n    set2.removeFromChildrenAfterGroup[child.id] = true;\n  }\n  isRemoveFromAllLeafChildren(parent, child) {\n    const set2 = this.getSet(parent);\n    return !!set2.removeFromAllLeafChildren[child.id];\n  }\n  preventRemoveFromAllLeafChildren(parent, child) {\n    const set2 = this.getSet(parent);\n    delete set2.removeFromAllLeafChildren[child.id];\n  }\n  removeFromAllLeafChildren(parent, child) {\n    const set2 = this.getSet(parent);\n    set2.removeFromAllLeafChildren[child.id] = true;\n  }\n  getSet(parent) {\n    if (!this.allSets[parent.id]) {\n      this.allSets[parent.id] = {\n        removeFromAllLeafChildren: {},\n        removeFromChildrenAfterGroup: {}\n      };\n      this.allParents.push(parent);\n    }\n    return this.allSets[parent.id];\n  }\n  getAllParents() {\n    return this.allParents;\n  }\n  flush() {\n    this.allParents.forEach((parent) => {\n      const nodeDetails = this.allSets[parent.id];\n      parent.childrenAfterGroup = parent.childrenAfterGroup.filter(\n        (child) => !nodeDetails.removeFromChildrenAfterGroup[child.id]\n      );\n      parent.allLeafChildren = parent.allLeafChildren?.filter((child) => !nodeDetails.removeFromAllLeafChildren[child.id]) ?? null;\n      parent.updateHasChildren();\n      const sibling = parent.sibling;\n      if (sibling) {\n        sibling.childrenAfterGroup = parent.childrenAfterGroup;\n        sibling.allLeafChildren = parent.allLeafChildren;\n      }\n    });\n    this.allSets = {};\n    this.allParents.length = 0;\n  }\n};\nfunction sortGroupChildren(rowNodes) {\n  if (!rowNodes) {\n    return false;\n  }\n  const length = rowNodes.length;\n  if (length < 2) {\n    return false;\n  }\n  let atLeastOneOutOfOrder = false;\n  for (let i = 1; i < length; i++) {\n    if (compareGroupChildren(rowNodes[i - 1], rowNodes[i]) > 0) {\n      atLeastOneOutOfOrder = true;\n      break;\n    }\n  }\n  if (!atLeastOneOutOfOrder) {\n    return false;\n  }\n  rowNodes.sort(compareGroupChildren);\n  return true;\n}\nfunction compareGroupChildren(nodeA, nodeB) {\n  const positionA = nodeA.sourceRowIndex;\n  const positionB = nodeB.sourceRowIndex;\n  const aHasIndex = positionA >= 0;\n  const bHasIndex = positionB >= 0;\n  const bothNodesAreUserNodes = aHasIndex && bHasIndex;\n  const bothNodesAreFillerNodes = !aHasIndex && !bHasIndex;\n  if (bothNodesAreUserNodes) {\n    return positionA - positionB;\n  }\n  if (bothNodesAreFillerNodes) {\n    return nodeA.__objectId - nodeB.__objectId;\n  }\n  if (aHasIndex) {\n    return 1;\n  }\n  return -1;\n}\nvar GroupStrategy = class extends BeanStub63 {\n  wireBeans(beans) {\n    this.beans = beans;\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n    this.valueService = beans.valueService;\n    this.selectionService = beans.selectionService;\n    this.showRowGroupColsService = beans.showRowGroupColsService;\n  }\n  execute(params) {\n    const details = this.createGroupingDetails(params);\n    if (details.transactions) {\n      this.handleTransaction(details);\n    } else {\n      const afterColsChanged = params.afterColumnsChanged === true;\n      this.shotgunResetEverything(details, afterColsChanged);\n    }\n    this.positionLeafsAndGroups(params.changedPath);\n    this.orderGroups(details);\n  }\n  positionLeafsAndGroups(changedPath) {\n    changedPath.forEachChangedNodeDepthFirst((group) => {\n      if (group.childrenAfterGroup) {\n        const leafNodes = [];\n        const groupNodes = [];\n        let unbalancedNode;\n        group.childrenAfterGroup.forEach((row) => {\n          if (!row.childrenAfterGroup?.length) {\n            leafNodes.push(row);\n          } else {\n            if (row.key === \"\" && !unbalancedNode) {\n              unbalancedNode = row;\n            } else {\n              groupNodes.push(row);\n            }\n          }\n        });\n        if (unbalancedNode) {\n          groupNodes.push(unbalancedNode);\n        }\n        group.childrenAfterGroup = [...leafNodes, ...groupNodes];\n      }\n    }, false);\n  }\n  createGroupingDetails(params) {\n    const { rowNode, changedPath, rowNodeTransactions, rowNodesOrderChanged } = params;\n    const groupedCols = this.funcColsService.getRowGroupColumns();\n    const details = {\n      expandByDefault: this.gos.get(\"groupDefaultExpanded\"),\n      groupedCols,\n      rootNode: rowNode,\n      pivotMode: this.columnModel.isPivotMode(),\n      groupedColCount: groupedCols?.length ?? 0,\n      transactions: rowNodeTransactions,\n      rowNodesOrderChanged: !!rowNodesOrderChanged,\n      // if no transaction, then it's shotgun, changed path would be 'not active' at this point anyway\n      changedPath,\n      groupAllowUnbalanced: this.gos.get(\"groupAllowUnbalanced\"),\n      isGroupOpenByDefault: this.gos.getCallback(\"isGroupOpenByDefault\"),\n      initialGroupOrderComparator: this.gos.getCallback(\"initialGroupOrderComparator\"),\n      suppressGroupMaintainValueType: this.gos.get(\"suppressGroupMaintainValueType\"),\n      keyCreators: groupedCols?.map((column) => column.getColDef().keyCreator) ?? []\n    };\n    return details;\n  }\n  handleTransaction(details) {\n    details.transactions.forEach((tran) => {\n      const batchRemover = new BatchRemover();\n      if (_existsAndNotEmpty22(tran.remove)) {\n        this.removeNodes(tran.remove, details, batchRemover);\n      }\n      if (_existsAndNotEmpty22(tran.update)) {\n        this.moveNodesInWrongPath(tran.update, details, batchRemover);\n      }\n      if (_existsAndNotEmpty22(tran.add)) {\n        this.insertNodes(tran.add, details);\n      }\n      const parentsWithChildrenRemoved = batchRemover.getAllParents().slice();\n      batchRemover.flush();\n      this.removeEmptyGroups(parentsWithChildrenRemoved, details);\n    });\n    if (details.rowNodesOrderChanged) {\n      this.sortChildren(details);\n    }\n  }\n  // this is used when doing delta updates, eg Redux, keeps nodes in right order\n  sortChildren(details) {\n    details.changedPath.forEachChangedNodeDepthFirst(\n      (node) => {\n        const didSort = sortGroupChildren(node.childrenAfterGroup);\n        if (didSort) {\n          details.changedPath.addParentNode(node);\n        }\n      },\n      false,\n      true\n    );\n  }\n  orderGroups(details) {\n    const comparator = details.initialGroupOrderComparator;\n    if (_exists24(comparator)) {\n      recursiveSort(details.rootNode);\n    }\n    function recursiveSort(rowNode) {\n      const doSort = _exists24(rowNode.childrenAfterGroup) && // we only want to sort groups, so we do not sort leafs (a leaf group has leafs as children)\n      !rowNode.leafGroup;\n      if (doSort) {\n        rowNode.childrenAfterGroup.sort((nodeA, nodeB) => comparator({ nodeA, nodeB }));\n        rowNode.childrenAfterGroup.forEach((childNode) => recursiveSort(childNode));\n      }\n    }\n  }\n  getExistingPathForNode(node, details) {\n    const res = [];\n    let pointer = node.parent;\n    while (pointer && pointer !== details.rootNode) {\n      res.push({\n        key: pointer.key,\n        rowGroupColumn: pointer.rowGroupColumn,\n        field: pointer.field\n      });\n      pointer = pointer.parent;\n    }\n    res.reverse();\n    return res;\n  }\n  moveNodesInWrongPath(childNodes, details, batchRemover) {\n    childNodes.forEach((childNode) => {\n      if (details.changedPath.isActive()) {\n        details.changedPath.addParentNode(childNode.parent);\n      }\n      const infoToKeyMapper = (item) => item.key;\n      const oldPath = this.getExistingPathForNode(childNode, details).map(infoToKeyMapper);\n      const newPath = this.getGroupInfo(childNode, details).map(infoToKeyMapper);\n      const nodeInCorrectPath = _areEqual4(oldPath, newPath);\n      if (!nodeInCorrectPath) {\n        this.moveNode(childNode, details, batchRemover);\n      }\n    });\n  }\n  moveNode(childNode, details, batchRemover) {\n    this.removeNodesFromParents([childNode], details, batchRemover);\n    this.insertOneNode(childNode, details, batchRemover);\n    childNode.setData(childNode.data);\n    if (details.changedPath.isActive()) {\n      const newParent = childNode.parent;\n      details.changedPath.addParentNode(newParent);\n    }\n  }\n  removeNodes(leafRowNodes, details, batchRemover) {\n    this.removeNodesFromParents(leafRowNodes, details, batchRemover);\n    if (details.changedPath.isActive()) {\n      leafRowNodes.forEach((rowNode) => details.changedPath.addParentNode(rowNode.parent));\n    }\n  }\n  forEachParentGroup(details, group, callback) {\n    let pointer = group;\n    while (pointer && pointer !== details.rootNode) {\n      callback(pointer);\n      pointer = pointer.parent;\n    }\n  }\n  removeNodesFromParents(nodesToRemove, details, provided) {\n    const batchRemoverIsLocal = provided == null;\n    const batchRemoverToUse = provided ? provided : new BatchRemover();\n    nodesToRemove.forEach((nodeToRemove) => {\n      this.removeFromParent(nodeToRemove, batchRemoverToUse);\n      this.forEachParentGroup(details, nodeToRemove.parent, (parentNode) => {\n        batchRemoverToUse.removeFromAllLeafChildren(parentNode, nodeToRemove);\n      });\n    });\n    if (batchRemoverIsLocal) {\n      batchRemoverToUse.flush();\n    }\n  }\n  removeEmptyGroups(possibleEmptyGroups, details) {\n    let checkAgain = true;\n    const groupShouldBeRemoved = (rowNode) => {\n      const mapKey = this.getChildrenMappedKey(rowNode.key, rowNode.rowGroupColumn);\n      const parentRowNode = rowNode.parent;\n      const groupAlreadyRemoved = parentRowNode?.childrenMapped ? !parentRowNode.childrenMapped[mapKey] : true;\n      if (groupAlreadyRemoved) {\n        return false;\n      }\n      return !!rowNode.group && (rowNode.childrenAfterGroup?.length ?? 0) === 0;\n    };\n    while (checkAgain) {\n      checkAgain = false;\n      const batchRemover = new BatchRemover();\n      possibleEmptyGroups.forEach((possibleEmptyGroup) => {\n        this.forEachParentGroup(details, possibleEmptyGroup, (rowNode) => {\n          if (groupShouldBeRemoved(rowNode)) {\n            checkAgain = true;\n            this.removeFromParent(rowNode, batchRemover);\n            rowNode.setSelectedParams({ newValue: false, source: \"rowGroupChanged\" });\n          }\n        });\n      });\n      batchRemover.flush();\n    }\n  }\n  // removes the node from the parent by:\n  // a) removing from childrenAfterGroup (using batchRemover if present, otherwise immediately)\n  // b) removing from childrenMapped (immediately)\n  // c) setRowTop(null) - as the rowRenderer uses this to know the RowNode is no longer needed\n  // d) setRowIndex(null) - as the rowNode will no longer be displayed.\n  removeFromParent(child, batchRemover) {\n    if (child.parent) {\n      if (batchRemover) {\n        batchRemover.removeFromChildrenAfterGroup(child.parent, child);\n      } else {\n        _removeFromArray2(child.parent.childrenAfterGroup, child);\n        child.parent.updateHasChildren();\n      }\n    }\n    const mapKey = this.getChildrenMappedKey(child.key, child.rowGroupColumn);\n    if (child.parent?.childrenMapped) {\n      delete child.parent.childrenMapped[mapKey];\n    }\n    child.setRowTop(null);\n    child.setRowIndex(null);\n  }\n  /**\n   * This is idempotent, but relies on the `key` field being the same throughout a RowNode's lifetime\n   */\n  addToParent(child, parent) {\n    const mapKey = this.getChildrenMappedKey(child.key, child.rowGroupColumn);\n    if (parent?.childrenMapped) {\n      if (parent.childrenMapped[mapKey] !== child) {\n        parent.childrenMapped[mapKey] = child;\n        parent.childrenAfterGroup.push(child);\n        parent.setGroup(true);\n      }\n    }\n  }\n  areGroupColsEqual(d1, d2) {\n    if (d1 == null || d2 == null || d1.pivotMode !== d2.pivotMode) {\n      return false;\n    }\n    return _areEqual4(d1.groupedCols, d2.groupedCols) && _areEqual4(d1.keyCreators, d2.keyCreators);\n  }\n  checkAllGroupDataAfterColsChanged(details) {\n    const recurse = (rowNodes) => {\n      if (!rowNodes) {\n        return;\n      }\n      rowNodes.forEach((rowNode) => {\n        const isLeafNode = !rowNode.group;\n        if (isLeafNode) {\n          return;\n        }\n        const groupInfo = {\n          field: rowNode.field,\n          key: rowNode.key,\n          rowGroupColumn: rowNode.rowGroupColumn,\n          leafNode: rowNode.allLeafChildren?.[0]\n        };\n        this.setGroupData(rowNode, groupInfo, details);\n        recurse(rowNode.childrenAfterGroup);\n      });\n    };\n    recurse(details.rootNode.childrenAfterGroup);\n  }\n  shotgunResetEverything(details, afterColumnsChanged) {\n    if (this.noChangeInGroupingColumns(details, afterColumnsChanged)) {\n      return;\n    }\n    this.selectionService.filterFromSelection((node) => node && !node.group);\n    const { groupedCols } = details;\n    const rootNode = details.rootNode;\n    rootNode.leafGroup = groupedCols.length === 0;\n    rootNode.childrenAfterGroup = [];\n    rootNode.childrenMapped = {};\n    rootNode.updateHasChildren();\n    const sibling = rootNode.sibling;\n    if (sibling) {\n      sibling.childrenAfterGroup = rootNode.childrenAfterGroup;\n      sibling.childrenMapped = rootNode.childrenMapped;\n    }\n    this.insertNodes(rootNode.allLeafChildren, details);\n  }\n  noChangeInGroupingColumns(details, afterColumnsChanged) {\n    let noFurtherProcessingNeeded = false;\n    const groupDisplayColumns = this.showRowGroupColsService.getShowRowGroupCols();\n    const newGroupDisplayColIds = groupDisplayColumns ? groupDisplayColumns.map((c) => c.getId()).join(\"-\") : \"\";\n    if (afterColumnsChanged) {\n      noFurtherProcessingNeeded = this.areGroupColsEqual(details, this.oldGroupingDetails);\n      if (this.oldGroupDisplayColIds !== newGroupDisplayColIds) {\n        this.checkAllGroupDataAfterColsChanged(details);\n      }\n    }\n    this.oldGroupingDetails = details;\n    this.oldGroupDisplayColIds = newGroupDisplayColIds;\n    return noFurtherProcessingNeeded;\n  }\n  insertNodes(newRowNodes, details) {\n    newRowNodes.forEach((rowNode) => {\n      this.insertOneNode(rowNode, details);\n      if (details.changedPath.isActive()) {\n        details.changedPath.addParentNode(rowNode.parent);\n      }\n    });\n  }\n  insertOneNode(childNode, details, batchRemover) {\n    const path = this.getGroupInfo(childNode, details);\n    const parentGroup = this.findParentForNode(childNode, path, details, batchRemover);\n    if (!parentGroup.group) {\n      _warnOnce33(`duplicate group keys for row data, keys should be unique`, [parentGroup.data, childNode.data]);\n    }\n    childNode.parent = parentGroup;\n    childNode.level = path.length;\n    parentGroup.childrenAfterGroup.push(childNode);\n    parentGroup.updateHasChildren();\n  }\n  findParentForNode(childNode, path, details, batchRemover) {\n    let nextNode = details.rootNode;\n    path.forEach((groupInfo, level) => {\n      nextNode = this.getOrCreateNextNode(nextNode, groupInfo, level, details);\n      if (!batchRemover?.isRemoveFromAllLeafChildren(nextNode, childNode)) {\n        nextNode.allLeafChildren.push(childNode);\n      } else {\n        batchRemover?.preventRemoveFromAllLeafChildren(nextNode, childNode);\n      }\n    });\n    return nextNode;\n  }\n  getOrCreateNextNode(parentGroup, groupInfo, level, details) {\n    const key = this.getChildrenMappedKey(groupInfo.key, groupInfo.rowGroupColumn);\n    let nextNode = parentGroup?.childrenMapped?.[key];\n    if (!nextNode) {\n      nextNode = this.createGroup(groupInfo, parentGroup, level, details);\n      this.addToParent(nextNode, parentGroup);\n    }\n    return nextNode;\n  }\n  createGroup(groupInfo, parent, level, details) {\n    const groupNode = new RowNode(this.beans);\n    groupNode.group = true;\n    groupNode.field = groupInfo.field;\n    groupNode.rowGroupColumn = groupInfo.rowGroupColumn;\n    this.setGroupData(groupNode, groupInfo, details);\n    groupNode.key = groupInfo.key;\n    groupNode.id = this.createGroupId(groupNode, parent, level);\n    groupNode.level = level;\n    groupNode.leafGroup = level === details.groupedColCount - 1;\n    groupNode.allLeafChildren = [];\n    groupNode.setAllChildrenCount(0);\n    groupNode.rowGroupIndex = level;\n    groupNode.childrenAfterGroup = [];\n    groupNode.childrenMapped = {};\n    groupNode.updateHasChildren();\n    groupNode.parent = parent;\n    this.setExpandedInitialValue(details, groupNode);\n    return groupNode;\n  }\n  createGroupId(node, parent, level) {\n    const createGroupId = (node2, parent2) => {\n      if (!node2.rowGroupColumn) {\n        return null;\n      }\n      const parentId = parent2 ? createGroupId(parent2, parent2.parent, 0) : null;\n      return `${parentId == null ? \"\" : parentId + \"-\"}${node2.rowGroupColumn.getColId()}-${node2.key}`;\n    };\n    return RowNode.ID_PREFIX_ROW_GROUP + createGroupId(node, parent, level);\n  }\n  setGroupData(groupNode, groupInfo, details) {\n    groupNode.groupData = {};\n    const groupDisplayCols = this.showRowGroupColsService.getShowRowGroupCols();\n    groupDisplayCols.forEach((col) => {\n      const groupColumn = groupNode.rowGroupColumn;\n      const isRowGroupDisplayed = groupColumn !== null && col.isRowGroupDisplayed(groupColumn.getId());\n      if (isRowGroupDisplayed) {\n        if (details.suppressGroupMaintainValueType) {\n          groupNode.groupData[col.getColId()] = groupInfo.key;\n        } else {\n          groupNode.groupData[col.getColId()] = this.valueService.getValue(groupColumn, groupInfo.leafNode);\n        }\n      }\n    });\n  }\n  getChildrenMappedKey(key, rowGroupColumn) {\n    return rowGroupColumn ? rowGroupColumn.getId() + \"-\" + key : key;\n  }\n  setExpandedInitialValue(details, groupNode) {\n    if (details.pivotMode && groupNode.leafGroup) {\n      groupNode.expanded = false;\n      return;\n    }\n    const userCallback = details.isGroupOpenByDefault;\n    if (userCallback) {\n      const params = {\n        rowNode: groupNode,\n        field: groupNode.field,\n        key: groupNode.key,\n        level: groupNode.level,\n        rowGroupColumn: groupNode.rowGroupColumn\n      };\n      groupNode.expanded = userCallback(params) == true;\n      return;\n    }\n    if (details.expandByDefault === -1) {\n      groupNode.expanded = true;\n      return;\n    }\n    groupNode.expanded = groupNode.level < details.expandByDefault;\n  }\n  getGroupInfo(rowNode, details) {\n    const res = [];\n    details.groupedCols.forEach((groupCol) => {\n      let key = this.valueService.getKeyForNode(groupCol, rowNode);\n      let keyExists = key !== null && key !== void 0 && key !== \"\";\n      const createGroupForEmpty = details.pivotMode || !details.groupAllowUnbalanced;\n      if (createGroupForEmpty && !keyExists) {\n        key = \"\";\n        keyExists = true;\n      }\n      if (keyExists) {\n        const item = {\n          key,\n          field: groupCol.getColDef().field,\n          rowGroupColumn: groupCol,\n          leafNode: rowNode\n        };\n        res.push(item);\n      }\n    });\n    return res;\n  }\n};\nvar treeNodePositionComparer = (a, b) => a.treeNode.oldSourceRowIndex - b.treeNode.oldSourceRowIndex;\nvar EMPTY_ARRAY = Object.freeze([]);\nvar EMPTY_CHILDREN = EMPTY_ARRAY.values();\nvar orphanRow = (row, root) => {\n  row.parent = null;\n  row.treeNode = null;\n  if (root) {\n    row.childrenAfterGroup = [];\n  } else {\n    row.level = 0;\n    row.childrenAfterGroup = null;\n    row.allLeafChildren = null;\n  }\n};\nvar TreeNode = class _TreeNode {\n  constructor(parent, key, level) {\n    this.parent = parent;\n    this.key = key;\n    this.level = level;\n    this.children = null;\n    this.invalidatedHead = null;\n    this.invalidatedNext = void 0;\n    this.row = null;\n    this.oldRow = null;\n    this.duplicateRows = null;\n    this.childrenAfterGroup = EMPTY_ARRAY;\n    this.allLeafChildren = EMPTY_ARRAY;\n    this.childrenChanged = false;\n    this.leafChildrenChanged = false;\n    this.oldSourceRowIndex = -1;\n  }\n  isEmptyFillerNode() {\n    return !this.row?.data && !this.children?.size;\n  }\n  /** Returns true if this tree node has children */\n  hasChildren() {\n    return !!this.children?.size;\n  }\n  /** Returns an iterator able to iterate all children in this node, in order of insertion */\n  enumChildren() {\n    return this.children?.values() ?? EMPTY_CHILDREN;\n  }\n  /**\n   * Gets a node a key in the given parent. If the node does not exists, creates a filler node, with null row.\n   * We cast to string just to be sure the user passed a string correctly and not a number or something else.\n   * @returns the node at the given key, or a new filler node inserted there if it does not exist.\n   */\n  upsertKey(key) {\n    if (typeof key !== \"string\") {\n      key = String(key);\n    }\n    let node = this.children?.get(key);\n    if (!node) {\n      node = new _TreeNode(this, key, this.level + 1);\n      (this.children ?? (this.children = /* @__PURE__ */ new Map()))?.set(node.key, node);\n    }\n    return node;\n  }\n  /** Removes this node from the parent, and free memory. This node cannot be used after this. */\n  destroy() {\n    const { row, parent } = this;\n    if (parent === null) {\n      return;\n    }\n    parent?.children?.delete(this.key);\n    if (row !== null) {\n      orphanRow(row, true);\n    }\n    this.parent = null;\n  }\n  /**\n   * Sets the row for the TreeNode.\n   * If the row is already set, it will be replaced with the new row, and the old row will be orphaned.\n   * childrenAfterGroup and allLeafChildren will be reassigned.\n   * @returns True if the row changed\n   */\n  setRow(newRow) {\n    const { level, row: oldRow, childrenAfterGroup } = this;\n    if (level < 0) {\n      if (oldRow !== null && oldRow !== newRow) {\n        orphanRow(oldRow, true);\n      }\n    } else {\n      if (oldRow === newRow) {\n        return false;\n      }\n      if (oldRow !== null) {\n        newRow.allLeafChildren = oldRow.allLeafChildren ?? this.allLeafChildren ?? EMPTY_ARRAY;\n        orphanRow(oldRow, false);\n      } else {\n        newRow.allLeafChildren = this.allLeafChildren ?? EMPTY_ARRAY;\n      }\n    }\n    newRow.level = level;\n    newRow.childrenAfterGroup = childrenAfterGroup;\n    newRow.treeNode = this;\n    this.row = newRow;\n    return true;\n  }\n  /**\n   * Removes a row from the tree node.\n   * If the row is the main row, it will be replaced with the first row in the duplicate rows, if any.\n   * If the row is a duplicate row, it will be removed from the duplicate rows.\n   * @param rowToRemove - The row to be removed.\n   * @returns `true` if the row was successfully removed, `false` if the row was not found.\n   */\n  removeRow(rowToRemove) {\n    const { level, row, duplicateRows, childrenAfterGroup } = this;\n    if (row === rowToRemove) {\n      const duplicate = this.popDuplicateRow();\n      if (duplicate) {\n        this.row = duplicate;\n        duplicate.childrenAfterGroup = childrenAfterGroup;\n        if (level >= 0) {\n          duplicate.allLeafChildren = row.allLeafChildren ?? this.allLeafChildren ?? EMPTY_ARRAY;\n        }\n      } else {\n        this.row = null;\n      }\n    } else {\n      if (!duplicateRows?.delete(rowToRemove)) {\n        return false;\n      }\n      if (duplicateRows.size === 0) {\n        this.duplicateRows = null;\n      }\n    }\n    orphanRow(rowToRemove, level < 0);\n    return true;\n  }\n  /**\n   * Adds a duplicate row to the tree node.\n   * @param newRow - The new row to be added.\n   * @returns A boolean indicating whether the row was successfully added.\n   */\n  addDuplicateRow(newRow) {\n    const { level } = this;\n    let duplicateRows = this.duplicateRows;\n    if (duplicateRows === null) {\n      duplicateRows = /* @__PURE__ */ new Set();\n      this.duplicateRows = duplicateRows;\n    } else if (duplicateRows.has(newRow)) {\n      return false;\n    }\n    duplicateRows.add(newRow);\n    newRow.treeNode = this;\n    newRow.level = level;\n    if (level >= 0) {\n      newRow.allLeafChildren = EMPTY_ARRAY;\n    }\n    newRow.childrenAfterGroup = EMPTY_ARRAY;\n    return true;\n  }\n  /**\n   * This is needed to be sure that the row is the duplicate row with the smallest sourceRowIndex, in O(n).\n   * @returns this.row\n   */\n  sortFirstDuplicateRow() {\n    const duplicateRows = this.duplicateRows;\n    const oldRow = this.row;\n    if (!oldRow || !duplicateRows) {\n      return oldRow;\n    }\n    let newRow = oldRow;\n    for (const row of duplicateRows) {\n      if (row.sourceRowIndex < newRow.sourceRowIndex) {\n        newRow = row;\n      }\n    }\n    if (newRow !== oldRow) {\n      newRow.childrenAfterGroup = this.childrenAfterGroup;\n      newRow.allLeafChildren = oldRow.allLeafChildren ?? this.allLeafChildren ?? EMPTY_ARRAY;\n      oldRow.childrenAfterGroup = EMPTY_ARRAY;\n      oldRow.allLeafChildren = EMPTY_ARRAY;\n      duplicateRows.delete(newRow);\n      duplicateRows.add(oldRow);\n      this.row = newRow;\n    }\n    return newRow;\n  }\n  /** Pops the first duplicate row from the list of duplicates */\n  popDuplicateRow() {\n    let result = null;\n    const duplicateRows = this.duplicateRows;\n    if (duplicateRows !== null) {\n      result = duplicateRows.values().next().value;\n      if (result !== null && duplicateRows.delete(result) && duplicateRows.size === 0) {\n        this.duplicateRows = null;\n      }\n    }\n    return result;\n  }\n  /**\n   * Dequeues the next child invalidated node to be committed. Order is not deterministic.\n   * @returns the next child node to be committed, or null if all children were already dequeued.\n   */\n  dequeueInvalidated() {\n    const node = this.invalidatedHead;\n    if (node !== null) {\n      this.invalidatedHead = node.invalidatedNext ?? null;\n      node.invalidatedNext = void 0;\n    }\n    return node;\n  }\n  /**\n   * Invalidates this node and all its parents until the root is reached.\n   * Order of invalidated nodes is not deterministic.\n   * The root itself cannot be invalidated, as it has no parents.\n   * If a node is already invalidated, it will stop the recursion.\n   */\n  invalidate() {\n    let node = this;\n    let parent = this.parent;\n    while (parent !== null && node.invalidatedNext === void 0) {\n      node.invalidatedNext = parent.invalidatedHead;\n      parent.invalidatedHead = node;\n      node = parent;\n      parent = node.parent;\n    }\n  }\n  /** Marks childrenChanged in the parent, so the childrenAfterGroup will be recomputed and invalidates the parent. */\n  invalidateOrder() {\n    const parent = this.parent;\n    if (parent !== null && !parent.childrenChanged && ((this.children?.size ?? 0) > 1 || !parent.row?.data)) {\n      parent.childrenChanged = true;\n      parent.invalidate();\n    }\n  }\n  /**\n   * When we receive rowNodeOrder not undefined, we need to update the rowPosition of the node,\n   * to ensure it will be sorted in the right order in childrenAfterGroup.\n   * This function makes sense to be called only in the post-order commit DFS\n   * as it assumes children's childrenAfterGroup is already updated.\n   * @returns the rowPosition the node should have.\n   */\n  getRowPosition() {\n    const row = this.row;\n    if (row?.data) {\n      return row.sourceRowIndex;\n    }\n    return this.childrenAfterGroup[0]?.treeNode?.oldSourceRowIndex ?? this.oldSourceRowIndex;\n  }\n  /**\n   * This is called in post order during commit to update the childrenAfterGroup array.\n   * It uses the rowNodeOrder map to sort the children in the right order, if is passed.\n   * It assumes all children childrenAfterGroup are up to date and rows all created.\n   *\n   * It replaces the array with EMPTY_ARRAY if there are no children, to reduce memory usage and GC pressure.\n   * It does sort the children only if strictly needed, to avoid unnecessary work.\n   *\n   * If the order changes, also the order in the children map will be updated,\n   * so the next call to enumChildren() will return the children in the right order.\n   */\n  updateChildrenAfterGroup() {\n    this.childrenChanged = false;\n    const childrenCount = this.children?.size ?? 0;\n    if (childrenCount === 0) {\n      if (this.childrenAfterGroup.length === 0) {\n        return false;\n      }\n      this.leafChildrenChanged = true;\n      this.childrenAfterGroup = EMPTY_ARRAY;\n      this.row.childrenAfterGroup = EMPTY_ARRAY;\n      return true;\n    }\n    let nodesChanged = false;\n    let childrenAfterGroup = this.childrenAfterGroup;\n    if (childrenAfterGroup === EMPTY_ARRAY) {\n      childrenAfterGroup = new Array(childrenCount);\n      this.childrenAfterGroup = childrenAfterGroup;\n      this.row.childrenAfterGroup = childrenAfterGroup;\n      nodesChanged = true;\n    } else if (childrenAfterGroup.length !== childrenCount) {\n      childrenAfterGroup.length = childrenCount;\n      nodesChanged = true;\n    }\n    let index = 0;\n    let prevPosition = -1;\n    let needSort = false;\n    for (const child of this.enumChildren()) {\n      const nextPosition = child.getRowPosition();\n      if (nextPosition < prevPosition) {\n        needSort = true;\n      }\n      prevPosition = nextPosition;\n      child.oldSourceRowIndex = nextPosition;\n      const row = child.row;\n      if (childrenAfterGroup[index] !== row) {\n        childrenAfterGroup[index] = row;\n        nodesChanged = true;\n      }\n      ++index;\n    }\n    if (nodesChanged) {\n      this.leafChildrenChanged = true;\n    }\n    if (needSort) {\n      this.reorderChildrenList(childrenAfterGroup);\n    }\n    return nodesChanged || needSort;\n  }\n  /** This reorders the given array and rebuild the children map. */\n  reorderChildrenList(childrenAfterGroup) {\n    const childrenCount = childrenAfterGroup.length;\n    const children = this.children;\n    childrenAfterGroup.sort(treeNodePositionComparer);\n    children.clear();\n    for (let i = 0; i < childrenCount; ++i) {\n      const node = childrenAfterGroup[i].treeNode;\n      children.set(node.key, node);\n    }\n  }\n  /**\n   * Rebuild the allLeafChildren rows array of a node. It uses childrenAfterGroup, we assume to be already updated.\n   * This is called in post order during commit, after the childrenAfterGroup are updated with updateChildrenAfterGroup().\n   * It uses the childrenAfterGroup and allLeafChildren of all the children, we assume they are updated.\n   */\n  updateAllLeafChildren() {\n    const { parent, row, childrenAfterGroup } = this;\n    this.leafChildrenChanged = false;\n    let nodesChanged = false;\n    const childrenAfterGroupLen = childrenAfterGroup.length;\n    if (childrenAfterGroupLen === 0) {\n      nodesChanged = row.allLeafChildren?.length !== 0;\n      row.allLeafChildren = EMPTY_ARRAY;\n      this.allLeafChildren = EMPTY_ARRAY;\n    } else if (childrenAfterGroupLen === 1 && childrenAfterGroup[0].allLeafChildren?.length) {\n      row.allLeafChildren = childrenAfterGroup[0].allLeafChildren;\n      this.allLeafChildren = null;\n      nodesChanged = true;\n    } else {\n      let allLeafChildren = this.allLeafChildren;\n      if (allLeafChildren === EMPTY_ARRAY || allLeafChildren === null) {\n        allLeafChildren = [];\n        this.allLeafChildren = allLeafChildren;\n      }\n      const oldAllLeafChildrenLength = allLeafChildren.length;\n      let writeIdx = 0;\n      for (let i = 0; i < childrenAfterGroupLen; ++i) {\n        const childRow = childrenAfterGroup[i];\n        const childAllLeafChildren = childRow.allLeafChildren;\n        const childAllLeafChildrenLen = childAllLeafChildren.length;\n        if (childAllLeafChildrenLen) {\n          for (let j = 0; j < childAllLeafChildrenLen; ++j) {\n            const leaf = childAllLeafChildren[j];\n            if (writeIdx >= oldAllLeafChildrenLength || allLeafChildren[writeIdx] !== leaf) {\n              allLeafChildren[writeIdx] = leaf;\n              nodesChanged = true;\n            }\n            ++writeIdx;\n          }\n        } else {\n          if ((writeIdx >= oldAllLeafChildrenLength || allLeafChildren[writeIdx] !== childRow) && childRow) {\n            allLeafChildren[writeIdx] = childRow;\n            nodesChanged = true;\n          }\n          ++writeIdx;\n        }\n      }\n      if (oldAllLeafChildrenLength !== writeIdx) {\n        allLeafChildren.length = writeIdx;\n        nodesChanged = true;\n      }\n      if (row.allLeafChildren !== allLeafChildren) {\n        row.allLeafChildren = allLeafChildren;\n        nodesChanged = true;\n      }\n    }\n    if (nodesChanged && parent) {\n      parent.leafChildrenChanged = true;\n    }\n  }\n};\nvar isTreeRowCommitted = (row) => (row.treeNodeFlags & 1) !== 0;\nvar isTreeRowExpandedInitialized = (row) => (row.treeNodeFlags & 2) !== 0;\nvar isTreeRowUpdated = (row) => (row.treeNodeFlags & 4) !== 0;\nvar isTreeRowKeyChanged = (row) => (row.treeNodeFlags & 8) !== 0;\nvar isTreeRowPathChanged = (row) => (row.treeNodeFlags & 16) !== 0;\nvar setTreeRowExpandedInitialized = (row, value) => {\n  if (value) {\n    row.treeNodeFlags |= 2;\n  } else {\n    row.treeNodeFlags &= ~2;\n  }\n};\nvar setTreeRowUpdated = (row) => {\n  const flags = row.treeNodeFlags;\n  if ((flags & 1) !== 0) {\n    row.treeNodeFlags = flags | 4;\n  }\n};\nvar setTreeRowKeyChanged = (row) => {\n  const flags = row.treeNodeFlags;\n  if ((flags & 1) !== 0) {\n    row.treeNodeFlags = flags | (8 | 4);\n  }\n};\nvar markTreeRowPathChanged = (row) => {\n  row.treeNodeFlags |= 16;\n};\nvar markTreeRowCommitted = (row) => {\n  row.treeNodeFlags = 1 | row.treeNodeFlags & ~(4 | 8 | 16);\n};\nvar clearTreeRowFlags = (row) => {\n  row.treeNodeFlags = 0;\n};\nvar TreeStrategy = class extends BeanStub73 {\n  constructor() {\n    super(...arguments);\n    this.rowsPendingDestruction = null;\n    this.root = new TreeNode(null, \"\", -1);\n  }\n  wireBeans(beans) {\n    this.beans = beans;\n    this.showRowGroupColsService = beans.showRowGroupColsService;\n  }\n  destroy() {\n    const rootRow = this.root.row;\n    if (rootRow !== null) {\n      this.root.removeRow(rootRow);\n      clearTreeRowFlags(rootRow);\n    }\n    this.destroyTree(this.root);\n    this.commitDestroyedRows();\n    super.destroy();\n  }\n  execute(params) {\n    const { rowNodeTransactions, rowNodesOrderChanged, changedPath } = params;\n    const rootRow = params.rowNode;\n    const gos = this.gos;\n    const details = {\n      changedPath,\n      expandByDefault: gos.get(\"groupDefaultExpanded\"),\n      suppressGroupMaintainValueType: gos.get(\"suppressGroupMaintainValueType\"),\n      getDataPath: gos.get(\"getDataPath\"),\n      isGroupOpenByDefault: gos.getCallback(\"isGroupOpenByDefault\"),\n      initialGroupOrderComparator: gos.getCallback(\"initialGroupOrderComparator\")\n    };\n    const rootNode = this.root;\n    rootNode.setRow(rootRow);\n    rootRow.leafGroup = false;\n    const sibling = rootRow.sibling;\n    if (sibling) {\n      sibling.childrenAfterGroup = rootRow.childrenAfterGroup;\n      sibling.childrenMapped = rootRow.childrenMapped;\n    }\n    if (rowNodeTransactions) {\n      this.handleTransaction(details, rowNodeTransactions, rowNodesOrderChanged);\n    } else {\n      this.handleRowData(details, rootRow, params.afterColumnsChanged === true);\n    }\n  }\n  handleRowData(details, rootRow, afterColumnsChanged) {\n    const root = this.root;\n    if (afterColumnsChanged || this.oldGroupDisplayColIds === void 0) {\n      const newGroupDisplayColIds = this.showRowGroupColsService?.getShowRowGroupCols()?.map((c) => c.getId()).join(\"-\") ?? \"\";\n      if (afterColumnsChanged) {\n        if (this.oldGroupDisplayColIds !== newGroupDisplayColIds) {\n          this.checkAllGroupDataAfterColsChanged(root.row?.childrenAfterGroup);\n        }\n        return;\n      }\n      this.oldGroupDisplayColIds = newGroupDisplayColIds;\n    }\n    this.clearTree(root);\n    this.addOrUpdateRows(details, rootRow.allLeafChildren, false);\n    this.commitTree(details);\n  }\n  handleTransaction(details, transactions, rowNodesOrderChanged) {\n    for (const { remove, update, add } of transactions) {\n      this.removeRows(remove);\n      this.addOrUpdateRows(details, update, true);\n      this.addOrUpdateRows(details, add, false);\n    }\n    if (rowNodesOrderChanged) {\n      this.handleRowNodesOrderChanged();\n    }\n    this.commitTree(details);\n  }\n  handleRowNodesOrderChanged() {\n    const rows = this.root.row?.allLeafChildren;\n    if (rows) {\n      for (let rowIdx = 0, rowsLen = rows.length; rowIdx < rowsLen; ++rowIdx) {\n        const node = rows[rowIdx].treeNode;\n        if (node && node.oldSourceRowIndex !== rowIdx) {\n          node.invalidateOrder();\n        }\n      }\n    }\n  }\n  checkAllGroupDataAfterColsChanged(rowNodes) {\n    for (let i = 0, len = rowNodes?.length ?? 0; i < len; ++i) {\n      const rowNode = rowNodes[i];\n      this.setGroupData(rowNode, rowNode.treeNode?.key ?? rowNode.key);\n      this.checkAllGroupDataAfterColsChanged(rowNode.childrenAfterGroup);\n    }\n  }\n  /** Transactional add/update */\n  addOrUpdateRows(details, rows, update) {\n    for (let i = 0, len = rows?.length ?? 0; i < len; ++i) {\n      const row = rows[i];\n      const node = this.upsertPath(this.getDataPath(details, row));\n      if (node) {\n        this.addOrUpdateRow(node, row, update);\n      }\n    }\n  }\n  /** Transactional removal */\n  removeRows(rows) {\n    for (let i = 0, len = rows?.length ?? 0; i < len; ++i) {\n      const row = rows[i];\n      const node = row.treeNode;\n      if (node !== null) {\n        this.removeRow(node, row);\n      }\n    }\n  }\n  getDataPath({ getDataPath }, { data }) {\n    const keys = getDataPath?.(data) || EMPTY_ARRAY;\n    if (!keys.length) {\n      _warnOnce43(`getDataPath() should not return an empty path`, [data]);\n    }\n    return keys;\n  }\n  /**\n   * Gets the last node of a path. Inserts filler nodes where needed.\n   * Note that invalidate() is not called, is up to the caller to call it if needed.\n   */\n  upsertPath(path) {\n    let parent = this.root;\n    const stop = path.length - 1;\n    for (let level = 0; level <= stop; ++level) {\n      const node = parent.upsertKey(path[level]);\n      if (level >= stop) {\n        node.invalidate();\n        return node;\n      }\n      parent = node;\n    }\n    return null;\n  }\n  /** Add or updates the row to a non-root node, preparing the tree correctly for the commit. */\n  addOrUpdateRow(node, newRow, update) {\n    const { level, row: oldRow } = node;\n    if (level < 0) {\n      return;\n    }\n    let invalidate = false;\n    if (oldRow !== newRow) {\n      const prevNode = newRow.treeNode;\n      if (prevNode !== null && prevNode !== node) {\n        prevNode.removeRow(newRow);\n        prevNode.invalidate();\n      }\n      if (oldRow === null) {\n        node.setRow(newRow);\n        invalidate = true;\n      } else if (!oldRow.data) {\n        node.setRow(newRow);\n        this.destroyRow(oldRow, true);\n        invalidate = true;\n      } else {\n        if (node.addDuplicateRow(newRow)) {\n          invalidate = true;\n        }\n      }\n    }\n    if (update && !isTreeRowUpdated(newRow)) {\n      setTreeRowUpdated(newRow);\n      invalidate = true;\n    }\n    if (invalidate) {\n      node.invalidate();\n    }\n    this.rowsPendingDestruction?.delete(newRow);\n  }\n  /**\n   * Overwrites the row property of a non-root node to null.\n   * @returns The previous row, if any, that was overwritten.\n   */\n  removeRow(node, oldRow) {\n    const { parent, level } = node;\n    if (level < 0) {\n      return;\n    }\n    let invalidate = false;\n    if (node.removeRow(oldRow)) {\n      invalidate = true;\n      if (parent) {\n        parent.childrenChanged = true;\n      }\n      this.destroyRow(oldRow, !oldRow.data);\n    }\n    if (invalidate) {\n      node.invalidate();\n    }\n  }\n  /** Commit the changes performed to the tree */\n  commitTree(details) {\n    const root = this.root;\n    this.commitInvalidatedChildren(details, root);\n    const rootRow = root.row;\n    if (root.childrenChanged) {\n      if (root.updateChildrenAfterGroup()) {\n        markTreeRowPathChanged(rootRow);\n      }\n    }\n    rootRow.updateHasChildren();\n    if (isTreeRowPathChanged(rootRow)) {\n      if (details.changedPath?.isActive()) {\n        details.changedPath.addParentNode(rootRow);\n      }\n    }\n    markTreeRowCommitted(rootRow);\n    this.commitDestroyedRows();\n  }\n  /** Calls commitChild for each invalidated child, recursively. We commit only the invalidated paths. */\n  commitInvalidatedChildren(details, parent) {\n    while (true) {\n      const child = parent.dequeueInvalidated();\n      if (child === null) {\n        break;\n      }\n      if (child.parent === parent) {\n        this.commitChild(details, parent, child);\n      }\n    }\n  }\n  /** Commit the changes performed to a node and its children */\n  commitChild(details, parent, node) {\n    if (node.isEmptyFillerNode()) {\n      this.clearTree(node);\n      return;\n    }\n    this.commitNodePreOrder(parent, node);\n    this.commitInvalidatedChildren(details, node);\n    this.commitNodePostOrder(details, parent, node);\n  }\n  commitNodePreOrder(parent, node) {\n    let row = node.row;\n    if (row === null) {\n      row = this.createFillerRow(node);\n      node.setRow(row);\n    } else {\n      row = node.sortFirstDuplicateRow();\n      if (row.allChildrenCount === void 0) {\n        row.allChildrenCount = null;\n      }\n    }\n    row.parent = parent.row;\n    if (node.oldRow !== row) {\n      for (const child of node.enumChildren()) {\n        const childRow = child.row;\n        if (childRow !== null) {\n          childRow.parent = row;\n        }\n      }\n    }\n    const key = node.key;\n    if (row.key !== key) {\n      row.key = key;\n      setTreeRowKeyChanged(row);\n      this.setGroupData(row, key);\n    } else if (!row.groupData) {\n      this.setGroupData(row, key);\n    }\n  }\n  commitNodePostOrder(details, parent, node) {\n    const row = node.row;\n    const oldRow = node.oldRow;\n    if (node.isEmptyFillerNode()) {\n      this.clearTree(node);\n      return;\n    }\n    if (node.childrenChanged) {\n      if (node.updateChildrenAfterGroup()) {\n        markTreeRowPathChanged(row);\n      }\n    }\n    if (node.leafChildrenChanged) {\n      node.updateAllLeafChildren();\n    }\n    const newRowPosition = node.getRowPosition();\n    if (node.oldSourceRowIndex !== newRowPosition) {\n      node.oldSourceRowIndex = newRowPosition;\n      parent.childrenChanged = true;\n    }\n    const hasChildren = !!row.childrenAfterGroup?.length;\n    const group = hasChildren || !row.data;\n    const oldGroup = row.group;\n    if (oldGroup !== group) {\n      markTreeRowPathChanged(row);\n      row.setGroup(group);\n      if (!group && !row.expanded) {\n        setTreeRowExpandedInitialized(row, false);\n      }\n    } else if (row.hasChildren() !== hasChildren) {\n      markTreeRowPathChanged(row);\n      row.updateHasChildren();\n    }\n    if (row.group && !isTreeRowExpandedInitialized(row)) {\n      if (oldRow !== row && oldRow !== null && oldRow.group && isTreeRowExpandedInitialized(oldRow) && !details.isGroupOpenByDefault) {\n        row.expanded = oldRow.expanded;\n      } else {\n        row.expanded = this.getExpandedInitialValue(details, row);\n      }\n      setTreeRowExpandedInitialized(row, true);\n    }\n    if (isTreeRowUpdated(row)) {\n      markTreeRowPathChanged(parent.row);\n      if (isTreeRowKeyChanged(row)) {\n        row.setData(row.data);\n      }\n    }\n    if (oldRow !== row) {\n      node.oldRow = row;\n      if (oldRow !== null && (oldGroup || node.hasChildren())) {\n        markTreeRowPathChanged(row);\n      }\n      parent.childrenChanged = true;\n      markTreeRowPathChanged(parent.row);\n    }\n    if (isTreeRowPathChanged(row)) {\n      if (details.changedPath?.isActive()) {\n        details.changedPath.addParentNode(row);\n      }\n    } else if (!isTreeRowCommitted(row)) {\n      if (!row.childrenAfterFilter) {\n        row.childrenAfterFilter = row.childrenAfterGroup.slice();\n      }\n      if (!row.childrenAfterAggFilter) {\n        row.childrenAfterAggFilter = row.childrenAfterFilter.slice();\n      }\n      if (!row.childrenAfterSort) {\n        row.childrenAfterSort = row.childrenAfterAggFilter.slice();\n      }\n    }\n    markTreeRowCommitted(row);\n    if (node.duplicateRows?.size && !node.duplicateRowsWarned) {\n      node.duplicateRowsWarned = true;\n      _warnOnce43(`duplicate group keys for row data, keys should be unique`, [\n        row.id,\n        row.data,\n        ...Array.from(node.duplicateRows).map((r) => r.data)\n      ]);\n    }\n  }\n  createFillerRow(node) {\n    const row = new RowNode2(this.beans);\n    row.key = node.key;\n    row.group = true;\n    row.field = null;\n    row.leafGroup = false;\n    row.rowGroupIndex = null;\n    row.allChildrenCount = null;\n    let id = node.level + \"-\" + node.key;\n    let p = node.parent;\n    while (p !== null) {\n      const parent = p.parent;\n      if (parent === null) {\n        break;\n      }\n      id = `${p.level}-${p.key}-${id}`;\n      p = parent;\n    }\n    row.id = RowNode2.ID_PREFIX_ROW_GROUP + id;\n    return row;\n  }\n  setGroupData(row, key) {\n    const groupData = {};\n    row.groupData = groupData;\n    const groupDisplayCols = this.showRowGroupColsService?.getShowRowGroupCols();\n    if (groupDisplayCols) {\n      for (const col of groupDisplayCols) {\n        groupData[col.getColId()] = key;\n      }\n    }\n  }\n  getExpandedInitialValue(details, row) {\n    const userCallback = details.isGroupOpenByDefault;\n    return userCallback ? userCallback({\n      rowNode: row,\n      field: row.field,\n      key: row.key,\n      level: row.level,\n      rowGroupColumn: row.rowGroupColumn\n    }) == true : details.expandByDefault === -1 || row.level < details.expandByDefault;\n  }\n  /** Called to clear a subtree. */\n  clearTree(node) {\n    const { parent, oldRow, row, level } = node;\n    if (parent !== null && oldRow !== null) {\n      parent.childrenChanged = true;\n      if (parent.row !== null) {\n        markTreeRowPathChanged(parent.row);\n      }\n    }\n    if (row !== null) {\n      if (level >= 0) {\n        let row2 = node.row;\n        while (row2 !== null && node.removeRow(row2)) {\n          this.destroyRow(row2, !row2.data);\n          row2 = node.row;\n        }\n      }\n    }\n    for (const child of node.enumChildren()) {\n      this.clearTree(child);\n    }\n    node.destroy();\n  }\n  /** Called by the destructor, to the destroy the whole tree. */\n  destroyTree(node) {\n    const { row, level, duplicateRows } = node;\n    if (row) {\n      if (level >= 0 && !row.data) {\n        this.destroyRow(row, true);\n      } else {\n        clearTreeRowFlags(row);\n      }\n    }\n    if (duplicateRows) {\n      for (const row2 of duplicateRows) {\n        if (level >= 0 && !row2.data) {\n          this.destroyRow(row2, true);\n        } else {\n          clearTreeRowFlags(row2);\n        }\n      }\n    }\n    for (const child of node.enumChildren()) {\n      this.destroyTree(child);\n    }\n    node.destroy();\n  }\n  /**\n   * Finalizes the deletion of a row.\n   * @param immediate If true, the row is deleted immediately.\n   * If false, the row is marked for deletion, and will be deleted later with this.deleteDeletedRows()\n   */\n  destroyRow(row, immediate) {\n    if (!isTreeRowCommitted(row)) {\n      clearTreeRowFlags(row);\n      return;\n    }\n    if (!immediate) {\n      (this.rowsPendingDestruction ?? (this.rowsPendingDestruction = /* @__PURE__ */ new Set())).add(row);\n      return;\n    }\n    clearTreeRowFlags(row);\n    row.setRowIndex(null);\n    row.setRowTop(null);\n    if (!row.data && row.isSelected()) {\n      row.setSelectedParams({ newValue: false, source: \"rowGroupChanged\" });\n    }\n  }\n  /**\n   * destroyRow can defer the deletion to the end of the commit stage.\n   * This method finalizes the deletion of rows that were marked for deletion.\n   */\n  commitDestroyedRows() {\n    const { rowsPendingDestruction: rowsPendingDeletion } = this;\n    if (rowsPendingDeletion !== null) {\n      this.rowsPendingDestruction = null;\n      for (const row of rowsPendingDeletion) {\n        this.destroyRow(row, true);\n      }\n    }\n  }\n};\nvar GroupStage = class extends BeanStub82 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"groupStage\";\n  }\n  wireBeans(beans) {\n    this.selectableService = beans.selectableService;\n  }\n  execute(params) {\n    const Strategy = this.gos.get(\"treeData\") ? TreeStrategy : GroupStrategy;\n    let strategy = this.strategy;\n    if (strategy?.constructor !== Strategy) {\n      this.destroyBean(strategy);\n      strategy = this.createManagedBean(new Strategy());\n      this.strategy = strategy;\n    }\n    strategy.execute(params);\n    this.selectableService.updateSelectableAfterGrouping();\n  }\n  destroy() {\n    this.destroyBean(this.strategy);\n    this.strategy = void 0;\n    super.destroy();\n  }\n};\nvar PIVOT_ROW_TOTAL_PREFIX = \"PivotRowTotal_\";\nvar PivotColDefService = class extends BeanStub92 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"pivotColDefService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n    this.columnNameService = beans.columnNameService;\n  }\n  postConstruct() {\n    const getFieldSeparator = () => this.gos.get(\"serverSidePivotResultFieldSeparator\") ?? \"_\";\n    this.fieldSeparator = getFieldSeparator();\n    this.addManagedPropertyListener(\"serverSidePivotResultFieldSeparator\", () => {\n      this.fieldSeparator = getFieldSeparator();\n    });\n    const getPivotDefaultExpanded = () => this.gos.get(\"pivotDefaultExpanded\");\n    this.pivotDefaultExpanded = getPivotDefaultExpanded();\n    this.addManagedPropertyListener(\"pivotDefaultExpanded\", () => {\n      this.pivotDefaultExpanded = getPivotDefaultExpanded();\n    });\n  }\n  createPivotColumnDefs(uniqueValues) {\n    const pivotColumnGroupDefs = this.createPivotColumnsFromUniqueValues(uniqueValues);\n    function extractColDefs(input, arr = []) {\n      input.forEach((def) => {\n        if (def.children !== void 0) {\n          extractColDefs(def.children, arr);\n        } else {\n          arr.push(def);\n        }\n      });\n      return arr;\n    }\n    const pivotColumnDefs = extractColDefs(pivotColumnGroupDefs);\n    this.addRowGroupTotals(pivotColumnGroupDefs, pivotColumnDefs);\n    this.addExpandablePivotGroups(pivotColumnGroupDefs, pivotColumnDefs);\n    this.addPivotTotalsToGroups(pivotColumnGroupDefs, pivotColumnDefs);\n    const pivotColumnDefsClone = pivotColumnDefs.map((colDef) => _cloneObject2(colDef));\n    return {\n      pivotColumnGroupDefs,\n      pivotColumnDefs: pivotColumnDefsClone\n    };\n  }\n  createPivotColumnsFromUniqueValues(uniqueValues) {\n    const pivotColumns = this.funcColsService.getPivotColumns();\n    const maxDepth = pivotColumns.length;\n    const pivotColumnGroupDefs = this.recursivelyBuildGroup(\n      0,\n      uniqueValues,\n      [],\n      maxDepth,\n      pivotColumns\n    );\n    return pivotColumnGroupDefs;\n  }\n  recursivelyBuildGroup(index, uniqueValue, pivotKeys, maxDepth, primaryPivotColumns) {\n    const measureColumns = this.funcColsService.getValueColumns();\n    if (index >= maxDepth) {\n      return this.buildMeasureCols(pivotKeys);\n    }\n    const primaryPivotColumnDefs = primaryPivotColumns[index].getColDef();\n    const comparator = this.headerNameComparator.bind(this, primaryPivotColumnDefs.pivotComparator);\n    if (measureColumns.length === 1 && this.gos.get(\"removePivotHeaderRowWhenSingleValueColumn\") && index === maxDepth - 1) {\n      const leafCols = [];\n      _iterateObject2(uniqueValue, (key) => {\n        const newPivotKeys = [...pivotKeys, key];\n        const colDef = this.createColDef(measureColumns[0], key, newPivotKeys);\n        colDef.columnGroupShow = \"open\";\n        leafCols.push(colDef);\n      });\n      leafCols.sort(comparator);\n      return leafCols;\n    }\n    const groups = [];\n    _iterateObject2(uniqueValue, (key, value) => {\n      const openByDefault = this.pivotDefaultExpanded === -1 || index < this.pivotDefaultExpanded;\n      const newPivotKeys = [...pivotKeys, key];\n      groups.push({\n        children: this.recursivelyBuildGroup(index + 1, value, newPivotKeys, maxDepth, primaryPivotColumns),\n        headerName: key,\n        pivotKeys: newPivotKeys,\n        columnGroupShow: \"open\",\n        openByDefault,\n        groupId: this.generateColumnGroupId(newPivotKeys)\n      });\n    });\n    groups.sort(comparator);\n    return groups;\n  }\n  buildMeasureCols(pivotKeys) {\n    const measureColumns = this.funcColsService.getValueColumns();\n    if (measureColumns.length === 0) {\n      return [this.createColDef(null, \"-\", pivotKeys)];\n    }\n    return measureColumns.map((measureCol) => {\n      const columnName = this.columnNameService.getDisplayNameForColumn(measureCol, \"header\");\n      return {\n        ...this.createColDef(measureCol, columnName, pivotKeys),\n        columnGroupShow: \"open\"\n      };\n    });\n  }\n  addExpandablePivotGroups(pivotColumnGroupDefs, pivotColumnDefs) {\n    const isSuppressExpand = this.gos.get(\"suppressExpandablePivotGroups\");\n    if (isSuppressExpand || this.gos.get(\"pivotColumnGroupTotals\")) {\n      return;\n    }\n    const recursivelyAddSubTotals = (def, currentPivotColumnDefs, acc) => {\n      if (\"children\" in def) {\n        const childAcc = /* @__PURE__ */ new Map();\n        def.children.forEach((grp) => {\n          recursivelyAddSubTotals(grp, currentPivotColumnDefs, childAcc);\n        });\n        const valueCols = this.funcColsService.getValueColumns();\n        const leafGroup = !def.children.some((child) => child.children);\n        const hasCollapsedLeafGroup = leafGroup && valueCols.length === 1 && this.gos.get(\"removePivotHeaderRowWhenSingleValueColumn\");\n        valueCols.forEach((valueColumn) => {\n          const columnName = this.columnNameService.getDisplayNameForColumn(\n            valueColumn,\n            \"header\"\n          );\n          const totalColDef = this.createColDef(valueColumn, columnName, def.pivotKeys);\n          totalColDef.pivotTotalColumnIds = childAcc.get(valueColumn.getColId());\n          totalColDef.columnGroupShow = !isSuppressExpand ? \"closed\" : \"open\";\n          totalColDef.aggFunc = valueColumn.getAggFunc();\n          if (!leafGroup || hasCollapsedLeafGroup) {\n            const children = def.children;\n            children.push(totalColDef);\n            currentPivotColumnDefs.push(totalColDef);\n          }\n        });\n        this.merge(acc, childAcc);\n        return;\n      }\n      if (!def.pivotValueColumn) {\n        return;\n      }\n      const pivotValueColId = def.pivotValueColumn.getColId();\n      const exists = acc.has(pivotValueColId);\n      if (exists) {\n        const arr = acc.get(pivotValueColId);\n        arr.push(def.colId);\n      } else {\n        acc.set(pivotValueColId, [def.colId]);\n      }\n    };\n    pivotColumnGroupDefs.forEach((groupDef) => {\n      recursivelyAddSubTotals(groupDef, pivotColumnDefs, /* @__PURE__ */ new Map());\n    });\n  }\n  addPivotTotalsToGroups(pivotColumnGroupDefs, pivotColumnDefs) {\n    if (!this.gos.get(\"pivotColumnGroupTotals\")) {\n      return;\n    }\n    const insertAfter = this.gos.get(\"pivotColumnGroupTotals\") === \"after\";\n    const valueCols = this.funcColsService.getValueColumns();\n    const aggFuncs = valueCols.map((valueCol) => valueCol.getAggFunc());\n    if (!aggFuncs || aggFuncs.length < 1 || !this.sameAggFuncs(aggFuncs)) {\n      return;\n    }\n    const valueColumn = valueCols[0];\n    pivotColumnGroupDefs.forEach((groupDef) => {\n      this.recursivelyAddPivotTotal(groupDef, pivotColumnDefs, valueColumn, insertAfter);\n    });\n  }\n  recursivelyAddPivotTotal(groupDef, pivotColumnDefs, valueColumn, insertAfter) {\n    const group = groupDef;\n    if (!group.children) {\n      const def = groupDef;\n      return def.colId ? [def.colId] : null;\n    }\n    let colIds = [];\n    group.children.forEach((grp) => {\n      const childColIds = this.recursivelyAddPivotTotal(grp, pivotColumnDefs, valueColumn, insertAfter);\n      if (childColIds) {\n        colIds = colIds.concat(childColIds);\n      }\n    });\n    if (group.children.length > 1) {\n      const localeTextFunc = this.localeService.getLocaleTextFunc();\n      const headerName = localeTextFunc(\"pivotColumnGroupTotals\", \"Total\");\n      const totalColDef = this.createColDef(valueColumn, headerName, groupDef.pivotKeys, true);\n      totalColDef.pivotTotalColumnIds = colIds;\n      totalColDef.aggFunc = valueColumn.getAggFunc();\n      totalColDef.columnGroupShow = this.gos.get(\"suppressExpandablePivotGroups\") ? \"open\" : void 0;\n      const children = groupDef.children;\n      insertAfter ? children.push(totalColDef) : children.unshift(totalColDef);\n      pivotColumnDefs.push(totalColDef);\n    }\n    return colIds;\n  }\n  addRowGroupTotals(pivotColumnGroupDefs, pivotColumnDefs) {\n    if (!this.gos.get(\"pivotRowTotals\")) {\n      return;\n    }\n    const insertAtEnd = this.gos.get(\"pivotRowTotals\") === \"after\";\n    const valueColumns = this.funcColsService.getValueColumns();\n    const valueCols = valueColumns.slice();\n    if (!insertAtEnd) {\n      valueCols.reverse();\n    }\n    const isCreateTotalGroups = valueCols.length > 1 || !this.gos.get(\"removePivotHeaderRowWhenSingleValueColumn\");\n    for (let i = 0; i < valueCols.length; i++) {\n      const valueCol = valueCols[i];\n      const columnName = this.columnNameService.getDisplayNameForColumn(valueCol, \"header\");\n      const colDef = this.createColDef(valueCol, columnName, []);\n      const colIds = [];\n      for (let i2 = 0; i2 < pivotColumnDefs.length; i2++) {\n        const colDef2 = pivotColumnDefs[i2];\n        if (colDef2.pivotValueColumn === valueCol) {\n          colIds.push(colDef2.colId);\n        }\n      }\n      colDef.pivotTotalColumnIds = colIds;\n      colDef.colId = PIVOT_ROW_TOTAL_PREFIX + colDef.colId;\n      const valueGroup = isCreateTotalGroups ? {\n        children: [colDef],\n        pivotKeys: [],\n        groupId: `${PIVOT_ROW_TOTAL_PREFIX}_pivotGroup_${valueCol.getColId()}`\n      } : colDef;\n      pivotColumnDefs.push(colDef);\n      insertAtEnd ? pivotColumnGroupDefs.push(valueGroup) : pivotColumnGroupDefs.unshift(valueGroup);\n    }\n  }\n  createColDef(valueColumn, headerName, pivotKeys, totalColumn = false) {\n    const colDef = {};\n    if (valueColumn) {\n      const colDefToCopy = valueColumn.getColDef();\n      Object.assign(colDef, colDefToCopy);\n      colDef.hide = false;\n    }\n    colDef.headerName = headerName;\n    colDef.colId = this.generateColumnId(\n      pivotKeys || [],\n      valueColumn && !totalColumn ? valueColumn.getColId() : \"\"\n    );\n    colDef.field = colDef.colId;\n    colDef.valueGetter = (params) => params.data?.[params.colDef.field];\n    colDef.pivotKeys = pivotKeys;\n    colDef.pivotValueColumn = valueColumn;\n    if (colDef.filter === true) {\n      colDef.filter = \"agNumberColumnFilter\";\n    }\n    return colDef;\n  }\n  sameAggFuncs(aggFuncs) {\n    if (aggFuncs.length == 1) {\n      return true;\n    }\n    for (let i = 1; i < aggFuncs.length; i++) {\n      if (aggFuncs[i] !== aggFuncs[0]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  headerNameComparator(userComparator, a, b) {\n    if (userComparator) {\n      return userComparator(a.headerName, b.headerName);\n    } else {\n      if (a.headerName && !b.headerName) {\n        return 1;\n      } else if (!a.headerName && b.headerName) {\n        return -1;\n      }\n      if (!a.headerName || !b.headerName) {\n        return 0;\n      }\n      if (a.headerName < b.headerName) {\n        return -1;\n      }\n      if (a.headerName > b.headerName) {\n        return 1;\n      }\n      return 0;\n    }\n  }\n  merge(m1, m2) {\n    m2.forEach((value, key) => {\n      const existingList = m1.has(key) ? m1.get(key) : [];\n      const updatedList = [...existingList, ...value];\n      m1.set(key, updatedList);\n    });\n  }\n  generateColumnGroupId(pivotKeys) {\n    const pivotCols = this.funcColsService.getPivotColumns().map((col) => col.getColId());\n    return `pivotGroup_${pivotCols.join(\"-\")}_${pivotKeys.join(\"-\")}`;\n  }\n  generateColumnId(pivotKeys, measureColumnId) {\n    const pivotCols = this.funcColsService.getPivotColumns().map((col) => col.getColId());\n    return `pivot_${pivotCols.join(\"-\")}_${pivotKeys.join(\"-\")}_${measureColumnId}`;\n  }\n  /**\n   * Used by the SSRM to create secondary columns from provided fields\n   * @param fields\n   */\n  createColDefsFromFields(fields) {\n    const uniqueValues = {};\n    for (let i = 0; i < fields.length; i++) {\n      const field = fields[i];\n      const parts = field.split(this.fieldSeparator);\n      let level = uniqueValues;\n      for (let p = 0; p < parts.length; p++) {\n        const part = parts[p];\n        if (level[part] == null) {\n          level[part] = {};\n        }\n        level = level[part];\n      }\n    }\n    const uniqueValuesToGroups = (id, key, uniqueValues2, depth) => {\n      const children = [];\n      for (const key2 in uniqueValues2) {\n        const item = uniqueValues2[key2];\n        const child = uniqueValuesToGroups(`${id}${this.fieldSeparator}${key2}`, key2, item, depth + 1);\n        children.push(child);\n      }\n      if (children.length === 0) {\n        const potentialAggCol = this.columnModel.getColDefCol(key);\n        if (potentialAggCol) {\n          const headerName = this.columnNameService.getDisplayNameForColumn(potentialAggCol, \"header\") ?? key;\n          const colDef = this.createColDef(potentialAggCol, headerName, void 0, false);\n          colDef.colId = id;\n          colDef.aggFunc = potentialAggCol.getAggFunc();\n          colDef.valueGetter = (params) => params.data?.[id];\n          return colDef;\n        }\n        const col = {\n          colId: id,\n          headerName: key,\n          // this is to support using pinned rows, normally the data will be extracted from the aggData object using the colId\n          // however pinned rows still access the data object by field, this prevents values with dots from being treated as complex objects\n          valueGetter: (params) => params.data?.[id]\n        };\n        return col;\n      }\n      const collapseSingleChildren = this.gos.get(\"removePivotHeaderRowWhenSingleValueColumn\");\n      if (collapseSingleChildren && children.length === 1 && \"colId\" in children[0]) {\n        children[0].headerName = key;\n        return children[0];\n      }\n      const group = {\n        openByDefault: this.pivotDefaultExpanded === -1 || depth < this.pivotDefaultExpanded,\n        groupId: id,\n        headerName: key,\n        children\n      };\n      return group;\n    };\n    const res = [];\n    for (const key in uniqueValues) {\n      const item = uniqueValues[key];\n      const col = uniqueValuesToGroups(key, key, item, 0);\n      res.push(col);\n    }\n    return res;\n  }\n};\nvar EXCEEDED_MAX_UNIQUE_VALUES = \"Exceeded maximum allowed pivot column count.\";\nvar PivotStage = class extends BeanStub102 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"pivotStage\";\n    this.uniqueValues = {};\n    this.lastTimeFailed = false;\n    this.maxUniqueValues = -1;\n    this.currentUniqueCount = 0;\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.columnModel = beans.columnModel;\n    this.pivotResultColsService = beans.pivotResultColsService;\n    this.funcColsService = beans.funcColsService;\n    this.pivotColDefService = beans.pivotColDefService;\n  }\n  execute(params) {\n    const changedPath = params.changedPath;\n    if (this.columnModel.isPivotActive()) {\n      this.executePivotOn(changedPath);\n    } else {\n      this.executePivotOff(changedPath);\n    }\n  }\n  executePivotOff(changedPath) {\n    this.aggregationColumnsHashLastTime = null;\n    this.uniqueValues = {};\n    if (this.pivotResultColsService.isPivotResultColsPresent()) {\n      this.pivotResultColsService.setPivotResultCols(null, \"rowModelUpdated\");\n      if (changedPath) {\n        changedPath.setInactive();\n      }\n    }\n  }\n  executePivotOn(changedPath) {\n    const numberOfAggregationColumns = this.funcColsService.getValueColumns().length ?? 1;\n    const configuredMaxCols = this.gos.get(\"pivotMaxGeneratedColumns\");\n    this.maxUniqueValues = configuredMaxCols === -1 ? -1 : configuredMaxCols / numberOfAggregationColumns;\n    let uniqueValues;\n    try {\n      uniqueValues = this.bucketUpRowNodes(changedPath);\n    } catch (e) {\n      if (e.message === EXCEEDED_MAX_UNIQUE_VALUES) {\n        this.pivotResultColsService.setPivotResultCols([], \"rowModelUpdated\");\n        this.eventService.dispatchEvent({\n          type: \"pivotMaxColumnsExceeded\",\n          message: e.message\n        });\n        this.lastTimeFailed = true;\n        return;\n      }\n      throw e;\n    }\n    const uniqueValuesChanged = this.setUniqueValues(uniqueValues);\n    const aggregationColumns = this.funcColsService.getValueColumns();\n    const aggregationColumnsHash = aggregationColumns.map((column) => `${column.getId()}-${column.getColDef().headerName}`).join(\"#\");\n    const aggregationFuncsHash = aggregationColumns.map((column) => column.getAggFunc().toString()).join(\"#\");\n    const aggregationColumnsChanged = this.aggregationColumnsHashLastTime !== aggregationColumnsHash;\n    const aggregationFuncsChanged = this.aggregationFuncsHashLastTime !== aggregationFuncsHash;\n    this.aggregationColumnsHashLastTime = aggregationColumnsHash;\n    this.aggregationFuncsHashLastTime = aggregationFuncsHash;\n    const groupColumnsHash = this.funcColsService.getRowGroupColumns().map((column) => column.getId()).join(\"#\");\n    const groupColumnsChanged = groupColumnsHash !== this.groupColumnsHashLastTime;\n    this.groupColumnsHashLastTime = groupColumnsHash;\n    const pivotRowTotals = this.gos.get(\"pivotRowTotals\");\n    const pivotColumnGroupTotals = this.gos.get(\"pivotColumnGroupTotals\");\n    const suppressExpandablePivotGroups = this.gos.get(\"suppressExpandablePivotGroups\");\n    const removePivotHeaderRowWhenSingleValueColumn = this.gos.get(\"removePivotHeaderRowWhenSingleValueColumn\");\n    const anyGridOptionsChanged = pivotRowTotals !== this.pivotRowTotalsLastTime || pivotColumnGroupTotals !== this.pivotColumnGroupTotalsLastTime || suppressExpandablePivotGroups !== this.suppressExpandablePivotGroupsLastTime || removePivotHeaderRowWhenSingleValueColumn !== this.removePivotHeaderRowWhenSingleValueColumnLastTime;\n    this.pivotRowTotalsLastTime = pivotRowTotals;\n    this.pivotColumnGroupTotalsLastTime = pivotColumnGroupTotals;\n    this.suppressExpandablePivotGroupsLastTime = suppressExpandablePivotGroups;\n    this.removePivotHeaderRowWhenSingleValueColumnLastTime = removePivotHeaderRowWhenSingleValueColumn;\n    if (this.lastTimeFailed || uniqueValuesChanged || aggregationColumnsChanged || groupColumnsChanged || aggregationFuncsChanged || anyGridOptionsChanged) {\n      const { pivotColumnGroupDefs, pivotColumnDefs } = this.pivotColDefService.createPivotColumnDefs(\n        this.uniqueValues\n      );\n      this.pivotColumnDefs = pivotColumnDefs;\n      this.pivotResultColsService.setPivotResultCols(pivotColumnGroupDefs, \"rowModelUpdated\");\n      if (changedPath) {\n        changedPath.setInactive();\n      }\n    }\n    this.lastTimeFailed = false;\n  }\n  setUniqueValues(newValues) {\n    const json1 = JSON.stringify(newValues);\n    const json2 = JSON.stringify(this.uniqueValues);\n    const uniqueValuesChanged = json1 !== json2;\n    if (uniqueValuesChanged) {\n      this.uniqueValues = newValues;\n      return true;\n    } else {\n      return false;\n    }\n  }\n  bucketUpRowNodes(changedPath) {\n    this.currentUniqueCount = 0;\n    const uniqueValues = {};\n    changedPath.forEachChangedNodeDepthFirst((node) => {\n      if (node.leafGroup) {\n        node.childrenMapped = null;\n      }\n    });\n    const recursivelyBucketFilteredChildren = (node) => {\n      if (node.leafGroup) {\n        this.bucketRowNode(node, uniqueValues);\n      } else {\n        node.childrenAfterFilter?.forEach(recursivelyBucketFilteredChildren);\n      }\n    };\n    changedPath.executeFromRootNode(recursivelyBucketFilteredChildren);\n    return uniqueValues;\n  }\n  bucketRowNode(rowNode, uniqueValues) {\n    const pivotColumns = this.funcColsService.getPivotColumns();\n    if (pivotColumns.length === 0) {\n      rowNode.childrenMapped = null;\n    } else {\n      rowNode.childrenMapped = this.bucketChildren(rowNode.childrenAfterFilter, pivotColumns, 0, uniqueValues);\n    }\n    if (rowNode.sibling) {\n      rowNode.sibling.childrenMapped = rowNode.childrenMapped;\n    }\n  }\n  bucketChildren(children, pivotColumns, pivotIndex, uniqueValues) {\n    const mappedChildren = {};\n    const pivotColumn = pivotColumns[pivotIndex];\n    children.forEach((child) => {\n      let key = this.valueService.getKeyForNode(pivotColumn, child);\n      if (_missing22(key)) {\n        key = \"\";\n      }\n      if (!uniqueValues[key]) {\n        this.currentUniqueCount += 1;\n        uniqueValues[key] = {};\n        const doesGeneratedColMaxExist = this.maxUniqueValues !== -1;\n        const hasExceededColMax = this.currentUniqueCount > this.maxUniqueValues;\n        if (doesGeneratedColMaxExist && hasExceededColMax) {\n          throw Error(EXCEEDED_MAX_UNIQUE_VALUES);\n        }\n      }\n      if (!mappedChildren[key]) {\n        mappedChildren[key] = [];\n      }\n      mappedChildren[key].push(child);\n    });\n    if (pivotIndex === pivotColumns.length - 1) {\n      return mappedChildren;\n    } else {\n      const result = {};\n      _iterateObject3(mappedChildren, (key, value) => {\n        result[key] = this.bucketChildren(value, pivotColumns, pivotIndex + 1, uniqueValues[key]);\n      });\n      return result;\n    }\n  }\n  getPivotColumnDefs() {\n    return this.pivotColumnDefs;\n  }\n};\nfunction addAggFunc(beans, key, aggFunc) {\n  if (beans.aggFuncService) {\n    beans.aggFuncService.addAggFuncs({ key: aggFunc });\n  }\n}\nfunction addAggFuncs(beans, aggFuncs) {\n  if (beans.aggFuncService) {\n    beans.aggFuncService.addAggFuncs(aggFuncs);\n  }\n}\nfunction clearAggFuncs(beans) {\n  if (beans.aggFuncService) {\n    beans.aggFuncService.clear();\n  }\n}\nfunction setColumnAggFunc(beans, key, aggFunc) {\n  beans.funcColsService.setColumnAggFunc(key, aggFunc, \"api\");\n}\nfunction isPivotMode(beans) {\n  return beans.columnModel.isPivotMode();\n}\nfunction getPivotResultColumn(beans, pivotKeys, valueColKey) {\n  return beans.pivotResultColsService.lookupPivotResultCol(pivotKeys, valueColKey);\n}\nfunction setValueColumns(beans, colKeys) {\n  beans.funcColsService.setValueColumns(colKeys, \"api\");\n}\nfunction getValueColumns(beans) {\n  return beans.funcColsService.getValueColumns();\n}\nfunction removeValueColumn(beans, colKey) {\n  beans.funcColsService.removeValueColumns([colKey], \"api\");\n}\nfunction removeValueColumns(beans, colKeys) {\n  beans.funcColsService.removeValueColumns(colKeys, \"api\");\n}\nfunction addValueColumn(beans, colKey) {\n  beans.funcColsService.addValueColumns([colKey], \"api\");\n}\nfunction addValueColumns(beans, colKeys) {\n  beans.funcColsService.addValueColumns(colKeys, \"api\");\n}\nfunction setRowGroupColumns(beans, colKeys) {\n  beans.funcColsService.setRowGroupColumns(colKeys, \"api\");\n}\nfunction removeRowGroupColumn(beans, colKey) {\n  beans.funcColsService.removeRowGroupColumns([colKey], \"api\");\n}\nfunction removeRowGroupColumns(beans, colKeys) {\n  beans.funcColsService.removeRowGroupColumns(colKeys, \"api\");\n}\nfunction addRowGroupColumn(beans, colKey) {\n  beans.funcColsService.addRowGroupColumns([colKey], \"api\");\n}\nfunction addRowGroupColumns(beans, colKeys) {\n  beans.funcColsService.addRowGroupColumns(colKeys, \"api\");\n}\nfunction moveRowGroupColumn(beans, fromIndex, toIndex) {\n  beans.funcColsService.moveRowGroupColumn(fromIndex, toIndex, \"api\");\n}\nfunction getRowGroupColumns(beans) {\n  return beans.funcColsService.getRowGroupColumns();\n}\nfunction setPivotColumns(beans, colKeys) {\n  beans.funcColsService.setPivotColumns(colKeys, \"api\");\n}\nfunction removePivotColumn(beans, colKey) {\n  beans.funcColsService.removePivotColumns([colKey], \"api\");\n}\nfunction removePivotColumns(beans, colKeys) {\n  beans.funcColsService.removePivotColumns(colKeys, \"api\");\n}\nfunction addPivotColumn(beans, colKey) {\n  beans.funcColsService.addPivotColumns([colKey], \"api\");\n}\nfunction addPivotColumns(beans, colKeys) {\n  beans.funcColsService.addPivotColumns(colKeys, \"api\");\n}\nfunction getPivotColumns(beans) {\n  return beans.funcColsService.getPivotColumns();\n}\nfunction setPivotResultColumns(beans, colDefs) {\n  beans.pivotResultColsService.setPivotResultCols(colDefs, \"api\");\n}\nfunction getPivotResultColumns(beans) {\n  const pivotResultCols = beans.pivotResultColsService.getPivotResultCols();\n  return pivotResultCols ? pivotResultCols.list : null;\n}\nvar ShowRowGroupColsService = class extends BeanStub112 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"showRowGroupColsService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n  }\n  refresh() {\n    this.showRowGroupCols = [];\n    this.showRowGroupColsMap = {};\n    this.columnModel.getCols().forEach((col) => {\n      const colDef = col.getColDef();\n      const showRowGroup = colDef.showRowGroup;\n      const isString3 = typeof showRowGroup === \"string\";\n      const isTrue = showRowGroup === true;\n      if (!isString3 && !isTrue) {\n        return;\n      }\n      this.showRowGroupCols.push(col);\n      if (isString3) {\n        this.showRowGroupColsMap[showRowGroup] = col;\n      } else {\n        const rowGroupCols = this.funcColsService.getRowGroupColumns();\n        rowGroupCols.forEach((rowGroupCol) => {\n          this.showRowGroupColsMap[rowGroupCol.getId()] = col;\n        });\n      }\n    });\n  }\n  getShowRowGroupCols() {\n    return this.showRowGroupCols;\n  }\n  getShowRowGroupCol(id) {\n    return this.showRowGroupColsMap[id];\n  }\n};\nvar VERSION6 = \"32.3.9\";\nvar RowGroupingCoreModule = _defineModule6({\n  version: VERSION6,\n  moduleName: `${ModuleNames6.RowGroupingModule}-core`,\n  beans: [\n    AggregationStage,\n    FilterAggregatesStage,\n    GroupStage,\n    PivotColDefService,\n    PivotStage,\n    AggFuncService,\n    AutoColService,\n    ShowRowGroupColsService,\n    ColumnDropZoneService\n  ],\n  userComponents: [\n    {\n      name: \"agGroupRowRenderer\",\n      classImp: GroupCellRenderer\n    },\n    {\n      name: \"agGroupCellRenderer\",\n      classImp: GroupCellRenderer\n    }\n  ],\n  controllers: [{ name: \"groupCellRendererCtrl\", classImp: GroupCellRendererCtrl }],\n  dependantModules: [EnterpriseCoreModule]\n});\nvar RowGroupingApiModule = _defineModule6({\n  version: VERSION6,\n  moduleName: `${ModuleNames6.RowGroupingModule}-api`,\n  apiFunctions: {\n    addAggFunc,\n    addAggFuncs,\n    clearAggFuncs,\n    setColumnAggFunc,\n    isPivotMode,\n    getPivotResultColumn,\n    setValueColumns,\n    getValueColumns,\n    removeValueColumn,\n    removeValueColumns,\n    addValueColumn,\n    addValueColumns,\n    setRowGroupColumns,\n    removeRowGroupColumn,\n    removeRowGroupColumns,\n    addRowGroupColumn,\n    addRowGroupColumns,\n    getRowGroupColumns,\n    moveRowGroupColumn,\n    setPivotColumns,\n    removePivotColumn,\n    removePivotColumns,\n    addPivotColumn,\n    addPivotColumns,\n    getPivotColumns,\n    setPivotResultColumns,\n    getPivotResultColumns\n  },\n  dependantModules: [RowGroupingCoreModule]\n});\nvar GroupFilterModule = _defineModule6({\n  version: VERSION6,\n  moduleName: \"@ag-grid-enterprise/group-filter\",\n  userComponents: [{ name: \"agGroupColumnFilter\", classImp: GroupFilter }],\n  dependantModules: [RowGroupingCoreModule, _ColumnFilterModule]\n});\nvar GroupFloatingFilterModule = _defineModule6({\n  version: VERSION6,\n  moduleName: \"@ag-grid-enterprise/group-floating-filter\",\n  userComponents: [{ name: \"agGroupColumnFloatingFilter\", classImp: GroupFloatingFilterComp }],\n  dependantModules: [GroupFilterModule, _FloatingFilterModule]\n});\nvar RowGroupingModule = _defineModule6({\n  version: VERSION6,\n  moduleName: ModuleNames6.RowGroupingModule,\n  dependantModules: [RowGroupingCoreModule, RowGroupingApiModule, GroupFilterModule, GroupFloatingFilterModule]\n});\nvar ValuesDropZonePanel = class extends BaseDropZonePanel {\n  constructor(horizontal) {\n    super(horizontal, \"aggregation\");\n  }\n  postConstruct() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const emptyMessage = localeTextFunc(\"valueColumnsEmptyMessage\", \"Drag here to aggregate\");\n    const title = localeTextFunc(\"values\", \"Values\");\n    super.init({\n      icon: _createIconNoSpan33(\"valuePanel\", this.gos, null),\n      emptyMessage,\n      title\n    });\n    this.addManagedEventListeners({ columnValueChanged: this.refreshGui.bind(this) });\n  }\n  getAriaLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const label = translate(\"ariaValuesDropZonePanelLabel\", \"Values\");\n    return label;\n  }\n  getTooltipParams() {\n    const res = super.getTooltipParams();\n    res.location = \"valueColumnsList\";\n    return res;\n  }\n  getIconName() {\n    return this.isPotentialDndItems() ? \"aggregate\" : \"notAllowed\";\n  }\n  isItemDroppable(column, draggingEvent) {\n    if (this.gos.get(\"functionsReadOnly\") || !column.isPrimary()) {\n      return false;\n    }\n    return column.isAllowValue() && (!column.isValueActive() || this.isSourceEventFromTarget(draggingEvent));\n  }\n  updateItems(columns) {\n    this.funcColsService.setValueColumns(columns, \"toolPanelUi\");\n  }\n  getExistingItems() {\n    return this.funcColsService.getValueColumns();\n  }\n};\n\n// enterprise-modules/side-bar/src/sideBarModule.ts\nimport { ModuleNames as ModuleNames8, _defineModule as _defineModule7 } from \"ag-grid-community\";\n\n// enterprise-modules/side-bar/src/sideBar/common/toolPanelColDefService.ts\nimport { AgProvidedColumnGroup, BeanStub as BeanStub18, _warnOnce as _warnOnce17, isProvidedColumnGroup } from \"ag-grid-community\";\n\n// enterprise-modules/side-bar/src/sideBar/common/sideBarUtils.ts\nimport { _includes as _includes9, _last as _last8 } from \"ag-grid-community\";\nfunction isColGroupDef(colDef) {\n  return !!colDef && typeof colDef.children !== \"undefined\";\n}\nfunction getId(colDef) {\n  return isColGroupDef(colDef) ? colDef.groupId : colDef.colId;\n}\nfunction addChildrenToGroup(tree, groupId, colDef) {\n  const subGroupIsSplit = (currentSubGroup, currentSubGroupToAdd) => {\n    const existingChildIds = currentSubGroup.children.map(getId);\n    const childGroupAlreadyExists = _includes9(existingChildIds, getId(currentSubGroupToAdd));\n    const lastChild = _last8(currentSubGroup.children);\n    const lastChildIsDifferent = lastChild && getId(lastChild) !== getId(currentSubGroupToAdd);\n    return childGroupAlreadyExists && lastChildIsDifferent;\n  };\n  if (!isColGroupDef(tree)) {\n    return true;\n  }\n  const currentGroup = tree;\n  const groupToAdd = colDef;\n  if (subGroupIsSplit(currentGroup, groupToAdd)) {\n    currentGroup.children.push(groupToAdd);\n    return true;\n  }\n  if (currentGroup.groupId === groupId) {\n    const existingChildIds = currentGroup.children.map(getId);\n    const colDefAlreadyPresent = _includes9(existingChildIds, getId(groupToAdd));\n    if (!colDefAlreadyPresent) {\n      currentGroup.children.push(groupToAdd);\n      return true;\n    }\n  }\n  for (let i = currentGroup.children.length - 1; i >= 0; i--) {\n    if (addChildrenToGroup(currentGroup.children[i], groupId, colDef)) {\n      break;\n    }\n  }\n  return false;\n}\nfunction mergeLeafPathTrees(leafPathTrees) {\n  const matchingRootGroupIds = (pathA, pathB) => {\n    const bothPathsAreGroups = isColGroupDef(pathA) && isColGroupDef(pathB);\n    return bothPathsAreGroups && getId(pathA) === getId(pathB);\n  };\n  const mergeTrees = (treeA, treeB) => {\n    if (!isColGroupDef(treeB)) {\n      return treeA;\n    }\n    const mergeResult = treeA;\n    const groupToMerge = treeB;\n    if (groupToMerge.children && groupToMerge.groupId) {\n      const added = addChildrenToGroup(mergeResult, groupToMerge.groupId, groupToMerge.children[0]);\n      if (added) {\n        return mergeResult;\n      }\n    }\n    groupToMerge.children.forEach((child) => mergeTrees(mergeResult, child));\n    return mergeResult;\n  };\n  const mergeColDefs = [];\n  for (let i = 1; i <= leafPathTrees.length; i++) {\n    const first = leafPathTrees[i - 1];\n    const second = leafPathTrees[i];\n    if (matchingRootGroupIds(first, second)) {\n      leafPathTrees[i] = mergeTrees(first, second);\n    } else {\n      mergeColDefs.push(first);\n    }\n  }\n  return mergeColDefs;\n}\n\n// enterprise-modules/side-bar/src/sideBar/common/toolPanelColDefService.ts\nvar ToolPanelColDefService = class extends BeanStub18 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"toolPanelColDefService\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n  }\n  createColumnTree(colDefs) {\n    const invalidColIds = [];\n    const createDummyColGroup = (abstractColDef, depth) => {\n      if (isColGroupDef(abstractColDef)) {\n        const groupDef = abstractColDef;\n        const groupId = typeof groupDef.groupId !== \"undefined\" ? groupDef.groupId : groupDef.headerName;\n        const group = new AgProvidedColumnGroup(groupDef, groupId, false, depth);\n        const children = [];\n        groupDef.children.forEach((def) => {\n          const child = createDummyColGroup(def, depth + 1);\n          if (child) {\n            children.push(child);\n          }\n        });\n        group.setChildren(children);\n        return group;\n      } else {\n        const colDef = abstractColDef;\n        const key = colDef.colId ? colDef.colId : colDef.field;\n        const column = this.columnModel.getColDefCol(key);\n        if (!column) {\n          invalidColIds.push(colDef);\n        }\n        return column;\n      }\n    };\n    const mappedResults = [];\n    colDefs.forEach((colDef) => {\n      const result = createDummyColGroup(colDef, 0);\n      if (result) {\n        mappedResults.push(result);\n      }\n    });\n    if (invalidColIds.length > 0) {\n      _warnOnce17(\"unable to find grid columns for the supplied colDef(s):\", invalidColIds);\n    }\n    return mappedResults;\n  }\n  syncLayoutWithGrid(syncLayoutCallback) {\n    const leafPathTrees = this.getLeafPathTrees();\n    const mergedColumnTrees = mergeLeafPathTrees(leafPathTrees);\n    syncLayoutCallback(mergedColumnTrees);\n  }\n  getLeafPathTrees() {\n    const getLeafPathTree = (node, childDef) => {\n      let leafPathTree;\n      if (isProvidedColumnGroup(node)) {\n        if (node.isPadding()) {\n          leafPathTree = childDef;\n        } else {\n          const groupDef = Object.assign({}, node.getColGroupDef());\n          groupDef.groupId = node.getGroupId();\n          groupDef.children = [childDef];\n          leafPathTree = groupDef;\n        }\n      } else {\n        const colDef = Object.assign({}, node.getColDef());\n        colDef.colId = node.getColId();\n        leafPathTree = colDef;\n      }\n      const parent = node.getOriginalParent();\n      if (parent) {\n        return getLeafPathTree(parent, leafPathTree);\n      } else {\n        return leafPathTree;\n      }\n    };\n    const allGridColumns = this.columnModel.getCols();\n    const allPrimaryGridColumns = allGridColumns.filter((column) => {\n      const colDef = column.getColDef();\n      return column.isPrimary() && !colDef.showRowGroup;\n    });\n    return allPrimaryGridColumns.map((col) => getLeafPathTree(col, col.getColDef()));\n  }\n};\n\n// enterprise-modules/side-bar/src/sideBar/sideBarApi.ts\nimport { _unwrapUserComp } from \"ag-grid-community\";\nfunction isSideBarVisible(beans) {\n  return beans.sideBarService?.getSideBarComp().isDisplayed() ?? false;\n}\nfunction setSideBarVisible(beans, show) {\n  beans.sideBarService?.getSideBarComp().setDisplayed(show);\n}\nfunction setSideBarPosition(beans, position) {\n  beans.sideBarService?.getSideBarComp().setSideBarPosition(position);\n}\nfunction openToolPanel(beans, key) {\n  beans.sideBarService?.getSideBarComp().openToolPanel(key, \"api\");\n}\nfunction closeToolPanel(beans) {\n  beans.sideBarService?.getSideBarComp().close(\"api\");\n}\nfunction getOpenedToolPanel(beans) {\n  return beans.sideBarService?.getSideBarComp().openedItem() ?? null;\n}\nfunction refreshToolPanel(beans) {\n  beans.sideBarService?.getSideBarComp().refresh();\n}\nfunction isToolPanelShowing(beans) {\n  return beans.sideBarService?.getSideBarComp().isToolPanelShowing() ?? false;\n}\nfunction getToolPanelInstance(beans, id) {\n  const comp = beans.sideBarService?.getSideBarComp().getToolPanelInstance(id);\n  return _unwrapUserComp(comp);\n}\nfunction getSideBar(beans) {\n  return beans.sideBarService?.getSideBarComp().getDef();\n}\n\n// enterprise-modules/side-bar/src/sideBar/sideBarService.ts\nimport { BeanStub as BeanStub19 } from \"ag-grid-community\";\n\n// enterprise-modules/side-bar/src/sideBar/agSideBar.ts\nimport {\n  Component as Component48,\n  KeyCode as KeyCode17,\n  ManagedFocusFeature as ManagedFocusFeature2,\n  ModuleNames as ModuleNames7,\n  RefPlaceholder as RefPlaceholder25,\n  _addFocusableContainerListener,\n  _getActiveDomElement as _getActiveDomElement9,\n  _removeFromParent as _removeFromParent8,\n  _setAriaControls as _setAriaControls2,\n  _warnOnce as _warnOnce20\n} from \"ag-grid-community\";\n\n// enterprise-modules/side-bar/src/sideBar/agSideBarButtons.ts\nimport { Component as Component45, KeyCode as KeyCode16, _clearElement as _clearElement8, _stopPropagationForAgGrid as _stopPropagationForAgGrid6 } from \"ag-grid-community\";\n\n// enterprise-modules/side-bar/src/sideBar/sideBarButtonComp.ts\nimport { Component as Component44, RefPlaceholder as RefPlaceholder21, _createIconNoSpan as _createIconNoSpan12, _setAriaExpanded as _setAriaExpanded6 } from \"ag-grid-community\";\nvar SideBarButtonComp = class extends Component44 {\n  constructor(toolPanelDef) {\n    super();\n    this.eToggleButton = RefPlaceholder21;\n    this.eIconWrapper = RefPlaceholder21;\n    this.eLabel = RefPlaceholder21;\n    this.toolPanelDef = toolPanelDef;\n  }\n  getToolPanelId() {\n    return this.toolPanelDef.id;\n  }\n  postConstruct() {\n    const template = this.createTemplate();\n    this.setTemplate(template, []);\n    this.setLabel();\n    this.setIcon();\n    this.addManagedElementListeners(this.eToggleButton, { click: this.onButtonPressed.bind(this) });\n    this.eToggleButton.setAttribute(\"id\", `ag-${this.getCompId()}-button`);\n  }\n  createTemplate() {\n    const res = (\n      /* html */\n      `<div class=\"ag-side-button\" role=\"presentation\">\n                <button type=\"button\" data-ref=\"eToggleButton\" tabindex=\"-1\" role=\"tab\" aria-expanded=\"false\" class=\"ag-button ag-side-button-button\">\n                    <div data-ref=\"eIconWrapper\" class=\"ag-side-button-icon-wrapper\" aria-hidden=\"true\"></div>\n                    <span data-ref=\"eLabel\" class=\"ag-side-button-label\"></span>\n                </button>\n            </div>`\n    );\n    return res;\n  }\n  setLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const def = this.toolPanelDef;\n    const label = translate(def.labelKey, def.labelDefault);\n    this.eLabel.innerText = label;\n  }\n  setIcon() {\n    this.eIconWrapper.insertAdjacentElement(\"afterbegin\", _createIconNoSpan12(this.toolPanelDef.iconKey, this.gos));\n  }\n  onButtonPressed() {\n    this.dispatchLocalEvent({ type: \"toggleButtonClicked\" });\n  }\n  setSelected(selected) {\n    this.addOrRemoveCssClass(\"ag-selected\", selected);\n    _setAriaExpanded6(this.eToggleButton, selected);\n  }\n  getButtonElement() {\n    return this.eToggleButton;\n  }\n};\n\n// enterprise-modules/side-bar/src/sideBar/agSideBarButtons.ts\nvar AgSideBarButtons = class extends Component45 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-side-buttons\" role=\"tablist\"></div>`\n    );\n    this.buttonComps = [];\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  postConstruct() {\n    this.addManagedElementListeners(this.getFocusableElement(), { keydown: this.handleKeyDown.bind(this) });\n  }\n  handleKeyDown(e) {\n    if (e.key !== KeyCode16.TAB || !e.shiftKey) {\n      return;\n    }\n    if (this.focusService.focusNextGridCoreContainer(true)) {\n      e.preventDefault();\n      return;\n    }\n    _stopPropagationForAgGrid6(e);\n  }\n  setActiveButton(id) {\n    this.buttonComps.forEach((comp) => {\n      comp.setSelected(id === comp.getToolPanelId());\n    });\n  }\n  addButtonComp(def) {\n    const buttonComp = this.createBean(new SideBarButtonComp(def));\n    this.buttonComps.push(buttonComp);\n    this.appendChild(buttonComp);\n    buttonComp.addEventListener(\"toggleButtonClicked\", () => {\n      this.dispatchLocalEvent({\n        type: \"sideBarButtonClicked\",\n        toolPanelId: def.id\n      });\n    });\n    return buttonComp;\n  }\n  clearButtons() {\n    this.buttonComps = this.destroyBeans(this.buttonComps);\n    _clearElement8(this.getGui());\n    super.destroy();\n  }\n  destroy() {\n    this.clearButtons();\n    super.destroy();\n  }\n};\nvar AgSideBarButtonsSelector = {\n  selector: \"AG-SIDE-BAR-BUTTONS\",\n  component: AgSideBarButtons\n};\n\n// enterprise-modules/side-bar/src/sideBar/sideBarDefParser.ts\nimport { _warnOnce as _warnOnce18 } from \"ag-grid-community\";\nvar DEFAULT_COLUMN_COMP = {\n  id: \"columns\",\n  labelDefault: \"Columns\",\n  labelKey: \"columns\",\n  iconKey: \"columns\",\n  toolPanel: \"agColumnsToolPanel\"\n};\nvar DEFAULT_FILTER_COMP = {\n  id: \"filters\",\n  labelDefault: \"Filters\",\n  labelKey: \"filters\",\n  iconKey: \"filter\",\n  toolPanel: \"agFiltersToolPanel\"\n};\nvar DEFAULT_BY_KEY = {\n  columns: DEFAULT_COLUMN_COMP,\n  filters: DEFAULT_FILTER_COMP\n};\nfunction parseSideBarDef(toParse) {\n  if (!toParse) {\n    return void 0;\n  }\n  if (toParse === true) {\n    return {\n      toolPanels: [DEFAULT_COLUMN_COMP, DEFAULT_FILTER_COMP],\n      defaultToolPanel: \"columns\"\n    };\n  }\n  if (typeof toParse === \"string\") {\n    return parseSideBarDef([toParse]);\n  }\n  if (Array.isArray(toParse)) {\n    const comps = [];\n    toParse.forEach((key) => {\n      const lookupResult = DEFAULT_BY_KEY[key];\n      if (!lookupResult) {\n        logMissingKey(key);\n        return;\n      }\n      comps.push(lookupResult);\n    });\n    if (comps.length === 0) {\n      return void 0;\n    }\n    return {\n      toolPanels: comps,\n      defaultToolPanel: comps[0].id\n    };\n  }\n  const result = {\n    toolPanels: parseComponents(toParse.toolPanels),\n    defaultToolPanel: toParse.defaultToolPanel,\n    hiddenByDefault: toParse.hiddenByDefault,\n    position: toParse.position\n  };\n  return result;\n}\nfunction logMissingKey(key) {\n  _warnOnce18(\n    `the key ${key} is not a valid key for specifying a tool panel, valid keys are: ${Object.keys(DEFAULT_BY_KEY).join(\",\")}`\n  );\n}\nfunction parseComponents(from) {\n  const result = [];\n  if (!from) {\n    return result;\n  }\n  from.forEach((it) => {\n    let toAdd = null;\n    if (typeof it === \"string\") {\n      const lookupResult = DEFAULT_BY_KEY[it];\n      if (!lookupResult) {\n        logMissingKey(it);\n        return;\n      }\n      toAdd = lookupResult;\n    } else {\n      toAdd = it;\n    }\n    result.push(toAdd);\n  });\n  return result;\n}\n\n// enterprise-modules/side-bar/src/sideBar/toolPanelWrapper.ts\nimport { Component as Component47, _warnOnce as _warnOnce19 } from \"ag-grid-community\";\n\n// enterprise-modules/side-bar/src/sideBar/agHorizontalResize.ts\nimport { Component as Component46 } from \"ag-grid-community\";\nvar AgHorizontalResize = class extends Component46 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-tool-panel-horizontal-resize\"></div>`\n    );\n    this.minWidth = 100;\n    this.maxWidth = null;\n  }\n  wireBeans(beans) {\n    this.horizontalResizeService = beans.horizontalResizeService;\n  }\n  setElementToResize(elementToResize) {\n    this.elementToResize = elementToResize;\n  }\n  postConstruct() {\n    const finishedWithResizeFunc = this.horizontalResizeService.addResizeBar({\n      eResizeBar: this.getGui(),\n      dragStartPixels: 1,\n      onResizeStart: this.onResizeStart.bind(this),\n      onResizing: this.onResizing.bind(this),\n      onResizeEnd: this.onResizeEnd.bind(this)\n    });\n    this.addDestroyFunc(finishedWithResizeFunc);\n    this.setInverted(this.gos.get(\"enableRtl\"));\n  }\n  dispatchResizeEvent(start, end, width) {\n    this.eventService.dispatchEvent({\n      type: \"toolPanelSizeChanged\",\n      width,\n      started: start,\n      ended: end\n    });\n  }\n  onResizeStart() {\n    this.startingWidth = this.elementToResize.offsetWidth;\n    this.dispatchResizeEvent(true, false, this.startingWidth);\n  }\n  onResizeEnd(delta) {\n    return this.onResizing(delta, true);\n  }\n  onResizing(delta, isEnd = false) {\n    const direction = this.inverted ? -1 : 1;\n    let newWidth = Math.max(this.minWidth, Math.floor(this.startingWidth - delta * direction));\n    if (this.maxWidth != null) {\n      newWidth = Math.min(this.maxWidth, newWidth);\n    }\n    this.elementToResize.style.width = `${newWidth}px`;\n    this.dispatchResizeEvent(false, isEnd, newWidth);\n  }\n  setInverted(inverted) {\n    this.inverted = inverted;\n  }\n  setMaxWidth(value) {\n    this.maxWidth = value;\n  }\n  setMinWidth(value) {\n    if (value != null) {\n      this.minWidth = value;\n    } else {\n      this.minWidth = 100;\n    }\n  }\n};\n\n// enterprise-modules/side-bar/src/sideBar/toolPanelWrapper.ts\nvar ToolPanelWrapper = class extends Component47 {\n  wireBeans(beans) {\n    this.userComponentFactory = beans.userComponentFactory;\n  }\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-tool-panel-wrapper\" role=\"tabpanel\"/>`\n    );\n  }\n  postConstruct() {\n    const eGui = this.getGui();\n    const resizeBar = this.resizeBar = this.createManagedBean(new AgHorizontalResize());\n    eGui.setAttribute(\"id\", `ag-${this.getCompId()}`);\n    resizeBar.setElementToResize(eGui);\n    this.appendChild(resizeBar);\n  }\n  getToolPanelId() {\n    return this.toolPanelId;\n  }\n  setToolPanelDef(toolPanelDef, params) {\n    const { id, minWidth, maxWidth, width } = toolPanelDef;\n    this.toolPanelId = id;\n    this.width = width;\n    const compDetails = this.userComponentFactory.getToolPanelCompDetails(toolPanelDef, params);\n    const componentPromise = compDetails.newAgStackInstance();\n    this.params = compDetails.params;\n    if (componentPromise == null) {\n      _warnOnce19(`error processing tool panel component ${id}. You need to specify 'toolPanel'`);\n      return;\n    }\n    componentPromise.then(this.setToolPanelComponent.bind(this));\n    if (minWidth != null) {\n      this.resizeBar.setMinWidth(minWidth);\n    }\n    if (maxWidth != null) {\n      this.resizeBar.setMaxWidth(maxWidth);\n    }\n  }\n  setToolPanelComponent(compInstance) {\n    this.toolPanelCompInstance = compInstance;\n    this.appendChild(compInstance.getGui());\n    this.addDestroyFunc(() => {\n      this.destroyBean(compInstance);\n    });\n    if (this.width) {\n      this.getGui().style.width = `${this.width}px`;\n    }\n  }\n  getToolPanelInstance() {\n    return this.toolPanelCompInstance;\n  }\n  setResizerSizerSide(side) {\n    const isRtl = this.gos.get(\"enableRtl\");\n    const isLeft = side === \"left\";\n    const inverted = isRtl ? isLeft : !isLeft;\n    this.resizeBar.setInverted(inverted);\n  }\n  refresh() {\n    this.toolPanelCompInstance?.refresh(this.params);\n  }\n};\n\n// enterprise-modules/side-bar/src/sideBar/agSideBar.ts\nvar AgSideBar = class extends Component48 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-side-bar ag-unselectable\">\n            <ag-side-bar-buttons data-ref=\"sideBarButtons\"></ag-side-bar-buttons>\n        </div>`,\n      [AgSideBarButtonsSelector]\n    );\n    this.sideBarButtons = RefPlaceholder25;\n    this.toolPanelWrappers = [];\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.filterManager = beans.filterManager;\n    this.sideBarService = beans.sideBarService;\n  }\n  postConstruct() {\n    this.sideBarButtons.addEventListener(\"sideBarButtonClicked\", this.onToolPanelButtonClicked.bind(this));\n    const { sideBar: sideBarState } = this.gos.get(\"initialState\") ?? {};\n    this.setSideBarDef({\n      sideBarDef: parseSideBarDef(this.gos.get(\"sideBar\")),\n      sideBarState\n    });\n    this.addManagedPropertyListener(\"sideBar\", this.onSideBarUpdated.bind(this));\n    this.sideBarService.registerSideBarComp(this);\n    const eGui = this.getFocusableElement();\n    this.createManagedBean(\n      new ManagedFocusFeature2(eGui, {\n        onTabKeyDown: this.onTabKeyDown.bind(this),\n        handleKeyDown: this.handleKeyDown.bind(this)\n      })\n    );\n    _addFocusableContainerListener(this, eGui, this.focusService);\n  }\n  onTabKeyDown(e) {\n    if (e.defaultPrevented) {\n      return;\n    }\n    const { focusService, sideBarButtons } = this;\n    const eGui = this.getGui();\n    const sideBarGui = sideBarButtons.getGui();\n    const activeElement = _getActiveDomElement9(this.gos);\n    const openPanel = eGui.querySelector(\".ag-tool-panel-wrapper:not(.ag-hidden)\");\n    const target = e.target;\n    if (!openPanel) {\n      return focusService.focusNextGridCoreContainer(e.shiftKey, true);\n    }\n    if (sideBarGui.contains(activeElement)) {\n      if (focusService.focusInto(openPanel, e.shiftKey)) {\n        e.preventDefault();\n      }\n      return;\n    }\n    if (!e.shiftKey) {\n      return;\n    }\n    let nextEl = null;\n    if (openPanel.contains(activeElement)) {\n      nextEl = this.focusService.findNextFocusableElement(openPanel, void 0, true);\n    } else if (focusService.isTargetUnderManagedComponent(openPanel, target) && e.shiftKey) {\n      nextEl = this.focusService.findFocusableElementBeforeTabGuard(openPanel, target);\n    }\n    if (!nextEl) {\n      nextEl = sideBarGui.querySelector(\".ag-selected button\");\n    }\n    if (nextEl && nextEl !== e.target) {\n      e.preventDefault();\n      nextEl.focus();\n    }\n  }\n  handleKeyDown(e) {\n    const currentButton = _getActiveDomElement9(this.gos);\n    if (!this.sideBarButtons.getGui().contains(currentButton)) {\n      return;\n    }\n    const sideBarGui = this.sideBarButtons.getGui();\n    const buttons = Array.prototype.slice.call(sideBarGui.querySelectorAll(\".ag-side-button\"));\n    const currentPos = buttons.findIndex((button) => button.contains(currentButton));\n    let nextPos = null;\n    switch (e.key) {\n      case KeyCode17.LEFT:\n      case KeyCode17.UP:\n        nextPos = Math.max(0, currentPos - 1);\n        break;\n      case KeyCode17.RIGHT:\n      case KeyCode17.DOWN:\n        nextPos = Math.min(currentPos + 1, buttons.length - 1);\n        break;\n    }\n    if (nextPos === null) {\n      return;\n    }\n    const innerButton = buttons[nextPos].querySelector(\"button\");\n    if (innerButton) {\n      innerButton.focus();\n      e.preventDefault();\n    }\n  }\n  onToolPanelButtonClicked(event) {\n    const id = event.toolPanelId;\n    const openedItem = this.openedItem();\n    if (openedItem === id) {\n      this.openToolPanel(void 0, \"sideBarButtonClicked\");\n    } else {\n      this.openToolPanel(id, \"sideBarButtonClicked\");\n    }\n  }\n  clearDownUi() {\n    this.sideBarButtons.clearButtons();\n    this.destroyToolPanelWrappers();\n  }\n  setSideBarDef({\n    sideBarDef,\n    sideBarState,\n    existingToolPanelWrappers\n  }) {\n    this.setDisplayed(false);\n    this.sideBar = sideBarDef;\n    if (!!this.sideBar && !!this.sideBar.toolPanels) {\n      const toolPanelDefs = this.sideBar.toolPanels;\n      this.createToolPanelsAndSideButtons(toolPanelDefs, sideBarState, existingToolPanelWrappers);\n      if (!this.toolPanelWrappers.length) {\n        return;\n      }\n      const shouldDisplaySideBar = sideBarState ? sideBarState.visible : !this.sideBar.hiddenByDefault;\n      this.setDisplayed(shouldDisplaySideBar);\n      this.setSideBarPosition(sideBarState ? sideBarState.position : this.sideBar.position);\n      if (shouldDisplaySideBar) {\n        if (sideBarState) {\n          const { openToolPanel: openToolPanel2 } = sideBarState;\n          if (openToolPanel2) {\n            this.openToolPanel(openToolPanel2, \"sideBarInitializing\");\n          }\n        } else {\n          this.openToolPanel(this.sideBar.defaultToolPanel, \"sideBarInitializing\");\n        }\n      }\n    }\n  }\n  getDef() {\n    return this.sideBar;\n  }\n  setSideBarPosition(position) {\n    if (!position) {\n      position = \"right\";\n    }\n    this.position = position;\n    const isLeft = position === \"left\";\n    const resizerSide = isLeft ? \"right\" : \"left\";\n    this.addOrRemoveCssClass(\"ag-side-bar-left\", isLeft);\n    this.addOrRemoveCssClass(\"ag-side-bar-right\", !isLeft);\n    this.toolPanelWrappers.forEach((wrapper) => {\n      wrapper.setResizerSizerSide(resizerSide);\n    });\n    this.dispatchSideBarUpdated();\n    return this;\n  }\n  setDisplayed(displayed, options) {\n    super.setDisplayed(displayed, options);\n    this.dispatchSideBarUpdated();\n  }\n  getState() {\n    const toolPanels = {};\n    this.toolPanelWrappers.forEach((wrapper) => {\n      toolPanels[wrapper.getToolPanelId()] = wrapper.getToolPanelInstance()?.getState?.();\n    });\n    return {\n      visible: this.isDisplayed(),\n      position: this.position,\n      openToolPanel: this.openedItem(),\n      toolPanels\n    };\n  }\n  createToolPanelsAndSideButtons(defs, sideBarState, existingToolPanelWrappers) {\n    for (const def of defs) {\n      this.createToolPanelAndSideButton(\n        def,\n        sideBarState?.toolPanels?.[def.id],\n        existingToolPanelWrappers?.[def.id]\n      );\n    }\n  }\n  validateDef(def) {\n    if (def.id == null) {\n      _warnOnce20(\n        `please review all your toolPanel components, it seems like at least one of them doesn't have an id`\n      );\n      return false;\n    }\n    if (def.toolPanel === \"agColumnsToolPanel\") {\n      const moduleMissing = !this.gos.assertModuleRegistered(\n        ModuleNames7.ColumnsToolPanelModule,\n        \"Column Tool Panel\"\n      );\n      if (moduleMissing) {\n        return false;\n      }\n    }\n    if (def.toolPanel === \"agFiltersToolPanel\") {\n      const moduleMissing = !this.gos.assertModuleRegistered(\n        ModuleNames7.FiltersToolPanelModule,\n        \"Filters Tool Panel\"\n      );\n      if (moduleMissing) {\n        return false;\n      }\n      if (this.filterManager?.isAdvancedFilterEnabled()) {\n        _warnOnce20(\n          \"Advanced Filter does not work with Filters Tool Panel. Filters Tool Panel has been disabled.\"\n        );\n        return false;\n      }\n    }\n    return true;\n  }\n  createToolPanelAndSideButton(def, initialState, existingToolPanelWrapper) {\n    if (!this.validateDef(def)) {\n      return;\n    }\n    const button = this.sideBarButtons.addButtonComp(def);\n    let wrapper;\n    if (existingToolPanelWrapper) {\n      wrapper = existingToolPanelWrapper;\n    } else {\n      wrapper = this.createBean(new ToolPanelWrapper());\n      wrapper.setToolPanelDef(def, {\n        initialState,\n        onStateUpdated: () => this.dispatchSideBarUpdated()\n      });\n    }\n    wrapper.setDisplayed(false);\n    const wrapperGui = wrapper.getGui();\n    this.appendChild(wrapperGui);\n    this.toolPanelWrappers.push(wrapper);\n    _setAriaControls2(button.getButtonElement(), wrapperGui);\n  }\n  refresh() {\n    this.toolPanelWrappers.forEach((wrapper) => wrapper.refresh());\n  }\n  openToolPanel(key, source = \"api\") {\n    const currentlyOpenedKey = this.openedItem();\n    if (currentlyOpenedKey === key) {\n      return;\n    }\n    this.toolPanelWrappers.forEach((wrapper) => {\n      const show = key === wrapper.getToolPanelId();\n      wrapper.setDisplayed(show);\n    });\n    const newlyOpenedKey = this.openedItem();\n    const openToolPanelChanged = currentlyOpenedKey !== newlyOpenedKey;\n    if (openToolPanelChanged) {\n      this.sideBarButtons.setActiveButton(key);\n      this.raiseToolPanelVisibleEvent(key, currentlyOpenedKey ?? void 0, source);\n    }\n  }\n  getToolPanelInstance(key) {\n    const toolPanelWrapper = this.toolPanelWrappers.filter((toolPanel) => toolPanel.getToolPanelId() === key)[0];\n    if (!toolPanelWrapper) {\n      _warnOnce20(`unable to lookup Tool Panel as invalid key supplied: ${key}`);\n      return;\n    }\n    return toolPanelWrapper.getToolPanelInstance();\n  }\n  raiseToolPanelVisibleEvent(key, previousKey, source) {\n    const switchingToolPanel = !!key && !!previousKey;\n    if (previousKey) {\n      this.eventService.dispatchEvent({\n        type: \"toolPanelVisibleChanged\",\n        source,\n        key: previousKey,\n        visible: false,\n        switchingToolPanel\n      });\n    }\n    if (key) {\n      this.eventService.dispatchEvent({\n        type: \"toolPanelVisibleChanged\",\n        source,\n        key,\n        visible: true,\n        switchingToolPanel\n      });\n    }\n  }\n  close(source = \"api\") {\n    this.openToolPanel(void 0, source);\n  }\n  isToolPanelShowing() {\n    return !!this.openedItem();\n  }\n  openedItem() {\n    let activeToolPanel = null;\n    this.toolPanelWrappers.forEach((wrapper) => {\n      if (wrapper.isDisplayed()) {\n        activeToolPanel = wrapper.getToolPanelId();\n      }\n    });\n    return activeToolPanel;\n  }\n  onSideBarUpdated() {\n    const sideBarDef = parseSideBarDef(this.gos.get(\"sideBar\"));\n    const existingToolPanelWrappers = {};\n    if (sideBarDef && this.sideBar) {\n      sideBarDef.toolPanels?.forEach((toolPanelDef) => {\n        const { id } = toolPanelDef;\n        if (!id) {\n          return;\n        }\n        const existingToolPanelDef = this.sideBar.toolPanels?.find(\n          (toolPanelDefToCheck) => toolPanelDefToCheck.id === id\n        );\n        if (!existingToolPanelDef || toolPanelDef.toolPanel !== existingToolPanelDef.toolPanel) {\n          return;\n        }\n        const toolPanelWrapper = this.toolPanelWrappers.find((toolPanel) => toolPanel.getToolPanelId() === id);\n        if (!toolPanelWrapper) {\n          return;\n        }\n        const params = this.gos.addGridCommonParams({\n          ...toolPanelDef.toolPanelParams ?? {},\n          onStateUpdated: () => this.dispatchSideBarUpdated()\n        });\n        const hasRefreshed = toolPanelWrapper.getToolPanelInstance()?.refresh(params);\n        if (hasRefreshed !== true) {\n          return;\n        }\n        this.toolPanelWrappers = this.toolPanelWrappers.filter((toolPanel) => toolPanel !== toolPanelWrapper);\n        _removeFromParent8(toolPanelWrapper.getGui());\n        existingToolPanelWrappers[id] = toolPanelWrapper;\n      });\n    }\n    this.clearDownUi();\n    this.setSideBarDef({ sideBarDef, existingToolPanelWrappers });\n  }\n  dispatchSideBarUpdated() {\n    this.eventService.dispatchEvent({ type: \"sideBarUpdated\" });\n  }\n  destroyToolPanelWrappers() {\n    this.toolPanelWrappers.forEach((wrapper) => {\n      _removeFromParent8(wrapper.getGui());\n      this.destroyBean(wrapper);\n    });\n    this.toolPanelWrappers.length = 0;\n  }\n  destroy() {\n    this.destroyToolPanelWrappers();\n    super.destroy();\n  }\n};\nvar AgSideBarSelector = {\n  selector: \"AG-SIDE-BAR\",\n  component: AgSideBar\n};\n\n// enterprise-modules/side-bar/src/sideBar/sideBarService.ts\nvar SideBarService = class extends BeanStub19 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"sideBarService\";\n  }\n  registerSideBarComp(sideBarComp) {\n    this.sideBarComp = sideBarComp;\n  }\n  getSideBarComp() {\n    return this.sideBarComp;\n  }\n  getSideBarSelector() {\n    return AgSideBarSelector;\n  }\n};\n\n// enterprise-modules/side-bar/src/version.ts\nvar VERSION7 = \"32.3.9\";\n\n// enterprise-modules/side-bar/src/sideBarModule.ts\nvar SideBarCoreModule = _defineModule7({\n  version: VERSION7,\n  moduleName: `${ModuleNames8.SideBarModule}-core`,\n  beans: [ToolPanelColDefService, SideBarService],\n  dependantModules: [EnterpriseCoreModule]\n});\nvar SideBarApiModule = _defineModule7({\n  version: VERSION7,\n  moduleName: `${ModuleNames8.SideBarModule}-api`,\n  apiFunctions: {\n    isSideBarVisible,\n    setSideBarVisible,\n    setSideBarPosition,\n    openToolPanel,\n    closeToolPanel,\n    getOpenedToolPanel,\n    refreshToolPanel,\n    isToolPanelShowing,\n    getToolPanelInstance,\n    getSideBar\n  },\n  dependantModules: [SideBarCoreModule]\n});\nvar SideBarModule = _defineModule7({\n  version: VERSION7,\n  moduleName: ModuleNames8.SideBarModule,\n  dependantModules: [SideBarCoreModule, SideBarApiModule]\n});\n\n// enterprise-modules/column-tool-panel/dist/package/main.esm.mjs\nimport { Component as Component84, ModuleNames as ModuleNames9, _clearElement as _clearElement9, _last as _last9 } from \"ag-grid-community\";\nimport { Component as Component64, PositionableFeature as PositionableFeature3, RefPlaceholder as RefPlaceholder44 } from \"ag-grid-community\";\nimport {\n  AgCheckboxSelector as AgCheckboxSelector4,\n  AgInputTextFieldSelector as AgInputTextFieldSelector4,\n  Component as Component49,\n  KeyCode as KeyCode18,\n  RefPlaceholder as RefPlaceholder26,\n  _createIconNoSpan as _createIconNoSpan13,\n  _debounce as _debounce2,\n  _setDisplayed as _setDisplayed10\n} from \"ag-grid-community\";\nimport {\n  Component as Component54,\n  _exists as _exists12,\n  _includes as _includes10,\n  _setAriaLabel as _setAriaLabel33,\n  _setAriaLevel as _setAriaLevel3,\n  _warnOnce as _warnOnce25,\n  isProvidedColumnGroup as isProvidedColumnGroup3\n} from \"ag-grid-community\";\nimport { LocalEventService } from \"ag-grid-community\";\nimport { BeanStub as BeanStub20, DragSourceType as DragSourceType23, isProvidedColumnGroup as isProvidedColumnGroup2 } from \"ag-grid-community\";\nimport {\n  AgCheckboxSelector as AgCheckboxSelector23,\n  Component as Component311,\n  DragSourceType as DragSourceType5,\n  KeyCode as KeyCode24,\n  RefPlaceholder as RefPlaceholder27,\n  TouchListener as TouchListener2,\n  _createIcon as _createIcon2,\n  _createIconNoSpan as _createIconNoSpan34,\n  _getToolPanelClassesFromColDef,\n  _setAriaDescribedBy as _setAriaDescribedBy2,\n  _setAriaExpanded as _setAriaExpanded7,\n  _setAriaLabel as _setAriaLabel8,\n  _setDisplayed as _setDisplayed24\n} from \"ag-grid-community\";\nimport { Component as Component211, _createIconNoSpan as _createIconNoSpan25, isColumn, isProvidedColumnGroup as isProvidedColumnGroup4 } from \"ag-grid-community\";\nimport {\n  AgCheckboxSelector as AgCheckboxSelector32,\n  Component as Component410,\n  DragSourceType as DragSourceType32,\n  KeyCode as KeyCode33,\n  RefPlaceholder as RefPlaceholder35,\n  _createIconNoSpan as _createIconNoSpan42,\n  _escapeString as _escapeString6,\n  _getToolPanelClassesFromColDef as _getToolPanelClassesFromColDef2,\n  _setAriaDescribedBy as _setAriaDescribedBy22,\n  _setAriaLabel as _setAriaLabel23,\n  _setDisplayed as _setDisplayed34,\n  _warnOnce as _warnOnce21\n} from \"ag-grid-community\";\nimport { AgToggleButtonSelector, Component as Component74, RefPlaceholder as RefPlaceholder54 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub26 } from \"ag-grid-community\";\nvar DEBOUNCE_DELAY = 300;\nvar AgPrimaryColsHeader = class extends Component49 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-column-select-header\" role=\"presentation\">\n            <div data-ref=\"eExpand\" class=\"ag-column-select-header-icon\"></div>\n            <ag-checkbox data-ref=\"eSelect\" class=\"ag-column-select-header-checkbox\"></ag-checkbox>\n            <ag-input-text-field class=\"ag-column-select-header-filter-wrapper\" data-ref=\"eFilterTextField\"></ag-input-text-field>\n        </div>`,\n      [AgCheckboxSelector4, AgInputTextFieldSelector4]\n    );\n    this.eExpand = RefPlaceholder26;\n    this.eSelect = RefPlaceholder26;\n    this.eFilterTextField = RefPlaceholder26;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n  }\n  postConstruct() {\n    this.createExpandIcons();\n    this.addManagedListeners(this.eExpand, {\n      click: this.onExpandClicked.bind(this),\n      keydown: (e) => {\n        if (e.key === KeyCode18.SPACE) {\n          e.preventDefault();\n          this.onExpandClicked();\n        }\n      }\n    });\n    this.addManagedElementListeners(this.eSelect.getInputElement(), { click: this.onSelectClicked.bind(this) });\n    this.addManagedPropertyListener(\"functionsReadOnly\", () => this.onFunctionsReadOnlyPropChanged());\n    this.eFilterTextField.setAutoComplete(false).onValueChange(() => this.onFilterTextChanged());\n    this.addManagedElementListeners(this.eFilterTextField.getInputElement(), {\n      keydown: this.onMiniFilterKeyDown.bind(this)\n    });\n    this.addManagedEventListeners({ newColumnsLoaded: this.showOrHideOptions.bind(this) });\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eSelect.setInputAriaLabel(translate(\"ariaColumnSelectAll\", \"Toggle All Columns Visibility\"));\n    this.eFilterTextField.setInputAriaLabel(translate(\"ariaFilterColumnsInput\", \"Filter Columns Input\"));\n    this.activateTabIndex([this.eExpand]);\n  }\n  onFunctionsReadOnlyPropChanged() {\n    const readOnly = this.gos.get(\"functionsReadOnly\");\n    this.eSelect.setReadOnly(readOnly);\n    this.eSelect.addOrRemoveCssClass(\"ag-column-select-column-readonly\", readOnly);\n  }\n  init(params) {\n    this.params = params;\n    const readOnly = this.gos.get(\"functionsReadOnly\");\n    this.eSelect.setReadOnly(readOnly);\n    this.eSelect.addOrRemoveCssClass(\"ag-column-select-column-readonly\", readOnly);\n    if (this.columnModel.isReady()) {\n      this.showOrHideOptions();\n    }\n  }\n  createExpandIcons() {\n    this.eExpand.appendChild(this.eExpandChecked = _createIconNoSpan13(\"columnSelectOpen\", this.gos));\n    this.eExpand.appendChild(this.eExpandUnchecked = _createIconNoSpan13(\"columnSelectClosed\", this.gos));\n    this.eExpand.appendChild(\n      this.eExpandIndeterminate = _createIconNoSpan13(\"columnSelectIndeterminate\", this.gos)\n    );\n    this.setExpandState(\n      0\n      /* EXPANDED */\n    );\n  }\n  // we only show expand / collapse if we are showing columns\n  showOrHideOptions() {\n    const showFilter = !this.params.suppressColumnFilter;\n    const showSelect = !this.params.suppressColumnSelectAll;\n    const showExpand = !this.params.suppressColumnExpandAll;\n    const groupsPresent = this.columnModel.isProvidedColGroupsPresent();\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eFilterTextField.setInputPlaceholder(translate(\"searchOoo\", \"Search...\"));\n    _setDisplayed10(this.eFilterTextField.getGui(), showFilter);\n    _setDisplayed10(this.eSelect.getGui(), showSelect);\n    _setDisplayed10(this.eExpand, showExpand && groupsPresent);\n  }\n  onFilterTextChanged() {\n    if (!this.onFilterTextChangedDebounced) {\n      this.onFilterTextChangedDebounced = _debounce2(() => {\n        const filterText = this.eFilterTextField.getValue();\n        this.dispatchLocalEvent({ type: \"filterChanged\", filterText });\n      }, DEBOUNCE_DELAY);\n    }\n    this.onFilterTextChangedDebounced();\n  }\n  onMiniFilterKeyDown(e) {\n    if (e.key === KeyCode18.ENTER) {\n      setTimeout(() => this.onSelectClicked(), DEBOUNCE_DELAY);\n    }\n  }\n  onSelectClicked() {\n    this.dispatchLocalEvent({ type: this.selectState ? \"unselectAll\" : \"selectAll\" });\n  }\n  onExpandClicked() {\n    this.dispatchLocalEvent({ type: this.expandState === 0 ? \"collapseAll\" : \"expandAll\" });\n  }\n  setExpandState(state) {\n    this.expandState = state;\n    _setDisplayed10(\n      this.eExpandChecked,\n      this.expandState === 0\n      /* EXPANDED */\n    );\n    _setDisplayed10(\n      this.eExpandUnchecked,\n      this.expandState === 1\n      /* COLLAPSED */\n    );\n    _setDisplayed10(\n      this.eExpandIndeterminate,\n      this.expandState === 2\n      /* INDETERMINATE */\n    );\n  }\n  setSelectionState(state) {\n    this.selectState = state;\n    this.eSelect.setValue(this.selectState);\n  }\n};\nvar AgPrimaryColsHeaderSelector = {\n  selector: \"AG-PRIMARY-COLS-HEADER\",\n  component: AgPrimaryColsHeader\n};\nvar ColumnModelItem = class {\n  constructor(displayName, columnOrGroup, dept, group = false, expanded) {\n    this.localEventService = new LocalEventService();\n    this.displayName = displayName;\n    this.dept = dept;\n    this.group = group;\n    if (group) {\n      this.columnGroup = columnOrGroup;\n      this.expanded = expanded;\n      this.children = [];\n    } else {\n      this.column = columnOrGroup;\n    }\n  }\n  isGroup() {\n    return this.group;\n  }\n  getDisplayName() {\n    return this.displayName;\n  }\n  getColumnGroup() {\n    return this.columnGroup;\n  }\n  getColumn() {\n    return this.column;\n  }\n  getDept() {\n    return this.dept;\n  }\n  isExpanded() {\n    return !!this.expanded;\n  }\n  getChildren() {\n    return this.children;\n  }\n  isPassesFilter() {\n    return this.passesFilter;\n  }\n  setExpanded(expanded) {\n    if (expanded === this.expanded) {\n      return;\n    }\n    this.expanded = expanded;\n    this.localEventService.dispatchEvent({ type: \"expandedChanged\" });\n  }\n  setPassesFilter(passesFilter) {\n    this.passesFilter = passesFilter;\n  }\n  addEventListener(eventType, listener) {\n    this.localEventService.addEventListener(eventType, listener);\n  }\n  removeEventListener(eventType, listener) {\n    this.localEventService.removeEventListener(eventType, listener);\n  }\n};\nvar ToolPanelContextMenu = class extends Component211 {\n  constructor(column, mouseEvent, parentEl) {\n    super(\n      /* html */\n      `<div class=\"ag-menu\"></div>`\n    );\n    this.column = column;\n    this.mouseEvent = mouseEvent;\n    this.parentEl = parentEl;\n    this.displayName = null;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.funcColsService = beans.funcColsService;\n    this.popupService = beans.popupService;\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    this.initializeProperties(this.column);\n    this.buildMenuItemMap();\n    if (isColumn(this.column)) {\n      this.displayName = this.columnNameService.getDisplayNameForColumn(this.column, \"columnToolPanel\");\n    } else {\n      this.displayName = this.columnNameService.getDisplayNameForProvidedColumnGroup(\n        null,\n        this.column,\n        \"columnToolPanel\"\n      );\n    }\n    if (this.isActive()) {\n      this.mouseEvent.preventDefault();\n      const menuItemsMapped = this.getMappedMenuItems();\n      if (menuItemsMapped.length === 0) {\n        return;\n      }\n      this.displayContextMenu(menuItemsMapped);\n    }\n  }\n  initializeProperties(column) {\n    if (isProvidedColumnGroup4(column)) {\n      this.columns = column.getLeafColumns();\n    } else {\n      this.columns = [column];\n    }\n    this.allowGrouping = this.columns.some((col) => col.isPrimary() && col.isAllowRowGroup());\n    this.allowValues = this.columns.some((col) => col.isPrimary() && col.isAllowValue());\n    this.allowPivoting = this.columnModel.isPivotMode() && this.columns.some((col) => col.isPrimary() && col.isAllowPivot());\n  }\n  buildMenuItemMap() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    this.menuItemMap = /* @__PURE__ */ new Map();\n    this.menuItemMap.set(\"rowGroup\", {\n      allowedFunction: (col) => col.isPrimary() && col.isAllowRowGroup() && !this.columnModel.isColGroupLocked(col),\n      activeFunction: (col) => col.isRowGroupActive(),\n      activateLabel: () => `${localeTextFunc(\"groupBy\", \"Group by\")} ${this.displayName}`,\n      deactivateLabel: () => `${localeTextFunc(\"ungroupBy\", \"Un-Group by\")} ${this.displayName}`,\n      activateFunction: () => {\n        const groupedColumns = this.funcColsService.getRowGroupColumns();\n        this.funcColsService.setRowGroupColumns(this.addColumnsToList(groupedColumns), \"toolPanelUi\");\n      },\n      deActivateFunction: () => {\n        const groupedColumns = this.funcColsService.getRowGroupColumns();\n        this.funcColsService.setRowGroupColumns(this.removeColumnsFromList(groupedColumns), \"toolPanelUi\");\n      },\n      addIcon: \"menuAddRowGroup\",\n      removeIcon: \"menuRemoveRowGroup\"\n    });\n    this.menuItemMap.set(\"value\", {\n      allowedFunction: (col) => col.isPrimary() && col.isAllowValue(),\n      activeFunction: (col) => col.isValueActive(),\n      activateLabel: () => localeTextFunc(\"addToValues\", `Add ${this.displayName} to values`, [this.displayName]),\n      deactivateLabel: () => localeTextFunc(\"removeFromValues\", `Remove ${this.displayName} from values`, [this.displayName]),\n      activateFunction: () => {\n        const valueColumns = this.funcColsService.getValueColumns();\n        this.funcColsService.setValueColumns(this.addColumnsToList(valueColumns), \"toolPanelUi\");\n      },\n      deActivateFunction: () => {\n        const valueColumns = this.funcColsService.getValueColumns();\n        this.funcColsService.setValueColumns(this.removeColumnsFromList(valueColumns), \"toolPanelUi\");\n      },\n      addIcon: \"valuePanel\",\n      removeIcon: \"valuePanel\"\n    });\n    this.menuItemMap.set(\"pivot\", {\n      allowedFunction: (col) => this.columnModel.isPivotMode() && col.isPrimary() && col.isAllowPivot(),\n      activeFunction: (col) => col.isPivotActive(),\n      activateLabel: () => localeTextFunc(\"addToLabels\", `Add ${this.displayName} to labels`, [this.displayName]),\n      deactivateLabel: () => localeTextFunc(\"removeFromLabels\", `Remove ${this.displayName} from labels`, [this.displayName]),\n      activateFunction: () => {\n        const pivotColumns = this.funcColsService.getPivotColumns();\n        this.funcColsService.setPivotColumns(this.addColumnsToList(pivotColumns), \"toolPanelUi\");\n      },\n      deActivateFunction: () => {\n        const pivotColumns = this.funcColsService.getPivotColumns();\n        this.funcColsService.setPivotColumns(this.removeColumnsFromList(pivotColumns), \"toolPanelUi\");\n      },\n      addIcon: \"pivotPanel\",\n      removeIcon: \"pivotPanel\"\n    });\n  }\n  addColumnsToList(columnList) {\n    return [...columnList].concat(this.columns.filter((col) => columnList.indexOf(col) === -1));\n  }\n  removeColumnsFromList(columnList) {\n    return columnList.filter((col) => this.columns.indexOf(col) === -1);\n  }\n  displayContextMenu(menuItemsMapped) {\n    const eGui = this.getGui();\n    const menuList = this.createBean(new AgMenuList());\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    let hideFunc = () => {\n    };\n    eGui.appendChild(menuList.getGui());\n    menuList.addMenuItems(menuItemsMapped);\n    menuList.addManagedListeners(menuList, {\n      closeMenu: () => {\n        this.parentEl.focus();\n        hideFunc();\n      }\n    });\n    const addPopupRes = this.popupService.addPopup({\n      modal: true,\n      eChild: eGui,\n      closeOnEsc: true,\n      afterGuiAttached: () => this.focusService.focusInto(menuList.getGui()),\n      ariaLabel: localeTextFunc(\"ariaLabelContextMenu\", \"Context Menu\"),\n      closedCallback: (e) => {\n        if (e instanceof KeyboardEvent) {\n          this.parentEl.focus();\n        }\n        this.destroyBean(menuList);\n      }\n    });\n    if (addPopupRes) {\n      hideFunc = addPopupRes.hideFunc;\n    }\n    this.popupService.positionPopupUnderMouseEvent({\n      type: \"columnContextMenu\",\n      mouseEvent: this.mouseEvent,\n      ePopup: eGui\n    });\n  }\n  isActive() {\n    return this.allowGrouping || this.allowValues || this.allowPivoting;\n  }\n  getMappedMenuItems() {\n    const ret = [];\n    for (const val of this.menuItemMap.values()) {\n      const isInactive = this.columns.some((col) => val.allowedFunction(col) && !val.activeFunction(col));\n      const isActive = this.columns.some((col) => val.allowedFunction(col) && val.activeFunction(col));\n      if (isInactive) {\n        ret.push({\n          name: val.activateLabel(this.displayName),\n          icon: _createIconNoSpan25(val.addIcon, this.gos, null),\n          action: () => val.activateFunction()\n        });\n      }\n      if (isActive) {\n        ret.push({\n          name: val.deactivateLabel(this.displayName),\n          icon: _createIconNoSpan25(val.removeIcon, this.gos, null),\n          action: () => val.deActivateFunction()\n        });\n      }\n    }\n    return ret;\n  }\n};\nvar ToolPanelColumnGroupComp = class extends Component311 {\n  constructor(modelItem, allowDragging, eventType, focusWrapper) {\n    super();\n    this.modelItem = modelItem;\n    this.allowDragging = allowDragging;\n    this.eventType = eventType;\n    this.focusWrapper = focusWrapper;\n    this.cbSelect = RefPlaceholder27;\n    this.eLabel = RefPlaceholder27;\n    this.eGroupOpenedIcon = RefPlaceholder27;\n    this.eGroupClosedIcon = RefPlaceholder27;\n    this.eColumnGroupIcons = RefPlaceholder27;\n    this.processingColumnStateChange = false;\n    this.modelItem = modelItem;\n    this.columnGroup = modelItem.getColumnGroup();\n    this.columnDept = modelItem.getDept();\n    this.displayName = modelItem.getDisplayName();\n    this.allowDragging = allowDragging;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.dragAndDropService = beans.dragAndDropService;\n    this.modelItemUtils = beans.modelItemUtils;\n  }\n  postConstruct() {\n    this.setTemplate(\n      /* html */\n      `<div class=\"ag-column-select-column-group\">\n                <span class=\"ag-column-group-icons\" data-ref=\"eColumnGroupIcons\" >\n                    <span class=\"ag-column-group-closed-icon\" data-ref=\"eGroupClosedIcon\"></span>\n                    <span class=\"ag-column-group-opened-icon\" data-ref=\"eGroupOpenedIcon\"></span>\n                </span>\n                <ag-checkbox data-ref=\"cbSelect\" class=\"ag-column-select-checkbox\"></ag-checkbox>\n                <span class=\"ag-column-select-column-label\" data-ref=\"eLabel\"></span>\n            </div>`,\n      [AgCheckboxSelector23]\n    );\n    this.eDragHandle = _createIconNoSpan34(\"columnDrag\", this.gos);\n    this.eDragHandle.classList.add(\"ag-drag-handle\", \"ag-column-select-column-group-drag-handle\");\n    const checkboxGui = this.cbSelect.getGui();\n    const checkboxInput = this.cbSelect.getInputElement();\n    checkboxGui.insertAdjacentElement(\"afterend\", this.eDragHandle);\n    checkboxInput.setAttribute(\"tabindex\", \"-1\");\n    this.eLabel.innerHTML = this.displayName ? this.displayName : \"\";\n    this.setupExpandContract();\n    this.addCssClass(\"ag-column-select-indent-\" + this.columnDept);\n    this.getGui().style.setProperty(\"--ag-indentation-level\", String(this.columnDept));\n    this.addManagedEventListeners({ columnPivotModeChanged: this.onColumnStateChanged.bind(this) });\n    this.addManagedElementListeners(this.eLabel, { click: this.onLabelClicked.bind(this) });\n    this.addManagedListeners(this.cbSelect, { fieldValueChanged: this.onCheckboxChanged.bind(this) });\n    this.addManagedListeners(this.modelItem, { expandedChanged: this.onExpandChanged.bind(this) });\n    this.addManagedListeners(this.focusWrapper, {\n      keydown: this.handleKeyDown.bind(this),\n      contextmenu: this.onContextMenu.bind(this)\n    });\n    this.setOpenClosedIcons();\n    this.setupDragging();\n    this.onColumnStateChanged();\n    this.addVisibilityListenersToAllChildren();\n    this.refreshAriaExpanded();\n    this.refreshAriaLabel();\n    this.setupTooltip();\n    const classes = _getToolPanelClassesFromColDef(\n      this.columnGroup.getColGroupDef(),\n      this.gos,\n      null,\n      this.columnGroup\n    );\n    classes.forEach((c) => this.addOrRemoveCssClass(c, true));\n  }\n  getColumns() {\n    return this.columnGroup.getLeafColumns();\n  }\n  setupTooltip() {\n    const colGroupDef = this.columnGroup.getColGroupDef();\n    if (!colGroupDef) {\n      return;\n    }\n    const isTooltipWhenTruncated = this.gos.get(\"tooltipShowMode\") === \"whenTruncated\";\n    let shouldDisplayTooltip;\n    if (isTooltipWhenTruncated) {\n      shouldDisplayTooltip = () => this.eLabel.scrollWidth > this.eLabel.clientWidth;\n    }\n    const refresh = () => {\n      const newTooltipText = colGroupDef.headerTooltip;\n      this.setTooltip({ newTooltipText, location: \"columnToolPanelColumnGroup\", shouldDisplayTooltip });\n    };\n    refresh();\n    this.addManagedEventListeners({ newColumnsLoaded: refresh });\n  }\n  getTooltipParams() {\n    const res = super.getTooltipParams();\n    res.location = \"columnToolPanelColumnGroup\";\n    return res;\n  }\n  handleKeyDown(e) {\n    switch (e.key) {\n      case KeyCode24.LEFT:\n        e.preventDefault();\n        this.modelItem.setExpanded(false);\n        break;\n      case KeyCode24.RIGHT:\n        e.preventDefault();\n        this.modelItem.setExpanded(true);\n        break;\n      case KeyCode24.SPACE:\n        e.preventDefault();\n        if (this.isSelectable()) {\n          this.onSelectAllChanged(!this.isSelected());\n        }\n        break;\n    }\n  }\n  onContextMenu(e) {\n    const { columnGroup, gos } = this;\n    if (gos.get(\"functionsReadOnly\")) {\n      return;\n    }\n    const contextMenu = this.createBean(new ToolPanelContextMenu(columnGroup, e, this.focusWrapper));\n    this.addDestroyFunc(() => {\n      if (contextMenu.isAlive()) {\n        this.destroyBean(contextMenu);\n      }\n    });\n  }\n  addVisibilityListenersToAllChildren() {\n    const listener = this.onColumnStateChanged.bind(this);\n    this.columnGroup.getLeafColumns().forEach((column) => {\n      this.addManagedListeners(column, {\n        visibleChanged: listener,\n        columnValueChanged: listener,\n        columnPivotChanged: listener,\n        columnRowGroupChanged: listener\n      });\n    });\n  }\n  setupDragging() {\n    if (!this.allowDragging) {\n      _setDisplayed24(this.eDragHandle, false);\n      return;\n    }\n    let hideColumnOnExit = !this.gos.get(\"suppressDragLeaveHidesColumns\");\n    const dragSource = {\n      type: DragSourceType5.ToolPanel,\n      eElement: this.eDragHandle,\n      dragItemName: this.displayName,\n      getDefaultIconName: () => hideColumnOnExit ? \"hide\" : \"notAllowed\",\n      getDragItem: () => this.createDragItem(),\n      onDragStarted: () => {\n        hideColumnOnExit = !this.gos.get(\"suppressDragLeaveHidesColumns\");\n        this.eventService.dispatchEvent({\n          type: \"columnPanelItemDragStart\",\n          column: this.columnGroup\n        });\n      },\n      onDragStopped: () => {\n        this.eventService.dispatchEvent({\n          type: \"columnPanelItemDragEnd\"\n        });\n      },\n      onGridEnter: (dragItem) => {\n        if (hideColumnOnExit) {\n          this.modelItemUtils.updateColumns({\n            columns: this.columnGroup.getLeafColumns(),\n            visibleState: dragItem?.visibleState,\n            pivotState: dragItem?.pivotState,\n            eventType: this.eventType\n          });\n        }\n      },\n      onGridExit: () => {\n        if (hideColumnOnExit) {\n          this.onChangeCommon(false);\n        }\n      }\n    };\n    this.dragAndDropService.addDragSource(dragSource, true);\n    this.addDestroyFunc(() => this.dragAndDropService.removeDragSource(dragSource));\n  }\n  createDragItem() {\n    const columns = this.columnGroup.getLeafColumns();\n    const visibleState = {};\n    const pivotState = {};\n    columns.forEach((col) => {\n      const colId = col.getId();\n      visibleState[colId] = col.isVisible();\n      pivotState[colId] = this.modelItemUtils.createPivotState(col);\n    });\n    return {\n      columns,\n      visibleState,\n      pivotState\n    };\n  }\n  setupExpandContract() {\n    this.eGroupClosedIcon.appendChild(_createIcon2(\"columnSelectClosed\", this.gos, null));\n    this.eGroupOpenedIcon.appendChild(_createIcon2(\"columnSelectOpen\", this.gos, null));\n    const listener = this.onExpandOrContractClicked.bind(this);\n    this.addManagedElementListeners(this.eGroupClosedIcon, { click: listener });\n    this.addManagedElementListeners(this.eGroupOpenedIcon, { click: listener });\n    const touchListener = new TouchListener2(this.eColumnGroupIcons, true);\n    this.addManagedListeners(touchListener, { tap: listener });\n    this.addDestroyFunc(touchListener.destroy.bind(touchListener));\n  }\n  onLabelClicked() {\n    const nextState = !this.cbSelect.getValue();\n    this.onChangeCommon(nextState);\n  }\n  onCheckboxChanged(event) {\n    this.onChangeCommon(event.selected);\n  }\n  getVisibleLeafColumns() {\n    const childColumns = [];\n    const extractCols = (children) => {\n      children.forEach((child) => {\n        if (!child.isPassesFilter()) {\n          return;\n        }\n        if (child.isGroup()) {\n          extractCols(child.getChildren());\n        } else {\n          childColumns.push(child.getColumn());\n        }\n      });\n    };\n    extractCols(this.modelItem.getChildren());\n    return childColumns;\n  }\n  onChangeCommon(nextState) {\n    this.refreshAriaLabel();\n    if (this.processingColumnStateChange) {\n      return;\n    }\n    this.modelItemUtils.selectAllChildren(this.modelItem.getChildren(), nextState, this.eventType);\n  }\n  refreshAriaLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const columnLabel = translate(\"ariaColumnGroup\", \"Column Group\");\n    const checkboxValue = this.cbSelect.getValue();\n    const state = checkboxValue === void 0 ? translate(\"ariaIndeterminate\", \"indeterminate\") : checkboxValue ? translate(\"ariaVisible\", \"visible\") : translate(\"ariaHidden\", \"hidden\");\n    const visibilityLabel = translate(\"ariaToggleVisibility\", \"Press SPACE to toggle visibility\");\n    _setAriaLabel8(this.focusWrapper, `${this.displayName} ${columnLabel}`);\n    this.cbSelect.setInputAriaLabel(`${visibilityLabel} (${state})`);\n    _setAriaDescribedBy2(this.focusWrapper, this.cbSelect.getInputElement().id);\n  }\n  onColumnStateChanged() {\n    const selectedValue = this.workOutSelectedValue();\n    const readOnlyValue = this.workOutReadOnlyValue();\n    this.processingColumnStateChange = true;\n    this.cbSelect.setValue(selectedValue);\n    this.cbSelect.setReadOnly(readOnlyValue);\n    this.addOrRemoveCssClass(\"ag-column-select-column-group-readonly\", readOnlyValue);\n    this.processingColumnStateChange = false;\n  }\n  workOutSelectedValue() {\n    const pivotMode = this.columnModel.isPivotMode();\n    const visibleLeafColumns = this.getVisibleLeafColumns();\n    let checkedCount = 0;\n    let uncheckedCount = 0;\n    visibleLeafColumns.forEach((column) => {\n      if (!pivotMode && column.getColDef().lockVisible) {\n        return;\n      }\n      if (this.isColumnChecked(column, pivotMode)) {\n        checkedCount++;\n      } else {\n        uncheckedCount++;\n      }\n    });\n    if (checkedCount > 0 && uncheckedCount > 0) {\n      return void 0;\n    }\n    return checkedCount > 0;\n  }\n  workOutReadOnlyValue() {\n    const pivotMode = this.columnModel.isPivotMode();\n    let colsThatCanAction = 0;\n    this.columnGroup.getLeafColumns().forEach((col) => {\n      if (pivotMode) {\n        if (col.isAnyFunctionAllowed()) {\n          colsThatCanAction++;\n        }\n      } else {\n        if (!col.getColDef().lockVisible) {\n          colsThatCanAction++;\n        }\n      }\n    });\n    return colsThatCanAction === 0;\n  }\n  isColumnChecked(column, pivotMode) {\n    if (pivotMode) {\n      const pivoted = column.isPivotActive();\n      const grouped = column.isRowGroupActive();\n      const aggregated = column.isValueActive();\n      return pivoted || grouped || aggregated;\n    }\n    return column.isVisible();\n  }\n  onExpandOrContractClicked() {\n    const oldState = this.modelItem.isExpanded();\n    this.modelItem.setExpanded(!oldState);\n  }\n  onExpandChanged() {\n    this.setOpenClosedIcons();\n    this.refreshAriaExpanded();\n  }\n  setOpenClosedIcons() {\n    const folderOpen = this.modelItem.isExpanded();\n    _setDisplayed24(this.eGroupClosedIcon, !folderOpen);\n    _setDisplayed24(this.eGroupOpenedIcon, folderOpen);\n  }\n  refreshAriaExpanded() {\n    _setAriaExpanded7(this.focusWrapper, this.modelItem.isExpanded());\n  }\n  getDisplayName() {\n    return this.displayName;\n  }\n  onSelectAllChanged(value) {\n    const cbValue = this.cbSelect.getValue();\n    const readOnly = this.cbSelect.isReadOnly();\n    if (!readOnly && (value && !cbValue || !value && cbValue)) {\n      this.cbSelect.toggle();\n    }\n  }\n  isSelected() {\n    return this.cbSelect.getValue();\n  }\n  isSelectable() {\n    return !this.cbSelect.isReadOnly();\n  }\n  setSelected(selected) {\n    this.cbSelect.setValue(selected, true);\n  }\n};\nvar PrimaryColsListPanelItemDragFeature = class extends BeanStub20 {\n  constructor(comp, virtualList) {\n    super();\n    this.comp = comp;\n    this.virtualList = virtualList;\n  }\n  wireBeans(beans) {\n    this.columnMoveService = beans.columnMoveService;\n    this.columnModel = beans.columnModel;\n  }\n  postConstruct() {\n    this.createManagedBean(\n      new VirtualListDragFeature(this.comp, this.virtualList, {\n        dragSourceType: DragSourceType23.ToolPanel,\n        listItemDragStartEvent: \"columnPanelItemDragStart\",\n        listItemDragEndEvent: \"columnPanelItemDragEnd\",\n        eventSource: this.eventService,\n        getCurrentDragValue: (listItemDragStartEvent) => this.getCurrentDragValue(listItemDragStartEvent),\n        isMoveBlocked: (currentDragValue) => this.isMoveBlocked(currentDragValue),\n        getNumRows: (comp) => comp.getDisplayedColsList().length,\n        moveItem: (currentDragValue, lastHoveredListItem) => this.moveItem(this.getCurrentColumnsBeingMoved(currentDragValue), lastHoveredListItem)\n      })\n    );\n  }\n  getCurrentDragValue(listItemDragStartEvent) {\n    return listItemDragStartEvent.column;\n  }\n  getCurrentColumnsBeingMoved(column) {\n    if (isProvidedColumnGroup2(column)) {\n      return column.getLeafColumns();\n    }\n    return column ? [column] : [];\n  }\n  isMoveBlocked(currentDragValue) {\n    const preventMoving = this.gos.get(\"suppressMovableColumns\");\n    if (preventMoving) {\n      return true;\n    }\n    const currentColumns = this.getCurrentColumnsBeingMoved(currentDragValue);\n    const hasNotMovable = currentColumns.find((col) => {\n      const colDef = col.getColDef();\n      return !!colDef.suppressMovable || !!colDef.lockPosition;\n    });\n    return !!hasNotMovable;\n  }\n  moveItem(currentColumns, lastHoveredListItem) {\n    if (!lastHoveredListItem) {\n      return;\n    }\n    const { component } = lastHoveredListItem;\n    let lastHoveredColumn = null;\n    let isBefore = lastHoveredListItem.position === \"top\";\n    if (component instanceof ToolPanelColumnGroupComp) {\n      const columns = component.getColumns();\n      lastHoveredColumn = columns[0];\n      isBefore = true;\n    } else if (component) {\n      lastHoveredColumn = component.getColumn();\n    }\n    if (!lastHoveredColumn) {\n      return;\n    }\n    const targetIndex = this.getMoveTargetIndex({\n      currentColumns,\n      lastHoveredColumn,\n      isBefore\n    });\n    if (targetIndex != null) {\n      this.columnMoveService.moveColumns(currentColumns, targetIndex, \"toolPanelUi\");\n    }\n  }\n  getMoveTargetIndex(params) {\n    const { currentColumns, lastHoveredColumn, isBefore } = params;\n    if (!lastHoveredColumn || !currentColumns) {\n      return null;\n    }\n    const targetColumnIndex = this.columnModel.getCols().indexOf(lastHoveredColumn);\n    const adjustedTarget = isBefore ? targetColumnIndex : targetColumnIndex + 1;\n    const diff = this.getMoveDiff(currentColumns, adjustedTarget);\n    return adjustedTarget - diff;\n  }\n  getMoveDiff(currentColumns, end) {\n    const allColumns = this.columnModel.getCols();\n    if (!currentColumns) {\n      return 0;\n    }\n    const targetColumn = currentColumns[0];\n    const span = currentColumns.length;\n    const currentIndex = allColumns.indexOf(targetColumn);\n    if (currentIndex < end) {\n      return span;\n    }\n    return 0;\n  }\n};\nvar ToolPanelColumnComp = class extends Component410 {\n  constructor(modelItem, allowDragging, groupsExist, focusWrapper) {\n    super();\n    this.allowDragging = allowDragging;\n    this.groupsExist = groupsExist;\n    this.focusWrapper = focusWrapper;\n    this.eLabel = RefPlaceholder35;\n    this.cbSelect = RefPlaceholder35;\n    this.processingColumnStateChange = false;\n    this.column = modelItem.getColumn();\n    this.columnDept = modelItem.getDept();\n    this.displayName = modelItem.getDisplayName();\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.dragAndDropService = beans.dragAndDropService;\n    this.modelItemUtils = beans.modelItemUtils;\n  }\n  postConstruct() {\n    this.setTemplate(\n      /* html */\n      `<div class=\"ag-column-select-column\">\n                <ag-checkbox data-ref=\"cbSelect\" class=\"ag-column-select-checkbox\"></ag-checkbox>\n                <span class=\"ag-column-select-column-label\" data-ref=\"eLabel\"></span>\n            </div>`,\n      [AgCheckboxSelector32]\n    );\n    this.eDragHandle = _createIconNoSpan42(\"columnDrag\", this.gos);\n    this.eDragHandle.classList.add(\"ag-drag-handle\", \"ag-column-select-column-drag-handle\");\n    const checkboxGui = this.cbSelect.getGui();\n    const checkboxInput = this.cbSelect.getInputElement();\n    checkboxGui.insertAdjacentElement(\"afterend\", this.eDragHandle);\n    checkboxInput.setAttribute(\"tabindex\", \"-1\");\n    const displayNameSanitised = _escapeString6(this.displayName);\n    this.eLabel.innerHTML = displayNameSanitised;\n    const indent = this.columnDept;\n    if (this.groupsExist) {\n      this.addCssClass(\"ag-column-select-add-group-indent\");\n    }\n    this.addCssClass(`ag-column-select-indent-${indent}`);\n    this.getGui().style.setProperty(\"--ag-indentation-level\", String(indent));\n    this.setupDragging();\n    const onColStateChanged = this.onColumnStateChanged.bind(this);\n    this.addManagedEventListeners({ columnPivotModeChanged: onColStateChanged });\n    this.addManagedListeners(this.column, {\n      columnValueChanged: onColStateChanged,\n      columnPivotChanged: onColStateChanged,\n      columnRowGroupChanged: onColStateChanged,\n      visibleChanged: onColStateChanged\n    });\n    this.addManagedListeners(this.focusWrapper, {\n      keydown: this.handleKeyDown.bind(this),\n      contextmenu: this.onContextMenu.bind(this)\n    });\n    this.addManagedPropertyListener(\"functionsReadOnly\", this.onColumnStateChanged.bind(this));\n    this.addManagedListeners(this.cbSelect, { fieldValueChanged: this.onCheckboxChanged.bind(this) });\n    this.addManagedElementListeners(this.eLabel, { click: this.onLabelClicked.bind(this) });\n    this.onColumnStateChanged();\n    this.refreshAriaLabel();\n    this.setupTooltip();\n    const classes = _getToolPanelClassesFromColDef2(this.column.getColDef(), this.gos, this.column, null);\n    classes.forEach((c) => this.addOrRemoveCssClass(c, true));\n  }\n  getColumn() {\n    return this.column;\n  }\n  setupTooltip() {\n    const isTooltipWhenTruncated = this.gos.get(\"tooltipShowMode\") === \"whenTruncated\";\n    let shouldDisplayTooltip;\n    if (isTooltipWhenTruncated) {\n      shouldDisplayTooltip = () => this.eLabel.scrollWidth > this.eLabel.clientWidth;\n    }\n    const refresh = () => {\n      const newTooltipText = this.column.getColDef().headerTooltip;\n      this.setTooltip({ newTooltipText, location: \"columnToolPanelColumn\", shouldDisplayTooltip });\n    };\n    refresh();\n    this.addManagedEventListeners({ newColumnsLoaded: refresh });\n  }\n  getTooltipParams() {\n    const res = super.getTooltipParams();\n    res.location = \"columnToolPanelColumn\";\n    res.colDef = this.column.getColDef();\n    return res;\n  }\n  onContextMenu(e) {\n    const { column, gos } = this;\n    if (gos.get(\"functionsReadOnly\")) {\n      return;\n    }\n    const contextMenu = this.createBean(new ToolPanelContextMenu(column, e, this.focusWrapper));\n    this.addDestroyFunc(() => {\n      if (contextMenu.isAlive()) {\n        this.destroyBean(contextMenu);\n      }\n    });\n  }\n  handleKeyDown(e) {\n    if (e.key === KeyCode33.SPACE) {\n      e.preventDefault();\n      if (this.isSelectable()) {\n        this.onSelectAllChanged(!this.isSelected());\n      }\n    }\n  }\n  onLabelClicked() {\n    if (this.gos.get(\"functionsReadOnly\")) {\n      return;\n    }\n    const nextState = !this.cbSelect.getValue();\n    this.onChangeCommon(nextState);\n  }\n  onCheckboxChanged(event) {\n    this.onChangeCommon(event.selected);\n  }\n  onChangeCommon(nextState) {\n    if (this.cbSelect.isReadOnly()) {\n      return;\n    }\n    this.refreshAriaLabel();\n    if (this.processingColumnStateChange) {\n      return;\n    }\n    this.modelItemUtils.setColumn(this.column, nextState, \"toolPanelUi\");\n  }\n  refreshAriaLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const columnLabel = translate(\"ariaColumn\", \"Column\");\n    const state = this.cbSelect.getValue() ? translate(\"ariaVisible\", \"visible\") : translate(\"ariaHidden\", \"hidden\");\n    const visibilityLabel = translate(\"ariaToggleVisibility\", \"Press SPACE to toggle visibility\");\n    _setAriaLabel23(this.focusWrapper, `${this.displayName} ${columnLabel}`);\n    this.cbSelect.setInputAriaLabel(`${visibilityLabel} (${state})`);\n    _setAriaDescribedBy22(this.focusWrapper, this.cbSelect.getInputElement().id);\n  }\n  setupDragging() {\n    if (!this.allowDragging) {\n      _setDisplayed34(this.eDragHandle, false);\n      return;\n    }\n    let hideColumnOnExit = !this.gos.get(\"suppressDragLeaveHidesColumns\");\n    const dragSource = {\n      type: DragSourceType32.ToolPanel,\n      eElement: this.eDragHandle,\n      dragItemName: this.displayName,\n      getDefaultIconName: () => hideColumnOnExit ? \"hide\" : \"notAllowed\",\n      getDragItem: () => this.createDragItem(),\n      onDragStarted: () => {\n        hideColumnOnExit = !this.gos.get(\"suppressDragLeaveHidesColumns\");\n        this.eventService.dispatchEvent({\n          type: \"columnPanelItemDragStart\",\n          column: this.column\n        });\n      },\n      onDragStopped: () => {\n        this.eventService.dispatchEvent({\n          type: \"columnPanelItemDragEnd\"\n        });\n      },\n      onGridEnter: (dragItem) => {\n        if (hideColumnOnExit) {\n          this.modelItemUtils.updateColumns({\n            columns: [this.column],\n            visibleState: dragItem?.visibleState,\n            pivotState: dragItem?.pivotState,\n            eventType: \"toolPanelUi\"\n          });\n        }\n      },\n      onGridExit: () => {\n        if (hideColumnOnExit) {\n          this.onChangeCommon(false);\n        }\n      }\n    };\n    this.dragAndDropService.addDragSource(dragSource, true);\n    this.addDestroyFunc(() => this.dragAndDropService.removeDragSource(dragSource));\n  }\n  createDragItem() {\n    const colId = this.column.getColId();\n    const visibleState = { [colId]: this.column.isVisible() };\n    const pivotState = { [colId]: this.modelItemUtils.createPivotState(this.column) };\n    return {\n      columns: [this.column],\n      visibleState,\n      pivotState\n    };\n  }\n  onColumnStateChanged() {\n    this.processingColumnStateChange = true;\n    const isPivotMode2 = this.columnModel.isPivotMode();\n    if (isPivotMode2) {\n      const anyFunctionActive = this.column.isAnyFunctionActive();\n      this.cbSelect.setValue(anyFunctionActive);\n    } else {\n      this.cbSelect.setValue(this.column.isVisible());\n    }\n    let canBeToggled = true;\n    let canBeDragged = true;\n    if (isPivotMode2) {\n      const functionsReadOnly = this.gos.get(\"functionsReadOnly\");\n      const noFunctionsAllowed = !this.column.isAnyFunctionAllowed();\n      canBeToggled = !functionsReadOnly && !noFunctionsAllowed;\n      canBeDragged = canBeToggled;\n    } else {\n      const { enableRowGroup, enableValue, lockPosition, suppressMovable, lockVisible } = this.column.getColDef();\n      const forceDraggable = !!enableRowGroup || !!enableValue;\n      const disableDraggable = !!lockPosition || !!suppressMovable;\n      canBeToggled = !lockVisible;\n      canBeDragged = forceDraggable || !disableDraggable;\n    }\n    this.cbSelect.setReadOnly(!canBeToggled);\n    this.eDragHandle.classList.toggle(\"ag-column-select-column-readonly\", !canBeDragged);\n    this.addOrRemoveCssClass(\"ag-column-select-column-readonly\", !canBeDragged && !canBeToggled);\n    this.cbSelect.setPassive(false);\n    this.processingColumnStateChange = false;\n  }\n  getDisplayName() {\n    return this.displayName;\n  }\n  onSelectAllChanged(value) {\n    if (value !== this.cbSelect.getValue()) {\n      if (!this.cbSelect.isReadOnly()) {\n        this.cbSelect.toggle();\n      }\n    }\n  }\n  isSelected() {\n    return this.cbSelect.getValue();\n  }\n  isSelectable() {\n    return !this.cbSelect.isReadOnly();\n  }\n  isExpandable() {\n    return false;\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  setExpanded(_value) {\n    _warnOnce21(\"can not expand a column item that does not represent a column group header\");\n  }\n};\nvar UIColumnModel = class {\n  constructor(items) {\n    this.items = items;\n  }\n  getRowCount() {\n    return this.items.length;\n  }\n  getRow(index) {\n    return this.items[index];\n  }\n};\nvar PRIMARY_COLS_LIST_PANEL_CLASS = \"ag-column-select-list\";\nvar AgPrimaryColsList = class extends Component54 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"${PRIMARY_COLS_LIST_PANEL_CLASS}\" role=\"presentation\"></div>`\n    );\n    this.destroyColumnItemFuncs = [];\n    this.hasLoadedInitialState = false;\n    this.isInitialState = false;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.colDefService = beans.toolPanelColDefService;\n    this.modelItemUtils = beans.modelItemUtils;\n  }\n  destroy() {\n    this.destroyColumnTree();\n    super.destroy();\n  }\n  destroyColumnTree() {\n    this.allColsTree = [];\n    this.destroyColumnItemFuncs.forEach((f) => f());\n    this.destroyColumnItemFuncs = [];\n  }\n  init(params, allowDragging, eventType) {\n    this.params = params;\n    this.allowDragging = allowDragging;\n    this.eventType = eventType;\n    if (!this.params.suppressSyncLayoutWithGrid) {\n      this.addManagedEventListeners({ columnMoved: this.onColumnsChanged.bind(this) });\n    }\n    this.addManagedEventListeners({\n      newColumnsLoaded: this.onColumnsChanged.bind(this)\n    });\n    const listener = this.fireSelectionChangedEvent.bind(this);\n    this.addManagedEventListeners({\n      columnPivotChanged: listener,\n      columnPivotModeChanged: listener,\n      columnRowGroupChanged: listener,\n      columnValueChanged: listener,\n      columnVisible: listener,\n      newColumnsLoaded: listener\n    });\n    this.expandGroupsByDefault = !this.params.contractColumnSelection;\n    this.virtualList = this.createManagedBean(\n      new VirtualList({\n        cssIdentifier: \"column-select\",\n        ariaRole: \"tree\"\n      })\n    );\n    this.appendChild(this.virtualList.getGui());\n    this.virtualList.setComponentCreator((item, listItemElement) => {\n      _setAriaLevel3(listItemElement, item.getDept() + 1);\n      return this.createComponentFromItem(item, listItemElement);\n    });\n    if (this.columnModel.isReady()) {\n      this.onColumnsChanged();\n    }\n    if (this.params.suppressColumnMove) {\n      return;\n    }\n    this.createManagedBean(new PrimaryColsListPanelItemDragFeature(this, this.virtualList));\n  }\n  createComponentFromItem(item, listItemElement) {\n    if (item.isGroup()) {\n      const renderedGroup = new ToolPanelColumnGroupComp(\n        item,\n        this.allowDragging,\n        this.eventType,\n        listItemElement\n      );\n      this.createBean(renderedGroup);\n      return renderedGroup;\n    }\n    const columnComp = new ToolPanelColumnComp(item, this.allowDragging, this.groupsExist, listItemElement);\n    this.createBean(columnComp);\n    return columnComp;\n  }\n  onColumnsChanged() {\n    if (!this.hasLoadedInitialState) {\n      this.hasLoadedInitialState = true;\n      this.isInitialState = !!this.params.initialState;\n    }\n    const expandedStates = this.getExpandedStates();\n    const pivotModeActive = this.columnModel.isPivotMode();\n    const shouldSyncColumnLayoutWithGrid = !this.params.suppressSyncLayoutWithGrid && !pivotModeActive;\n    if (shouldSyncColumnLayoutWithGrid) {\n      this.buildTreeFromWhatGridIsDisplaying();\n    } else {\n      this.buildTreeFromProvidedColumnDefs();\n    }\n    this.setExpandedStates(expandedStates);\n    this.markFilteredColumns();\n    this.flattenAndFilterModel();\n    this.isInitialState = false;\n  }\n  getDisplayedColsList() {\n    return this.displayedColsList;\n  }\n  getExpandedStates() {\n    const res = {};\n    if (this.isInitialState) {\n      const { expandedGroupIds } = this.params.initialState;\n      expandedGroupIds.forEach((id) => {\n        res[id] = true;\n      });\n      return res;\n    }\n    if (!this.allColsTree) {\n      return {};\n    }\n    this.forEachItem((item) => {\n      if (!item.isGroup()) {\n        return;\n      }\n      const colGroup = item.getColumnGroup();\n      if (colGroup) {\n        res[colGroup.getId()] = item.isExpanded();\n      }\n    });\n    return res;\n  }\n  setExpandedStates(states) {\n    if (!this.allColsTree) {\n      return;\n    }\n    const { isInitialState } = this;\n    this.forEachItem((item) => {\n      if (!item.isGroup()) {\n        return;\n      }\n      const colGroup = item.getColumnGroup();\n      if (colGroup) {\n        const expanded = states[colGroup.getId()];\n        const groupExistedLastTime = expanded != null;\n        if (groupExistedLastTime || isInitialState) {\n          item.setExpanded(!!expanded);\n        }\n      }\n    });\n  }\n  buildTreeFromWhatGridIsDisplaying() {\n    this.colDefService.syncLayoutWithGrid(this.setColumnLayout.bind(this));\n  }\n  setColumnLayout(colDefs) {\n    const columnTree = this.colDefService.createColumnTree(colDefs);\n    this.buildListModel(columnTree);\n    this.groupsExist = colDefs.some((colDef) => {\n      return colDef && typeof colDef.children !== \"undefined\";\n    });\n    this.markFilteredColumns();\n    this.flattenAndFilterModel();\n  }\n  buildTreeFromProvidedColumnDefs() {\n    this.buildListModel(this.columnModel.getColDefColTree());\n    this.groupsExist = this.columnModel.isProvidedColGroupsPresent();\n  }\n  buildListModel(columnTree) {\n    const columnExpandedListener = this.onColumnExpanded.bind(this);\n    const addListeners = (item) => {\n      item.addEventListener(\"expandedChanged\", columnExpandedListener);\n      const removeFunc = item.removeEventListener.bind(item, \"expandedChanged\", columnExpandedListener);\n      this.destroyColumnItemFuncs.push(removeFunc);\n    };\n    const recursivelyBuild = (tree, dept, parentList) => {\n      tree.forEach((child) => {\n        if (isProvidedColumnGroup3(child)) {\n          createGroupItem(child, dept, parentList);\n        } else {\n          createColumnItem(child, dept, parentList);\n        }\n      });\n    };\n    const createGroupItem = (columnGroup, dept, parentList) => {\n      const columnGroupDef = columnGroup.getColGroupDef();\n      const skipThisGroup = columnGroupDef && columnGroupDef.suppressColumnsToolPanel;\n      if (skipThisGroup) {\n        return;\n      }\n      if (columnGroup.isPadding()) {\n        recursivelyBuild(columnGroup.getChildren(), dept, parentList);\n        return;\n      }\n      const displayName = this.columnNameService.getDisplayNameForProvidedColumnGroup(\n        null,\n        columnGroup,\n        \"columnToolPanel\"\n      );\n      const item = new ColumnModelItem(\n        displayName,\n        columnGroup,\n        dept,\n        true,\n        this.expandGroupsByDefault\n      );\n      parentList.push(item);\n      addListeners(item);\n      recursivelyBuild(columnGroup.getChildren(), dept + 1, item.getChildren());\n    };\n    const createColumnItem = (column, dept, parentList) => {\n      const skipThisColumn = column.getColDef() && column.getColDef().suppressColumnsToolPanel;\n      if (skipThisColumn) {\n        return;\n      }\n      const displayName = this.columnNameService.getDisplayNameForColumn(column, \"columnToolPanel\");\n      parentList.push(new ColumnModelItem(displayName, column, dept));\n    };\n    this.destroyColumnTree();\n    recursivelyBuild(columnTree, 0, this.allColsTree);\n  }\n  onColumnExpanded() {\n    this.flattenAndFilterModel();\n  }\n  flattenAndFilterModel() {\n    this.displayedColsList = [];\n    const recursiveFunc = (item) => {\n      if (!item.isPassesFilter()) {\n        return;\n      }\n      this.displayedColsList.push(item);\n      if (item.isGroup() && item.isExpanded()) {\n        item.getChildren().forEach(recursiveFunc);\n      }\n    };\n    this.allColsTree.forEach(recursiveFunc);\n    this.virtualList.setModel(new UIColumnModel(this.displayedColsList));\n    const focusedRow = this.virtualList.getLastFocusedRow();\n    this.virtualList.refresh();\n    if (focusedRow != null) {\n      this.focusRowIfAlive(focusedRow);\n    }\n    this.notifyListeners();\n    this.refreshAriaLabel();\n  }\n  refreshAriaLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const columnListName = translate(\"ariaColumnPanelList\", \"Column List\");\n    const localeColumns = translate(\"columns\", \"Columns\");\n    const items = this.displayedColsList.length;\n    _setAriaLabel33(this.virtualList.getAriaElement(), `${columnListName} ${items} ${localeColumns}`);\n  }\n  focusRowIfAlive(rowIndex) {\n    window.setTimeout(() => {\n      if (this.isAlive()) {\n        this.virtualList.focusRow(rowIndex);\n      }\n    }, 0);\n  }\n  forEachItem(callback) {\n    const recursiveFunc = (items) => {\n      items.forEach((item) => {\n        callback(item);\n        if (item.isGroup()) {\n          recursiveFunc(item.getChildren());\n        }\n      });\n    };\n    if (!this.allColsTree) {\n      return;\n    }\n    recursiveFunc(this.allColsTree);\n  }\n  doSetExpandedAll(value) {\n    this.forEachItem((item) => {\n      if (item.isGroup()) {\n        item.setExpanded(value);\n      }\n    });\n  }\n  setGroupsExpanded(expand, groupIds) {\n    if (!groupIds) {\n      this.doSetExpandedAll(expand);\n      return;\n    }\n    const expandedGroupIds = [];\n    this.forEachItem((item) => {\n      if (!item.isGroup()) {\n        return;\n      }\n      const groupId = item.getColumnGroup().getId();\n      if (groupIds.indexOf(groupId) >= 0) {\n        item.setExpanded(expand);\n        expandedGroupIds.push(groupId);\n      }\n    });\n    const unrecognisedGroupIds = groupIds.filter((groupId) => !_includes10(expandedGroupIds, groupId));\n    if (unrecognisedGroupIds.length > 0) {\n      _warnOnce25(\"unable to find group(s) for supplied groupIds:\", unrecognisedGroupIds);\n    }\n  }\n  getExpandState() {\n    let expandedCount = 0;\n    let notExpandedCount = 0;\n    this.forEachItem((item) => {\n      if (!item.isGroup()) {\n        return;\n      }\n      if (item.isExpanded()) {\n        expandedCount++;\n      } else {\n        notExpandedCount++;\n      }\n    });\n    if (expandedCount > 0 && notExpandedCount > 0) {\n      return 2;\n    }\n    if (notExpandedCount > 0) {\n      return 1;\n    }\n    return 0;\n  }\n  doSetSelectedAll(selectAllChecked) {\n    this.modelItemUtils.selectAllChildren(this.allColsTree, selectAllChecked, this.eventType);\n  }\n  getSelectionState() {\n    let checkedCount = 0;\n    let uncheckedCount = 0;\n    const pivotMode = this.columnModel.isPivotMode();\n    this.forEachItem((item) => {\n      if (item.isGroup()) {\n        return;\n      }\n      if (!item.isPassesFilter()) {\n        return;\n      }\n      const column = item.getColumn();\n      const colDef = column.getColDef();\n      let checked;\n      if (pivotMode) {\n        const noPivotModeOptionsAllowed = !column.isAllowPivot() && !column.isAllowRowGroup() && !column.isAllowValue();\n        if (noPivotModeOptionsAllowed) {\n          return;\n        }\n        checked = column.isValueActive() || column.isPivotActive() || column.isRowGroupActive();\n      } else {\n        if (colDef.lockVisible) {\n          return;\n        }\n        checked = column.isVisible();\n      }\n      checked ? checkedCount++ : uncheckedCount++;\n    });\n    if (checkedCount > 0 && uncheckedCount > 0) {\n      return void 0;\n    }\n    return !(checkedCount === 0 || uncheckedCount > 0);\n  }\n  setFilterText(filterText) {\n    this.filterText = _exists12(filterText) ? filterText.toLowerCase() : null;\n    this.markFilteredColumns();\n    this.flattenAndFilterModel();\n  }\n  markFilteredColumns() {\n    const passesFilter = (item) => {\n      if (!_exists12(this.filterText)) {\n        return true;\n      }\n      const displayName = item.getDisplayName();\n      return displayName == null || displayName.toLowerCase().indexOf(this.filterText) !== -1;\n    };\n    const recursivelyCheckFilter = (item, parentPasses) => {\n      let atLeastOneChildPassed = false;\n      if (item.isGroup()) {\n        const groupPasses = passesFilter(item);\n        item.getChildren().forEach((child) => {\n          const childPasses = recursivelyCheckFilter(child, groupPasses || parentPasses);\n          if (childPasses) {\n            atLeastOneChildPassed = childPasses;\n          }\n        });\n      }\n      const filterPasses = parentPasses || atLeastOneChildPassed ? true : passesFilter(item);\n      item.setPassesFilter(filterPasses);\n      return filterPasses;\n    };\n    this.allColsTree.forEach((item) => recursivelyCheckFilter(item, false));\n  }\n  notifyListeners() {\n    this.fireGroupExpandedEvent();\n    this.fireSelectionChangedEvent();\n  }\n  fireGroupExpandedEvent() {\n    const expandState = this.getExpandState();\n    this.dispatchLocalEvent({ type: \"groupExpanded\", state: expandState });\n  }\n  fireSelectionChangedEvent() {\n    if (!this.allColsTree) {\n      return;\n    }\n    const selectionState = this.getSelectionState();\n    this.dispatchLocalEvent({ type: \"selectionChanged\", state: selectionState });\n  }\n  getExpandedGroups() {\n    const expandedGroupIds = [];\n    if (!this.allColsTree) {\n      return expandedGroupIds;\n    }\n    this.forEachItem((item) => {\n      if (item.isGroup() && item.isExpanded()) {\n        expandedGroupIds.push(item.getColumnGroup().getId());\n      }\n    });\n    return expandedGroupIds;\n  }\n};\nvar AgPrimaryColsListSelector = {\n  selector: \"AG-PRIMARY-COLS-LIST\",\n  component: AgPrimaryColsList\n};\nvar AgPrimaryCols = class extends Component64 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-column-select\">\n            <ag-primary-cols-header data-ref=\"primaryColsHeaderPanel\"></ag-primary-cols-header>\n            <ag-primary-cols-list data-ref=\"primaryColsListPanel\"></ag-primary-cols-list>\n        </div>`,\n      [AgPrimaryColsHeaderSelector, AgPrimaryColsListSelector]\n    );\n    this.primaryColsHeaderPanel = RefPlaceholder44;\n    this.primaryColsListPanel = RefPlaceholder44;\n  }\n  // we allow dragging in the toolPanel, but not when this component appears in the column menu\n  init(allowDragging, params, eventType) {\n    this.allowDragging = allowDragging;\n    this.params = params;\n    this.eventType = eventType;\n    this.primaryColsHeaderPanel.init(this.params);\n    const hideFilter = this.params.suppressColumnFilter;\n    const hideSelect = this.params.suppressColumnSelectAll;\n    const hideExpand = this.params.suppressColumnExpandAll;\n    if (hideExpand && hideFilter && hideSelect) {\n      this.primaryColsHeaderPanel.setDisplayed(false);\n    }\n    this.addManagedListeners(this.primaryColsListPanel, {\n      groupExpanded: this.onGroupExpanded.bind(this),\n      selectionChanged: this.onSelectionChange.bind(this)\n    });\n    this.primaryColsListPanel.init(this.params, this.allowDragging, this.eventType);\n    this.addManagedListeners(this.primaryColsHeaderPanel, {\n      expandAll: this.onExpandAll.bind(this),\n      collapseAll: this.onCollapseAll.bind(this),\n      selectAll: this.onSelectAll.bind(this),\n      unselectAll: this.onUnselectAll.bind(this),\n      filterChanged: this.onFilterChanged.bind(this)\n    });\n    this.positionableFeature = new PositionableFeature3(this.getGui(), { minHeight: 100 });\n    this.createManagedBean(this.positionableFeature);\n  }\n  toggleResizable(resizable) {\n    this.positionableFeature.setResizable(resizable ? { bottom: true } : false);\n  }\n  onExpandAll() {\n    this.primaryColsListPanel.doSetExpandedAll(true);\n  }\n  onCollapseAll() {\n    this.primaryColsListPanel.doSetExpandedAll(false);\n  }\n  expandGroups(groupIds) {\n    this.primaryColsListPanel.setGroupsExpanded(true, groupIds);\n  }\n  collapseGroups(groupIds) {\n    this.primaryColsListPanel.setGroupsExpanded(false, groupIds);\n  }\n  setColumnLayout(colDefs) {\n    this.primaryColsListPanel.setColumnLayout(colDefs);\n  }\n  onFilterChanged(event) {\n    this.primaryColsListPanel.setFilterText(event.filterText);\n  }\n  syncLayoutWithGrid() {\n    this.primaryColsListPanel.onColumnsChanged();\n  }\n  onSelectAll() {\n    this.primaryColsListPanel.doSetSelectedAll(true);\n  }\n  onUnselectAll() {\n    this.primaryColsListPanel.doSetSelectedAll(false);\n  }\n  onGroupExpanded(event) {\n    this.primaryColsHeaderPanel.setExpandState(event.state);\n    this.params.onStateUpdated();\n  }\n  onSelectionChange(event) {\n    this.primaryColsHeaderPanel.setSelectionState(event.state);\n  }\n  getExpandedGroups() {\n    return this.primaryColsListPanel.getExpandedGroups();\n  }\n};\nvar PivotModePanel = class extends Component74 {\n  constructor() {\n    super(...arguments);\n    this.cbPivotMode = RefPlaceholder54;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.ctrlsService = beans.ctrlsService;\n  }\n  createTemplate() {\n    return (\n      /* html */\n      `<div class=\"ag-pivot-mode-panel\">\n                <ag-toggle-button data-ref=\"cbPivotMode\" class=\"ag-pivot-mode-select\"></ag-toggle-button>\n            </div>`\n    );\n  }\n  postConstruct() {\n    this.setTemplate(this.createTemplate(), [AgToggleButtonSelector]);\n    this.cbPivotMode.setValue(this.columnModel.isPivotMode());\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    this.cbPivotMode.setLabel(localeTextFunc(\"pivotMode\", \"Pivot Mode\"));\n    this.addManagedListeners(this.cbPivotMode, { fieldValueChanged: this.onBtPivotMode.bind(this) });\n    const listener = this.onPivotModeChanged.bind(this);\n    this.addManagedEventListeners({\n      newColumnsLoaded: listener,\n      columnPivotModeChanged: listener\n    });\n  }\n  onBtPivotMode() {\n    const newValue = !!this.cbPivotMode.getValue();\n    if (newValue !== this.columnModel.isPivotMode()) {\n      this.gos.updateGridOptions({ options: { pivotMode: newValue }, source: \"toolPanelUi\" });\n      this.ctrlsService.getHeaderRowContainerCtrls().forEach((c) => c.refresh());\n    }\n  }\n  onPivotModeChanged() {\n    const pivotModeActive = this.columnModel.isPivotMode();\n    this.cbPivotMode.setValue(pivotModeActive);\n  }\n};\nvar ColumnToolPanel = class extends Component84 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-column-panel\"></div>`\n    );\n    this.initialised = false;\n    this.childDestroyFuncs = [];\n  }\n  // lazy initialise the panel\n  setVisible(visible) {\n    super.setDisplayed(visible);\n    if (visible && !this.initialised) {\n      this.init(this.params);\n    }\n  }\n  init(params) {\n    const defaultParams = this.gos.addGridCommonParams({\n      suppressColumnMove: false,\n      suppressColumnSelectAll: false,\n      suppressColumnFilter: false,\n      suppressColumnExpandAll: false,\n      contractColumnSelection: false,\n      suppressPivotMode: false,\n      suppressRowGroups: false,\n      suppressValues: false,\n      suppressPivots: false,\n      suppressSyncLayoutWithGrid: false\n    });\n    this.params = {\n      ...defaultParams,\n      ...params\n    };\n    if (this.isRowGroupingModuleLoaded() && !this.params.suppressPivotMode) {\n      this.pivotModePanel = this.createBean(new PivotModePanel());\n      this.childDestroyFuncs.push(() => this.destroyBean(this.pivotModePanel));\n      this.appendChild(this.pivotModePanel);\n    }\n    this.primaryColsPanel = this.createBean(new AgPrimaryCols());\n    this.childDestroyFuncs.push(() => this.destroyBean(this.primaryColsPanel));\n    this.primaryColsPanel.init(true, this.params, \"toolPanelUi\");\n    this.primaryColsPanel.addCssClass(\"ag-column-panel-column-select\");\n    this.appendChild(this.primaryColsPanel);\n    if (this.isRowGroupingModuleLoaded()) {\n      if (!this.params.suppressRowGroups) {\n        this.rowGroupDropZonePanel = this.createBean(new RowGroupDropZonePanel(false));\n        this.childDestroyFuncs.push(() => this.destroyBean(this.rowGroupDropZonePanel));\n        this.appendChild(this.rowGroupDropZonePanel);\n      }\n      if (!this.params.suppressValues) {\n        this.valuesDropZonePanel = this.createBean(new ValuesDropZonePanel(false));\n        this.childDestroyFuncs.push(() => this.destroyBean(this.valuesDropZonePanel));\n        this.appendChild(this.valuesDropZonePanel);\n      }\n      if (!this.params.suppressPivots) {\n        this.pivotDropZonePanel = this.createBean(new PivotDropZonePanel(false));\n        this.childDestroyFuncs.push(() => this.destroyBean(this.pivotDropZonePanel));\n        this.appendChild(this.pivotDropZonePanel);\n      }\n      this.setLastVisible();\n      const [pivotModeListener] = this.addManagedEventListeners({\n        columnPivotModeChanged: () => {\n          this.resetChildrenHeight();\n          this.setLastVisible();\n        }\n      });\n      this.childDestroyFuncs.push(() => pivotModeListener());\n    }\n    this.initialised = true;\n  }\n  setPivotModeSectionVisible(visible) {\n    if (!this.isRowGroupingModuleLoaded()) {\n      return;\n    }\n    if (this.pivotModePanel) {\n      this.pivotModePanel.setDisplayed(visible);\n    } else if (visible) {\n      this.pivotModePanel = this.createBean(new PivotModePanel());\n      this.getGui().insertBefore(this.pivotModePanel.getGui(), this.getGui().firstChild);\n      this.childDestroyFuncs.push(() => this.destroyBean(this.pivotModePanel));\n    }\n    this.setLastVisible();\n  }\n  setRowGroupsSectionVisible(visible) {\n    if (!this.isRowGroupingModuleLoaded()) {\n      return;\n    }\n    if (this.rowGroupDropZonePanel) {\n      this.rowGroupDropZonePanel.setDisplayed(visible);\n    } else if (visible) {\n      this.rowGroupDropZonePanel = this.createManagedBean(new RowGroupDropZonePanel(false));\n      this.appendChild(this.rowGroupDropZonePanel);\n    }\n    this.setLastVisible();\n  }\n  setValuesSectionVisible(visible) {\n    if (!this.isRowGroupingModuleLoaded()) {\n      return;\n    }\n    if (this.valuesDropZonePanel) {\n      this.valuesDropZonePanel.setDisplayed(visible);\n    } else if (visible) {\n      this.valuesDropZonePanel = this.createManagedBean(new ValuesDropZonePanel(false));\n      this.appendChild(this.valuesDropZonePanel);\n    }\n    this.setLastVisible();\n  }\n  setPivotSectionVisible(visible) {\n    if (!this.isRowGroupingModuleLoaded()) {\n      return;\n    }\n    if (this.pivotDropZonePanel) {\n      this.pivotDropZonePanel.setDisplayed(visible);\n    } else if (visible) {\n      this.pivotDropZonePanel = this.createManagedBean(new PivotDropZonePanel(false));\n      this.appendChild(this.pivotDropZonePanel);\n      this.pivotDropZonePanel.setDisplayed(visible);\n    }\n    this.setLastVisible();\n  }\n  setResizers() {\n    [this.primaryColsPanel, this.rowGroupDropZonePanel, this.valuesDropZonePanel, this.pivotDropZonePanel].forEach(\n      (panel) => {\n        if (!panel) {\n          return;\n        }\n        const eGui = panel.getGui();\n        panel.toggleResizable(\n          !eGui.classList.contains(\"ag-last-column-drop\") && !eGui.classList.contains(\"ag-hidden\")\n        );\n      }\n    );\n  }\n  setLastVisible() {\n    const eGui = this.getGui();\n    const columnDrops = Array.prototype.slice.call(eGui.querySelectorAll(\".ag-column-drop\"));\n    columnDrops.forEach((columnDrop) => columnDrop.classList.remove(\"ag-last-column-drop\"));\n    const columnDropEls = eGui.querySelectorAll(\".ag-column-drop:not(.ag-hidden)\");\n    const lastVisible = _last9(columnDropEls);\n    if (lastVisible) {\n      lastVisible.classList.add(\"ag-last-column-drop\");\n    }\n    this.setResizers();\n  }\n  resetChildrenHeight() {\n    const eGui = this.getGui();\n    const children = eGui.children;\n    for (let i = 0; i < children.length; i++) {\n      const child = children[i];\n      child.style.removeProperty(\"height\");\n      child.style.removeProperty(\"flex\");\n    }\n  }\n  isRowGroupingModuleLoaded() {\n    return this.gos.assertModuleRegistered(ModuleNames9.RowGroupingModule, \"Row Grouping\");\n  }\n  expandColumnGroups(groupIds) {\n    this.primaryColsPanel.expandGroups(groupIds);\n  }\n  collapseColumnGroups(groupIds) {\n    this.primaryColsPanel.collapseGroups(groupIds);\n  }\n  setColumnLayout(colDefs) {\n    this.primaryColsPanel.setColumnLayout(colDefs);\n  }\n  syncLayoutWithGrid() {\n    this.primaryColsPanel.syncLayoutWithGrid();\n  }\n  destroyChildren() {\n    this.childDestroyFuncs.forEach((func) => func());\n    this.childDestroyFuncs.length = 0;\n    _clearElement9(this.getGui());\n  }\n  refresh(params) {\n    this.destroyChildren();\n    this.init(params);\n    return true;\n  }\n  getState() {\n    return {\n      expandedGroupIds: this.primaryColsPanel.getExpandedGroups()\n    };\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so this must be public.\n  destroy() {\n    this.destroyChildren();\n    super.destroy();\n  }\n};\nvar ModelItemUtils = class extends BeanStub26 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"modelItemUtils\";\n  }\n  wireBeans(beans) {\n    this.aggFuncService = beans.aggFuncService;\n    this.columnModel = beans.columnModel;\n    this.columnApplyStateService = beans.columnApplyStateService;\n  }\n  selectAllChildren(colTree, selectAllChecked, eventType) {\n    const cols = this.extractAllLeafColumns(colTree);\n    this.setAllColumns(cols, selectAllChecked, eventType);\n  }\n  setColumn(col, selectAllChecked, eventType) {\n    this.setAllColumns([col], selectAllChecked, eventType);\n  }\n  setAllColumns(cols, selectAllChecked, eventType) {\n    if (this.columnModel.isPivotMode()) {\n      this.setAllPivot(cols, selectAllChecked, eventType);\n    } else {\n      this.setAllVisible(cols, selectAllChecked, eventType);\n    }\n  }\n  extractAllLeafColumns(allItems) {\n    const res = [];\n    const recursiveFunc = (items) => {\n      items.forEach((item) => {\n        if (!item.isPassesFilter()) {\n          return;\n        }\n        if (item.isGroup()) {\n          recursiveFunc(item.getChildren());\n        } else {\n          res.push(item.getColumn());\n        }\n      });\n    };\n    recursiveFunc(allItems);\n    return res;\n  }\n  setAllVisible(columns, visible, eventType) {\n    const colStateItems = [];\n    columns.forEach((col) => {\n      if (col.getColDef().lockVisible) {\n        return;\n      }\n      if (col.isVisible() != visible) {\n        colStateItems.push({\n          colId: col.getId(),\n          hide: !visible\n        });\n      }\n    });\n    if (colStateItems.length > 0) {\n      this.columnApplyStateService.applyColumnState({ state: colStateItems }, eventType);\n    }\n  }\n  setAllPivot(columns, value, eventType) {\n    this.setAllPivotActive(columns, value, eventType);\n  }\n  setAllPivotActive(columns, value, eventType) {\n    const colStateItems = [];\n    const turnOnAction = (col) => {\n      if (col.isAnyFunctionActive()) {\n        return;\n      }\n      if (col.isAllowValue()) {\n        const aggFunc = typeof col.getAggFunc() === \"string\" ? col.getAggFunc() : this.aggFuncService?.getDefaultAggFunc(col);\n        colStateItems.push({\n          colId: col.getId(),\n          aggFunc\n        });\n      } else if (col.isAllowRowGroup()) {\n        colStateItems.push({\n          colId: col.getId(),\n          rowGroup: true\n        });\n      } else if (col.isAllowPivot()) {\n        colStateItems.push({\n          colId: col.getId(),\n          pivot: true\n        });\n      }\n    };\n    const turnOffAction = (col) => {\n      const isActive = col.isPivotActive() || col.isRowGroupActive() || col.isValueActive();\n      if (isActive) {\n        colStateItems.push({\n          colId: col.getId(),\n          pivot: false,\n          rowGroup: false,\n          aggFunc: null\n        });\n      }\n    };\n    const action = value ? turnOnAction : turnOffAction;\n    columns.forEach(action);\n    if (colStateItems.length > 0) {\n      this.columnApplyStateService.applyColumnState({ state: colStateItems }, eventType);\n    }\n  }\n  updateColumns(params) {\n    const { columns, visibleState, pivotState, eventType } = params;\n    const state = columns.map((column) => {\n      const colId = column.getColId();\n      if (this.columnModel.isPivotMode()) {\n        const pivotStateForColumn = pivotState?.[colId];\n        return {\n          colId,\n          pivot: pivotStateForColumn?.pivot,\n          rowGroup: pivotStateForColumn?.rowGroup,\n          aggFunc: pivotStateForColumn?.aggFunc\n        };\n      } else {\n        return {\n          colId,\n          hide: !visibleState?.[colId]\n        };\n      }\n    });\n    this.columnApplyStateService.applyColumnState({ state }, eventType);\n  }\n  createPivotState(column) {\n    return {\n      pivot: column.isPivotActive(),\n      rowGroup: column.isRowGroupActive(),\n      aggFunc: column.isValueActive() ? column.getAggFunc() : void 0\n    };\n  }\n};\nvar VERSION8 = \"32.3.9\";\nvar ColumnsToolPanelModule = _defineModule8({\n  version: VERSION8,\n  moduleName: ModuleNames23.ColumnsToolPanelModule,\n  beans: [ModelItemUtils],\n  userComponents: [\n    { name: \"agColumnsToolPanel\", classImp: ColumnToolPanel },\n    {\n      name: \"agMenuItem\",\n      classImp: AgMenuItemRenderer\n    }\n  ],\n  dependantModules: [EnterpriseCoreModule, RowGroupingModule, SideBarModule]\n});\n\n// enterprise-modules/excel-export/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames10, _defineModule as _defineModule9 } from \"ag-grid-community\";\nimport { _CsvExportCoreModule } from \"ag-grid-community\";\nimport { _getHeaderClassesFromColDef, _warnOnce as _warnOnce34 } from \"ag-grid-community\";\nimport { BaseCreator, Downloader, RowType as RowType2, ZipContainer } from \"ag-grid-community\";\nimport { _last as _last10, _mergeDeep as _mergeDeep3, _warnOnce as _warnOnce26 } from \"ag-grid-community\";\nimport { BaseGridSerializingSession, RowType } from \"ag-grid-community\";\nimport { _escapeString as _escapeString7 } from \"ag-grid-community\";\nimport { XmlFactory } from \"ag-grid-community\";\nimport { ExcelFactoryMode, _escapeString as _escapeString52, _warnOnce as _warnOnce27 } from \"ag-grid-community\";\nimport { _escapeString as _escapeString22 } from \"ag-grid-community\";\nimport { _compose, _escapeString as _escapeString42, _iterateObject as _iterateObject4 } from \"ag-grid-community\";\nimport { _escapeString as _escapeString32 } from \"ag-grid-community\";\nimport { ExcelFactoryMode as ExcelFactoryMode2, _warnOnce as _warnOnce44 } from \"ag-grid-community\";\nvar INCH_TO_EMU = 9525;\nvar numberFormatMap = {\n  \"0\": 1,\n  \"0.00\": 2,\n  \"#,##0\": 3,\n  \"#,##0.00\": 4,\n  \"0%\": 9,\n  \"0.00%\": 10,\n  \"0.00E+00\": 11,\n  \"# ?/?\": 12,\n  \"# ??/??\": 13,\n  \"mm-dd-yy\": 14,\n  \"d-mmm-yy\": 15,\n  \"d-mmm\": 16,\n  \"mmm-yy\": 17,\n  \"h:mm AM/PM\": 18,\n  \"h:mm:ss AM/PM\": 19,\n  \"h:mm\": 20,\n  \"h:mm:ss\": 21,\n  \"m/d/yy h:mm\": 22,\n  \"#,##0 ;(#,##0)\": 37,\n  \"#,##0 ;[Red](#,##0)\": 38,\n  \"#,##0.00;(#,##0.00)\": 39,\n  \"#,##0.00;[Red](#,##0.00)\": 40,\n  \"mm:ss\": 45,\n  \"[h]:mm:ss\": 46,\n  \"mmss.0\": 47,\n  \"##0.0E+0\": 48,\n  \"@\": 49\n};\nvar pointsToPixel = (points) => {\n  return Math.round(points * 96 / 72);\n};\nvar pixelsToEMU = (value) => {\n  return Math.ceil(value * INCH_TO_EMU);\n};\nvar getFontFamilyId = (name) => {\n  if (name === void 0) {\n    return;\n  }\n  const families = [\"Automatic\", \"Roman\", \"Swiss\", \"Modern\", \"Script\", \"Decorative\"];\n  const pos = families.indexOf(name || \"Automatic\");\n  return Math.max(pos, 0);\n};\nvar getHeightFromProperty = (rowIndex, height) => {\n  if (!height) {\n    return;\n  }\n  let finalHeight;\n  if (typeof height === \"number\") {\n    finalHeight = height;\n  } else {\n    const heightFunc = height;\n    finalHeight = heightFunc({ rowIndex });\n  }\n  return finalHeight;\n};\nvar setExcelImageTotalWidth = (image, columnsToExport) => {\n  const { colSpan, column } = image.position;\n  if (!image.width) {\n    return;\n  }\n  if (colSpan) {\n    const columnsInSpan = columnsToExport.slice(column - 1, column + colSpan - 1);\n    let totalWidth = 0;\n    for (let i = 0; i < columnsInSpan.length; i++) {\n      const colWidth = columnsInSpan[i].getActualWidth();\n      if (image.width < totalWidth + colWidth) {\n        image.position.colSpan = i + 1;\n        image.totalWidth = image.width;\n        image.width = image.totalWidth - totalWidth;\n        break;\n      }\n      totalWidth += colWidth;\n    }\n  } else {\n    image.totalWidth = image.width;\n  }\n};\nvar setExcelImageTotalHeight = (image, rowHeight) => {\n  const { rowSpan, row } = image.position;\n  if (!image.height) {\n    return;\n  }\n  if (rowSpan) {\n    let totalHeight = 0;\n    let counter = 0;\n    for (let i = row; i < row + rowSpan; i++) {\n      const nextRowHeight = pointsToPixel(getHeightFromProperty(i, rowHeight) || 20);\n      if (image.height < totalHeight + nextRowHeight) {\n        image.position.rowSpan = counter + 1;\n        image.totalHeight = image.height;\n        image.height = image.totalHeight - totalHeight;\n        break;\n      }\n      totalHeight += nextRowHeight;\n      counter++;\n    }\n  } else {\n    image.totalHeight = image.height;\n  }\n};\nvar createXmlPart = (body, skipHeader) => {\n  const header = XmlFactory.createHeader({\n    encoding: \"UTF-8\",\n    standalone: \"yes\"\n  });\n  const xmlBody = XmlFactory.createXml(body);\n  if (skipHeader) {\n    return xmlBody;\n  }\n  return `${header}${xmlBody}`;\n};\nvar getExcelColumnName = (colIdx) => {\n  const startCode = 65;\n  const tableWidth = 26;\n  const fromCharCode = String.fromCharCode;\n  const pos = Math.floor(colIdx / tableWidth);\n  const tableIdx = colIdx % tableWidth;\n  if (!pos || colIdx === tableWidth) {\n    return fromCharCode(startCode + colIdx - 1);\n  }\n  if (!tableIdx) {\n    return getExcelColumnName(pos - 1) + \"Z\";\n  }\n  if (pos < tableWidth) {\n    return fromCharCode(startCode + pos - 1) + fromCharCode(startCode + tableIdx - 1);\n  }\n  return getExcelColumnName(pos) + fromCharCode(startCode + tableIdx - 1);\n};\nvar replaceInvisibleCharacters = (str) => {\n  if (str == null) {\n    return null;\n  }\n  let newString = \"\";\n  for (let i = 0; i < str.length; i++) {\n    const point = str.charCodeAt(i);\n    if (point >= 0 && point <= 31 && point !== 10) {\n      const convertedCode = point.toString(16).toUpperCase();\n      const paddedCode = convertedCode.padStart(4, \"0\");\n      const newValue = `_x${paddedCode}_`;\n      newString += newValue;\n    } else {\n      newString += str[i];\n    }\n  }\n  return newString;\n};\nvar buildSharedString = (strMap) => {\n  const ret = [];\n  for (const key of strMap.keys()) {\n    const textNode = key.toString();\n    const child = {\n      name: \"t\",\n      textNode: _escapeString7(replaceInvisibleCharacters(textNode), false)\n    };\n    const preserveSpaces = textNode.trim().length !== textNode.length;\n    if (preserveSpaces) {\n      child.properties = {\n        rawMap: {\n          \"xml:space\": \"preserve\"\n        }\n      };\n    }\n    ret.push({\n      name: \"si\",\n      children: [child]\n    });\n  }\n  return ret;\n};\nvar contentTypeFactory = {\n  getTemplate(config) {\n    const { name, ContentType, Extension, PartName } = config;\n    return {\n      name,\n      properties: {\n        rawMap: {\n          Extension,\n          PartName,\n          ContentType\n        }\n      }\n    };\n  }\n};\nvar contentType_default = contentTypeFactory;\nvar _normaliseImageExtension = (ext) => ext === \"jpg\" ? \"jpeg\" : ext;\nvar contentTypesFactory = {\n  getTemplate(sheetLen) {\n    const worksheets = new Array(sheetLen).fill(void 0).map((v, i) => ({\n      name: \"Override\",\n      ContentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n      PartName: `/xl/worksheets/sheet${i + 1}.xml`\n    }));\n    const sheetsWithImages = ExcelXlsxFactory.worksheetImages.size;\n    const headerFooterImages = ExcelXlsxFactory.worksheetHeaderFooterImages.size;\n    const sheetsWithTables = ExcelXlsxFactory.worksheetDataTables.size;\n    const imageTypesObject = {};\n    ExcelXlsxFactory.workbookImageIds.forEach((v) => {\n      imageTypesObject[_normaliseImageExtension(v.type)] = true;\n    });\n    const imageDocs = new Array(sheetsWithImages).fill(void 0).map((v, i) => ({\n      name: \"Override\",\n      ContentType: \"application/vnd.openxmlformats-officedocument.drawing+xml\",\n      PartName: `/xl/drawings/drawing${i + 1}.xml`\n    }));\n    const tableDocs = new Array(sheetsWithTables).fill(void 0).map((v, i) => ({\n      name: \"Override\",\n      ContentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\",\n      PartName: `/xl/tables/${ExcelXlsxFactory.getTableNameFromIndex(i)}.xml`\n    }));\n    const imageTypes = Object.keys(imageTypesObject).map((ext) => ({\n      name: \"Default\",\n      ContentType: `image/${ext}`,\n      Extension: ext\n    }));\n    if (headerFooterImages) {\n      imageTypes.push({\n        name: \"Default\",\n        Extension: \"vml\",\n        ContentType: \"application/vnd.openxmlformats-officedocument.vmlDrawing\"\n      });\n    }\n    const children = [\n      ...imageTypes,\n      {\n        name: \"Default\",\n        Extension: \"rels\",\n        ContentType: \"application/vnd.openxmlformats-package.relationships+xml\"\n      },\n      {\n        name: \"Default\",\n        ContentType: \"application/xml\",\n        Extension: \"xml\"\n      },\n      {\n        name: \"Override\",\n        ContentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n        PartName: \"/xl/workbook.xml\"\n      },\n      ...worksheets,\n      {\n        name: \"Override\",\n        ContentType: \"application/vnd.openxmlformats-officedocument.theme+xml\",\n        PartName: \"/xl/theme/theme1.xml\"\n      },\n      {\n        name: \"Override\",\n        ContentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n        PartName: \"/xl/styles.xml\"\n      },\n      {\n        name: \"Override\",\n        ContentType: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n        PartName: \"/xl/sharedStrings.xml\"\n      },\n      ...imageDocs,\n      ...tableDocs,\n      {\n        name: \"Override\",\n        ContentType: \"application/vnd.openxmlformats-package.core-properties+xml\",\n        PartName: \"/docProps/core.xml\"\n      }\n    ].map((contentType) => contentType_default.getTemplate(contentType));\n    return {\n      name: \"Types\",\n      properties: {\n        rawMap: {\n          xmlns: \"http://schemas.openxmlformats.org/package/2006/content-types\"\n        }\n      },\n      children\n    };\n  }\n};\nvar contentTypes_default = contentTypesFactory;\nvar coreFactory = {\n  getTemplate(author) {\n    const dt = /* @__PURE__ */ new Date();\n    const jsonDate = dt.toJSON();\n    return {\n      name: \"cp:coreProperties\",\n      properties: {\n        prefixedAttributes: [\n          {\n            prefix: \"xmlns:\",\n            map: {\n              cp: \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\",\n              dc: \"http://purl.org/dc/elements/1.1/\",\n              dcterms: \"http://purl.org/dc/terms/\",\n              dcmitype: \"http://purl.org/dc/dcmitype/\",\n              xsi: \"http://www.w3.org/2001/XMLSchema-instance\"\n            }\n          }\n        ]\n      },\n      children: [\n        {\n          name: \"dc:creator\",\n          textNode: author\n        },\n        {\n          name: \"dc:title\",\n          textNode: \"Workbook\"\n        },\n        {\n          name: \"dcterms:created\",\n          properties: {\n            rawMap: {\n              \"xsi:type\": \"dcterms:W3CDTF\"\n            }\n          },\n          textNode: jsonDate\n        },\n        {\n          name: \"dcterms:modified\",\n          properties: {\n            rawMap: {\n              \"xsi:type\": \"dcterms:W3CDTF\"\n            }\n          },\n          textNode: jsonDate\n        }\n      ]\n    };\n  }\n};\nvar core_default = coreFactory;\nvar getAnchor = (name, imageAnchor) => ({\n  name: `xdr:${name}`,\n  children: [\n    {\n      name: \"xdr:col\",\n      textNode: imageAnchor.col.toString()\n    },\n    {\n      name: \"xdr:colOff\",\n      textNode: imageAnchor.offsetX.toString()\n    },\n    {\n      name: \"xdr:row\",\n      textNode: imageAnchor.row.toString()\n    },\n    {\n      name: \"xdr:rowOff\",\n      textNode: imageAnchor.offsetY.toString()\n    }\n  ]\n});\nvar getExt = (image) => {\n  const children = [\n    {\n      name: \"a:ext\",\n      properties: {\n        rawMap: {\n          uri: \"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}\"\n        }\n      },\n      children: [\n        {\n          name: \"a16:creationId\",\n          properties: {\n            rawMap: {\n              id: \"{822E6D20-D7BC-2841-A643-D49A6EF008A2}\",\n              \"xmlns:a16\": \"http://schemas.microsoft.com/office/drawing/2014/main\"\n            }\n          }\n        }\n      ]\n    }\n  ];\n  const recolor = image.recolor && image.recolor.toLowerCase();\n  switch (recolor) {\n    case \"grayscale\":\n    case \"sepia\":\n    case \"washout\":\n      children.push({\n        name: \"a:ext\",\n        properties: {\n          rawMap: {\n            uri: \"{C183D7F6-B498-43B3-948B-1728B52AA6E4}\"\n          }\n        },\n        children: [\n          {\n            name: \"adec:decorative\",\n            properties: {\n              rawMap: {\n                val: \"0\",\n                \"xmlns:adec\": \"http://schemas.microsoft.com/office/drawing/2017/decorative\"\n              }\n            }\n          }\n        ]\n      });\n  }\n  return {\n    name: \"a:extLst\",\n    children\n  };\n};\nvar getNvPicPr = (image, index) => ({\n  name: \"xdr:nvPicPr\",\n  children: [\n    {\n      name: \"xdr:cNvPr\",\n      properties: {\n        rawMap: {\n          id: index,\n          name: image.id,\n          descr: image.altText != null ? image.altText : void 0\n        }\n      },\n      children: [getExt(image)]\n    },\n    {\n      name: \"xdr:cNvPicPr\",\n      properties: {\n        rawMap: {\n          preferRelativeResize: \"0\"\n        }\n      },\n      children: [\n        {\n          name: \"a:picLocks\"\n        }\n      ]\n    }\n  ]\n});\nvar getColorDetails = (color) => {\n  if (!color.saturation && !color.tint) {\n    return;\n  }\n  const ret = [];\n  if (color.saturation) {\n    ret.push({\n      name: \"a:satMod\",\n      properties: {\n        rawMap: {\n          val: color.saturation * 1e3\n        }\n      }\n    });\n  }\n  if (color.tint) {\n    ret.push({\n      name: \"a:tint\",\n      properties: {\n        rawMap: {\n          val: color.tint * 1e3\n        }\n      }\n    });\n  }\n  return ret;\n};\nvar getDuoTone = (primaryColor, secondaryColor) => {\n  return {\n    name: \"a:duotone\",\n    children: [\n      {\n        name: \"a:prstClr\",\n        properties: {\n          rawMap: {\n            val: primaryColor.color\n          }\n        },\n        children: getColorDetails(primaryColor)\n      },\n      {\n        name: \"a:srgbClr\",\n        properties: {\n          rawMap: {\n            val: secondaryColor.color\n          }\n        },\n        children: getColorDetails(secondaryColor)\n      }\n    ]\n  };\n};\nvar getBlipFill = (image, index) => {\n  let blipChildren;\n  if (image.transparency) {\n    const transparency = Math.min(Math.max(image.transparency, 0), 100);\n    blipChildren = [\n      {\n        name: \"a:alphaModFix\",\n        properties: {\n          rawMap: {\n            amt: 1e5 - Math.round(transparency * 1e3)\n          }\n        }\n      }\n    ];\n  }\n  if (image.recolor) {\n    if (!blipChildren) {\n      blipChildren = [];\n    }\n    switch (image.recolor.toLocaleLowerCase()) {\n      case \"grayscale\":\n        blipChildren.push({ name: \"a:grayscl\" });\n        break;\n      case \"sepia\":\n        blipChildren.push(getDuoTone({ color: \"black\" }, { color: \"D9C3A5\", tint: 50, saturation: 180 }));\n        break;\n      case \"washout\":\n        blipChildren.push({\n          name: \"a:lum\",\n          properties: {\n            rawMap: {\n              bright: \"70000\",\n              contrast: \"-70000\"\n            }\n          }\n        });\n        break;\n      default:\n    }\n  }\n  return {\n    name: \"xdr:blipFill\",\n    children: [\n      {\n        name: \"a:blip\",\n        properties: {\n          rawMap: {\n            cstate: \"print\",\n            \"r:embed\": `rId${index}`,\n            \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n          }\n        },\n        children: blipChildren\n      },\n      {\n        name: \"a:stretch\",\n        children: [\n          {\n            name: \"a:fillRect\"\n          }\n        ]\n      }\n    ]\n  };\n};\nvar getSpPr = (image, imageBoxSize) => {\n  const xfrm = {\n    name: \"a:xfrm\",\n    children: [\n      {\n        name: \"a:off\",\n        properties: {\n          rawMap: {\n            x: 0,\n            y: 0\n          }\n        }\n      },\n      {\n        name: \"a:ext\",\n        properties: {\n          rawMap: {\n            cx: imageBoxSize.width,\n            cy: imageBoxSize.height\n          }\n        }\n      }\n    ]\n  };\n  if (image.rotation) {\n    const rotation = image.rotation;\n    xfrm.properties = {\n      rawMap: {\n        rot: Math.min(Math.max(rotation, 0), 360) * 6e4\n      }\n    };\n  }\n  const prstGeom = {\n    name: \"a:prstGeom\",\n    properties: {\n      rawMap: {\n        prst: \"rect\"\n      }\n    },\n    children: [{ name: \"a:avLst\" }]\n  };\n  const ret = {\n    name: \"xdr:spPr\",\n    children: [xfrm, prstGeom]\n  };\n  return ret;\n};\nvar getImageBoxSize = (image) => {\n  image.fitCell = !!image.fitCell || !image.width || !image.height;\n  const { position = {}, fitCell, width = 0, height = 0, totalHeight, totalWidth } = image;\n  const { offsetX = 0, offsetY = 0, row = 1, rowSpan = 1, column = 1, colSpan = 1 } = position;\n  return {\n    from: {\n      row: row - 1,\n      col: column - 1,\n      offsetX: pixelsToEMU(offsetX),\n      offsetY: pixelsToEMU(offsetY)\n    },\n    to: {\n      row: row - 1 + (fitCell ? 1 : rowSpan - 1),\n      col: column - 1 + (fitCell ? 1 : colSpan - 1),\n      offsetX: pixelsToEMU(width + offsetX),\n      offsetY: pixelsToEMU(height + offsetY)\n    },\n    height: pixelsToEMU(totalHeight || height),\n    width: pixelsToEMU(totalWidth || width)\n  };\n};\nvar getPicture = (image, currentIndex, worksheetImageIndex, imageBoxSize) => {\n  return {\n    name: \"xdr:pic\",\n    children: [\n      getNvPicPr(image, currentIndex + 1),\n      getBlipFill(image, worksheetImageIndex + 1),\n      getSpPr(image, imageBoxSize)\n    ]\n  };\n};\nvar drawingFactory = {\n  getTemplate(config) {\n    const { sheetIndex } = config;\n    const sheetImages = ExcelXlsxFactory.worksheetImages.get(sheetIndex);\n    const sheetImageIds = ExcelXlsxFactory.worksheetImageIds.get(sheetIndex);\n    const children = sheetImages.map((image, idx) => {\n      const boxSize = getImageBoxSize(image);\n      return {\n        name: \"xdr:twoCellAnchor\",\n        properties: {\n          rawMap: {\n            editAs: \"absolute\"\n          }\n        },\n        children: [\n          getAnchor(\"from\", boxSize.from),\n          getAnchor(\"to\", boxSize.to),\n          getPicture(image, idx, sheetImageIds.get(image.id).index, boxSize),\n          { name: \"xdr:clientData\" }\n        ]\n      };\n    });\n    return {\n      name: \"xdr:wsDr\",\n      properties: {\n        rawMap: {\n          \"xmlns:a\": \"http://schemas.openxmlformats.org/drawingml/2006/main\",\n          \"xmlns:xdr\": \"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\"\n        }\n      },\n      children\n    };\n  }\n};\nvar drawing_default = drawingFactory;\nvar relationshipFactory = {\n  getTemplate(config) {\n    const { Id, Type, Target } = config;\n    return {\n      name: \"Relationship\",\n      properties: {\n        rawMap: {\n          Id,\n          Type,\n          Target\n        }\n      }\n    };\n  }\n};\nvar relationship_default = relationshipFactory;\nvar relationshipsFactory = {\n  getTemplate(c) {\n    const children = c.map((relationship) => relationship_default.getTemplate(relationship));\n    return {\n      name: \"Relationships\",\n      properties: {\n        rawMap: {\n          xmlns: \"http://schemas.openxmlformats.org/package/2006/relationships\"\n        }\n      },\n      children\n    };\n  }\n};\nvar relationships_default = relationshipsFactory;\nvar sharedStrings = {\n  getTemplate(strings) {\n    return {\n      name: \"sst\",\n      properties: {\n        rawMap: {\n          xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n          count: strings.size,\n          uniqueCount: strings.size\n        }\n      },\n      children: buildSharedString(strings)\n    };\n  }\n};\nvar sharedStrings_default = sharedStrings;\nvar getWeightName = (value) => {\n  switch (value) {\n    case 1:\n      return \"thin\";\n    case 2:\n      return \"medium\";\n    case 3:\n      return \"thick\";\n    default:\n      return \"hair\";\n  }\n};\nvar mappedBorderNames = {\n  None: \"None\",\n  Dot: \"Dotted\",\n  Dash: \"Dashed\",\n  Double: \"Double\",\n  DashDot: \"DashDot\",\n  DashDotDot: \"DashDotDot\",\n  SlantDashDot: \"SlantDashDot\",\n  Continuous: \"Continuous\"\n};\nvar mediumBorders = [\"Dashed\", \"DashDot\", \"DashDotDot\"];\nvar colorMap = {\n  None: \"none\",\n  Solid: \"solid\",\n  Gray50: \"mediumGray\",\n  Gray75: \"darkGray\",\n  Gray25: \"lightGray\",\n  HorzStripe: \"darkHorizontal\",\n  VertStripe: \"darkVertical\",\n  ReverseDiagStripe: \"darkDown\",\n  DiagStripe: \"darkUp\",\n  DiagCross: \"darkGrid\",\n  ThickDiagCross: \"darkTrellis\",\n  ThinHorzStripe: \"lightHorizontal\",\n  ThinVertStripe: \"lightVertical\",\n  ThinReverseDiagStripe: \"lightDown\",\n  ThinDiagStripe: \"lightUp\",\n  ThinHorzCross: \"lightGrid\",\n  ThinDiagCross: \"lightTrellis\",\n  Gray125: \"gray125\",\n  Gray0625: \"gray0625\"\n};\nvar horizontalAlignmentMap = {\n  Automatic: \"general\",\n  Left: \"left\",\n  Center: \"center\",\n  Right: \"right\",\n  Fill: \"fill\",\n  Justify: \"justify\",\n  CenterAcrossSelection: \"centerContinuous\",\n  Distributed: \"distributed\",\n  JustifyDistributed: \"justify\"\n};\nvar verticalAlignmentMap = {\n  Automatic: void 0,\n  Top: \"top\",\n  Bottom: \"bottom\",\n  Center: \"center\",\n  Justify: \"justify\",\n  Distributed: \"distributed\",\n  JustifyDistributed: \"justify\"\n};\nvar convertLegacyPattern = (name) => {\n  if (!name) {\n    return \"none\";\n  }\n  return colorMap[name] || name;\n};\nvar convertLegacyColor = (color) => {\n  if (color == void 0) {\n    return color;\n  }\n  if (color.charAt(0) === \"#\") {\n    color = color.substring(1);\n  }\n  return color.length === 6 ? \"FF\" + color : color;\n};\nvar convertLegacyBorder = (type, weight) => {\n  if (!type) {\n    return \"thin\";\n  }\n  const namedWeight = getWeightName(weight);\n  if (type === \"Continuous\") {\n    return namedWeight;\n  }\n  const mappedName = mappedBorderNames[type];\n  if (namedWeight === \"medium\" && mediumBorders.some((type2) => type2 === mappedName)) {\n    return `medium${mappedName}`;\n  }\n  return `${mappedName.charAt(0).toLowerCase()}${mappedName.substring(1)}`;\n};\nvar convertLegacyHorizontalAlignment = (alignment) => {\n  return horizontalAlignmentMap[alignment] || \"general\";\n};\nvar convertLegacyVerticalAlignment = (alignment) => {\n  return verticalAlignmentMap[alignment] || void 0;\n};\nvar getBorderColor = (color) => {\n  return {\n    name: \"color\",\n    properties: {\n      rawMap: {\n        rgb: convertLegacyColor(color || \"#000000\")\n      }\n    }\n  };\n};\nvar borderFactory = {\n  getTemplate(border) {\n    const { left, right, top, bottom, diagonal } = border;\n    const leftChildren = left ? [getBorderColor(left.color)] : void 0;\n    const rightChildren = right ? [getBorderColor(right.color)] : void 0;\n    const topChildren = top ? [getBorderColor(top.color)] : void 0;\n    const bottomChildren = bottom ? [getBorderColor(bottom.color)] : void 0;\n    const diagonalChildren = diagonal ? [getBorderColor(diagonal.color)] : void 0;\n    return {\n      name: \"border\",\n      children: [\n        {\n          name: \"left\",\n          properties: { rawMap: { style: left && left.style } },\n          children: leftChildren\n        },\n        {\n          name: \"right\",\n          properties: { rawMap: { style: right && right.style } },\n          children: rightChildren\n        },\n        {\n          name: \"top\",\n          properties: { rawMap: { style: top && top.style } },\n          children: topChildren\n        },\n        {\n          name: \"bottom\",\n          properties: { rawMap: { style: bottom && bottom.style } },\n          children: bottomChildren\n        },\n        {\n          name: \"diagonal\",\n          properties: { rawMap: { style: diagonal && diagonal.style } },\n          children: diagonalChildren\n        }\n      ]\n    };\n  }\n};\nvar border_default = borderFactory;\nvar bordersFactory = {\n  getTemplate(borders) {\n    return {\n      name: \"borders\",\n      properties: {\n        rawMap: {\n          count: borders.length\n        }\n      },\n      children: borders.map((border) => border_default.getTemplate(border))\n    };\n  }\n};\nvar borders_default = bordersFactory;\nvar getReadingOrderId = (readingOrder) => {\n  const order = [\"Context\", \"LeftToRight\", \"RightToLeft\"];\n  const pos = order.indexOf(readingOrder);\n  return Math.max(pos, 0);\n};\nvar alignmentFactory = {\n  getTemplate(alignment) {\n    const { horizontal, indent, readingOrder, rotate, shrinkToFit, vertical, wrapText } = alignment;\n    return {\n      name: \"alignment\",\n      properties: {\n        rawMap: {\n          horizontal: horizontal && convertLegacyHorizontalAlignment(horizontal),\n          indent,\n          readingOrder: readingOrder && getReadingOrderId(readingOrder),\n          textRotation: rotate,\n          shrinkToFit,\n          vertical: vertical && convertLegacyVerticalAlignment(vertical),\n          wrapText\n        }\n      }\n    };\n  }\n};\nvar alignment_default = alignmentFactory;\nvar protectionFactory = {\n  getTemplate(protection) {\n    const locked = protection.protected === false ? 0 : 1;\n    const hidden = protection.hideFormula === true ? 1 : 0;\n    return {\n      name: \"protection\",\n      properties: {\n        rawMap: {\n          hidden,\n          locked\n        }\n      }\n    };\n  }\n};\nvar protection_default = protectionFactory;\nvar xfFactory = {\n  getTemplate(xf) {\n    const { alignment, borderId, fillId, fontId, numFmtId, protection, quotePrefix, xfId } = xf;\n    const children = [];\n    if (alignment) {\n      children.push(alignment_default.getTemplate(alignment));\n    }\n    if (protection) {\n      children.push(protection_default.getTemplate(protection));\n    }\n    return {\n      name: \"xf\",\n      properties: {\n        rawMap: {\n          applyAlignment: alignment ? 1 : void 0,\n          applyProtection: protection ? 1 : void 0,\n          applyBorder: borderId ? 1 : void 0,\n          applyFill: fillId ? 1 : void 0,\n          borderId,\n          fillId,\n          applyFont: fontId ? 1 : void 0,\n          fontId,\n          applyNumberFormat: numFmtId ? 1 : void 0,\n          numFmtId,\n          quotePrefix: quotePrefix ? 1 : void 0,\n          xfId\n        }\n      },\n      children: children.length ? children : void 0\n    };\n  }\n};\nvar xf_default = xfFactory;\nvar cellStylesXfsFactory = {\n  getTemplate(xfs) {\n    return {\n      name: \"cellStyleXfs\",\n      properties: {\n        rawMap: {\n          count: xfs.length\n        }\n      },\n      children: xfs.map((xf) => xf_default.getTemplate(xf))\n    };\n  }\n};\nvar cellStyleXfs_default = cellStylesXfsFactory;\nvar borderFactory2 = {\n  getTemplate(cellStyle) {\n    const { builtinId, name, xfId } = cellStyle;\n    return {\n      name: \"cellStyle\",\n      properties: {\n        rawMap: {\n          builtinId,\n          name,\n          xfId\n        }\n      }\n    };\n  }\n};\nvar cellStyle_default = borderFactory2;\nvar cellStylesFactory = {\n  getTemplate(cellStyles) {\n    return {\n      name: \"cellStyles\",\n      properties: {\n        rawMap: {\n          count: cellStyles.length\n        }\n      },\n      children: cellStyles.map((cellStyle) => cellStyle_default.getTemplate(cellStyle))\n    };\n  }\n};\nvar cellStyles_default = cellStylesFactory;\nvar cellXfsFactory = {\n  getTemplate(xfs) {\n    return {\n      name: \"cellXfs\",\n      properties: {\n        rawMap: {\n          count: xfs.length\n        }\n      },\n      children: xfs.map((xf) => xf_default.getTemplate(xf))\n    };\n  }\n};\nvar cellXfs_default = cellXfsFactory;\nvar fillFactory = {\n  getTemplate(fill) {\n    const { patternType, fgTheme, fgTint, fgRgb, bgRgb, bgIndexed } = fill;\n    const pf = {\n      name: \"patternFill\",\n      properties: {\n        rawMap: {\n          patternType\n        }\n      }\n    };\n    if (fgTheme || fgTint || fgRgb) {\n      pf.children = [\n        {\n          name: \"fgColor\",\n          properties: {\n            rawMap: {\n              theme: fgTheme,\n              tint: fgTint,\n              rgb: fgRgb\n            }\n          }\n        }\n      ];\n    }\n    if (bgIndexed || bgRgb) {\n      if (!pf.children) {\n        pf.children = [];\n      }\n      pf.children.push({\n        name: \"bgColor\",\n        properties: {\n          rawMap: {\n            indexed: bgIndexed,\n            rgb: bgRgb\n          }\n        }\n      });\n    }\n    return {\n      name: \"fill\",\n      children: [pf]\n    };\n  }\n};\nvar fill_default = fillFactory;\nvar fillsFactory = {\n  getTemplate(fills) {\n    return {\n      name: \"fills\",\n      properties: {\n        rawMap: {\n          count: fills.length\n        }\n      },\n      children: fills.map((fill) => fill_default.getTemplate(fill))\n    };\n  }\n};\nvar fills_default = fillsFactory;\nvar fontFactory = {\n  getTemplate(font) {\n    const {\n      size,\n      colorTheme,\n      color = \"FF000000\",\n      fontName = \"Calibri\",\n      family,\n      scheme,\n      italic,\n      bold,\n      strikeThrough,\n      outline,\n      shadow: shadow2,\n      underline,\n      verticalAlign\n    } = font;\n    const children = [\n      { name: \"sz\", properties: { rawMap: { val: size } } },\n      { name: \"color\", properties: { rawMap: { theme: colorTheme, rgb: color } } },\n      { name: \"name\", properties: { rawMap: { val: fontName } } }\n    ];\n    if (family) {\n      children.push({ name: \"family\", properties: { rawMap: { val: family } } });\n    }\n    if (scheme) {\n      children.push({ name: \"scheme\", properties: { rawMap: { val: scheme } } });\n    }\n    if (italic) {\n      children.push({ name: \"i\" });\n    }\n    if (bold) {\n      children.push({ name: \"b\" });\n    }\n    if (strikeThrough) {\n      children.push({ name: \"strike\" });\n    }\n    if (outline) {\n      children.push({ name: \"outline\" });\n    }\n    if (shadow2) {\n      children.push({ name: \"shadow\" });\n    }\n    if (underline) {\n      children.push({ name: \"u\", properties: { rawMap: { val: underline } } });\n    }\n    if (verticalAlign) {\n      children.push({ name: \"vertAlign\", properties: { rawMap: { val: verticalAlign } } });\n    }\n    return { name: \"font\", children };\n  }\n};\nvar font_default = fontFactory;\nvar fontsFactory = {\n  getTemplate(fonts) {\n    return {\n      name: \"fonts\",\n      properties: {\n        rawMap: {\n          count: fonts.length\n        }\n      },\n      children: fonts.map((font) => font_default.getTemplate(font))\n    };\n  }\n};\nvar fonts_default = fontsFactory;\nfunction prepareString(str) {\n  const split = str.split(/(\\[[^\\]]*\\])/);\n  for (let i = 0; i < split.length; i++) {\n    let currentString = split[i];\n    if (!currentString.length) {\n      continue;\n    }\n    if (!currentString.startsWith(\"[\")) {\n      currentString = currentString.replace(/\\$/g, '\"$\"');\n    }\n    split[i] = _escapeString22(currentString);\n  }\n  return split.join(\"\");\n}\nvar numberFormatFactory = {\n  getTemplate(numberFormat) {\n    let { formatCode, numFmtId } = numberFormat;\n    if (formatCode.length) {\n      formatCode = prepareString(formatCode);\n    }\n    return {\n      name: \"numFmt\",\n      properties: {\n        rawMap: {\n          formatCode,\n          numFmtId\n        }\n      }\n    };\n  }\n};\nvar numberFormat_default = numberFormatFactory;\nvar numberFormatsFactory = {\n  getTemplate(numberFormats) {\n    return {\n      name: \"numFmts\",\n      properties: {\n        rawMap: {\n          count: numberFormats.length\n        }\n      },\n      children: numberFormats.map((numberFormat) => numberFormat_default.getTemplate(numberFormat))\n    };\n  }\n};\nvar numberFormats_default = numberFormatsFactory;\nvar stylesMap;\nvar registeredNumberFmts;\nvar registeredFonts;\nvar registeredFills;\nvar registeredBorders;\nvar registeredCellStyleXfs;\nvar registeredCellXfs;\nvar registeredCellStyles;\nvar currentSheet;\nvar getStyleName = (name, currentSheet2) => {\n  if (name.indexOf(\"mixedStyle\") !== -1 && currentSheet2 > 1) {\n    name += `_${currentSheet2}`;\n  }\n  return name;\n};\nvar resetStylesheetValues = () => {\n  stylesMap = { base: 0 };\n  registeredNumberFmts = [];\n  registeredFonts = [{ fontName: \"Calibri\", colorTheme: \"1\", family: \"2\", scheme: \"minor\" }];\n  registeredFills = [{ patternType: \"none\" }, { patternType: \"gray125\" }];\n  registeredBorders = [{ left: void 0, right: void 0, top: void 0, bottom: void 0, diagonal: void 0 }];\n  registeredCellStyleXfs = [{ borderId: 0, fillId: 0, fontId: 0, numFmtId: 0 }];\n  registeredCellXfs = [{ borderId: 0, fillId: 0, fontId: 0, numFmtId: 0, xfId: 0 }];\n  registeredCellStyles = [{ builtinId: 0, name: \"Normal\", xfId: 0 }];\n};\nvar registerFill = (fill) => {\n  const convertedPattern = convertLegacyPattern(fill.pattern);\n  const convertedFillColor = convertLegacyColor(fill.color);\n  const convertedPatternColor = convertLegacyColor(fill.patternColor);\n  let pos = registeredFills.findIndex((currentFill) => {\n    const { patternType, fgRgb, bgRgb } = currentFill;\n    if (patternType != convertedPattern || fgRgb != convertedFillColor || bgRgb != convertedPatternColor) {\n      return false;\n    }\n    return true;\n  });\n  if (pos === -1) {\n    pos = registeredFills.length;\n    registeredFills.push({\n      patternType: convertedPattern,\n      fgRgb: convertedFillColor,\n      bgRgb: convertedPatternColor\n    });\n  }\n  return pos;\n};\nvar registerNumberFmt = (format) => {\n  if (numberFormatMap[format]) {\n    return numberFormatMap[format];\n  }\n  let pos = registeredNumberFmts.findIndex((currentFormat) => currentFormat.formatCode === format);\n  if (pos === -1) {\n    pos = registeredNumberFmts.length + 164;\n    registeredNumberFmts.push({ formatCode: format, numFmtId: pos });\n  } else {\n    pos = registeredNumberFmts[pos].numFmtId;\n  }\n  return pos;\n};\nvar registerBorders = (borders) => {\n  const { borderBottom, borderTop, borderLeft, borderRight } = borders;\n  let bottomStyle;\n  let topStyle;\n  let leftStyle;\n  let rightStyle;\n  let bottomColor;\n  let topColor;\n  let leftColor;\n  let rightColor;\n  if (borderLeft) {\n    leftStyle = convertLegacyBorder(borderLeft.lineStyle, borderLeft.weight);\n    leftColor = convertLegacyColor(borderLeft.color);\n  }\n  if (borderRight) {\n    rightStyle = convertLegacyBorder(borderRight.lineStyle, borderRight.weight);\n    rightColor = convertLegacyColor(borderRight.color);\n  }\n  if (borderBottom) {\n    bottomStyle = convertLegacyBorder(borderBottom.lineStyle, borderBottom.weight);\n    bottomColor = convertLegacyColor(borderBottom.color);\n  }\n  if (borderTop) {\n    topStyle = convertLegacyBorder(borderTop.lineStyle, borderTop.weight);\n    topColor = convertLegacyColor(borderTop.color);\n  }\n  let pos = registeredBorders.findIndex((currentBorder) => {\n    const { left, right, top, bottom } = currentBorder;\n    if (!left && (leftStyle || leftColor)) {\n      return false;\n    }\n    if (!right && (rightStyle || rightColor)) {\n      return false;\n    }\n    if (!top && (topStyle || topColor)) {\n      return false;\n    }\n    if (!bottom && (bottomStyle || bottomColor)) {\n      return false;\n    }\n    const { style: clS, color: clC } = left || {};\n    const { style: crS, color: crC } = right || {};\n    const { style: ctS, color: ctC } = top || {};\n    const { style: cbS, color: cbC } = bottom || {};\n    if (clS != leftStyle || clC != leftColor) {\n      return false;\n    }\n    if (crS != rightStyle || crC != rightColor) {\n      return false;\n    }\n    if (ctS != topStyle || ctC != topColor) {\n      return false;\n    }\n    if (cbS != bottomStyle || cbC != bottomColor) {\n      return false;\n    }\n    return true;\n  });\n  if (pos === -1) {\n    pos = registeredBorders.length;\n    registeredBorders.push({\n      left: {\n        style: leftStyle,\n        color: leftColor\n      },\n      right: {\n        style: rightStyle,\n        color: rightColor\n      },\n      top: {\n        style: topStyle,\n        color: topColor\n      },\n      bottom: {\n        style: bottomStyle,\n        color: bottomColor\n      },\n      diagonal: {\n        style: void 0,\n        color: void 0\n      }\n    });\n  }\n  return pos;\n};\nvar registerFont = (font) => {\n  const {\n    fontName: name = \"Calibri\",\n    color,\n    size,\n    bold,\n    italic,\n    outline,\n    shadow: shadow2,\n    strikeThrough,\n    underline,\n    family,\n    verticalAlign\n  } = font;\n  const convertedColor = convertLegacyColor(color);\n  const familyId = getFontFamilyId(family);\n  const convertedUnderline = underline ? underline.toLocaleLowerCase() : void 0;\n  const convertedVerticalAlign = verticalAlign ? verticalAlign.toLocaleLowerCase() : void 0;\n  let pos = registeredFonts.findIndex((currentFont) => {\n    if (currentFont.fontName != name || currentFont.color != convertedColor || currentFont.size != size || currentFont.bold != bold || currentFont.italic != italic || currentFont.outline != outline || currentFont.shadow != shadow2 || currentFont.strikeThrough != strikeThrough || currentFont.underline != convertedUnderline || currentFont.verticalAlign != convertedVerticalAlign || // @ts-ignore\n    currentFont.family != familyId) {\n      return false;\n    }\n    return true;\n  });\n  if (pos === -1) {\n    pos = registeredFonts.length;\n    registeredFonts.push({\n      fontName: name,\n      color: convertedColor,\n      size,\n      bold,\n      italic,\n      outline,\n      shadow: shadow2,\n      strikeThrough,\n      underline: convertedUnderline,\n      verticalAlign: convertedVerticalAlign,\n      family: familyId != null ? familyId.toString() : void 0\n    });\n  }\n  return pos;\n};\nvar registerStyle = (config) => {\n  const { alignment, borders, font, interior, numberFormat, protection, quotePrefix } = config;\n  let { id } = config;\n  let currentFill = 0;\n  let currentBorder = 0;\n  let currentFont = 0;\n  let currentNumberFmt = 0;\n  if (!id) {\n    return;\n  }\n  id = getStyleName(id, currentSheet);\n  if (stylesMap[id] != void 0) {\n    return;\n  }\n  if (interior) {\n    currentFill = registerFill(interior);\n  }\n  if (borders) {\n    currentBorder = registerBorders(borders);\n  }\n  if (font) {\n    currentFont = registerFont(font);\n  }\n  if (numberFormat) {\n    currentNumberFmt = registerNumberFmt(numberFormat.format);\n  }\n  stylesMap[id] = registeredCellXfs.length;\n  registeredCellXfs.push({\n    alignment,\n    borderId: currentBorder || 0,\n    fillId: currentFill || 0,\n    fontId: currentFont || 0,\n    numFmtId: currentNumberFmt || 0,\n    protection,\n    quotePrefix,\n    xfId: 0\n  });\n};\nvar stylesheetFactory = {\n  getTemplate(defaultFontSize) {\n    const numberFormats = numberFormats_default.getTemplate(registeredNumberFmts);\n    const fonts = fonts_default.getTemplate(\n      registeredFonts.map((font) => ({ ...font, size: font.size != null ? font.size : defaultFontSize }))\n    );\n    const fills = fills_default.getTemplate(registeredFills);\n    const borders = borders_default.getTemplate(registeredBorders);\n    const cellStylesXfs = cellStyleXfs_default.getTemplate(registeredCellStyleXfs);\n    const cellXfs = cellXfs_default.getTemplate(registeredCellXfs);\n    const cellStyles = cellStyles_default.getTemplate(registeredCellStyles);\n    resetStylesheetValues();\n    return {\n      name: \"styleSheet\",\n      properties: {\n        rawMap: {\n          \"mc:Ignorable\": \"x14ac x16r2 xr\",\n          xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n          \"xmlns:mc\": \"http://schemas.openxmlformats.org/markup-compatibility/2006\",\n          \"xmlns:x14ac\": \"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\",\n          \"xmlns:x16r2\": \"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main\",\n          \"xmlns:xr\": \"http://schemas.microsoft.com/office/spreadsheetml/2014/revision\"\n        }\n      },\n      children: [\n        numberFormats,\n        fonts,\n        fills,\n        borders,\n        cellStylesXfs,\n        cellXfs,\n        cellStyles,\n        {\n          name: \"tableStyles\",\n          properties: {\n            rawMap: {\n              count: 0,\n              defaultPivotStyle: \"PivotStyleLight16\",\n              defaultTableStyle: \"TableStyleMedium2\"\n            }\n          }\n        }\n      ]\n    };\n  }\n};\nvar getStyleId = (name, currentSheet2) => {\n  return stylesMap[getStyleName(name, currentSheet2)] || 0;\n};\nvar registerStyles = (styles, _currentSheet) => {\n  currentSheet = _currentSheet;\n  if (currentSheet === 1) {\n    resetStylesheetValues();\n  }\n  styles.forEach(registerStyle);\n};\nvar stylesheet_default = stylesheetFactory;\nvar tableFactory = {\n  getTemplate(dataTable, idx) {\n    const {\n      name,\n      columns,\n      rowCount,\n      displayName,\n      headerRowIndex,\n      showRowStripes,\n      showColumnStripes,\n      showFilterButtons,\n      highlightFirstColumn,\n      highlightLastColumn\n    } = dataTable || {};\n    if (!dataTable || !name || !Array.isArray(columns) || !columns.length || !rowCount) {\n      return { name: \"table\" };\n    }\n    const filterColumns = columns.map((col, idx2) => ({\n      name: \"filterColumn\",\n      properties: {\n        rawMap: {\n          colId: idx2.toString(),\n          // For filters, this should start with 0\n          hiddenButton: showFilterButtons[idx2] ? 0 : 1\n        }\n      }\n    }));\n    const firstRow = headerRowIndex + 1;\n    const id = (idx + 1).toString();\n    const firstCell = `A${firstRow}`;\n    const lastCell = `${String.fromCharCode(64 + columns.length)}${firstRow + rowCount}`;\n    const ref = `${firstCell}:${lastCell}`;\n    const displayNameToUse = idx ? `${displayName}_${idx + 1}` : displayName;\n    return {\n      name: \"table\",\n      properties: {\n        rawMap: {\n          xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n          \"xmlns:mc\": \"http://schemas.openxmlformats.org/markup-compatibility/2006\",\n          \"mc:Ignorable\": \"xr xr3\",\n          \"xmlns:xr\": \"http://schemas.microsoft.com/office/spreadsheetml/2014/revision\",\n          \"xmlns:xr3\": \"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3\",\n          name,\n          displayName: displayNameToUse,\n          ref,\n          totalsRowShown: 0,\n          id\n        }\n      },\n      children: [\n        {\n          name: \"autoFilter\",\n          properties: {\n            rawMap: {\n              ref\n            }\n          },\n          children: filterColumns\n        },\n        {\n          name: \"tableColumns\",\n          properties: {\n            rawMap: {\n              count: columns.length\n            }\n          },\n          children: columns.map((col, idx2) => ({\n            name: \"tableColumn\",\n            properties: {\n              rawMap: {\n                id: (idx2 + 1).toString(),\n                name: col,\n                dataCellStyle: \"Normal\"\n              }\n            }\n          }))\n        },\n        {\n          name: \"tableStyleInfo\",\n          properties: {\n            rawMap: {\n              name: \"TableStyleLight1\",\n              showFirstColumn: highlightFirstColumn ? 1 : 0,\n              showLastColumn: highlightLastColumn ? 1 : 0,\n              showRowStripes: showRowStripes ? 1 : 0,\n              showColumnStripes: showColumnStripes ? 1 : 0\n            }\n          }\n        }\n      ]\n    };\n  }\n};\nvar table_default = tableFactory;\nvar getColorChildren = (props) => {\n  const [type, innerType, val, lastClr] = props;\n  return {\n    name: `a:${type}`,\n    children: [\n      {\n        name: `a:${innerType}`,\n        properties: {\n          rawMap: {\n            val,\n            lastClr\n          }\n        }\n      }\n    ]\n  };\n};\nvar colorScheme = {\n  getTemplate() {\n    return {\n      name: \"a:clrScheme\",\n      properties: {\n        rawMap: {\n          name: \"Office\"\n        }\n      },\n      children: [\n        getColorChildren([\"dk1\", \"sysClr\", \"windowText\", \"000000\"]),\n        getColorChildren([\"lt1\", \"sysClr\", \"window\", \"FFFFFF\"]),\n        getColorChildren([\"dk2\", \"srgbClr\", \"44546A\"]),\n        getColorChildren([\"lt2\", \"srgbClr\", \"E7E6E6\"]),\n        getColorChildren([\"accent1\", \"srgbClr\", \"4472C4\"]),\n        getColorChildren([\"accent2\", \"srgbClr\", \"ED7D31\"]),\n        getColorChildren([\"accent3\", \"srgbClr\", \"A5A5A5\"]),\n        getColorChildren([\"accent4\", \"srgbClr\", \"FFC000\"]),\n        getColorChildren([\"accent5\", \"srgbClr\", \"5B9BD5\"]),\n        getColorChildren([\"accent6\", \"srgbClr\", \"70AD47\"]),\n        getColorChildren([\"hlink\", \"srgbClr\", \"0563C1\"]),\n        getColorChildren([\"folHlink\", \"srgbClr\", \"954F72\"])\n      ]\n    };\n  }\n};\nvar colorScheme_default = colorScheme;\nvar getFont = (props) => {\n  const [type, typeface, script, panose] = props;\n  return {\n    name: `a:${type}`,\n    properties: {\n      rawMap: {\n        script,\n        typeface,\n        panose\n      }\n    }\n  };\n};\nvar fontScheme = {\n  getTemplate() {\n    return {\n      name: \"a:fontScheme\",\n      properties: {\n        rawMap: {\n          name: \"Office\"\n        }\n      },\n      children: [\n        {\n          name: \"a:majorFont\",\n          children: [\n            getFont([\"latin\", \"Calibri Light\", void 0, \"020F0302020204030204\"]),\n            getFont([\"ea\", \"\"]),\n            getFont([\"cs\", \"\"]),\n            getFont([\"font\", \"\\u6E38\\u30B4\\u30B7\\u30C3\\u30AF Light\", \"Jpan\"]),\n            getFont([\"font\", \"\\uB9D1\\uC740 \\uACE0\\uB515\", \"Hang\"]),\n            getFont([\"font\", \"\\u7B49\\u7EBF Light\", \"Hans\"]),\n            getFont([\"font\", \"\\u65B0\\u7D30\\u660E\\u9AD4\", \"Hant\"]),\n            getFont([\"font\", \"Times New Roman\", \"Arab\"]),\n            getFont([\"font\", \"Times New Roman\", \"Hebr\"]),\n            getFont([\"font\", \"Tahoma\", \"Thai\"]),\n            getFont([\"font\", \"Nyala\", \"Ethi\"]),\n            getFont([\"font\", \"Vrinda\", \"Beng\"]),\n            getFont([\"font\", \"Shruti\", \"Gujr\"]),\n            getFont([\"font\", \"MoolBoran\", \"Khmr\"]),\n            getFont([\"font\", \"Tunga\", \"Knda\"]),\n            getFont([\"font\", \"Raavi\", \"Guru\"]),\n            getFont([\"font\", \"Euphemia\", \"Cans\"]),\n            getFont([\"font\", \"Plantagenet Cherokee\", \"Cher\"]),\n            getFont([\"font\", \"Microsoft Yi Baiti\", \"Yiii\"]),\n            getFont([\"font\", \"Microsoft Himalaya\", \"Tibt\"]),\n            getFont([\"font\", \"MV Boli\", \"Thaa\"]),\n            getFont([\"font\", \"Mangal\", \"Deva\"]),\n            getFont([\"font\", \"Gautami\", \"Telu\"]),\n            getFont([\"font\", \"Latha\", \"Taml\"]),\n            getFont([\"font\", \"Estrangelo Edessa\", \"Syrc\"]),\n            getFont([\"font\", \"Kalinga\", \"Orya\"]),\n            getFont([\"font\", \"Kartika\", \"Mlym\"]),\n            getFont([\"font\", \"DokChampa\", \"Laoo\"]),\n            getFont([\"font\", \"Iskoola Pota\", \"Sinh\"]),\n            getFont([\"font\", \"Mongolian Baiti\", \"Mong\"]),\n            getFont([\"font\", \"Times New Roman\", \"Viet\"]),\n            getFont([\"font\", \"Microsoft Uighur\", \"Uigh\"]),\n            getFont([\"font\", \"Sylfaen\", \"Geor\"]),\n            getFont([\"font\", \"Arial\", \"Armn\"]),\n            getFont([\"font\", \"Leelawadee UI\", \"Bugi\"]),\n            getFont([\"font\", \"Microsoft JhengHei\", \"Bopo\"]),\n            getFont([\"font\", \"Javanese Text\", \"Java\"]),\n            getFont([\"font\", \"Segoe UI\", \"Lisu\"]),\n            getFont([\"font\", \"Myanmar Text\", \"Mymr\"]),\n            getFont([\"font\", \"Ebrima\", \"Nkoo\"]),\n            getFont([\"font\", \"Nirmala UI\", \"Olck\"]),\n            getFont([\"font\", \"Ebrima\", \"Osma\"]),\n            getFont([\"font\", \"Phagspa\", \"Phag\"]),\n            getFont([\"font\", \"Estrangelo Edessa\", \"Syrn\"]),\n            getFont([\"font\", \"Estrangelo Edessa\", \"Syrj\"]),\n            getFont([\"font\", \"Estrangelo Edessa\", \"Syre\"]),\n            getFont([\"font\", \"Nirmala UI\", \"Sora\"]),\n            getFont([\"font\", \"Microsoft Tai Le\", \"Tale\"]),\n            getFont([\"font\", \"Microsoft New Tai Lue\", \"Talu\"]),\n            getFont([\"font\", \"Ebrima\", \"Tfng\"])\n          ]\n        },\n        {\n          name: \"a:minorFont\",\n          children: [\n            getFont([\"latin\", \"Calibri\", void 0, \"020F0502020204030204\"]),\n            getFont([\"ea\", \"\"]),\n            getFont([\"cs\", \"\"]),\n            getFont([\"font\", \"\\u6E38\\u30B4\\u30B7\\u30C3\\u30AF\", \"Jpan\"]),\n            getFont([\"font\", \"\\uB9D1\\uC740 \\uACE0\\uB515\", \"Hang\"]),\n            getFont([\"font\", \"\\u7B49\\u7EBF\", \"Hans\"]),\n            getFont([\"font\", \"\\u65B0\\u7D30\\u660E\\u9AD4\", \"Hant\"]),\n            getFont([\"font\", \"Arial\", \"Arab\"]),\n            getFont([\"font\", \"Arial\", \"Hebr\"]),\n            getFont([\"font\", \"Tahoma\", \"Thai\"]),\n            getFont([\"font\", \"Nyala\", \"Ethi\"]),\n            getFont([\"font\", \"Vrinda\", \"Beng\"]),\n            getFont([\"font\", \"Shruti\", \"Gujr\"]),\n            getFont([\"font\", \"DaunPenh\", \"Khmr\"]),\n            getFont([\"font\", \"Tunga\", \"Knda\"]),\n            getFont([\"font\", \"Raavi\", \"Guru\"]),\n            getFont([\"font\", \"Euphemia\", \"Cans\"]),\n            getFont([\"font\", \"Plantagenet Cherokee\", \"Cher\"]),\n            getFont([\"font\", \"Microsoft Yi Baiti\", \"Yiii\"]),\n            getFont([\"font\", \"Microsoft Himalaya\", \"Tibt\"]),\n            getFont([\"font\", \"MV Boli\", \"Thaa\"]),\n            getFont([\"font\", \"Mangal\", \"Deva\"]),\n            getFont([\"font\", \"Gautami\", \"Telu\"]),\n            getFont([\"font\", \"Latha\", \"Taml\"]),\n            getFont([\"font\", \"Estrangelo Edessa\", \"Syrc\"]),\n            getFont([\"font\", \"Kalinga\", \"Orya\"]),\n            getFont([\"font\", \"Kartika\", \"Mlym\"]),\n            getFont([\"font\", \"DokChampa\", \"Laoo\"]),\n            getFont([\"font\", \"Iskoola Pota\", \"Sinh\"]),\n            getFont([\"font\", \"Mongolian Baiti\", \"Mong\"]),\n            getFont([\"font\", \"Arial\", \"Viet\"]),\n            getFont([\"font\", \"Microsoft Uighur\", \"Uigh\"]),\n            getFont([\"font\", \"Sylfaen\", \"Geor\"]),\n            getFont([\"font\", \"Arial\", \"Armn\"]),\n            getFont([\"font\", \"Leelawadee UI\", \"Bugi\"]),\n            getFont([\"font\", \"Microsoft JhengHei\", \"Bopo\"]),\n            getFont([\"font\", \"Javanese Text\", \"Java\"]),\n            getFont([\"font\", \"Segoe UI\", \"Lisu\"]),\n            getFont([\"font\", \"Myanmar Text\", \"Mymr\"]),\n            getFont([\"font\", \"Ebrima\", \"Nkoo\"]),\n            getFont([\"font\", \"Nirmala UI\", \"Olck\"]),\n            getFont([\"font\", \"Ebrima\", \"Osma\"]),\n            getFont([\"font\", \"Phagspa\", \"Phag\"]),\n            getFont([\"font\", \"Estrangelo Edessa\", \"Syrn\"]),\n            getFont([\"font\", \"Estrangelo Edessa\", \"Syrj\"]),\n            getFont([\"font\", \"Estrangelo Edessa\", \"Syre\"]),\n            getFont([\"font\", \"Nirmala UI\", \"Sora\"]),\n            getFont([\"font\", \"Microsoft Tai Le\", \"Tale\"]),\n            getFont([\"font\", \"Microsoft New Tai Lue\", \"Talu\"]),\n            getFont([\"font\", \"Ebrima\", \"Tfng\"])\n          ]\n        }\n      ]\n    };\n  }\n};\nvar fontScheme_default = fontScheme;\nvar getPropertyVal = (name, val, children) => ({\n  name: `a:${name}`,\n  properties: {\n    rawMap: {\n      val\n    }\n  },\n  children\n});\nvar getGs = (props) => {\n  const [pos, schemeColor, satMod, lumMod, tint, shade] = props;\n  const children = [];\n  children.push(getPropertyVal(\"satMod\", satMod));\n  if (lumMod) {\n    children.push(getPropertyVal(\"lumMod\", lumMod));\n  }\n  if (tint) {\n    children.push(getPropertyVal(\"tint\", tint));\n  }\n  if (shade) {\n    children.push(getPropertyVal(\"shade\", shade));\n  }\n  return {\n    name: \"a:gs\",\n    properties: {\n      rawMap: {\n        pos\n      }\n    },\n    children: [\n      {\n        name: \"a:schemeClr\",\n        properties: {\n          rawMap: {\n            val: schemeColor\n          }\n        },\n        children\n      }\n    ]\n  };\n};\nvar getSolidFill = (val, children) => ({\n  name: \"a:solidFill\",\n  children: [getPropertyVal(\"schemeClr\", val, children)]\n});\nvar getGradFill = (props) => {\n  const [rotWithShape, gs1, gs2, gs3, lin] = props;\n  const [ang, scaled] = lin;\n  return {\n    name: \"a:gradFill\",\n    properties: {\n      rawMap: {\n        rotWithShape\n      }\n    },\n    children: [\n      {\n        name: \"a:gsLst\",\n        children: [getGs(gs1), getGs(gs2), getGs(gs3)]\n      },\n      {\n        name: \"a:lin\",\n        properties: {\n          rawMap: {\n            ang,\n            scaled\n          }\n        }\n      }\n    ]\n  };\n};\nvar getLine = (props) => {\n  const [w, cap, cmpd, algn] = props;\n  return {\n    name: \"a:ln\",\n    properties: {\n      rawMap: { w, cap, cmpd, algn }\n    },\n    children: [\n      getSolidFill(\"phClr\"),\n      getPropertyVal(\"prstDash\", \"solid\"),\n      {\n        name: \"a:miter\",\n        properties: {\n          rawMap: {\n            lim: \"800000\"\n          }\n        }\n      }\n    ]\n  };\n};\nvar getEffectStyle = (shadow2) => {\n  const children = [];\n  if (shadow2) {\n    const [blurRad, dist, dir, algn, rotWithShape] = shadow2;\n    children.push({\n      name: \"a:outerShdw\",\n      properties: {\n        rawMap: { blurRad, dist, dir, algn, rotWithShape }\n      },\n      children: [getPropertyVal(\"srgbClr\", \"000000\", [getPropertyVal(\"alpha\", \"63000\")])]\n    });\n  }\n  return {\n    name: \"a:effectStyle\",\n    children: [\n      Object.assign(\n        {},\n        {\n          name: \"a:effectLst\"\n        },\n        children.length ? { children } : {}\n      )\n    ]\n  };\n};\nvar getFillStyleList = () => ({\n  name: \"a:fillStyleLst\",\n  children: [\n    getSolidFill(\"phClr\"),\n    getGradFill([\n      \"1\",\n      [\"0\", \"phClr\", \"105000\", \"110000\", \"67000\"],\n      [\"50000\", \"phClr\", \"103000\", \"105000\", \"73000\"],\n      [\"100000\", \"phClr\", \"109000\", \"105000\", \"81000\"],\n      [\"5400000\", \"0\"]\n    ]),\n    getGradFill([\n      \"1\",\n      [\"0\", \"phClr\", \"103000\", \"102000\", \"94000\"],\n      [\"50000\", \"phClr\", \"110000\", \"100000\", void 0, \"100000\"],\n      [\"100000\", \"phClr\", \"120000\", \"99000\", void 0, \"78000\"],\n      [\"5400000\", \"0\"]\n    ])\n  ]\n});\nvar getLineStyleList = () => ({\n  name: \"a:lnStyleLst\",\n  children: [\n    getLine([\"6350\", \"flat\", \"sng\", \"ctr\"]),\n    getLine([\"12700\", \"flat\", \"sng\", \"ctr\"]),\n    getLine([\"19050\", \"flat\", \"sng\", \"ctr\"])\n  ]\n});\nvar getEffectStyleList = () => ({\n  name: \"a:effectStyleLst\",\n  children: [getEffectStyle(), getEffectStyle(), getEffectStyle([\"57150\", \"19050\", \"5400000\", \"ctr\", \"0\"])]\n});\nvar getBgFillStyleList = () => ({\n  name: \"a:bgFillStyleLst\",\n  children: [\n    getSolidFill(\"phClr\"),\n    getSolidFill(\"phClr\", [getPropertyVal(\"tint\", \"95000\"), getPropertyVal(\"satMod\", \"170000\")]),\n    getGradFill([\n      \"1\",\n      [\"0\", \"phClr\", \"150000\", \"102000\", \"93000\", \"98000\"],\n      [\"50000\", \"phClr\", \"130000\", \"103000\", \"98000\", \"90000\"],\n      [\"100000\", \"phClr\", \"120000\", void 0, void 0, \"63000\"],\n      [\"5400000\", \"0\"]\n    ])\n  ]\n});\nvar formatScheme = {\n  getTemplate() {\n    return {\n      name: \"a:fmtScheme\",\n      properties: {\n        rawMap: {\n          name: \"Office\"\n        }\n      },\n      children: [getFillStyleList(), getLineStyleList(), getEffectStyleList(), getBgFillStyleList()]\n    };\n  }\n};\nvar formatScheme_default = formatScheme;\nvar themeElements = {\n  getTemplate() {\n    return {\n      name: \"a:themeElements\",\n      children: [colorScheme_default.getTemplate(), fontScheme_default.getTemplate(), formatScheme_default.getTemplate()]\n    };\n  }\n};\nvar themeElements_default = themeElements;\nvar officeTheme = {\n  getTemplate() {\n    return {\n      name: \"a:theme\",\n      properties: {\n        prefixedAttributes: [\n          {\n            prefix: \"xmlns:\",\n            map: {\n              a: \"http://schemas.openxmlformats.org/drawingml/2006/main\"\n            }\n          }\n        ],\n        rawMap: {\n          name: \"Office Theme\"\n        }\n      },\n      children: [\n        themeElements_default.getTemplate(),\n        {\n          name: \"a:objectDefaults\"\n        },\n        {\n          name: \"a:extraClrSchemeLst\"\n        }\n      ]\n    };\n  }\n};\nvar office_default = officeTheme;\nvar getShapeLayout = () => ({\n  name: \"o:shapelayout\",\n  properties: {\n    prefixedAttributes: [\n      {\n        prefix: \"v:\",\n        map: {\n          ext: \"edit\"\n        }\n      }\n    ]\n  },\n  children: [\n    {\n      name: \"o:idmap\",\n      properties: {\n        prefixedAttributes: [\n          {\n            prefix: \"v:\",\n            map: {\n              ext: \"edit\"\n            }\n          }\n        ],\n        rawMap: {\n          data: \"1\"\n        }\n      }\n    }\n  ]\n});\nvar getStroke = () => ({\n  name: \"v:stroke\",\n  properties: {\n    rawMap: {\n      joinstyle: \"miter\"\n    }\n  }\n});\nvar getFormulas = (formulas) => ({\n  name: \"v:formulas\",\n  children: formulas.map((formula) => ({\n    name: \"v:f\",\n    properties: {\n      rawMap: {\n        eqn: formula\n      }\n    }\n  }))\n});\nvar getPath = () => ({\n  name: \"v:path\",\n  properties: {\n    prefixedAttributes: [\n      {\n        prefix: \"o:\",\n        map: {\n          connecttype: \"rect\",\n          extrusionok: \"f\"\n        }\n      }\n    ],\n    rawMap: {\n      gradientshapeok: \"t\"\n    }\n  }\n});\nvar getLock = (params) => {\n  const { aspectratio, rotation } = params || {};\n  const rawMap = {};\n  if (aspectratio) {\n    rawMap.aspectratio = \"t\";\n  }\n  if (rotation) {\n    rawMap.rotation = \"t\";\n  }\n  return {\n    name: \"o:lock\",\n    properties: {\n      prefixedAttributes: [\n        {\n          prefix: \"v:\",\n          map: {\n            ext: \"edit\"\n          }\n        }\n      ],\n      rawMap\n    }\n  };\n};\nfunction mapNumber(value, startSource, endSource, startTarget, endTarget) {\n  return (value - startSource) / (endSource - startSource) * (endTarget - startTarget) + startTarget;\n}\nvar getImageData = (image, idx) => {\n  let rawMap;\n  const { recolor, brightness, contrast, id } = image;\n  if (recolor) {\n    rawMap = {};\n    if (recolor === \"Washout\" || recolor === \"Grayscale\") {\n      rawMap.gain = \"19661f\";\n      rawMap.blacklevel = \"22938f\";\n    }\n    if (recolor === \"Black & White\" || recolor === \"Grayscale\") {\n      rawMap.grayscale = \"t\";\n      if (recolor === \"Black & White\") {\n        rawMap.bilevel = \"t\";\n      }\n    }\n  }\n  if (!recolor || recolor === \"Grayscale\") {\n    if (!rawMap) {\n      rawMap = {};\n    }\n    if (contrast != null && contrast !== 50) {\n      let gain = \"1\";\n      if (contrast >= 0) {\n        if (contrast < 50) {\n          gain = String(contrast / 50);\n        } else if (contrast < 100) {\n          gain = String(50 / (100 - contrast));\n        } else if (contrast === 100) {\n          gain = \"2147483647f\";\n        }\n      }\n      rawMap.gain = gain;\n    }\n    if (brightness != null && brightness !== 50) {\n      rawMap.blacklevel = mapNumber(brightness, 0, 100, -0.5, 0.5).toString();\n    }\n  }\n  return {\n    name: \"v:imagedata\",\n    properties: {\n      prefixedAttributes: [\n        {\n          prefix: \"o:\",\n          map: {\n            relid: `rId${idx}`,\n            title: id\n          }\n        }\n      ],\n      rawMap\n    }\n  };\n};\nvar getShapeType = () => {\n  const formulas = [\n    \"if lineDrawn pixelLineWidth 0\",\n    \"sum @0 1 0\",\n    \"sum 0 0 @1\",\n    \"prod @2 1 2\",\n    \"prod @3 21600 pixelWidth\",\n    \"prod @3 21600 pixelHeight\",\n    \"sum @0 0 1\",\n    \"prod @6 1 2\",\n    \"prod @7 21600 pixelWidth\",\n    \"sum @8 21600 0\",\n    \"prod @7 21600 pixelHeight\",\n    \"sum @10 21600 0\"\n  ];\n  return {\n    name: \"v:shapetype\",\n    properties: {\n      prefixedAttributes: [\n        {\n          prefix: \"o:\",\n          map: {\n            spt: \"75\",\n            preferrelative: \"t\"\n          }\n        }\n      ],\n      rawMap: {\n        coordsize: \"21600,21600\",\n        filled: \"f\",\n        id: \"_x0000_t75\",\n        path: \"m@4@5l@4@11@9@11@9@5xe\",\n        stroked: \"f\"\n      }\n    },\n    children: [getStroke(), getFormulas(formulas), getPath(), getLock({ aspectratio: true })]\n  };\n};\nvar pixelToPoint = (value) => Math.floor((value ?? 0) * 0.74999943307122);\nvar getShape = (image, idx) => {\n  const { width = 0, height = 0, altText } = image;\n  const imageWidth = pixelToPoint(width);\n  const imageHeight = pixelToPoint(height);\n  return {\n    name: \"v:shape\",\n    properties: {\n      rawMap: {\n        id: image.headerFooterPosition,\n        \"o:spid\": \"_x0000_s1025\",\n        style: `position: absolute; margin-left: 0; margin-top: 10in; margin-bottom: 0; margin-right: 0; width: ${imageWidth}pt; height: ${imageHeight}pt; z-index: ${idx + 1}`,\n        type: \"#_x0000_t75\",\n        alt: altText\n      }\n    },\n    children: [getImageData(image, idx + 1), getLock({ rotation: true })]\n  };\n};\nvar vmlDrawingFactory = {\n  getTemplate(params) {\n    const headerFooterImages = ExcelXlsxFactory.worksheetHeaderFooterImages.get(params.sheetIndex) || [];\n    const children = [\n      getShapeLayout(),\n      getShapeType(),\n      ...headerFooterImages.map((img, idx) => getShape(img, idx))\n    ];\n    return {\n      name: \"xml\",\n      properties: {\n        prefixedAttributes: [\n          {\n            prefix: \"xmlns:\",\n            map: {\n              v: \"urn:schemas-microsoft-com:vml\",\n              o: \"urn:schemas-microsoft-com:office:office\",\n              x: \"urn:schemas-microsoft-com:office:excel\"\n            }\n          }\n        ]\n      },\n      children\n    };\n  }\n};\nvar vmlDrawing_default = vmlDrawingFactory;\nvar sheetFactory = {\n  getTemplate(name, idx) {\n    const sheetId = (idx + 1).toString();\n    return {\n      name: \"sheet\",\n      properties: {\n        rawMap: {\n          name,\n          sheetId,\n          \"r:id\": `rId${sheetId}`\n        }\n      }\n    };\n  }\n};\nvar sheet_default = sheetFactory;\nvar sheetsFactory = {\n  getTemplate(names) {\n    return {\n      name: \"sheets\",\n      children: names.map((sheet, idx) => sheet_default.getTemplate(sheet, idx))\n    };\n  }\n};\nvar sheets_default = sheetsFactory;\nvar workbookFactory = {\n  getTemplate(names, activeTab) {\n    return {\n      name: \"workbook\",\n      properties: {\n        prefixedAttributes: [\n          {\n            prefix: \"xmlns:\",\n            map: {\n              r: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n            }\n          }\n        ],\n        rawMap: {\n          xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"\n        }\n      },\n      children: [\n        {\n          name: \"bookViews\",\n          children: [\n            {\n              name: \"workbookView\",\n              properties: {\n                rawMap: {\n                  activeTab\n                }\n              }\n            }\n          ]\n        },\n        sheets_default.getTemplate(names)\n      ]\n    };\n  }\n};\nvar workbook_default = workbookFactory;\nvar getExcelCellWidth = (width) => Math.ceil((width - 12) / 7 + 1);\nvar columnFactory = {\n  getTemplate(config) {\n    const { min, max, outlineLevel, s, width, hidden, bestFit } = config;\n    let excelWidth = 1;\n    let customWidth = \"0\";\n    if (width > 1) {\n      excelWidth = getExcelCellWidth(width);\n      customWidth = \"1\";\n    }\n    return {\n      name: \"col\",\n      properties: {\n        rawMap: {\n          min,\n          max,\n          outlineLevel: outlineLevel != null ? outlineLevel : void 0,\n          width: excelWidth,\n          style: s,\n          hidden: hidden ? \"1\" : \"0\",\n          bestFit: bestFit ? \"1\" : \"0\",\n          customWidth\n        }\n      }\n    };\n  }\n};\nvar column_default = columnFactory;\nvar mergeCellFactory = {\n  getTemplate(ref) {\n    return {\n      name: \"mergeCell\",\n      properties: {\n        rawMap: {\n          ref\n        }\n      }\n    };\n  }\n};\nvar mergeCell_default = mergeCellFactory;\nvar convertLegacyType = (type) => {\n  const t = type.charAt(0).toLowerCase();\n  return t === \"s\" ? \"inlineStr\" : t;\n};\nvar cellFactory = {\n  getTemplate(config, idx, currentSheet2) {\n    const { ref, data, styleId } = config;\n    const { type, value } = data || { type: \"empty\", value: null };\n    let convertedType = type;\n    if (type === \"f\") {\n      convertedType = \"str\";\n    } else if (type.charAt(0) === type.charAt(0).toUpperCase()) {\n      convertedType = convertLegacyType(type);\n    }\n    const obj = {\n      name: \"c\",\n      properties: {\n        rawMap: {\n          r: ref,\n          t: convertedType === \"empty\" ? void 0 : convertedType,\n          s: styleId ? getStyleId(styleId, currentSheet2) : void 0\n        }\n      }\n    };\n    if (convertedType === \"empty\") {\n      return obj;\n    }\n    let children;\n    if (convertedType === \"str\" && type === \"f\") {\n      children = [\n        {\n          name: \"f\",\n          textNode: _escapeString32(replaceInvisibleCharacters(value), false)\n        }\n      ];\n    } else if (convertedType === \"inlineStr\") {\n      children = [\n        {\n          name: \"is\",\n          children: [\n            {\n              name: \"t\",\n              textNode: _escapeString32(replaceInvisibleCharacters(value), false)\n            }\n          ]\n        }\n      ];\n    } else {\n      children = [\n        {\n          name: \"v\",\n          textNode: value\n        }\n      ];\n    }\n    return Object.assign({}, obj, { children });\n  }\n};\nvar cell_default = cellFactory;\nvar addEmptyCells = (cells, rowIdx) => {\n  const mergeMap = [];\n  let posCounter = 0;\n  for (let i = 0; i < cells.length; i++) {\n    const cell = cells[i];\n    if (cell.mergeAcross) {\n      mergeMap.push({\n        pos: i,\n        excelPos: posCounter\n      });\n      posCounter += cell.mergeAcross;\n    }\n    posCounter++;\n  }\n  if (mergeMap.length) {\n    for (let i = mergeMap.length - 1; i >= 0; i--) {\n      const mergedCells = [];\n      const cell = cells[mergeMap[i].pos];\n      for (let j = 1; j <= cell.mergeAcross; j++) {\n        mergedCells.push({\n          ref: `${getExcelColumnName(mergeMap[i].excelPos + 1 + j)}${rowIdx + 1}`,\n          styleId: cell.styleId,\n          data: { type: \"empty\", value: null }\n        });\n      }\n      if (mergedCells.length) {\n        cells.splice(mergeMap[i].pos + 1, 0, ...mergedCells);\n      }\n    }\n  }\n};\nvar shouldDisplayCell = (cell) => cell.data?.value !== \"\" || cell.styleId !== void 0;\nvar rowFactory = {\n  getTemplate(config, idx, currentSheet2) {\n    const { collapsed, hidden, height, outlineLevel, cells = [] } = config;\n    addEmptyCells(cells, idx);\n    const children = cells.filter(shouldDisplayCell).map((cell, idx2) => cell_default.getTemplate(cell, idx2, currentSheet2));\n    return {\n      name: \"row\",\n      properties: {\n        rawMap: {\n          r: idx + 1,\n          collapsed: collapsed ? \"1\" : \"0\",\n          hidden: hidden ? \"1\" : \"0\",\n          ht: height,\n          customHeight: height != null ? \"1\" : \"0\",\n          spans: \"1:1\",\n          outlineLevel: outlineLevel || void 0\n        }\n      },\n      children\n    };\n  }\n};\nvar row_default = rowFactory;\nvar getMergedCellsAndAddColumnGroups = (rows, cols, suppressColumnOutline) => {\n  const mergedCells = [];\n  const cellsWithCollapsibleGroups = [];\n  rows.forEach((currentRow, rowIdx) => {\n    const cells = currentRow.cells;\n    let merges = 0;\n    let lastCol;\n    cells.forEach((currentCell, cellIdx) => {\n      const min = cellIdx + merges + 1;\n      const start = getExcelColumnName(min);\n      const outputRow = rowIdx + 1;\n      if (currentCell.mergeAcross) {\n        merges += currentCell.mergeAcross;\n        const end = getExcelColumnName(cellIdx + merges + 1);\n        mergedCells.push(`${start}${outputRow}:${end}${outputRow}`);\n      }\n      if (!cols[min - 1]) {\n        cols[min - 1] = {};\n      }\n      const { collapsibleRanges } = currentCell;\n      if (collapsibleRanges) {\n        collapsibleRanges.forEach((range) => {\n          cellsWithCollapsibleGroups.push([min + range[0], min + range[1]]);\n        });\n      }\n      lastCol = cols[min - 1];\n      lastCol.min = min;\n      lastCol.max = min;\n      currentCell.ref = `${start}${outputRow}`;\n    });\n  });\n  cellsWithCollapsibleGroups.sort((a, b) => {\n    if (a[0] !== b[0]) {\n      return a[0] - b[0];\n    }\n    return b[1] - a[1];\n  });\n  const rangeMap = /* @__PURE__ */ new Map();\n  const outlineLevel = /* @__PURE__ */ new Map();\n  cellsWithCollapsibleGroups.filter((currentRange) => {\n    const rangeString = currentRange.toString();\n    const inMap = rangeMap.get(rangeString);\n    if (inMap) {\n      return false;\n    }\n    rangeMap.set(rangeString, true);\n    return true;\n  }).forEach((range) => {\n    const refCol = cols.find((col) => col.min == range[0] && col.max == range[1]);\n    const currentOutlineLevel = outlineLevel.get(range[0]);\n    cols.push({\n      min: range[0],\n      max: range[1],\n      outlineLevel: suppressColumnOutline ? void 0 : currentOutlineLevel || 1,\n      width: (refCol || { width: 100 }).width\n    });\n    outlineLevel.set(range[0], (currentOutlineLevel || 0) + 1);\n  });\n  return mergedCells;\n};\nvar getPageOrientation = (orientation) => {\n  if (!orientation || orientation !== \"Portrait\" && orientation !== \"Landscape\") {\n    return \"portrait\";\n  }\n  return orientation.toLocaleLowerCase();\n};\nvar getPageSize = (pageSize) => {\n  if (pageSize == null) {\n    return 1;\n  }\n  const positions = [\n    \"Letter\",\n    \"Letter Small\",\n    \"Tabloid\",\n    \"Ledger\",\n    \"Legal\",\n    \"Statement\",\n    \"Executive\",\n    \"A3\",\n    \"A4\",\n    \"A4 Small\",\n    \"A5\",\n    \"A6\",\n    \"B4\",\n    \"B5\",\n    \"Folio\",\n    \"Envelope\",\n    \"Envelope DL\",\n    \"Envelope C5\",\n    \"Envelope B5\",\n    \"Envelope C3\",\n    \"Envelope C4\",\n    \"Envelope C6\",\n    \"Envelope Monarch\",\n    \"Japanese Postcard\",\n    \"Japanese Double Postcard\"\n  ];\n  const pos = positions.indexOf(pageSize);\n  return pos === -1 ? 1 : pos + 1;\n};\nvar replaceHeaderFooterTokens = (value) => {\n  const map = {\n    \"&[Page]\": \"&P\",\n    \"&[Pages]\": \"&N\",\n    \"&[Date]\": \"&D\",\n    \"&[Time]\": \"&T\",\n    \"&[Tab]\": \"&A\",\n    \"&[Path]\": \"&Z\",\n    \"&[File]\": \"&F\",\n    \"&[Picture]\": \"&G\"\n  };\n  _iterateObject4(map, (key, val) => {\n    value = value.replace(key, val);\n  });\n  return value;\n};\nvar getHeaderPosition = (position) => {\n  if (position === \"Center\") {\n    return \"C\";\n  }\n  if (position === \"Right\") {\n    return \"R\";\n  }\n  return \"L\";\n};\nvar applyHeaderFontStyle = (headerString, font) => {\n  if (!font) {\n    return headerString;\n  }\n  headerString += \"&amp;&quot;\";\n  headerString += font.fontName || \"Calibri\";\n  if (font.bold !== font.italic) {\n    headerString += font.bold ? \",Bold\" : \",Italic\";\n  } else if (font.bold) {\n    headerString += \",Bold Italic\";\n  } else {\n    headerString += \",Regular\";\n  }\n  headerString += \"&quot;\";\n  if (font.size) {\n    headerString += `&amp;${font.size}`;\n  }\n  if (font.strikeThrough) {\n    headerString += \"&amp;S\";\n  }\n  if (font.underline) {\n    headerString += `&amp;${font.underline === \"Double\" ? \"E\" : \"U\"}`;\n  }\n  if (font.color) {\n    headerString += `&amp;K${font.color.replace(\"#\", \"\").toUpperCase()}`;\n  }\n  return headerString;\n};\nvar processHeaderFooterContent = (content, location, rule) => content.reduce((prev, curr, idx) => {\n  const pos = getHeaderPosition(curr.position);\n  const output = applyHeaderFontStyle(`${prev}&amp;${pos}`, curr.font);\n  const PositionMap = [\"Left\", \"Center\", \"Right\"];\n  if (!curr.position) {\n    curr.position = PositionMap[idx];\n  }\n  const { image } = curr;\n  if (curr.value === \"&[Picture]\" && image) {\n    const imagePosition = `${pos}${location}${rule}`;\n    ExcelXlsxFactory.addHeaderFooterImageToMap(image, imagePosition);\n  }\n  return `${output}${_escapeString42(replaceHeaderFooterTokens(curr.value))}`;\n}, \"\");\nvar buildHeaderFooter = (headerFooterConfig) => {\n  const rules = [\"all\", \"first\", \"even\"];\n  const headersAndFooters = [];\n  rules.forEach((rule) => {\n    const headerFooter = headerFooterConfig[rule];\n    const namePrefix = rule === \"all\" ? \"odd\" : rule;\n    if (!headerFooter) {\n      return;\n    }\n    for (const [key, value] of Object.entries(headerFooter)) {\n      const nameSuffix = `${key.charAt(0).toUpperCase()}${key.slice(1)}`;\n      const location = key[0].toUpperCase();\n      if (value) {\n        const normalizedRule = rule === \"all\" ? \"\" : rule.toUpperCase();\n        headersAndFooters.push({\n          name: `${namePrefix}${nameSuffix}`,\n          properties: {\n            rawMap: { \"xml:space\": \"preserve\" }\n          },\n          textNode: processHeaderFooterContent(value, location, normalizedRule)\n        });\n      }\n    }\n  });\n  return headersAndFooters;\n};\nvar addColumns = (columns) => {\n  return (params) => {\n    if (columns.length) {\n      params.children.push({\n        name: \"cols\",\n        children: columns.map((column) => column_default.getTemplate(column))\n      });\n    }\n    return params;\n  };\n};\nvar addSheetData = (rows, sheetNumber) => {\n  return (params) => {\n    if (rows.length) {\n      params.children.push({\n        name: \"sheetData\",\n        children: rows.map((row, idx) => row_default.getTemplate(row, idx, sheetNumber))\n      });\n    }\n    return params;\n  };\n};\nvar addMergeCells = (mergeCells) => {\n  return (params) => {\n    if (mergeCells.length) {\n      params.children.push({\n        name: \"mergeCells\",\n        properties: {\n          rawMap: {\n            count: mergeCells.length\n          }\n        },\n        children: mergeCells.map((mergedCell) => mergeCell_default.getTemplate(mergedCell))\n      });\n    }\n    return params;\n  };\n};\nvar addPageMargins = (margins) => {\n  return (params) => {\n    const { top = 0.75, right = 0.7, bottom = 0.75, left = 0.7, header = 0.3, footer = 0.3 } = margins;\n    params.children.push({\n      name: \"pageMargins\",\n      properties: {\n        rawMap: { bottom, footer, header, left, right, top }\n      }\n    });\n    return params;\n  };\n};\nvar addPageSetup = (pageSetup) => {\n  return (params) => {\n    if (pageSetup) {\n      params.children.push({\n        name: \"pageSetup\",\n        properties: {\n          rawMap: {\n            horizontalDpi: 0,\n            verticalDpi: 0,\n            orientation: getPageOrientation(pageSetup.orientation),\n            paperSize: getPageSize(pageSetup.pageSize)\n          }\n        }\n      });\n    }\n    return params;\n  };\n};\nvar addHeaderFooter = (headerFooterConfig) => {\n  return (params) => {\n    if (!headerFooterConfig) {\n      return params;\n    }\n    const differentFirst = headerFooterConfig.first != null ? 1 : 0;\n    const differentOddEven = headerFooterConfig.even != null ? 1 : 0;\n    params.children.push({\n      name: \"headerFooter\",\n      properties: {\n        rawMap: {\n          differentFirst,\n          differentOddEven\n        }\n      },\n      children: buildHeaderFooter(headerFooterConfig)\n    });\n    return params;\n  };\n};\nvar addExcelTableRel = (excelTable) => {\n  return (params) => {\n    if (excelTable) {\n      params.children.push({\n        name: \"tableParts\",\n        properties: {\n          rawMap: {\n            count: \"1\"\n          }\n        },\n        children: [\n          {\n            name: \"tablePart\",\n            properties: {\n              rawMap: {\n                \"r:id\": `rId${++params.rIdCounter}`\n              }\n            }\n          }\n        ]\n      });\n    }\n    return params;\n  };\n};\nvar addDrawingRel = (currentSheet2) => {\n  return (params) => {\n    const worksheetImages = ExcelXlsxFactory.worksheetImages.get(currentSheet2);\n    if (worksheetImages?.length) {\n      params.children.push({\n        name: \"drawing\",\n        properties: {\n          rawMap: {\n            \"r:id\": `rId${++params.rIdCounter}`\n          }\n        }\n      });\n    }\n    return params;\n  };\n};\nvar addVmlDrawingRel = (currentSheet2) => {\n  return (params) => {\n    if (ExcelXlsxFactory.worksheetHeaderFooterImages.get(currentSheet2)) {\n      params.children.push({\n        name: \"legacyDrawingHF\",\n        properties: {\n          rawMap: {\n            \"r:id\": `rId${++params.rIdCounter}`\n          }\n        }\n      });\n    }\n    return params;\n  };\n};\nvar getPane = (xSplit = 0, ySplit = 0) => {\n  const shouldSplit = xSplit > 0 || ySplit > 0;\n  return shouldSplit ? [\n    {\n      name: \"pane\",\n      properties: {\n        rawMap: {\n          state: shouldSplit ? \"frozen\" : void 0,\n          topLeftCell: shouldSplit ? `${getExcelColumnName(xSplit + 1)}${ySplit + 1}` : void 0,\n          xSplit: xSplit === 0 ? void 0 : xSplit,\n          ySplit: ySplit === 0 ? void 0 : ySplit\n        }\n      }\n    }\n  ] : void 0;\n};\nvar addSheetViews = (rtl = false, xSplit, ySplit) => {\n  return (params) => {\n    params.children.push({\n      name: \"sheetViews\",\n      children: [\n        {\n          name: \"sheetView\",\n          properties: {\n            rawMap: {\n              rightToLeft: rtl === true ? \"1\" : \"0\",\n              workbookViewId: \"0\"\n            }\n          },\n          children: getPane(xSplit, ySplit)\n        }\n      ]\n    });\n    return params;\n  };\n};\nvar addSheetPr = () => {\n  return (params) => {\n    params.children.push({\n      name: \"sheetPr\",\n      children: [\n        {\n          name: \"outlinePr\",\n          properties: {\n            rawMap: {\n              summaryBelow: 0\n            }\n          }\n        }\n      ]\n    });\n    return params;\n  };\n};\nvar addSheetFormatPr = (rows) => {\n  return (params) => {\n    const maxOutline = rows.reduce((prev, row) => {\n      if (row.outlineLevel && row.outlineLevel > prev) {\n        return row.outlineLevel;\n      }\n      return prev;\n    }, 0);\n    params.children.push({\n      name: \"sheetFormatPr\",\n      properties: {\n        rawMap: {\n          baseColWidth: 10,\n          defaultRowHeight: 16,\n          outlineLevelRow: maxOutline ? maxOutline : void 0\n        }\n      }\n    });\n    return params;\n  };\n};\nvar worksheetFactory = {\n  getTemplate(params) {\n    const { worksheet, currentSheet: currentSheet2, config } = params;\n    const {\n      margins = {},\n      pageSetup,\n      headerFooterConfig,\n      suppressColumnOutline,\n      rightToLeft,\n      frozenRowCount,\n      frozenColumnCount\n    } = config;\n    const { table } = worksheet;\n    const { rows, columns } = table;\n    const mergedCells = columns && columns.length ? getMergedCellsAndAddColumnGroups(rows, columns, !!suppressColumnOutline) : [];\n    const { worksheetDataTables } = ExcelXlsxFactory;\n    const worksheetExcelTables = worksheetDataTables.get(currentSheet2);\n    const createWorksheetChildren = _compose(\n      addSheetPr(),\n      addSheetViews(rightToLeft, frozenColumnCount, frozenRowCount),\n      addSheetFormatPr(rows),\n      addColumns(columns),\n      addSheetData(rows, currentSheet2 + 1),\n      addMergeCells(mergedCells),\n      addPageMargins(margins),\n      addPageSetup(pageSetup),\n      addHeaderFooter(headerFooterConfig),\n      addDrawingRel(currentSheet2),\n      addVmlDrawingRel(currentSheet2),\n      addExcelTableRel(worksheetExcelTables)\n    );\n    const { children } = createWorksheetChildren({ children: [], rIdCounter: 0 });\n    return {\n      name: \"worksheet\",\n      properties: {\n        prefixedAttributes: [\n          {\n            prefix: \"xmlns:\",\n            map: {\n              r: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n            }\n          }\n        ],\n        rawMap: {\n          xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"\n        }\n      },\n      children\n    };\n  }\n};\nvar worksheet_default = worksheetFactory;\nvar _ExcelXlsxFactory = class _ExcelXlsxFactory2 {\n  static createExcel(styles, worksheet, config) {\n    this.addSheetName(worksheet);\n    registerStyles(styles, this.sheetNames.length);\n    const newConfig = Object.assign({}, config);\n    if (config.exportAsExcelTable) {\n      if (config.columnModel.isPivotActive()) {\n        this.showExcelTableNonCompatibleFeaturesWarning(\"pivot mode\");\n        newConfig.exportAsExcelTable = false;\n      }\n      if (config.gos.get(\"masterDetail\")) {\n        this.showExcelTableNonCompatibleFeaturesWarning(\"master/detail\");\n        newConfig.exportAsExcelTable = false;\n      }\n    }\n    this.processTableConfig(worksheet, newConfig);\n    return this.createWorksheet(worksheet, newConfig);\n  }\n  static showExcelTableNonCompatibleFeaturesWarning(featureName) {\n    _warnOnce27(\n      `Excel table export does not work with ${featureName}. The exported Excel file will not contain any Excel tables.\nPlease turn off ${featureName} to enable Excel table exports.`\n    );\n  }\n  static getTableNameFromIndex(idx) {\n    return `table${idx + 1}`;\n  }\n  static getSanitizedTableName(name) {\n    return name.replace(/^[^a-zA-Z_]+/, \"_\").replace(/\\s/g, \"_\").replace(/[^a-zA-Z0-9_]/g, \"_\");\n  }\n  static addTableToSheet(sheetIndex, table) {\n    if (this.worksheetDataTables.has(sheetIndex)) {\n      _warnOnce27(\"Unable to add data table to Excel sheet: A table already exists.\");\n      return;\n    }\n    this.worksheetDataTables.set(sheetIndex, table);\n  }\n  static processTableConfig(worksheet, config) {\n    if (!config.exportAsExcelTable) {\n      return;\n    }\n    const tableConfig = typeof config.exportAsExcelTable === \"boolean\" ? {} : config.exportAsExcelTable;\n    const {\n      name: nameFromConfig,\n      showColumnStripes,\n      showRowStripes,\n      showFilterButton,\n      highlightFirstColumn,\n      highlightLastColumn\n    } = tableConfig;\n    const tableName = this.getSanitizedTableName(nameFromConfig || _ExcelXlsxFactory2.defaultTableDisplayName);\n    const sheetIndex = this.sheetNames.length - 1;\n    const { table } = worksheet;\n    const { rows, columns } = table;\n    const headerRowCount = config.columnModel.getHeaderRowCount();\n    const tableHeaderRowIndex = headerRowCount - 1;\n    const tableRowCount = rows.length;\n    const tableColCount = columns.length;\n    const tableColumns = [];\n    const showFilterButtons = [];\n    for (let i = 0; i < tableColCount; i++) {\n      const col = columns[i];\n      tableColumns.push(col.displayName || \"\");\n      showFilterButtons.push(\n        showFilterButton === \"match\" || showFilterButton === void 0 ? col.filterAllowed ?? false : showFilterButton\n      );\n    }\n    if (!tableColumns || !tableColumns.length || !tableRowCount || !tableName) {\n      _warnOnce27(\"Unable to add data table to Excel sheet: Missing required parameters.\");\n      return;\n    }\n    this.addTableToSheet(sheetIndex, {\n      name: this.getTableNameFromIndex(sheetIndex),\n      displayName: tableName,\n      columns: tableColumns,\n      showFilterButtons,\n      headerRowIndex: tableHeaderRowIndex,\n      rowCount: tableRowCount - headerRowCount,\n      showRowStripes: showRowStripes ?? true,\n      showColumnStripes: showColumnStripes ?? false,\n      highlightFirstColumn: highlightFirstColumn ?? false,\n      highlightLastColumn: highlightLastColumn ?? false\n    });\n  }\n  static addHeaderFooterImageToMap(image, position) {\n    const sheetIndex = this.sheetNames.length - 1;\n    const headerFooterImage = image;\n    headerFooterImage.headerFooterPosition = position;\n    this.buildImageMap({ imageToAdd: headerFooterImage, idx: sheetIndex });\n    let headerFooterImagesForSheet = this.worksheetHeaderFooterImages.get(sheetIndex);\n    if (!headerFooterImagesForSheet) {\n      headerFooterImagesForSheet = [];\n      this.worksheetHeaderFooterImages.set(sheetIndex, headerFooterImagesForSheet);\n    }\n    if (!headerFooterImagesForSheet.find((img) => img.id === image.id)) {\n      headerFooterImagesForSheet.push(image);\n    }\n  }\n  static addBodyImageToMap(image, rowIndex, col, columnsToExport, rowHeight) {\n    const sheetIndex = this.sheetNames.length;\n    const { row, column } = image.position || {};\n    const calculatedImage = image;\n    if (columnsToExport) {\n      if (rowIndex != null && col != null && (!row || !column)) {\n        if (!image.position) {\n          image.position = {};\n        }\n        image.position = Object.assign({}, image.position, {\n          row: rowIndex,\n          column: columnsToExport.indexOf(col) + 1\n        });\n      }\n      setExcelImageTotalWidth(calculatedImage, columnsToExport);\n      setExcelImageTotalHeight(calculatedImage, rowHeight);\n    }\n    this.buildImageMap({ imageToAdd: calculatedImage, idx: sheetIndex });\n    let worksheetImageIdMap = this.worksheetImageIds.get(sheetIndex);\n    if (!worksheetImageIdMap) {\n      worksheetImageIdMap = /* @__PURE__ */ new Map();\n      this.worksheetImageIds.set(sheetIndex, worksheetImageIdMap);\n    }\n    const sheetImages = this.worksheetImages.get(sheetIndex);\n    if (!sheetImages) {\n      this.worksheetImages.set(sheetIndex, [calculatedImage]);\n    } else {\n      sheetImages.push(calculatedImage);\n    }\n    if (!worksheetImageIdMap.get(image.id)) {\n      worksheetImageIdMap.set(image.id, { index: worksheetImageIdMap.size, type: image.imageType });\n    }\n  }\n  static buildImageMap(params) {\n    const { imageToAdd, idx } = params;\n    const mappedImagesToSheet = this.images.get(imageToAdd.id);\n    if (mappedImagesToSheet) {\n      const currentSheetImages = mappedImagesToSheet.find((currentImage) => currentImage.sheetId === idx);\n      if (currentSheetImages) {\n        currentSheetImages.image.push(imageToAdd);\n      } else {\n        mappedImagesToSheet.push({\n          sheetId: idx,\n          image: [imageToAdd]\n        });\n      }\n    } else {\n      this.images.set(imageToAdd.id, [{ sheetId: idx, image: [imageToAdd] }]);\n      this.workbookImageIds.set(imageToAdd.id, { type: imageToAdd.imageType, index: this.workbookImageIds.size });\n    }\n  }\n  static addSheetName(worksheet) {\n    const name = _escapeString52(worksheet.name) || \"\";\n    let append = \"\";\n    while (this.sheetNames.indexOf(`${name}${append}`) !== -1) {\n      if (append === \"\") {\n        append = \"_1\";\n      } else {\n        const curr = parseInt(append.slice(1), 10);\n        append = `_${curr + 1}`;\n      }\n    }\n    worksheet.name = `${name}${append}`;\n    this.sheetNames.push(worksheet.name);\n  }\n  static getStringPosition(str) {\n    if (this.sharedStrings.has(str)) {\n      return this.sharedStrings.get(str);\n    }\n    this.sharedStrings.set(str, this.sharedStrings.size);\n    return this.sharedStrings.size - 1;\n  }\n  static resetFactory() {\n    this.sharedStrings = /* @__PURE__ */ new Map();\n    this.images = /* @__PURE__ */ new Map();\n    this.worksheetImages = /* @__PURE__ */ new Map();\n    this.worksheetHeaderFooterImages = /* @__PURE__ */ new Map();\n    this.workbookImageIds = /* @__PURE__ */ new Map();\n    this.worksheetImageIds = /* @__PURE__ */ new Map();\n    this.worksheetDataTables = /* @__PURE__ */ new Map();\n    this.sheetNames = [];\n    this.factoryMode = ExcelFactoryMode.SINGLE_SHEET;\n  }\n  static createWorkbook(currentSheet2) {\n    return createXmlPart(workbook_default.getTemplate(this.sheetNames, currentSheet2));\n  }\n  static createStylesheet(defaultFontSize) {\n    return createXmlPart(stylesheet_default.getTemplate(defaultFontSize));\n  }\n  static createSharedStrings() {\n    return createXmlPart(sharedStrings_default.getTemplate(this.sharedStrings));\n  }\n  static createCore(author) {\n    return createXmlPart(core_default.getTemplate(author));\n  }\n  static createContentTypes(sheetLen) {\n    return createXmlPart(contentTypes_default.getTemplate(sheetLen));\n  }\n  static createRels() {\n    const rs = relationships_default.getTemplate([\n      {\n        Id: \"rId1\",\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n        Target: \"xl/workbook.xml\"\n      },\n      {\n        Id: \"rId2\",\n        Type: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n        Target: \"docProps/core.xml\"\n      }\n    ]);\n    return createXmlPart(rs);\n  }\n  static createTheme() {\n    return createXmlPart(office_default.getTemplate());\n  }\n  static createTable(dataTable, index) {\n    return createXmlPart(table_default.getTemplate(dataTable, index));\n  }\n  static createWorkbookRels(sheetLen) {\n    const worksheets = new Array(sheetLen).fill(void 0).map((v, i) => ({\n      Id: `rId${i + 1}`,\n      Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n      Target: `worksheets/sheet${i + 1}.xml`\n    }));\n    const rs = relationships_default.getTemplate([\n      ...worksheets,\n      {\n        Id: `rId${sheetLen + 1}`,\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n        Target: \"theme/theme1.xml\"\n      },\n      {\n        Id: `rId${sheetLen + 2}`,\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n        Target: \"styles.xml\"\n      },\n      {\n        Id: `rId${sheetLen + 3}`,\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n        Target: \"sharedStrings.xml\"\n      }\n    ]);\n    return createXmlPart(rs);\n  }\n  static createDrawing(sheetIndex) {\n    return createXmlPart(drawing_default.getTemplate({ sheetIndex }));\n  }\n  static createDrawingRel(sheetIndex) {\n    const worksheetImageIds = this.worksheetImageIds.get(sheetIndex) || [];\n    const XMLArr = [];\n    for (const [key, value] of worksheetImageIds) {\n      const { index, type } = value;\n      XMLArr.push({\n        Id: `rId${index + 1}`,\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n        Target: `../media/image${this.workbookImageIds.get(key).index + 1}.${_normaliseImageExtension(type)}`\n      });\n    }\n    return createXmlPart(relationships_default.getTemplate(XMLArr));\n  }\n  static createVmlDrawing(sheetIndex) {\n    return createXmlPart(vmlDrawing_default.getTemplate({ sheetIndex }), true);\n  }\n  static createVmlDrawingRel(sheetIndex) {\n    const worksheetHeaderFooterImages = this.worksheetHeaderFooterImages.get(sheetIndex) || [];\n    const XMLArr = [];\n    for (let i = 0; i < worksheetHeaderFooterImages.length; i++) {\n      const headerFooterImage = worksheetHeaderFooterImages[i];\n      const workbookImage = this.workbookImageIds.get(headerFooterImage.id);\n      if (!workbookImage) {\n        continue;\n      }\n      const { index, type } = workbookImage;\n      XMLArr.push({\n        Id: `rId${i + 1}`,\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n        Target: `../media/image${index + 1}.${_normaliseImageExtension(type)}`\n      });\n    }\n    return createXmlPart(relationships_default.getTemplate(XMLArr));\n  }\n  static createRelationships({\n    drawingIndex,\n    vmlDrawingIndex,\n    tableIndex\n  } = {}) {\n    if (drawingIndex === void 0 && vmlDrawingIndex === void 0 && tableIndex === void 0) {\n      return \"\";\n    }\n    const config = [];\n    if (drawingIndex != null) {\n      config.push({\n        Id: `rId${config.length + 1}`,\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n        Target: `../drawings/drawing${drawingIndex + 1}.xml`\n      });\n    }\n    if (vmlDrawingIndex != null) {\n      config.push({\n        Id: `rId${config.length + 1}`,\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n        Target: `../drawings/vmlDrawing${vmlDrawingIndex + 1}.vml`\n      });\n    }\n    if (tableIndex != null) {\n      config.push({\n        Id: `rId${config.length + 1}`,\n        Type: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\",\n        Target: `../tables/${this.getTableNameFromIndex(tableIndex)}.xml`\n      });\n    }\n    const rs = relationships_default.getTemplate(config);\n    return createXmlPart(rs);\n  }\n  static createWorksheet(worksheet, config) {\n    return createXmlPart(\n      worksheet_default.getTemplate({\n        worksheet,\n        currentSheet: this.sheetNames.length - 1,\n        config\n      })\n    );\n  }\n};\n_ExcelXlsxFactory.sharedStrings = /* @__PURE__ */ new Map();\n_ExcelXlsxFactory.sheetNames = [];\n_ExcelXlsxFactory.images = /* @__PURE__ */ new Map();\n_ExcelXlsxFactory.worksheetImages = /* @__PURE__ */ new Map();\n_ExcelXlsxFactory.worksheetHeaderFooterImages = /* @__PURE__ */ new Map();\n_ExcelXlsxFactory.workbookImageIds = /* @__PURE__ */ new Map();\n_ExcelXlsxFactory.worksheetImageIds = /* @__PURE__ */ new Map();\n_ExcelXlsxFactory.worksheetDataTables = /* @__PURE__ */ new Map();\n_ExcelXlsxFactory.defaultTableDisplayName = \"AG-GRID-TABLE\";\n_ExcelXlsxFactory.factoryMode = ExcelFactoryMode.SINGLE_SHEET;\nvar ExcelXlsxFactory = _ExcelXlsxFactory;\nvar ExcelSerializingSession = class extends BaseGridSerializingSession {\n  constructor(config) {\n    super(config);\n    this.mixedStyles = {};\n    this.mixedStyleCounter = 0;\n    this.rows = [];\n    this.frozenRowCount = 0;\n    this.skipFrozenRows = false;\n    this.frozenColumnCount = 0;\n    this.skipFrozenColumns = false;\n    this.config = Object.assign({}, config);\n    this.stylesByIds = {};\n    this.config.baseExcelStyles.forEach((style) => {\n      this.stylesByIds[style.id] = style;\n    });\n    this.excelStyles = [...this.config.baseExcelStyles, { id: \"_quotePrefix\", quotePrefix: 1 }];\n  }\n  addCustomContent(customContent) {\n    customContent.forEach((row) => {\n      const rowLen = this.rows.length + 1;\n      let outlineLevel;\n      if (!this.config.suppressRowOutline && row.outlineLevel != null) {\n        outlineLevel = row.outlineLevel;\n      }\n      const rowObj = {\n        height: getHeightFromProperty(rowLen, row.height || this.config.rowHeight),\n        cells: (row.cells || []).map((cell, idx) => {\n          const image = this.addImage(rowLen, this.columnsToExport[idx], cell.data?.value);\n          let excelStyles = null;\n          if (cell.styleId) {\n            excelStyles = typeof cell.styleId === \"string\" ? [cell.styleId] : cell.styleId;\n          }\n          const excelStyleId = this.getStyleId(excelStyles);\n          if (image) {\n            return this.createCell(\n              excelStyleId,\n              this.getDataTypeForValue(image.value),\n              image.value == null ? \"\" : image.value\n            );\n          }\n          const value = cell.data?.value ?? \"\";\n          const type = this.getDataTypeForValue(value);\n          if (cell.mergeAcross) {\n            return this.createMergedCell(excelStyleId, type, value, cell.mergeAcross);\n          }\n          return this.createCell(excelStyleId, type, value);\n        }),\n        outlineLevel\n      };\n      if (row.collapsed != null) {\n        rowObj.collapsed = row.collapsed;\n      }\n      if (row.hidden != null) {\n        rowObj.hidden = row.hidden;\n      }\n      this.rows.push(rowObj);\n    });\n  }\n  onNewHeaderGroupingRow() {\n    const currentCells = [];\n    const { freezeRows, headerRowHeight } = this.config;\n    this.rows.push({\n      cells: currentCells,\n      height: getHeightFromProperty(this.rows.length + 1, headerRowHeight)\n    });\n    if (freezeRows) {\n      this.frozenRowCount++;\n    }\n    return {\n      onColumn: (columnGroup, header, index, span, collapsibleRanges) => {\n        const styleIds = this.config.styleLinker({\n          rowType: RowType.HEADER_GROUPING,\n          rowIndex: 1,\n          value: `grouping-${header}`,\n          columnGroup\n        });\n        currentCells.push({\n          ...this.createMergedCell(\n            this.getStyleId(styleIds),\n            this.getDataTypeForValue(\"string\"),\n            header,\n            span\n          ),\n          collapsibleRanges\n        });\n      }\n    };\n  }\n  onNewHeaderRow() {\n    const { freezeRows, headerRowHeight } = this.config;\n    if (freezeRows) {\n      this.frozenRowCount++;\n    }\n    return this.onNewRow(this.onNewHeaderColumn, headerRowHeight);\n  }\n  onNewBodyRow(node) {\n    const { freezeRows, rowHeight } = this.config;\n    if (!this.skipFrozenRows) {\n      if (freezeRows === \"headersAndPinnedRows\" && node?.rowPinned === \"top\") {\n        this.frozenRowCount++;\n      } else if (typeof freezeRows === \"function\") {\n        if (freezeRows({ ...this.gos.getGridCommonParams(), node })) {\n          this.frozenRowCount++;\n        } else {\n          this.skipFrozenRows = true;\n        }\n      } else {\n        this.skipFrozenRows = true;\n      }\n    }\n    const rowAccumulator = this.onNewRow(this.onNewBodyColumn, rowHeight);\n    if (node) {\n      this.addRowOutlineIfNecessary(node);\n    }\n    return rowAccumulator;\n  }\n  prepare(columnsToExport) {\n    super.prepare(columnsToExport);\n    this.columnsToExport = [...columnsToExport];\n    this.cols = columnsToExport.map((col, i) => this.convertColumnToExcel(col, i));\n  }\n  parse() {\n    const longestRow = this.rows.reduce((a, b) => Math.max(a, b.cells.length), 0);\n    while (this.cols.length < longestRow) {\n      this.cols.push(this.convertColumnToExcel(null, this.cols.length + 1));\n    }\n    const { config } = this;\n    let name;\n    if (config.sheetName != null) {\n      const { sheetName } = config;\n      const sheetNameValue = typeof sheetName === \"function\" ? sheetName(this.gos.getGridCommonParams()) : sheetName;\n      name = String(sheetNameValue).substring(0, 31);\n    } else {\n      name = \"ag-grid\";\n    }\n    const data = {\n      name,\n      table: {\n        columns: this.cols,\n        rows: this.rows\n      }\n    };\n    return this.createExcel(data);\n  }\n  addRowOutlineIfNecessary(node) {\n    const { gos, suppressRowOutline, rowGroupExpandState = \"expanded\" } = this.config;\n    const isGroupHideOpenParents = gos.get(\"groupHideOpenParents\");\n    if (isGroupHideOpenParents || suppressRowOutline || node.level == null) {\n      return;\n    }\n    const padding = node.footer ? 1 : 0;\n    const currentRow = _last10(this.rows);\n    const outlineLevel = Math.min(node.level + padding, 7);\n    currentRow.outlineLevel = outlineLevel;\n    if (rowGroupExpandState === \"expanded\") {\n      return;\n    }\n    const collapseAll = rowGroupExpandState === \"collapsed\";\n    if (node.isExpandable()) {\n      const isExpanded = !collapseAll && node.expanded;\n      currentRow.collapsed = !isExpanded;\n    }\n    currentRow.hidden = // always show the node if there is no parent to be expanded\n    !!node.parent && // or if it is a child of the root node\n    node.parent.level !== -1 && (collapseAll || this.isAnyParentCollapsed(node.parent));\n  }\n  isAnyParentCollapsed(node) {\n    while (node && node.level !== -1) {\n      if (!node.expanded) {\n        return true;\n      }\n      node = node.parent;\n    }\n    return false;\n  }\n  convertColumnToExcel(column, index) {\n    const columnWidth = this.config.columnWidth;\n    const headerValue = column ? this.extractHeaderValue(column) : void 0;\n    const displayName = headerValue ?? \"\";\n    const filterAllowed = column ? column.isFilterAllowed() : false;\n    if (columnWidth) {\n      if (typeof columnWidth === \"number\") {\n        return { width: columnWidth, displayName, filterAllowed };\n      }\n      return { width: columnWidth({ column, index }), displayName, filterAllowed };\n    }\n    if (column) {\n      const smallestUsefulWidth = 75;\n      return { width: Math.max(column.getActualWidth(), smallestUsefulWidth), displayName, filterAllowed };\n    }\n    return {\n      displayName,\n      filterAllowed\n    };\n  }\n  onNewHeaderColumn(rowIndex, currentCells) {\n    return (column) => {\n      const nameForCol = this.extractHeaderValue(column);\n      const styleIds = this.config.styleLinker({\n        rowType: RowType.HEADER,\n        rowIndex,\n        value: nameForCol,\n        column\n      });\n      currentCells.push(\n        this.createCell(this.getStyleId(styleIds), this.getDataTypeForValue(\"string\"), nameForCol)\n      );\n    };\n  }\n  onNewBodyColumn(rowIndex, currentCells) {\n    let skipCols = 0;\n    const { freezeColumns, rightToLeft } = this.config;\n    return (column, index, node) => {\n      if (skipCols > 0) {\n        skipCols -= 1;\n        return;\n      }\n      if (!this.skipFrozenColumns) {\n        const pinned = column.getPinned();\n        const isPinnedLeft = pinned === true || pinned === \"left\";\n        if (freezeColumns === \"pinned\" && pinned && isPinnedLeft !== rightToLeft) {\n          this.frozenColumnCount++;\n        } else if (typeof freezeColumns === \"function\" && freezeColumns({ ...this.gos.getGridCommonParams(), column })) {\n          this.frozenColumnCount++;\n        } else {\n          this.skipFrozenColumns = true;\n        }\n      }\n      const { value: valueForCell, valueFormatted } = this.extractRowCellValue(\n        column,\n        index,\n        rowIndex,\n        \"excel\",\n        node\n      );\n      const styleIds = this.config.styleLinker({\n        rowType: RowType.BODY,\n        rowIndex,\n        value: valueForCell,\n        column,\n        node\n      });\n      const excelStyleId = this.getStyleId(styleIds);\n      const colSpan = column.getColSpan(node);\n      const addedImage = this.addImage(rowIndex, column, valueForCell);\n      if (addedImage) {\n        currentCells.push(\n          this.createCell(\n            excelStyleId,\n            this.getDataTypeForValue(addedImage.value),\n            addedImage.value == null ? \"\" : addedImage.value\n          )\n        );\n      } else if (colSpan > 1) {\n        skipCols = colSpan - 1;\n        currentCells.push(\n          this.createMergedCell(\n            excelStyleId,\n            this.getDataTypeForValue(valueForCell),\n            valueForCell,\n            colSpan - 1\n          )\n        );\n      } else {\n        currentCells.push(\n          this.createCell(excelStyleId, this.getDataTypeForValue(valueForCell), valueForCell, valueFormatted)\n        );\n      }\n    };\n  }\n  onNewRow(onNewColumnAccumulator, height) {\n    const currentCells = [];\n    this.rows.push({\n      cells: currentCells,\n      height: getHeightFromProperty(this.rows.length + 1, height)\n    });\n    return {\n      onColumn: onNewColumnAccumulator.bind(this, this.rows.length, currentCells)()\n    };\n  }\n  createExcel(data) {\n    const { excelStyles, config } = this;\n    if (this.frozenColumnCount) {\n      config.frozenColumnCount = this.frozenColumnCount;\n    }\n    if (this.frozenRowCount) {\n      config.frozenRowCount = this.frozenRowCount;\n    }\n    return ExcelXlsxFactory.createExcel(excelStyles, data, config);\n  }\n  getDataTypeForValue(valueForCell) {\n    if (valueForCell === void 0) {\n      return \"empty\";\n    }\n    return this.isNumerical(valueForCell) ? \"n\" : \"s\";\n  }\n  getTypeFromStyle(style, value) {\n    if (this.isFormula(value)) {\n      return \"f\";\n    }\n    if (style && style.dataType) {\n      switch (style.dataType.toLocaleLowerCase()) {\n        case \"formula\":\n          return \"f\";\n        case \"string\":\n          return \"s\";\n        case \"number\":\n          return \"n\";\n        case \"datetime\":\n          return \"d\";\n        case \"error\":\n          return \"e\";\n        case \"boolean\":\n          return \"b\";\n        default:\n          _warnOnce26(`Unrecognized data type for excel export [${style.id}.dataType=${style.dataType}]`);\n      }\n    }\n    return null;\n  }\n  addImage(rowIndex, column, value) {\n    if (!this.config.addImageToCell) {\n      return;\n    }\n    const addedImage = this.config.addImageToCell(rowIndex, column, value);\n    if (!addedImage) {\n      return;\n    }\n    ExcelXlsxFactory.addBodyImageToMap(\n      addedImage.image,\n      rowIndex,\n      column,\n      this.columnsToExport,\n      this.config.rowHeight\n    );\n    return addedImage;\n  }\n  createCell(styleId, type, value, valueFormatted) {\n    const actualStyle = this.getStyleById(styleId);\n    if (!actualStyle?.dataType && type === \"s\" && valueFormatted) {\n      value = valueFormatted;\n    }\n    const processedType = this.getTypeFromStyle(actualStyle, value) || type;\n    const { value: processedValue, escaped } = this.getCellValue(processedType, value);\n    const styles = [];\n    if (actualStyle) {\n      styles.push(styleId);\n    }\n    if (escaped) {\n      styles.push(\"_quotePrefix\");\n    }\n    styleId = this.getStyleId(styles) || void 0;\n    return {\n      styleId,\n      data: {\n        type: processedType,\n        value: processedValue\n      }\n    };\n  }\n  createMergedCell(styleId, type, value, numOfCells) {\n    const valueToUse = value == null ? \"\" : value;\n    return {\n      styleId: this.getStyleById(styleId) ? styleId : void 0,\n      data: {\n        type,\n        value: type === \"s\" ? ExcelXlsxFactory.getStringPosition(valueToUse).toString() : value\n      },\n      mergeAcross: numOfCells\n    };\n  }\n  getCellValue(type, value) {\n    let escaped = false;\n    if (value == null || type === \"s\" && value === \"\") {\n      return { value: \"\", escaped: false };\n    }\n    if (type === \"s\") {\n      if (value && value[0] === \"'\") {\n        escaped = true;\n        value = value.slice(1);\n      }\n      value = ExcelXlsxFactory.getStringPosition(value).toString();\n    } else if (type === \"f\") {\n      value = value.slice(1);\n    } else if (type === \"n\") {\n      const numberValue = Number(value);\n      if (isNaN(numberValue)) {\n        value = \"\";\n      } else if (value !== \"\") {\n        value = numberValue.toString();\n      }\n    }\n    return { value, escaped };\n  }\n  getStyleId(styleIds) {\n    if (!styleIds || !styleIds.length) {\n      return null;\n    }\n    if (styleIds.length === 1) {\n      return styleIds[0];\n    }\n    const key = styleIds.join(\"-\");\n    if (!this.mixedStyles[key]) {\n      this.addNewMixedStyle(styleIds);\n    }\n    return this.mixedStyles[key].excelID;\n  }\n  deepCloneObject(object) {\n    return JSON.parse(JSON.stringify(object));\n  }\n  addNewMixedStyle(styleIds) {\n    this.mixedStyleCounter += 1;\n    const excelId = `mixedStyle${this.mixedStyleCounter}`;\n    const resultantStyle = {};\n    for (const styleId of styleIds) {\n      for (const excelStyle of this.excelStyles) {\n        if (excelStyle.id === styleId) {\n          _mergeDeep3(resultantStyle, this.deepCloneObject(excelStyle));\n        }\n      }\n    }\n    resultantStyle.id = excelId;\n    resultantStyle.name = excelId;\n    const key = styleIds.join(\"-\");\n    this.mixedStyles[key] = {\n      excelID: excelId,\n      key,\n      result: resultantStyle\n    };\n    this.excelStyles.push(resultantStyle);\n    this.stylesByIds[excelId] = resultantStyle;\n  }\n  isFormula(value) {\n    if (value == null) {\n      return false;\n    }\n    return this.config.autoConvertFormulas && value.toString().startsWith(\"=\");\n  }\n  isNumerical(value) {\n    if (typeof value === \"bigint\") {\n      return true;\n    }\n    return isFinite(value) && value !== \"\" && !isNaN(parseFloat(value));\n  }\n  getStyleById(styleId) {\n    if (styleId == null) {\n      return null;\n    }\n    return this.stylesByIds[styleId] || null;\n  }\n};\nvar createExcelXMLCoreFolderStructure = () => {\n  ZipContainer.addFolders([\"_rels/\", \"docProps/\", \"xl/\", \"xl/theme/\", \"xl/_rels/\", \"xl/worksheets/\"]);\n  const { images } = ExcelXlsxFactory;\n  if (!images.size) {\n    return;\n  }\n  ZipContainer.addFolders([\"xl/worksheets/_rels\", \"xl/drawings/\", \"xl/drawings/_rels\", \"xl/media/\"]);\n  let imgCounter = 0;\n  images.forEach((value) => {\n    const firstImage = value[0].image[0];\n    const { base64, imageType } = firstImage;\n    ZipContainer.addFile(`xl/media/image${++imgCounter}.${_normaliseImageExtension(imageType)}`, base64, true);\n  });\n};\nvar createExcelXmlWorksheets = (data) => {\n  let imageRelationCounter = 0;\n  let headerFooterImageCounter = 0;\n  let tableRelationCounter = 0;\n  const { images, worksheetDataTables, worksheetImages, worksheetHeaderFooterImages } = ExcelXlsxFactory;\n  for (let i = 0; i < data.length; i++) {\n    const value = data[i];\n    ZipContainer.addFile(`xl/worksheets/sheet${i + 1}.xml`, value, false);\n    const hasImages = images.size > 0 && worksheetImages.has(i);\n    const hasTables = worksheetDataTables.size > 0 && worksheetDataTables.has(i);\n    const hasHeaderFooterImages = images.size && worksheetHeaderFooterImages.has(i);\n    if (!hasImages && !hasTables && !hasHeaderFooterImages) {\n      continue;\n    }\n    let tableIndex;\n    let drawingIndex;\n    let vmlDrawingIndex;\n    if (hasImages) {\n      createExcelXmlDrawings(i, imageRelationCounter);\n      drawingIndex = imageRelationCounter;\n      imageRelationCounter++;\n    }\n    if (hasHeaderFooterImages) {\n      createExcelVmlDrawings(i, headerFooterImageCounter);\n      vmlDrawingIndex = headerFooterImageCounter;\n      headerFooterImageCounter++;\n    }\n    if (hasTables) {\n      tableIndex = tableRelationCounter++;\n    }\n    const worksheetRelFile = `xl/worksheets/_rels/sheet${i + 1}.xml.rels`;\n    ZipContainer.addFile(\n      worksheetRelFile,\n      ExcelXlsxFactory.createRelationships({\n        tableIndex,\n        drawingIndex,\n        vmlDrawingIndex\n      })\n    );\n  }\n};\nvar createExcelXmlDrawings = (sheetIndex, drawingIndex) => {\n  const drawingFolder = \"xl/drawings\";\n  const drawingFileName = `${drawingFolder}/drawing${drawingIndex + 1}.xml`;\n  const relFileName = `${drawingFolder}/_rels/drawing${drawingIndex + 1}.xml.rels`;\n  ZipContainer.addFile(relFileName, ExcelXlsxFactory.createDrawingRel(sheetIndex));\n  ZipContainer.addFile(drawingFileName, ExcelXlsxFactory.createDrawing(sheetIndex));\n};\nvar createExcelVmlDrawings = (sheetIndex, drawingIndex) => {\n  const drawingFolder = \"xl/drawings\";\n  const drawingFileName = `${drawingFolder}/vmlDrawing${drawingIndex + 1}.vml`;\n  const relFileName = `${drawingFolder}/_rels/vmlDrawing${drawingIndex + 1}.vml.rels`;\n  ZipContainer.addFile(drawingFileName, ExcelXlsxFactory.createVmlDrawing(sheetIndex));\n  ZipContainer.addFile(relFileName, ExcelXlsxFactory.createVmlDrawingRel(sheetIndex));\n};\nvar createExcelXmlTables = () => {\n  const { worksheetDataTables } = ExcelXlsxFactory;\n  const tablesDataByWorksheet = worksheetDataTables;\n  const worksheetKeys = Array.from(tablesDataByWorksheet.keys());\n  for (let i = 0; i < worksheetKeys.length; i++) {\n    const sheetIndex = worksheetKeys[i];\n    const dataTable = tablesDataByWorksheet.get(sheetIndex);\n    if (!dataTable) {\n      continue;\n    }\n    ZipContainer.addFile(`xl/tables/${dataTable.name}.xml`, ExcelXlsxFactory.createTable(dataTable, i));\n  }\n};\nvar createExcelXmlCoreSheets = (fontSize, author, sheetLen, activeTab) => {\n  ZipContainer.addFile(\"xl/workbook.xml\", ExcelXlsxFactory.createWorkbook(activeTab));\n  ZipContainer.addFile(\"xl/styles.xml\", ExcelXlsxFactory.createStylesheet(fontSize));\n  ZipContainer.addFile(\"xl/sharedStrings.xml\", ExcelXlsxFactory.createSharedStrings());\n  ZipContainer.addFile(\"xl/theme/theme1.xml\", ExcelXlsxFactory.createTheme());\n  ZipContainer.addFile(\"xl/_rels/workbook.xml.rels\", ExcelXlsxFactory.createWorkbookRels(sheetLen));\n  ZipContainer.addFile(\"docProps/core.xml\", ExcelXlsxFactory.createCore(author));\n  ZipContainer.addFile(\"[Content_Types].xml\", ExcelXlsxFactory.createContentTypes(sheetLen));\n  ZipContainer.addFile(\"_rels/.rels\", ExcelXlsxFactory.createRels());\n};\nvar createExcelFileForExcel = (data, options = {}) => {\n  if (!data || data.length === 0) {\n    _warnOnce34(\"Invalid params supplied to createExcelFileForExcel() - `ExcelExportParams.data` is empty.\");\n    ExcelXlsxFactory.resetFactory();\n    return false;\n  }\n  const { fontSize = 11, author = \"AG Grid\", activeTab = 0 } = options;\n  const len = data.length;\n  const activeTabWithinBounds = Math.max(Math.min(activeTab, len - 1), 0);\n  createExcelXMLCoreFolderStructure();\n  createExcelXmlTables();\n  createExcelXmlWorksheets(data);\n  createExcelXmlCoreSheets(fontSize, author, len, activeTabWithinBounds);\n  ExcelXlsxFactory.resetFactory();\n  return true;\n};\nvar getMultipleSheetsAsExcelCompressed = (params) => {\n  const { data, fontSize, author, activeSheetIndex } = params;\n  const mimeType = params.mimeType || \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n  if (!createExcelFileForExcel(data, {\n    author,\n    fontSize,\n    activeTab: activeSheetIndex\n  })) {\n    return Promise.resolve(void 0);\n  }\n  return ZipContainer.getZipFile(mimeType);\n};\nvar getMultipleSheetsAsExcel = (params) => {\n  const { data, fontSize, author, activeSheetIndex } = params;\n  const mimeType = params.mimeType || \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n  if (!createExcelFileForExcel(data, {\n    author,\n    fontSize,\n    activeTab: activeSheetIndex\n  })) {\n    return;\n  }\n  return ZipContainer.getUncompressedZipFile(mimeType);\n};\nvar exportMultipleSheetsAsExcel = (params) => {\n  const { fileName = \"export.xlsx\" } = params;\n  getMultipleSheetsAsExcelCompressed(params).then((contents) => {\n    if (contents) {\n      const downloadFileName = typeof fileName === \"function\" ? fileName() : fileName;\n      Downloader.download(downloadFileName, contents);\n    }\n  });\n};\nvar ExcelCreator = class extends BaseCreator {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"excelCreator\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.funcColsService = beans.funcColsService;\n    this.valueService = beans.valueService;\n    this.stylingService = beans.stylingService;\n    this.gridSerializer = beans.gridSerializer;\n    this.gos = beans.gos;\n  }\n  postConstruct() {\n    this.setBeans({\n      gridSerializer: this.gridSerializer,\n      gos: this.gos\n    });\n  }\n  getMergedParams(params) {\n    const baseParams = this.gos.get(\"defaultExcelExportParams\");\n    return Object.assign({}, baseParams, params);\n  }\n  export(userParams) {\n    if (this.isExportSuppressed()) {\n      _warnOnce34(`Export cancelled. Export is not allowed as per your configuration.`);\n      return;\n    }\n    const mergedParams = this.getMergedParams(userParams);\n    const data = this.getData(mergedParams);\n    const exportParams = {\n      data: [data],\n      fontSize: mergedParams.fontSize,\n      author: mergedParams.author,\n      mimeType: mergedParams.mimeType\n    };\n    this.packageCompressedFile(exportParams).then((packageFile) => {\n      if (packageFile) {\n        const { fileName } = mergedParams;\n        const providedFileName = typeof fileName === \"function\" ? fileName(this.gos.getGridCommonParams()) : fileName;\n        Downloader.download(this.getFileName(providedFileName), packageFile);\n      }\n    });\n  }\n  exportDataAsExcel(params) {\n    this.export(params);\n  }\n  getDataAsExcel(params) {\n    const mergedParams = this.getMergedParams(params);\n    const data = this.getData(mergedParams);\n    const exportParams = {\n      data: [data],\n      fontSize: mergedParams.fontSize,\n      author: mergedParams.author,\n      mimeType: mergedParams.mimeType\n    };\n    return this.packageFile(exportParams);\n  }\n  setFactoryMode(factoryMode) {\n    ExcelXlsxFactory.factoryMode = factoryMode;\n  }\n  getFactoryMode() {\n    return ExcelXlsxFactory.factoryMode;\n  }\n  getSheetDataForExcel(params) {\n    const mergedParams = this.getMergedParams(params);\n    return this.getData(mergedParams);\n  }\n  getMultipleSheetsAsExcel(params) {\n    return getMultipleSheetsAsExcel(params);\n  }\n  exportMultipleSheetsAsExcel(params) {\n    exportMultipleSheetsAsExcel(params);\n  }\n  getDefaultFileExtension() {\n    return \"xlsx\";\n  }\n  createSerializingSession(params) {\n    const { columnModel, columnNameService, funcColsService, valueService, gos } = this;\n    const config = {\n      ...params,\n      columnModel,\n      columnNameService,\n      funcColsService,\n      valueService,\n      gos,\n      suppressRowOutline: params.suppressRowOutline || params.skipRowGroups,\n      headerRowHeight: params.headerRowHeight || params.rowHeight,\n      baseExcelStyles: this.gos.get(\"excelStyles\") || [],\n      rightToLeft: params.rightToLeft ?? this.gos.get(\"enableRtl\"),\n      styleLinker: this.styleLinker.bind(this)\n    };\n    return new ExcelSerializingSession(config);\n  }\n  styleLinker(params) {\n    const { rowType, rowIndex, value, column, columnGroup, node } = params;\n    const isHeader = rowType === RowType2.HEADER;\n    const isGroupHeader = rowType === RowType2.HEADER_GROUPING;\n    const col = isHeader ? column : columnGroup;\n    let headerClasses = [];\n    if (isHeader || isGroupHeader) {\n      headerClasses.push(\"header\");\n      if (isGroupHeader) {\n        headerClasses.push(\"headerGroup\");\n      }\n      if (col) {\n        headerClasses = headerClasses.concat(\n          _getHeaderClassesFromColDef(\n            col.getDefinition(),\n            this.gos,\n            column || null,\n            columnGroup || null\n          )\n        );\n      }\n      return headerClasses;\n    }\n    const styles = this.gos.get(\"excelStyles\");\n    const applicableStyles = [\"cell\"];\n    if (!styles || !styles.length) {\n      return applicableStyles;\n    }\n    const styleIds = styles.map((it) => {\n      return it.id;\n    });\n    const colDef = column.getDefinition();\n    this.stylingService.processAllCellClasses(\n      colDef,\n      this.gos.addGridCommonParams({\n        value,\n        data: node.data,\n        node,\n        colDef,\n        column,\n        rowIndex\n      }),\n      (className) => {\n        if (styleIds.indexOf(className) > -1) {\n          applicableStyles.push(className);\n        }\n      }\n    );\n    return applicableStyles.sort((left, right) => {\n      return styleIds.indexOf(left) < styleIds.indexOf(right) ? -1 : 1;\n    });\n  }\n  isExportSuppressed() {\n    return this.gos.get(\"suppressExcelExport\");\n  }\n  packageCompressedFile(params) {\n    return getMultipleSheetsAsExcelCompressed(params);\n  }\n  packageFile(params) {\n    return getMultipleSheetsAsExcel(params);\n  }\n};\nfunction assertNotExcelMultiSheet(beans) {\n  if (beans.excelCreator?.getFactoryMode() === ExcelFactoryMode2.MULTI_SHEET) {\n    _warnOnce44(\n      \"The Excel Exporter is currently on Multi Sheet mode. End that operation by calling 'api.getMultipleSheetAsExcel()' or 'api.exportMultipleSheetsAsExcel()'\"\n    );\n    return false;\n  }\n  return true;\n}\nfunction getDataAsExcel(beans, params) {\n  if (assertNotExcelMultiSheet(beans)) {\n    return beans.excelCreator?.getDataAsExcel(params);\n  }\n  return void 0;\n}\nfunction exportDataAsExcel(beans, params) {\n  if (assertNotExcelMultiSheet(beans)) {\n    beans.excelCreator?.exportDataAsExcel(params);\n  }\n}\nfunction getSheetDataForExcel(beans, params) {\n  beans.excelCreator?.setFactoryMode(ExcelFactoryMode2.MULTI_SHEET);\n  return beans.excelCreator?.getSheetDataForExcel(params);\n}\nfunction getMultipleSheetsAsExcel2(beans, params) {\n  return beans.excelCreator?.getMultipleSheetsAsExcel(params);\n}\nfunction exportMultipleSheetsAsExcel2(beans, params) {\n  beans.excelCreator?.exportMultipleSheetsAsExcel(params);\n}\nvar VERSION9 = \"32.3.9\";\nvar ExcelExportCoreModule = _defineModule9({\n  version: VERSION9,\n  moduleName: `${ModuleNames10.ExcelExportModule}-core`,\n  beans: [ExcelCreator],\n  dependantModules: [_CsvExportCoreModule, EnterpriseCoreModule]\n});\nvar ExcelExportApiModule = _defineModule9({\n  version: VERSION9,\n  moduleName: `${ModuleNames10.ExcelExportModule}-api`,\n  apiFunctions: {\n    getDataAsExcel,\n    exportDataAsExcel,\n    getSheetDataForExcel,\n    getMultipleSheetsAsExcel: getMultipleSheetsAsExcel2,\n    exportMultipleSheetsAsExcel: exportMultipleSheetsAsExcel2\n  },\n  dependantModules: [ExcelExportCoreModule]\n});\nvar ExcelExportModule = _defineModule9({\n  version: VERSION9,\n  moduleName: ModuleNames10.ExcelExportModule,\n  dependantModules: [ExcelExportCoreModule, ExcelExportApiModule]\n});\n\n// enterprise-modules/filter-tool-panel/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames11, _ColumnFilterModule as _ColumnFilterModule2, _defineModule as _defineModule10 } from \"ag-grid-community\";\nimport { Component as Component55, RefPlaceholder as RefPlaceholder45 } from \"ag-grid-community\";\nimport {\n  AgInputTextFieldSelector as AgInputTextFieldSelector5,\n  Component as Component50,\n  RefPlaceholder as RefPlaceholder28,\n  _createIconNoSpan as _createIconNoSpan14,\n  _debounce as _debounce3,\n  _setDisplayed as _setDisplayed11\n} from \"ag-grid-community\";\nimport {\n  Component as Component411,\n  _clearElement as _clearElement33,\n  _exists as _exists13,\n  _flatten,\n  _getActiveDomElement as _getActiveDomElement10,\n  _includes as _includes11,\n  _mergeDeep as _mergeDeep4,\n  _setAriaLabel as _setAriaLabel9,\n  _warnOnce as _warnOnce28,\n  isProvidedColumnGroup as isProvidedColumnGroup22\n} from \"ag-grid-community\";\nimport {\n  Component as Component212,\n  FilterWrapperComp as FilterWrapperComp2,\n  KeyCode as KeyCode19,\n  RefPlaceholder as RefPlaceholder29,\n  _clearElement as _clearElement10,\n  _createIconNoSpan as _createIconNoSpan26,\n  _loadTemplate as _loadTemplate5,\n  _setAriaExpanded as _setAriaExpanded8,\n  _setDisplayed as _setDisplayed25\n} from \"ag-grid-community\";\nimport {\n  Component as Component312,\n  RefPlaceholder as RefPlaceholder36,\n  _clearElement as _clearElement24,\n  _createIconNoSpan as _createIconNoSpan35,\n  isProvidedColumnGroup as isProvidedColumnGroup5\n} from \"ag-grid-community\";\nvar AgFiltersToolPanelHeader = class extends Component50 {\n  constructor() {\n    super(...arguments);\n    this.eExpand = RefPlaceholder28;\n    this.eFilterTextField = RefPlaceholder28;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n  }\n  postConstruct() {\n    this.setTemplate(\n      /* html */\n      `<div class=\"ag-filter-toolpanel-search\" role=\"presentation\">\n                <div data-ref=\"eExpand\" class=\"ag-filter-toolpanel-expand\"></div>\n                <ag-input-text-field data-ref=\"eFilterTextField\" class=\"ag-filter-toolpanel-search-input\"></ag-input-text-field>\n            </div>`,\n      [AgInputTextFieldSelector5]\n    );\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eFilterTextField.setAutoComplete(false).setInputAriaLabel(translate(\"ariaFilterColumnsInput\", \"Filter Columns Input\")).onValueChange(this.onSearchTextChanged.bind(this));\n    this.createExpandIcons();\n    this.setExpandState(\n      0\n      /* EXPANDED */\n    );\n    this.addManagedElementListeners(this.eExpand, { click: this.onExpandClicked.bind(this) });\n    this.addManagedEventListeners({ newColumnsLoaded: this.showOrHideOptions.bind(this) });\n  }\n  init(params) {\n    this.params = params;\n    if (this.columnModel.isReady()) {\n      this.showOrHideOptions();\n    }\n  }\n  createExpandIcons() {\n    this.eExpand.appendChild(this.eExpandChecked = _createIconNoSpan14(\"columnSelectOpen\", this.gos));\n    this.eExpand.appendChild(this.eExpandUnchecked = _createIconNoSpan14(\"columnSelectClosed\", this.gos));\n    this.eExpand.appendChild(\n      this.eExpandIndeterminate = _createIconNoSpan14(\"columnSelectIndeterminate\", this.gos)\n    );\n  }\n  // we only show expand / collapse if we are showing filters\n  showOrHideOptions() {\n    const showFilterSearch = !this.params.suppressFilterSearch;\n    const showExpand = !this.params.suppressExpandAll;\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eFilterTextField.setInputPlaceholder(translate(\"searchOoo\", \"Search...\"));\n    const isFilterGroupPresent = (col) => col.getOriginalParent() && col.isFilterAllowed();\n    const filterGroupsPresent = this.columnModel.getCols().some(isFilterGroupPresent);\n    _setDisplayed11(this.eFilterTextField.getGui(), showFilterSearch);\n    _setDisplayed11(this.eExpand, showExpand && filterGroupsPresent);\n  }\n  onSearchTextChanged() {\n    if (!this.onSearchTextChangedDebounced) {\n      this.onSearchTextChangedDebounced = _debounce3(() => {\n        this.dispatchLocalEvent({ type: \"searchChanged\", searchText: this.eFilterTextField.getValue() });\n      }, 300);\n    }\n    this.onSearchTextChangedDebounced();\n  }\n  onExpandClicked() {\n    const event = this.currentExpandState === 0 ? { type: \"collapseAll\" } : { type: \"expandAll\" };\n    this.dispatchLocalEvent(event);\n  }\n  setExpandState(state) {\n    this.currentExpandState = state;\n    _setDisplayed11(\n      this.eExpandChecked,\n      this.currentExpandState === 0\n      /* EXPANDED */\n    );\n    _setDisplayed11(\n      this.eExpandUnchecked,\n      this.currentExpandState === 1\n      /* COLLAPSED */\n    );\n    _setDisplayed11(\n      this.eExpandIndeterminate,\n      this.currentExpandState === 2\n      /* INDETERMINATE */\n    );\n  }\n};\nvar AgFiltersToolPanelHeaderSelector = {\n  selector: \"AG-FILTERS-TOOL-PANEL-HEADER\",\n  component: AgFiltersToolPanelHeader\n};\nvar ToolPanelFilterComp = class extends Component212 {\n  constructor(hideHeader, expandedCallback) {\n    super(\n      /* html */\n      `\n            <div class=\"ag-filter-toolpanel-instance\">\n                <div class=\"ag-filter-toolpanel-header ag-filter-toolpanel-instance-header\" data-ref=\"eFilterToolPanelHeader\" role=\"button\" aria-expanded=\"false\">\n                    <div data-ref=\"eExpand\" class=\"ag-filter-toolpanel-expand\"></div>\n                    <span data-ref=\"eFilterName\" class=\"ag-header-cell-text\"></span>\n                    <span data-ref=\"eFilterIcon\" class=\"ag-header-icon ag-filter-icon ag-filter-toolpanel-instance-header-icon\" aria-hidden=\"true\"></span>\n                </div>\n                <div class=\"ag-filter-toolpanel-instance-body ag-filter\" data-ref=\"agFilterToolPanelBody\"></div>\n            </div>`\n    );\n    this.expandedCallback = expandedCallback;\n    this.eFilterToolPanelHeader = RefPlaceholder29;\n    this.eFilterName = RefPlaceholder29;\n    this.agFilterToolPanelBody = RefPlaceholder29;\n    this.eFilterIcon = RefPlaceholder29;\n    this.eExpand = RefPlaceholder29;\n    this.expanded = false;\n    this.hideHeader = hideHeader;\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.columnNameService = beans.columnNameService;\n  }\n  postConstruct() {\n    this.eExpandChecked = _createIconNoSpan26(\"columnSelectOpen\", this.gos);\n    this.eExpandUnchecked = _createIconNoSpan26(\"columnSelectClosed\", this.gos);\n    this.eExpand.appendChild(this.eExpandChecked);\n    this.eExpand.appendChild(this.eExpandUnchecked);\n  }\n  setColumn(column) {\n    this.column = column;\n    this.eFilterName.innerText = this.columnNameService.getDisplayNameForColumn(this.column, \"filterToolPanel\", false) || \"\";\n    this.addManagedListeners(this.eFilterToolPanelHeader, {\n      click: this.toggleExpanded.bind(this),\n      keydown: this.onKeyDown.bind(this)\n    });\n    this.addManagedEventListeners({ filterOpened: this.onFilterOpened.bind(this) });\n    this.addInIcon(\"filter\", this.eFilterIcon, this.column);\n    _setDisplayed25(this.eFilterIcon, this.isFilterActive(), { skipAriaHidden: true });\n    _setDisplayed25(this.eExpandChecked, false);\n    if (this.hideHeader) {\n      _setDisplayed25(this.eFilterToolPanelHeader, false);\n      this.eFilterToolPanelHeader.removeAttribute(\"tabindex\");\n    } else {\n      this.eFilterToolPanelHeader.setAttribute(\"tabindex\", \"0\");\n    }\n    this.addManagedListeners(this.column, { filterChanged: this.onFilterChanged.bind(this) });\n  }\n  onKeyDown(e) {\n    const { key } = e;\n    const { ENTER, SPACE, LEFT, RIGHT } = KeyCode19;\n    if (key !== ENTER && key !== SPACE && key !== LEFT && key !== RIGHT) {\n      return;\n    }\n    e.preventDefault();\n    if (key === ENTER || key === SPACE) {\n      this.toggleExpanded();\n    } else if (key === KeyCode19.LEFT) {\n      this.collapse();\n    } else {\n      this.expand();\n    }\n  }\n  getColumn() {\n    return this.column;\n  }\n  getColumnFilterName() {\n    return this.columnNameService.getDisplayNameForColumn(this.column, \"filterToolPanel\", false);\n  }\n  addCssClassToTitleBar(cssClass) {\n    this.eFilterToolPanelHeader.classList.add(cssClass);\n  }\n  addInIcon(iconName, eParent, column) {\n    if (eParent == null) {\n      return;\n    }\n    const eIcon = _createIconNoSpan26(iconName, this.gos, column);\n    eParent.appendChild(eIcon);\n  }\n  isFilterActive() {\n    return !!this.filterManager?.isFilterActive(this.column);\n  }\n  onFilterChanged() {\n    _setDisplayed25(this.eFilterIcon, this.isFilterActive(), { skipAriaHidden: true });\n    this.dispatchLocalEvent({ type: \"filterChanged\" });\n  }\n  toggleExpanded() {\n    this.expanded ? this.collapse() : this.expand();\n  }\n  expand() {\n    if (this.expanded) {\n      return;\n    }\n    this.expanded = true;\n    _setAriaExpanded8(this.eFilterToolPanelHeader, true);\n    _setDisplayed25(this.eExpandChecked, true);\n    _setDisplayed25(this.eExpandUnchecked, false);\n    this.addFilterElement();\n    this.expandedCallback();\n  }\n  addFilterElement(suppressFocus) {\n    const filterPanelWrapper = _loadTemplate5(\n      /* html */\n      `<div class=\"ag-filter-toolpanel-instance-filter\"></div>`\n    );\n    const comp = this.createManagedBean(new FilterWrapperComp2(this.column, \"TOOLBAR\"));\n    this.filterWrapperComp = comp;\n    if (!comp.hasFilter()) {\n      return;\n    }\n    comp.getFilter()?.then((filter) => {\n      this.underlyingFilter = filter;\n      if (!filter) {\n        return;\n      }\n      filterPanelWrapper.appendChild(comp.getGui());\n      this.agFilterToolPanelBody.appendChild(filterPanelWrapper);\n      comp.afterGuiAttached({ container: \"toolPanel\", suppressFocus });\n    });\n  }\n  collapse() {\n    if (!this.expanded) {\n      return;\n    }\n    this.expanded = false;\n    _setAriaExpanded8(this.eFilterToolPanelHeader, false);\n    this.removeFilterElement();\n    _setDisplayed25(this.eExpandChecked, false);\n    _setDisplayed25(this.eExpandUnchecked, true);\n    this.filterWrapperComp?.afterGuiDetached();\n    this.destroyBean(this.filterWrapperComp);\n    this.expandedCallback();\n  }\n  removeFilterElement() {\n    _clearElement10(this.agFilterToolPanelBody);\n  }\n  isExpanded() {\n    return this.expanded;\n  }\n  refreshFilter(isDisplayed) {\n    if (!this.expanded) {\n      return;\n    }\n    const filter = this.underlyingFilter;\n    if (!filter) {\n      return;\n    }\n    if (isDisplayed) {\n      if (typeof filter.refreshVirtualList === \"function\") {\n        filter.refreshVirtualList();\n      }\n    } else {\n      filter.afterGuiDetached?.();\n    }\n  }\n  onFilterOpened(event) {\n    if (event.source !== \"COLUMN_MENU\") {\n      return;\n    }\n    if (event.column !== this.column) {\n      return;\n    }\n    if (!this.expanded) {\n      return;\n    }\n    this.collapse();\n  }\n};\nvar ToolPanelFilterGroupComp = class _ToolPanelFilterGroupComp extends Component312 {\n  constructor(columnGroup, childFilterComps, expandedCallback, depth, showingColumn) {\n    super();\n    this.filterGroupComp = RefPlaceholder36;\n    this.columnGroup = columnGroup;\n    this.childFilterComps = childFilterComps;\n    this.depth = depth;\n    this.expandedCallback = expandedCallback;\n    this.showingColumn = showingColumn;\n  }\n  wireBeans(beans) {\n    this.columnNameService = beans.columnNameService;\n  }\n  postConstruct() {\n    const groupParams = {\n      cssIdentifier: \"filter-toolpanel\",\n      direction: \"vertical\"\n    };\n    this.setTemplate(\n      /* html */\n      `<div class=\"ag-filter-toolpanel-group-wrapper\">\n            <ag-group-component data-ref=\"filterGroupComp\"></ag-group-component>\n        </div>`,\n      [AgGroupComponentSelector],\n      { filterGroupComp: groupParams }\n    );\n    this.setGroupTitle();\n    this.filterGroupComp.setAlignItems(\"stretch\");\n    this.filterGroupComp.addCssClass(`ag-filter-toolpanel-group-level-${this.depth}`);\n    this.filterGroupComp.getGui().style.setProperty(\"--ag-indentation-level\", String(this.depth));\n    this.filterGroupComp.addCssClassToTitleBar(`ag-filter-toolpanel-group-level-${this.depth}-header`);\n    this.childFilterComps.forEach((filterComp) => {\n      this.filterGroupComp.addItem(filterComp);\n      filterComp.addCssClassToTitleBar(`ag-filter-toolpanel-group-level-${this.depth + 1}-header`);\n      filterComp.getGui().style.setProperty(\"--ag-indentation-level\", String(this.depth + 1));\n    });\n    this.refreshFilterClass();\n    this.addExpandCollapseListeners();\n    this.addFilterChangedListeners();\n    this.setupTooltip();\n    this.addInIcon(\"filter\");\n  }\n  setupTooltip() {\n    if (!this.showingColumn) {\n      return;\n    }\n    const isTooltipWhenTruncated = this.gos.get(\"tooltipShowMode\") === \"whenTruncated\";\n    let shouldDisplayTooltip;\n    if (isTooltipWhenTruncated) {\n      shouldDisplayTooltip = () => {\n        const eGui = this.filterGroupComp.getGui();\n        const eTitle = eGui.querySelector(\".ag-group-title\");\n        if (!eTitle) {\n          return true;\n        }\n        return eTitle.scrollWidth > eTitle.clientWidth;\n      };\n    }\n    const refresh = () => {\n      const newTooltipText = this.columnGroup.getColDef().headerTooltip;\n      this.setTooltip({ newTooltipText, location: \"filterToolPanelColumnGroup\", shouldDisplayTooltip });\n    };\n    refresh();\n    this.addManagedEventListeners({ newColumnsLoaded: refresh });\n  }\n  getTooltipParams() {\n    const res = super.getTooltipParams();\n    res.location = \"filterToolPanelColumnGroup\";\n    return res;\n  }\n  addCssClassToTitleBar(cssClass) {\n    this.filterGroupComp.addCssClassToTitleBar(cssClass);\n  }\n  refreshFilters(isDisplayed) {\n    this.childFilterComps.forEach((filterComp) => {\n      if (filterComp instanceof _ToolPanelFilterGroupComp) {\n        filterComp.refreshFilters(isDisplayed);\n      } else {\n        filterComp.refreshFilter(isDisplayed);\n      }\n    });\n  }\n  isColumnGroup() {\n    return isProvidedColumnGroup5(this.columnGroup);\n  }\n  isExpanded() {\n    return this.filterGroupComp.isExpanded();\n  }\n  getChildren() {\n    return this.childFilterComps;\n  }\n  getFilterGroupName() {\n    return this.filterGroupName ? this.filterGroupName : \"\";\n  }\n  getFilterGroupId() {\n    return this.columnGroup.getId();\n  }\n  hideGroupItem(hide, index) {\n    this.filterGroupComp.hideItem(hide, index);\n  }\n  hideGroup(hide) {\n    this.setDisplayed(!hide);\n  }\n  addInIcon(iconName) {\n    const eIcon = _createIconNoSpan35(iconName, this.gos);\n    if (eIcon) {\n      eIcon.classList.add(\"ag-filter-toolpanel-group-instance-header-icon\");\n    }\n    this.filterGroupComp.addTitleBarWidget(eIcon);\n  }\n  forEachToolPanelFilterChild(action) {\n    this.childFilterComps.forEach((filterComp) => {\n      if (filterComp instanceof ToolPanelFilterComp) {\n        action(filterComp);\n      }\n    });\n  }\n  addExpandCollapseListeners() {\n    const expandListener = this.isColumnGroup() ? () => this.expandedCallback() : () => this.forEachToolPanelFilterChild((filterComp) => filterComp.expand());\n    const collapseListener = this.isColumnGroup() ? () => this.expandedCallback() : () => this.forEachToolPanelFilterChild((filterComp) => filterComp.collapse());\n    this.addManagedListeners(this.filterGroupComp, {\n      expanded: expandListener,\n      collapsed: collapseListener\n    });\n  }\n  getColumns() {\n    if (isProvidedColumnGroup5(this.columnGroup)) {\n      return this.columnGroup.getLeafColumns();\n    }\n    return [this.columnGroup];\n  }\n  addFilterChangedListeners() {\n    this.getColumns().forEach((column) => {\n      this.addManagedListeners(column, { filterChanged: () => this.refreshFilterClass() });\n    });\n    if (!isProvidedColumnGroup5(this.columnGroup)) {\n      this.addManagedEventListeners({ filterOpened: this.onFilterOpened.bind(this) });\n    }\n  }\n  refreshFilterClass() {\n    const columns = this.getColumns();\n    const anyChildFiltersActive = () => columns.some((col) => col.isFilterActive());\n    this.filterGroupComp.addOrRemoveCssClass(\"ag-has-filter\", anyChildFiltersActive());\n  }\n  onFilterOpened(event) {\n    if (event.source !== \"COLUMN_MENU\") {\n      return;\n    }\n    if (event.column !== this.columnGroup) {\n      return;\n    }\n    if (!this.isExpanded()) {\n      return;\n    }\n    this.collapse();\n  }\n  expand() {\n    this.filterGroupComp.toggleGroupExpand(true);\n  }\n  collapse() {\n    this.filterGroupComp.toggleGroupExpand(false);\n  }\n  setGroupTitle() {\n    this.filterGroupName = isProvidedColumnGroup5(this.columnGroup) ? this.getColumnGroupName(this.columnGroup) : this.getColumnName(this.columnGroup);\n    this.filterGroupComp.setTitle(this.filterGroupName || \"\");\n  }\n  getColumnGroupName(columnGroup) {\n    return this.columnNameService.getDisplayNameForProvidedColumnGroup(null, columnGroup, \"filterToolPanel\");\n  }\n  getColumnName(column) {\n    return this.columnNameService.getDisplayNameForColumn(column, \"filterToolPanel\", false);\n  }\n  destroyFilters() {\n    this.childFilterComps = this.destroyBeans(this.childFilterComps);\n    _clearElement24(this.getGui());\n  }\n  destroy() {\n    this.destroyFilters();\n    super.destroy();\n  }\n};\nvar AgFiltersToolPanelList = class extends Component411 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-filter-list-panel\"></div>`\n    );\n    this.initialised = false;\n    this.hasLoadedInitialState = false;\n    this.isInitialState = false;\n    this.filterGroupComps = [];\n    this.suppressOnColumnsChanged = false;\n    this.onColumnsChangedPending = false;\n  }\n  wireBeans(beans) {\n    this.toolPanelColDefService = beans.toolPanelColDefService;\n    this.columnModel = beans.columnModel;\n  }\n  init(params) {\n    this.initialised = true;\n    const defaultParams = this.gos.addGridCommonParams({\n      suppressExpandAll: false,\n      suppressFilterSearch: false,\n      suppressSyncLayoutWithGrid: false\n    });\n    _mergeDeep4(defaultParams, params);\n    this.params = defaultParams;\n    if (!this.params.suppressSyncLayoutWithGrid) {\n      this.addManagedEventListeners({ columnMoved: () => this.onColumnsChanged() });\n    }\n    this.addManagedEventListeners({\n      newColumnsLoaded: () => this.onColumnsChanged(),\n      toolPanelVisibleChanged: (event) => {\n        if (event.key === \"filters\") {\n          this.refreshFilters(event.visible);\n        }\n      },\n      dragStarted: () => {\n        this.suppressOnColumnsChanged = true;\n      },\n      dragStopped: () => {\n        this.suppressOnColumnsChanged = false;\n        if (this.onColumnsChangedPending) {\n          this.onColumnsChangedPending = false;\n          this.onColumnsChanged();\n        }\n      }\n    });\n    if (this.columnModel.isReady()) {\n      this.onColumnsChanged();\n    }\n  }\n  onColumnsChanged() {\n    if (this.suppressOnColumnsChanged) {\n      this.onColumnsChangedPending = true;\n      return;\n    }\n    const pivotModeActive = this.columnModel.isPivotMode();\n    const shouldSyncColumnLayoutWithGrid = !this.params.suppressSyncLayoutWithGrid && !pivotModeActive;\n    shouldSyncColumnLayoutWithGrid ? this.syncFilterLayout() : this.buildTreeFromProvidedColumnDefs();\n    this.refreshAriaLabel();\n  }\n  syncFilterLayout() {\n    this.toolPanelColDefService.syncLayoutWithGrid(this.setFiltersLayout.bind(this));\n    this.refreshAriaLabel();\n  }\n  buildTreeFromProvidedColumnDefs() {\n    const columnTree = this.columnModel.getColDefColTree();\n    this.recreateFilters(columnTree);\n  }\n  setFiltersLayout(colDefs) {\n    const columnTree = this.toolPanelColDefService.createColumnTree(colDefs);\n    this.recreateFilters(columnTree);\n  }\n  recreateFilters(columnTree) {\n    const activeElement = _getActiveDomElement10(this.gos);\n    if (!this.hasLoadedInitialState) {\n      this.hasLoadedInitialState = true;\n      this.isInitialState = !!this.params.initialState;\n    }\n    const expansionState = this.getExpansionState();\n    this.destroyFilters();\n    this.filterGroupComps = this.recursivelyAddComps(columnTree, 0, expansionState);\n    const len = this.filterGroupComps.length;\n    if (len) {\n      this.filterGroupComps.forEach((comp) => this.appendChild(comp));\n      this.setFirstAndLastVisible(0, len - 1);\n    }\n    if (_exists13(this.searchFilterText)) {\n      this.searchFilters(this.searchFilterText);\n    }\n    this.fireExpandedEvent();\n    if (this.getGui().contains(activeElement)) {\n      activeElement.focus();\n    }\n    this.isInitialState = false;\n    this.refreshAriaLabel();\n  }\n  recursivelyAddComps(tree, depth, expansionState) {\n    return _flatten(\n      tree.map((child) => {\n        if (isProvidedColumnGroup22(child)) {\n          return _flatten(this.recursivelyAddFilterGroupComps(child, depth, expansionState));\n        }\n        const column = child;\n        if (!this.shouldDisplayFilter(column)) {\n          return [];\n        }\n        const hideFilterCompHeader = depth === 0;\n        const filterComp = new ToolPanelFilterComp(hideFilterCompHeader, () => this.onFilterExpanded());\n        this.createBean(filterComp);\n        filterComp.setColumn(column);\n        if (expansionState.get(column.getId())) {\n          filterComp.expand();\n        }\n        if (depth > 0) {\n          return filterComp;\n        }\n        const filterGroupComp = this.createBean(\n          new ToolPanelFilterGroupComp(column, [filterComp], this.onGroupExpanded.bind(this), depth, true)\n        );\n        filterGroupComp.addCssClassToTitleBar(\"ag-filter-toolpanel-header\");\n        if (!expansionState.get(filterGroupComp.getFilterGroupId())) {\n          filterGroupComp.collapse();\n        }\n        return filterGroupComp;\n      })\n    );\n  }\n  refreshAriaLabel() {\n    const translate = this.localeService.getLocaleTextFunc();\n    const filterListName = translate(\"ariaFilterPanelList\", \"Filter List\");\n    const localeFilters = translate(\"filters\", \"Filters\");\n    const eGui = this.getGui();\n    const groupSelector = \".ag-filter-toolpanel-group-wrapper\";\n    const itemSelector = \".ag-filter-toolpanel-group-item\";\n    const hiddenSelector = \".ag-hidden\";\n    const visibleItems = eGui.querySelectorAll(`${itemSelector}:not(${groupSelector}, ${hiddenSelector})`);\n    const totalVisibleItems = visibleItems.length;\n    _setAriaLabel9(this.getAriaElement(), `${filterListName} ${totalVisibleItems} ${localeFilters}`);\n  }\n  recursivelyAddFilterGroupComps(columnGroup, depth, expansionState) {\n    if (!this.filtersExistInChildren(columnGroup.getChildren())) {\n      return;\n    }\n    const colGroupDef = columnGroup.getColGroupDef();\n    if (colGroupDef && colGroupDef.suppressFiltersToolPanel) {\n      return [];\n    }\n    const newDepth = columnGroup.isPadding() ? depth : depth + 1;\n    const childFilterComps = _flatten(\n      this.recursivelyAddComps(columnGroup.getChildren(), newDepth, expansionState)\n    );\n    if (columnGroup.isPadding()) {\n      return childFilterComps;\n    }\n    const filterGroupComp = new ToolPanelFilterGroupComp(\n      columnGroup,\n      childFilterComps,\n      this.onGroupExpanded.bind(this),\n      depth,\n      false\n    );\n    this.createBean(filterGroupComp);\n    filterGroupComp.addCssClassToTitleBar(\"ag-filter-toolpanel-header\");\n    const expansionStateValue = expansionState.get(filterGroupComp.getFilterGroupId());\n    if (this.isInitialState && !expansionStateValue || expansionStateValue === false) {\n      filterGroupComp.collapse();\n    }\n    return [filterGroupComp];\n  }\n  filtersExistInChildren(tree) {\n    return tree.some((child) => {\n      if (isProvidedColumnGroup22(child)) {\n        return this.filtersExistInChildren(child.getChildren());\n      }\n      return this.shouldDisplayFilter(child);\n    });\n  }\n  shouldDisplayFilter(column) {\n    const suppressFiltersToolPanel = column.getColDef() && column.getColDef().suppressFiltersToolPanel;\n    return column.isFilterAllowed() && !suppressFiltersToolPanel;\n  }\n  getExpansionState() {\n    const expansionState = /* @__PURE__ */ new Map();\n    if (this.isInitialState) {\n      const { expandedColIds, expandedGroupIds } = this.params.initialState;\n      expandedColIds.forEach((id) => expansionState.set(id, true));\n      expandedGroupIds.forEach((id) => expansionState.set(id, true));\n      return expansionState;\n    }\n    const recursiveGetExpansionState = (filterGroupComp) => {\n      expansionState.set(filterGroupComp.getFilterGroupId(), filterGroupComp.isExpanded());\n      filterGroupComp.getChildren().forEach((child) => {\n        if (child instanceof ToolPanelFilterGroupComp) {\n          recursiveGetExpansionState(child);\n        } else {\n          expansionState.set(child.getColumn().getId(), child.isExpanded());\n        }\n      });\n    };\n    this.filterGroupComps.forEach(recursiveGetExpansionState);\n    return expansionState;\n  }\n  // we don't support refreshing, but must implement because it's on the tool panel interface\n  refresh() {\n  }\n  // lazy initialise the panel\n  setVisible(visible) {\n    super.setDisplayed(visible);\n    if (visible && !this.initialised) {\n      this.init(this.params);\n    }\n  }\n  expandFilterGroups(expand, groupIds) {\n    const updatedGroupIds = [];\n    const updateGroupExpandState = (filterGroup) => {\n      const groupId = filterGroup.getFilterGroupId();\n      const shouldExpandOrCollapse = !groupIds || _includes11(groupIds, groupId);\n      if (shouldExpandOrCollapse) {\n        if (expand && filterGroup.isColumnGroup()) {\n          filterGroup.expand();\n        } else {\n          filterGroup.collapse();\n        }\n        updatedGroupIds.push(groupId);\n      }\n      filterGroup.getChildren().forEach((child) => {\n        if (child instanceof ToolPanelFilterGroupComp) {\n          updateGroupExpandState(child);\n        }\n      });\n    };\n    this.filterGroupComps.forEach(updateGroupExpandState);\n    this.onGroupExpanded();\n    if (groupIds) {\n      const unrecognisedGroupIds = groupIds.filter((groupId) => updatedGroupIds.indexOf(groupId) < 0);\n      if (unrecognisedGroupIds.length > 0) {\n        _warnOnce28(\"unable to find groups for these supplied groupIds:\", unrecognisedGroupIds);\n      }\n    }\n  }\n  expandFilters(expand, colIds) {\n    const updatedColIds = [];\n    const updateGroupExpandState = (filterComp) => {\n      if (filterComp instanceof ToolPanelFilterGroupComp) {\n        let anyChildrenChanged = false;\n        filterComp.getChildren().forEach((child) => {\n          const childUpdated = updateGroupExpandState(child);\n          if (childUpdated) {\n            if (expand) {\n              filterComp.expand();\n              anyChildrenChanged = true;\n            } else if (!filterComp.isColumnGroup()) {\n              filterComp.collapse();\n            }\n          }\n        });\n        return anyChildrenChanged;\n      }\n      const colId = filterComp.getColumn().getColId();\n      const updateFilterExpandState = !colIds || _includes11(colIds, colId);\n      if (updateFilterExpandState) {\n        expand ? filterComp.expand() : filterComp.collapse();\n        updatedColIds.push(colId);\n      }\n      return updateFilterExpandState;\n    };\n    this.filterGroupComps.forEach(updateGroupExpandState);\n    this.onGroupExpanded();\n    if (colIds) {\n      const unrecognisedColIds = colIds.filter((colId) => updatedColIds.indexOf(colId) < 0);\n      if (unrecognisedColIds.length > 0) {\n        _warnOnce28(\"unable to find columns for these supplied colIds:\" + unrecognisedColIds);\n      }\n    }\n  }\n  onGroupExpanded() {\n    this.fireExpandedEvent();\n  }\n  onFilterExpanded() {\n    this.dispatchLocalEvent({ type: \"filterExpanded\" });\n  }\n  fireExpandedEvent() {\n    let expandedCount = 0;\n    let notExpandedCount = 0;\n    const updateExpandCounts = (filterGroup) => {\n      if (!filterGroup.isColumnGroup()) {\n        return;\n      }\n      filterGroup.isExpanded() ? expandedCount++ : notExpandedCount++;\n      filterGroup.getChildren().forEach((child) => {\n        if (child instanceof ToolPanelFilterGroupComp) {\n          updateExpandCounts(child);\n        }\n      });\n    };\n    this.filterGroupComps.forEach(updateExpandCounts);\n    let state;\n    if (expandedCount > 0 && notExpandedCount > 0) {\n      state = 2;\n    } else if (notExpandedCount > 0) {\n      state = 1;\n    } else {\n      state = 0;\n    }\n    this.dispatchLocalEvent({ type: \"groupExpanded\", state });\n  }\n  performFilterSearch(searchText) {\n    this.searchFilterText = _exists13(searchText) ? searchText.toLowerCase() : null;\n    this.searchFilters(this.searchFilterText);\n  }\n  searchFilters(searchFilter) {\n    const passesFilter = (groupName) => {\n      return !_exists13(searchFilter) || groupName.toLowerCase().indexOf(searchFilter) !== -1;\n    };\n    const recursivelySearch = (filterItem, parentPasses) => {\n      if (!(filterItem instanceof ToolPanelFilterGroupComp)) {\n        return passesFilter(filterItem.getColumnFilterName() || \"\");\n      }\n      const children = filterItem.getChildren();\n      const groupNamePasses = passesFilter(filterItem.getFilterGroupName());\n      const alreadyPassed = parentPasses || groupNamePasses;\n      if (alreadyPassed) {\n        filterItem.hideGroup(false);\n        for (let i = 0; i < children.length; i++) {\n          recursivelySearch(children[i], alreadyPassed);\n          filterItem.hideGroupItem(false, i);\n        }\n        return true;\n      }\n      let anyChildPasses = false;\n      children.forEach((child, index) => {\n        const childPasses = recursivelySearch(child, parentPasses);\n        filterItem.hideGroupItem(!childPasses, index);\n        if (childPasses) {\n          anyChildPasses = true;\n        }\n      });\n      filterItem.hideGroup(!anyChildPasses);\n      return anyChildPasses;\n    };\n    let firstVisible;\n    let lastVisible;\n    this.filterGroupComps.forEach((filterGroup, idx) => {\n      recursivelySearch(filterGroup, false);\n      if (firstVisible === void 0) {\n        if (!filterGroup.containsCssClass(\"ag-hidden\")) {\n          firstVisible = idx;\n          lastVisible = idx;\n        }\n      } else if (!filterGroup.containsCssClass(\"ag-hidden\") && lastVisible !== idx) {\n        lastVisible = idx;\n      }\n    });\n    this.setFirstAndLastVisible(firstVisible, lastVisible);\n    this.refreshAriaLabel();\n  }\n  setFirstAndLastVisible(firstIdx, lastIdx) {\n    this.filterGroupComps.forEach((filterGroup, idx) => {\n      filterGroup.removeCssClass(\"ag-first-group-visible\");\n      filterGroup.removeCssClass(\"ag-last-group-visible\");\n      if (idx === firstIdx) {\n        filterGroup.addCssClass(\"ag-first-group-visible\");\n      }\n      if (idx === lastIdx) {\n        filterGroup.addCssClass(\"ag-last-group-visible\");\n      }\n    });\n  }\n  refreshFilters(isDisplayed) {\n    this.filterGroupComps.forEach((filterGroupComp) => filterGroupComp.refreshFilters(isDisplayed));\n  }\n  getExpandedFiltersAndGroups() {\n    const expandedGroupIds = [];\n    const expandedColIds = /* @__PURE__ */ new Set();\n    const getExpandedFiltersAndGroups = (filterComp) => {\n      if (filterComp instanceof ToolPanelFilterGroupComp) {\n        filterComp.getChildren().forEach((child) => getExpandedFiltersAndGroups(child));\n        const groupId = filterComp.getFilterGroupId();\n        if (filterComp.isExpanded() && !expandedColIds.has(groupId)) {\n          expandedGroupIds.push(groupId);\n        }\n      } else {\n        if (filterComp.isExpanded()) {\n          expandedColIds.add(filterComp.getColumn().getColId());\n        }\n      }\n    };\n    this.filterGroupComps.forEach(getExpandedFiltersAndGroups);\n    return { expandedGroupIds, expandedColIds: Array.from(expandedColIds) };\n  }\n  destroyFilters() {\n    this.filterGroupComps = this.destroyBeans(this.filterGroupComps);\n    _clearElement33(this.getGui());\n  }\n  destroy() {\n    this.destroyFilters();\n    super.destroy();\n  }\n};\nvar AgFiltersToolPanelListSelector = {\n  selector: \"AG-FILTERS-TOOL-PANEL-LIST\",\n  component: AgFiltersToolPanelList\n};\nvar FiltersToolPanel = class extends Component55 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-filter-toolpanel\">\n            <ag-filters-tool-panel-header data-ref=\"filtersToolPanelHeaderPanel\"></ag-filters-tool-panel-header>\n            <ag-filters-tool-panel-list data-ref=\"filtersToolPanelListPanel\"></ag-filters-tool-panel-list>\n         </div>`,\n      [AgFiltersToolPanelHeaderSelector, AgFiltersToolPanelListSelector]\n    );\n    this.filtersToolPanelHeaderPanel = RefPlaceholder45;\n    this.filtersToolPanelListPanel = RefPlaceholder45;\n    this.initialised = false;\n    this.listenerDestroyFuncs = [];\n  }\n  init(params) {\n    if (this.initialised) {\n      this.listenerDestroyFuncs.forEach((func) => func());\n      this.listenerDestroyFuncs = [];\n    }\n    this.initialised = true;\n    const defaultParams = this.gos.addGridCommonParams({\n      suppressExpandAll: false,\n      suppressFilterSearch: false,\n      suppressSyncLayoutWithGrid: false\n    });\n    this.params = {\n      ...defaultParams,\n      ...params\n    };\n    this.filtersToolPanelHeaderPanel.init(this.params);\n    this.filtersToolPanelListPanel.init(this.params);\n    const hideExpand = this.params.suppressExpandAll;\n    const hideSearch = this.params.suppressFilterSearch;\n    if (hideExpand && hideSearch) {\n      this.filtersToolPanelHeaderPanel.setDisplayed(false);\n    }\n    this.listenerDestroyFuncs.push(\n      ...this.addManagedListeners(this.filtersToolPanelHeaderPanel, {\n        expandAll: this.onExpandAll.bind(this),\n        collapseAll: this.onCollapseAll.bind(this),\n        searchChanged: this.onSearchChanged.bind(this)\n      }),\n      ...this.addManagedListeners(this.filtersToolPanelListPanel, {\n        filterExpanded: this.onFilterExpanded.bind(this),\n        groupExpanded: this.onGroupExpanded.bind(this)\n      })\n    );\n  }\n  // lazy initialise the panel\n  setVisible(visible) {\n    super.setDisplayed(visible);\n    if (visible && !this.initialised) {\n      this.init(this.params);\n    }\n  }\n  onExpandAll() {\n    this.filtersToolPanelListPanel.expandFilterGroups(true);\n  }\n  onCollapseAll() {\n    this.filtersToolPanelListPanel.expandFilterGroups(false);\n  }\n  onSearchChanged(event) {\n    this.filtersToolPanelListPanel.performFilterSearch(event.searchText);\n  }\n  setFilterLayout(colDefs) {\n    this.filtersToolPanelListPanel.setFiltersLayout(colDefs);\n  }\n  onFilterExpanded() {\n    this.params.onStateUpdated();\n  }\n  onGroupExpanded(event) {\n    this.filtersToolPanelHeaderPanel.setExpandState(event.state);\n    this.params.onStateUpdated();\n  }\n  expandFilterGroups(groupIds) {\n    this.filtersToolPanelListPanel.expandFilterGroups(true, groupIds);\n  }\n  collapseFilterGroups(groupIds) {\n    this.filtersToolPanelListPanel.expandFilterGroups(false, groupIds);\n  }\n  expandFilters(colIds) {\n    this.filtersToolPanelListPanel.expandFilters(true, colIds);\n  }\n  collapseFilters(colIds) {\n    this.filtersToolPanelListPanel.expandFilters(false, colIds);\n  }\n  syncLayoutWithGrid() {\n    this.filtersToolPanelListPanel.syncFilterLayout();\n  }\n  refresh(params) {\n    this.init(params);\n    return true;\n  }\n  getState() {\n    return this.filtersToolPanelListPanel.getExpandedFiltersAndGroups();\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n};\nvar VERSION10 = \"32.3.9\";\nvar FiltersToolPanelModule = _defineModule10({\n  version: VERSION10,\n  moduleName: ModuleNames11.FiltersToolPanelModule,\n  beans: [],\n  userComponents: [{ name: \"agFiltersToolPanel\", classImp: FiltersToolPanel }],\n  dependantModules: [SideBarModule, EnterpriseCoreModule, _ColumnFilterModule2]\n});\n\n// enterprise-modules/master-detail/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames12, _defineModule as _defineModule11 } from \"ag-grid-community\";\nimport { Component as Component51, ModuleRegistry, RefPlaceholder as RefPlaceholder30, _missing as _missing23, _warnOnce as _warnOnce29, createGrid } from \"ag-grid-community\";\nimport { BeanStub as BeanStub21, _missing as _missing4, _warnOnce as _warnOnce30 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub27, _exists as _exists14, _iterateObject as _iterateObject5 } from \"ag-grid-community\";\nvar DetailCellRendererCtrl = class extends BeanStub21 {\n  constructor() {\n    super(...arguments);\n    this.loadRowDataVersion = 0;\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.environment = beans.environment;\n  }\n  init(comp, params) {\n    this.params = params;\n    this.comp = comp;\n    const doNothingBecauseInsidePinnedSection = params.pinned != null;\n    if (doNothingBecauseInsidePinnedSection) {\n      return;\n    }\n    this.setAutoHeightClasses();\n    this.setupRefreshStrategy();\n    this.addThemeToDetailGrid();\n    this.createDetailGrid();\n    this.loadRowData();\n    this.addManagedEventListeners({ fullWidthRowFocused: this.onFullWidthRowFocused.bind(this) });\n  }\n  onFullWidthRowFocused(e) {\n    const params = this.params;\n    const row = { rowIndex: params.node.rowIndex, rowPinned: params.node.rowPinned };\n    const eventRow = { rowIndex: e.rowIndex, rowPinned: e.rowPinned };\n    const isSameRow = this.rowPositionUtils.sameRow(row, eventRow);\n    if (!isSameRow) {\n      return;\n    }\n    this.focusService.focusInto(this.comp.getGui(), e.fromBelow);\n  }\n  setAutoHeightClasses() {\n    const autoHeight = this.gos.get(\"detailRowAutoHeight\");\n    const parentClass = autoHeight ? \"ag-details-row-auto-height\" : \"ag-details-row-fixed-height\";\n    const detailClass = autoHeight ? \"ag-details-grid-auto-height\" : \"ag-details-grid-fixed-height\";\n    this.comp.addOrRemoveCssClass(parentClass, true);\n    this.comp.addOrRemoveDetailGridCssClass(detailClass, true);\n  }\n  setupRefreshStrategy() {\n    const providedStrategy = this.params.refreshStrategy;\n    const validSelection = providedStrategy == \"everything\" || providedStrategy == \"nothing\" || providedStrategy == \"rows\";\n    if (validSelection) {\n      this.refreshStrategy = providedStrategy;\n      return;\n    }\n    if (providedStrategy != null) {\n      _warnOnce30(\n        \"invalid cellRendererParams.refreshStrategy = '\" + providedStrategy + \"' supplied, defaulting to refreshStrategy = 'rows'.\"\n      );\n    }\n    this.refreshStrategy = \"rows\";\n  }\n  addThemeToDetailGrid() {\n    for (const themeClass of this.environment.getThemeClasses()) {\n      this.comp.addOrRemoveDetailGridCssClass(themeClass, true);\n    }\n  }\n  createDetailGrid() {\n    if (_missing4(this.params.detailGridOptions)) {\n      _warnOnce30(\n        \"could not find detail grid options for master detail, please set gridOptions.detailCellRendererParams.detailGridOptions\"\n      );\n      return;\n    }\n    const gridOptions = { ...this.params.detailGridOptions };\n    const autoHeight = this.gos.get(\"detailRowAutoHeight\");\n    if (autoHeight) {\n      gridOptions.domLayout = \"autoHeight\";\n    }\n    gridOptions.theme || (gridOptions.theme = this.gos.get(\"theme\"));\n    this.comp.setDetailGrid(gridOptions);\n  }\n  registerDetailWithMaster(api) {\n    const rowId = this.params.node.id;\n    const masterGridApi = this.params.api;\n    const gridInfo = {\n      id: rowId,\n      api\n    };\n    const rowNode = this.params.node;\n    if (masterGridApi.isDestroyed()) {\n      return;\n    }\n    masterGridApi.addDetailGridInfo(rowId, gridInfo);\n    rowNode.detailGridInfo = gridInfo;\n    this.addDestroyFunc(() => {\n      if (rowNode.detailGridInfo !== gridInfo) {\n        return;\n      }\n      if (!masterGridApi.isDestroyed()) {\n        masterGridApi.removeDetailGridInfo(rowId);\n      }\n      rowNode.detailGridInfo = null;\n    });\n  }\n  loadRowData() {\n    this.loadRowDataVersion++;\n    const versionThisCall = this.loadRowDataVersion;\n    if (this.params.detailGridOptions?.rowModelType === \"serverSide\") {\n      const node = this.params.node;\n      node.detailGridInfo?.api?.refreshServerSide({ purge: true });\n      return;\n    }\n    const userFunc = this.params.getDetailRowData;\n    if (!userFunc) {\n      _warnOnce30(\n        \"could not find getDetailRowData for master / detail, please set gridOptions.detailCellRendererParams.getDetailRowData\"\n      );\n      return;\n    }\n    const successCallback = (rowData) => {\n      const mostRecentCall = this.loadRowDataVersion === versionThisCall;\n      if (mostRecentCall) {\n        this.comp.setRowData(rowData);\n      }\n    };\n    const funcParams = {\n      node: this.params.node,\n      // we take data from node, rather than params.data\n      // as the data could have been updated with new instance\n      data: this.params.node.data,\n      successCallback,\n      context: this.gos.getGridCommonParams().context\n    };\n    userFunc(funcParams);\n  }\n  refresh() {\n    const GET_GRID_TO_REFRESH = false;\n    const GET_GRID_TO_DO_NOTHING = true;\n    switch (this.refreshStrategy) {\n      case \"nothing\":\n        return GET_GRID_TO_DO_NOTHING;\n      case \"everything\":\n        return GET_GRID_TO_REFRESH;\n    }\n    this.loadRowData();\n    return GET_GRID_TO_DO_NOTHING;\n  }\n};\nvar DetailFrameworkComponentWrapper = class {\n  constructor(parentWrapper) {\n    this.parentWrapper = parentWrapper;\n  }\n  wrap(frameworkComponent, methodList, optionalMethodList, componentType) {\n    return this.parentWrapper.wrap(frameworkComponent, methodList, optionalMethodList, componentType);\n  }\n};\nvar DetailCellRenderer = class extends Component51 {\n  constructor() {\n    super(...arguments);\n    this.eDetailGrid = RefPlaceholder30;\n  }\n  wireBeans(beans) {\n    this.context = beans.context;\n  }\n  init(params) {\n    this.params = params;\n    this.selectAndSetTemplate();\n    const compProxy = {\n      addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n      addOrRemoveDetailGridCssClass: (cssClassName, on) => this.eDetailGrid.classList.toggle(cssClassName, on),\n      setDetailGrid: (gridOptions) => this.setDetailGrid(gridOptions),\n      setRowData: (rowData) => this.setRowData(rowData),\n      getGui: () => this.eDetailGrid\n    };\n    this.ctrl = this.createManagedBean(new DetailCellRendererCtrl());\n    this.ctrl.init(compProxy, params);\n  }\n  refresh() {\n    return this.ctrl && this.ctrl.refresh();\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n  selectAndSetTemplate() {\n    if (this.params.pinned) {\n      this.setTemplate(\n        /* html*/\n        `<div class=\"ag-details-row\"></div>`\n      );\n      return;\n    }\n    const setDefaultTemplate = () => {\n      this.setTemplate(\n        /* html */\n        `<div class=\"ag-details-row\" role=\"gridcell\">\n                <div data-ref=\"eDetailGrid\" class=\"ag-details-grid\" role=\"presentation\"></div>\n            </div>`\n      );\n    };\n    if (_missing23(this.params.template)) {\n      setDefaultTemplate();\n    } else {\n      if (typeof this.params.template === \"string\") {\n        this.setTemplate(this.params.template, []);\n      } else if (typeof this.params.template === \"function\") {\n        const templateFunc = this.params.template;\n        const template = templateFunc(this.params);\n        this.setTemplate(template, []);\n      } else {\n        _warnOnce29(\"detailCellRendererParams.template should be function or string\");\n        setDefaultTemplate();\n      }\n    }\n    if (this.eDetailGrid == null) {\n      _warnOnce29(\n        'Reference to eDetailGrid was missing from the details template. Please add data-ref=\"eDetailGrid\" to the template.'\n      );\n    }\n  }\n  setDetailGrid(gridOptions) {\n    if (!this.eDetailGrid) {\n      return;\n    }\n    const parentFrameworkComponentWrapper = this.context.getBean(\"frameworkComponentWrapper\");\n    const frameworkComponentWrapper = new DetailFrameworkComponentWrapper(parentFrameworkComponentWrapper);\n    const frameworkOverrides = this.getFrameworkOverrides();\n    const api = createGrid(this.eDetailGrid, gridOptions, {\n      frameworkOverrides,\n      providedBeanInstances: {\n        frameworkComponentWrapper\n      },\n      modules: ModuleRegistry.__getGridRegisteredModules(this.params.api.getGridId())\n    });\n    this.detailApi = api;\n    this.ctrl.registerDetailWithMaster(api);\n    this.addDestroyFunc(() => {\n      api?.destroy();\n    });\n  }\n  setRowData(rowData) {\n    this.detailApi && this.detailApi.setGridOption(\"rowData\", rowData);\n  }\n};\nvar DetailGridApiService = class extends BeanStub27 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"detailGridApiService\";\n    this.detailGridInfoMap = {};\n  }\n  addDetailGridInfo(id, gridInfo) {\n    this.detailGridInfoMap[id] = gridInfo;\n  }\n  removeDetailGridInfo(id) {\n    delete this.detailGridInfoMap[id];\n  }\n  getDetailGridInfo(id) {\n    return this.detailGridInfoMap[id];\n  }\n  forEachDetailGridInfo(callback) {\n    let index = 0;\n    _iterateObject5(this.detailGridInfoMap, (id, gridInfo) => {\n      if (_exists14(gridInfo)) {\n        callback(gridInfo, index);\n        index++;\n      }\n    });\n  }\n  destroy() {\n    this.detailGridInfoMap = {};\n    super.destroy();\n  }\n};\nfunction addDetailGridInfo(beans, id, gridInfo) {\n  beans.detailGridApiService?.addDetailGridInfo(id, gridInfo);\n}\nfunction removeDetailGridInfo(beans, id) {\n  beans.detailGridApiService?.removeDetailGridInfo(id);\n}\nfunction getDetailGridInfo(beans, id) {\n  return beans.detailGridApiService?.getDetailGridInfo(id);\n}\nfunction forEachDetailGridInfo(beans, callback) {\n  beans.detailGridApiService?.forEachDetailGridInfo(callback);\n}\nvar VERSION11 = \"32.3.9\";\nvar MasterDetailCoreModule = _defineModule11({\n  version: VERSION11,\n  moduleName: `${ModuleNames12.MasterDetailModule}-core`,\n  userComponents: [\n    {\n      name: \"agGroupRowRenderer\",\n      classImp: GroupCellRenderer\n    },\n    {\n      name: \"agGroupCellRenderer\",\n      classImp: GroupCellRenderer\n    },\n    { name: \"agDetailCellRenderer\", classImp: DetailCellRenderer }\n  ],\n  controllers: [\n    { name: \"detailCellRenderer\", classImp: DetailCellRendererCtrl },\n    { name: \"groupCellRendererCtrl\", classImp: GroupCellRendererCtrl }\n  ],\n  dependantModules: [EnterpriseCoreModule]\n});\nvar MasterDetailApiModule = _defineModule11({\n  version: VERSION11,\n  moduleName: `${ModuleNames12.MasterDetailModule}-api`,\n  beans: [DetailGridApiService],\n  apiFunctions: {\n    addDetailGridInfo,\n    removeDetailGridInfo,\n    getDetailGridInfo,\n    forEachDetailGridInfo\n  },\n  dependantModules: [MasterDetailCoreModule]\n});\nvar MasterDetailModule = _defineModule11({\n  version: VERSION11,\n  moduleName: ModuleNames12.MasterDetailModule,\n  dependantModules: [MasterDetailCoreModule, MasterDetailApiModule]\n});\n\n// enterprise-modules/menu/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames52, _CommunityMenuApiModule, _defineModule as _defineModule12 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub28, ModuleNames as ModuleNames13, _createIconNoSpan as _createIconNoSpan15, _warnOnce as _warnOnce31 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub29 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub35, _isClientSideRowModel as _isClientSideRowModel4, _removeRepeatsFromArray } from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub45,\n  Component as Component56,\n  ModuleNames as ModuleNames24,\n  _exists as _exists15,\n  _isIOSUserAgent,\n  _isNothingFocused as _isNothingFocused4,\n  _missingOrEmpty as _missingOrEmpty4\n} from \"ag-grid-community\";\nimport {\n  AgPromise as AgPromise5,\n  BeanStub as BeanStub55,\n  Component as Component213,\n  FilterWrapperComp as FilterWrapperComp3,\n  ModuleNames as ModuleNames32,\n  RefPlaceholder as RefPlaceholder31,\n  _createIconNoSpan as _createIconNoSpan27,\n  _warnOnce as _warnOnce210,\n  isColumn as isColumn2\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub64, ModuleNames as ModuleNames42, _createIconNoSpan as _createIconNoSpan36, _escapeString as _escapeString8, _exists as _exists25, _warnOnce as _warnOnce35 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub74, _getActiveDomElement as _getActiveDomElement11, _isNothingFocused as _isNothingFocused22, _isVisible as _isVisible4, _last as _last11 } from \"ag-grid-community\";\nvar ChartMenuItemMapper = class _ChartMenuItemMapper extends BeanStub28 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"chartMenuItemMapper\";\n  }\n  wireBeans(beans) {\n    this.chartService = beans.chartService;\n  }\n  getChartItems(key) {\n    if (!this.chartService) {\n      this.gos.assertModuleRegistered(ModuleNames13.GridChartsModule, `the Context Menu key \"${key}\"`);\n      return void 0;\n    }\n    const builder = key === \"pivotChart\" ? new PivotMenuItemMapper(this.gos, this.chartService, this.localeService) : new RangeMenuItemMapper(this.gos, this.chartService, this.localeService);\n    const isEnterprise = this.chartService.isEnterprise();\n    let topLevelMenuItem = builder.getMenuItem();\n    if (topLevelMenuItem && topLevelMenuItem.subMenu && !isEnterprise) {\n      const filterEnterpriseItems = (m) => ({\n        ...m,\n        subMenu: m.subMenu?.filter((menu) => !menu._enterprise).map((menu) => filterEnterpriseItems(menu))\n      });\n      topLevelMenuItem = filterEnterpriseItems(topLevelMenuItem);\n    }\n    const chartGroupsDef = this.gos.get(\"chartToolPanelsDef\")?.settingsPanel?.chartGroupsDef;\n    if (chartGroupsDef) {\n      topLevelMenuItem = _ChartMenuItemMapper.filterAndOrderChartMenu(\n        topLevelMenuItem,\n        chartGroupsDef,\n        builder.getConfigLookup()\n      );\n    }\n    return this.cleanInternals(topLevelMenuItem);\n  }\n  // Remove our internal _key and _enterprise properties so this does not leak out of the class on the menu items.\n  cleanInternals(menuItem) {\n    if (!menuItem) {\n      return menuItem;\n    }\n    const removeKeys = (m) => {\n      delete m?._key;\n      delete m?._enterprise;\n      m?.subMenu?.forEach((s) => removeKeys(s));\n      return m;\n    };\n    return removeKeys(menuItem);\n  }\n  static buildLookup(menuItem) {\n    const itemLookup = {};\n    const addItem = (item) => {\n      itemLookup[item._key] = item;\n      if (item.subMenu) {\n        item.subMenu.forEach((s) => addItem(s));\n      }\n    };\n    addItem(menuItem);\n    return itemLookup;\n  }\n  /**\n   * Make the MenuItem match the charts provided and their ordering on the ChartGroupsDef config object as provided by the user.\n   */\n  static filterAndOrderChartMenu(topLevelMenuItem, chartGroupsDef, configLookup) {\n    const menuItemLookup = this.buildLookup(topLevelMenuItem);\n    const orderedAndFiltered = { ...topLevelMenuItem, subMenu: [] };\n    Object.entries(chartGroupsDef).forEach(([group, chartTypes]) => {\n      const chartConfigGroup = configLookup[group];\n      if (chartConfigGroup === null)\n        return;\n      if (chartConfigGroup == void 0) {\n        _warnOnce31(`invalid chartGroupsDef config '${group}'`);\n        return void 0;\n      }\n      const menuItem = menuItemLookup[chartConfigGroup._key];\n      if (menuItem) {\n        if (menuItem.subMenu) {\n          const subMenus = chartTypes.map((chartType) => {\n            const itemKey = chartConfigGroup[chartType];\n            if (itemKey == void 0) {\n              _warnOnce31(`invalid chartGroupsDef config '${group}.${chartType}'`);\n              return void 0;\n            }\n            return menuItemLookup[itemKey];\n          }).filter((s) => s !== void 0);\n          if (subMenus.length > 0) {\n            menuItem.subMenu = subMenus;\n            orderedAndFiltered.subMenu?.push(menuItem);\n          }\n        } else {\n          orderedAndFiltered.subMenu?.push(menuItem);\n        }\n      }\n    });\n    if (orderedAndFiltered.subMenu?.length == 0) {\n      return void 0;\n    }\n    return orderedAndFiltered;\n  }\n};\nvar PivotMenuItemMapper = class {\n  constructor(gos, chartService, localeService) {\n    this.gos = gos;\n    this.chartService = chartService;\n    this.localeService = localeService;\n  }\n  getMenuItem() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const getMenuItem = (localeKey, defaultText, chartType, key, enterprise = false) => {\n      return {\n        name: localeTextFunc(localeKey, defaultText),\n        action: () => this.chartService.createPivotChart({ chartType }),\n        _key: key,\n        _enterprise: enterprise\n      };\n    };\n    return {\n      name: localeTextFunc(\"pivotChart\", \"Pivot Chart\"),\n      _key: \"pivotChart\",\n      subMenu: [\n        {\n          _key: \"pivotColumnChart\",\n          name: localeTextFunc(\"columnChart\", \"Column\"),\n          subMenu: [\n            getMenuItem(\"groupedColumn\", \"Grouped&lrm;\", \"groupedColumn\", \"pivotGroupedColumn\"),\n            getMenuItem(\"stackedColumn\", \"Stacked&lrm;\", \"stackedColumn\", \"pivotStackedColumn\"),\n            getMenuItem(\n              \"normalizedColumn\",\n              \"100% Stacked&lrm;\",\n              \"normalizedColumn\",\n              \"pivotNormalizedColumn\"\n            )\n          ]\n        },\n        {\n          _key: \"pivotBarChart\",\n          name: localeTextFunc(\"barChart\", \"Bar\"),\n          subMenu: [\n            getMenuItem(\"groupedBar\", \"Grouped&lrm;\", \"groupedBar\", \"pivotGroupedBar\"),\n            getMenuItem(\"stackedBar\", \"Stacked&lrm;\", \"stackedBar\", \"pivotStackedBar\"),\n            getMenuItem(\"normalizedBar\", \"100% Stacked&lrm;\", \"normalizedBar\", \"pivotNormalizedBar\")\n          ]\n        },\n        {\n          _key: \"pivotPieChart\",\n          name: localeTextFunc(\"pieChart\", \"Pie\"),\n          subMenu: [\n            getMenuItem(\"pie\", \"Pie&lrm;\", \"pie\", \"pivotPie\"),\n            getMenuItem(\"donut\", \"Donut&lrm;\", \"donut\", \"pivotDonut\")\n          ]\n        },\n        getMenuItem(\"line\", \"Line&lrm;\", \"line\", \"pivotLineChart\"),\n        {\n          _key: \"pivotXYChart\",\n          name: localeTextFunc(\"xyChart\", \"X Y (Scatter)\"),\n          subMenu: [\n            getMenuItem(\"scatter\", \"Scatter&lrm;\", \"scatter\", \"pivotScatter\"),\n            getMenuItem(\"bubble\", \"Bubble&lrm;\", \"bubble\", \"pivotBubble\")\n          ]\n        },\n        {\n          _key: \"pivotAreaChart\",\n          name: localeTextFunc(\"areaChart\", \"Area\"),\n          subMenu: [\n            getMenuItem(\"area\", \"Area&lrm;\", \"area\", \"pivotArea\"),\n            getMenuItem(\"stackedArea\", \"Stacked&lrm;\", \"stackedArea\", \"pivotStackedArea\"),\n            getMenuItem(\"normalizedArea\", \"100% Stacked&lrm;\", \"normalizedArea\", \"pivotNormalizedArea\")\n          ]\n        },\n        {\n          _key: \"pivotStatisticalChart\",\n          _enterprise: false,\n          // histogram chart is available in both community and enterprise distributions\n          name: localeTextFunc(\"statisticalChart\", \"Statistical\"),\n          subMenu: [getMenuItem(\"histogramChart\", \"Histogram&lrm;\", \"histogram\", \"pivotHistogram\", false)]\n        },\n        {\n          _key: \"pivotHierarchicalChart\",\n          _enterprise: true,\n          name: localeTextFunc(\"hierarchicalChart\", \"Hierarchical\"),\n          subMenu: [\n            getMenuItem(\"treemapChart\", \"Treemap&lrm;\", \"treemap\", \"pivotTreemap\", true),\n            getMenuItem(\"sunburstChart\", \"Sunburst&lrm;\", \"sunburst\", \"pivotSunburst\", true)\n          ]\n        },\n        {\n          _key: \"pivotCombinationChart\",\n          name: localeTextFunc(\"combinationChart\", \"Combination\"),\n          subMenu: [\n            getMenuItem(\"columnLineCombo\", \"Column & Line&lrm;\", \"columnLineCombo\", \"pivotColumnLineCombo\"),\n            getMenuItem(\"AreaColumnCombo\", \"Area & Column&lrm;\", \"areaColumnCombo\", \"pivotAreaColumnCombo\")\n          ]\n        }\n      ],\n      icon: _createIconNoSpan15(\"chart\", this.gos, void 0)\n    };\n  }\n  getConfigLookup() {\n    return {\n      columnGroup: {\n        _key: \"pivotColumnChart\",\n        column: \"pivotGroupedColumn\",\n        stackedColumn: \"pivotStackedColumn\",\n        normalizedColumn: \"pivotNormalizedColumn\"\n      },\n      barGroup: {\n        _key: \"pivotBarChart\",\n        bar: \"pivotGroupedBar\",\n        stackedBar: \"pivotStackedBar\",\n        normalizedBar: \"pivotNormalizedBar\"\n      },\n      pieGroup: {\n        _key: \"pivotPieChart\",\n        pie: \"pivotPie\",\n        donut: \"pivotDonut\",\n        doughnut: \"pivotDonut\"\n      },\n      lineGroup: {\n        _key: \"pivotLineChart\",\n        line: \"pivotLineChart\"\n      },\n      scatterGroup: {\n        _key: \"pivotXYChart\",\n        bubble: \"pivotBubble\",\n        scatter: \"pivotScatter\"\n      },\n      areaGroup: {\n        _key: \"pivotAreaChart\",\n        area: \"pivotArea\",\n        stackedArea: \"pivotStackedArea\",\n        normalizedArea: \"pivotNormalizedArea\"\n      },\n      combinationGroup: {\n        _key: \"pivotCombinationChart\",\n        columnLineCombo: \"pivotColumnLineCombo\",\n        areaColumnCombo: \"pivotAreaColumnCombo\",\n        customCombo: null\n        // Not currently supported\n      },\n      hierarchicalGroup: {\n        _key: \"pivotHierarchicalChart\",\n        treemap: \"pivotTreemap\",\n        sunburst: \"pivotSunburst\"\n      },\n      statisticalGroup: {\n        _key: \"pivotStatisticalChart\",\n        histogram: \"pivotHistogram\",\n        // Some statistical charts do not currently support pivot mode\n        rangeBar: null,\n        rangeArea: null,\n        boxPlot: null\n      },\n      // Polar charts do not support pivot mode\n      polarGroup: null,\n      // Specialized charts do not currently support pivot mode\n      specializedGroup: null\n    };\n  }\n};\nvar RangeMenuItemMapper = class {\n  constructor(gos, chartService, localeService) {\n    this.gos = gos;\n    this.chartService = chartService;\n    this.localeService = localeService;\n  }\n  getMenuItem() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const getMenuItem = (localeKey, defaultText, chartType, key, enterprise = false) => {\n      return {\n        name: localeTextFunc(localeKey, defaultText),\n        action: () => this.chartService.createChartFromCurrentRange(chartType),\n        _key: key,\n        _enterprise: enterprise\n      };\n    };\n    return {\n      name: localeTextFunc(\"chartRange\", \"Chart Range\"),\n      _key: \"chartRange\",\n      subMenu: [\n        {\n          name: localeTextFunc(\"columnChart\", \"Column\"),\n          subMenu: [\n            getMenuItem(\"groupedColumn\", \"Grouped&lrm;\", \"groupedColumn\", \"rangeGroupedColumn\"),\n            getMenuItem(\"stackedColumn\", \"Stacked&lrm;\", \"stackedColumn\", \"rangeStackedColumn\"),\n            getMenuItem(\n              \"normalizedColumn\",\n              \"100% Stacked&lrm;\",\n              \"normalizedColumn\",\n              \"rangeNormalizedColumn\"\n            )\n          ],\n          _key: \"rangeColumnChart\"\n        },\n        {\n          name: localeTextFunc(\"barChart\", \"Bar\"),\n          subMenu: [\n            getMenuItem(\"groupedBar\", \"Grouped&lrm;\", \"groupedBar\", \"rangeGroupedBar\"),\n            getMenuItem(\"stackedBar\", \"Stacked&lrm;\", \"stackedBar\", \"rangeStackedBar\"),\n            getMenuItem(\"normalizedBar\", \"100% Stacked&lrm;\", \"normalizedBar\", \"rangeNormalizedBar\")\n          ],\n          _key: \"rangeBarChart\"\n        },\n        {\n          name: localeTextFunc(\"pieChart\", \"Pie\"),\n          subMenu: [\n            getMenuItem(\"pie\", \"Pie&lrm;\", \"pie\", \"rangePie\"),\n            getMenuItem(\"donut\", \"Donut&lrm;\", \"donut\", \"rangeDonut\")\n          ],\n          _key: \"rangePieChart\"\n        },\n        getMenuItem(\"line\", \"Line&lrm;\", \"line\", \"rangeLineChart\"),\n        {\n          name: localeTextFunc(\"xyChart\", \"X Y (Scatter)\"),\n          subMenu: [\n            getMenuItem(\"scatter\", \"Scatter&lrm;\", \"scatter\", \"rangeScatter\"),\n            getMenuItem(\"bubble\", \"Bubble&lrm;\", \"bubble\", \"rangeBubble\")\n          ],\n          _key: \"rangeXYChart\"\n        },\n        {\n          name: localeTextFunc(\"areaChart\", \"Area\"),\n          subMenu: [\n            getMenuItem(\"area\", \"Area&lrm;\", \"area\", \"rangeArea\"),\n            getMenuItem(\"stackedArea\", \"Stacked&lrm;\", \"stackedArea\", \"rangeStackedArea\"),\n            getMenuItem(\"normalizedArea\", \"100% Stacked&lrm;\", \"normalizedArea\", \"rangeNormalizedArea\")\n          ],\n          _key: \"rangeAreaChart\"\n        },\n        {\n          name: localeTextFunc(\"polarChart\", \"Polar\"),\n          subMenu: [\n            getMenuItem(\"radarLine\", \"Radar Line&lrm;\", \"radarLine\", \"rangeRadarLine\"),\n            getMenuItem(\"radarArea\", \"Radar Area&lrm;\", \"radarArea\", \"rangeRadarArea\"),\n            getMenuItem(\"nightingale\", \"Nightingale&lrm;\", \"nightingale\", \"rangeNightingale\"),\n            getMenuItem(\"radialColumn\", \"Radial Column&lrm;\", \"radialColumn\", \"rangeRadialColumn\"),\n            getMenuItem(\"radialBar\", \"Radial Bar&lrm;\", \"radialBar\", \"rangeRadialBar\")\n          ],\n          _key: \"rangePolarChart\",\n          _enterprise: true\n        },\n        {\n          name: localeTextFunc(\"statisticalChart\", \"Statistical\"),\n          subMenu: [\n            getMenuItem(\"boxPlot\", \"Box Plot&lrm;\", \"boxPlot\", \"rangeBoxPlot\", true),\n            getMenuItem(\"histogramChart\", \"Histogram&lrm;\", \"histogram\", \"rangeHistogram\", false),\n            getMenuItem(\"rangeBar\", \"Range Bar&lrm;\", \"rangeBar\", \"rangeRangeBar\", true),\n            getMenuItem(\"rangeArea\", \"Range Area&lrm;\", \"rangeArea\", \"rangeRangeArea\", true)\n          ],\n          _key: \"rangeStatisticalChart\",\n          _enterprise: false\n          // histogram chart is available in both community and enterprise distributions\n        },\n        {\n          name: localeTextFunc(\"hierarchicalChart\", \"Hierarchical\"),\n          subMenu: [\n            getMenuItem(\"treemap\", \"Treemap&lrm;\", \"treemap\", \"rangeTreemap\"),\n            getMenuItem(\"sunburst\", \"Sunburst&lrm;\", \"sunburst\", \"rangeSunburst\")\n          ],\n          _key: \"rangeHierarchicalChart\",\n          _enterprise: true\n        },\n        {\n          name: localeTextFunc(\"specializedChart\", \"Specialized\"),\n          subMenu: [\n            getMenuItem(\"heatmap\", \"Heatmap&lrm;\", \"heatmap\", \"rangeHeatmap\"),\n            getMenuItem(\"waterfall\", \"Waterfall&lrm;\", \"waterfall\", \"rangeWaterfall\")\n          ],\n          _key: \"rangeSpecializedChart\",\n          _enterprise: true\n        },\n        {\n          name: localeTextFunc(\"combinationChart\", \"Combination\"),\n          subMenu: [\n            getMenuItem(\"columnLineCombo\", \"Column & Line&lrm;\", \"columnLineCombo\", \"rangeColumnLineCombo\"),\n            getMenuItem(\"AreaColumnCombo\", \"Area & Column&lrm;\", \"areaColumnCombo\", \"rangeAreaColumnCombo\")\n          ],\n          _key: \"rangeCombinationChart\"\n        }\n      ],\n      icon: _createIconNoSpan15(\"chart\", this.gos, void 0)\n    };\n  }\n  getConfigLookup() {\n    return {\n      columnGroup: {\n        _key: \"rangeColumnChart\",\n        column: \"rangeGroupedColumn\",\n        stackedColumn: \"rangeStackedColumn\",\n        normalizedColumn: \"rangeNormalizedColumn\"\n      },\n      barGroup: {\n        _key: \"rangeBarChart\",\n        bar: \"rangeGroupedBar\",\n        stackedBar: \"rangeStackedBar\",\n        normalizedBar: \"rangeNormalizedBar\"\n      },\n      pieGroup: {\n        _key: \"rangePieChart\",\n        pie: \"rangePie\",\n        donut: \"rangeDonut\",\n        doughnut: \"rangeDonut\"\n      },\n      lineGroup: {\n        _key: \"rangeLineChart\",\n        line: \"rangeLineChart\"\n      },\n      scatterGroup: {\n        _key: \"rangeXYChart\",\n        bubble: \"rangeBubble\",\n        scatter: \"rangeScatter\"\n      },\n      areaGroup: {\n        _key: \"rangeAreaChart\",\n        area: \"rangeArea\",\n        stackedArea: \"rangeStackedArea\",\n        normalizedArea: \"rangeNormalizedArea\"\n      },\n      polarGroup: {\n        _key: \"rangePolarChart\",\n        radarLine: \"rangeRadarLine\",\n        radarArea: \"rangeRadarArea\",\n        nightingale: \"rangeNightingale\",\n        radialColumn: \"rangeRadialColumn\",\n        radialBar: \"rangeRadialBar\"\n      },\n      statisticalGroup: {\n        _key: \"rangeStatisticalChart\",\n        boxPlot: \"rangeBoxPlot\",\n        histogram: \"rangeHistogram\",\n        rangeBar: \"rangeRangeBar\",\n        rangeArea: \"rangeRangeArea\"\n      },\n      hierarchicalGroup: {\n        _key: \"rangeHierarchicalChart\",\n        treemap: \"rangeTreemap\",\n        sunburst: \"rangeSunburst\"\n      },\n      specializedGroup: {\n        _key: \"rangeSpecializedChart\",\n        heatmap: \"rangeHeatmap\",\n        waterfall: \"rangeWaterfall\"\n      },\n      combinationGroup: {\n        _key: \"rangeCombinationChart\",\n        columnLineCombo: \"rangeColumnLineCombo\",\n        areaColumnCombo: \"rangeAreaColumnCombo\",\n        customCombo: null\n        // Not currently supported\n      }\n    };\n  }\n};\nvar ColumnChooserFactory = class extends BeanStub29 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnChooserFactory\";\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.menuUtils = beans.menuUtils;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  createColumnSelectPanel(parent, column, draggable, params) {\n    const columnSelectPanel = parent.createManagedBean(new AgPrimaryCols());\n    const columnChooserParams = params ?? column?.getColDef().columnChooserParams ?? column?.getColDef().columnsMenuParams ?? {};\n    const {\n      contractColumnSelection,\n      suppressColumnExpandAll,\n      suppressColumnFilter,\n      suppressColumnSelectAll,\n      suppressSyncLayoutWithGrid,\n      columnLayout\n    } = columnChooserParams;\n    columnSelectPanel.init(\n      !!draggable,\n      this.gos.addGridCommonParams({\n        suppressColumnMove: false,\n        suppressValues: false,\n        suppressPivots: false,\n        suppressRowGroups: false,\n        suppressPivotMode: false,\n        contractColumnSelection: !!contractColumnSelection,\n        suppressColumnExpandAll: !!suppressColumnExpandAll,\n        suppressColumnFilter: !!suppressColumnFilter,\n        suppressColumnSelectAll: !!suppressColumnSelectAll,\n        suppressSyncLayoutWithGrid: !!columnLayout || !!suppressSyncLayoutWithGrid,\n        onStateUpdated: () => {\n        }\n      }),\n      \"columnMenu\"\n    );\n    if (columnLayout) {\n      columnSelectPanel.setColumnLayout(columnLayout);\n    }\n    return columnSelectPanel;\n  }\n  showColumnChooser({ column, chooserParams, eventSource }) {\n    this.hideActiveColumnChooser();\n    const columnSelectPanel = this.createColumnSelectPanel(this, column, true, chooserParams);\n    const translate = this.localeService.getLocaleTextFunc();\n    const columnIndex = this.visibleColsService.getAllCols().indexOf(column);\n    const headerPosition = column ? this.focusService.getFocusedHeader() : null;\n    this.activeColumnChooserDialog = this.createBean(\n      new AgDialog({\n        title: translate(\"chooseColumns\", \"Choose Columns\"),\n        component: columnSelectPanel,\n        width: 300,\n        height: 300,\n        resizable: true,\n        movable: true,\n        centered: true,\n        closable: true,\n        afterGuiAttached: () => {\n          this.focusService.findNextFocusableElement(columnSelectPanel.getGui())?.focus({\n            preventScroll: true\n          });\n          this.dispatchVisibleChangedEvent(true, column);\n        },\n        closedCallback: (event) => {\n          const eComp = this.activeColumnChooser.getGui();\n          this.destroyBean(this.activeColumnChooser);\n          this.activeColumnChooser = void 0;\n          this.activeColumnChooserDialog = void 0;\n          this.dispatchVisibleChangedEvent(false, column);\n          if (column) {\n            this.menuUtils.restoreFocusOnClose(\n              { column, headerPosition, columnIndex, eventSource },\n              eComp,\n              event,\n              true\n            );\n          }\n        },\n        postProcessPopupParams: {\n          type: \"columnChooser\",\n          column,\n          eventSource\n        }\n      })\n    );\n    this.activeColumnChooser = columnSelectPanel;\n  }\n  hideActiveColumnChooser() {\n    if (this.activeColumnChooserDialog) {\n      this.destroyBean(this.activeColumnChooserDialog);\n    }\n  }\n  dispatchVisibleChangedEvent(visible, column) {\n    this.eventService.dispatchEvent({\n      type: \"columnMenuVisibleChanged\",\n      visible,\n      switchingTab: false,\n      key: \"columnChooser\",\n      column: column ?? null\n    });\n  }\n};\nvar MENU_ITEM_SEPARATOR = \"separator\";\nvar ColumnMenuFactory = class extends BeanStub35 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"columnMenuFactory\";\n  }\n  wireBeans(beans) {\n    this.menuItemMapper = beans.menuItemMapper;\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n    this.menuService = beans.menuService;\n  }\n  createMenu(parent, menuItems, column, sourceElement) {\n    const menuList = parent.createManagedBean(\n      new AgMenuList(0, {\n        column: column ?? null,\n        node: null,\n        value: null\n      })\n    );\n    const menuItemsMapped = this.menuItemMapper.mapWithStockItems(\n      menuItems,\n      column ?? null,\n      sourceElement,\n      \"columnMenu\"\n    );\n    menuList.addMenuItems(menuItemsMapped);\n    return menuList;\n  }\n  // columnGroup to be added\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  getMenuItems(column, columnGroup) {\n    const defaultItems = this.getDefaultMenuOptions(column);\n    let result;\n    const columnMainMenuItems = column?.getColDef().mainMenuItems;\n    if (Array.isArray(columnMainMenuItems)) {\n      result = columnMainMenuItems;\n    } else if (typeof columnMainMenuItems === \"function\") {\n      result = columnMainMenuItems(\n        this.gos.addGridCommonParams({\n          column,\n          defaultItems\n        })\n      );\n    } else {\n      const userFunc = this.gos.getCallback(\"getMainMenuItems\");\n      if (userFunc && column) {\n        result = userFunc({\n          column,\n          defaultItems\n        });\n      } else {\n        result = defaultItems;\n      }\n    }\n    _removeRepeatsFromArray(result, MENU_ITEM_SEPARATOR);\n    return result;\n  }\n  getDefaultMenuOptions(column) {\n    const result = [];\n    const isLegacyMenuEnabled = this.menuService.isLegacyMenuEnabled();\n    if (!column) {\n      if (!isLegacyMenuEnabled) {\n        result.push(\"columnChooser\");\n      }\n      result.push(\"resetColumns\");\n      return result;\n    }\n    const allowPinning = !column.getColDef().lockPinned;\n    const rowGroupCount = this.funcColsService.getRowGroupColumns().length;\n    const doingGrouping = rowGroupCount > 0;\n    const allowValue = column.isAllowValue();\n    const allowRowGroup = column.isAllowRowGroup();\n    const isPrimary = column.isPrimary();\n    const pivotModeOn = this.columnModel.isPivotMode();\n    const isInMemoryRowModel = _isClientSideRowModel4(this.gos);\n    const usingTreeData = this.gos.get(\"treeData\");\n    const allowValueAgg = (\n      // if primary, then only allow aggValue if grouping and it's a value columns\n      isPrimary && doingGrouping && allowValue || // secondary columns can always have aggValue, as it means it's a pivot value column\n      !isPrimary\n    );\n    if (!isLegacyMenuEnabled && column.isSortable()) {\n      const sort = column.getSort();\n      if (sort !== \"asc\") {\n        result.push(\"sortAscending\");\n      }\n      if (sort !== \"desc\") {\n        result.push(\"sortDescending\");\n      }\n      if (sort) {\n        result.push(\"sortUnSort\");\n      }\n      result.push(MENU_ITEM_SEPARATOR);\n    }\n    if (this.menuService.isFilterMenuItemEnabled(column)) {\n      result.push(\"columnFilter\");\n      result.push(MENU_ITEM_SEPARATOR);\n    }\n    if (allowPinning) {\n      result.push(\"pinSubMenu\");\n    }\n    if (allowValueAgg) {\n      result.push(\"valueAggSubMenu\");\n    }\n    if (allowPinning || allowValueAgg) {\n      result.push(MENU_ITEM_SEPARATOR);\n    }\n    result.push(\"autoSizeThis\");\n    result.push(\"autoSizeAll\");\n    result.push(MENU_ITEM_SEPARATOR);\n    const showRowGroup = column.getColDef().showRowGroup;\n    if (showRowGroup) {\n      result.push(\"rowUnGroup\");\n    } else if (allowRowGroup && column.isPrimary()) {\n      if (column.isRowGroupActive()) {\n        const groupLocked = this.columnModel.isColGroupLocked(column);\n        if (!groupLocked) {\n          result.push(\"rowUnGroup\");\n        }\n      } else {\n        result.push(\"rowGroup\");\n      }\n    }\n    result.push(MENU_ITEM_SEPARATOR);\n    if (!isLegacyMenuEnabled) {\n      result.push(\"columnChooser\");\n    }\n    result.push(\"resetColumns\");\n    const allowExpandAndContract = isInMemoryRowModel && (usingTreeData || rowGroupCount > (pivotModeOn ? 1 : 0));\n    if (allowExpandAndContract) {\n      result.push(\"expandAll\");\n      result.push(\"contractAll\");\n    }\n    return result;\n  }\n};\nvar CSS_MENU = \"ag-menu\";\nvar CSS_CONTEXT_MENU_OPEN = \"ag-context-menu-open\";\nvar ContextMenuFactory = class extends BeanStub45 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"contextMenuFactory\";\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n    this.ctrlsService = beans.ctrlsService;\n    this.columnModel = beans.columnModel;\n    this.menuUtils = beans.menuUtils;\n    this.rangeService = beans.rangeService;\n    this.focusService = beans.focusService;\n  }\n  hideActiveMenu() {\n    this.destroyBean(this.activeMenu);\n  }\n  getMenuItems(node, column, value) {\n    const defaultMenuOptions = [];\n    if (_exists15(node) && this.gos.isModuleRegistered(ModuleNames24.ClipboardModule)) {\n      if (column) {\n        if (!this.gos.get(\"suppressCutToClipboard\")) {\n          defaultMenuOptions.push(\"cut\");\n        }\n        defaultMenuOptions.push(\"copy\", \"copyWithHeaders\", \"copyWithGroupHeaders\", \"paste\", \"separator\");\n      }\n    }\n    if (this.gos.get(\"enableCharts\") && this.gos.isModuleRegistered(ModuleNames24.GridChartsModule)) {\n      if (this.columnModel.isPivotMode()) {\n        defaultMenuOptions.push(\"pivotChart\");\n      }\n      if (this.rangeService && !this.rangeService.isEmpty()) {\n        defaultMenuOptions.push(\"chartRange\");\n      }\n    }\n    if (_exists15(node)) {\n      const csvModuleMissing = !this.gos.isModuleRegistered(ModuleNames24.CsvExportModule);\n      const excelModuleMissing = !this.gos.isModuleRegistered(ModuleNames24.ExcelExportModule);\n      const suppressExcel = this.gos.get(\"suppressExcelExport\") || excelModuleMissing;\n      const suppressCsv = this.gos.get(\"suppressCsvExport\") || csvModuleMissing;\n      const onIPad = _isIOSUserAgent();\n      const anyExport = !onIPad && (!suppressExcel || !suppressCsv);\n      if (anyExport) {\n        defaultMenuOptions.push(\"export\");\n      }\n    }\n    const defaultItems = defaultMenuOptions.length ? defaultMenuOptions : void 0;\n    const columnContextMenuItems = column?.getColDef().contextMenuItems;\n    if (Array.isArray(columnContextMenuItems)) {\n      return columnContextMenuItems;\n    }\n    if (typeof columnContextMenuItems === \"function\") {\n      return columnContextMenuItems(\n        this.gos.addGridCommonParams({\n          column,\n          node,\n          value,\n          defaultItems\n        })\n      );\n    }\n    const userFunc = this.gos.getCallback(\"getContextMenuItems\");\n    if (userFunc) {\n      return userFunc({ column, node, value, defaultItems });\n    }\n    return defaultMenuOptions;\n  }\n  onContextMenu(mouseEvent, touchEvent, rowNode, column, value, anchorToElement) {\n    this.menuUtils.onContextMenu(\n      mouseEvent,\n      touchEvent,\n      (eventOrTouch) => this.showMenu(rowNode, column, value, eventOrTouch, anchorToElement)\n    );\n  }\n  showMenu(node, column, value, mouseEvent, anchorToElement) {\n    const menuItems = this.getMenuItems(node, column, value);\n    const eGridBodyGui = this.ctrlsService.getGridBodyCtrl().getGui();\n    if (menuItems === void 0 || _missingOrEmpty4(menuItems)) {\n      return false;\n    }\n    const menu = new ContextMenu(menuItems, column, node, value);\n    this.createBean(menu);\n    const eMenuGui = menu.getGui();\n    if (!column) {\n      this.focusService.clearFocusedCell();\n    }\n    const positionParams = {\n      column,\n      rowNode: node,\n      type: \"contextMenu\",\n      mouseEvent,\n      ePopup: eMenuGui,\n      // move one pixel away so that accidentally double clicking\n      // won't show the browser's contextmenu\n      nudgeY: 1\n    };\n    const translate = this.localeService.getLocaleTextFunc();\n    const addPopupRes = this.popupService.addPopup({\n      modal: true,\n      eChild: eMenuGui,\n      closeOnEsc: true,\n      closedCallback: (e) => {\n        eGridBodyGui.classList.remove(CSS_CONTEXT_MENU_OPEN);\n        this.destroyBean(menu);\n        this.dispatchVisibleChangedEvent(false, e === void 0 ? \"api\" : \"ui\");\n      },\n      click: mouseEvent,\n      positionCallback: () => {\n        const isRtl = this.gos.get(\"enableRtl\");\n        this.popupService.positionPopupUnderMouseEvent({\n          ...positionParams,\n          nudgeX: isRtl ? (eMenuGui.offsetWidth + 1) * -1 : 1\n        });\n      },\n      // so when browser is scrolled down, or grid is scrolled, context menu stays with cell\n      anchorToElement,\n      ariaLabel: translate(\"ariaLabelContextMenu\", \"Context Menu\")\n    });\n    if (addPopupRes) {\n      eGridBodyGui.classList.add(CSS_CONTEXT_MENU_OPEN);\n      menu.afterGuiAttached({ container: \"contextMenu\", hidePopup: addPopupRes.hideFunc });\n    }\n    if (this.activeMenu) {\n      this.hideActiveMenu();\n    }\n    this.activeMenu = menu;\n    menu.addEventListener(\"destroyed\", () => {\n      if (this.activeMenu === menu) {\n        this.activeMenu = null;\n      }\n    });\n    if (addPopupRes) {\n      menu.addEventListener(\n        \"closeMenu\",\n        (e) => addPopupRes.hideFunc({\n          mouseEvent: e.mouseEvent ?? void 0,\n          keyboardEvent: e.keyboardEvent ?? void 0,\n          forceHide: true\n        })\n      );\n    }\n    const isApi = mouseEvent && mouseEvent instanceof MouseEvent && mouseEvent.type === \"mousedown\";\n    this.dispatchVisibleChangedEvent(true, isApi ? \"api\" : \"ui\");\n    return true;\n  }\n  dispatchVisibleChangedEvent(visible, source = \"ui\") {\n    this.eventService.dispatchEvent({\n      type: \"contextMenuVisibleChanged\",\n      visible,\n      source\n    });\n  }\n};\nvar ContextMenu = class extends Component56 {\n  constructor(menuItems, column, node, value) {\n    super(\n      /* html */\n      `<div class=\"${CSS_MENU}\" role=\"presentation\"></div>`\n    );\n    this.menuItems = menuItems;\n    this.column = column;\n    this.node = node;\n    this.value = value;\n    this.menuList = null;\n    this.focusedCell = null;\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.menuItemMapper = beans.menuItemMapper;\n    this.cellPositionUtils = beans.cellPositionUtils;\n  }\n  postConstruct() {\n    const menuList = this.createManagedBean(\n      new AgMenuList(0, {\n        column: this.column,\n        node: this.node,\n        value: this.value\n      })\n    );\n    const menuItemsMapped = this.menuItemMapper.mapWithStockItems(\n      this.menuItems,\n      null,\n      () => this.getGui(),\n      \"contextMenu\"\n    );\n    menuList.addMenuItems(menuItemsMapped);\n    this.appendChild(menuList);\n    this.menuList = menuList;\n    menuList.addEventListener(\"closeMenu\", (e) => this.dispatchLocalEvent(e));\n  }\n  afterGuiAttached(params) {\n    if (params.hidePopup) {\n      this.addDestroyFunc(params.hidePopup);\n    }\n    this.focusedCell = this.focusService.getFocusedCell();\n    if (this.menuList) {\n      this.focusService.focusInto(this.menuList.getGui());\n    }\n  }\n  restoreFocusedCell() {\n    const currentFocusedCell = this.focusService.getFocusedCell();\n    if (currentFocusedCell && this.focusedCell && this.cellPositionUtils.equals(currentFocusedCell, this.focusedCell)) {\n      const { rowIndex, rowPinned, column } = this.focusedCell;\n      if (_isNothingFocused4(this.gos)) {\n        this.focusService.setFocusedCell({\n          rowIndex,\n          column,\n          rowPinned,\n          forceBrowserFocus: true,\n          preventScrollOnBrowserFocus: !this.focusService.isKeyboardMode()\n        });\n      }\n    }\n  }\n  destroy() {\n    this.restoreFocusedCell();\n    super.destroy();\n  }\n};\nvar TAB_FILTER = \"filterMenuTab\";\nvar TAB_GENERAL = \"generalMenuTab\";\nvar TAB_COLUMNS = \"columnsMenuTab\";\nvar TABS_DEFAULT = [TAB_GENERAL, TAB_FILTER, TAB_COLUMNS];\nvar EnterpriseMenuFactory = class extends BeanStub55 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"enterpriseMenuFactory\";\n  }\n  wireBeans(beans) {\n    this.popupService = beans.popupService;\n    this.focusService = beans.focusService;\n    this.ctrlsService = beans.ctrlsService;\n    this.visibleColsService = beans.visibleColsService;\n    this.filterManager = beans.filterManager;\n    this.menuUtils = beans.menuUtils;\n    this.menuService = beans.menuService;\n    this.columnMenuFactory = beans.columnMenuFactory;\n  }\n  hideActiveMenu() {\n    this.destroyBean(this.activeMenu);\n  }\n  showMenuAfterMouseEvent(columnOrGroup, mouseEvent, containerType, filtersOnly) {\n    const { column, columnGroup } = this.splitColumnOrGroup(columnOrGroup);\n    const defaultTab = filtersOnly ? \"filterMenuTab\" : void 0;\n    this.showMenu(\n      column,\n      columnGroup,\n      (menu) => {\n        const ePopup = menu.getGui();\n        this.popupService.positionPopupUnderMouseEvent({\n          type: containerType,\n          column,\n          mouseEvent,\n          ePopup\n        });\n        if (defaultTab) {\n          menu.showTab?.(defaultTab);\n        }\n        this.dispatchVisibleChangedEvent(true, false, column, columnGroup, defaultTab);\n      },\n      containerType,\n      defaultTab,\n      void 0,\n      mouseEvent.target\n    );\n  }\n  splitColumnOrGroup(columnOrGroup) {\n    const colIsColumn = columnOrGroup && isColumn2(columnOrGroup);\n    const column = colIsColumn ? columnOrGroup : void 0;\n    const columnGroup = colIsColumn ? void 0 : columnOrGroup;\n    return { column, columnGroup };\n  }\n  showMenuAfterButtonClick(columnOrGroup, eventSource, containerType, filtersOnly) {\n    let multiplier = -1;\n    let alignSide = \"left\";\n    if (this.gos.get(\"enableRtl\")) {\n      multiplier = 1;\n      alignSide = \"right\";\n    }\n    const defaultTab = filtersOnly ? \"filterMenuTab\" : void 0;\n    const restrictToTabs = defaultTab ? [defaultTab] : void 0;\n    const isLegacyMenuEnabled = this.menuService.isLegacyMenuEnabled();\n    const nudgeX = (isLegacyMenuEnabled ? 9 : 4) * multiplier;\n    const nudgeY = isLegacyMenuEnabled ? -23 : 4;\n    const { column, columnGroup } = this.splitColumnOrGroup(columnOrGroup);\n    this.showMenu(\n      column,\n      columnGroup,\n      (menu) => {\n        const ePopup = menu.getGui();\n        this.popupService.positionPopupByComponent({\n          type: containerType,\n          column,\n          eventSource,\n          ePopup,\n          alignSide,\n          nudgeX,\n          nudgeY,\n          position: \"under\",\n          keepWithinBounds: true\n        });\n        if (defaultTab) {\n          menu.showTab?.(defaultTab);\n        }\n        this.dispatchVisibleChangedEvent(true, false, column, columnGroup, defaultTab);\n      },\n      containerType,\n      defaultTab,\n      restrictToTabs,\n      eventSource\n    );\n  }\n  showMenu(column, columnGroup, positionCallback, containerType, defaultTab, restrictToTabs, eventSource) {\n    const menuParams = this.getMenuParams(column, columnGroup, restrictToTabs, eventSource);\n    if (!menuParams) {\n      return;\n    }\n    const { menu, eMenuGui, anchorToElement, restoreFocusParams } = menuParams;\n    const closedFuncs = [];\n    closedFuncs.push((e) => {\n      const eComp = menu.getGui();\n      this.destroyBean(menu);\n      if (column) {\n        column.setMenuVisible(false, \"contextMenu\");\n        this.menuUtils.restoreFocusOnClose(restoreFocusParams, eComp, e);\n      }\n    });\n    const translate = this.localeService.getLocaleTextFunc();\n    this.popupService.addPopup({\n      modal: true,\n      eChild: eMenuGui,\n      closeOnEsc: true,\n      closedCallback: (e) => {\n        closedFuncs.forEach((f) => f(e));\n        this.dispatchVisibleChangedEvent(false, false, column, columnGroup, defaultTab);\n      },\n      afterGuiAttached: (params) => menu.afterGuiAttached(Object.assign({}, { container: containerType }, params)),\n      // if defaultTab is not present, positionCallback will be called\n      // after `showTabBasedOnPreviousSelection` is called.\n      positionCallback: defaultTab ? () => positionCallback(menu) : void 0,\n      ariaLabel: translate(\"ariaLabelColumnMenu\", \"Column Menu\")\n    });\n    if (!defaultTab) {\n      menu.showTabBasedOnPreviousSelection?.();\n      positionCallback(menu);\n    }\n    if (this.menuService.isColumnMenuAnchoringEnabled()) {\n      const stopAnchoringPromise = this.popupService.setPopupPositionRelatedToElement(eMenuGui, anchorToElement);\n      if (stopAnchoringPromise && column) {\n        this.addStopAnchoring(stopAnchoringPromise, column, closedFuncs);\n      }\n    }\n    menu.addEventListener(\"tabSelected\", (event) => {\n      this.dispatchVisibleChangedEvent(false, true, column);\n      this.lastSelectedTab = event.key;\n      this.dispatchVisibleChangedEvent(true, true, column);\n    });\n    column?.setMenuVisible(true, \"contextMenu\");\n    this.activeMenu = menu;\n    menu.addEventListener(\"destroyed\", () => {\n      if (this.activeMenu === menu) {\n        this.activeMenu = null;\n      }\n    });\n  }\n  addStopAnchoring(stopAnchoringPromise, column, closedFuncsArr) {\n    stopAnchoringPromise.then((stopAnchoringFunc) => {\n      column.addEventListener(\"leftChanged\", stopAnchoringFunc);\n      column.addEventListener(\"visibleChanged\", stopAnchoringFunc);\n      closedFuncsArr.push(() => {\n        column.removeEventListener(\"leftChanged\", stopAnchoringFunc);\n        column.removeEventListener(\"visibleChanged\", stopAnchoringFunc);\n      });\n    });\n  }\n  getMenuParams(column, columnGroup, restrictToTabs, eventSource) {\n    const restoreFocusParams = {\n      column,\n      headerPosition: this.focusService.getFocusedHeader(),\n      columnIndex: this.visibleColsService.getAllCols().indexOf(column),\n      eventSource\n    };\n    const menu = this.createMenu(column, columnGroup, restoreFocusParams, restrictToTabs, eventSource);\n    return menu ? {\n      menu,\n      eMenuGui: menu.getGui(),\n      anchorToElement: eventSource || this.ctrlsService.getGridBodyCtrl().getGui(),\n      restoreFocusParams\n    } : void 0;\n  }\n  createMenu(column, columnGroup, restoreFocusParams, restrictToTabs, eventSource) {\n    if (this.menuService.isLegacyMenuEnabled()) {\n      return this.createBean(\n        new TabbedColumnMenu(column, restoreFocusParams, this.lastSelectedTab, restrictToTabs, eventSource)\n      );\n    } else {\n      const menuItems = this.columnMenuFactory.getMenuItems(column, columnGroup);\n      return menuItems.length ? this.createBean(new ColumnContextMenu(menuItems, column, restoreFocusParams, eventSource)) : void 0;\n    }\n  }\n  dispatchVisibleChangedEvent(visible, switchingTab, column, columnGroup, defaultTab) {\n    this.eventService.dispatchEvent({\n      type: \"columnMenuVisibleChanged\",\n      visible,\n      switchingTab,\n      key: this.lastSelectedTab ?? defaultTab ?? (this.menuService.isLegacyMenuEnabled() ? TAB_GENERAL : \"columnMenu\"),\n      column: column ?? null,\n      columnGroup: columnGroup ?? null\n    });\n  }\n  isMenuEnabled(column) {\n    if (!this.menuService.isLegacyMenuEnabled()) {\n      return true;\n    }\n    const isFilterDisabled = !this.filterManager?.isFilterAllowed(column);\n    const tabs = column.getColDef().menuTabs ?? TABS_DEFAULT;\n    const numActiveTabs = isFilterDisabled && tabs.includes(TAB_FILTER) ? tabs.length - 1 : tabs.length;\n    return numActiveTabs > 0;\n  }\n  showMenuAfterContextMenuEvent(column, mouseEvent, touchEvent) {\n    this.menuUtils.onContextMenu(mouseEvent, touchEvent, (eventOrTouch) => {\n      this.showMenuAfterMouseEvent(column, eventOrTouch, \"columnMenu\");\n      return true;\n    });\n  }\n};\nvar TabbedColumnMenu = class extends BeanStub55 {\n  constructor(column, restoreFocusParams, initialSelection, restrictTo, sourceElement) {\n    super();\n    this.column = column;\n    this.restoreFocusParams = restoreFocusParams;\n    this.initialSelection = initialSelection;\n    this.restrictTo = restrictTo;\n    this.sourceElement = sourceElement;\n    this.tabFactories = {};\n    this.includeChecks = {};\n    this.tabFactories[TAB_GENERAL] = this.createMainPanel.bind(this);\n    this.tabFactories[TAB_FILTER] = this.createFilterPanel.bind(this);\n    this.tabFactories[TAB_COLUMNS] = this.createColumnsPanel.bind(this);\n    this.includeChecks[TAB_GENERAL] = () => true;\n    this.includeChecks[TAB_FILTER] = () => column ? !!this.filterManager?.isFilterAllowed(column) : false;\n    this.includeChecks[TAB_COLUMNS] = () => true;\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.columnChooserFactory = beans.columnChooserFactory;\n    this.columnMenuFactory = beans.columnMenuFactory;\n    this.menuUtils = beans.menuUtils;\n  }\n  postConstruct() {\n    const tabs = this.getTabsToCreate().map((name) => this.createTab(name));\n    this.tabbedLayout = new TabbedLayout({\n      items: tabs,\n      cssClass: \"ag-menu\",\n      onActiveItemClicked: this.onHidePopup.bind(this),\n      onItemClicked: this.onTabItemClicked.bind(this)\n    });\n    this.createBean(this.tabbedLayout);\n    if (this.mainMenuList) {\n      this.mainMenuList.setParentComponent(this.tabbedLayout);\n    }\n    this.addDestroyFunc(() => this.destroyBean(this.tabbedLayout));\n  }\n  getTabsToCreate() {\n    if (this.restrictTo) {\n      return this.restrictTo;\n    }\n    return (this.column?.getColDef().menuTabs ?? TABS_DEFAULT).filter((tabName) => this.isValidMenuTabItem(tabName)).filter((tabName) => this.isNotSuppressed(tabName)).filter((tabName) => this.isModuleLoaded(tabName));\n  }\n  isModuleLoaded(menuTabName) {\n    if (menuTabName === TAB_COLUMNS) {\n      return this.gos.isModuleRegistered(ModuleNames32.ColumnsToolPanelModule);\n    }\n    return true;\n  }\n  isValidMenuTabItem(menuTabName) {\n    let isValid = true;\n    let itemsToConsider = TABS_DEFAULT;\n    if (this.restrictTo != null) {\n      isValid = this.restrictTo.indexOf(menuTabName) > -1;\n      itemsToConsider = this.restrictTo;\n    }\n    isValid = isValid && TABS_DEFAULT.indexOf(menuTabName) > -1;\n    if (!isValid) {\n      _warnOnce210(\n        `Trying to render an invalid menu item '${menuTabName}'. Check that your 'menuTabs' contains one of [${itemsToConsider}]`\n      );\n    }\n    return isValid;\n  }\n  isNotSuppressed(menuTabName) {\n    return this.includeChecks[menuTabName]();\n  }\n  createTab(name) {\n    return this.tabFactories[name]();\n  }\n  showTabBasedOnPreviousSelection() {\n    this.showTab(this.initialSelection);\n  }\n  showTab(toShow) {\n    if (this.tabItemColumns && toShow === TAB_COLUMNS) {\n      this.tabbedLayout.showItem(this.tabItemColumns);\n    } else if (this.tabItemFilter && toShow === TAB_FILTER) {\n      this.tabbedLayout.showItem(this.tabItemFilter);\n    } else if (this.tabItemGeneral && toShow === TAB_GENERAL) {\n      this.tabbedLayout.showItem(this.tabItemGeneral);\n    } else {\n      this.tabbedLayout.showFirstItem();\n    }\n  }\n  onTabItemClicked(event) {\n    let key = null;\n    switch (event.item) {\n      case this.tabItemColumns:\n        key = TAB_COLUMNS;\n        break;\n      case this.tabItemFilter:\n        key = TAB_FILTER;\n        break;\n      case this.tabItemGeneral:\n        key = TAB_GENERAL;\n        break;\n    }\n    if (key) {\n      this.activateTab(key);\n    }\n  }\n  activateTab(tab) {\n    const ev = {\n      type: \"tabSelected\",\n      key: tab\n    };\n    this.dispatchLocalEvent(ev);\n  }\n  createMainPanel() {\n    this.mainMenuList = this.columnMenuFactory.createMenu(\n      this,\n      this.columnMenuFactory.getMenuItems(this.column),\n      this.column,\n      () => this.sourceElement ?? this.getGui()\n    );\n    this.mainMenuList.addEventListener(\"closeMenu\", this.onHidePopup.bind(this));\n    this.tabItemGeneral = {\n      title: _createIconNoSpan27(\"menu\", this.gos, this.column),\n      titleLabel: TAB_GENERAL.replace(\"MenuTab\", \"\"),\n      bodyPromise: AgPromise5.resolve(this.mainMenuList.getGui()),\n      name: TAB_GENERAL\n    };\n    return this.tabItemGeneral;\n  }\n  onHidePopup(event) {\n    this.menuUtils.closePopupAndRestoreFocusOnSelect(this.hidePopupFunc, this.restoreFocusParams, event);\n  }\n  createFilterPanel() {\n    const comp = this.column ? this.createBean(new FilterWrapperComp3(this.column, \"COLUMN_MENU\")) : null;\n    this.filterComp = comp;\n    if (!comp?.hasFilter()) {\n      throw new Error(\"AG Grid - Unable to instantiate filter\");\n    }\n    const afterAttachedCallback = (params) => comp.afterGuiAttached(params);\n    const afterDetachedCallback = () => comp.afterGuiDetached();\n    this.tabItemFilter = {\n      title: _createIconNoSpan27(\"filter\", this.gos, this.column),\n      titleLabel: TAB_FILTER.replace(\"MenuTab\", \"\"),\n      bodyPromise: AgPromise5.resolve(comp?.getGui()),\n      afterAttachedCallback,\n      afterDetachedCallback,\n      name: TAB_FILTER\n    };\n    return this.tabItemFilter;\n  }\n  createColumnsPanel() {\n    const eWrapperDiv = document.createElement(\"div\");\n    eWrapperDiv.classList.add(\"ag-menu-column-select-wrapper\");\n    const columnSelectPanel = this.columnChooserFactory.createColumnSelectPanel(this, this.column);\n    const columnSelectPanelGui = columnSelectPanel.getGui();\n    columnSelectPanelGui.classList.add(\"ag-menu-column-select\");\n    eWrapperDiv.appendChild(columnSelectPanelGui);\n    this.tabItemColumns = {\n      title: _createIconNoSpan27(\"columns\", this.gos, this.column),\n      //createColumnsIcon(),\n      titleLabel: TAB_COLUMNS.replace(\"MenuTab\", \"\"),\n      bodyPromise: AgPromise5.resolve(eWrapperDiv),\n      name: TAB_COLUMNS\n    };\n    return this.tabItemColumns;\n  }\n  afterGuiAttached(params) {\n    const { container, hidePopup } = params;\n    this.tabbedLayout.setAfterAttachedParams({ container, hidePopup });\n    if (hidePopup) {\n      this.hidePopupFunc = hidePopup;\n      this.addDestroyFunc(hidePopup);\n    }\n  }\n  getGui() {\n    return this.tabbedLayout.getGui();\n  }\n  destroy() {\n    super.destroy();\n    this.destroyBean(this.filterComp);\n  }\n};\nvar ColumnContextMenu = class extends Component213 {\n  constructor(menuItems, column, restoreFocusParams, sourceElement) {\n    super(\n      /* html */\n      `\n            <div data-ref=\"eColumnMenu\" role=\"presentation\" class=\"ag-menu ag-column-menu\"></div>\n        `\n    );\n    this.menuItems = menuItems;\n    this.column = column;\n    this.restoreFocusParams = restoreFocusParams;\n    this.sourceElement = sourceElement;\n    this.eColumnMenu = RefPlaceholder31;\n  }\n  wireBeans(beans) {\n    this.columnMenuFactory = beans.columnMenuFactory;\n    this.menuUtils = beans.menuUtils;\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    this.mainMenuList = this.columnMenuFactory.createMenu(\n      this,\n      this.menuItems,\n      this.column,\n      () => this.sourceElement ?? this.getGui()\n    );\n    this.mainMenuList.addEventListener(\"closeMenu\", this.onHidePopup.bind(this));\n    this.eColumnMenu.appendChild(this.mainMenuList.getGui());\n  }\n  onHidePopup(event) {\n    this.menuUtils.closePopupAndRestoreFocusOnSelect(this.hidePopupFunc, this.restoreFocusParams, event);\n  }\n  afterGuiAttached({ hidePopup }) {\n    if (hidePopup) {\n      this.hidePopupFunc = hidePopup;\n      this.addDestroyFunc(hidePopup);\n    }\n    this.focusService.focusInto(this.mainMenuList.getGui());\n  }\n};\nfunction showContextMenu(beans, params) {\n  const { rowNode, column, value, x, y } = params || {};\n  let { x: clientX, y: clientY } = beans.menuService.getContextMenuPosition(rowNode, column);\n  if (x != null) {\n    clientX = x;\n  }\n  if (y != null) {\n    clientY = y;\n  }\n  beans.menuService.showContextMenu({\n    mouseEvent: new MouseEvent(\"mousedown\", { clientX, clientY }),\n    rowNode,\n    column,\n    value\n  });\n}\nfunction showColumnChooser(beans, params) {\n  beans.menuService.showColumnChooser({ chooserParams: params });\n}\nfunction hideColumnChooser(beans) {\n  beans.menuService.hideColumnChooser();\n}\nvar MenuItemMapper = class extends BeanStub64 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"menuItemMapper\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.columnApplyStateService = beans.columnApplyStateService;\n    this.funcColsService = beans.funcColsService;\n    this.focusService = beans.focusService;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.chartMenuItemMapper = beans.chartMenuItemMapper;\n    this.menuService = beans.menuService;\n    this.sortController = beans.sortController;\n    this.columnAutosizeService = beans.columnAutosizeService;\n    this.expansionService = beans.expansionService;\n    this.clipboardService = beans.clipboardService;\n    this.aggFuncService = beans.aggFuncService;\n    this.csvCreator = beans.csvCreator;\n    this.excelCreator = beans.excelCreator;\n  }\n  mapWithStockItems(originalList, column, sourceElement, source) {\n    if (!originalList) {\n      return [];\n    }\n    const resultList = [];\n    originalList.forEach((menuItemOrString) => {\n      let result;\n      if (typeof menuItemOrString === \"string\") {\n        result = this.getStockMenuItem(menuItemOrString, column, sourceElement, source);\n      } else {\n        result = { ...menuItemOrString };\n      }\n      if (!result) {\n        return;\n      }\n      const resultDef = result;\n      const { subMenu } = resultDef;\n      if (subMenu && subMenu instanceof Array) {\n        resultDef.subMenu = this.mapWithStockItems(subMenu, column, sourceElement, source);\n      }\n      if (result != null) {\n        resultList.push(result);\n      }\n    });\n    return resultList;\n  }\n  getStockMenuItem(key, column, sourceElement, source) {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const skipHeaderOnAutoSize = this.gos.get(\"skipHeaderOnAutoSize\");\n    switch (key) {\n      case \"pinSubMenu\":\n        return {\n          name: localeTextFunc(\"pinColumn\", \"Pin Column\"),\n          icon: _createIconNoSpan36(\"menuPin\", this.gos, null),\n          subMenu: [\"clearPinned\", \"pinLeft\", \"pinRight\"]\n        };\n      case \"pinLeft\":\n        return {\n          name: localeTextFunc(\"pinLeft\", \"Pin Left\"),\n          action: () => this.columnModel.setColsPinned([column], \"left\", source),\n          checked: !!column && column.isPinnedLeft()\n        };\n      case \"pinRight\":\n        return {\n          name: localeTextFunc(\"pinRight\", \"Pin Right\"),\n          action: () => this.columnModel.setColsPinned([column], \"right\", source),\n          checked: !!column && column.isPinnedRight()\n        };\n      case \"clearPinned\":\n        return {\n          name: localeTextFunc(\"noPin\", \"No Pin\"),\n          action: () => this.columnModel.setColsPinned([column], null, source),\n          checked: !!column && !column.isPinned()\n        };\n      case \"valueAggSubMenu\":\n        if (this.gos.assertModuleRegistered(ModuleNames42.RowGroupingModule, \"Aggregation from Menu\")) {\n          if (!column?.isPrimary() && !column?.getColDef().pivotValueColumn) {\n            return null;\n          }\n          return {\n            name: localeTextFunc(\"valueAggregation\", \"Value Aggregation\"),\n            icon: _createIconNoSpan36(\"menuValue\", this.gos, null),\n            subMenu: this.createAggregationSubMenu(column, this.aggFuncService),\n            disabled: this.gos.get(\"functionsReadOnly\")\n          };\n        } else {\n          return null;\n        }\n      case \"autoSizeThis\":\n        return {\n          name: localeTextFunc(\"autosizeThisColumn\", \"Autosize This Column\"),\n          action: () => this.columnAutosizeService.autoSizeColumn(column, source, skipHeaderOnAutoSize)\n        };\n      case \"autoSizeAll\":\n        return {\n          name: localeTextFunc(\"autosizeAllColumns\", \"Autosize All Columns\"),\n          action: () => this.columnAutosizeService.autoSizeAllColumns(source, skipHeaderOnAutoSize)\n        };\n      case \"rowGroup\":\n        return {\n          name: localeTextFunc(\"groupBy\", \"Group by\") + \" \" + _escapeString8(this.columnNameService.getDisplayNameForColumn(column, \"header\")),\n          disabled: this.gos.get(\"functionsReadOnly\") || column?.isRowGroupActive() || !column?.getColDef().enableRowGroup,\n          action: () => this.funcColsService.addRowGroupColumns([column], source),\n          icon: _createIconNoSpan36(\"menuAddRowGroup\", this.gos, null)\n        };\n      case \"rowUnGroup\": {\n        const icon = _createIconNoSpan36(\"menuRemoveRowGroup\", this.gos, null);\n        const showRowGroup = column?.getColDef().showRowGroup;\n        const lockedGroups = this.gos.get(\"groupLockGroupColumns\");\n        if (showRowGroup === true) {\n          return {\n            name: localeTextFunc(\"ungroupAll\", \"Un-Group All\"),\n            disabled: this.gos.get(\"functionsReadOnly\") || lockedGroups === -1 || lockedGroups >= this.funcColsService.getRowGroupColumns().length,\n            action: () => this.funcColsService.setRowGroupColumns(\n              this.funcColsService.getRowGroupColumns().slice(0, lockedGroups),\n              source\n            ),\n            icon\n          };\n        }\n        if (typeof showRowGroup === \"string\") {\n          const underlyingColumn = this.columnModel.getColDefCol(showRowGroup);\n          const ungroupByName = underlyingColumn != null ? _escapeString8(this.columnNameService.getDisplayNameForColumn(underlyingColumn, \"header\")) : showRowGroup;\n          return {\n            name: localeTextFunc(\"ungroupBy\", \"Un-Group by\") + \" \" + ungroupByName,\n            disabled: this.gos.get(\"functionsReadOnly\") || underlyingColumn != null && this.columnModel.isColGroupLocked(underlyingColumn),\n            action: () => this.funcColsService.removeRowGroupColumns([showRowGroup], source),\n            icon\n          };\n        }\n        return {\n          name: localeTextFunc(\"ungroupBy\", \"Un-Group by\") + \" \" + _escapeString8(this.columnNameService.getDisplayNameForColumn(column, \"header\")),\n          disabled: this.gos.get(\"functionsReadOnly\") || !column?.isRowGroupActive() || !column?.getColDef().enableRowGroup || this.columnModel.isColGroupLocked(column),\n          action: () => this.funcColsService.removeRowGroupColumns([column], source),\n          icon\n        };\n      }\n      case \"resetColumns\":\n        return {\n          name: localeTextFunc(\"resetColumns\", \"Reset Columns\"),\n          action: () => this.columnApplyStateService.resetColumnState(source)\n        };\n      case \"expandAll\":\n        return {\n          name: localeTextFunc(\"expandAll\", \"Expand All Row Groups\"),\n          action: () => this.expansionService.expandAll(true)\n        };\n      case \"contractAll\":\n        return {\n          name: localeTextFunc(\"collapseAll\", \"Collapse All Row Groups\"),\n          action: () => this.expansionService.expandAll(false)\n        };\n      case \"copy\":\n        if (this.gos.assertModuleRegistered(ModuleNames42.ClipboardModule, \"Copy from Menu\")) {\n          return {\n            name: localeTextFunc(\"copy\", \"Copy\"),\n            shortcut: localeTextFunc(\"ctrlC\", \"Ctrl+C\"),\n            icon: _createIconNoSpan36(\"clipboardCopy\", this.gos, null),\n            action: () => this.clipboardService.copyToClipboard()\n          };\n        } else {\n          return null;\n        }\n      case \"copyWithHeaders\":\n        if (this.gos.assertModuleRegistered(ModuleNames42.ClipboardModule, \"Copy with Headers from Menu\")) {\n          return {\n            name: localeTextFunc(\"copyWithHeaders\", \"Copy with Headers\"),\n            // shortcut: localeTextFunc('ctrlC','Ctrl+C'),\n            icon: _createIconNoSpan36(\"clipboardCopy\", this.gos, null),\n            action: () => this.clipboardService.copyToClipboard({ includeHeaders: true })\n          };\n        } else {\n          return null;\n        }\n      case \"copyWithGroupHeaders\":\n        if (this.gos.assertModuleRegistered(ModuleNames42.ClipboardModule, \"Copy with Group Headers from Menu\")) {\n          return {\n            name: localeTextFunc(\"copyWithGroupHeaders\", \"Copy with Group Headers\"),\n            // shortcut: localeTextFunc('ctrlC','Ctrl+C'),\n            icon: _createIconNoSpan36(\"clipboardCopy\", this.gos, null),\n            action: () => this.clipboardService.copyToClipboard({ includeHeaders: true, includeGroupHeaders: true })\n          };\n        } else {\n          return null;\n        }\n      case \"cut\":\n        if (this.gos.assertModuleRegistered(ModuleNames42.ClipboardModule, \"Cut from Menu\")) {\n          const focusedCell = this.focusService.getFocusedCell();\n          const rowNode = focusedCell ? this.rowPositionUtils.getRowNode(focusedCell) : null;\n          const isEditable = rowNode ? focusedCell?.column.isCellEditable(rowNode) : false;\n          return {\n            name: localeTextFunc(\"cut\", \"Cut\"),\n            shortcut: localeTextFunc(\"ctrlX\", \"Ctrl+X\"),\n            icon: _createIconNoSpan36(\"clipboardCut\", this.gos, null),\n            disabled: !isEditable || this.gos.get(\"suppressCutToClipboard\"),\n            action: () => this.clipboardService.cutToClipboard(void 0, \"contextMenu\")\n          };\n        } else {\n          return null;\n        }\n      case \"paste\":\n        if (this.gos.assertModuleRegistered(ModuleNames42.ClipboardModule, \"Paste from Clipboard\")) {\n          return {\n            name: localeTextFunc(\"paste\", \"Paste\"),\n            shortcut: localeTextFunc(\"ctrlV\", \"Ctrl+V\"),\n            disabled: true,\n            icon: _createIconNoSpan36(\"clipboardPaste\", this.gos, null),\n            action: () => this.clipboardService.pasteFromClipboard()\n          };\n        } else {\n          return null;\n        }\n      case \"export\": {\n        const exportSubMenuItems = [];\n        const csvModuleLoaded = this.gos.isModuleRegistered(ModuleNames42.CsvExportModule);\n        const excelModuleLoaded = this.gos.isModuleRegistered(ModuleNames42.ExcelExportModule);\n        if (!this.gos.get(\"suppressCsvExport\") && csvModuleLoaded) {\n          exportSubMenuItems.push(\"csvExport\");\n        }\n        if (!this.gos.get(\"suppressExcelExport\") && excelModuleLoaded) {\n          exportSubMenuItems.push(\"excelExport\");\n        }\n        return {\n          name: localeTextFunc(\"export\", \"Export\"),\n          subMenu: exportSubMenuItems,\n          icon: _createIconNoSpan36(\"save\", this.gos, null)\n        };\n      }\n      case \"csvExport\":\n        return {\n          name: localeTextFunc(\"csvExport\", \"CSV Export\"),\n          icon: _createIconNoSpan36(\"csvExport\", this.gos, null),\n          action: () => this.csvCreator?.exportDataAsCsv()\n        };\n      case \"excelExport\":\n        return {\n          name: localeTextFunc(\"excelExport\", \"Excel Export\"),\n          icon: _createIconNoSpan36(\"excelExport\", this.gos, null),\n          action: () => this.excelCreator?.exportDataAsExcel()\n        };\n      case \"separator\":\n        return \"separator\";\n      case \"pivotChart\":\n      case \"chartRange\":\n        return this.chartMenuItemMapper.getChartItems(key) ?? null;\n      case \"columnFilter\":\n        if (column) {\n          return {\n            name: localeTextFunc(\"columnFilter\", \"Column Filter\"),\n            icon: _createIconNoSpan36(\"filter\", this.gos, null),\n            action: () => this.menuService.showFilterMenu({\n              column,\n              buttonElement: sourceElement(),\n              containerType: \"columnFilter\",\n              positionBy: \"button\"\n            })\n          };\n        } else {\n          return null;\n        }\n      case \"columnChooser\":\n        if (this.gos.isModuleRegistered(ModuleNames42.ColumnsToolPanelModule)) {\n          return {\n            name: localeTextFunc(\"columnChooser\", \"Choose Columns\"),\n            icon: _createIconNoSpan36(\"columns\", this.gos, null),\n            action: () => this.menuService.showColumnChooser({ column, eventSource: sourceElement() })\n          };\n        } else {\n          return null;\n        }\n      case \"sortAscending\":\n        return {\n          name: localeTextFunc(\"sortAscending\", \"Sort Ascending\"),\n          icon: _createIconNoSpan36(\"sortAscending\", this.gos, null),\n          action: () => this.sortController.setSortForColumn(column, \"asc\", false, source)\n        };\n      case \"sortDescending\":\n        return {\n          name: localeTextFunc(\"sortDescending\", \"Sort Descending\"),\n          icon: _createIconNoSpan36(\"sortDescending\", this.gos, null),\n          action: () => this.sortController.setSortForColumn(column, \"desc\", false, source)\n        };\n      case \"sortUnSort\":\n        return {\n          name: localeTextFunc(\"sortUnSort\", \"Clear Sort\"),\n          icon: _createIconNoSpan36(\"sortUnSort\", this.gos, null),\n          action: () => this.sortController.setSortForColumn(column, null, false, source)\n        };\n      default: {\n        _warnOnce35(`unknown menu item type ${key}`);\n        return null;\n      }\n    }\n  }\n  createAggregationSubMenu(column, aggFuncService) {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    let columnToUse;\n    if (column.isPrimary()) {\n      columnToUse = column;\n    } else {\n      const pivotValueColumn = column.getColDef().pivotValueColumn;\n      columnToUse = _exists25(pivotValueColumn) ? pivotValueColumn : void 0;\n    }\n    const result = [];\n    if (columnToUse) {\n      const columnIsAlreadyAggValue = columnToUse.isValueActive();\n      const funcNames = aggFuncService.getFuncNames(columnToUse);\n      result.push({\n        name: localeTextFunc(\"noAggregation\", \"None\"),\n        action: () => {\n          this.funcColsService.removeValueColumns([columnToUse], \"contextMenu\");\n          this.funcColsService.setColumnAggFunc(columnToUse, void 0, \"contextMenu\");\n        },\n        checked: !columnIsAlreadyAggValue\n      });\n      funcNames.forEach((funcName) => {\n        result.push({\n          name: localeTextFunc(funcName, aggFuncService.getDefaultFuncLabel(funcName)),\n          action: () => {\n            this.funcColsService.setColumnAggFunc(columnToUse, funcName, \"contextMenu\");\n            this.funcColsService.addValueColumns([columnToUse], \"contextMenu\");\n          },\n          checked: columnIsAlreadyAggValue && columnToUse.getAggFunc() === funcName\n        });\n      });\n    }\n    return result;\n  }\n};\nvar MenuUtils = class extends BeanStub74 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"menuUtils\";\n  }\n  wireBeans(beans) {\n    this.focusService = beans.focusService;\n    this.headerNavigationService = beans.headerNavigationService;\n    this.visibleColsService = beans.visibleColsService;\n  }\n  restoreFocusOnClose(restoreFocusParams, eComp, e, restoreIfMouseEvent) {\n    const { eventSource } = restoreFocusParams;\n    const isKeyboardEvent = e instanceof KeyboardEvent;\n    if (!restoreIfMouseEvent && !isKeyboardEvent || !eventSource) {\n      return;\n    }\n    const activeEl = _getActiveDomElement11(this.gos);\n    if (\n      // focus is outside of comp\n      !eComp.contains(activeEl) && // something else has focus\n      !_isNothingFocused22(this.gos)\n    ) {\n      return;\n    }\n    this.focusHeaderCell(restoreFocusParams);\n  }\n  closePopupAndRestoreFocusOnSelect(hidePopupFunc, restoreFocusParams, event) {\n    let keyboardEvent;\n    if (event && event.keyboardEvent) {\n      keyboardEvent = event.keyboardEvent;\n    }\n    hidePopupFunc(keyboardEvent && { keyboardEvent });\n    const focusedCell = this.focusService.getFocusedCell();\n    if (_isNothingFocused22(this.gos)) {\n      if (focusedCell) {\n        const { rowIndex, rowPinned, column } = focusedCell;\n        this.focusService.setFocusedCell({\n          rowIndex,\n          column,\n          rowPinned,\n          forceBrowserFocus: true,\n          preventScrollOnBrowserFocus: true\n        });\n      } else {\n        this.focusHeaderCell(restoreFocusParams);\n      }\n    }\n  }\n  onContextMenu(mouseEvent, touchEvent, showMenuCallback) {\n    if (!this.gos.get(\"allowContextMenuWithControlKey\")) {\n      if (mouseEvent && (mouseEvent.ctrlKey || mouseEvent.metaKey)) {\n        return;\n      }\n    }\n    if (mouseEvent) {\n      this.blockMiddleClickScrollsIfNeeded(mouseEvent);\n    }\n    if (this.gos.get(\"suppressContextMenu\")) {\n      return;\n    }\n    const eventOrTouch = mouseEvent ?? touchEvent.touches[0];\n    if (showMenuCallback(eventOrTouch)) {\n      const event = mouseEvent ?? touchEvent;\n      if (event && event.cancelable) {\n        event.preventDefault();\n      }\n    }\n  }\n  // make this async for react\n  async focusHeaderCell(restoreFocusParams) {\n    const { column, columnIndex, headerPosition, eventSource } = restoreFocusParams;\n    const isColumnStillVisible = await this.visibleColsService.getAllCols().some((col) => col === column);\n    if (column && !column.isAlive()) {\n      return;\n    }\n    if (isColumnStillVisible && eventSource && _isVisible4(eventSource)) {\n      const focusableEl = this.focusService.findTabbableParent(eventSource);\n      if (focusableEl) {\n        if (column) {\n          this.headerNavigationService.scrollToColumn(column);\n        }\n        focusableEl.focus();\n      }\n    } else if (headerPosition && columnIndex !== -1) {\n      const allColumns = this.visibleColsService.getAllCols();\n      const columnToFocus = allColumns[columnIndex] || _last11(allColumns);\n      if (columnToFocus) {\n        this.focusService.focusHeaderPosition({\n          headerPosition: {\n            headerRowIndex: headerPosition.headerRowIndex,\n            column: columnToFocus\n          }\n        });\n      }\n    }\n  }\n  blockMiddleClickScrollsIfNeeded(mouseEvent) {\n    if (this.gos.get(\"suppressMiddleClickScrolls\") && mouseEvent.which === 2) {\n      mouseEvent.preventDefault();\n    }\n  }\n};\nvar VERSION12 = \"32.3.9\";\nvar MenuCoreModule = _defineModule12({\n  version: VERSION12,\n  moduleName: `${ModuleNames52.MenuModule}-core`,\n  beans: [\n    EnterpriseMenuFactory,\n    ContextMenuFactory,\n    MenuItemMapper,\n    ChartMenuItemMapper,\n    ColumnChooserFactory,\n    ColumnMenuFactory,\n    MenuUtils\n  ],\n  dependantModules: [EnterpriseCoreModule],\n  userComponents: [\n    {\n      name: \"agMenuItem\",\n      classImp: AgMenuItemRenderer\n    }\n  ]\n});\nvar MenuApiModule = _defineModule12({\n  version: VERSION12,\n  moduleName: `${ModuleNames52.MenuModule}-api`,\n  apiFunctions: {\n    showContextMenu,\n    showColumnChooser,\n    hideColumnChooser\n  },\n  dependantModules: [MenuCoreModule, _CommunityMenuApiModule]\n});\nvar MenuModule = _defineModule12({\n  version: VERSION12,\n  moduleName: ModuleNames52.MenuModule,\n  dependantModules: [MenuCoreModule, MenuApiModule]\n});\n\n// enterprise-modules/multi-filter/dist/package/main.esm.mjs\nimport {\n  ModuleNames as ModuleNames14,\n  _ColumnFilterModule as _ColumnFilterModule3,\n  _ReadOnlyFloatingFilterModule,\n  _defineModule as _defineModule13\n} from \"ag-grid-community\";\nimport {\n  AgPromise as AgPromise6,\n  KeyCode as KeyCode20,\n  ProvidedFilter,\n  TabGuardComp as TabGuardComp8,\n  _forEachReverse,\n  _getActiveDomElement as _getActiveDomElement12,\n  _isNothingFocused as _isNothingFocused5,\n  _loadTemplate as _loadTemplate6,\n  _removeFromArray as _removeFromArray3\n} from \"ag-grid-community\";\nimport {\n  AgPromise as AgPromise23,\n  Component as Component57,\n  _clearElement as _clearElement11,\n  _mergeDeep as _mergeDeep5,\n  _setDisplayed as _setDisplayed12,\n  getDefaultFloatingFilterType\n} from \"ag-grid-community\";\nvar MultiFilter = class _MultiFilter extends TabGuardComp8 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-multi-filter ag-menu-list-compact\"></div>`\n    );\n    this.filterDefs = [];\n    this.filters = [];\n    this.guiDestroyFuncs = [];\n    this.filterGuis = [];\n    this.activeFilterIndices = [];\n    this.lastActivatedMenuItem = null;\n    this.afterFiltersReadyFuncs = [];\n  }\n  wireBeans(beans) {\n    this.filterManager = beans.filterManager;\n    this.userComponentFactory = beans.userComponentFactory;\n    this.focusService = beans.focusService;\n  }\n  postConstruct() {\n    this.initialiseTabGuard({\n      onFocusIn: (e) => this.onFocusIn(e)\n    });\n  }\n  static getFilterDefs(params) {\n    const { filters } = params;\n    return filters && filters.length > 0 ? filters : [{ filter: \"agTextColumnFilter\" }, { filter: \"agSetColumnFilter\" }];\n  }\n  init(params) {\n    this.params = params;\n    this.filterDefs = _MultiFilter.getFilterDefs(params);\n    const { column, filterChangedCallback } = params;\n    this.column = column;\n    this.filterChangedCallback = filterChangedCallback;\n    const filterPromises = [];\n    this.filterDefs.forEach((filterDef, index) => {\n      const filterPromise = this.createFilter(filterDef, index);\n      if (filterPromise != null) {\n        filterPromises.push(filterPromise);\n      }\n    });\n    return new AgPromise6((resolve) => {\n      AgPromise6.all(filterPromises).then((filters) => {\n        this.filters = filters;\n        this.refreshGui(\"columnMenu\").then(() => {\n          resolve();\n        });\n      });\n    }).then(() => {\n      this.afterFiltersReadyFuncs.forEach((f) => f());\n      this.afterFiltersReadyFuncs.length = 0;\n    });\n  }\n  refreshGui(container) {\n    if (container === this.lastOpenedInContainer) {\n      return AgPromise6.resolve();\n    }\n    this.tabGuardFeature.removeAllChildrenExceptTabGuards();\n    this.destroyChildren();\n    return AgPromise6.all(\n      this.filters.map((filter, index) => {\n        const filterDef = this.filterDefs[index];\n        const filterTitle = this.getFilterTitle(filter, filterDef);\n        let filterGuiPromise;\n        if (filterDef.display === \"subMenu\" && container !== \"toolPanel\") {\n          filterGuiPromise = this.insertFilterMenu(filter, filterTitle).then(\n            (menuItem) => menuItem.getGui()\n          );\n        } else if (filterDef.display === \"subMenu\" || filterDef.display === \"accordion\") {\n          const group = this.insertFilterGroup(filter, filterTitle);\n          filterGuiPromise = AgPromise6.resolve(group.getGui());\n        } else {\n          filterGuiPromise = AgPromise6.resolve(filter.getGui());\n        }\n        return filterGuiPromise;\n      })\n    ).then((filterGuis) => {\n      filterGuis.forEach((filterGui, index) => {\n        if (index > 0) {\n          this.appendChild(_loadTemplate6(\n            /* html */\n            `<div class=\"ag-filter-separator\"></div>`\n          ));\n        }\n        this.appendChild(filterGui);\n      });\n      this.filterGuis = filterGuis;\n      this.lastOpenedInContainer = container;\n    });\n  }\n  getFilterTitle(filter, filterDef) {\n    if (filterDef.title != null) {\n      return filterDef.title;\n    }\n    return filter instanceof ProvidedFilter ? filter.getFilterTitle() : \"Filter\";\n  }\n  destroyChildren() {\n    this.guiDestroyFuncs.forEach((func) => func());\n    this.guiDestroyFuncs.length = 0;\n    this.filterGuis.length = 0;\n  }\n  insertFilterMenu(filter, name) {\n    const menuItem = this.createBean(new AgMenuItemComponent());\n    return menuItem.init({\n      menuItemDef: {\n        name,\n        subMenu: [],\n        cssClasses: [\"ag-multi-filter-menu-item\"],\n        menuItem: AgMenuItemRenderer,\n        menuItemParams: {\n          cssClassPrefix: \"ag-compact-menu-option\",\n          isCompact: true\n        }\n      },\n      level: 0,\n      isAnotherSubMenuOpen: () => false,\n      childComponent: filter,\n      contextParams: {\n        column: null,\n        node: null,\n        value: null\n      }\n    }).then(() => {\n      menuItem.setParentComponent(this);\n      this.guiDestroyFuncs.push(() => this.destroyBean(menuItem));\n      this.addManagedListeners(menuItem, {\n        menuItemActivated: (event) => {\n          if (this.lastActivatedMenuItem && this.lastActivatedMenuItem !== event.menuItem) {\n            this.lastActivatedMenuItem.deactivate();\n          }\n          this.lastActivatedMenuItem = event.menuItem;\n        }\n      });\n      const menuItemGui = menuItem.getGui();\n      menuItem.addManagedElementListeners(menuItemGui, {\n        // `AgMenuList` normally handles keyboard navigation, so need to do here\n        keydown: (e) => {\n          const { key } = e;\n          switch (key) {\n            case KeyCode20.UP:\n            case KeyCode20.RIGHT:\n            case KeyCode20.DOWN:\n            case KeyCode20.LEFT:\n              e.preventDefault();\n              if (key === KeyCode20.RIGHT) {\n                menuItem.openSubMenu(true);\n              }\n              break;\n          }\n        },\n        focusin: () => menuItem.activate(),\n        focusout: () => {\n          if (!menuItem.isSubMenuOpen() && !menuItem.isSubMenuOpening()) {\n            menuItem.deactivate();\n          }\n        }\n      });\n      return menuItem;\n    });\n  }\n  insertFilterGroup(filter, title) {\n    const group = this.createBean(\n      new AgGroupComponent({\n        title,\n        cssIdentifier: \"multi-filter\"\n      })\n    );\n    this.guiDestroyFuncs.push(() => this.destroyBean(group));\n    group.addItem(filter.getGui());\n    group.toggleGroupExpand(false);\n    if (filter.afterGuiAttached) {\n      group.addManagedListeners(group, {\n        expanded: () => filter.afterGuiAttached({\n          container: this.lastOpenedInContainer,\n          suppressFocus: true,\n          hidePopup: this.hidePopup\n        })\n      });\n    }\n    return group;\n  }\n  isFilterActive() {\n    return this.filters.some((filter) => filter.isFilterActive());\n  }\n  getLastActiveFilterIndex() {\n    return this.activeFilterIndices.length > 0 ? this.activeFilterIndices[this.activeFilterIndices.length - 1] : null;\n  }\n  doesFilterPass(params, filterToSkip) {\n    let rowPasses = true;\n    this.filters.forEach((filter) => {\n      if (!rowPasses || filter === filterToSkip || !filter.isFilterActive()) {\n        return;\n      }\n      rowPasses = filter.doesFilterPass(params);\n    });\n    return rowPasses;\n  }\n  getFilterType() {\n    return \"multi\";\n  }\n  getModelFromUi() {\n    const model = {\n      filterType: this.getFilterType(),\n      filterModels: this.filters.map((filter) => {\n        const providedFilter = filter;\n        if (typeof providedFilter.getModelFromUi === \"function\") {\n          return providedFilter.getModelFromUi();\n        }\n        return null;\n      })\n    };\n    return model;\n  }\n  getModel() {\n    if (!this.isFilterActive()) {\n      return null;\n    }\n    const model = {\n      filterType: this.getFilterType(),\n      filterModels: this.filters.map((filter) => {\n        if (filter.isFilterActive()) {\n          return filter.getModel();\n        }\n        return null;\n      })\n    };\n    return model;\n  }\n  setModel(model) {\n    const setFilterModel = (filter, filterModel) => {\n      return new AgPromise6((resolve) => {\n        const promise = filter.setModel(filterModel);\n        promise ? promise.then(() => resolve()) : resolve();\n      });\n    };\n    let promises = [];\n    if (model == null) {\n      promises = this.filters.map((filter, index) => {\n        const res = setFilterModel(filter, null).then(() => {\n          this.updateActiveList(index);\n        });\n        return res;\n      });\n    } else {\n      this.filters.forEach((filter, index) => {\n        const filterModel = model.filterModels.length > index ? model.filterModels[index] : null;\n        const res = setFilterModel(filter, filterModel).then(() => {\n          this.updateActiveList(index);\n        });\n        promises.push(res);\n      });\n    }\n    return AgPromise6.all(promises).then(() => {\n    });\n  }\n  applyModel(source = \"api\") {\n    let result = false;\n    this.filters.forEach((filter) => {\n      if (filter instanceof ProvidedFilter) {\n        result = filter.applyModel(source) || result;\n      }\n    });\n    return result;\n  }\n  getChildFilterInstance(index) {\n    return this.filters[index];\n  }\n  afterGuiAttached(params) {\n    let refreshPromise;\n    if (params) {\n      this.hidePopup = params.hidePopup;\n      refreshPromise = this.refreshGui(params.container);\n    } else {\n      this.hidePopup = void 0;\n      refreshPromise = AgPromise6.resolve();\n    }\n    const suppressFocus = params?.suppressFocus;\n    refreshPromise.then(() => {\n      const { filterDefs } = this;\n      let hasFocused = !!suppressFocus;\n      if (filterDefs) {\n        _forEachReverse(filterDefs, (filterDef, index) => {\n          const isFirst = index === 0;\n          const notInlineDisplayType = filterDef.display && filterDef.display !== \"inline\";\n          const suppressFocusForFilter = suppressFocus || !isFirst || notInlineDisplayType;\n          const afterGuiAttachedParams = { ...params ?? {}, suppressFocus: suppressFocusForFilter };\n          const filter = this.filters?.[index];\n          if (filter) {\n            this.executeFunctionIfExistsOnFilter(filter, \"afterGuiAttached\", afterGuiAttachedParams);\n            if (isFirst && !suppressFocusForFilter) {\n              hasFocused = true;\n            }\n          }\n          if (!suppressFocus && isFirst && notInlineDisplayType) {\n            const filterGui = this.filterGuis[index];\n            if (filterGui) {\n              if (!this.focusService.focusInto(filterGui)) {\n                filterGui.focus();\n              }\n              hasFocused = true;\n            }\n          }\n        });\n      }\n      const activeEl = _getActiveDomElement12(this.gos);\n      if (!hasFocused && (_isNothingFocused5(this.gos) || this.getGui().contains(activeEl))) {\n        this.forceFocusOutOfContainer(true);\n      }\n    });\n  }\n  afterGuiDetached() {\n    this.executeFunctionIfExists(\"afterGuiDetached\");\n  }\n  onAnyFilterChanged() {\n    this.executeFunctionIfExists(\"onAnyFilterChanged\");\n  }\n  onNewRowsLoaded() {\n    this.executeFunctionIfExists(\"onNewRowsLoaded\");\n  }\n  destroy() {\n    this.filters.forEach((filter) => this.destroyBean(filter));\n    this.filters.length = 0;\n    this.destroyChildren();\n    this.hidePopup = void 0;\n    super.destroy();\n  }\n  executeFunctionIfExists(name, ...params) {\n    _forEachReverse(this.filters, (filter) => {\n      this.executeFunctionIfExistsOnFilter(filter, name, params);\n    });\n  }\n  executeFunctionIfExistsOnFilter(filter, name, ...params) {\n    const func = filter[name];\n    if (typeof func === \"function\") {\n      func.apply(filter, params);\n    }\n  }\n  createFilter(filterDef, index) {\n    const { filterModifiedCallback, doesRowPassOtherFilter } = this.params;\n    let filterInstance;\n    const filterParams = {\n      ...this.filterManager.createFilterParams(this.column, this.column.getColDef()),\n      filterModifiedCallback,\n      filterChangedCallback: (additionalEventAttributes) => {\n        this.executeWhenAllFiltersReady(() => this.filterChanged(index, additionalEventAttributes));\n      },\n      doesRowPassOtherFilter: (node) => doesRowPassOtherFilter(node) && this.doesFilterPass({ node, data: node.data }, filterInstance)\n    };\n    const compDetails = this.userComponentFactory.getFilterDetails(filterDef, filterParams, \"agTextColumnFilter\");\n    if (!compDetails) {\n      return null;\n    }\n    const filterPromise = compDetails.newAgStackInstance();\n    if (filterPromise) {\n      filterPromise.then((filter) => filterInstance = filter);\n    }\n    return filterPromise;\n  }\n  executeWhenAllFiltersReady(action) {\n    if (this.filters && this.filters.length > 0) {\n      action();\n    } else {\n      this.afterFiltersReadyFuncs.push(action);\n    }\n  }\n  updateActiveList(index) {\n    const changedFilter = this.filters[index];\n    _removeFromArray3(this.activeFilterIndices, index);\n    if (changedFilter.isFilterActive()) {\n      this.activeFilterIndices.push(index);\n    }\n  }\n  filterChanged(index, additionalEventAttributes) {\n    this.updateActiveList(index);\n    this.filterChangedCallback(additionalEventAttributes);\n    const changedFilter = this.filters[index];\n    this.filters.forEach((filter) => {\n      if (filter === changedFilter) {\n        return;\n      }\n      if (typeof filter.onAnyFilterChanged === \"function\") {\n        filter.onAnyFilterChanged();\n      }\n    });\n  }\n  onFocusIn(e) {\n    if (this.lastActivatedMenuItem != null && !this.lastActivatedMenuItem.getGui().contains(e.target)) {\n      this.lastActivatedMenuItem.deactivate();\n      this.lastActivatedMenuItem = null;\n    }\n  }\n  getModelAsString(model) {\n    if (!this.filters || !model?.filterModels?.length) {\n      return \"\";\n    }\n    const lastActiveIndex = this.getLastActiveFilterIndex() ?? 0;\n    const activeFilter = this.filters[lastActiveIndex];\n    return activeFilter.getModelAsString?.(model.filterModels[lastActiveIndex]) ?? \"\";\n  }\n};\nvar MultiFloatingFilterComp = class extends Component57 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-multi-floating-filter ag-floating-filter-input\"></div>`\n    );\n    this.floatingFilters = [];\n    this.compDetailsList = [];\n  }\n  wireBeans(beans) {\n    this.userComponentFactory = beans.userComponentFactory;\n    this.filterManager = beans.filterManager;\n  }\n  init(params) {\n    this.params = params;\n    const { compDetailsList } = this.getCompDetailsList(params);\n    return this.setParams(compDetailsList);\n  }\n  setParams(compDetailsList) {\n    const floatingFilterPromises = [];\n    compDetailsList.forEach((compDetails) => {\n      const floatingFilterPromise = compDetails?.newAgStackInstance();\n      if (floatingFilterPromise != null) {\n        this.compDetailsList.push(compDetails);\n        floatingFilterPromises.push(floatingFilterPromise);\n      }\n    });\n    return AgPromise23.all(floatingFilterPromises).then((floatingFilters) => {\n      floatingFilters.forEach((floatingFilter, index) => {\n        this.floatingFilters.push(floatingFilter);\n        const gui = floatingFilter.getGui();\n        this.appendChild(gui);\n        if (index > 0) {\n          _setDisplayed12(gui, false);\n        }\n      });\n    });\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    this.params = params;\n    const { compDetailsList: newCompDetailsList, floatingFilterParamsList } = this.getCompDetailsList(params);\n    const allFloatingFilterCompsUnchanged = newCompDetailsList.length === this.compDetailsList.length && newCompDetailsList.every(\n      (newCompDetails, index) => !this.filterManager?.areFilterCompsDifferent(this.compDetailsList[index], newCompDetails)\n    );\n    if (allFloatingFilterCompsUnchanged) {\n      floatingFilterParamsList.forEach((floatingFilterParams, index) => {\n        const floatingFilter = this.floatingFilters[index];\n        let hasRefreshed = false;\n        if (floatingFilter.refresh) {\n          const result = floatingFilter.refresh(floatingFilterParams);\n          if (result !== null) {\n            hasRefreshed = true;\n          }\n        }\n        if (!hasRefreshed) {\n          floatingFilter.onParamsUpdated?.(floatingFilterParams);\n        }\n      });\n    } else {\n      _clearElement11(this.getGui());\n      this.destroyBeans(this.floatingFilters);\n      this.floatingFilters = [];\n      this.compDetailsList = [];\n      this.setParams(newCompDetailsList);\n    }\n  }\n  getCompDetailsList(params) {\n    const compDetailsList = [];\n    const floatingFilterParamsList = [];\n    const filterParams = params.filterParams;\n    MultiFilter.getFilterDefs(filterParams).forEach((filterDef, index) => {\n      const floatingFilterParams = {\n        ...params,\n        // set the parent filter instance for each floating filter to the relevant child filter instance\n        parentFilterInstance: (callback) => {\n          this.parentMultiFilterInstance((parent) => {\n            const child = parent.getChildFilterInstance(index);\n            if (child == null) {\n              return;\n            }\n            callback(child);\n          });\n        }\n      };\n      _mergeDeep5(floatingFilterParams.filterParams, filterDef.filterParams);\n      const compDetails = this.getCompDetails(filterDef, floatingFilterParams);\n      if (compDetails) {\n        compDetailsList.push(compDetails);\n        floatingFilterParamsList.push(floatingFilterParams);\n      }\n    });\n    return { compDetailsList, floatingFilterParamsList };\n  }\n  onParentModelChanged(model, event) {\n    if (event && event.afterFloatingFilter) {\n      return;\n    }\n    this.parentMultiFilterInstance((parent) => {\n      if (model == null) {\n        this.floatingFilters.forEach((filter, i) => {\n          filter.onParentModelChanged(null, event);\n          _setDisplayed12(filter.getGui(), i === 0);\n        });\n      } else {\n        const lastActiveFloatingFilterIndex = parent.getLastActiveFilterIndex();\n        this.floatingFilters.forEach((filter, i) => {\n          const filterModel = model.filterModels.length > i ? model.filterModels[i] : null;\n          filter.onParentModelChanged(filterModel, event);\n          const shouldShow = lastActiveFloatingFilterIndex == null ? i === 0 : i === lastActiveFloatingFilterIndex;\n          _setDisplayed12(filter.getGui(), shouldShow);\n        });\n      }\n    });\n  }\n  destroy() {\n    this.destroyBeans(this.floatingFilters);\n    this.floatingFilters.length = 0;\n    super.destroy();\n  }\n  getCompDetails(filterDef, params) {\n    const defaultComponentName = getDefaultFloatingFilterType(\n      this.frameworkOverrides,\n      filterDef,\n      () => this.filterManager.getDefaultFloatingFilter(this.params.column)\n    ) ?? \"agReadOnlyFloatingFilter\";\n    return this.userComponentFactory.getFloatingFilterCompDetails(filterDef, params, defaultComponentName);\n  }\n  parentMultiFilterInstance(cb) {\n    this.params.parentFilterInstance((parent) => {\n      if (!(parent instanceof MultiFilter)) {\n        throw new Error(\"AG Grid - MultiFloatingFilterComp expects MultiFilter as its parent\");\n      }\n      cb(parent);\n    });\n  }\n};\nvar VERSION13 = \"32.3.9\";\nvar MultiFilterCoreModule = _defineModule13({\n  version: VERSION13,\n  moduleName: `${ModuleNames14.MultiFilterModule}-core`,\n  userComponents: [\n    { name: \"agMultiColumnFilter\", classImp: MultiFilter },\n    {\n      name: \"agMenuItem\",\n      classImp: AgMenuItemRenderer\n    }\n  ],\n  dependantModules: [EnterpriseCoreModule, _ColumnFilterModule3]\n});\nvar MultiFloatingFilterModule = _defineModule13({\n  version: VERSION13,\n  moduleName: \"@ag-grid-enterprise/multi-floating-filter\",\n  userComponents: [{ name: \"agMultiColumnFloatingFilter\", classImp: MultiFloatingFilterComp }],\n  dependantModules: [MultiFilterCoreModule, _ReadOnlyFloatingFilterModule]\n});\nvar MultiFilterModule = _defineModule13({\n  version: VERSION13,\n  moduleName: ModuleNames14.MultiFilterModule,\n  dependantModules: [MultiFilterCoreModule, MultiFloatingFilterModule]\n});\n\n// enterprise-modules/rich-select/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames15, _EditCoreModule, _defineModule as _defineModule14 } from \"ag-grid-community\";\nimport { PopupComponent as PopupComponent2, _missing as _missing5, _warnOnce as _warnOnce36 } from \"ag-grid-community\";\nvar RichSelectCellEditor = class extends PopupComponent2 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-cell-edit-wrapper\"></div>`\n    );\n  }\n  init(params) {\n    this.params = params;\n    const { cellStartedEdit, values } = params;\n    if (_missing5(values)) {\n      _warnOnce36(\"agRichSelectCellEditor requires cellEditorParams.values to be set\");\n    }\n    const { params: richSelectParams, valuesPromise } = this.buildRichSelectParams();\n    this.richSelect = this.createManagedBean(new AgRichSelect(richSelectParams));\n    this.richSelect.addCssClass(\"ag-cell-editor\");\n    this.appendChild(this.richSelect);\n    if (valuesPromise) {\n      valuesPromise.then((values2) => {\n        this.richSelect.setValueList({ valueList: values2, refresh: true });\n        const searchStringCallback = this.getSearchStringCallback(values2);\n        if (searchStringCallback) {\n          this.richSelect.setSearchStringCreator(searchStringCallback);\n        }\n      });\n    }\n    this.addManagedListeners(this.richSelect, {\n      fieldPickerValueSelected: this.onEditorPickerValueSelected.bind(this)\n    });\n    this.focusAfterAttached = cellStartedEdit;\n  }\n  onEditorPickerValueSelected(e) {\n    setTimeout(() => this.params.stopEditing(!e.fromEnterKey));\n  }\n  buildRichSelectParams() {\n    const {\n      cellRenderer,\n      cellHeight,\n      value,\n      values,\n      formatValue,\n      searchDebounceDelay,\n      valueListGap,\n      valueListMaxHeight,\n      valueListMaxWidth,\n      allowTyping,\n      filterList,\n      searchType,\n      highlightMatch,\n      valuePlaceholder,\n      eventKey,\n      multiSelect,\n      suppressDeselectAll,\n      suppressMultiSelectPillRenderer\n    } = this.params;\n    const ret = {\n      value,\n      cellRenderer,\n      cellRowHeight: cellHeight,\n      searchDebounceDelay,\n      valueFormatter: formatValue,\n      pickerAriaLabelKey: \"ariaLabelRichSelectField\",\n      pickerAriaLabelValue: \"Rich Select Field\",\n      pickerType: \"virtual-list\",\n      pickerGap: valueListGap,\n      allowTyping,\n      filterList,\n      searchType,\n      highlightMatch,\n      maxPickerHeight: valueListMaxHeight,\n      maxPickerWidth: valueListMaxWidth,\n      placeholder: valuePlaceholder,\n      initialInputValue: eventKey?.length === 1 ? eventKey : void 0,\n      multiSelect,\n      suppressDeselectAll,\n      suppressMultiSelectPillRenderer\n    };\n    let valuesResult;\n    let valuesPromise;\n    if (typeof values === \"function\") {\n      valuesResult = values(this.params);\n    } else {\n      valuesResult = values ?? [];\n    }\n    if (Array.isArray(valuesResult)) {\n      ret.valueList = valuesResult;\n      ret.searchStringCreator = this.getSearchStringCallback(valuesResult);\n    } else {\n      valuesPromise = valuesResult;\n    }\n    if (multiSelect && allowTyping) {\n      this.params.allowTyping = ret.allowTyping = false;\n      _warnOnce36(\n        \"agRichSelectCellEditor cannot have `multiSelect` and `allowTyping` set to `true`. AllowTyping has been turned off.\"\n      );\n    }\n    return { params: ret, valuesPromise };\n  }\n  getSearchStringCallback(values) {\n    const { colDef } = this.params;\n    if (typeof values[0] !== \"object\" || !colDef.keyCreator) {\n      return;\n    }\n    return (values2) => values2.map((value) => {\n      const keyParams = this.gos.addGridCommonParams({\n        value,\n        colDef: this.params.colDef,\n        column: this.params.column,\n        node: this.params.node,\n        data: this.params.data\n      });\n      return colDef.keyCreator(keyParams);\n    });\n  }\n  // we need to have the gui attached before we can draw the virtual rows, as the\n  // virtual row logic needs info about the gui state\n  afterGuiAttached() {\n    const { focusAfterAttached, params } = this;\n    setTimeout(() => {\n      if (!this.isAlive()) {\n        return;\n      }\n      if (focusAfterAttached) {\n        const focusableEl = this.richSelect.getFocusableElement();\n        focusableEl.focus();\n        const { allowTyping, eventKey: eventKey2 } = this.params;\n        if (allowTyping && (!eventKey2 || eventKey2.length !== 1)) {\n          focusableEl.select();\n        }\n      }\n      this.richSelect.showPicker();\n      const { eventKey } = params;\n      if (eventKey) {\n        if (eventKey?.length === 1) {\n          this.richSelect.searchTextFromString(eventKey);\n        }\n      }\n    });\n  }\n  focusIn() {\n    this.richSelect.getFocusableElement().focus();\n  }\n  getValue() {\n    return this.richSelect.getValue();\n  }\n  isPopup() {\n    return false;\n  }\n};\nvar VERSION14 = \"32.3.9\";\nvar RichSelectModule = _defineModule14({\n  version: VERSION14,\n  moduleName: ModuleNames15.RichSelectModule,\n  beans: [],\n  userComponents: [\n    { name: \"agRichSelect\", classImp: RichSelectCellEditor },\n    { name: \"agRichSelectCellEditor\", classImp: RichSelectCellEditor }\n  ],\n  dependantModules: [EnterpriseCoreModule, _EditCoreModule]\n});\n\n// enterprise-modules/server-side-row-model/dist/package/main.esm.mjs\nimport {\n  ModuleNames as ModuleNames25,\n  RowModelHelperService,\n  _CsrmSsrmSharedApiModule,\n  _RowNodeBlockModule,\n  _SsrmInfiniteSharedApiModule,\n  _defineModule as _defineModule15\n} from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub30,\n  RowNode as RowNode3,\n  _doOnce,\n  _exists as _exists16,\n  _getGroupTotalRowCallback,\n  _getRowHeightAsNumber,\n  _getRowHeightForNode,\n  _missing as _missing6,\n  _warnOnce as _warnOnce37\n} from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub210,\n  RowNode as RowNode22,\n  _exists as _exists26,\n  _getRowHeightForNode as _getRowHeightForNode2,\n  _isServerSideRowModel as _isServerSideRowModel3,\n  _missing as _missing24\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub36, _isServerSideRowModel as _isServerSideRowModel22 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub46 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub56, _isServerSideRowModel as _isServerSideRowModel32 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub65, _warnOnce as _warnOnce211 } from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub103,\n  ModuleNames as ModuleNames16,\n  NumberSequence as NumberSequence3,\n  RowNode as RowNode32,\n  _debounce as _debounce4,\n  _errorOnce as _errorOnce22,\n  _getRowHeightAsNumber as _getRowHeightAsNumber4,\n  _getRowHeightForNode as _getRowHeightForNode3,\n  _isGetRowHeightFunction,\n  _isRowSelection,\n  _jsonEquals,\n  _warnOnce as _warnOnce63\n} from \"ag-grid-community\";\nimport {\n  NumberSequence,\n  RowNodeBlock,\n  ServerSideTransactionResultStatus,\n  _errorOnce as _errorOnce5,\n  _getAllValuesInObject,\n  _getRowIdCallback,\n  _insertIntoArray,\n  _missing as _missing32,\n  _missingOrEmpty as _missingOrEmpty5,\n  _warnOnce as _warnOnce38\n} from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub93,\n  NumberSequence as NumberSequence2,\n  ServerSideTransactionResultStatus as ServerSideTransactionResultStatus2,\n  _getGroupTotalRowCallback as _getGroupTotalRowCallback2,\n  _getRowHeightAsNumber as _getRowHeightAsNumber3,\n  _getRowIdCallback as _getRowIdCallback3,\n  _warnOnce as _warnOnce53\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub83, _getRowHeightAsNumber as _getRowHeightAsNumber2, _getRowIdCallback as _getRowIdCallback2, _warnOnce as _warnOnce45 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub75 } from \"ag-grid-community\";\nimport { _warnOnce as _warnOnce73 } from \"ag-grid-community\";\nimport { ExpansionService } from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub132,\n  _getGroupSelectsDescendants,\n  _getRowSelectionMode,\n  _isUsingNewRowSelectionAPI as _isUsingNewRowSelectionAPI2,\n  _warnOnce as _warnOnce102\n} from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub113,\n  _errorOnce as _errorOnce32,\n  _isMultiRowSelection,\n  _isUsingNewRowSelectionAPI,\n  _last as _last12,\n  _warnOnce as _warnOnce82,\n  isSelectionUIEvent\n} from \"ag-grid-community\";\nimport {\n  BeanStub as BeanStub122,\n  _errorOnce as _errorOnce42,\n  _isMultiRowSelection as _isMultiRowSelection2,\n  _last as _last23,\n  _warnOnce as _warnOnce92,\n  isSelectionUIEvent as isSelectionUIEvent2\n} from \"ag-grid-community\";\nimport { BeanStub as BeanStub142, _warnOnce as _warnOnce112 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub152, _isServerSideRowModel as _isServerSideRowModel4, _missingOrEmpty as _missingOrEmpty22, _warnOnce as _warnOnce122 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub162, ServerSideTransactionResultStatus as ServerSideTransactionResultStatus3, _isServerSideRowModel as _isServerSideRowModel5 } from \"ag-grid-community\";\nvar GROUP_MISSING_KEY_ID = \"ag-Grid-MissingKey\";\nvar BlockUtils = class extends BeanStub30 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmBlockUtils\";\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.showRowGroupColsService = beans.showRowGroupColsService;\n    this.nodeManager = beans.ssrmNodeManager;\n    this.beans = beans;\n    this.expansionService = beans.expansionService;\n    this.serverSideRowModel = beans.rowModel;\n    this.storeFactory = beans.ssrmStoreFactory;\n  }\n  createRowNode(params) {\n    const rowNode = new RowNode3(this.beans);\n    const rowHeight = params.rowHeight != null ? params.rowHeight : _getRowHeightAsNumber(this.gos);\n    rowNode.setRowHeight(rowHeight);\n    rowNode.group = params.group;\n    rowNode.leafGroup = params.leafGroup;\n    rowNode.level = params.level;\n    rowNode.uiLevel = params.level;\n    rowNode.parent = params.parent;\n    rowNode.stub = true;\n    rowNode.__needsRefreshWhenVisible = false;\n    if (rowNode.group) {\n      rowNode.expanded = false;\n      rowNode.field = params.field;\n      rowNode.rowGroupColumn = params.rowGroupColumn;\n    }\n    return rowNode;\n  }\n  destroyRowNodes(rowNodes) {\n    if (rowNodes) {\n      rowNodes.forEach((row) => this.destroyRowNode(row));\n    }\n  }\n  destroyRowNode(rowNode, preserveStore = false) {\n    if (rowNode.childStore && !preserveStore) {\n      this.destroyBean(rowNode.childStore);\n      rowNode.childStore = null;\n    }\n    if (rowNode.sibling && !rowNode.footer) {\n      this.destroyRowNode(rowNode.sibling, false);\n    }\n    rowNode.clearRowTopAndRowIndex();\n    if (rowNode.id != null) {\n      this.nodeManager.removeNode(rowNode);\n    }\n  }\n  setTreeGroupInfo(rowNode) {\n    rowNode.updateHasChildren();\n    const getKeyFunc = this.gos.get(\"getServerSideGroupKey\");\n    if (rowNode.hasChildren() && getKeyFunc != null) {\n      rowNode.key = getKeyFunc(rowNode.data);\n    }\n    if (!rowNode.hasChildren() && rowNode.childStore != null) {\n      this.destroyBean(rowNode.childStore);\n      rowNode.childStore = null;\n      rowNode.expanded = false;\n    }\n  }\n  setRowGroupInfo(rowNode) {\n    rowNode.key = this.valueService.getValue(rowNode.rowGroupColumn, rowNode);\n    if (rowNode.key === null || rowNode.key === void 0) {\n      _doOnce(() => {\n        _warnOnce37(`null and undefined values are not allowed for server side row model keys`);\n        if (rowNode.rowGroupColumn) {\n          _warnOnce37(`column = ${rowNode.rowGroupColumn.getId()}`);\n        }\n        _warnOnce37(`data is ` + rowNode.data);\n      }, \"ServerSideBlock-CannotHaveNullOrUndefinedForKey\");\n    }\n    const isUnbalancedGroup = this.gos.get(\"groupAllowUnbalanced\") && rowNode.key === \"\";\n    if (isUnbalancedGroup) {\n      const storeParams = this.serverSideRowModel.getParams();\n      rowNode.childStore = this.createBean(this.storeFactory.createStore(storeParams, rowNode));\n    }\n    const getGroupIncludeFooter = _getGroupTotalRowCallback(this.beans.gos);\n    const doesRowShowFooter = getGroupIncludeFooter({ node: rowNode });\n    if (doesRowShowFooter) {\n      rowNode.createFooter();\n      if (rowNode.sibling) {\n        rowNode.sibling.uiLevel = rowNode.uiLevel + 1;\n      }\n    }\n  }\n  setMasterDetailInfo(rowNode) {\n    const isMasterFunc = this.gos.get(\"isRowMaster\");\n    if (isMasterFunc != null) {\n      rowNode.master = isMasterFunc(rowNode.data);\n    } else {\n      rowNode.master = true;\n    }\n  }\n  updateDataIntoRowNode(rowNode, data) {\n    rowNode.updateData(data);\n    if (this.gos.get(\"treeData\")) {\n      this.setTreeGroupInfo(rowNode);\n      this.setChildCountIntoRowNode(rowNode);\n    } else if (rowNode.group) {\n      this.setChildCountIntoRowNode(rowNode);\n      if (!rowNode.footer) {\n        const getGroupIncludeFooter = _getGroupTotalRowCallback(this.beans.gos);\n        const doesRowShowFooter = getGroupIncludeFooter({ node: rowNode });\n        if (doesRowShowFooter) {\n          if (rowNode.sibling) {\n            rowNode.sibling.updateData(data);\n          } else {\n            rowNode.createFooter();\n          }\n        } else if (rowNode.sibling) {\n          rowNode.destroyFooter();\n        }\n      }\n    } else if (this.gos.get(\"masterDetail\")) {\n    }\n  }\n  setDataIntoRowNode(rowNode, data, defaultId, cachedRowHeight) {\n    rowNode.stub = false;\n    const treeData = this.gos.get(\"treeData\");\n    if (_exists16(data)) {\n      rowNode.setDataAndId(data, defaultId);\n      if (treeData) {\n        this.setTreeGroupInfo(rowNode);\n      } else if (rowNode.group) {\n        this.setRowGroupInfo(rowNode);\n      } else if (this.gos.get(\"masterDetail\")) {\n        this.setMasterDetailInfo(rowNode);\n      }\n    } else {\n      rowNode.setDataAndId(void 0, void 0);\n      rowNode.key = null;\n    }\n    if (treeData || rowNode.group) {\n      this.setGroupDataIntoRowNode(rowNode);\n      this.setChildCountIntoRowNode(rowNode);\n    }\n    if (_exists16(data)) {\n      rowNode.setRowHeight(_getRowHeightForNode(this.gos, rowNode, false, cachedRowHeight).height);\n      rowNode.sibling?.setRowHeight(\n        _getRowHeightForNode(this.gos, rowNode.sibling, false, cachedRowHeight).height\n      );\n    }\n  }\n  setChildCountIntoRowNode(rowNode) {\n    const getChildCount = this.gos.get(\"getChildCount\");\n    if (getChildCount) {\n      rowNode.setAllChildrenCount(getChildCount(rowNode.data));\n    }\n  }\n  setGroupDataIntoRowNode(rowNode) {\n    const groupDisplayCols = this.showRowGroupColsService?.getShowRowGroupCols() ?? [];\n    const usingTreeData = this.gos.get(\"treeData\");\n    groupDisplayCols.forEach((col) => {\n      if (rowNode.groupData == null) {\n        rowNode.groupData = {};\n      }\n      if (usingTreeData) {\n        rowNode.groupData[col.getColId()] = rowNode.key;\n      } else if (col.isRowGroupDisplayed(rowNode.rowGroupColumn.getId())) {\n        const groupValue = this.valueService.getValue(rowNode.rowGroupColumn, rowNode);\n        rowNode.groupData[col.getColId()] = groupValue;\n      }\n    });\n  }\n  clearDisplayIndex(rowNode) {\n    rowNode.clearRowTopAndRowIndex();\n    const hasChildStore = rowNode.hasChildren() && _exists16(rowNode.childStore);\n    if (hasChildStore) {\n      const childStore = rowNode.childStore;\n      childStore.clearDisplayIndexes();\n    }\n    const hasDetailNode = rowNode.master && rowNode.detailNode;\n    if (hasDetailNode) {\n      rowNode.detailNode.clearRowTopAndRowIndex();\n    }\n  }\n  setDisplayIndex(rowNode, displayIndexSeq, nextRowTop, uiLevel) {\n    const isUnbalancedGroup = this.gos.get(\"groupAllowUnbalanced\") && rowNode.group && rowNode.key === \"\";\n    const isHiddenOpenGroup = this.gos.get(\"groupHideOpenParents\") && rowNode.group && rowNode.expanded;\n    if (isHiddenOpenGroup || isUnbalancedGroup) {\n      rowNode.setRowIndex(null);\n      rowNode.setRowTop(null);\n    } else {\n      rowNode.setRowIndex(displayIndexSeq.next());\n      rowNode.setRowTop(nextRowTop.value);\n      nextRowTop.value += rowNode.rowHeight;\n    }\n    rowNode.setUiLevel(uiLevel);\n    if (rowNode.footer) {\n      return;\n    }\n    const hasDetailRow = rowNode.master;\n    if (hasDetailRow) {\n      if (rowNode.expanded && rowNode.detailNode) {\n        rowNode.detailNode.setRowIndex(displayIndexSeq.next());\n        rowNode.detailNode.setRowTop(nextRowTop.value);\n        nextRowTop.value += rowNode.detailNode.rowHeight;\n      } else if (rowNode.detailNode) {\n        rowNode.detailNode.clearRowTopAndRowIndex();\n      }\n    }\n    const hasChildStore = rowNode.hasChildren() && _exists16(rowNode.childStore);\n    if (hasChildStore) {\n      const childStore = rowNode.childStore;\n      if (rowNode.expanded || isUnbalancedGroup) {\n        childStore.setDisplayIndexes(displayIndexSeq, nextRowTop, isUnbalancedGroup ? uiLevel : uiLevel + 1);\n      } else {\n        childStore.clearDisplayIndexes();\n      }\n    }\n  }\n  binarySearchForDisplayIndex(displayRowIndex, rowNodes) {\n    let bottomPointer = 0;\n    let topPointer = rowNodes.length - 1;\n    if (_missing6(topPointer) || _missing6(bottomPointer)) {\n      _warnOnce37(`error: topPointer = ${topPointer}, bottomPointer = ${bottomPointer}`);\n      return void 0;\n    }\n    while (true) {\n      const midPointer = Math.floor((bottomPointer + topPointer) / 2);\n      const currentRowNode = rowNodes[midPointer];\n      if (currentRowNode.rowIndex === displayRowIndex) {\n        return currentRowNode;\n      }\n      const expandedMasterRow = currentRowNode.master && currentRowNode.expanded;\n      const detailNode = currentRowNode.detailNode;\n      if (expandedMasterRow && detailNode && detailNode.rowIndex === displayRowIndex) {\n        return currentRowNode.detailNode;\n      }\n      const childStore = currentRowNode.childStore;\n      if (currentRowNode.expanded && childStore && childStore.isDisplayIndexInStore(displayRowIndex)) {\n        return childStore.getRowUsingDisplayIndex(displayRowIndex);\n      }\n      if (currentRowNode.rowIndex < displayRowIndex) {\n        bottomPointer = midPointer + 1;\n      } else if (currentRowNode.rowIndex > displayRowIndex) {\n        topPointer = midPointer - 1;\n      } else {\n        _warnOnce37(`error: unable to locate rowIndex = ${displayRowIndex} in cache`);\n        return void 0;\n      }\n    }\n  }\n  extractRowBounds(rowNode, index) {\n    const extractRowBounds = (currentRowNode) => ({\n      rowHeight: currentRowNode.rowHeight,\n      rowTop: currentRowNode.rowTop\n    });\n    if (rowNode.rowIndex === index) {\n      return extractRowBounds(rowNode);\n    }\n    if (rowNode.hasChildren() && rowNode.expanded && _exists16(rowNode.childStore)) {\n      const childStore = rowNode.childStore;\n      if (childStore.isDisplayIndexInStore(index)) {\n        return childStore.getRowBounds(index);\n      }\n    } else if (rowNode.master && rowNode.expanded && _exists16(rowNode.detailNode)) {\n      if (rowNode.detailNode.rowIndex === index) {\n        return extractRowBounds(rowNode.detailNode);\n      }\n    }\n  }\n  isPixelInNodeRange(node, pixel) {\n    if (!_exists16(node.rowTop) || !_exists16(node.rowHeight)) {\n      return false;\n    }\n    return pixel >= node.rowTop && pixel < node.rowTop + node.rowHeight;\n  }\n  getIndexAtPixel(rowNode, pixel) {\n    if (this.isPixelInNodeRange(rowNode, pixel)) {\n      return rowNode.rowIndex;\n    }\n    const expandedMasterRow = rowNode.master && rowNode.expanded;\n    const detailNode = rowNode.detailNode;\n    if (expandedMasterRow && detailNode && this.isPixelInNodeRange(detailNode, pixel)) {\n      return rowNode.detailNode.rowIndex;\n    }\n    if (rowNode.hasChildren() && rowNode.expanded && _exists16(rowNode.childStore)) {\n      const childStore = rowNode.childStore;\n      if (childStore.isPixelInRange(pixel)) {\n        return childStore.getRowIndexAtPixel(pixel);\n      }\n    }\n    return null;\n  }\n  createNodeIdPrefix(parentRowNode) {\n    const parts = [];\n    let rowNode = parentRowNode;\n    while (rowNode && rowNode.level >= 0) {\n      if (rowNode.key === \"\") {\n        parts.push(GROUP_MISSING_KEY_ID);\n      } else {\n        parts.push(rowNode.key);\n      }\n      rowNode = rowNode.parent;\n    }\n    if (parts.length > 0) {\n      return parts.reverse().join(\"-\");\n    }\n    return void 0;\n  }\n  checkOpenByDefault(rowNode) {\n    return this.expansionService.checkOpenByDefault(rowNode);\n  }\n};\nvar ExpandListener = class extends BeanStub210 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmExpandListener\";\n  }\n  wireBeans(beans) {\n    this.serverSideRowModel = beans.rowModel;\n    this.storeFactory = beans.ssrmStoreFactory;\n    this.beans = beans;\n  }\n  postConstruct() {\n    if (!_isServerSideRowModel3(this.gos)) {\n      return;\n    }\n    this.addManagedEventListeners({ rowGroupOpened: this.onRowGroupOpened.bind(this) });\n  }\n  onRowGroupOpened(event) {\n    const rowNode = event.node;\n    if (rowNode.expanded) {\n      if (rowNode.master) {\n        this.createDetailNode(rowNode);\n      } else if (_missing24(rowNode.childStore)) {\n        const storeParams = this.serverSideRowModel.getParams();\n        rowNode.childStore = this.createBean(this.storeFactory.createStore(storeParams, rowNode));\n      }\n    } else if (this.gos.get(\"purgeClosedRowNodes\") && _exists26(rowNode.childStore)) {\n      rowNode.childStore = this.destroyBean(rowNode.childStore);\n    }\n    this.eventService.dispatchEvent({ type: \"storeUpdated\" });\n  }\n  createDetailNode(masterNode) {\n    if (_exists26(masterNode.detailNode)) {\n      return masterNode.detailNode;\n    }\n    const detailNode = new RowNode22(this.beans);\n    detailNode.detail = true;\n    detailNode.selectable = false;\n    detailNode.parent = masterNode;\n    if (_exists26(masterNode.id)) {\n      detailNode.id = \"detail_\" + masterNode.id;\n    }\n    detailNode.data = masterNode.data;\n    detailNode.level = masterNode.level + 1;\n    const defaultDetailRowHeight = 200;\n    const rowHeight = _getRowHeightForNode2(this.gos, detailNode).height;\n    detailNode.rowHeight = rowHeight ? rowHeight : defaultDetailRowHeight;\n    masterNode.detailNode = detailNode;\n    return detailNode;\n  }\n};\nvar FilterListener = class extends BeanStub36 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmFilterListener\";\n  }\n  wireBeans(beans) {\n    this.serverSideRowModel = beans.rowModel;\n    this.filterManager = beans.filterManager;\n    this.listenerUtils = beans.ssrmListenerUtils;\n  }\n  postConstruct() {\n    if (!_isServerSideRowModel22(this.gos)) {\n      return;\n    }\n    this.addManagedEventListeners({\n      advancedFilterEnabledChanged: () => this.onFilterChanged(true),\n      filterChanged: () => this.onFilterChanged()\n    });\n  }\n  onFilterChanged(advancedFilterEnabledChanged) {\n    const storeParams = this.serverSideRowModel.getParams();\n    if (!storeParams) {\n      return;\n    }\n    const oldModel = storeParams.filterModel;\n    let newModel;\n    let changedColumns;\n    if (this.filterManager?.isAdvancedFilterEnabled()) {\n      newModel = this.filterManager.getAdvancedFilterModel();\n      const oldColumns = advancedFilterEnabledChanged ? Object.keys(oldModel ?? {}) : this.getAdvancedFilterColumns(oldModel);\n      const newColumns = this.getAdvancedFilterColumns(newModel);\n      oldColumns.forEach((column) => newColumns.add(column));\n      changedColumns = Array.from(newColumns);\n    } else {\n      newModel = this.filterManager?.getFilterModel() ?? {};\n      if (advancedFilterEnabledChanged) {\n        const oldColumns = this.getAdvancedFilterColumns(oldModel);\n        Object.keys(newModel).forEach((column) => oldColumns.add(column));\n        changedColumns = Array.from(oldColumns);\n      } else {\n        changedColumns = this.findChangedColumns(oldModel, newModel);\n      }\n    }\n    const valueColChanged = this.listenerUtils.isSortingWithValueColumn(changedColumns);\n    const secondaryColChanged = this.listenerUtils.isSortingWithSecondaryColumn(changedColumns);\n    const params = {\n      valueColChanged,\n      secondaryColChanged,\n      changedColumns\n    };\n    this.serverSideRowModel.refreshAfterFilter(newModel, params);\n  }\n  findChangedColumns(oldModel, newModel) {\n    const allColKeysMap = {};\n    Object.keys(oldModel).forEach((key) => allColKeysMap[key] = true);\n    Object.keys(newModel).forEach((key) => allColKeysMap[key] = true);\n    const res = [];\n    Object.keys(allColKeysMap).forEach((key) => {\n      const oldJson = JSON.stringify(oldModel[key]);\n      const newJson = JSON.stringify(newModel[key]);\n      const filterChanged = oldJson != newJson;\n      if (filterChanged) {\n        res.push(key);\n      }\n    });\n    return res;\n  }\n  getAdvancedFilterColumns(model) {\n    const columns = /* @__PURE__ */ new Set();\n    if (!model) {\n      return columns;\n    }\n    const processAdvancedFilterModel = (filterModel) => {\n      if (filterModel.filterType === \"join\") {\n        filterModel.conditions.forEach((condition) => processAdvancedFilterModel(condition));\n      } else {\n        columns.add(filterModel.colId);\n      }\n    };\n    processAdvancedFilterModel(model);\n    return columns;\n  }\n};\nvar ListenerUtils = class extends BeanStub46 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmListenerUtils\";\n  }\n  wireBeans(beans) {\n    this.pivotResultColsService = beans.pivotResultColsService;\n    this.funcColsService = beans.funcColsService;\n  }\n  isSortingWithValueColumn(changedColumnsInSort) {\n    const valueColIds = this.funcColsService.getValueColumns().map((col) => col.getColId());\n    for (let i = 0; i < changedColumnsInSort.length; i++) {\n      if (valueColIds.indexOf(changedColumnsInSort[i]) > -1) {\n        return true;\n      }\n    }\n    return false;\n  }\n  isSortingWithSecondaryColumn(changedColumnsInSort) {\n    const pivotResultCols = this.pivotResultColsService.getPivotResultCols();\n    if (!pivotResultCols) {\n      return false;\n    }\n    const secondaryColIds = pivotResultCols.list.map((col) => col.getColId());\n    for (let i = 0; i < changedColumnsInSort.length; i++) {\n      if (secondaryColIds.indexOf(changedColumnsInSort[i]) > -1) {\n        return true;\n      }\n    }\n    return false;\n  }\n};\nvar SortListener = class extends BeanStub56 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmSortService\";\n  }\n  wireBeans(beans) {\n    this.sortController = beans.sortController;\n    this.serverSideRowModel = beans.rowModel;\n    this.listenerUtils = beans.ssrmListenerUtils;\n  }\n  postConstruct() {\n    if (!_isServerSideRowModel32(this.gos)) {\n      return;\n    }\n    this.addManagedEventListeners({ sortChanged: this.onSortChanged.bind(this) });\n  }\n  onSortChanged() {\n    const storeParams = this.serverSideRowModel.getParams();\n    if (!storeParams) {\n      return;\n    }\n    const newSortModel = this.sortController.getSortModel();\n    const oldSortModel = storeParams.sortModel;\n    const changedColumns = this.findChangedColumnsInSort(newSortModel, oldSortModel);\n    const valueColChanged = this.listenerUtils.isSortingWithValueColumn(changedColumns);\n    const secondaryColChanged = this.listenerUtils.isSortingWithSecondaryColumn(changedColumns);\n    const params = {\n      valueColChanged,\n      secondaryColChanged,\n      changedColumns\n    };\n    this.serverSideRowModel.refreshAfterSort(newSortModel, params);\n  }\n  // returns back all the cols that were effected by the sorting. eg if we were sorting by col A,\n  // and now we are sorting by col B, the list of impacted cols should be A and B. so if a cache\n  // is impacted by sorting on A or B then it needs to be refreshed. this includes where the cache\n  // was previously sorted by A and then the A sort now needs to be cleared.\n  findChangedColumnsInSort(newSortModel, oldSortModel) {\n    let allColsInBothSorts = [];\n    [newSortModel, oldSortModel].forEach((sortModel) => {\n      if (sortModel) {\n        const ids = sortModel.map((sm) => sm.colId);\n        allColsInBothSorts = allColsInBothSorts.concat(ids);\n      }\n    });\n    const differentSorts = (oldSortItem, newSortItem) => {\n      const oldSort = oldSortItem ? oldSortItem.sort : null;\n      const newSort = newSortItem ? newSortItem.sort : null;\n      return oldSort !== newSort;\n    };\n    const differentIndexes = (oldSortItem, newSortItem) => {\n      const oldIndex = oldSortItem ? oldSortModel.indexOf(oldSortItem) : -1;\n      const newIndex = newSortItem ? newSortModel.indexOf(newSortItem) : -1;\n      return oldIndex !== newIndex;\n    };\n    return allColsInBothSorts.filter((colId) => {\n      const oldSortItem = oldSortModel.find((sm) => sm.colId === colId);\n      const newSortItem = newSortModel.find((sm) => sm.colId === colId);\n      return differentSorts(oldSortItem, newSortItem) || differentIndexes(oldSortItem, newSortItem);\n    });\n  }\n};\nvar NodeManager = class extends BeanStub65 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmNodeManager\";\n    this.rowNodes = {};\n  }\n  addRowNode(rowNode) {\n    const id = rowNode.id;\n    if (this.rowNodes[id]) {\n      _warnOnce211(\n        `Duplicate node id ${rowNode.id}. Row IDs are provided via the getRowId() callback. Please modify the getRowId() callback code to provide unique row id values.`\n      );\n      _warnOnce211(\"first instance\", this.rowNodes[id].data);\n      _warnOnce211(\"second instance\", rowNode.data);\n    }\n    this.rowNodes[id] = rowNode;\n  }\n  removeNode(rowNode) {\n    const id = rowNode.id;\n    if (this.rowNodes[id]) {\n      this.rowNodes[id] = void 0;\n    }\n  }\n  destroy() {\n    this.clear();\n    super.destroy();\n  }\n  clear() {\n    this.rowNodes = {};\n    super.destroy();\n  }\n};\nvar FullStore = class extends RowNodeBlock {\n  constructor(ssrmParams, storeParams, parentRowNode) {\n    super(0);\n    this.nodeIdSequence = new NumberSequence();\n    this.info = {};\n    this.ssrmParams = ssrmParams;\n    this.parentRowNode = parentRowNode;\n    this.level = parentRowNode.level + 1;\n    this.groupLevel = ssrmParams.rowGroupCols ? this.level < ssrmParams.rowGroupCols.length : void 0;\n    this.leafGroup = ssrmParams.rowGroupCols ? this.level === ssrmParams.rowGroupCols.length - 1 : false;\n  }\n  wireBeans(beans) {\n    this.storeUtils = beans.ssrmStoreUtils;\n    this.blockUtils = beans.ssrmBlockUtils;\n    this.funcColsService = beans.funcColsService;\n    this.rowNodeBlockLoader = beans.rowNodeBlockLoader;\n    this.rowNodeSorter = beans.rowNodeSorter;\n    this.sortController = beans.sortController;\n    this.selectionService = beans.selectionService;\n    this.nodeManager = beans.ssrmNodeManager;\n    this.filterManager = beans.filterManager;\n    this.transactionManager = beans.ssrmTransactionManager;\n    this.serverSideRowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.usingTreeData = this.gos.get(\"treeData\");\n    this.nodeIdPrefix = this.blockUtils.createNodeIdPrefix(this.parentRowNode);\n    if (!this.usingTreeData && this.groupLevel) {\n      const groupColVo = this.ssrmParams.rowGroupCols[this.level];\n      this.groupField = groupColVo.field;\n      this.rowGroupColumn = this.funcColsService.getRowGroupColumns()[this.level];\n    }\n    let initialRowCount = 1;\n    const isRootStore = this.parentRowNode.level === -1;\n    const userInitialRowCount = this.storeUtils.getServerSideInitialRowCount();\n    if (isRootStore && userInitialRowCount != null) {\n      initialRowCount = userInitialRowCount;\n    }\n    this.initialiseRowNodes(initialRowCount);\n    this.rowNodeBlockLoader.addBlock(this);\n    this.addDestroyFunc(() => this.rowNodeBlockLoader.removeBlock(this));\n    this.postSortFunc = this.gos.getCallback(\"postSortRows\");\n    if (userInitialRowCount != null) {\n      this.eventService.dispatchEventOnce({\n        type: \"rowCountReady\"\n      });\n    }\n  }\n  destroy() {\n    this.destroyRowNodes();\n    super.destroy();\n  }\n  destroyRowNodes() {\n    this.blockUtils.destroyRowNodes(this.allRowNodes);\n    this.allRowNodes = [];\n    this.nodesAfterSort = [];\n    this.nodesAfterFilter = [];\n    this.allNodesMap = {};\n  }\n  initialiseRowNodes(loadingRowsCount, failedLoad = false) {\n    this.destroyRowNodes();\n    for (let i = 0; i < loadingRowsCount; i++) {\n      const loadingRowNode = this.blockUtils.createRowNode({\n        field: this.groupField,\n        group: this.groupLevel,\n        leafGroup: this.leafGroup,\n        level: this.level,\n        parent: this.parentRowNode,\n        rowGroupColumn: this.rowGroupColumn\n      });\n      if (failedLoad) {\n        loadingRowNode.failedLoad = true;\n      }\n      this.allRowNodes.push(loadingRowNode);\n      this.nodesAfterFilter.push(loadingRowNode);\n      this.nodesAfterSort.push(loadingRowNode);\n    }\n  }\n  getBlockStateJson() {\n    return {\n      id: this.nodeIdPrefix ? this.nodeIdPrefix : \"\",\n      state: this.getState()\n    };\n  }\n  loadFromDatasource() {\n    this.storeUtils.loadFromDatasource({\n      startRow: void 0,\n      endRow: void 0,\n      parentBlock: this,\n      parentNode: this.parentRowNode,\n      storeParams: this.ssrmParams,\n      success: this.success.bind(this, this.getVersion()),\n      fail: this.pageLoadFailed.bind(this, this.getVersion())\n    });\n  }\n  getStartRow() {\n    return 0;\n  }\n  getEndRow() {\n    return this.nodesAfterSort.length;\n  }\n  createDataNode(data, index) {\n    const rowNode = this.blockUtils.createRowNode({\n      field: this.groupField,\n      group: this.groupLevel,\n      leafGroup: this.leafGroup,\n      level: this.level,\n      parent: this.parentRowNode,\n      rowGroupColumn: this.rowGroupColumn\n    });\n    if (index != null) {\n      _insertIntoArray(this.allRowNodes, rowNode, index);\n    } else {\n      this.allRowNodes.push(rowNode);\n    }\n    const defaultId = this.prefixId(this.nodeIdSequence.next());\n    this.blockUtils.setDataIntoRowNode(rowNode, data, defaultId, void 0);\n    this.nodeManager.addRowNode(rowNode);\n    this.blockUtils.checkOpenByDefault(rowNode);\n    this.allNodesMap[rowNode.id] = rowNode;\n    return rowNode;\n  }\n  prefixId(id) {\n    if (this.nodeIdPrefix) {\n      return this.nodeIdPrefix + \"-\" + id;\n    } else {\n      return id.toString();\n    }\n  }\n  processServerFail() {\n    this.initialiseRowNodes(1, true);\n    this.fireStoreUpdatedEvent();\n    this.flushAsyncTransactions();\n  }\n  processServerResult(params) {\n    if (!this.isAlive()) {\n      return;\n    }\n    const info = params.groupLevelInfo;\n    if (info) {\n      Object.assign(this.info, info);\n    }\n    if (params.pivotResultFields) {\n      this.serverSideRowModel.generateSecondaryColumns(params.pivotResultFields);\n    }\n    const nodesToRecycle = this.allRowNodes.length > 0 ? this.allNodesMap : void 0;\n    this.allRowNodes = [];\n    this.nodesAfterSort = [];\n    this.nodesAfterFilter = [];\n    this.allNodesMap = {};\n    if (!params.rowData) {\n      _warnOnce38(\n        '\"params.data\" is missing from Server-Side Row Model success() callback. Please use the \"data\" attribute. If no data is returned, set an empty list.'\n      );\n    }\n    this.createOrRecycleNodes(nodesToRecycle, params.rowData);\n    if (nodesToRecycle) {\n      this.blockUtils.destroyRowNodes(_getAllValuesInObject(nodesToRecycle));\n    }\n    if (this.level === 0) {\n      this.eventService.dispatchEventOnce({\n        type: \"rowCountReady\"\n      });\n    }\n    this.filterAndSortNodes();\n    this.fireStoreUpdatedEvent();\n    this.flushAsyncTransactions();\n  }\n  createOrRecycleNodes(nodesToRecycle, rowData) {\n    if (!rowData) {\n      return;\n    }\n    const lookupNodeToRecycle = (data) => {\n      if (!nodesToRecycle) {\n        return void 0;\n      }\n      const getRowIdFunc = _getRowIdCallback(this.gos);\n      if (!getRowIdFunc) {\n        return void 0;\n      }\n      const parentKeys = this.parentRowNode.getRoute() ?? [];\n      const level = this.level;\n      const id = getRowIdFunc({\n        data,\n        parentKeys: parentKeys.length > 0 ? parentKeys : void 0,\n        level\n      });\n      const foundNode = nodesToRecycle[id];\n      if (!foundNode) {\n        return void 0;\n      }\n      delete nodesToRecycle[id];\n      return foundNode;\n    };\n    const recycleNode = (rowNode, dataItem) => {\n      this.allNodesMap[rowNode.id] = rowNode;\n      this.blockUtils.updateDataIntoRowNode(rowNode, dataItem);\n      this.allRowNodes.push(rowNode);\n    };\n    rowData.forEach((dataItem) => {\n      const nodeToRecycle = lookupNodeToRecycle(dataItem);\n      if (nodeToRecycle) {\n        recycleNode(nodeToRecycle, dataItem);\n      } else {\n        this.createDataNode(dataItem);\n      }\n    });\n  }\n  flushAsyncTransactions() {\n    window.setTimeout(() => this.transactionManager.flushAsyncTransactions(), 0);\n  }\n  filterAndSortNodes() {\n    this.filterRowNodes();\n    this.sortRowNodes();\n  }\n  sortRowNodes() {\n    const serverIsSorting = this.storeUtils.isServerSideSortAllLevels() || this.storeUtils.isServerSideSortOnServer();\n    const sortOptions = this.sortController.getSortOptions();\n    const noSortApplied = !sortOptions || sortOptions.length == 0;\n    if (serverIsSorting || noSortApplied) {\n      this.nodesAfterSort = this.nodesAfterFilter;\n      return;\n    }\n    this.nodesAfterSort = this.rowNodeSorter.doFullSort(this.nodesAfterFilter, sortOptions);\n    if (this.postSortFunc) {\n      const params = { nodes: this.nodesAfterSort };\n      this.postSortFunc(params);\n    }\n  }\n  filterRowNodes() {\n    const serverIsFiltering = !this.storeUtils.isServerSideOnlyRefreshFilteredGroups() || this.storeUtils.isServerSideFilterOnServer();\n    const groupLevel = this.groupLevel;\n    if (serverIsFiltering || groupLevel) {\n      this.nodesAfterFilter = this.allRowNodes;\n      return;\n    }\n    this.nodesAfterFilter = this.filterManager ? this.allRowNodes.filter((rowNode) => this.filterManager.doesRowPassFilter({ rowNode })) : this.allRowNodes;\n  }\n  clearDisplayIndexes() {\n    this.displayIndexStart = void 0;\n    this.displayIndexEnd = void 0;\n    this.allRowNodes.forEach((rowNode) => this.blockUtils.clearDisplayIndex(rowNode));\n  }\n  getDisplayIndexEnd() {\n    return this.displayIndexEnd;\n  }\n  isDisplayIndexInStore(displayIndex) {\n    if (this.getRowCount() === 0) {\n      return false;\n    }\n    return displayIndex >= this.displayIndexStart && displayIndex < this.displayIndexEnd;\n  }\n  setDisplayIndexes(displayIndexSeq, nextRowTop, uiLevel) {\n    this.displayIndexStart = displayIndexSeq.peek();\n    this.topPx = nextRowTop.value;\n    const visibleNodeIds = {};\n    this.nodesAfterSort.forEach((rowNode) => {\n      this.blockUtils.setDisplayIndex(rowNode, displayIndexSeq, nextRowTop, uiLevel);\n      visibleNodeIds[rowNode.id] = true;\n    });\n    this.allRowNodes.forEach((rowNode) => {\n      if (!visibleNodeIds[rowNode.id]) {\n        this.blockUtils.clearDisplayIndex(rowNode);\n      }\n    });\n    this.displayIndexEnd = displayIndexSeq.peek();\n    this.heightPx = nextRowTop.value - this.topPx;\n  }\n  forEachStoreDeep(callback, sequence = new NumberSequence()) {\n    callback(this, sequence.next());\n    this.allRowNodes.forEach((rowNode) => {\n      const childCache = rowNode.childStore;\n      if (childCache) {\n        childCache.forEachStoreDeep(callback, sequence);\n      }\n    });\n  }\n  forEachNodeDeep(callback, sequence = new NumberSequence()) {\n    this.allRowNodes.forEach((rowNode) => {\n      callback(rowNode, sequence.next());\n      const childCache = rowNode.childStore;\n      if (childCache) {\n        childCache.forEachNodeDeep(callback, sequence);\n      }\n    });\n  }\n  forEachNodeDeepAfterFilterAndSort(callback, sequence = new NumberSequence(), includeFooterNodes = false) {\n    this.nodesAfterSort.forEach((rowNode) => {\n      callback(rowNode, sequence.next());\n      const childCache = rowNode.childStore;\n      if (childCache) {\n        childCache.forEachNodeDeepAfterFilterAndSort(callback, sequence, includeFooterNodes);\n      }\n    });\n    if (includeFooterNodes && this.parentRowNode.sibling) {\n      callback(this.parentRowNode.sibling, sequence.next());\n    }\n  }\n  getRowUsingDisplayIndex(displayRowIndex) {\n    if (!this.isDisplayIndexInStore(displayRowIndex)) {\n      return void 0;\n    }\n    const res = this.blockUtils.binarySearchForDisplayIndex(displayRowIndex, this.nodesAfterSort);\n    return res;\n  }\n  getRowBounds(index) {\n    for (let i = 0; i < this.nodesAfterSort.length; i++) {\n      const rowNode = this.nodesAfterSort[i];\n      const res = this.blockUtils.extractRowBounds(rowNode, index);\n      if (res) {\n        return res;\n      }\n    }\n    return null;\n  }\n  isPixelInRange(pixel) {\n    return pixel >= this.topPx && pixel < this.topPx + this.heightPx;\n  }\n  getRowIndexAtPixel(pixel) {\n    const pixelBeforeThisStore = pixel <= this.topPx;\n    if (pixelBeforeThisStore) {\n      const firstNode = this.nodesAfterSort[0];\n      return firstNode.rowIndex;\n    }\n    const pixelAfterThisStore = pixel >= this.topPx + this.heightPx;\n    if (pixelAfterThisStore) {\n      const lastRowNode = this.nodesAfterSort[this.nodesAfterSort.length - 1];\n      if (!lastRowNode) {\n        return null;\n      }\n      const lastRowNodeBottomPx = lastRowNode.rowTop + lastRowNode.rowHeight;\n      if (pixel >= lastRowNodeBottomPx && lastRowNode.expanded) {\n        if (lastRowNode.childStore && lastRowNode.childStore.getRowCount() > 0) {\n          return lastRowNode.childStore.getRowIndexAtPixel(pixel);\n        }\n        if (lastRowNode.detailNode) {\n          return lastRowNode.detailNode.rowIndex;\n        }\n      }\n      return lastRowNode.rowIndex;\n    }\n    let res = null;\n    this.nodesAfterSort.forEach((rowNode) => {\n      const res2 = this.blockUtils.getIndexAtPixel(rowNode, pixel);\n      if (res2 != null) {\n        res = res2;\n      }\n    });\n    const pixelIsPastLastRow = res == null;\n    if (pixelIsPastLastRow) {\n      return this.displayIndexEnd - 1;\n    }\n    return res;\n  }\n  getChildStore(keys) {\n    return this.storeUtils.getChildStore(keys, this, (key) => {\n      const rowNode = this.allRowNodes.find((currentRowNode) => {\n        return currentRowNode.key == key;\n      });\n      return rowNode;\n    });\n  }\n  forEachChildStoreShallow(callback) {\n    this.allRowNodes.forEach((rowNode) => {\n      const childStore = rowNode.childStore;\n      if (childStore) {\n        callback(childStore);\n      }\n    });\n  }\n  refreshAfterFilter(params) {\n    const serverIsFiltering = this.storeUtils.isServerSideFilterOnServer();\n    const storeIsImpacted = this.storeUtils.isServerRefreshNeeded(\n      this.parentRowNode,\n      this.ssrmParams.rowGroupCols,\n      params\n    );\n    const serverIsFilteringAllLevels = !this.storeUtils.isServerSideOnlyRefreshFilteredGroups();\n    if (serverIsFilteringAllLevels || serverIsFiltering && storeIsImpacted) {\n      this.refreshStore(true);\n      this.sortRowNodes();\n      return;\n    }\n    this.filterRowNodes();\n    this.sortRowNodes();\n    this.forEachChildStoreShallow((store) => store.refreshAfterFilter(params));\n  }\n  refreshAfterSort(params) {\n    const serverIsSorting = this.storeUtils.isServerSideSortOnServer();\n    const storeIsImpacted = this.storeUtils.isServerRefreshNeeded(\n      this.parentRowNode,\n      this.ssrmParams.rowGroupCols,\n      params\n    );\n    const serverIsSortingAllLevels = this.storeUtils.isServerSideSortAllLevels();\n    if (serverIsSortingAllLevels || serverIsSorting && storeIsImpacted) {\n      this.refreshStore(true);\n      this.filterRowNodes();\n      return;\n    }\n    this.filterRowNodes();\n    this.sortRowNodes();\n    this.forEachChildStoreShallow((store) => store.refreshAfterSort(params));\n  }\n  applyTransaction(transaction) {\n    switch (this.getState()) {\n      case \"failed\":\n        return { status: ServerSideTransactionResultStatus.StoreLoadingFailed };\n      case \"loading\":\n        return { status: ServerSideTransactionResultStatus.StoreLoading };\n      case \"needsLoading\":\n        return { status: ServerSideTransactionResultStatus.StoreWaitingToLoad };\n    }\n    const applyCallback = this.gos.getCallback(\"isApplyServerSideTransaction\");\n    if (applyCallback) {\n      const params = {\n        transaction,\n        parentNode: this.parentRowNode,\n        groupLevelInfo: this.info\n      };\n      const apply = applyCallback(params);\n      if (!apply) {\n        return { status: ServerSideTransactionResultStatus.Cancelled };\n      }\n    }\n    const res = {\n      status: ServerSideTransactionResultStatus.Applied,\n      remove: [],\n      update: [],\n      add: []\n    };\n    const nodesToUnselect = [];\n    this.executeAdd(transaction, res);\n    this.executeRemove(transaction, res, nodesToUnselect);\n    this.executeUpdate(transaction, res, nodesToUnselect);\n    this.filterAndSortNodes();\n    this.updateSelection(nodesToUnselect);\n    return res;\n  }\n  updateSelection(nodesToUnselect) {\n    const selectionChanged = nodesToUnselect.length > 0;\n    if (selectionChanged) {\n      this.selectionService.setNodesSelected({\n        newValue: false,\n        nodes: nodesToUnselect,\n        suppressFinishActions: true,\n        clearSelection: false,\n        source: \"rowDataChanged\"\n      });\n      this.eventService.dispatchEvent({\n        type: \"selectionChanged\",\n        source: \"rowDataChanged\"\n      });\n    }\n  }\n  executeAdd(rowDataTran, rowNodeTransaction) {\n    const { add, addIndex } = rowDataTran;\n    if (_missingOrEmpty5(add)) {\n      return;\n    }\n    const useIndex = typeof addIndex === \"number\" && addIndex >= 0;\n    if (useIndex) {\n      add.reverse().forEach((item) => {\n        const newRowNode = this.createDataNode(item, addIndex);\n        rowNodeTransaction.add.push(newRowNode);\n      });\n    } else {\n      add.forEach((item) => {\n        const newRowNode = this.createDataNode(item);\n        rowNodeTransaction.add.push(newRowNode);\n      });\n    }\n  }\n  executeRemove(rowDataTran, rowNodeTransaction, nodesToUnselect) {\n    const { remove } = rowDataTran;\n    if (remove == null) {\n      return;\n    }\n    const rowIdsRemoved = {};\n    remove.forEach((item) => {\n      const rowNode = this.lookupRowNode(item);\n      if (!rowNode) {\n        return;\n      }\n      if (rowNode.isSelected()) {\n        nodesToUnselect.push(rowNode);\n      }\n      rowNode.clearRowTopAndRowIndex();\n      rowIdsRemoved[rowNode.id] = true;\n      delete this.allNodesMap[rowNode.id];\n      rowNodeTransaction.remove.push(rowNode);\n      this.nodeManager.removeNode(rowNode);\n    });\n    this.allRowNodes = this.allRowNodes.filter((rowNode) => !rowIdsRemoved[rowNode.id]);\n  }\n  executeUpdate(rowDataTran, rowNodeTransaction, nodesToUnselect) {\n    const { update } = rowDataTran;\n    if (update == null) {\n      return;\n    }\n    update.forEach((item) => {\n      const rowNode = this.lookupRowNode(item);\n      if (!rowNode) {\n        return;\n      }\n      this.blockUtils.updateDataIntoRowNode(rowNode, item);\n      if (!rowNode.selectable && rowNode.isSelected()) {\n        nodesToUnselect.push(rowNode);\n      }\n      rowNodeTransaction.update.push(rowNode);\n    });\n  }\n  lookupRowNode(data) {\n    const getRowIdFunc = _getRowIdCallback(this.gos);\n    if (getRowIdFunc != null) {\n      const parentKeys = this.parentRowNode.getRoute() ?? [];\n      const id = getRowIdFunc({\n        data,\n        parentKeys: parentKeys.length > 0 ? parentKeys : void 0,\n        level: this.level\n      });\n      const rowNode = this.allNodesMap[id];\n      if (!rowNode) {\n        _errorOnce5(`could not find row id=${id}, data item was not found for this id`);\n        return null;\n      }\n      return rowNode;\n    } else {\n      const rowNode = this.allRowNodes.find((currentRowNode) => currentRowNode.data === data);\n      if (!rowNode) {\n        _errorOnce5(`could not find data item as object was not found`, data);\n        return null;\n      }\n      return rowNode;\n    }\n  }\n  addStoreStates(result) {\n    result.push({\n      suppressInfiniteScroll: true,\n      route: this.parentRowNode.getRoute() ?? [],\n      rowCount: this.allRowNodes.length,\n      info: this.info\n    });\n    this.forEachChildStoreShallow((childStore) => childStore.addStoreStates(result));\n  }\n  refreshStore(purge) {\n    if (purge) {\n      const loadingRowsToShow = this.nodesAfterSort ? this.nodesAfterSort.length : 1;\n      this.initialiseRowNodes(loadingRowsToShow);\n    }\n    this.scheduleLoad();\n    this.fireStoreUpdatedEvent();\n  }\n  retryLoads() {\n    if (this.getState() === \"failed\") {\n      this.initialiseRowNodes(1);\n      this.scheduleLoad();\n    }\n    this.forEachChildStoreShallow((store) => store.retryLoads());\n  }\n  scheduleLoad() {\n    this.setStateWaitingToLoad();\n    this.rowNodeBlockLoader.checkBlockToLoad();\n  }\n  // gets called 1) row count changed 2) cache purged 3) items inserted\n  fireStoreUpdatedEvent() {\n    this.eventService.dispatchEvent({\n      type: \"storeUpdated\"\n    });\n  }\n  getRowCount() {\n    return this.nodesAfterSort.length;\n  }\n  getTopLevelRowDisplayedIndex(topLevelIndex) {\n    const rowNode = this.nodesAfterSort[topLevelIndex];\n    return rowNode.rowIndex;\n  }\n  isLastRowIndexKnown() {\n    return this.getState() == \"loaded\";\n  }\n  getRowNodesInRange(firstInRange, lastInRange) {\n    const result = [];\n    let inActiveRange = false;\n    if (_missing32(firstInRange)) {\n      inActiveRange = true;\n    }\n    this.nodesAfterSort.forEach((rowNode) => {\n      const hitFirstOrLast = rowNode === firstInRange || rowNode === lastInRange;\n      if (inActiveRange || hitFirstOrLast) {\n        result.push(rowNode);\n      }\n      if (hitFirstOrLast) {\n        inActiveRange = !inActiveRange;\n      }\n    });\n    const invalidRange = inActiveRange;\n    return invalidRange ? [] : result;\n  }\n  getStoreBounds() {\n    return {\n      topPx: this.topPx,\n      heightPx: this.heightPx\n    };\n  }\n};\nvar LazyBlockLoadingService = class extends BeanStub75 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"lazyBlockLoadingService\";\n    this.cacheLoadingNodesMap = /* @__PURE__ */ new Map();\n    this.isCheckQueued = false;\n    this.nextBlockToLoad = void 0;\n  }\n  wireBeans(beans) {\n    this.rowNodeBlockLoader = beans.rowNodeBlockLoader;\n    this.rowRenderer = beans.rowRenderer;\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.addManagedListeners(this.rowNodeBlockLoader, { blockLoaded: () => this.queueLoadCheck() });\n  }\n  subscribe(cache) {\n    this.cacheLoadingNodesMap.set(cache, /* @__PURE__ */ new Set());\n  }\n  unsubscribe(cache) {\n    this.cacheLoadingNodesMap.delete(cache);\n  }\n  /**\n   * Queues a microtask to check if any blocks need to be loaded.\n   */\n  queueLoadCheck() {\n    if (this.isCheckQueued) {\n      return;\n    }\n    this.isCheckQueued = true;\n    window.queueMicrotask(() => {\n      this.queueLoadAction();\n      this.isCheckQueued = false;\n    });\n  }\n  queueLoadAction() {\n    const nextBlockToLoad = this.getBlockToLoad();\n    if (!nextBlockToLoad) {\n      return;\n    }\n    const isSameBlock = this.nextBlockToLoad && this.nextBlockToLoad.cache === nextBlockToLoad.cache && this.nextBlockToLoad.index === nextBlockToLoad.index;\n    if (isSameBlock) {\n      return;\n    }\n    if (!this.nextBlockToLoad || !isSameBlock) {\n      this.nextBlockToLoad = nextBlockToLoad;\n      window.clearTimeout(this.loaderTimeout);\n      const startRow = Number(this.nextBlockToLoad.index);\n      const cache = this.nextBlockToLoad.cache;\n      const endRow = nextBlockToLoad.index + nextBlockToLoad.cache.getBlockSize();\n      this.loaderTimeout = window.setTimeout(() => {\n        if (!cache.isAlive()) {\n          return;\n        }\n        this.loaderTimeout = void 0;\n        this.attemptLoad(cache, startRow, endRow);\n        this.nextBlockToLoad = void 0;\n      }, this.gos.get(\"blockLoadDebounceMillis\"));\n    }\n  }\n  attemptLoad(cache, start, end) {\n    const availableLoadingCount = this.rowNodeBlockLoader.getAvailableLoadingCount();\n    if (availableLoadingCount != null && availableLoadingCount === 0) {\n      return;\n    }\n    this.rowNodeBlockLoader.registerLoads(1);\n    this.executeLoad(cache, start, end);\n    this.queueLoadCheck();\n  }\n  executeLoad(cache, startRow, endRow) {\n    const ssrmParams = cache.getSsrmParams();\n    const request = {\n      startRow,\n      endRow,\n      rowGroupCols: ssrmParams.rowGroupCols,\n      valueCols: ssrmParams.valueCols,\n      pivotCols: ssrmParams.pivotCols,\n      pivotMode: ssrmParams.pivotMode,\n      groupKeys: cache.store.getParentNode().getRoute() ?? [],\n      filterModel: ssrmParams.filterModel,\n      sortModel: ssrmParams.sortModel\n    };\n    const loadingNodes = this.cacheLoadingNodesMap.get(cache);\n    const removeNodesFromLoadingMap = () => {\n      for (let i = 0; i < endRow - startRow; i++) {\n        loadingNodes.delete(startRow + i);\n      }\n    };\n    const addNodesToLoadingMap = () => {\n      for (let i = 0; i < endRow - startRow; i++) {\n        loadingNodes.add(startRow + i);\n      }\n    };\n    const success = (params2) => {\n      this.rowNodeBlockLoader.loadComplete();\n      cache.onLoadSuccess(startRow, endRow - startRow, params2);\n      removeNodesFromLoadingMap();\n    };\n    const fail = () => {\n      this.rowNodeBlockLoader.loadComplete();\n      cache.onLoadFailed(startRow, endRow - startRow);\n      removeNodesFromLoadingMap();\n    };\n    const params = this.gos.addGridCommonParams({\n      request,\n      success,\n      fail,\n      parentNode: cache.store.getParentNode()\n    });\n    addNodesToLoadingMap();\n    cache.getSsrmParams().datasource?.getRows(params);\n  }\n  getBlockToLoad() {\n    const firstRowInViewport = this.rowRenderer.getFirstVirtualRenderedRow();\n    const lastRowInViewport = this.rowRenderer.getLastVirtualRenderedRow();\n    for (let i = firstRowInViewport; i <= lastRowInViewport; i++) {\n      const row = this.rowModel.getRow(i);\n      if (!row) {\n        continue;\n      }\n      const store = row.parent && row.parent.childStore;\n      if (!store || !(store instanceof LazyStore)) {\n        continue;\n      }\n      const cache = store.getCache();\n      const lazyNode = cache.getNodes().getBy(\"node\", row);\n      if (!lazyNode) {\n        continue;\n      }\n      const loadingNodes = this.cacheLoadingNodesMap.get(cache);\n      if (loadingNodes?.has(lazyNode.index)) {\n        continue;\n      }\n      if (row.__needsRefreshWhenVisible || row.stub && !row.failedLoad) {\n        return {\n          cache,\n          index: cache.getBlockStartIndex(lazyNode.index)\n        };\n      }\n    }\n    let cacheToRefresh = null;\n    let nodeToRefresh = null;\n    let nodeToRefreshDist = Number.MAX_SAFE_INTEGER;\n    for (const cache of this.cacheLoadingNodesMap.keys()) {\n      const nodesToRefresh = cache.getNodesToRefresh();\n      nodesToRefresh.forEach((node) => {\n        if (node.rowIndex == null) {\n          nodeToRefresh = node;\n          cacheToRefresh = cache;\n          return;\n        }\n        const lazyNode = cache.getNodes().getBy(\"node\", node);\n        if (!lazyNode) {\n          return;\n        }\n        const loadingNodes = this.cacheLoadingNodesMap.get(cache);\n        if (loadingNodes?.has(lazyNode.index)) {\n          return;\n        }\n        const distToViewportTop = Math.abs(firstRowInViewport - node.rowIndex);\n        const distToViewportBottom = Math.abs(node.rowIndex - lastRowInViewport);\n        if (distToViewportTop < nodeToRefreshDist) {\n          nodeToRefresh = node;\n          nodeToRefreshDist = distToViewportTop;\n          cacheToRefresh = cache;\n        }\n        if (distToViewportBottom < nodeToRefreshDist) {\n          nodeToRefresh = node;\n          nodeToRefreshDist = distToViewportBottom;\n          cacheToRefresh = cache;\n        }\n      });\n    }\n    if (!cacheToRefresh) {\n      return void 0;\n    }\n    const lazyCache = cacheToRefresh;\n    const lazyIndex = lazyCache.getNodes().getBy(\"node\", nodeToRefresh)?.index;\n    return lazyIndex == null ? void 0 : {\n      cache: lazyCache,\n      index: lazyCache.getBlockStartIndex(lazyIndex)\n    };\n  }\n  isRowLoading(cache, index) {\n    return this.cacheLoadingNodesMap.get(cache)?.has(index) ?? false;\n  }\n};\nLazyBlockLoadingService.DEFAULT_BLOCK_SIZE = 100;\nvar MultiIndexMap = class {\n  constructor(...indexes) {\n    if (indexes.length < 1) {\n      throw new Error(\"AG Grid: At least one index must be provided.\");\n    }\n    this.indexes = indexes;\n    this.maps = new Map(this.indexes.map((index) => [index, /* @__PURE__ */ new Map()]));\n  }\n  getSize() {\n    return this.maps.get(this.indexes[0]).size;\n  }\n  getBy(index, key) {\n    const map = this.maps.get(index);\n    if (!map) {\n      throw new Error(`AG Grid: ${String(index)} not found`);\n    }\n    return map.get(key);\n  }\n  set(item) {\n    this.indexes.forEach((index) => {\n      const map = this.maps.get(index);\n      if (!map) {\n        throw new Error(`AG Grid: ${String(index)} not found`);\n      }\n      map.set(item[index], item);\n    });\n  }\n  delete(item) {\n    this.indexes.forEach((index) => {\n      const map = this.maps.get(index);\n      if (!map) {\n        throw new Error(`AG Grid: ${String(index)} not found`);\n      }\n      map.delete(item[index]);\n    });\n  }\n  clear() {\n    this.maps.forEach((map) => map.clear());\n  }\n  getIterator(index) {\n    const map = this.maps.get(index);\n    if (!map) {\n      throw new Error(`AG Grid: ${String(index)} not found`);\n    }\n    return map.values();\n  }\n  forEach(callback) {\n    const iterator = this.getIterator(this.indexes[0]);\n    let pointer;\n    while (pointer = iterator.next()) {\n      if (pointer.done)\n        break;\n      callback(pointer.value);\n    }\n  }\n  find(callback) {\n    const iterator = this.getIterator(this.indexes[0]);\n    let pointer;\n    while (pointer = iterator.next()) {\n      if (pointer.done)\n        break;\n      if (callback(pointer.value)) {\n        return pointer.value;\n      }\n    }\n  }\n  filter(predicate) {\n    const iterator = this.getIterator(this.indexes[0]);\n    let pointer;\n    const result = [];\n    while (pointer = iterator.next()) {\n      if (pointer.done)\n        break;\n      if (predicate(pointer.value)) {\n        result.push(pointer.value);\n      }\n    }\n    return result;\n  }\n};\nvar LazyCache = class extends BeanStub83 {\n  constructor(store, numberOfRows, isLastRowKnown, storeParams) {\n    super();\n    this.live = true;\n    this.removedNodeCache = /* @__PURE__ */ new Map();\n    this.store = store;\n    this.numberOfRows = numberOfRows;\n    this.isLastRowKnown = isLastRowKnown;\n    this.storeParams = storeParams;\n  }\n  wireBeans(beans) {\n    this.rowRenderer = beans.rowRenderer;\n    this.blockUtils = beans.ssrmBlockUtils;\n    this.focusService = beans.focusService;\n    this.nodeManager = beans.ssrmNodeManager;\n    this.serverSideRowModel = beans.rowModel;\n    this.rowNodeSorter = beans.rowNodeSorter;\n    this.sortController = beans.sortController;\n    this.lazyBlockLoadingService = beans.lazyBlockLoadingService;\n  }\n  postConstruct() {\n    this.lazyBlockLoadingService.subscribe(this);\n    this.nodeMap = new MultiIndexMap(\"index\", \"id\", \"node\");\n    this.nodeDisplayIndexMap = /* @__PURE__ */ new Map();\n    this.nodesToRefresh = /* @__PURE__ */ new Set();\n    this.defaultNodeIdPrefix = this.blockUtils.createNodeIdPrefix(this.store.getParentNode());\n    this.getRowIdFunc = _getRowIdCallback2(this.gos);\n    this.isMasterDetail = this.gos.get(\"masterDetail\");\n  }\n  destroy() {\n    this.lazyBlockLoadingService.unsubscribe(this);\n    this.numberOfRows = 0;\n    this.nodeMap.forEach((node) => this.blockUtils.destroyRowNode(node.node));\n    this.nodeMap.clear();\n    this.nodeDisplayIndexMap.clear();\n    this.nodesToRefresh.clear();\n    this.live = false;\n    super.destroy();\n  }\n  /**\n   * Get the row node for a specific display index from this store\n   * @param displayIndex the display index of the node to find\n   * @returns undefined if the node is not in the store bounds, otherwise will always return a node\n   */\n  getRowByDisplayIndex(displayIndex) {\n    if (!this.store.isDisplayIndexInStore(displayIndex)) {\n      return void 0;\n    }\n    const node = this.nodeDisplayIndexMap.get(displayIndex);\n    if (node) {\n      if (node.stub || node.__needsRefreshWhenVisible) {\n        this.lazyBlockLoadingService.queueLoadCheck();\n      }\n      return node;\n    }\n    const hideOpenGroups = this.gos.get(\"groupHideOpenParents\") || this.gos.get(\"groupAllowUnbalanced\");\n    if (hideOpenGroups) {\n      const nextParent = this.nodeMap.find(\n        (lazyNode) => !!lazyNode.node.childStore?.isDisplayIndexInStore(displayIndex)\n      );\n      if (nextParent) {\n        return nextParent.node.childStore?.getRowUsingDisplayIndex(displayIndex);\n      }\n    }\n    if (displayIndex === this.store.getDisplayIndexStart()) {\n      return this.createStubNode(0, displayIndex);\n    }\n    const contiguouslyPreviousNode = this.nodeDisplayIndexMap.get(displayIndex - 1);\n    if (contiguouslyPreviousNode) {\n      if (this.isMasterDetail && contiguouslyPreviousNode.master && contiguouslyPreviousNode.expanded) {\n        return contiguouslyPreviousNode.detailNode;\n      }\n      if (contiguouslyPreviousNode.expanded && contiguouslyPreviousNode.childStore?.isDisplayIndexInStore(displayIndex)) {\n        return contiguouslyPreviousNode.childStore?.getRowUsingDisplayIndex(displayIndex);\n      }\n      const lazyCacheNode = this.nodeMap.getBy(\"node\", contiguouslyPreviousNode);\n      return this.createStubNode(lazyCacheNode.index + 1, displayIndex);\n    }\n    const adjacentNodes = this.getSurroundingNodesByDisplayIndex(displayIndex);\n    if (adjacentNodes == null) {\n      const storeIndexFromEndIndex2 = this.store.getRowCount() - (this.store.getDisplayIndexEnd() - displayIndex);\n      return this.createStubNode(storeIndexFromEndIndex2, displayIndex);\n    }\n    const { previousNode, nextNode } = adjacentNodes;\n    if (previousNode && previousNode.node.expanded && previousNode.node.childStore?.isDisplayIndexInStore(displayIndex)) {\n      return previousNode.node.childStore?.getRowUsingDisplayIndex(displayIndex);\n    }\n    if (nextNode) {\n      const displayIndexDiff = nextNode.node.rowIndex - displayIndex;\n      const newStoreIndex = nextNode.index - displayIndexDiff;\n      return this.createStubNode(newStoreIndex, displayIndex);\n    }\n    const storeIndexFromEndIndex = this.store.getRowCount() - (this.store.getDisplayIndexEnd() - displayIndex);\n    return this.createStubNode(storeIndexFromEndIndex, displayIndex);\n  }\n  /**\n   * Used for creating and positioning a stub node without firing a store updated event\n   */\n  createStubNode(storeIndex, displayIndex) {\n    const rowBounds = this.store.getRowBounds(displayIndex);\n    const newNode = this.createRowAtIndex(storeIndex, null, (node) => {\n      node.setRowIndex(displayIndex);\n      node.setRowTop(rowBounds.rowTop);\n      this.nodeDisplayIndexMap.set(displayIndex, node);\n    });\n    if (storeIndex === 0 && this.gos.get(\"groupHideOpenParents\")) {\n      const parentGroupData = this.store.getParentNode().groupData;\n      for (const key in parentGroupData) {\n        newNode.setGroupValue(key, parentGroupData[key]);\n      }\n    }\n    this.lazyBlockLoadingService.queueLoadCheck();\n    return newNode;\n  }\n  /**\n   * @param index The row index relative to this store\n   * @returns A rowNode at the given store index\n   */\n  getRowByStoreIndex(index) {\n    return this.nodeMap.getBy(\"index\", index)?.node;\n  }\n  /**\n   * Given a number of rows, skips through the given sequence & row top reference (using default row height)\n   * @param numberOfRowsToSkip number of rows to skip over in the given sequence\n   * @param displayIndexSeq the sequence in which to skip\n   * @param nextRowTop the row top reference in which to skip\n   */\n  skipDisplayIndexes(numberOfRowsToSkip, displayIndexSeq, nextRowTop) {\n    if (numberOfRowsToSkip === 0) {\n      return;\n    }\n    const defaultRowHeight = _getRowHeightAsNumber2(this.gos);\n    displayIndexSeq.skip(numberOfRowsToSkip);\n    nextRowTop.value += numberOfRowsToSkip * defaultRowHeight;\n  }\n  /**\n   * @param displayIndexSeq the number sequence for generating the display index of each row\n   * @param nextRowTop an object containing the next row top value intended to be modified by ref per row\n   */\n  setDisplayIndexes(displayIndexSeq, nextRowTop, uiLevel) {\n    this.nodeDisplayIndexMap.clear();\n    const orderedMap = {};\n    this.nodeMap.forEach((lazyNode) => {\n      orderedMap[lazyNode.index] = lazyNode.node;\n    });\n    let lastIndex = -1;\n    for (const stringIndex in orderedMap) {\n      const node = orderedMap[stringIndex];\n      const numericIndex = Number(stringIndex);\n      const numberOfRowsToSkip2 = numericIndex - 1 - lastIndex;\n      this.skipDisplayIndexes(numberOfRowsToSkip2, displayIndexSeq, nextRowTop);\n      const isFirstChild = numericIndex === 0;\n      node.setFirstChild(isFirstChild);\n      if (isFirstChild && this.gos.get(\"groupHideOpenParents\")) {\n        const parentGroupData = this.store.getParentNode().groupData;\n        for (const key in parentGroupData) {\n          node.setGroupValue(key, isFirstChild ? parentGroupData[key] : void 0);\n        }\n      }\n      this.blockUtils.setDisplayIndex(node, displayIndexSeq, nextRowTop, uiLevel);\n      if (node.rowIndex != null) {\n        this.nodeDisplayIndexMap.set(node.rowIndex, node);\n      }\n      lastIndex = numericIndex;\n    }\n    const numberOfRowsToSkip = this.numberOfRows - 1 - lastIndex;\n    this.skipDisplayIndexes(numberOfRowsToSkip, displayIndexSeq, nextRowTop);\n    this.purgeExcessRows();\n  }\n  getRowCount() {\n    return this.numberOfRows;\n  }\n  setRowCount(rowCount, isLastRowIndexKnown) {\n    if (rowCount < 0) {\n      throw new Error(\"AG Grid: setRowCount can only accept a positive row count.\");\n    }\n    this.numberOfRows = rowCount;\n    if (isLastRowIndexKnown != null) {\n      this.isLastRowKnown = isLastRowIndexKnown;\n      if (isLastRowIndexKnown === false) {\n        this.numberOfRows += 1;\n      }\n    }\n    this.fireStoreUpdatedEvent();\n  }\n  getNodes() {\n    return this.nodeMap;\n  }\n  getNodeCachedByDisplayIndex(displayIndex) {\n    return this.nodeDisplayIndexMap.get(displayIndex) ?? null;\n  }\n  getNodesToRefresh() {\n    return this.nodesToRefresh;\n  }\n  /**\n   * @returns the previous and next loaded row nodes surrounding the given display index\n   */\n  getSurroundingNodesByDisplayIndex(displayIndex) {\n    let nextNode;\n    let previousNode;\n    this.nodeMap.forEach((lazyNode) => {\n      if (displayIndex > lazyNode.node.rowIndex) {\n        if (previousNode == null || previousNode.node.rowIndex < lazyNode.node.rowIndex) {\n          previousNode = lazyNode;\n        }\n        return;\n      }\n      if (nextNode == null || nextNode.node.rowIndex > lazyNode.node.rowIndex) {\n        nextNode = lazyNode;\n        return;\n      }\n    });\n    if (!previousNode && !nextNode)\n      return null;\n    return { previousNode, nextNode };\n  }\n  /**\n   * Get or calculate the display index for a given store index\n   * @param storeIndex the rows index within this store\n   * @returns the rows visible display index relative to the grid\n   */\n  getDisplayIndexFromStoreIndex(storeIndex) {\n    const nodeAtIndex = this.nodeMap.getBy(\"index\", storeIndex);\n    if (nodeAtIndex) {\n      return nodeAtIndex.node.rowIndex;\n    }\n    let nextNode;\n    let previousNode;\n    this.nodeMap.forEach((lazyNode) => {\n      if (storeIndex > lazyNode.index) {\n        if (previousNode == null || previousNode.index < lazyNode.index) {\n          previousNode = lazyNode;\n        }\n        return;\n      }\n      if (nextNode == null || nextNode.index > lazyNode.index) {\n        nextNode = lazyNode;\n        return;\n      }\n    });\n    if (!nextNode) {\n      return this.store.getDisplayIndexEnd() - (this.numberOfRows - storeIndex);\n    }\n    if (!previousNode) {\n      return this.store.getDisplayIndexStart() + storeIndex;\n    }\n    const storeIndexDiff = storeIndex - previousNode.index;\n    const previousDisplayIndex = previousNode.node.childStore?.getDisplayIndexEnd() ?? previousNode.node.rowIndex;\n    return previousDisplayIndex + storeIndexDiff;\n  }\n  /**\n   * Creates a new row and inserts it at the given index\n   * @param atStoreIndex the node index relative to this store\n   * @param data the data object to populate the node with\n   * @returns the new row node\n   */\n  createRowAtIndex(atStoreIndex, data, createNodeCallback) {\n    const lazyNode = this.nodeMap.getBy(\"index\", atStoreIndex);\n    if (lazyNode) {\n      const { node } = lazyNode;\n      node.__needsRefreshWhenVisible = false;\n      if (this.doesNodeMatch(data, node)) {\n        this.blockUtils.updateDataIntoRowNode(node, data);\n        this.nodesToRefresh.delete(node);\n        return node;\n      }\n      if (this.getRowIdFunc == null && node.hasChildren() && node.expanded) {\n        this.nodesToRefresh.delete(node);\n        return node;\n      }\n      this.destroyRowAtIndex(atStoreIndex);\n    }\n    if (data && this.getRowIdFunc != null) {\n      const id = this.getRowId(data);\n      const deletedNode = id && this.removedNodeCache?.get(id);\n      if (deletedNode) {\n        this.removedNodeCache?.delete(id);\n        this.blockUtils.updateDataIntoRowNode(deletedNode, data);\n        this.nodeMap.set({\n          id: deletedNode.id,\n          node: deletedNode,\n          index: atStoreIndex\n        });\n        this.nodesToRefresh.delete(deletedNode);\n        deletedNode.__needsRefreshWhenVisible = false;\n        return deletedNode;\n      }\n      const lazyNode2 = this.nodeMap.getBy(\"id\", id);\n      if (lazyNode2) {\n        this.nodeMap.delete(lazyNode2);\n        const { node, index } = lazyNode2;\n        this.blockUtils.updateDataIntoRowNode(node, data);\n        this.nodeMap.set({\n          id: node.id,\n          node,\n          index: atStoreIndex\n        });\n        this.nodesToRefresh.delete(node);\n        node.__needsRefreshWhenVisible = false;\n        if (this.getBlockStartIndex(index) === this.getBlockStartIndex(atStoreIndex)) {\n          return node;\n        }\n        this.markBlockForVerify(index);\n        return node;\n      }\n    }\n    const newNode = this.blockUtils.createRowNode(this.store.getRowDetails());\n    if (data != null) {\n      const defaultId = this.getPrefixedId(this.store.getIdSequence().next());\n      this.blockUtils.setDataIntoRowNode(newNode, data, defaultId, void 0);\n      this.serverSideRowModel.setPaused(true);\n      this.blockUtils.checkOpenByDefault(newNode);\n      this.serverSideRowModel.setPaused(false);\n      this.nodeManager.addRowNode(newNode);\n    }\n    this.nodeMap.set({\n      id: newNode.id,\n      node: newNode,\n      index: atStoreIndex\n    });\n    if (createNodeCallback) {\n      createNodeCallback(newNode);\n    }\n    return newNode;\n  }\n  getBlockStates() {\n    const blockCounts = {};\n    const blockStates = {};\n    this.nodeMap.forEach(({ node, index }) => {\n      const blockStart = this.getBlockStartIndex(index);\n      if (!node.stub && !node.failedLoad) {\n        blockCounts[blockStart] = (blockCounts[blockStart] ?? 0) + 1;\n      }\n      let rowState = \"loaded\";\n      if (node.failedLoad) {\n        rowState = \"failed\";\n      } else if (this.lazyBlockLoadingService.isRowLoading(this, blockStart)) {\n        rowState = \"loading\";\n      } else if (this.nodesToRefresh.has(node) || node.stub) {\n        rowState = \"needsLoading\";\n      }\n      if (!blockStates[blockStart]) {\n        blockStates[blockStart] = /* @__PURE__ */ new Set();\n      }\n      blockStates[blockStart].add(rowState);\n    });\n    const statePriorityMap = {\n      loading: 4,\n      failed: 3,\n      needsLoading: 2,\n      loaded: 1\n    };\n    const blockPrefix = this.blockUtils.createNodeIdPrefix(this.store.getParentNode());\n    const results = {};\n    Object.entries(blockStates).forEach(([blockStart, uniqueStates]) => {\n      const sortedStates = [...uniqueStates].sort(\n        (a, b) => (statePriorityMap[a] ?? 0) - (statePriorityMap[b] ?? 0)\n      );\n      const priorityState = sortedStates[0];\n      const blockNumber = Number(blockStart) / this.getBlockSize();\n      const blockId = blockPrefix ? `${blockPrefix}-${blockNumber}` : String(blockNumber);\n      results[blockId] = {\n        blockNumber,\n        startRow: Number(blockStart),\n        endRow: Number(blockStart) + this.getBlockSize(),\n        pageStatus: priorityState,\n        loadedRowCount: blockCounts[blockStart] ?? 0\n      };\n    });\n    return results;\n  }\n  destroyRowAtIndex(atStoreIndex) {\n    const lazyNode = this.nodeMap.getBy(\"index\", atStoreIndex);\n    if (!lazyNode) {\n      return;\n    }\n    this.nodeMap.delete(lazyNode);\n    this.nodeDisplayIndexMap.delete(lazyNode.node.rowIndex);\n    if (this.nodesToRefresh.size > 0) {\n      this.removedNodeCache.set(lazyNode.node.id, lazyNode.node);\n    } else {\n      this.blockUtils.destroyRowNode(lazyNode.node);\n    }\n    this.nodesToRefresh.delete(lazyNode.node);\n  }\n  getSsrmParams() {\n    return this.store.getSsrmParams();\n  }\n  /**\n   * @param id the base id to be prefixed\n   * @returns a node id with prefix if required\n   */\n  getPrefixedId(id) {\n    if (this.defaultNodeIdPrefix) {\n      return this.defaultNodeIdPrefix + \"-\" + id;\n    } else {\n      return id.toString();\n    }\n  }\n  markBlockForVerify(rowIndex) {\n    const [start, end] = this.getBlockBounds(rowIndex);\n    const lazyNodesInRange = this.nodeMap.filter((lazyNode) => lazyNode.index >= start && lazyNode.index < end);\n    lazyNodesInRange.forEach(({ node }) => {\n      node.__needsRefreshWhenVisible = true;\n    });\n  }\n  doesNodeMatch(data, node) {\n    if (node.stub) {\n      return false;\n    }\n    const id = this.getRowId(data);\n    return id === null ? node.data === data : node.id === id;\n  }\n  /**\n   * Deletes any stub nodes not within the given range\n   */\n  purgeStubsOutsideOfViewport() {\n    const firstRow = this.rowRenderer.getFirstVirtualRenderedRow();\n    const lastRow = this.rowRenderer.getLastVirtualRenderedRow();\n    const firstRowBlockStart = this.getBlockStartIndex(firstRow);\n    const [, lastRowBlockEnd] = this.getBlockBounds(lastRow);\n    this.nodeMap.forEach((lazyNode) => {\n      if (this.lazyBlockLoadingService.isRowLoading(this, lazyNode.index) || lazyNode.node.failedLoad) {\n        return;\n      }\n      if (lazyNode.node.stub && (lazyNode.index < firstRowBlockStart || lazyNode.index > lastRowBlockEnd)) {\n        this.destroyRowAtIndex(lazyNode.index);\n      }\n    });\n  }\n  getBlocksDistanceFromRow(nodes, otherDisplayIndex) {\n    const blockDistanceToMiddle = {};\n    nodes.forEach(({ node, index }) => {\n      const [blockStart, blockEnd] = this.getBlockBounds(index);\n      if (blockStart in blockDistanceToMiddle) {\n        return;\n      }\n      const distStart = Math.abs(node.rowIndex - otherDisplayIndex);\n      let distEnd;\n      const lastLazyNode = this.nodeMap.getBy(\"index\", [blockEnd - 1]);\n      if (lastLazyNode)\n        distEnd = Math.abs(lastLazyNode.node.rowIndex - otherDisplayIndex);\n      const farthest = distEnd == null || distStart < distEnd ? distStart : distEnd;\n      blockDistanceToMiddle[blockStart] = farthest;\n    });\n    return Object.entries(blockDistanceToMiddle);\n  }\n  purgeExcessRows() {\n    this.purgeStubsOutsideOfViewport();\n    if (this.store.getDisplayIndexEnd() == null || this.storeParams.maxBlocksInCache == null) {\n      return;\n    }\n    const firstRowInViewport = this.rowRenderer.getFirstVirtualRenderedRow();\n    const lastRowInViewport = this.rowRenderer.getLastVirtualRenderedRow();\n    const allLoadedBlocks = /* @__PURE__ */ new Set();\n    const blocksInViewport = /* @__PURE__ */ new Set();\n    this.nodeMap.forEach(({ index, node }) => {\n      const blockStart = this.getBlockStartIndex(index);\n      allLoadedBlocks.add(blockStart);\n      const isInViewport = node.rowIndex >= firstRowInViewport && node.rowIndex <= lastRowInViewport;\n      if (isInViewport) {\n        blocksInViewport.add(blockStart);\n      }\n    });\n    const numberOfBlocksToRetain = Math.max(blocksInViewport.size, this.storeParams.maxBlocksInCache ?? 0);\n    const loadedBlockCount = allLoadedBlocks.size;\n    const blocksToRemove = loadedBlockCount - numberOfBlocksToRetain;\n    if (blocksToRemove <= 0) {\n      return;\n    }\n    let firstRowBlockStart = Number.MAX_SAFE_INTEGER;\n    let lastRowBlockStart = Number.MIN_SAFE_INTEGER;\n    blocksInViewport.forEach((blockStart) => {\n      if (firstRowBlockStart > blockStart) {\n        firstRowBlockStart = blockStart;\n      }\n      if (lastRowBlockStart < blockStart) {\n        lastRowBlockStart = blockStart;\n      }\n    });\n    const disposableNodes = this.nodeMap.filter(({ node, index }) => {\n      const rowBlockStart = this.getBlockStartIndex(index);\n      const rowBlockInViewport = rowBlockStart >= firstRowBlockStart && rowBlockStart <= lastRowBlockStart;\n      return !rowBlockInViewport && !this.isNodeCached(node);\n    });\n    if (disposableNodes.length === 0) {\n      return;\n    }\n    const midViewportRow = firstRowInViewport + (lastRowInViewport - firstRowInViewport) / 2;\n    const blockDistanceArray = this.getBlocksDistanceFromRow(disposableNodes, midViewportRow);\n    const blockSize = this.getBlockSize();\n    blockDistanceArray.sort((a, b) => Math.sign(b[1] - a[1]));\n    for (let i = 0; i < Math.min(blocksToRemove, blockDistanceArray.length); i++) {\n      const blockStart = Number(blockDistanceArray[i][0]);\n      for (let x = blockStart; x < blockStart + blockSize; x++) {\n        const lazyNode = this.nodeMap.getBy(\"index\", x);\n        if (!lazyNode || this.isNodeCached(lazyNode.node)) {\n          continue;\n        }\n        this.destroyRowAtIndex(x);\n      }\n    }\n  }\n  isNodeFocused(node) {\n    const focusedCell = this.focusService.getFocusCellToUseAfterRefresh();\n    if (!focusedCell) {\n      return false;\n    }\n    if (focusedCell.rowPinned != null) {\n      return false;\n    }\n    const hasFocus = focusedCell.rowIndex === node.rowIndex;\n    return hasFocus;\n  }\n  isNodeCached(node) {\n    const isUnbalancedNode = this.gos.get(\"groupAllowUnbalanced\") && node.key === \"\";\n    return node.isExpandable() && node.expanded || this.isNodeFocused(node) || isUnbalancedNode;\n  }\n  extractDuplicateIds(rows) {\n    if (this.getRowIdFunc == null) {\n      return [];\n    }\n    const newIds = /* @__PURE__ */ new Set();\n    const duplicates = /* @__PURE__ */ new Set();\n    rows.forEach((data) => {\n      const id = this.getRowId(data);\n      if (newIds.has(id)) {\n        duplicates.add(id);\n        return;\n      }\n      newIds.add(id);\n    });\n    return [...duplicates];\n  }\n  onLoadSuccess(firstRowIndex, numberOfRowsExpected, response) {\n    if (!this.live)\n      return;\n    const info = response.groupLevelInfo;\n    this.store.setStoreInfo(info);\n    if (this.getRowIdFunc != null) {\n      const duplicates = this.extractDuplicateIds(response.rowData);\n      if (duplicates.length > 0) {\n        const duplicateIdText = duplicates.join(\", \");\n        _warnOnce45(\n          `Unable to display rows as duplicate row ids (${duplicateIdText}) were returned by the getRowId callback. Please modify the getRowId callback to provide unique ids.`\n        );\n        this.onLoadFailed(firstRowIndex, numberOfRowsExpected);\n        return;\n      }\n    }\n    if (response.pivotResultFields) {\n      this.serverSideRowModel.generateSecondaryColumns(response.pivotResultFields);\n    }\n    const wasRefreshing = this.nodesToRefresh.size > 0;\n    response.rowData.forEach((data, responseRowIndex) => {\n      const rowIndex = firstRowIndex + responseRowIndex;\n      const nodeFromCache = this.nodeMap.getBy(\"index\", rowIndex);\n      if (nodeFromCache?.node?.stub) {\n        this.createRowAtIndex(rowIndex, data);\n        return;\n      }\n      if (nodeFromCache && this.doesNodeMatch(data, nodeFromCache.node)) {\n        this.blockUtils.updateDataIntoRowNode(nodeFromCache.node, data);\n        this.nodesToRefresh.delete(nodeFromCache.node);\n        nodeFromCache.node.__needsRefreshWhenVisible = false;\n        return;\n      }\n      this.createRowAtIndex(rowIndex, data);\n    });\n    if (response.rowCount != void 0 && response.rowCount !== -1) {\n      this.numberOfRows = response.rowCount;\n      this.isLastRowKnown = true;\n    } else if (numberOfRowsExpected > response.rowData.length) {\n      this.numberOfRows = firstRowIndex + response.rowData.length;\n      this.isLastRowKnown = true;\n    } else if (!this.isLastRowKnown) {\n      const lastInferredRow = firstRowIndex + response.rowData.length + 1;\n      if (lastInferredRow > this.numberOfRows) {\n        this.numberOfRows = lastInferredRow;\n      }\n    }\n    if (this.isLastRowKnown) {\n      const lazyNodesAfterStoreEnd = this.nodeMap.filter((lazyNode) => lazyNode.index >= this.numberOfRows);\n      lazyNodesAfterStoreEnd.forEach((lazyNode) => this.destroyRowAtIndex(lazyNode.index));\n    }\n    this.fireStoreUpdatedEvent();\n    const finishedRefreshing = this.nodesToRefresh.size === 0;\n    if (wasRefreshing && finishedRefreshing) {\n      this.fireRefreshFinishedEvent();\n    }\n  }\n  fireRefreshFinishedEvent() {\n    const finishedRefreshing = this.nodesToRefresh.size === 0;\n    if (!finishedRefreshing) {\n      return;\n    }\n    this.removedNodeCache.forEach((node) => {\n      this.blockUtils.destroyRowNode(node);\n    });\n    this.removedNodeCache = /* @__PURE__ */ new Map();\n    this.store.fireRefreshFinishedEvent();\n  }\n  /**\n   * @returns true if all rows are loaded\n   */\n  isStoreFullyLoaded() {\n    const knowsSize = this.isLastRowKnown;\n    const hasCorrectRowCount = this.nodeMap.getSize() === this.numberOfRows;\n    if (!knowsSize || !hasCorrectRowCount) {\n      return;\n    }\n    if (this.nodesToRefresh.size > 0) {\n      return;\n    }\n    let index = -1;\n    const firstOutOfPlaceNode = this.nodeMap.find((lazyNode) => {\n      index += 1;\n      if (lazyNode.index !== index) {\n        return true;\n      }\n      if (lazyNode.node.__needsRefreshWhenVisible) {\n        return true;\n      }\n      if (lazyNode.node.stub) {\n        return true;\n      }\n      return false;\n    });\n    return firstOutOfPlaceNode == null;\n  }\n  isLastRowIndexKnown() {\n    return this.isLastRowKnown;\n  }\n  onLoadFailed(firstRowIndex, numberOfRowsExpected) {\n    if (!this.live)\n      return;\n    const wasRefreshing = this.nodesToRefresh.size > 0;\n    for (let i = firstRowIndex; i < firstRowIndex + numberOfRowsExpected && i < this.getRowCount(); i++) {\n      let { node } = this.nodeMap.getBy(\"index\", i) ?? {};\n      if (node) {\n        this.nodesToRefresh.delete(node);\n      }\n      if (!node || !node.stub) {\n        if (node && !node.stub) {\n          this.destroyRowAtIndex(i);\n        }\n        node = this.createRowAtIndex(i);\n      }\n      node.__needsRefreshWhenVisible = false;\n      node.failedLoad = true;\n    }\n    const finishedRefreshing = this.nodesToRefresh.size === 0;\n    if (wasRefreshing && finishedRefreshing) {\n      this.fireRefreshFinishedEvent();\n    }\n    this.fireStoreUpdatedEvent();\n  }\n  markNodesForRefresh() {\n    this.nodeMap.forEach((lazyNode) => {\n      if (lazyNode.node.stub && !lazyNode.node.failedLoad) {\n        return;\n      }\n      this.nodesToRefresh.add(lazyNode.node);\n    });\n    this.lazyBlockLoadingService.queueLoadCheck();\n    if (this.isLastRowKnown && this.numberOfRows === 0) {\n      this.numberOfRows = 1;\n      this.isLastRowKnown = false;\n      this.fireStoreUpdatedEvent();\n    }\n  }\n  isNodeInCache(id) {\n    return !!this.nodeMap.getBy(\"id\", id);\n  }\n  // gets called 1) row count changed 2) cache purged 3) items inserted\n  fireStoreUpdatedEvent() {\n    if (!this.live) {\n      return;\n    }\n    this.store.fireStoreUpdatedEvent();\n  }\n  getRowId(data) {\n    if (this.getRowIdFunc == null) {\n      return null;\n    }\n    const { level } = this.store.getRowDetails();\n    const parentKeys = this.store.getParentNode().getRoute() ?? [];\n    return this.getRowIdFunc({\n      data,\n      parentKeys: parentKeys.length > 0 ? parentKeys : void 0,\n      level\n    });\n  }\n  getOrderedNodeMap() {\n    const obj = {};\n    this.nodeMap.forEach((node) => obj[node.index] = node);\n    return obj;\n  }\n  clearDisplayIndexes() {\n    this.nodeDisplayIndexMap.clear();\n  }\n  /**\n   * Client side sorting\n   */\n  clientSideSortRows() {\n    const sortOptions = this.sortController.getSortOptions();\n    const isAnySort = sortOptions.some((opt) => opt.sort != null);\n    if (!isAnySort) {\n      return;\n    }\n    const allNodes = new Array(this.nodeMap.getSize());\n    this.nodeMap.forEach((lazyNode) => allNodes[lazyNode.index] = lazyNode.node);\n    this.nodeMap.clear();\n    const sortedNodes = this.rowNodeSorter.doFullSort(allNodes, sortOptions);\n    sortedNodes.forEach((node, index) => {\n      this.nodeMap.set({\n        id: node.id,\n        node,\n        index\n      });\n    });\n  }\n  /**\n   * Transaction Support here\n   */\n  updateRowNodes(updates) {\n    if (this.getRowIdFunc == null) {\n      throw new Error(\"AG Grid: Transactions can only be applied when row ids are supplied.\");\n    }\n    const updatedNodes = [];\n    updates.forEach((data) => {\n      const id = this.getRowId(data);\n      const lazyNode = this.nodeMap.getBy(\"id\", id);\n      if (lazyNode) {\n        this.blockUtils.updateDataIntoRowNode(lazyNode.node, data);\n        updatedNodes.push(lazyNode.node);\n      }\n    });\n    return updatedNodes;\n  }\n  insertRowNodes(inserts, indexToAdd) {\n    const realRowCount = this.store.getRowCount() - (this.store.getParentNode().sibling ? 1 : 0);\n    const addIndex = indexToAdd == null && this.isLastRowKnown ? realRowCount : indexToAdd;\n    if (addIndex == null || realRowCount < addIndex) {\n      return [];\n    }\n    if (this.getRowIdFunc == null) {\n      throw new Error(\"AG Grid: Transactions can only be applied when row ids are supplied.\");\n    }\n    const uniqueInsertsMap = {};\n    inserts.forEach((data) => {\n      const dataId = this.getRowId(data);\n      if (dataId && this.isNodeInCache(dataId)) {\n        return;\n      }\n      uniqueInsertsMap[dataId] = data;\n    });\n    const uniqueInserts = Object.values(uniqueInsertsMap);\n    const numberOfInserts = uniqueInserts.length;\n    if (numberOfInserts === 0) {\n      return [];\n    }\n    const nodesToMove = this.nodeMap.filter((node) => node.index >= addIndex);\n    nodesToMove.forEach((lazyNode) => this.nodeMap.delete(lazyNode));\n    nodesToMove.forEach((lazyNode) => {\n      this.nodeMap.set({\n        node: lazyNode.node,\n        index: lazyNode.index + numberOfInserts,\n        id: lazyNode.id\n      });\n    });\n    this.numberOfRows += numberOfInserts;\n    return uniqueInserts.map(\n      (data, uniqueInsertOffset) => this.createRowAtIndex(addIndex + uniqueInsertOffset, data)\n    );\n  }\n  removeRowNodes(idsToRemove) {\n    if (this.getRowIdFunc == null) {\n      throw new Error(\"AG Grid: Transactions can only be applied when row ids are supplied.\");\n    }\n    const removedNodes = [];\n    const nodesToVerify = [];\n    let deletedNodeCount = 0;\n    const remainingIdsToRemove = [...idsToRemove];\n    const allNodes = this.getOrderedNodeMap();\n    let contiguousIndex = -1;\n    for (const stringIndex in allNodes) {\n      contiguousIndex += 1;\n      const node = allNodes[stringIndex];\n      const matchIndex = remainingIdsToRemove.findIndex((idToRemove) => idToRemove === node.id);\n      if (matchIndex !== -1) {\n        remainingIdsToRemove.splice(matchIndex, 1);\n        this.destroyRowAtIndex(Number(stringIndex));\n        removedNodes.push(node.node);\n        deletedNodeCount += 1;\n        continue;\n      }\n      if (deletedNodeCount === 0) {\n        continue;\n      }\n      const numericStoreIndex = Number(stringIndex);\n      if (contiguousIndex !== numericStoreIndex) {\n        nodesToVerify.push(node.node);\n      }\n      this.nodeMap.delete(allNodes[stringIndex]);\n      this.nodeMap.set({\n        id: node.id,\n        node: node.node,\n        index: numericStoreIndex - deletedNodeCount\n      });\n    }\n    this.numberOfRows -= this.isLastRowIndexKnown() ? idsToRemove.length : deletedNodeCount;\n    if (remainingIdsToRemove.length > 0 && nodesToVerify.length > 0) {\n      nodesToVerify.forEach((node) => node.__needsRefreshWhenVisible = true);\n      this.lazyBlockLoadingService.queueLoadCheck();\n    }\n    return removedNodes;\n  }\n  /**\n   * Return the block size configured for this cache\n   */\n  getBlockSize() {\n    return this.storeParams.cacheBlockSize || LazyBlockLoadingService.DEFAULT_BLOCK_SIZE;\n  }\n  /**\n   * Get the start index of the loading block for a given index\n   */\n  getBlockStartIndex(storeIndex) {\n    const blockSize = this.getBlockSize();\n    return storeIndex - storeIndex % blockSize;\n  }\n  /**\n   * Get the start and end index of a block, given a row store index\n   */\n  getBlockBounds(storeIndex) {\n    const startOfBlock = this.getBlockStartIndex(storeIndex);\n    const blockSize = this.getBlockSize();\n    return [startOfBlock, startOfBlock + blockSize];\n  }\n};\nvar LazyStore = class extends BeanStub93 {\n  constructor(ssrmParams, storeParams, parentRowNode) {\n    super();\n    this.idSequence = new NumberSequence2();\n    this.ssrmParams = ssrmParams;\n    this.parentRowNode = parentRowNode;\n    this.storeParams = storeParams;\n    this.level = parentRowNode.level + 1;\n    this.group = ssrmParams.rowGroupCols ? this.level < ssrmParams.rowGroupCols.length : false;\n    this.leafGroup = ssrmParams.rowGroupCols ? this.level === ssrmParams.rowGroupCols.length - 1 : false;\n    this.info = {};\n  }\n  wireBeans(beans) {\n    this.blockUtils = beans.ssrmBlockUtils;\n    this.storeUtils = beans.ssrmStoreUtils;\n    this.selectionService = beans.selectionService;\n    this.funcColsService = beans.funcColsService;\n  }\n  postConstruct() {\n    let numberOfRows = 1;\n    if (this.level === 0) {\n      numberOfRows = this.storeUtils.getServerSideInitialRowCount() ?? 1;\n      this.eventService.dispatchEventOnce({\n        type: \"rowCountReady\"\n      });\n    }\n    this.cache = this.createManagedBean(new LazyCache(this, numberOfRows, false, this.storeParams));\n    const usingTreeData = this.gos.get(\"treeData\");\n    if (!usingTreeData && this.group) {\n      const groupColVo = this.ssrmParams.rowGroupCols[this.level];\n      this.groupField = groupColVo.field;\n      this.rowGroupColumn = this.funcColsService.getRowGroupColumns()[this.level];\n    }\n  }\n  destroy() {\n    this.displayIndexStart = void 0;\n    this.displayIndexEnd = void 0;\n    this.destroyBean(this.cache);\n    super.destroy();\n  }\n  /**\n   * Given a server response, ingest the rows outside of the data source lifecycle.\n   *\n   * @param rowDataParams the server response containing the rows to ingest\n   * @param startRow the index to start ingesting rows\n   * @param expectedRows the expected number of rows in the response (used to determine if the last row index is known)\n   */\n  applyRowData(rowDataParams, startRow, expectedRows) {\n    this.cache.onLoadSuccess(startRow, expectedRows, rowDataParams);\n  }\n  /**\n   * Applies a given transaction to the data set within this store\n   *\n   * @param transaction an object containing delta instructions determining the changes to apply to this store\n   * @returns an object determining the status of this transaction and effected nodes\n   */\n  applyTransaction(transaction) {\n    const idFunc = _getRowIdCallback3(this.gos);\n    if (!idFunc) {\n      _warnOnce53(\"getRowId callback must be implemented for transactions to work. Transaction was ignored.\");\n      return {\n        status: ServerSideTransactionResultStatus2.Cancelled\n      };\n    }\n    const applyCallback = this.gos.getCallback(\"isApplyServerSideTransaction\");\n    if (applyCallback) {\n      const params = {\n        transaction,\n        parentNode: this.parentRowNode,\n        groupLevelInfo: this.info\n      };\n      const apply = applyCallback(params);\n      if (!apply) {\n        return { status: ServerSideTransactionResultStatus2.Cancelled };\n      }\n    }\n    const allRowsLoaded = this.cache.isStoreFullyLoaded();\n    let updatedNodes = void 0;\n    if (transaction.update?.length) {\n      updatedNodes = this.cache.updateRowNodes(transaction.update);\n    }\n    let insertedNodes = void 0;\n    if (transaction.add?.length) {\n      let addIndex = transaction.addIndex;\n      if (addIndex != null && addIndex < 0) {\n        addIndex = void 0;\n      }\n      insertedNodes = this.cache.insertRowNodes(transaction.add, addIndex);\n    }\n    let removedNodes = void 0;\n    if (transaction.remove?.length) {\n      const allIdsToRemove = transaction.remove.map(\n        (data) => idFunc({ level: this.level, parentKeys: this.parentRowNode.getRoute() ?? [], data })\n      );\n      const allUniqueIdsToRemove = [...new Set(allIdsToRemove)];\n      removedNodes = this.cache.removeRowNodes(allUniqueIdsToRemove);\n    }\n    const isClientSideSortingEnabled = this.gos.get(\"serverSideEnableClientSideSort\");\n    const isUpdateOrAdd = updatedNodes?.length || insertedNodes?.length;\n    const isClientSideSort = allRowsLoaded && isClientSideSortingEnabled;\n    if (isClientSideSort && isUpdateOrAdd) {\n      this.cache.clientSideSortRows();\n    }\n    this.updateSelectionAfterTransaction(updatedNodes, removedNodes);\n    return {\n      status: ServerSideTransactionResultStatus2.Applied,\n      update: updatedNodes,\n      add: insertedNodes,\n      remove: removedNodes\n    };\n  }\n  updateSelectionAfterTransaction(updatedNodes, removedNodes) {\n    const nodesToDeselect = [];\n    updatedNodes?.forEach((node) => {\n      if (node.isSelected() && !node.selectable) {\n        nodesToDeselect.push(node);\n      }\n    });\n    removedNodes?.forEach((node) => {\n      if (node.isSelected()) {\n        nodesToDeselect.push(node);\n      }\n    });\n    if (nodesToDeselect.length) {\n      this.selectionService.setNodesSelected({\n        newValue: false,\n        clearSelection: false,\n        nodes: nodesToDeselect,\n        source: \"rowDataChanged\"\n      });\n    }\n  }\n  /**\n   * Clear the display indexes, used for fading rows out when stores are not being destroyed\n   */\n  clearDisplayIndexes() {\n    this.displayIndexStart = void 0;\n    this.displayIndexEnd = void 0;\n    this.cache.getNodes().forEach((lazyNode) => this.blockUtils.clearDisplayIndex(lazyNode.node));\n    if (this.parentRowNode.sibling) {\n      this.blockUtils.clearDisplayIndex(this.parentRowNode.sibling);\n    }\n    this.cache.clearDisplayIndexes();\n  }\n  /**\n   * @returns an index representing the last sequentially displayed row in the grid for this store\n   */\n  getDisplayIndexStart() {\n    return this.displayIndexStart;\n  }\n  /**\n   * @returns the index representing one after the last sequentially displayed row in the grid for this store\n   */\n  getDisplayIndexEnd() {\n    return this.displayIndexEnd;\n  }\n  /**\n   * @returns the virtual size of this store\n   */\n  getRowCount() {\n    if (this.parentRowNode.sibling) {\n      return this.cache.getRowCount() + 1;\n    }\n    return this.cache.getRowCount();\n  }\n  /**\n   * Sets the current row count of the store, and whether the last row index is known\n   */\n  setRowCount(rowCount, isLastRowIndexKnown) {\n    this.cache.setRowCount(rowCount, isLastRowIndexKnown);\n  }\n  /**\n   * Given a display index, returns whether that row is within this store or a child store of this store\n   *\n   * @param displayIndex the visible index of a row\n   * @returns whether or not the row exists within this store\n   */\n  isDisplayIndexInStore(displayIndex) {\n    if (this.cache.getRowCount() === 0)\n      return false;\n    return this.displayIndexStart <= displayIndex && displayIndex < this.getDisplayIndexEnd();\n  }\n  /**\n   * Recursively sets up the display indexes and top position of every node belonging to this store.\n   *\n   * Called after a row height changes, or a store updated event.\n   *\n   * @param displayIndexSeq the number sequence for generating the display index of each row\n   * @param nextRowTop an object containing the next row top value intended to be modified by ref per row\n   */\n  setDisplayIndexes(displayIndexSeq, nextRowTop, uiLevel) {\n    this.displayIndexStart = displayIndexSeq.peek();\n    this.topPx = nextRowTop.value;\n    const footerNode = this.parentRowNode.level > -1 && _getGroupTotalRowCallback2(this.gos)({ node: this.parentRowNode });\n    if (!footerNode) {\n      this.parentRowNode.destroyFooter();\n    }\n    if (footerNode === \"top\") {\n      this.parentRowNode.createFooter();\n      this.blockUtils.setDisplayIndex(this.parentRowNode.sibling, displayIndexSeq, nextRowTop, uiLevel);\n    }\n    this.cache.setDisplayIndexes(displayIndexSeq, nextRowTop, uiLevel);\n    if (footerNode === \"bottom\") {\n      this.parentRowNode.createFooter();\n      this.blockUtils.setDisplayIndex(this.parentRowNode.sibling, displayIndexSeq, nextRowTop, uiLevel);\n    }\n    this.displayIndexEnd = displayIndexSeq.peek();\n    this.heightPx = nextRowTop.value - this.topPx;\n  }\n  /**\n   * Recursively applies a provided function to every node\n   *\n   * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeepAfterFilterAndSort\n   */\n  forEachStoreDeep(callback, sequence = new NumberSequence2()) {\n    callback(this, sequence.next());\n    this.cache.getNodes().forEach((lazyNode) => {\n      const childCache = lazyNode.node.childStore;\n      if (childCache) {\n        childCache.forEachStoreDeep(callback, sequence);\n      }\n    });\n  }\n  /**\n   * Recursively applies a provided function to every node\n   *\n   * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeepAfterFilterAndSort\n   */\n  forEachNodeDeep(callback, sequence = new NumberSequence2()) {\n    this.cache.getNodes().forEach((lazyNode) => {\n      callback(lazyNode.node, sequence.next());\n      const childCache = lazyNode.node.childStore;\n      if (childCache) {\n        childCache.forEachNodeDeep(callback, sequence);\n      }\n    });\n  }\n  /**\n   * Recursively applies a provided function to every node\n   *\n   * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeep\n   */\n  forEachNodeDeepAfterFilterAndSort(callback, sequence = new NumberSequence2(), includeFooterNodes = false) {\n    const footerNode = this.parentRowNode.level > -1 && _getGroupTotalRowCallback2(this.gos)({ node: this.parentRowNode });\n    if (footerNode === \"top\") {\n      callback(this.parentRowNode.sibling, sequence.next());\n    }\n    const orderedNodes = this.cache.getOrderedNodeMap();\n    for (const key in orderedNodes) {\n      const lazyNode = orderedNodes[key];\n      callback(lazyNode.node, sequence.next());\n      const childCache = lazyNode.node.childStore;\n      if (childCache) {\n        childCache.forEachNodeDeepAfterFilterAndSort(callback, sequence, includeFooterNodes);\n      }\n    }\n    if (footerNode === \"bottom\") {\n      callback(this.parentRowNode.sibling, sequence.next());\n    }\n  }\n  /**\n   * Removes the failed status from all nodes, and marks them as stub to encourage reloading\n   */\n  retryLoads() {\n    this.cache.getNodes().forEach(({ node }) => {\n      if (node.failedLoad) {\n        node.failedLoad = false;\n        node.__needsRefreshWhenVisible = true;\n        node.stub = true;\n      }\n    });\n    this.forEachChildStoreShallow((store) => store.retryLoads());\n    this.fireStoreUpdatedEvent();\n  }\n  /**\n   * Given a display index, returns the row at that location.\n   *\n   * @param displayRowIndex the displayed index within the grid to search for\n   * @returns the row node if the display index falls within the store, if it didn't exist this will create a new stub to return\n   */\n  getRowUsingDisplayIndex(displayRowIndex) {\n    if (this.parentRowNode.sibling && displayRowIndex === this.parentRowNode.sibling.rowIndex) {\n      return this.parentRowNode.sibling;\n    }\n    return this.cache.getRowByDisplayIndex(displayRowIndex);\n  }\n  /**\n   * Given a display index, returns the row top and height for the row at that index.\n   *\n   * @param displayIndex the display index of the node\n   * @returns an object containing the rowTop and rowHeight of the node at the given displayIndex\n   */\n  getRowBounds(displayIndex) {\n    if (!this.isDisplayIndexInStore(displayIndex)) {\n      return null;\n    }\n    const thisNode = this.cache.getNodeCachedByDisplayIndex(displayIndex);\n    if (thisNode) {\n      const boundsFromRow = this.blockUtils.extractRowBounds(thisNode, displayIndex);\n      if (boundsFromRow) {\n        return boundsFromRow;\n      }\n    }\n    const { previousNode, nextNode } = this.cache.getSurroundingNodesByDisplayIndex(displayIndex) ?? {};\n    if (previousNode) {\n      const boundsFromRow = this.blockUtils.extractRowBounds(previousNode.node, displayIndex);\n      if (boundsFromRow != null) {\n        return boundsFromRow;\n      }\n    }\n    const defaultRowHeight = _getRowHeightAsNumber3(this.gos);\n    if (nextNode) {\n      const numberOfRowDiff2 = (nextNode.node.rowIndex - displayIndex) * defaultRowHeight;\n      return {\n        rowTop: nextNode.node.rowTop - numberOfRowDiff2,\n        rowHeight: defaultRowHeight\n      };\n    }\n    const lastTop = this.topPx + this.heightPx;\n    const numberOfRowDiff = (this.getDisplayIndexEnd() - displayIndex) * defaultRowHeight;\n    return {\n      rowTop: lastTop - numberOfRowDiff,\n      rowHeight: defaultRowHeight\n    };\n  }\n  /**\n   * Given a vertical pixel, determines whether this store contains a row at that pixel\n   *\n   * @param pixel a vertical pixel position from the grid\n   * @returns whether that pixel points to a virtual space belonging to this store\n   */\n  isPixelInRange(pixel) {\n    return pixel >= this.topPx && pixel < this.topPx + this.heightPx;\n  }\n  /**\n   * Given a vertical pixel, returns the row existing at that pixel location\n   *\n   * @param pixel a vertical pixel position from the grid\n   * @returns the display index at the given pixel location\n   */\n  getRowIndexAtPixel(pixel) {\n    if (pixel < this.topPx) {\n      return this.getDisplayIndexStart();\n    }\n    if (pixel >= this.topPx + this.heightPx) {\n      return this.getDisplayIndexEnd() - 1;\n    }\n    if (this.parentRowNode.sibling && pixel > this.parentRowNode.sibling.rowTop && pixel < this.parentRowNode.sibling.rowTop + this.parentRowNode.sibling.rowHeight) {\n      return this.parentRowNode.sibling.rowIndex;\n    }\n    let distToPreviousNodeTop = Number.MAX_SAFE_INTEGER;\n    let previousNode = null;\n    let distToNextNodeTop = Number.MAX_SAFE_INTEGER;\n    let nextNode = null;\n    this.cache.getNodes().forEach(({ node }) => {\n      const distBetween = Math.abs(pixel - node.rowTop);\n      if (node.rowTop < pixel) {\n        if (distBetween < distToPreviousNodeTop) {\n          distToPreviousNodeTop = distBetween;\n          previousNode = node;\n        }\n        return;\n      }\n      if (distBetween < distToNextNodeTop) {\n        distToNextNodeTop = distBetween;\n        nextNode = node;\n      }\n    });\n    previousNode = previousNode;\n    nextNode = nextNode;\n    if (previousNode) {\n      const indexOfRow = this.blockUtils.getIndexAtPixel(previousNode, pixel);\n      if (indexOfRow != null) {\n        return indexOfRow;\n      }\n    }\n    const defaultRowHeight = _getRowHeightAsNumber3(this.gos);\n    if (nextNode) {\n      const nextTop2 = nextNode.rowTop;\n      const numberOfRowDiff2 = Math.ceil((nextTop2 - pixel) / defaultRowHeight);\n      return nextNode.rowIndex - numberOfRowDiff2;\n    }\n    const nextTop = this.topPx + this.heightPx;\n    const numberOfRowDiff = Math.floor((nextTop - pixel) / defaultRowHeight);\n    return this.getDisplayIndexEnd() - numberOfRowDiff;\n  }\n  /**\n   * Given a path of group keys, returns the child store for that group.\n   *\n   * @param keys the grouping path to the desired store\n   * @returns the child store for the given keys, or null if not found\n   */\n  getChildStore(keys) {\n    return this.storeUtils.getChildStore(keys, this, (key) => {\n      const lazyNode = this.cache.getNodes().find((lazyNode2) => lazyNode2.node.key == key);\n      if (!lazyNode) {\n        return null;\n      }\n      return lazyNode.node;\n    });\n  }\n  /**\n   * Executes a provided callback on each child store belonging to this store\n   *\n   * @param cb the callback to execute\n   */\n  forEachChildStoreShallow(cb) {\n    this.cache.getNodes().forEach(({ node }) => {\n      if (node.childStore) {\n        cb(node.childStore);\n      }\n    });\n  }\n  /**\n   * Executes after a change to sorting, determines recursively whether this store or a child requires refreshed.\n   *\n   * If a purge refresh occurs, the row count is preserved.\n   *\n   * @param params a set of properties pertaining to the sort changes\n   */\n  refreshAfterSort(params) {\n    const serverSortsAllLevels = this.storeUtils.isServerSideSortAllLevels();\n    if (serverSortsAllLevels || this.storeUtils.isServerRefreshNeeded(this.parentRowNode, this.ssrmParams.rowGroupCols, params)) {\n      const allRowsLoaded = this.cache.isStoreFullyLoaded();\n      const isClientSideSortingEnabled = this.gos.get(\"serverSideEnableClientSideSort\");\n      const isClientSideSort = allRowsLoaded && isClientSideSortingEnabled;\n      if (!isClientSideSort) {\n        const oldCount = this.cache.getRowCount();\n        const lastKnown = this.cache.isLastRowIndexKnown();\n        this.destroyBean(this.cache);\n        this.cache = this.createManagedBean(new LazyCache(this, oldCount, lastKnown, this.storeParams));\n        return;\n      }\n      this.cache.clientSideSortRows();\n    }\n    this.forEachChildStoreShallow((store) => store.refreshAfterSort(params));\n  }\n  /**\n   * Executes after a change to filtering, determines recursively whether this store or a child requires refreshed.\n   *\n   * If a refresh occurs, the row count is reset.\n   *\n   * @param params a set of properties pertaining to the filter changes\n   */\n  refreshAfterFilter(params) {\n    const serverFiltersAllLevels = !this.storeUtils.isServerSideOnlyRefreshFilteredGroups();\n    if (serverFiltersAllLevels || this.storeUtils.isServerRefreshNeeded(this.parentRowNode, this.ssrmParams.rowGroupCols, params)) {\n      this.refreshStore(true);\n      return;\n    }\n    this.forEachChildStoreShallow((store) => store.refreshAfterFilter(params));\n  }\n  /**\n   * Marks all existing nodes as requiring reloaded, and triggers a load check\n   *\n   * @param purge whether to remove all nodes and data in favour of stub nodes\n   */\n  refreshStore(purge) {\n    if (purge) {\n      this.destroyBean(this.cache);\n      this.cache = this.createManagedBean(new LazyCache(this, 1, false, this.storeParams));\n      this.fireStoreUpdatedEvent();\n      return;\n    }\n    this.cache.markNodesForRefresh();\n  }\n  /**\n   * Used for pagination, given a local/store index, returns the display index of that row\n   *\n   * @param topLevelIndex the store index of a row\n   * @returns the display index for the given store index\n   */\n  getTopLevelRowDisplayedIndex(topLevelIndex) {\n    const displayIndex = this.cache.getDisplayIndexFromStoreIndex(topLevelIndex);\n    return displayIndex ?? topLevelIndex;\n  }\n  /**\n   * Used for pagination to determine if the last page is known, and for aria to determine if the last grid row is known\n   *\n   * @returns whether the last index of this store is known, or if lazy loading still required\n   */\n  isLastRowIndexKnown() {\n    return this.cache.isLastRowIndexKnown();\n  }\n  /**\n   * Used by the selection service to select a range of nodes\n   *\n   * @param firstInRange the first node in the range to find\n   * @param lastInRange the last node in the range to find\n   * @returns a range of nodes between firstInRange and lastInRange inclusive\n   */\n  getRowNodesInRange(firstInRange, lastInRange) {\n    return this.cache.getNodes().filter(({ node }) => {\n      return node.rowIndex >= firstInRange.rowIndex && node.rowIndex <= lastInRange.rowIndex;\n    }).map(({ node }) => node);\n  }\n  /**\n   * Mutates a given array to add this stores state, and recursively add all the children store states.\n   *\n   * @param result a mutable results array\n   */\n  addStoreStates(result) {\n    result.push({\n      suppressInfiniteScroll: false,\n      route: this.parentRowNode.getRoute() ?? [],\n      rowCount: this.getRowCount(),\n      lastRowIndexKnown: this.isLastRowIndexKnown(),\n      info: this.info,\n      maxBlocksInCache: this.storeParams.maxBlocksInCache,\n      cacheBlockSize: this.storeParams.cacheBlockSize\n    });\n    this.forEachChildStoreShallow((childStore) => childStore.addStoreStates(result));\n  }\n  getIdSequence() {\n    return this.idSequence;\n  }\n  getParentNode() {\n    return this.parentRowNode;\n  }\n  getRowDetails() {\n    return {\n      field: this.groupField,\n      group: this.group,\n      leafGroup: this.leafGroup,\n      level: this.level,\n      parent: this.parentRowNode,\n      rowGroupColumn: this.rowGroupColumn\n    };\n  }\n  getSsrmParams() {\n    return this.ssrmParams;\n  }\n  setStoreInfo(info) {\n    if (info) {\n      Object.assign(this.info, info);\n    }\n  }\n  // gets called 1) row count changed 2) cache purged\n  fireStoreUpdatedEvent() {\n    this.eventService.dispatchEvent({\n      type: \"storeUpdated\"\n    });\n  }\n  // gets called when row data updated, and no more refreshing needed\n  fireRefreshFinishedEvent() {\n    this.eventService.dispatchEvent({\n      type: \"storeRefreshed\",\n      route: this.parentRowNode.getRoute()\n    });\n  }\n  getBlockStates() {\n    return this.cache.getBlockStates();\n  }\n  getStoreBounds() {\n    return {\n      topPx: this.topPx,\n      heightPx: this.heightPx\n    };\n  }\n  getCache() {\n    return this.cache;\n  }\n};\nvar ServerSideRowModel = class extends BeanStub103 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowModel\";\n    this.onRowHeightChanged_debounced = _debounce4(this.onRowHeightChanged.bind(this), 100);\n    this.pauseStoreUpdateListening = false;\n    this.started = false;\n    this.managingPivotResultColumns = false;\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.columnNameService = beans.columnNameService;\n    this.pivotResultColsService = beans.pivotResultColsService;\n    this.funcColsService = beans.funcColsService;\n    this.filterManager = beans.filterManager;\n    this.sortController = beans.sortController;\n    this.rowRenderer = beans.rowRenderer;\n    this.nodeManager = beans.ssrmNodeManager;\n    this.storeFactory = beans.ssrmStoreFactory;\n    this.beans = beans;\n    this.pivotColDefService = beans.pivotColDefService;\n  }\n  // we don't implement as lazy row heights is not supported in this row model\n  ensureRowHeightsValid() {\n    return false;\n  }\n  start() {\n    this.started = true;\n    this.updateDatasource();\n  }\n  destroyDatasource() {\n    if (!this.datasource) {\n      return;\n    }\n    if (this.datasource.destroy) {\n      this.datasource.destroy();\n    }\n    this.rowRenderer.datasourceChanged();\n    this.datasource = void 0;\n  }\n  postConstruct() {\n    const resetListener = this.resetRootStore.bind(this);\n    this.addManagedEventListeners({\n      newColumnsLoaded: this.onColumnEverything.bind(this),\n      storeUpdated: this.onStoreUpdated.bind(this),\n      columnValueChanged: resetListener,\n      columnPivotChanged: resetListener,\n      columnRowGroupChanged: resetListener,\n      columnPivotModeChanged: resetListener\n    });\n    this.addManagedPropertyListeners(\n      [\n        /**\n         * Following properties omitted as they are likely to come with undesired  side effects.\n         * 'getRowId', 'isRowMaster', 'getRowHeight', 'isServerSideGroup', 'getServerSideGroupKey',\n         * */\n        \"masterDetail\",\n        \"treeData\",\n        \"removePivotHeaderRowWhenSingleValueColumn\",\n        \"suppressServerSideInfiniteScroll\",\n        \"cacheBlockSize\"\n      ],\n      resetListener\n    );\n    this.addManagedPropertyListener(\"groupAllowUnbalanced\", () => this.onStoreUpdated());\n    this.addManagedPropertyListener(\"rowHeight\", () => this.resetRowHeights());\n    this.verifyProps();\n    this.addManagedPropertyListener(\"serverSideDatasource\", () => this.updateDatasource());\n  }\n  updateDatasource() {\n    const datasource = this.gos.get(\"serverSideDatasource\");\n    if (datasource) {\n      this.setDatasource(datasource);\n    }\n  }\n  verifyProps() {\n    if (this.gos.exists(\"initialGroupOrderComparator\")) {\n      _warnOnce63(`initialGroupOrderComparator cannot be used with Server Side Row Model.`);\n    }\n    if (_isRowSelection(this.gos) && !this.gos.exists(\"getRowId\")) {\n      _warnOnce63(`getRowId callback must be provided for Server Side Row Model selection to work correctly.`);\n    }\n  }\n  setDatasource(datasource) {\n    if (!this.started) {\n      return;\n    }\n    this.destroyDatasource();\n    this.datasource = datasource;\n    this.resetRootStore();\n  }\n  applyRowData(rowDataParams, startRow, route) {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return;\n    }\n    const storeToExecuteOn = rootStore.getChildStore(route);\n    if (!storeToExecuteOn) {\n      return;\n    }\n    if (storeToExecuteOn instanceof LazyStore) {\n      storeToExecuteOn.applyRowData(rowDataParams, startRow, rowDataParams.rowData.length);\n    } else if (storeToExecuteOn instanceof FullStore) {\n      storeToExecuteOn.processServerResult(rowDataParams);\n    }\n  }\n  isLastRowIndexKnown() {\n    const cache = this.getRootStore();\n    if (!cache) {\n      return false;\n    }\n    return cache.isLastRowIndexKnown();\n  }\n  onColumnEverything() {\n    if (!this.storeParams) {\n      this.resetRootStore();\n      return;\n    }\n    const rowGroupColumnVos = this.columnsToValueObjects(this.funcColsService.getRowGroupColumns());\n    const valueColumnVos = this.columnsToValueObjects(this.funcColsService.getValueColumns());\n    const pivotColumnVos = this.columnsToValueObjects(this.funcColsService.getPivotColumns());\n    const areColsSame = (params) => {\n      const oldColsMap = {};\n      params.oldCols.forEach((col) => oldColsMap[col.id] = col);\n      const allColsUnchanged = params.newCols.every((col) => {\n        const equivalentCol = oldColsMap[col.id];\n        if (equivalentCol) {\n          delete oldColsMap[col.id];\n        }\n        return equivalentCol && equivalentCol.field === col.field && equivalentCol.aggFunc === col.aggFunc;\n      });\n      const missingCols = !params.allowRemovedColumns && !!Object.values(oldColsMap).length;\n      return allColsUnchanged && !missingCols;\n    };\n    const sortModelDifferent = !_jsonEquals(this.storeParams.sortModel, this.sortController.getSortModel());\n    const rowGroupDifferent = !areColsSame({\n      oldCols: this.storeParams.rowGroupCols,\n      newCols: rowGroupColumnVos\n    });\n    const pivotDifferent = !areColsSame({\n      oldCols: this.storeParams.pivotCols,\n      newCols: pivotColumnVos\n    });\n    const valuesDifferent = !!rowGroupColumnVos?.length && !areColsSame({\n      oldCols: this.storeParams.valueCols,\n      newCols: valueColumnVos,\n      allowRemovedColumns: true\n    });\n    const resetRequired = sortModelDifferent || rowGroupDifferent || pivotDifferent || valuesDifferent;\n    if (resetRequired) {\n      this.resetRootStore();\n    } else {\n      const newParams = this.createStoreParams();\n      this.storeParams.rowGroupCols = newParams.rowGroupCols;\n      this.storeParams.pivotCols = newParams.pivotCols;\n      this.storeParams.valueCols = newParams.valueCols;\n    }\n  }\n  destroyRootStore() {\n    if (!this.rootNode || !this.rootNode.childStore) {\n      return;\n    }\n    this.rootNode.childStore = this.destroyBean(this.rootNode.childStore);\n    this.nodeManager.clear();\n  }\n  refreshAfterSort(newSortModel, params) {\n    if (this.storeParams) {\n      this.storeParams.sortModel = newSortModel;\n    }\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return;\n    }\n    rootStore.refreshAfterSort(params);\n    this.onStoreUpdated();\n  }\n  generateSecondaryColumns(pivotFields) {\n    if (!this.pivotColDefService) {\n      this.gos.assertModuleRegistered(ModuleNames16.RowGroupingModule, \"pivotResultFields\");\n      return;\n    }\n    const pivotColumnGroupDefs = this.pivotColDefService.createColDefsFromFields(pivotFields);\n    this.managingPivotResultColumns = true;\n    this.pivotResultColsService.setPivotResultCols(pivotColumnGroupDefs, \"rowModelUpdated\");\n  }\n  resetRowHeights() {\n    const atLeastOne = this.resetRowHeightsForAllRowNodes();\n    const rootNodeHeight = _getRowHeightForNode3(this.gos, this.rootNode);\n    this.rootNode.setRowHeight(rootNodeHeight.height, rootNodeHeight.estimated);\n    if (this.rootNode.sibling) {\n      const rootNodeSibling = _getRowHeightForNode3(this.gos, this.rootNode.sibling);\n      this.rootNode.sibling.setRowHeight(rootNodeSibling.height, rootNodeSibling.estimated);\n    }\n    if (atLeastOne) {\n      this.onRowHeightChanged();\n    }\n  }\n  resetRowHeightsForAllRowNodes() {\n    let atLeastOne = false;\n    this.forEachNode((rowNode) => {\n      const rowHeightForNode = _getRowHeightForNode3(this.gos, rowNode);\n      rowNode.setRowHeight(rowHeightForNode.height, rowHeightForNode.estimated);\n      const detailNode = rowNode.detailNode;\n      if (detailNode) {\n        const detailRowHeight = _getRowHeightForNode3(this.gos, detailNode);\n        detailNode.setRowHeight(detailRowHeight.height, detailRowHeight.estimated);\n      }\n      if (rowNode.sibling) {\n        const siblingRowHeight = _getRowHeightForNode3(this.gos, rowNode.sibling);\n        detailNode.setRowHeight(siblingRowHeight.height, siblingRowHeight.estimated);\n      }\n      atLeastOne = true;\n    });\n    return atLeastOne;\n  }\n  resetRootStore() {\n    this.destroyRootStore();\n    this.rootNode = new RowNode32(this.beans);\n    this.rootNode.group = true;\n    this.rootNode.level = -1;\n    if (this.datasource) {\n      this.storeParams = this.createStoreParams();\n      this.rootNode.childStore = this.createBean(this.storeFactory.createStore(this.storeParams, this.rootNode));\n      this.updateRowIndexesAndBounds();\n    }\n    if (this.managingPivotResultColumns) {\n      this.pivotResultColsService.setPivotResultCols(null, \"api\");\n      this.managingPivotResultColumns = false;\n    }\n    this.dispatchModelUpdated(true);\n  }\n  columnsToValueObjects(columns) {\n    return columns.map(\n      (col) => ({\n        id: col.getId(),\n        aggFunc: col.getAggFunc(),\n        displayName: this.columnNameService.getDisplayNameForColumn(col, \"model\"),\n        field: col.getColDef().field\n      })\n    );\n  }\n  createStoreParams() {\n    const rowGroupColumnVos = this.columnsToValueObjects(this.funcColsService.getRowGroupColumns());\n    const valueColumnVos = this.columnsToValueObjects(this.funcColsService.getValueColumns());\n    const pivotColumnVos = this.columnsToValueObjects(this.funcColsService.getPivotColumns());\n    const dynamicRowHeight = _isGetRowHeightFunction(this.gos);\n    const params = {\n      // the columns the user has grouped and aggregated by\n      valueCols: valueColumnVos,\n      rowGroupCols: rowGroupColumnVos,\n      pivotCols: pivotColumnVos,\n      pivotMode: this.columnModel.isPivotMode(),\n      // sort and filter model\n      filterModel: this.filterManager?.isAdvancedFilterEnabled() ? this.filterManager?.getAdvancedFilterModel() : this.filterManager?.getFilterModel() ?? {},\n      sortModel: this.sortController.getSortModel(),\n      datasource: this.datasource,\n      lastAccessedSequence: new NumberSequence3(),\n      // blockSize: blockSize == null ? 100 : blockSize,\n      dynamicRowHeight\n    };\n    return params;\n  }\n  getParams() {\n    return this.storeParams;\n  }\n  dispatchModelUpdated(reset = false) {\n    this.eventService.dispatchEvent({\n      type: \"modelUpdated\",\n      animate: !reset,\n      keepRenderedRows: !reset,\n      newPage: false,\n      newData: false\n    });\n  }\n  onStoreUpdated() {\n    if (this.pauseStoreUpdateListening) {\n      return;\n    }\n    this.updateRowIndexesAndBounds();\n    this.dispatchModelUpdated();\n  }\n  /** This method is debounced. It is used for row auto-height. If we don't debounce,\n   * then the Row Models will end up recalculating each row position\n   * for each row height change and result in the Row Renderer laying out rows.\n   * This is particularly bad if using print layout, and showing eg 1,000 rows,\n   * each row will change it's height, causing Row Model to update 1,000 times.\n   */\n  onRowHeightChangedDebounced() {\n    this.onRowHeightChanged_debounced();\n  }\n  onRowHeightChanged() {\n    this.updateRowIndexesAndBounds();\n    this.dispatchModelUpdated();\n  }\n  updateRowIndexesAndBounds() {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return;\n    }\n    rootStore.setDisplayIndexes(new NumberSequence3(), { value: 0 }, 0);\n  }\n  retryLoads() {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return;\n    }\n    rootStore.retryLoads();\n    this.onStoreUpdated();\n  }\n  getRow(index) {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return void 0;\n    }\n    return rootStore.getRowUsingDisplayIndex(index);\n  }\n  /**\n   * Pauses the store, to prevent it updating the UI. This is used when doing batch updates to the store.\n   */\n  setPaused(paused) {\n    this.pauseStoreUpdateListening = paused;\n  }\n  expandAll(value) {\n    this.pauseStoreUpdateListening = true;\n    this.forEachNode((node) => {\n      if (node.stub) {\n        return;\n      }\n      if (node.hasChildren()) {\n        node.setExpanded(value);\n      }\n    });\n    this.pauseStoreUpdateListening = false;\n    this.onStoreUpdated();\n  }\n  refreshAfterFilter(newFilterModel, params) {\n    if (this.storeParams) {\n      this.storeParams.filterModel = newFilterModel;\n    }\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return;\n    }\n    rootStore.refreshAfterFilter(params);\n    this.onStoreUpdated();\n  }\n  getRootStore() {\n    if (this.rootNode && this.rootNode.childStore) {\n      return this.rootNode.childStore;\n    }\n  }\n  getRowCount() {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return 0;\n    }\n    return rootStore.getDisplayIndexEnd();\n  }\n  getTopLevelRowCount() {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return 1;\n    }\n    return rootStore.getRowCount();\n  }\n  getTopLevelRowDisplayedIndex(topLevelIndex) {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return topLevelIndex;\n    }\n    return rootStore.getTopLevelRowDisplayedIndex(topLevelIndex);\n  }\n  getRowBounds(index) {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      const rowHeight = _getRowHeightAsNumber4(this.gos);\n      return {\n        rowTop: 0,\n        rowHeight\n      };\n    }\n    return rootStore.getRowBounds(index);\n  }\n  getBlockStates() {\n    const root = this.getRootStore();\n    if (!root) {\n      return void 0;\n    }\n    const states = {};\n    root.forEachStoreDeep((store) => {\n      if (store instanceof FullStore) {\n        const { id, state } = store.getBlockStateJson();\n        states[id] = state;\n      } else if (store instanceof LazyStore) {\n        Object.entries(store.getBlockStates()).forEach(([block, state]) => {\n          states[block] = state;\n        });\n      } else {\n        throw new Error(\"AG Grid: Unsupported store type\");\n      }\n    });\n    return states;\n  }\n  getRowIndexAtPixel(pixel) {\n    const rootStore = this.getRootStore();\n    if (pixel <= 0 || !rootStore) {\n      return 0;\n    }\n    return rootStore.getRowIndexAtPixel(pixel);\n  }\n  isEmpty() {\n    return false;\n  }\n  isRowsToRender() {\n    return this.getRootStore() != null && this.getRowCount() > 0;\n  }\n  getType() {\n    return \"serverSide\";\n  }\n  forEachNode(callback) {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return;\n    }\n    rootStore.forEachNodeDeep(callback);\n  }\n  forEachNodeAfterFilterAndSort(callback, includeFooterNodes = false) {\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return;\n    }\n    rootStore.forEachNodeDeepAfterFilterAndSort(callback, void 0, includeFooterNodes);\n  }\n  /** @return false if store hasn't started */\n  executeOnStore(route, callback) {\n    if (!this.started) {\n      return false;\n    }\n    const rootStore = this.getRootStore();\n    if (!rootStore) {\n      return true;\n    }\n    const storeToExecuteOn = rootStore.getChildStore(route);\n    if (storeToExecuteOn) {\n      callback(storeToExecuteOn);\n    }\n    return true;\n  }\n  refreshStore(params = {}) {\n    const route = params.route ? params.route : [];\n    this.executeOnStore(route, (store) => store.refreshStore(params.purge == true));\n  }\n  getStoreState() {\n    const res = [];\n    const rootStore = this.getRootStore();\n    if (rootStore) {\n      rootStore.addStoreStates(res);\n    }\n    return res;\n  }\n  getNodesInRangeForSelection(firstInRange, lastInRange) {\n    const startIndex = firstInRange.rowIndex;\n    const endIndex = lastInRange.rowIndex;\n    if (startIndex === null && endIndex === null) {\n      return [];\n    }\n    if (endIndex === null) {\n      return firstInRange ? [firstInRange] : [];\n    }\n    if (startIndex === null) {\n      return [lastInRange];\n    }\n    const nodeRange = [];\n    const [firstIndex, lastIndex] = [startIndex, endIndex].sort((a, b) => a - b);\n    this.forEachNode((node) => {\n      const thisRowIndex = node.rowIndex;\n      if (thisRowIndex == null || node.stub) {\n        return;\n      }\n      if (thisRowIndex >= firstIndex && thisRowIndex <= lastIndex) {\n        nodeRange.push(node);\n      }\n    });\n    if (nodeRange.length !== lastIndex - firstIndex + 1) {\n      return firstInRange ? [firstInRange, lastInRange] : [];\n    }\n    return nodeRange;\n  }\n  getRowNode(id) {\n    let result;\n    this.forEachNode((rowNode) => {\n      if (rowNode.id === id) {\n        result = rowNode;\n      }\n      if (rowNode.detailNode && rowNode.detailNode.id === id) {\n        result = rowNode.detailNode;\n      }\n    });\n    return result;\n  }\n  isRowPresent(rowNode) {\n    const foundRowNode = this.getRowNode(rowNode.id);\n    return !!foundRowNode;\n  }\n  setRowCount(rowCount, lastRowIndexKnown) {\n    const rootStore = this.getRootStore();\n    if (rootStore) {\n      if (rootStore instanceof LazyStore) {\n        rootStore.setRowCount(rowCount, lastRowIndexKnown);\n        return;\n      }\n      _errorOnce22(\"Infinite scrolling must be enabled in order to set the row count.\");\n    }\n  }\n  destroy() {\n    this.destroyDatasource();\n    this.destroyRootStore();\n    super.destroy();\n  }\n};\nfunction getServerSideSelectionState(beans) {\n  return beans.selectionService.getSelectionState();\n}\nfunction setServerSideSelectionState(beans, state) {\n  beans.selectionService.setSelectionState(state, \"api\");\n}\nfunction applyServerSideTransaction(beans, transaction) {\n  return beans.ssrmTransactionManager?.applyTransaction(transaction);\n}\nfunction applyServerSideRowData(beans, params) {\n  const startRow = params.startRow ?? 0;\n  const route = params.route ?? [];\n  if (startRow < 0) {\n    _warnOnce73(`invalid value ${params.startRow} for startRow, the value should be >= 0`);\n    return;\n  }\n  beans.rowModelHelperService?.getServerSideRowModel()?.applyRowData(params.successParams, startRow, route);\n}\nfunction applyServerSideTransactionAsync(beans, transaction, callback) {\n  return beans.ssrmTransactionManager?.applyTransactionAsync(transaction, callback);\n}\nfunction retryServerSideLoads(beans) {\n  beans.rowModelHelperService?.getServerSideRowModel()?.retryLoads();\n}\nfunction flushServerSideAsyncTransactions(beans) {\n  return beans.ssrmTransactionManager?.flushAsyncTransactions();\n}\nfunction refreshServerSide(beans, params) {\n  beans.rowModelHelperService?.getServerSideRowModel()?.refreshStore(params);\n}\nfunction getServerSideGroupLevelState(beans) {\n  return beans.rowModelHelperService?.getServerSideRowModel()?.getStoreState() ?? [];\n}\nvar ServerSideExpansionService = class extends ExpansionService {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"expansionService\";\n    this.queuedRowIds = /* @__PURE__ */ new Set();\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.serverSideRowModel = beans.rowModel;\n  }\n  postConstruct() {\n    super.postConstruct();\n    this.addManagedEventListeners({\n      columnRowGroupChanged: () => {\n        this.queuedRowIds.clear();\n      }\n    });\n  }\n  checkOpenByDefault(rowNode) {\n    if (!rowNode.isExpandable()) {\n      return;\n    }\n    if (this.queuedRowIds.has(rowNode.id)) {\n      this.queuedRowIds.delete(rowNode.id);\n      rowNode.setExpanded(true);\n      return;\n    }\n    const userFunc = this.gos.getCallback(\"isServerSideGroupOpenByDefault\");\n    if (!userFunc) {\n      return;\n    }\n    const params = {\n      data: rowNode.data,\n      rowNode\n    };\n    const userFuncRes = userFunc(params);\n    if (userFuncRes) {\n      rowNode.setExpanded(true);\n    }\n  }\n  expandRows(rowIds) {\n    rowIds.forEach((rowId) => {\n      const rowNode = this.serverSideRowModel.getRowNode(rowId);\n      if (rowNode) {\n        rowNode.setExpanded(true);\n      } else {\n        this.queuedRowIds.add(rowId);\n      }\n    });\n  }\n  expandAll(value) {\n    this.serverSideRowModel.expandAll(value);\n  }\n  onGroupExpandedOrCollapsed() {\n  }\n};\nvar ServerSideRowRangeSelectionContext = class {\n  constructor() {\n    this.root = null;\n    this.end = null;\n    this.cachedRange = [];\n  }\n  init(rowModel) {\n    this.rowModel = rowModel;\n  }\n  reset() {\n    this.root = null;\n    this.end = null;\n    this.cachedRange.length = 0;\n  }\n  setRoot(node) {\n    this.root = node;\n    this.end = null;\n    this.cachedRange.length = 0;\n  }\n  setEndRange(end) {\n    this.end = end;\n    this.cachedRange.length = 0;\n  }\n  getRoot() {\n    return this.root;\n  }\n  getRange() {\n    if (this.cachedRange.length === 0) {\n      const root = this.root ? this.rowModel.getRowNode(this.root) : void 0;\n      const end = this.end ? this.rowModel.getRowNode(this.end) : void 0;\n      if (root == null || end == null) {\n        return this.cachedRange;\n      }\n      this.cachedRange = this.rowModel.getNodesInRangeForSelection(root, end);\n    }\n    return this.cachedRange;\n  }\n  isInRange(node) {\n    if (this.root === null) {\n      return false;\n    }\n    return this.getRange().some((nodeInRange) => nodeInRange.id === node);\n  }\n  /**\n   * Truncates the range to the given node (assumed to be within the current range).\n   * Returns nodes that remain in the current range and those that should be removed\n   *\n   * @param node - Node at which to truncate the range\n   * @returns Object of nodes to either keep or discard (i.e. deselect) from the range\n   */\n  truncate(node) {\n    const range = this.getRange();\n    if (range.length === 0) {\n      return { keep: [], discard: [] };\n    }\n    const discardAfter = range[0].id === this.root;\n    const idx = range.findIndex((rowNode) => rowNode.id === node);\n    if (idx > -1) {\n      const above = range.slice(0, idx);\n      const below = range.slice(idx + 1);\n      this.setEndRange(node);\n      return discardAfter ? { keep: above, discard: below } : { keep: below, discard: above };\n    } else {\n      return { keep: range, discard: [] };\n    }\n  }\n  /**\n   * Extends the range to the given node. Returns nodes that remain in the current range\n   * and those that should be removed.\n   *\n   * @param node - Node marking the new end of the range\n   * @returns Object of nodes to either keep or discard (i.e. deselect) from the range\n   */\n  extend(node, groupSelectsChildren = false) {\n    if (this.root == null) {\n      const keep = this.getRange().slice();\n      const rowNode2 = this.rowModel.getRowNode(node);\n      if (rowNode2) {\n        if (groupSelectsChildren) {\n          rowNode2.depthFirstSearch((node2) => !node2.group && keep.push(node2));\n        }\n        keep.push(rowNode2);\n      }\n      this.setRoot(node);\n      return { keep, discard: [] };\n    }\n    const rowNode = this.rowModel.getRowNode(node);\n    const rootNode = this.rowModel.getRowNode(this.root);\n    if (rowNode == null) {\n      return { keep: this.getRange(), discard: [] };\n    }\n    if (rootNode == null) {\n      return { keep: this.getRange().concat(rowNode), discard: [] };\n    }\n    const newRange = this.rowModel.getNodesInRangeForSelection(rootNode, rowNode);\n    if (newRange.find((newRangeNode) => newRangeNode.id === this.end)) {\n      this.setEndRange(node);\n      return { keep: this.getRange(), discard: [] };\n    } else {\n      const discard = this.getRange().slice();\n      this.setEndRange(node);\n      return { keep: this.getRange(), discard };\n    }\n  }\n};\nvar DefaultStrategy = class extends BeanStub113 {\n  constructor() {\n    super(...arguments);\n    this.selectionCtx = new ServerSideRowRangeSelectionContext();\n    this.selectedState = { selectAll: false, toggledNodes: /* @__PURE__ */ new Set() };\n    this.selectAllUsed = false;\n    this.selectedNodes = {};\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.selectionCtx.init(this.rowModel);\n  }\n  getSelectedState() {\n    return {\n      selectAll: this.selectedState.selectAll,\n      toggledNodes: [...this.selectedState.toggledNodes]\n    };\n  }\n  setSelectedState(state) {\n    const newState = {\n      selectAll: false,\n      toggledNodes: /* @__PURE__ */ new Set()\n    };\n    if (typeof state !== \"object\") {\n      return _errorOnce32(\"The provided selection state should be an object.\");\n    }\n    if (!(\"selectAll\" in state)) {\n      return _errorOnce32(\"Invalid selection state. The state must conform to `IServerSideSelectionState`.\");\n    }\n    if (typeof state.selectAll === \"boolean\") {\n      newState.selectAll = state.selectAll;\n    } else {\n      return _errorOnce32(\"selectAll must be of boolean type.\");\n    }\n    if (\"toggledNodes\" in state && Array.isArray(state.toggledNodes)) {\n      state.toggledNodes.forEach((key) => {\n        if (typeof key === \"string\") {\n          newState.toggledNodes.add(key);\n        } else {\n          _warnOnce82(`Provided ids must be of string type. Invalid id provided: ${key}`);\n        }\n      });\n    } else {\n      return _warnOnce82(\"`toggledNodes` must be an array of string ids.\");\n    }\n    const isSelectingMultipleRows = newState.selectAll || newState.toggledNodes.size > 1;\n    if (_isUsingNewRowSelectionAPI(this.gos) && !_isMultiRowSelection(this.gos) && isSelectingMultipleRows) {\n      return _warnOnce82(`cannot multi select unless selection mode is 'multiRow'`);\n    }\n    this.selectedState = newState;\n  }\n  deleteSelectionStateFromParent(parentPath, removedNodeIds) {\n    if (this.selectedState.toggledNodes.size === 0) {\n      return false;\n    }\n    let anyNodesToggled = false;\n    removedNodeIds.forEach((id) => {\n      if (this.selectedState.toggledNodes.delete(id)) {\n        anyNodesToggled = true;\n      }\n    });\n    return anyNodesToggled;\n  }\n  overrideSelectionValue(newValue, source) {\n    if (!isSelectionUIEvent(source)) {\n      return newValue;\n    }\n    const root = this.selectionCtx.getRoot();\n    const node = root ? this.rowModel.getRowNode(root) : null;\n    return node ? node.isSelected() ?? false : true;\n  }\n  setNodesSelected(params) {\n    const { nodes, clearSelection, newValue, rangeSelect, source } = params;\n    if (nodes.length === 0)\n      return 0;\n    const onlyThisNode = clearSelection && newValue && !rangeSelect;\n    if (!_isMultiRowSelection(this.gos) || onlyThisNode) {\n      if (nodes.length > 1) {\n        throw new Error(\"AG Grid: cannot select multiple rows when rowSelection.mode is set to 'singleRow'\");\n      }\n      const node = nodes[0];\n      if (newValue && node.selectable) {\n        this.selectedNodes = { [node.id]: node };\n        this.selectedState = {\n          selectAll: false,\n          toggledNodes: /* @__PURE__ */ new Set([node.id])\n        };\n      } else {\n        this.selectedNodes = {};\n        this.selectedState = {\n          selectAll: false,\n          toggledNodes: /* @__PURE__ */ new Set()\n        };\n      }\n      if (node.selectable) {\n        this.selectionCtx.setRoot(node.id);\n      }\n      return 1;\n    }\n    const updateNodeState = (node, value = newValue) => {\n      if (value && node.selectable) {\n        this.selectedNodes[node.id] = node;\n      } else {\n        delete this.selectedNodes[node.id];\n      }\n      const doesNodeConform = value === this.selectedState.selectAll;\n      if (doesNodeConform || !node.selectable) {\n        this.selectedState.toggledNodes.delete(node.id);\n      } else {\n        this.selectedState.toggledNodes.add(node.id);\n      }\n    };\n    if (rangeSelect) {\n      if (nodes.length > 1) {\n        throw new Error(\"AG Grid: cannot select multiple rows when using rangeSelect\");\n      }\n      const node = nodes[0];\n      const newSelectionValue = this.overrideSelectionValue(newValue, source);\n      if (this.selectionCtx.isInRange(node.id)) {\n        const partition = this.selectionCtx.truncate(node.id);\n        if (newSelectionValue) {\n          partition.discard.forEach((node2) => updateNodeState(node2, false));\n        }\n        partition.keep.forEach((node2) => updateNodeState(node2, newSelectionValue));\n      } else {\n        const fromNode = this.selectionCtx.getRoot();\n        const toNode = node;\n        if (fromNode !== toNode.id) {\n          const partition = this.selectionCtx.extend(node.id);\n          if (newSelectionValue) {\n            partition.discard.forEach((node2) => updateNodeState(node2, false));\n          }\n          partition.keep.forEach((node2) => updateNodeState(node2, newSelectionValue));\n        }\n      }\n      return 1;\n    }\n    nodes.forEach((node) => updateNodeState(node));\n    this.selectionCtx.setRoot(_last12(nodes).id);\n    return 1;\n  }\n  processNewRow(node) {\n    if (this.selectedNodes[node.id]) {\n      this.selectedNodes[node.id] = node;\n    }\n  }\n  isNodeSelected(node) {\n    const isToggled = this.selectedState.toggledNodes.has(node.id);\n    return this.selectedState.selectAll ? !isToggled : isToggled;\n  }\n  getSelectedNodes() {\n    if (this.selectAllUsed) {\n      _warnOnce82(\n        `getSelectedNodes and getSelectedRows functions cannot be used with select all functionality with the server-side row model.\n                Use \\`api.getServerSideSelectionState()\\` instead.`\n      );\n    }\n    return Object.values(this.selectedNodes);\n  }\n  getSelectedRows() {\n    return this.getSelectedNodes().map((node) => node.data);\n  }\n  getSelectionCount() {\n    if (this.selectedState.selectAll) {\n      return -1;\n    }\n    return this.selectedState.toggledNodes.size;\n  }\n  clearOtherNodes(rowNodeToKeepSelected, source) {\n    const clearedRows = this.selectedState.selectAll ? 1 : this.selectedState.toggledNodes.size - 1;\n    this.selectedState = {\n      selectAll: false,\n      toggledNodes: /* @__PURE__ */ new Set([rowNodeToKeepSelected.id])\n    };\n    this.rowModel.forEachNode((node) => {\n      if (node !== rowNodeToKeepSelected) {\n        node.selectThisNode(false, void 0, source);\n      }\n    });\n    this.eventService.dispatchEvent({\n      type: \"selectionChanged\",\n      source\n    });\n    return clearedRows;\n  }\n  isEmpty() {\n    return !this.selectedState.selectAll && !this.selectedState.toggledNodes?.size;\n  }\n  selectAllRowNodes() {\n    this.selectedState = { selectAll: true, toggledNodes: /* @__PURE__ */ new Set() };\n    this.selectedNodes = {};\n    this.selectAllUsed = true;\n    this.selectionCtx.reset();\n  }\n  deselectAllRowNodes() {\n    this.selectedState = { selectAll: false, toggledNodes: /* @__PURE__ */ new Set() };\n    this.selectedNodes = {};\n    this.selectionCtx.reset();\n  }\n  getSelectAllState() {\n    if (this.selectedState.selectAll) {\n      if (this.selectedState.toggledNodes.size > 0) {\n        return null;\n      }\n      return true;\n    }\n    if (this.selectedState.toggledNodes.size > 0) {\n      return null;\n    }\n    return false;\n  }\n};\nvar GroupSelectsChildrenStrategy = class extends BeanStub122 {\n  constructor() {\n    super(...arguments);\n    this.selectionCtx = new ServerSideRowRangeSelectionContext();\n    this.selectedState = { selectAllChildren: false, toggledNodes: /* @__PURE__ */ new Map() };\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n    this.funcColsService = beans.funcColsService;\n    this.filterManager = beans.filterManager;\n    this.selectionService = beans.selectionService;\n  }\n  postConstruct() {\n    this.addManagedEventListeners({\n      // if model has updated, a store may now be fully loaded to clean up indeterminate states\n      modelUpdated: () => this.removeRedundantState(),\n      // when the grouping changes, the state no longer makes sense, so reset the state.\n      columnRowGroupChanged: () => this.selectionService.reset(\"rowGroupChanged\")\n    });\n    this.selectionCtx.init(this.rowModel);\n  }\n  getSelectedState() {\n    const treeData = this.gos.get(\"treeData\");\n    const recursivelySerializeState = (state, level, nodeId) => {\n      const normalisedState = {\n        nodeId\n      };\n      if (treeData || level <= this.funcColsService.getRowGroupColumns().length) {\n        normalisedState.selectAllChildren = state.selectAllChildren;\n      }\n      if (state.toggledNodes.size) {\n        const toggledNodes = [];\n        state.toggledNodes.forEach((value, key) => {\n          const newState = recursivelySerializeState(value, level + 1, key);\n          toggledNodes.push(newState);\n        });\n        normalisedState.toggledNodes = toggledNodes;\n      }\n      return normalisedState;\n    };\n    return recursivelySerializeState(this.selectedState, 0);\n  }\n  setSelectedState(state) {\n    if (\"selectAll\" in state) {\n      return _errorOnce42(\n        \"Invalid selection state. When `groupSelectsChildren` is enabled, the state must conform to `IServerSideGroupSelectionState`.\"\n      );\n    }\n    const recursivelyDeserializeState = (normalisedState, parentSelected) => {\n      if (typeof normalisedState !== \"object\") {\n        throw new Error(\"Each provided state object must be an object.\");\n      }\n      if (\"selectAllChildren\" in normalisedState && typeof normalisedState.selectAllChildren !== \"boolean\") {\n        throw new Error(\"`selectAllChildren` must be a boolean value or undefined.\");\n      }\n      if (\"toggledNodes\" in normalisedState) {\n        if (!Array.isArray(normalisedState.toggledNodes)) {\n          throw new Error(\"`toggledNodes` must be an array.\");\n        }\n        const allHaveIds = normalisedState.toggledNodes.every(\n          (innerState) => typeof innerState === \"object\" && \"nodeId\" in innerState && typeof innerState.nodeId === \"string\"\n        );\n        if (!allHaveIds) {\n          throw new Error(\"Every `toggledNode` requires an associated string id.\");\n        }\n      }\n      const isThisNodeSelected = normalisedState.selectAllChildren ?? !parentSelected;\n      const convertedChildren = normalisedState.toggledNodes?.map((innerState) => [\n        innerState.nodeId,\n        recursivelyDeserializeState(innerState, isThisNodeSelected)\n      ]);\n      const doesRedundantStateExist = convertedChildren?.some(\n        ([, innerState]) => isThisNodeSelected === innerState.selectAllChildren && innerState.toggledNodes.size === 0\n      );\n      if (doesRedundantStateExist) {\n        throw new Error(`\n                    Row selection state could not be parsed due to invalid data. Ensure all child state has toggledNodes or does not conform with the parent rule.\n                    Please rebuild the selection state and reapply it.\n                `);\n      }\n      return {\n        selectAllChildren: isThisNodeSelected,\n        toggledNodes: new Map(convertedChildren)\n      };\n    };\n    try {\n      this.selectedState = recursivelyDeserializeState(state, !!state.selectAllChildren);\n    } catch (e) {\n      _errorOnce42(e.message);\n    }\n  }\n  deleteSelectionStateFromParent(parentRoute, removedNodeIds) {\n    let parentState = this.selectedState;\n    const remainingRoute = [...parentRoute];\n    while (parentState && remainingRoute.length) {\n      parentState = parentState.toggledNodes.get(remainingRoute.pop());\n    }\n    if (!parentState) {\n      return false;\n    }\n    let anyStateChanged = false;\n    removedNodeIds.forEach((id) => {\n      if (parentState?.toggledNodes.delete(id)) {\n        anyStateChanged = true;\n      }\n    });\n    if (anyStateChanged) {\n      this.removeRedundantState();\n    }\n    return anyStateChanged;\n  }\n  overrideSelectionValue(newValue, source) {\n    if (!isSelectionUIEvent2(source)) {\n      return newValue;\n    }\n    const root = this.selectionCtx.getRoot();\n    const node = root ? this.rowModel.getRowNode(root) : null;\n    return node ? node.isSelected() ?? false : true;\n  }\n  setNodesSelected({ nodes, newValue, rangeSelect, clearSelection, source }) {\n    if (nodes.length === 0)\n      return 0;\n    if (rangeSelect) {\n      if (nodes.length > 1) {\n        throw new Error(\"AG Grid: cannot select multiple rows when using rangeSelect\");\n      }\n      const node = nodes[0];\n      const newSelectionValue = this.overrideSelectionValue(newValue, source);\n      if (this.selectionCtx.isInRange(node.id)) {\n        const partition = this.selectionCtx.truncate(node.id);\n        if (newSelectionValue) {\n          this.selectRange(partition.discard, false);\n        }\n        this.selectRange(partition.keep, newSelectionValue);\n        return 1;\n      } else {\n        const fromNode = this.selectionCtx.getRoot();\n        const toNode = node;\n        if (fromNode !== toNode.id) {\n          const partition = this.selectionCtx.extend(node.id, true);\n          if (newSelectionValue) {\n            this.selectRange(partition.discard, false);\n          }\n          this.selectRange(partition.keep, newSelectionValue);\n          return 1;\n        }\n      }\n      return 1;\n    }\n    const onlyThisNode = clearSelection && newValue && !rangeSelect;\n    if (!_isMultiRowSelection2(this.gos) || onlyThisNode) {\n      if (nodes.length > 1) {\n        throw new Error(\"AG Grid: cannot select multiple rows when rowSelection.mode is set to 'singleRow'\");\n      }\n      this.deselectAllRowNodes();\n    }\n    nodes.forEach((node) => {\n      const idPathToNode = this.getRouteToNode(node);\n      this.recursivelySelectNode(idPathToNode, this.selectedState, newValue);\n    });\n    this.removeRedundantState();\n    this.selectionCtx.setRoot(_last23(nodes).id);\n    return 1;\n  }\n  selectRange(nodes, newValue) {\n    const routes = nodes.map(this.getRouteToNode).sort((a, b) => b.length - a.length);\n    const seen = /* @__PURE__ */ new Set();\n    routes.forEach((route) => {\n      if (seen.has(_last23(route))) {\n        return;\n      }\n      route.forEach((part) => seen.add(part));\n      this.recursivelySelectNode(route, this.selectedState, newValue);\n    });\n    this.removeRedundantState();\n  }\n  isNodeSelected(node) {\n    const path = this.getRouteToNode(node);\n    return this.isNodePathSelected(path, this.selectedState);\n  }\n  isNodePathSelected([nextNode, ...nodes], state) {\n    if (nodes.length === 0) {\n      const isToggled = state.toggledNodes.has(nextNode.id);\n      if (nextNode.hasChildren()) {\n        const groupState = state.toggledNodes.get(nextNode.id);\n        if (groupState && groupState.toggledNodes.size) {\n          return void 0;\n        }\n      }\n      return state.selectAllChildren ? !isToggled : isToggled;\n    }\n    if (state.toggledNodes.has(nextNode.id)) {\n      const nextState = state.toggledNodes.get(nextNode.id);\n      if (nextState) {\n        return this.isNodePathSelected(nodes, nextState);\n      }\n    }\n    return state.selectAllChildren;\n  }\n  getRouteToNode(node) {\n    const pathToNode = [];\n    let tempNode = node;\n    while (tempNode.parent) {\n      pathToNode.push(tempNode);\n      tempNode = tempNode.parent;\n    }\n    return pathToNode.reverse();\n  }\n  removeRedundantState() {\n    if (this.filterManager?.isAnyFilterPresent()) {\n      return;\n    }\n    const forEachNodeStateDepthFirst = (state = this.selectedState, thisKey, parentState) => {\n      state.toggledNodes.forEach((value, key) => {\n        forEachNodeStateDepthFirst(value, key, state);\n      });\n      if (thisKey) {\n        const thisRow = this.rowModel.getRowNode(thisKey);\n        const thisRowStore = thisRow?.childStore;\n        const isStoreSizeKnown = thisRowStore?.isLastRowIndexKnown();\n        if (isStoreSizeKnown) {\n          const possibleAllNodesToggled = state.toggledNodes.size >= thisRowStore.getRowCount();\n          if (possibleAllNodesToggled) {\n            for (const childState of state.toggledNodes.entries()) {\n              const [key, value] = childState;\n              if (value.toggledNodes.size > 0) {\n                return;\n              }\n              const rowDoesNotExist = !this.rowModel.getRowNode(key);\n              if (rowDoesNotExist) {\n                return;\n              }\n            }\n            state.selectAllChildren = !state.selectAllChildren;\n            state.toggledNodes.clear();\n          }\n        }\n      }\n      const hasNoToggledRows = state.toggledNodes.size === 0;\n      const isIdenticalToParent = parentState?.selectAllChildren === state.selectAllChildren;\n      if (hasNoToggledRows && isIdenticalToParent) {\n        parentState?.toggledNodes.delete(thisKey);\n      }\n    };\n    forEachNodeStateDepthFirst();\n  }\n  recursivelySelectNode([nextNode, ...nodes], selectedState, newValue) {\n    if (!nextNode) {\n      return;\n    }\n    const isLastNode = !nodes.length;\n    if (isLastNode) {\n      const isNodeSelectable = nextNode.selectable;\n      const doesNodeConform = selectedState.selectAllChildren === newValue;\n      if (doesNodeConform || !isNodeSelectable) {\n        selectedState.toggledNodes.delete(nextNode.id);\n        return;\n      }\n      const newState = {\n        selectAllChildren: newValue,\n        toggledNodes: /* @__PURE__ */ new Map()\n      };\n      selectedState.toggledNodes.set(nextNode.id, newState);\n      return;\n    }\n    const doesStateAlreadyExist = selectedState.toggledNodes.has(nextNode.id);\n    const childState = selectedState.toggledNodes.get(nextNode.id) ?? {\n      selectAllChildren: selectedState.selectAllChildren,\n      toggledNodes: /* @__PURE__ */ new Map()\n    };\n    if (!doesStateAlreadyExist) {\n      selectedState.toggledNodes.set(nextNode.id, childState);\n    }\n    this.recursivelySelectNode(nodes, childState, newValue);\n    if (selectedState.selectAllChildren === childState.selectAllChildren && childState.toggledNodes.size === 0) {\n      selectedState.toggledNodes.delete(nextNode.id);\n    }\n  }\n  getSelectedNodes() {\n    _warnOnce92(\n      `\\`getSelectedNodes\\` and \\`getSelectedRows\\` functions cannot be used with \\`groupSelectsChildren\\` and the server-side row model.\n            Use \\`api.getServerSideSelectionState()\\` instead.`\n    );\n    const selectedNodes = [];\n    this.rowModel.forEachNode((node) => {\n      if (node.isSelected()) {\n        selectedNodes.push(node);\n      }\n    });\n    return selectedNodes;\n  }\n  processNewRow() {\n  }\n  getSelectedRows() {\n    return this.getSelectedNodes().map((node) => node.data);\n  }\n  getSelectionCount() {\n    return -1;\n  }\n  isEmpty() {\n    return !this.selectedState.selectAllChildren && !this.selectedState.toggledNodes?.size;\n  }\n  selectAllRowNodes() {\n    this.selectedState = { selectAllChildren: true, toggledNodes: /* @__PURE__ */ new Map() };\n    this.selectionCtx.reset();\n  }\n  deselectAllRowNodes() {\n    this.selectedState = { selectAllChildren: false, toggledNodes: /* @__PURE__ */ new Map() };\n    this.selectionCtx.reset();\n  }\n  getSelectAllState() {\n    if (this.selectedState.selectAllChildren) {\n      if (this.selectedState.toggledNodes.size > 0) {\n        return null;\n      }\n      return true;\n    }\n    if (this.selectedState.toggledNodes.size > 0) {\n      return null;\n    }\n    return false;\n  }\n};\nvar ServerSideSelectionService = class extends BeanStub132 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"selectionService\";\n  }\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.addManagedPropertyListeners([\"groupSelectsChildren\", \"rowSelection\"], () => {\n      const groupSelectsChildren2 = _getGroupSelectsDescendants(this.gos);\n      const Strategy2 = groupSelectsChildren2 && this.selectionStrategy instanceof DefaultStrategy ? GroupSelectsChildrenStrategy : !groupSelectsChildren2 && this.selectionStrategy instanceof GroupSelectsChildrenStrategy ? DefaultStrategy : void 0;\n      if (Strategy2) {\n        this.destroyBean(this.selectionStrategy);\n        this.selectionStrategy = this.createManagedBean(new Strategy2());\n        this.shotgunResetNodeSelectionState();\n        this.dispatchSelectionChanged(\"api\");\n      }\n    });\n    this.addManagedPropertyListeners([\"rowSelection\"], () => {\n      const rowSelection = _getRowSelectionMode(this.gos);\n      if (rowSelection !== this.selectionMode) {\n        this.selectionMode = rowSelection;\n        this.deselectAllRowNodes({ source: \"api\" });\n      }\n    });\n    this.selectionMode = _getRowSelectionMode(this.gos);\n    const groupSelectsChildren = _getGroupSelectsDescendants(this.gos);\n    const Strategy = !groupSelectsChildren ? DefaultStrategy : GroupSelectsChildrenStrategy;\n    this.selectionStrategy = this.createManagedBean(new Strategy());\n  }\n  getSelectionState() {\n    return this.selectionStrategy.getSelectedState();\n  }\n  setSelectionState(state, source) {\n    if (Array.isArray(state)) {\n      return;\n    }\n    this.selectionStrategy.setSelectedState(state);\n    this.shotgunResetNodeSelectionState();\n    this.dispatchSelectionChanged(source);\n  }\n  setNodesSelected(params) {\n    const { nodes, ...otherParams } = params;\n    if (nodes.length > 1 && this.selectionMode !== \"multiRow\") {\n      _warnOnce102(`cannot multi select unless selection mode is 'multiRow'`);\n      return 0;\n    }\n    if (nodes.length > 1 && params.rangeSelect) {\n      _warnOnce102(`cannot use range selection when multi selecting rows`);\n      return 0;\n    }\n    const adjustedParams = {\n      nodes: nodes.filter((node) => node.selectable),\n      ...otherParams\n    };\n    if (!adjustedParams.nodes.length) {\n      return 0;\n    }\n    const changedNodes = this.selectionStrategy.setNodesSelected(adjustedParams);\n    this.shotgunResetNodeSelectionState(adjustedParams.source);\n    this.dispatchSelectionChanged(adjustedParams.source);\n    return changedNodes;\n  }\n  /**\n   * Deletes the selection state for a set of nodes, for use after deleting nodes via\n   * transaction. As this is designed for transactions, all nodes should belong to the same group.\n   */\n  deleteSelectionStateFromParent(storeRoute, removedNodeIds) {\n    const stateChanged = this.selectionStrategy.deleteSelectionStateFromParent(storeRoute, removedNodeIds);\n    if (!stateChanged) {\n      return;\n    }\n    this.shotgunResetNodeSelectionState();\n    this.dispatchSelectionChanged(\"api\");\n  }\n  shotgunResetNodeSelectionState(source) {\n    this.rowModel.forEachNode((node) => {\n      if (node.stub) {\n        return;\n      }\n      const isNodeSelected = this.selectionStrategy.isNodeSelected(node);\n      if (isNodeSelected !== node.isSelected()) {\n        node.selectThisNode(isNodeSelected, void 0, source);\n      }\n    });\n  }\n  getSelectedNodes() {\n    return this.selectionStrategy.getSelectedNodes();\n  }\n  getSelectedRows() {\n    return this.selectionStrategy.getSelectedRows();\n  }\n  getSelectionCount() {\n    return this.selectionStrategy.getSelectionCount();\n  }\n  syncInRowNode(rowNode) {\n    this.selectionStrategy.processNewRow(rowNode);\n    const isNodeSelected = this.selectionStrategy.isNodeSelected(rowNode);\n    if (isNodeSelected != false && !rowNode.selectable) {\n      this.selectionStrategy.setNodesSelected({\n        nodes: [rowNode],\n        newValue: false,\n        source: \"api\"\n      });\n      this.shotgunResetNodeSelectionState();\n      this.dispatchSelectionChanged(\"api\");\n      return;\n    }\n    rowNode.setSelectedInitialValue(isNodeSelected);\n  }\n  reset() {\n    this.selectionStrategy.deselectAllRowNodes({ source: \"api\" });\n  }\n  isEmpty() {\n    return this.selectionStrategy.isEmpty();\n  }\n  hasNodesToSelect() {\n    return true;\n  }\n  selectAllRowNodes(params) {\n    validateSelectionParameters(params);\n    if (_isUsingNewRowSelectionAPI2(this.gos) && _getRowSelectionMode(this.gos) !== \"multiRow\") {\n      return _warnOnce102(\"cannot multi select unless selection mode is 'multiRow'\");\n    }\n    this.selectionStrategy.selectAllRowNodes(params);\n    this.rowModel.forEachNode((node) => {\n      if (node.stub) {\n        return;\n      }\n      node.selectThisNode(true, void 0, params.source);\n    });\n    this.dispatchSelectionChanged(params.source);\n  }\n  deselectAllRowNodes(params) {\n    validateSelectionParameters(params);\n    this.selectionStrategy.deselectAllRowNodes(params);\n    this.rowModel.forEachNode((node) => {\n      if (node.stub) {\n        return;\n      }\n      node.selectThisNode(false, void 0, params.source);\n    });\n    this.dispatchSelectionChanged(params.source);\n  }\n  getSelectAllState(justFiltered, justCurrentPage) {\n    return this.selectionStrategy.getSelectAllState(justFiltered, justCurrentPage);\n  }\n  // used by CSRM\n  updateGroupsFromChildrenSelections() {\n    return false;\n  }\n  // used by CSRM\n  getBestCostNodeSelection() {\n    _warnOnce102(\"calling gridApi.getBestCostNodeSelection() is only possible when using rowModelType=`clientSide`.\");\n    return void 0;\n  }\n  // used by CSRM\n  filterFromSelection() {\n    return;\n  }\n  dispatchSelectionChanged(source) {\n    this.eventService.dispatchEvent({\n      type: \"selectionChanged\",\n      source\n    });\n  }\n};\nfunction validateSelectionParameters({\n  justCurrentPage,\n  justFiltered\n}) {\n  if (justCurrentPage || justFiltered) {\n    _warnOnce102(\n      `selecting just ${justCurrentPage ? \"current page\" : \"filtered\"} only works when gridOptions.rowModelType='clientSide'`\n    );\n  }\n}\nvar StoreFactory = class extends BeanStub142 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmStoreFactory\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.funcColsService = beans.funcColsService;\n  }\n  createStore(ssrmParams, parentNode) {\n    const storeParams = this.getStoreParams(ssrmParams, parentNode);\n    const CacheClass = storeParams.suppressInfiniteScroll ? FullStore : LazyStore;\n    return new CacheClass(ssrmParams, storeParams, parentNode);\n  }\n  getStoreParams(ssrmParams, parentNode) {\n    const userStoreParams = this.getLevelSpecificParams(parentNode);\n    const infiniteScroll = this.isInfiniteScroll(userStoreParams);\n    const cacheBlockSize = this.getBlockSize(infiniteScroll, userStoreParams);\n    const maxBlocksInCache = this.getMaxBlocksInCache(infiniteScroll, ssrmParams, userStoreParams);\n    const storeParams = {\n      suppressInfiniteScroll: !infiniteScroll,\n      cacheBlockSize,\n      maxBlocksInCache\n    };\n    return storeParams;\n  }\n  getMaxBlocksInCache(infiniteScroll, ssrmParams, userStoreParams) {\n    if (!infiniteScroll) {\n      return void 0;\n    }\n    const maxBlocksInCache = userStoreParams && userStoreParams.maxBlocksInCache != null ? userStoreParams.maxBlocksInCache : this.gos.get(\"maxBlocksInCache\");\n    const maxBlocksActive = maxBlocksInCache != null && maxBlocksInCache >= 0;\n    if (!maxBlocksActive) {\n      return void 0;\n    }\n    if (ssrmParams.dynamicRowHeight) {\n      const message = \"Server Side Row Model does not support Dynamic Row Height and Cache Purging. Either a) remove getRowHeight() callback or b) remove maxBlocksInCache property. Purging has been disabled.\";\n      _warnOnce112(message);\n      return void 0;\n    }\n    if (this.columnModel.isAutoRowHeightActive()) {\n      const message = \"Server Side Row Model does not support Auto Row Height and Cache Purging. Either a) remove colDef.autoHeight or b) remove maxBlocksInCache property. Purging has been disabled.\";\n      _warnOnce112(message);\n      return void 0;\n    }\n    return maxBlocksInCache;\n  }\n  getBlockSize(infiniteScroll, userStoreParams) {\n    if (!infiniteScroll) {\n      return void 0;\n    }\n    const blockSize = userStoreParams && userStoreParams.cacheBlockSize != null ? userStoreParams.cacheBlockSize : this.gos.get(\"cacheBlockSize\");\n    if (blockSize != null && blockSize > 0) {\n      return blockSize;\n    } else {\n      return 100;\n    }\n  }\n  getLevelSpecificParams(parentNode) {\n    const callback = this.gos.getCallback(\"getServerSideGroupLevelParams\");\n    if (!callback) {\n      return void 0;\n    }\n    const params = {\n      level: parentNode.level + 1,\n      parentRowNode: parentNode.level >= 0 ? parentNode : void 0,\n      rowGroupColumns: this.funcColsService.getRowGroupColumns(),\n      pivotColumns: this.funcColsService.getPivotColumns(),\n      pivotMode: this.columnModel.isPivotMode()\n    };\n    const res = callback(params);\n    return res;\n  }\n  isInfiniteScroll(storeParams) {\n    const res = storeParams && storeParams.suppressInfiniteScroll != null ? storeParams.suppressInfiniteScroll : this.isSuppressServerSideInfiniteScroll();\n    return !res;\n  }\n  isSuppressServerSideInfiniteScroll() {\n    return this.gos.get(\"suppressServerSideInfiniteScroll\");\n  }\n};\nvar StoreUtils = class extends BeanStub152 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmStoreUtils\";\n  }\n  wireBeans(beans) {\n    this.columnModel = beans.columnModel;\n    this.serverSideRowModel = beans.rowModel;\n    this.storeFactory = beans.ssrmStoreFactory;\n  }\n  loadFromDatasource(p) {\n    const { storeParams, parentBlock, parentNode } = p;\n    const groupKeys = parentNode.getRoute() ?? [];\n    if (!storeParams.datasource) {\n      return;\n    }\n    const request = {\n      startRow: p.startRow,\n      endRow: p.endRow,\n      rowGroupCols: storeParams.rowGroupCols,\n      valueCols: storeParams.valueCols,\n      pivotCols: storeParams.pivotCols,\n      pivotMode: storeParams.pivotMode,\n      groupKeys,\n      filterModel: storeParams.filterModel,\n      sortModel: storeParams.sortModel\n    };\n    const getRowsParams = this.gos.addGridCommonParams({\n      success: p.success,\n      fail: p.fail,\n      request,\n      parentNode: p.parentNode\n    });\n    window.setTimeout(() => {\n      if (!storeParams.datasource || !parentBlock.isAlive()) {\n        p.fail();\n        return;\n      }\n      storeParams.datasource.getRows(getRowsParams);\n    }, 0);\n  }\n  getChildStore(keys, currentCache, findNodeFunc) {\n    if (_missingOrEmpty22(keys)) {\n      return currentCache;\n    }\n    const nextKey = keys[0];\n    const nextNode = findNodeFunc(nextKey);\n    if (nextNode) {\n      if (keys.length === 1 && !nextNode.childStore) {\n        const storeParams = this.serverSideRowModel.getParams();\n        nextNode.childStore = this.createBean(this.storeFactory.createStore(storeParams, nextNode));\n      }\n      const keyListForNextLevel = keys.slice(1, keys.length);\n      const nextStore = nextNode.childStore;\n      return nextStore ? nextStore.getChildStore(keyListForNextLevel) : null;\n    }\n    return null;\n  }\n  isServerRefreshNeeded(parentRowNode, rowGroupCols, params) {\n    if (params.valueColChanged || params.secondaryColChanged) {\n      return true;\n    }\n    const level = parentRowNode.level + 1;\n    const grouping = level < rowGroupCols.length;\n    const leafNodes = !grouping;\n    if (leafNodes) {\n      return true;\n    }\n    const colIdThisGroup = rowGroupCols[level].id;\n    const actionOnThisGroup = params.changedColumns.indexOf(colIdThisGroup) > -1;\n    if (actionOnThisGroup) {\n      return true;\n    }\n    const allCols = this.columnModel.getCols();\n    const affectedGroupCols = allCols.filter((col) => col.getColDef().showRowGroup && params.changedColumns.includes(col.getId())).map((col) => col.getColDef().showRowGroup).some((group) => group === true || group === colIdThisGroup);\n    return affectedGroupCols;\n  }\n  getServerSideInitialRowCount() {\n    return this.gos.get(\"serverSideInitialRowCount\");\n  }\n  assertRowModelIsServerSide(key) {\n    if (!_isServerSideRowModel4(this.gos)) {\n      _warnOnce122(`The '${key}' property can only be used with the Server Side Row Model.`);\n      return false;\n    }\n    return true;\n  }\n  assertNotTreeData(key) {\n    if (this.gos.get(\"treeData\")) {\n      _warnOnce122(`The '${key}' property cannot be used while using tree data.`);\n      return false;\n    }\n    return true;\n  }\n  isServerSideSortAllLevels() {\n    return this.gos.get(\"serverSideSortAllLevels\") && this.assertRowModelIsServerSide(\"serverSideSortAllLevels\");\n  }\n  isServerSideOnlyRefreshFilteredGroups() {\n    return this.gos.get(\"serverSideOnlyRefreshFilteredGroups\") && this.assertRowModelIsServerSide(\"serverSideOnlyRefreshFilteredGroups\");\n  }\n  isServerSideSortOnServer() {\n    return this.gos.get(\"serverSideSortOnServer\") && this.assertRowModelIsServerSide(\"serverSideSortOnServer\") && this.assertNotTreeData(\"serverSideSortOnServer\");\n  }\n  isServerSideFilterOnServer() {\n    return this.gos.get(\"serverSideFilterOnServer\") && this.assertRowModelIsServerSide(\"serverSideFilterOnServer\") && this.assertNotTreeData(\"serverSideFilterOnServer\");\n  }\n};\nvar TransactionManager = class extends BeanStub162 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"ssrmTransactionManager\";\n    this.asyncTransactions = [];\n  }\n  wireBeans(beans) {\n    this.valueCache = beans.valueCache;\n    this.serverSideRowModel = beans.rowModel;\n    this.selectionService = beans.selectionService;\n  }\n  postConstruct() {\n    if (!_isServerSideRowModel5(this.gos)) {\n      return;\n    }\n  }\n  applyTransactionAsync(transaction, callback) {\n    if (this.asyncTransactionsTimeout == null) {\n      this.scheduleExecuteAsync();\n    }\n    this.asyncTransactions.push({ transaction, callback });\n  }\n  scheduleExecuteAsync() {\n    const waitMillis = this.gos.get(\"asyncTransactionWaitMillis\");\n    this.asyncTransactionsTimeout = window.setTimeout(() => {\n      this.executeAsyncTransactions();\n    }, waitMillis);\n  }\n  executeAsyncTransactions() {\n    if (!this.asyncTransactions) {\n      return;\n    }\n    const resultFuncs = [];\n    const resultsForEvent = [];\n    const transactionsToRetry = [];\n    let atLeastOneTransactionApplied = false;\n    this.asyncTransactions.forEach((txWrapper) => {\n      let result;\n      const hasStarted = this.serverSideRowModel.executeOnStore(txWrapper.transaction.route, (cache) => {\n        result = cache.applyTransaction(txWrapper.transaction);\n      });\n      if (!hasStarted) {\n        result = { status: ServerSideTransactionResultStatus3.StoreNotStarted };\n      } else if (result == void 0) {\n        result = { status: ServerSideTransactionResultStatus3.StoreNotFound };\n      }\n      resultsForEvent.push(result);\n      const retryTransaction = result.status == ServerSideTransactionResultStatus3.StoreLoading;\n      if (retryTransaction) {\n        transactionsToRetry.push(txWrapper);\n        return;\n      }\n      if (txWrapper.callback) {\n        resultFuncs.push(() => txWrapper.callback(result));\n      }\n      if (result.status === ServerSideTransactionResultStatus3.Applied) {\n        atLeastOneTransactionApplied = true;\n      }\n    });\n    if (resultFuncs.length > 0) {\n      window.setTimeout(() => {\n        resultFuncs.forEach((func) => func());\n      }, 0);\n    }\n    this.asyncTransactionsTimeout = void 0;\n    this.asyncTransactions = transactionsToRetry;\n    if (atLeastOneTransactionApplied) {\n      this.valueCache.onDataChanged();\n      this.eventService.dispatchEvent({ type: \"storeUpdated\" });\n    }\n    if (resultsForEvent.length > 0) {\n      this.eventService.dispatchEvent({\n        type: \"asyncTransactionsFlushed\",\n        results: resultsForEvent\n      });\n    }\n  }\n  flushAsyncTransactions() {\n    if (this.asyncTransactionsTimeout != null) {\n      clearTimeout(this.asyncTransactionsTimeout);\n    }\n    this.executeAsyncTransactions();\n  }\n  applyTransaction(transaction) {\n    let res;\n    const hasStarted = this.serverSideRowModel.executeOnStore(transaction.route, (store) => {\n      res = store.applyTransaction(transaction);\n    });\n    if (!hasStarted) {\n      return { status: ServerSideTransactionResultStatus3.StoreNotStarted };\n    } else if (res) {\n      this.valueCache.onDataChanged();\n      if (res.remove) {\n        const removedRowIds = res.remove.map((row) => row.id);\n        this.selectionService.deleteSelectionStateFromParent(transaction.route || [], removedRowIds);\n      }\n      this.eventService.dispatchEvent({ type: \"storeUpdated\" });\n      return res;\n    } else {\n      return { status: ServerSideTransactionResultStatus3.StoreNotFound };\n    }\n  }\n};\nvar VERSION15 = \"32.3.9\";\nvar ServerSideRowModelCoreModule = _defineModule15({\n  version: VERSION15,\n  moduleName: `${ModuleNames25.ServerSideRowModelModule}-core`,\n  rowModel: \"serverSide\",\n  beans: [\n    ServerSideRowModel,\n    ExpandListener,\n    SortListener,\n    StoreUtils,\n    BlockUtils,\n    NodeManager,\n    TransactionManager,\n    FilterListener,\n    StoreFactory,\n    ListenerUtils,\n    ServerSideSelectionService,\n    ServerSideExpansionService,\n    LazyBlockLoadingService\n  ],\n  dependantModules: [EnterpriseCoreModule, _RowNodeBlockModule]\n});\nvar ServerSideRowModelApiModule = _defineModule15({\n  version: VERSION15,\n  moduleName: `${ModuleNames25.ServerSideRowModelModule}-api`,\n  beans: [RowModelHelperService],\n  apiFunctions: {\n    getServerSideSelectionState,\n    setServerSideSelectionState,\n    applyServerSideTransaction,\n    applyServerSideTransactionAsync,\n    applyServerSideRowData,\n    retryServerSideLoads,\n    flushServerSideAsyncTransactions,\n    refreshServerSide,\n    getServerSideGroupLevelState\n  },\n  dependantModules: [ServerSideRowModelCoreModule, _CsrmSsrmSharedApiModule, _SsrmInfiniteSharedApiModule]\n});\nvar ServerSideRowModelModule = _defineModule15({\n  version: VERSION15,\n  moduleName: ModuleNames25.ServerSideRowModelModule,\n  dependantModules: [ServerSideRowModelCoreModule, ServerSideRowModelApiModule]\n});\n\n// enterprise-modules/set-filter/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames17, _ColumnFilterModule as _ColumnFilterModule4, _FloatingFilterModule as _FloatingFilterModule2, _defineModule as _defineModule16 } from \"ag-grid-community\";\nimport {\n  AgInputTextFieldSelector as AgInputTextFieldSelector6,\n  AgPromise as AgPromise32,\n  GROUP_AUTO_COLUMN_ID as GROUP_AUTO_COLUMN_ID3,\n  KeyCode as KeyCode21,\n  ProvidedFilter as ProvidedFilter2,\n  RefPlaceholder as RefPlaceholder210,\n  _areEqual as _areEqual5,\n  _getActiveDomElement as _getActiveDomElement13,\n  _last as _last24,\n  _makeNull as _makeNull4,\n  _setDisplayed as _setDisplayed26,\n  _toStringOrNull as _toStringOrNull3,\n  _warnOnce as _warnOnce46\n} from \"ag-grid-community\";\nimport {\n  AgCheckboxSelector as AgCheckboxSelector5,\n  Component as Component58,\n  RefPlaceholder as RefPlaceholder37,\n  _createIcon as _createIcon3,\n  _setAriaChecked,\n  _setAriaDescribedBy as _setAriaDescribedBy3,\n  _setAriaExpanded as _setAriaExpanded9,\n  _setAriaLabel as _setAriaLabel10,\n  _setAriaLabelledBy as _setAriaLabelledBy3,\n  _setAriaLevel as _setAriaLevel4,\n  _setDisplayed as _setDisplayed13,\n  _toStringOrNull as _toStringOrNull4,\n  _warnOnce as _warnOnce39\n} from \"ag-grid-community\";\nimport { _last as _last13, _makeNull as _makeNull5, _toStringOrNull as _toStringOrNull22 } from \"ag-grid-community\";\nimport {\n  AgPromise as AgPromise24,\n  LocalEventService as LocalEventService2,\n  _defaultComparator,\n  _errorOnce as _errorOnce6,\n  _exists as _exists17,\n  _isClientSideRowModel as _isClientSideRowModel5,\n  _makeNull as _makeNull32,\n  _warnOnce as _warnOnce310\n} from \"ag-grid-community\";\nimport { AgPromise as AgPromise7, _makeNull as _makeNull22 } from \"ag-grid-community\";\nimport { _warnOnce as _warnOnce212 } from \"ag-grid-community\";\nimport { AgInputTextFieldSelector as AgInputTextFieldSelector23, Component as Component214, RefPlaceholder as RefPlaceholder38 } from \"ag-grid-community\";\nvar SetFilterDisplayValue = class {\n};\nSetFilterDisplayValue.SELECT_ALL = \"__AG_SELECT_ALL__\";\nSetFilterDisplayValue.ADD_SELECTION_TO_FILTER = \"__AG_ADD_SELECTION_TO_FILTER__\";\nvar DEFAULT_LOCALE_TEXT = {\n  loadingOoo: \"Loading...\",\n  blanks: \"(Blanks)\",\n  searchOoo: \"Search...\",\n  selectAll: \"(Select All)\",\n  selectAllSearchResults: \"(Select All Search Results)\",\n  addCurrentSelectionToFilter: \"Add current selection to filter\",\n  noMatches: \"No matches.\"\n};\nvar SetFilterListItem = class extends Component58 {\n  constructor(params) {\n    super(\n      params.isGroup ? (\n        /* html */\n        `\n            <div class=\"ag-set-filter-item\" aria-hidden=\"true\">\n                <span class=\"ag-set-filter-group-icons\">\n                    <span class=\"ag-set-filter-group-closed-icon\" data-ref=\"eGroupClosedIcon\"></span>\n                    <span class=\"ag-set-filter-group-opened-icon\" data-ref=\"eGroupOpenedIcon\"></span>\n                    <span class=\"ag-set-filter-group-indeterminate-icon\" data-ref=\"eGroupIndeterminateIcon\"></span>\n                </span>\n                <ag-checkbox data-ref=\"eCheckbox\" class=\"ag-set-filter-item-checkbox\"></ag-checkbox>\n            </div>`\n      ) : (\n        /* html */\n        `\n            <div class=\"ag-set-filter-item\">\n                <ag-checkbox data-ref=\"eCheckbox\" class=\"ag-set-filter-item-checkbox\"></ag-checkbox>\n            </div>`\n      ),\n      [AgCheckboxSelector5]\n    );\n    this.eCheckbox = RefPlaceholder37;\n    this.eGroupOpenedIcon = RefPlaceholder37;\n    this.eGroupClosedIcon = RefPlaceholder37;\n    this.eGroupIndeterminateIcon = RefPlaceholder37;\n    this.focusWrapper = params.focusWrapper;\n    this.value = params.value;\n    this.params = params.params;\n    this.translate = params.translate;\n    this.valueFormatter = params.valueFormatter;\n    this.item = params.item;\n    this.isSelected = params.isSelected;\n    this.isTree = params.isTree;\n    this.depth = params.depth ?? 0;\n    this.isGroup = params.isGroup;\n    this.groupsExist = params.groupsExist;\n    this.isExpanded = params.isExpanded;\n    this.hasIndeterminateExpandState = params.hasIndeterminateExpandState;\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.userComponentFactory = beans.userComponentFactory;\n  }\n  postConstruct() {\n    this.addDestroyFunc(() => this.destroyCellRendererComponent?.());\n    this.render();\n    this.eCheckbox.setLabelEllipsis(true).setValue(this.isSelected, true).setDisabled(!!this.params.readOnly).getInputElement().setAttribute(\"tabindex\", \"-1\");\n    this.refreshVariableAriaLabels();\n    if (this.isTree) {\n      if (this.depth > 0) {\n        this.addCssClass(\"ag-set-filter-indent-\" + this.depth);\n        this.getGui().style.setProperty(\"--ag-indentation-level\", String(this.depth));\n      }\n      if (this.isGroup) {\n        this.setupExpansion();\n      } else {\n        if (this.groupsExist) {\n          this.addCssClass(\"ag-set-filter-add-group-indent\");\n        }\n      }\n      _setAriaLevel4(this.getAriaElement(), this.depth + 1);\n    }\n    this.refreshAriaChecked();\n    if (this.params.readOnly) {\n      return;\n    }\n    this.eCheckbox.onValueChange((value) => this.onCheckboxChanged(!!value));\n  }\n  getFocusableElement() {\n    return this.focusWrapper;\n  }\n  setupExpansion() {\n    this.eGroupClosedIcon.appendChild(_createIcon3(\"setFilterGroupClosed\", this.gos, null));\n    this.eGroupOpenedIcon.appendChild(_createIcon3(\"setFilterGroupOpen\", this.gos, null));\n    const listener = this.onExpandOrContractClicked.bind(this);\n    this.addManagedElementListeners(this.eGroupClosedIcon, { click: listener });\n    this.addManagedElementListeners(this.eGroupOpenedIcon, { click: listener });\n    if (this.hasIndeterminateExpandState) {\n      this.eGroupIndeterminateIcon.appendChild(_createIcon3(\"setFilterGroupIndeterminate\", this.gos, null));\n      this.addManagedElementListeners(this.eGroupIndeterminateIcon, {\n        click: listener\n      });\n    }\n    this.setExpandedIcons();\n    this.refreshAriaExpanded();\n  }\n  onExpandOrContractClicked() {\n    this.setExpanded(!this.isExpanded);\n  }\n  setExpanded(isExpanded, silent) {\n    if (this.isGroup && isExpanded !== this.isExpanded) {\n      this.isExpanded = isExpanded;\n      const event = {\n        type: \"expandedChanged\",\n        isExpanded: !!isExpanded,\n        item: this.item\n      };\n      if (!silent) {\n        this.dispatchLocalEvent(event);\n      }\n      this.setExpandedIcons();\n      this.refreshAriaExpanded();\n    }\n  }\n  setExpandedIcons() {\n    _setDisplayed13(\n      this.eGroupClosedIcon,\n      this.hasIndeterminateExpandState ? this.isExpanded === false : !this.isExpanded\n    );\n    _setDisplayed13(this.eGroupOpenedIcon, this.isExpanded === true);\n    if (this.hasIndeterminateExpandState) {\n      _setDisplayed13(this.eGroupIndeterminateIcon, this.isExpanded === void 0);\n    }\n  }\n  onCheckboxChanged(isSelected) {\n    this.isSelected = isSelected;\n    const event = {\n      type: \"selectionChanged\",\n      isSelected,\n      item: this.item\n    };\n    this.dispatchLocalEvent(event);\n    this.refreshVariableAriaLabels();\n    this.refreshAriaChecked();\n  }\n  toggleSelected() {\n    if (this.params.readOnly) {\n      return;\n    }\n    this.setSelected(!this.isSelected);\n  }\n  setSelected(isSelected, silent) {\n    this.isSelected = isSelected;\n    this.eCheckbox.setValue(isSelected, silent);\n    this.refreshAriaChecked();\n  }\n  refreshVariableAriaLabels() {\n    if (!this.isTree) {\n      return;\n    }\n    const translate = this.localeService.getLocaleTextFunc();\n    const checkboxValue = this.eCheckbox.getValue();\n    const state = checkboxValue === void 0 ? translate(\"ariaIndeterminate\", \"indeterminate\") : checkboxValue ? translate(\"ariaVisible\", \"visible\") : translate(\"ariaHidden\", \"hidden\");\n    const visibilityLabel = translate(\"ariaToggleVisibility\", \"Press SPACE to toggle visibility\");\n    _setAriaLabelledBy3(this.eCheckbox.getInputElement(), void 0);\n    this.eCheckbox.setInputAriaLabel(`${visibilityLabel} (${state})`);\n  }\n  setupFixedAriaLabels(value) {\n    if (!this.isTree) {\n      return;\n    }\n    const translate = this.localeService.getLocaleTextFunc();\n    const itemLabel = translate(\"ariaFilterValue\", \"Filter Value\");\n    const ariaEl = this.getAriaElement();\n    _setAriaLabel10(ariaEl, `${value} ${itemLabel}`);\n    _setAriaDescribedBy3(ariaEl, this.eCheckbox.getInputElement().id);\n  }\n  refreshAriaChecked() {\n    const ariaEl = this.getAriaElement();\n    _setAriaChecked(ariaEl, this.eCheckbox.getValue());\n  }\n  refreshAriaExpanded() {\n    _setAriaExpanded9(this.getAriaElement(), !!this.isExpanded);\n  }\n  refresh(item, isSelected, isExpanded) {\n    this.item = item;\n    if (isSelected !== this.isSelected) {\n      this.setSelected(isSelected, true);\n    }\n    this.setExpanded(isExpanded, true);\n    if (this.valueFunction) {\n      const value = this.valueFunction();\n      this.setTooltipAndCellRendererParams(value, value);\n      if (!this.cellRendererComponent) {\n        this.renderCellWithoutCellRenderer();\n      }\n    }\n    if (this.cellRendererComponent) {\n      const success = this.cellRendererComponent.refresh?.(this.cellRendererParams);\n      if (!success) {\n        const oldComponent = this.cellRendererComponent;\n        this.renderCell();\n        this.destroyBean(oldComponent);\n      }\n    }\n  }\n  render() {\n    const {\n      params: { column }\n    } = this;\n    let { value } = this;\n    let formattedValue = null;\n    if (typeof value === \"function\") {\n      this.valueFunction = value;\n      formattedValue = this.valueFunction();\n      value = formattedValue;\n    } else if (this.isTree) {\n      formattedValue = _toStringOrNull4(value);\n    } else {\n      formattedValue = this.getFormattedValue(column, value);\n    }\n    this.setTooltipAndCellRendererParams(value, formattedValue);\n    this.renderCell();\n  }\n  setTooltipAndCellRendererParams(value, formattedValue) {\n    const isTooltipWhenTruncated = this.gos.get(\"tooltipShowMode\") === \"whenTruncated\";\n    if (this.params.showTooltips && (!isTooltipWhenTruncated || !this.params.cellRenderer)) {\n      const newTooltipText = formattedValue != null ? formattedValue : _toStringOrNull4(value);\n      let shouldDisplayTooltip;\n      if (isTooltipWhenTruncated) {\n        shouldDisplayTooltip = () => {\n          const el = this.eCheckbox.getGui().querySelector(\".ag-label\");\n          if (!el) {\n            return true;\n          }\n          return el.scrollWidth > el.clientWidth;\n        };\n      }\n      this.setTooltip({\n        newTooltipText,\n        location: \"setFilterValue\",\n        getColDef: () => this.params.colDef,\n        getColumn: () => this.params.column,\n        shouldDisplayTooltip\n      });\n    }\n    this.cellRendererParams = this.gos.addGridCommonParams({\n      value,\n      valueFormatted: formattedValue,\n      colDef: this.params.colDef,\n      column: this.params.column,\n      setTooltip: (value2, shouldDisplayTooltip) => {\n        this.setTooltip({\n          newTooltipText: value2,\n          getColDef: () => this.params.colDef,\n          getColumn: () => this.params.column,\n          location: \"setFilterValue\",\n          shouldDisplayTooltip\n        });\n      }\n    });\n  }\n  getTooltipParams() {\n    const res = super.getTooltipParams();\n    res.location = \"setFilterValue\";\n    res.colDef = this.getComponentHolder();\n    if (this.isTree) {\n      res.level = this.depth;\n    }\n    return res;\n  }\n  getFormattedValue(column, value) {\n    return this.valueService.formatValue(column, null, value, this.valueFormatter, false);\n  }\n  renderCell() {\n    const compDetails = this.userComponentFactory.getSetFilterCellRendererDetails(\n      this.params,\n      this.cellRendererParams\n    );\n    const cellRendererPromise = compDetails ? compDetails.newAgStackInstance() : void 0;\n    if (cellRendererPromise == null) {\n      this.renderCellWithoutCellRenderer();\n      return;\n    }\n    cellRendererPromise.then((component) => {\n      if (component) {\n        this.cellRendererComponent = component;\n        this.eCheckbox.setLabel(component.getGui());\n        this.destroyCellRendererComponent = () => this.destroyBean(component);\n      }\n    });\n  }\n  renderCellWithoutCellRenderer() {\n    let valueToRender = (this.cellRendererParams.valueFormatted == null ? this.cellRendererParams.value : this.cellRendererParams.valueFormatted) ?? this.translate(\"blanks\");\n    if (typeof valueToRender !== \"string\") {\n      _warnOnce39(\n        `Set Filter Value Formatter must return string values. Please ensure the Set Filter Value Formatter returns string values for complex objects. See ${this.getFrameworkOverrides().getDocLink(\"filter-set-filter-list/#filter-value-types\")}`\n      );\n      valueToRender = \"\";\n    }\n    this.eCheckbox.setLabel(valueToRender);\n    this.setupFixedAriaLabels(valueToRender);\n  }\n  getComponentHolder() {\n    return this.params.column.getColDef();\n  }\n};\nvar SetFilterModelFormatter = class {\n  getModelAsString(model, setFilter) {\n    const { values } = model || setFilter.getModel() || {};\n    const valueModel = setFilter.getValueModel();\n    if (values == null || valueModel == null) {\n      return \"\";\n    }\n    const availableKeys = values.filter((v) => valueModel.isKeyAvailable(v));\n    const numValues = availableKeys.length;\n    const formattedValues = availableKeys.slice(0, 10).map((key) => setFilter.getFormattedValue(key));\n    return `(${numValues}) ${formattedValues.join(\",\")}${numValues > 10 ? \",...\" : \"\"}`;\n  }\n};\nfunction processDataPath(dataPath, treeData, groupAllowUnbalanced) {\n  let processedDataPath = dataPath;\n  if (!processedDataPath) {\n    return null;\n  }\n  processedDataPath = processedDataPath.map((treeKey) => _toStringOrNull22(_makeNull5(treeKey)));\n  if (!treeData && groupAllowUnbalanced && processedDataPath.some((treeKey) => treeKey == null)) {\n    if (_last13(processedDataPath) == null) {\n      return null;\n    }\n    return processedDataPath.filter((treeKey) => treeKey != null);\n  }\n  return processedDataPath;\n}\nvar ClientSideValuesExtractor = class {\n  constructor(rowModel, filterParams, createKey, caseFormat, funcColsService, valueService, treeDataOrGrouping, treeData, getDataPath, groupAllowUnbalanced, addManagedEventListeners) {\n    this.rowModel = rowModel;\n    this.filterParams = filterParams;\n    this.createKey = createKey;\n    this.caseFormat = caseFormat;\n    this.funcColsService = funcColsService;\n    this.valueService = valueService;\n    this.treeDataOrGrouping = treeDataOrGrouping;\n    this.treeData = treeData;\n    this.getDataPath = getDataPath;\n    this.groupAllowUnbalanced = groupAllowUnbalanced;\n    this.addManagedEventListeners = addManagedEventListeners;\n  }\n  extractUniqueValuesAsync(predicate, existingValues) {\n    return new AgPromise7((resolve) => {\n      if (this.rowModel.isRowDataLoaded()) {\n        resolve(this.extractUniqueValues(predicate, existingValues));\n      } else {\n        const [destroyFunc] = this.addManagedEventListeners({\n          rowCountReady: () => {\n            destroyFunc?.();\n            resolve(this.extractUniqueValues(predicate, existingValues));\n          }\n        });\n      }\n    });\n  }\n  extractUniqueValues(predicate, existingValues) {\n    const values = /* @__PURE__ */ new Map();\n    const existingFormattedKeys = this.extractExistingFormattedKeys(existingValues);\n    const formattedKeys = /* @__PURE__ */ new Set();\n    const treeData = this.treeData && !!this.getDataPath;\n    const groupedCols = this.funcColsService.getRowGroupColumns();\n    const addValue = (unformattedKey, value) => {\n      const formattedKey = this.caseFormat(unformattedKey);\n      if (!formattedKeys.has(formattedKey)) {\n        formattedKeys.add(formattedKey);\n        let keyToAdd = unformattedKey;\n        let valueToAdd = _makeNull22(value);\n        const existingUnformattedKey = existingFormattedKeys?.get(formattedKey);\n        if (existingUnformattedKey != null) {\n          keyToAdd = existingUnformattedKey;\n          valueToAdd = existingValues.get(existingUnformattedKey);\n        }\n        values.set(keyToAdd, valueToAdd);\n      }\n    };\n    this.rowModel.forEachLeafNode((node) => {\n      if (!node.data || !predicate(node)) {\n        return;\n      }\n      if (this.treeDataOrGrouping) {\n        this.addValueForTreeDataOrGrouping(node, treeData, groupedCols, addValue);\n        return;\n      }\n      const value = this.getValue(node);\n      if (value != null && Array.isArray(value)) {\n        value.forEach((x) => {\n          addValue(this.createKey(x, node), x);\n        });\n        if (value.length === 0) {\n          addValue(null, null);\n        }\n      } else {\n        addValue(this.createKey(value, node), value);\n      }\n    });\n    return values;\n  }\n  addValueForTreeDataOrGrouping(node, treeData, groupedCols, addValue) {\n    let dataPath;\n    if (treeData) {\n      if (node.childrenAfterGroup?.length) {\n        return;\n      }\n      dataPath = this.getDataPath(node.data);\n    } else {\n      dataPath = groupedCols.map((groupCol) => this.valueService.getKeyForNode(groupCol, node));\n      dataPath.push(this.getValue(node));\n    }\n    const processedDataPath = processDataPath(dataPath, treeData, this.groupAllowUnbalanced);\n    addValue(this.createKey(processedDataPath), processedDataPath);\n  }\n  getValue(node) {\n    return this.filterParams.getValue(node);\n  }\n  extractExistingFormattedKeys(existingValues) {\n    if (!existingValues) {\n      return null;\n    }\n    const existingFormattedKeys = /* @__PURE__ */ new Map();\n    existingValues.forEach((_value, key) => {\n      existingFormattedKeys.set(this.caseFormat(key), key);\n    });\n    return existingFormattedKeys;\n  }\n};\nvar SetValueModelFilteringKeys = class {\n  constructor({ caseFormat }) {\n    this.filteringKeys = null;\n    this.filteringKeysCaseFormatted = null;\n    this.hasNoAppliedFilteringKeys = false;\n    this.caseFormat = caseFormat;\n  }\n  allFilteringKeys() {\n    return this.filteringKeys;\n  }\n  allFilteringKeysCaseFormatted() {\n    return this.filteringKeysCaseFormatted;\n  }\n  noAppliedFilteringKeys() {\n    return this.hasNoAppliedFilteringKeys;\n  }\n  setFilteringKeys(filteringKeys) {\n    this.filteringKeys = new Set(filteringKeys);\n    this.hasNoAppliedFilteringKeys = !this.filteringKeys || this.filteringKeys.size === 0;\n    this.filteringKeysCaseFormatted = /* @__PURE__ */ new Set();\n    this.filteringKeys.forEach((key) => this.filteringKeysCaseFormatted.add(this.caseFormat(key)));\n  }\n  addFilteringKey(key) {\n    if (this.filteringKeys == null) {\n      this.filteringKeys = /* @__PURE__ */ new Set();\n      this.filteringKeysCaseFormatted = /* @__PURE__ */ new Set();\n    }\n    this.filteringKeys.add(key);\n    this.filteringKeysCaseFormatted.add(this.caseFormat(key));\n    if (this.hasNoAppliedFilteringKeys) {\n      this.hasNoAppliedFilteringKeys = false;\n    }\n  }\n  hasCaseFormattedFilteringKey(key) {\n    return this.filteringKeysCaseFormatted.has(this.caseFormat(key));\n  }\n  hasFilteringKey(key) {\n    return this.filteringKeys.has(key);\n  }\n  reset() {\n    this.filteringKeys = null;\n    this.filteringKeysCaseFormatted = null;\n    this.hasNoAppliedFilteringKeys = false;\n  }\n};\nvar FlatSetDisplayValueModel = class {\n  constructor(valueService, valueFormatter, formatter, column) {\n    this.valueService = valueService;\n    this.valueFormatter = valueFormatter;\n    this.formatter = formatter;\n    this.column = column;\n    this.displayedKeys = [];\n  }\n  updateDisplayedValuesToAllAvailable(_getValue, _allKeys, availableKeys) {\n    this.displayedKeys = Array.from(availableKeys);\n  }\n  updateDisplayedValuesToMatchMiniFilter(getValue, _allKeys, availableKeys, matchesFilter, nullMatchesFilter) {\n    this.displayedKeys = [];\n    for (const key of availableKeys) {\n      if (key == null) {\n        if (nullMatchesFilter) {\n          this.displayedKeys.push(key);\n        }\n      } else {\n        const value = getValue(key);\n        const valueFormatterValue = this.valueService.formatValue(\n          this.column,\n          null,\n          value,\n          this.valueFormatter,\n          false\n        );\n        const textFormatterValue = this.formatter(valueFormatterValue);\n        if (matchesFilter(textFormatterValue)) {\n          this.displayedKeys.push(key);\n        }\n      }\n    }\n  }\n  getDisplayedValueCount() {\n    return this.displayedKeys.length;\n  }\n  getDisplayedItem(index) {\n    return this.displayedKeys[index];\n  }\n  getSelectAllItem() {\n    return SetFilterDisplayValue.SELECT_ALL;\n  }\n  getAddSelectionToFilterItem() {\n    return SetFilterDisplayValue.ADD_SELECTION_TO_FILTER;\n  }\n  getDisplayedKeys() {\n    return this.displayedKeys;\n  }\n  forEachDisplayedKey(func) {\n    this.displayedKeys.forEach(func);\n  }\n  someDisplayedKey(func) {\n    return this.displayedKeys.some(func);\n  }\n  hasGroups() {\n    return false;\n  }\n  refresh() {\n  }\n};\nvar DATE_TREE_LIST_PATH_GETTER = (date) => date ? [String(date.getFullYear()), String(date.getMonth() + 1), String(date.getDate())] : null;\nvar TreeSetDisplayValueModel = class {\n  constructor(formatter, treeListPathGetter, treeListFormatter, treeDataOrGrouping) {\n    this.formatter = formatter;\n    this.treeListPathGetter = treeListPathGetter;\n    this.treeListFormatter = treeListFormatter;\n    this.treeDataOrGrouping = treeDataOrGrouping;\n    this.allDisplayedItemsTree = [];\n    this.activeDisplayedItemsFlat = [];\n    this.selectAllItem = {\n      depth: 0,\n      filterPasses: true,\n      available: true,\n      treeKey: SetFilterDisplayValue.SELECT_ALL,\n      children: this.allDisplayedItemsTree,\n      expanded: true,\n      key: SetFilterDisplayValue.SELECT_ALL,\n      parentTreeKeys: []\n    };\n    this.addSelectionToFilterItem = {\n      depth: 0,\n      filterPasses: true,\n      available: true,\n      treeKey: SetFilterDisplayValue.ADD_SELECTION_TO_FILTER,\n      expanded: true,\n      key: SetFilterDisplayValue.ADD_SELECTION_TO_FILTER,\n      parentTreeKeys: []\n    };\n  }\n  updateOnParamsChange(treeListFormatter) {\n    this.treeListFormatter = treeListFormatter;\n  }\n  updateDisplayedValuesToAllAvailable(getValue, allKeys, availableKeys, source) {\n    if (source === \"reload\") {\n      this.generateItemTree(getValue, allKeys, availableKeys);\n    } else if (source === \"otherFilter\") {\n      this.updateAvailable(availableKeys);\n      this.updateExpandAll();\n    } else if (source === \"miniFilter\") {\n      this.resetFilter();\n      this.updateExpandAll();\n    }\n    this.flattenItems();\n  }\n  updateDisplayedValuesToMatchMiniFilter(getValue, allKeys, availableKeys, matchesFilter, nullMatchesFilter, source) {\n    if (source === \"reload\") {\n      this.generateItemTree(getValue, allKeys, availableKeys);\n    } else if (source === \"otherFilter\") {\n      this.updateAvailable(availableKeys);\n    }\n    this.updateFilter(matchesFilter, nullMatchesFilter);\n    this.updateExpandAll();\n    this.flattenItems();\n  }\n  generateItemTree(getValue, allKeys, availableKeys) {\n    this.allDisplayedItemsTree = [];\n    this.groupsExist = false;\n    const treeListPathGetter = this.getTreeListPathGetter(getValue, availableKeys);\n    for (const key of allKeys) {\n      const value = getValue(key);\n      const dataPath = treeListPathGetter(value) ?? [null];\n      if (dataPath.length > 1) {\n        this.groupsExist = true;\n      }\n      const available = availableKeys.has(key);\n      let children = this.allDisplayedItemsTree;\n      let item;\n      let parentTreeKeys = [];\n      dataPath.forEach((treeKey, depth) => {\n        if (!children) {\n          children = [];\n          item.children = children;\n        }\n        item = children.find((child) => child.treeKey?.toUpperCase() === treeKey?.toUpperCase());\n        if (!item) {\n          item = { treeKey, depth, filterPasses: true, expanded: false, available, parentTreeKeys };\n          if (depth === dataPath.length - 1) {\n            item.key = key;\n          }\n          children.push(item);\n        }\n        children = item.children;\n        parentTreeKeys = [...parentTreeKeys, treeKey];\n      });\n    }\n    this.updateAvailable(availableKeys);\n    this.selectAllItem.children = this.allDisplayedItemsTree;\n    this.selectAllItem.expanded = false;\n  }\n  getTreeListPathGetter(getValue, availableKeys) {\n    if (this.treeListPathGetter) {\n      return this.treeListPathGetter;\n    }\n    if (this.treeDataOrGrouping) {\n      return (value) => value;\n    }\n    let isDate2 = false;\n    for (const availableKey of availableKeys) {\n      const value = getValue(availableKey);\n      if (value instanceof Date) {\n        isDate2 = true;\n        break;\n      } else if (value != null) {\n        break;\n      }\n    }\n    if (isDate2) {\n      return DATE_TREE_LIST_PATH_GETTER;\n    }\n    _warnOnce212(\n      \"property treeList=true for Set Filter params, but you did not provide a treeListPathGetter or values of type Date.\"\n    );\n    return (value) => [String(value)];\n  }\n  flattenItems() {\n    this.activeDisplayedItemsFlat = [];\n    const recursivelyFlattenDisplayedItems = (items) => {\n      items.forEach((item) => {\n        if (!item.filterPasses || !item.available) {\n          return;\n        }\n        this.activeDisplayedItemsFlat.push(item);\n        if (item.children && item.expanded) {\n          recursivelyFlattenDisplayedItems(item.children);\n        }\n      });\n    };\n    recursivelyFlattenDisplayedItems(this.allDisplayedItemsTree);\n  }\n  resetFilter() {\n    const recursiveFilterReset = (item) => {\n      if (item.children) {\n        item.children.forEach((child) => {\n          recursiveFilterReset(child);\n        });\n      }\n      item.filterPasses = true;\n    };\n    this.allDisplayedItemsTree.forEach((item) => recursiveFilterReset(item));\n  }\n  updateFilter(matchesFilter, nullMatchesFilter) {\n    const passesFilter = (item) => {\n      if (!item.available) {\n        return false;\n      }\n      if (item.treeKey == null) {\n        return nullMatchesFilter;\n      }\n      return matchesFilter(\n        this.formatter(\n          this.treeListFormatter ? this.treeListFormatter(item.treeKey, item.depth, item.parentTreeKeys) : item.treeKey\n        )\n      );\n    };\n    this.allDisplayedItemsTree.forEach(\n      (item) => this.recursiveItemCheck(item, false, passesFilter, \"filterPasses\")\n    );\n  }\n  getDisplayedValueCount() {\n    return this.activeDisplayedItemsFlat.length;\n  }\n  getDisplayedItem(index) {\n    return this.activeDisplayedItemsFlat[index];\n  }\n  getSelectAllItem() {\n    return this.selectAllItem;\n  }\n  getAddSelectionToFilterItem() {\n    return this.addSelectionToFilterItem;\n  }\n  getDisplayedKeys() {\n    const displayedKeys = [];\n    this.forEachDisplayedKey((key) => displayedKeys.push(key));\n    return displayedKeys;\n  }\n  forEachDisplayedKey(func) {\n    const recursiveForEachItem = (item, topParentExpanded) => {\n      if (item.children) {\n        if (!item.expanded || !topParentExpanded) {\n          item.children.forEach((child) => {\n            if (child.filterPasses) {\n              recursiveForEachItem(child, false);\n            }\n          });\n        }\n      } else {\n        func(item.key);\n      }\n    };\n    this.activeDisplayedItemsFlat.forEach((item) => recursiveForEachItem(item, true));\n  }\n  someDisplayedKey(func) {\n    const recursiveSomeItem = (item, topParentExpanded) => {\n      if (item.children) {\n        if (!item.expanded || !topParentExpanded) {\n          return item.children.some((child) => {\n            if (child.filterPasses) {\n              return recursiveSomeItem(child, false);\n            }\n            return false;\n          });\n        }\n      } else {\n        return func(item.key);\n      }\n      return false;\n    };\n    return this.activeDisplayedItemsFlat.some((item) => recursiveSomeItem(item, true));\n  }\n  hasGroups() {\n    return this.groupsExist;\n  }\n  refresh() {\n    this.updateExpandAll();\n    this.flattenItems();\n  }\n  updateExpandAll() {\n    const recursiveExpansionCheck = (items, someTrue, someFalse) => {\n      for (const item2 of items) {\n        if (!item2.filterPasses || !item2.available || !item2.children) {\n          continue;\n        }\n        someTrue = someTrue || !!item2.expanded;\n        someFalse = someFalse || !item2.expanded;\n        if (someTrue && someFalse) {\n          return void 0;\n        }\n        const childExpanded = recursiveExpansionCheck(item2.children, someTrue, someFalse);\n        if (childExpanded === void 0) {\n          return void 0;\n        } else if (childExpanded) {\n          someTrue = true;\n        } else {\n          someFalse = true;\n        }\n      }\n      return someTrue && someFalse ? void 0 : someTrue;\n    };\n    const item = this.getSelectAllItem();\n    item.expanded = recursiveExpansionCheck(item.children, false, false);\n  }\n  recursiveItemCheck(item, parentPasses, checkFunction, itemProp) {\n    let atLeastOneChildPassed = false;\n    if (item.children) {\n      item.children.forEach((child) => {\n        const childPasses = this.recursiveItemCheck(\n          child,\n          parentPasses || checkFunction(item),\n          checkFunction,\n          itemProp\n        );\n        atLeastOneChildPassed = atLeastOneChildPassed || childPasses;\n      });\n    }\n    const itemPasses = parentPasses || atLeastOneChildPassed || checkFunction(item);\n    item[itemProp] = itemPasses;\n    return itemPasses;\n  }\n  updateAvailable(availableKeys) {\n    const isAvailable = (item) => availableKeys.has(item.key);\n    this.allDisplayedItemsTree.forEach((item) => this.recursiveItemCheck(item, false, isAvailable, \"available\"));\n  }\n};\nvar SetValueModel = class {\n  constructor(params) {\n    this.localEventService = new LocalEventService2();\n    this.miniFilterText = null;\n    this.addCurrentSelectionToFilter = false;\n    this.providedValues = null;\n    this.allValues = /* @__PURE__ */ new Map();\n    this.availableKeys = /* @__PURE__ */ new Set();\n    this.selectedKeys = /* @__PURE__ */ new Set();\n    this.initialised = false;\n    const {\n      usingComplexObjects,\n      funcColsService,\n      valueService,\n      treeDataTreeList,\n      groupingTreeList,\n      filterParams,\n      gos,\n      valueFormatter,\n      addManagedEventListeners\n    } = params;\n    const {\n      column,\n      colDef,\n      textFormatter,\n      doesRowPassOtherFilter,\n      suppressSorting,\n      comparator,\n      rowModel,\n      values,\n      caseSensitive,\n      treeList,\n      treeListPathGetter,\n      treeListFormatter\n    } = filterParams;\n    this.filterParams = filterParams;\n    this.gos = gos;\n    this.setIsLoading = params.setIsLoading;\n    this.translate = params.translate;\n    this.caseFormat = params.caseFormat;\n    this.createKey = params.createKey;\n    this.usingComplexObjects = !!params.usingComplexObjects;\n    this.formatter = textFormatter ?? ((value) => value ?? null);\n    this.doesRowPassOtherFilters = doesRowPassOtherFilter;\n    this.suppressSorting = suppressSorting || false;\n    this.filteringKeys = new SetValueModelFilteringKeys({ caseFormat: this.caseFormat });\n    const keyComparator = comparator ?? colDef.comparator;\n    const treeDataOrGrouping = !!treeDataTreeList || !!groupingTreeList;\n    this.compareByValue = !!(usingComplexObjects && keyComparator || treeDataOrGrouping || treeList && !treeListPathGetter);\n    if (treeDataOrGrouping && !keyComparator) {\n      this.entryComparator = this.createTreeDataOrGroupingComparator();\n    } else if (treeList && !treeListPathGetter && !keyComparator) {\n      this.entryComparator = ([_aKey, aValue], [_bKey, bValue]) => _defaultComparator(aValue, bValue);\n    } else {\n      this.entryComparator = ([_aKey, aValue], [_bKey, bValue]) => keyComparator(aValue, bValue);\n    }\n    this.keyComparator = keyComparator ?? _defaultComparator;\n    this.caseSensitive = !!caseSensitive;\n    const getDataPath = gos.get(\"getDataPath\");\n    const groupAllowUnbalanced = gos.get(\"groupAllowUnbalanced\");\n    if (_isClientSideRowModel5(gos)) {\n      this.clientSideValuesExtractor = new ClientSideValuesExtractor(\n        rowModel,\n        this.filterParams,\n        this.createKey,\n        this.caseFormat,\n        funcColsService,\n        valueService,\n        treeDataOrGrouping,\n        !!treeDataTreeList,\n        getDataPath,\n        groupAllowUnbalanced,\n        addManagedEventListeners\n      );\n    }\n    if (values == null) {\n      this.valuesType = 2;\n    } else {\n      this.valuesType = Array.isArray(values) ? 0 : 1;\n      this.providedValues = values;\n    }\n    this.displayValueModel = treeList ? new TreeSetDisplayValueModel(\n      this.formatter,\n      treeListPathGetter,\n      treeListFormatter,\n      treeDataTreeList || groupingTreeList\n    ) : new FlatSetDisplayValueModel(\n      valueService,\n      valueFormatter,\n      this.formatter,\n      column\n    );\n    this.updateAllValues().then((updatedKeys) => this.resetSelectionState(updatedKeys || []));\n  }\n  addEventListener(eventType, listener, async) {\n    this.localEventService.addEventListener(eventType, listener, async);\n  }\n  removeEventListener(eventType, listener, async) {\n    this.localEventService.removeEventListener(eventType, listener, async);\n  }\n  updateOnParamsChange(filterParams) {\n    return new AgPromise24((resolve) => {\n      const { values, textFormatter, suppressSorting, treeListFormatter } = filterParams;\n      const currentProvidedValues = this.providedValues;\n      const currentSuppressSorting = this.suppressSorting;\n      this.filterParams = filterParams;\n      this.formatter = textFormatter ?? ((value) => value ?? null);\n      this.suppressSorting = suppressSorting || false;\n      this.providedValues = values ?? null;\n      if (this.displayValueModel instanceof TreeSetDisplayValueModel) {\n        this.displayValueModel.updateOnParamsChange(treeListFormatter);\n      }\n      if (this.providedValues !== currentProvidedValues || this.suppressSorting !== currentSuppressSorting) {\n        if (!values || values.length === 0) {\n          this.valuesType = 2;\n          this.providedValues = null;\n        } else {\n          this.valuesType = Array.isArray(values) ? 0 : 1;\n        }\n        const currentModel = this.getModel();\n        this.updateAllValues().then(() => {\n          this.setModel(currentModel).then(() => resolve());\n        });\n      } else {\n        resolve();\n      }\n    });\n  }\n  /**\n   * Re-fetches the values used in the filter from the value source.\n   * If keepSelection is false, the filter selection will be reset to everything selected,\n   * otherwise the current selection will be preserved.\n   */\n  refreshValues() {\n    return new AgPromise24((resolve) => {\n      this.allValuesPromise.then(() => {\n        const currentModel = this.getModel();\n        this.updateAllValues();\n        this.setModel(currentModel).then(() => resolve());\n      });\n    });\n  }\n  /**\n   * Overrides the current values being used for the set filter.\n   * If keepSelection is false, the filter selection will be reset to everything selected,\n   * otherwise the current selection will be preserved.\n   */\n  overrideValues(valuesToUse) {\n    return new AgPromise24((resolve) => {\n      this.allValuesPromise.then(() => {\n        this.valuesType = 0;\n        this.providedValues = valuesToUse;\n        this.refreshValues().then(() => resolve());\n      });\n    });\n  }\n  /** @return has anything been updated */\n  refreshAfterAnyFilterChanged() {\n    if (this.showAvailableOnly()) {\n      return this.allValuesPromise.then((keys) => {\n        this.updateAvailableKeys(keys ?? [], \"otherFilter\");\n        return true;\n      });\n    }\n    return AgPromise24.resolve(false);\n  }\n  isInitialised() {\n    return this.initialised;\n  }\n  updateAllValues() {\n    this.allValuesPromise = new AgPromise24((resolve) => {\n      switch (this.valuesType) {\n        case 2:\n          this.getValuesFromRowsAsync(false).then((values) => resolve(this.processAllValues(values)));\n          break;\n        case 0: {\n          resolve(\n            this.processAllValues(\n              this.uniqueValues(this.validateProvidedValues(this.providedValues))\n            )\n          );\n          break;\n        }\n        case 1: {\n          this.setIsLoading(true);\n          const callback = this.providedValues;\n          const { column, colDef } = this.filterParams;\n          const params = this.gos.addGridCommonParams({\n            success: (values) => {\n              this.setIsLoading(false);\n              resolve(this.processAllValues(this.uniqueValues(this.validateProvidedValues(values))));\n            },\n            colDef,\n            column\n          });\n          window.setTimeout(() => callback(params), 0);\n          break;\n        }\n        default:\n          throw new Error(\"Unrecognised valuesType\");\n      }\n    });\n    this.allValuesPromise.then((values) => this.updateAvailableKeys(values || [], \"reload\")).then(() => this.initialised = true);\n    return this.allValuesPromise;\n  }\n  processAllValues(values) {\n    const sortedKeys = this.sortKeys(values);\n    this.allValues = values ?? /* @__PURE__ */ new Map();\n    return sortedKeys;\n  }\n  validateProvidedValues(values) {\n    if (this.usingComplexObjects && values?.length) {\n      const firstValue = values[0];\n      if (firstValue && typeof firstValue !== \"object\" && typeof firstValue !== \"function\") {\n        const firstKey = this.createKey(firstValue);\n        if (firstKey == null) {\n          _warnOnce310(\n            \"Set Filter Key Creator is returning null for provided values and provided values are primitives. Please provide complex objects. See https://www.ag-grid.com/javascript-data-grid/filter-set-filter-list/#filter-value-types\"\n          );\n        } else {\n          _warnOnce310(\n            \"Set Filter has a Key Creator, but provided values are primitives. Did you mean to provide complex objects?\"\n          );\n        }\n      }\n    }\n    return values;\n  }\n  setValuesType(value) {\n    this.valuesType = value;\n  }\n  getValuesType() {\n    return this.valuesType;\n  }\n  isKeyAvailable(key) {\n    return this.availableKeys.has(key);\n  }\n  showAvailableOnly() {\n    return this.valuesType === 2;\n  }\n  updateAvailableKeys(allKeys, source) {\n    const availableKeys = this.showAvailableOnly() ? this.sortKeys(this.getValuesFromRows(true)) : allKeys;\n    this.availableKeys = new Set(availableKeys);\n    this.localEventService.dispatchEvent({ type: \"availableValuesChanged\" });\n    this.updateDisplayedValues(source, allKeys);\n  }\n  sortKeys(nullableValues) {\n    const values = nullableValues ?? /* @__PURE__ */ new Map();\n    if (this.suppressSorting) {\n      return Array.from(values.keys());\n    }\n    let sortedKeys;\n    if (this.compareByValue) {\n      sortedKeys = Array.from(values.entries()).sort(this.entryComparator).map(([key]) => key);\n    } else {\n      sortedKeys = Array.from(values.keys()).sort(this.keyComparator);\n    }\n    if (this.filterParams.excelMode && values.has(null)) {\n      sortedKeys = sortedKeys.filter((v) => v != null);\n      sortedKeys.push(null);\n    }\n    return sortedKeys;\n  }\n  getParamsForValuesFromRows(removeUnavailableValues = false) {\n    if (!this.clientSideValuesExtractor) {\n      _errorOnce6(\n        \"Set Filter cannot initialise because you are using a row model that does not contain all rows in the browser. Either use a different filter type, or configure Set Filter such that you provide it with values\"\n      );\n      return null;\n    }\n    const predicate = (node) => !removeUnavailableValues || this.doesRowPassOtherFilters(node);\n    const existingValues = removeUnavailableValues && !this.caseSensitive ? this.allValues : void 0;\n    return { predicate, existingValues };\n  }\n  getValuesFromRows(removeUnavailableValues = false) {\n    const params = this.getParamsForValuesFromRows(removeUnavailableValues);\n    if (!params) {\n      return null;\n    }\n    return this.clientSideValuesExtractor.extractUniqueValues(params.predicate, params.existingValues);\n  }\n  getValuesFromRowsAsync(removeUnavailableValues = false) {\n    const params = this.getParamsForValuesFromRows(removeUnavailableValues);\n    if (!params) {\n      return AgPromise24.resolve(null);\n    }\n    return this.clientSideValuesExtractor.extractUniqueValuesAsync(params.predicate, params.existingValues);\n  }\n  /** Sets mini filter value. Returns true if it changed from last value, otherwise false. */\n  setMiniFilter(value) {\n    value = _makeNull32(value);\n    if (this.miniFilterText === value) {\n      return false;\n    }\n    if (value === null) {\n      this.setAddCurrentSelectionToFilter(false);\n    }\n    this.miniFilterText = value;\n    this.updateDisplayedValues(\"miniFilter\");\n    return true;\n  }\n  getMiniFilter() {\n    return this.miniFilterText;\n  }\n  updateDisplayedValues(source, allKeys) {\n    if (source === \"expansion\") {\n      this.displayValueModel.refresh();\n      return;\n    }\n    if (this.miniFilterText == null) {\n      this.displayValueModel.updateDisplayedValuesToAllAvailable(\n        (key) => this.getValue(key),\n        allKeys,\n        this.availableKeys,\n        source\n      );\n      return;\n    }\n    const formattedFilterText = this.caseFormat(this.formatter(this.miniFilterText) || \"\");\n    const matchesFilter = (valueToCheck) => valueToCheck != null && this.caseFormat(valueToCheck).indexOf(formattedFilterText) >= 0;\n    const nullMatchesFilter = !!this.filterParams.excelMode && matchesFilter(this.translate(\"blanks\"));\n    this.displayValueModel.updateDisplayedValuesToMatchMiniFilter(\n      (key) => this.getValue(key),\n      allKeys,\n      this.availableKeys,\n      matchesFilter,\n      nullMatchesFilter,\n      source\n    );\n  }\n  getDisplayedValueCount() {\n    return this.displayValueModel.getDisplayedValueCount();\n  }\n  getDisplayedItem(index) {\n    return this.displayValueModel.getDisplayedItem(index);\n  }\n  getSelectAllItem() {\n    return this.displayValueModel.getSelectAllItem();\n  }\n  getAddSelectionToFilterItem() {\n    return this.displayValueModel.getAddSelectionToFilterItem();\n  }\n  hasSelections() {\n    return this.filterParams.defaultToNothingSelected ? this.selectedKeys.size > 0 : this.allValues.size !== this.selectedKeys.size;\n  }\n  getKeys() {\n    return Array.from(this.allValues.keys());\n  }\n  getValues() {\n    return Array.from(this.allValues.values());\n  }\n  getValue(key) {\n    return this.allValues.get(key);\n  }\n  setAddCurrentSelectionToFilter(value) {\n    this.addCurrentSelectionToFilter = value;\n  }\n  isInWindowsExcelMode() {\n    return this.filterParams.excelMode === \"windows\";\n  }\n  isAddCurrentSelectionToFilterChecked() {\n    return this.isInWindowsExcelMode() && this.addCurrentSelectionToFilter;\n  }\n  showAddCurrentSelectionToFilter() {\n    return this.isInWindowsExcelMode() && _exists17(this.miniFilterText) && this.miniFilterText.length > 0;\n  }\n  selectAllMatchingMiniFilter(clearExistingSelection = false) {\n    if (this.miniFilterText == null) {\n      this.selectedKeys = new Set(this.allValues.keys());\n    } else {\n      if (clearExistingSelection) {\n        this.selectedKeys.clear();\n      }\n      this.displayValueModel.forEachDisplayedKey((key) => this.selectedKeys.add(key));\n    }\n  }\n  deselectAllMatchingMiniFilter() {\n    if (this.miniFilterText == null) {\n      this.selectedKeys.clear();\n    } else {\n      this.displayValueModel.forEachDisplayedKey((key) => this.selectedKeys.delete(key));\n    }\n  }\n  selectKey(key) {\n    this.selectedKeys.add(key);\n  }\n  deselectKey(key) {\n    if (this.filterParams.excelMode && this.isEverythingVisibleSelected()) {\n      this.resetSelectionState(this.displayValueModel.getDisplayedKeys());\n    }\n    this.selectedKeys.delete(key);\n  }\n  isKeySelected(key) {\n    return this.selectedKeys.has(key);\n  }\n  isEverythingVisibleSelected() {\n    return !this.displayValueModel.someDisplayedKey((it) => !this.isKeySelected(it));\n  }\n  isNothingVisibleSelected() {\n    return !this.displayValueModel.someDisplayedKey((it) => this.isKeySelected(it));\n  }\n  getModel() {\n    if (!this.hasSelections()) {\n      return null;\n    }\n    const filteringKeys = this.isAddCurrentSelectionToFilterChecked() ? this.filteringKeys.allFilteringKeys() : null;\n    if (filteringKeys && filteringKeys.size > 0) {\n      if (this.selectedKeys) {\n        const modelKeys = /* @__PURE__ */ new Set([\n          ...Array.from(filteringKeys),\n          ...Array.from(this.selectedKeys).filter((key) => !filteringKeys.has(key))\n        ]);\n        return Array.from(modelKeys);\n      }\n      return Array.from(filteringKeys);\n    }\n    return Array.from(this.selectedKeys);\n  }\n  setModel(model) {\n    return this.allValuesPromise.then((keys) => {\n      if (model == null) {\n        this.resetSelectionState(keys ?? []);\n      } else {\n        this.selectedKeys.clear();\n        const existingFormattedKeys = /* @__PURE__ */ new Map();\n        this.allValues.forEach((_value, key) => {\n          existingFormattedKeys.set(this.caseFormat(key), key);\n        });\n        model.forEach((unformattedKey) => {\n          const formattedKey = this.caseFormat(_makeNull32(unformattedKey));\n          const existingUnformattedKey = existingFormattedKeys.get(formattedKey);\n          if (existingUnformattedKey !== void 0) {\n            this.selectKey(existingUnformattedKey);\n          }\n        });\n      }\n    });\n  }\n  uniqueValues(values) {\n    const uniqueValues = /* @__PURE__ */ new Map();\n    const formattedKeys = /* @__PURE__ */ new Set();\n    (values ?? []).forEach((value) => {\n      const valueToUse = _makeNull32(value);\n      const unformattedKey = this.createKey(valueToUse);\n      const formattedKey = this.caseFormat(unformattedKey);\n      if (!formattedKeys.has(formattedKey)) {\n        formattedKeys.add(formattedKey);\n        uniqueValues.set(unformattedKey, valueToUse);\n      }\n    });\n    return uniqueValues;\n  }\n  resetSelectionState(keys) {\n    if (this.filterParams.defaultToNothingSelected) {\n      this.selectedKeys.clear();\n    } else {\n      this.selectedKeys = new Set(keys);\n    }\n  }\n  hasGroups() {\n    return this.displayValueModel.hasGroups();\n  }\n  createTreeDataOrGroupingComparator() {\n    return ([_aKey, aValue], [_bKey, bValue]) => {\n      if (aValue == null) {\n        return bValue == null ? 0 : -1;\n      } else if (bValue == null) {\n        return 1;\n      }\n      for (let i = 0; i < aValue.length; i++) {\n        if (i >= bValue.length) {\n          return 1;\n        }\n        const diff = _defaultComparator(aValue[i], bValue[i]);\n        if (diff !== 0) {\n          return diff;\n        }\n      }\n      return 0;\n    };\n  }\n  setAppliedModelKeys(appliedModelKeys) {\n    this.filteringKeys.setFilteringKeys(appliedModelKeys);\n  }\n  addToAppliedModelKeys(appliedModelKey) {\n    this.filteringKeys.addFilteringKey(appliedModelKey);\n  }\n  getAppliedModelKeys() {\n    return this.filteringKeys.allFilteringKeys();\n  }\n  getCaseFormattedAppliedModelKeys() {\n    return this.filteringKeys.allFilteringKeysCaseFormatted();\n  }\n  hasAppliedModelKey(appliedModelKey) {\n    return this.filteringKeys.hasCaseFormattedFilteringKey(appliedModelKey);\n  }\n  hasAnyAppliedModelKey() {\n    return !this.filteringKeys.noAppliedFilteringKeys();\n  }\n};\nvar SetFilter = class extends ProvidedFilter2 {\n  constructor() {\n    super(\"setFilter\");\n    this.eMiniFilter = RefPlaceholder210;\n    this.eFilterLoading = RefPlaceholder210;\n    this.eSetFilterList = RefPlaceholder210;\n    this.eFilterNoMatches = RefPlaceholder210;\n    this.valueModel = null;\n    this.setFilterParams = null;\n    this.virtualList = null;\n    this.caseSensitive = false;\n    this.treeDataTreeList = false;\n    this.groupingTreeList = false;\n    this.hardRefreshVirtualList = false;\n    this.noValueFormatterSupplied = false;\n    this.filterModelFormatter = new SetFilterModelFormatter();\n    this.updateSetFilterOnParamsChange = (newParams) => {\n      this.setFilterParams = newParams;\n      this.caseSensitive = !!newParams.caseSensitive;\n      const keyCreator = newParams.keyCreator ?? newParams.colDef.keyCreator;\n      this.setValueFormatter(newParams.valueFormatter, keyCreator, !!newParams.treeList, !!newParams.colDef.refData);\n      const isGroupCol = newParams.column.getId().startsWith(GROUP_AUTO_COLUMN_ID3);\n      this.treeDataTreeList = this.gos.get(\"treeData\") && !!newParams.treeList && isGroupCol;\n      this.getDataPath = this.gos.get(\"getDataPath\");\n      this.groupingTreeList = !!this.funcColsService.getRowGroupColumns().length && !!newParams.treeList && isGroupCol;\n      this.createKey = this.generateCreateKey(keyCreator, this.treeDataTreeList || this.groupingTreeList);\n    };\n  }\n  wireBeans(beans) {\n    super.wireBeans(beans);\n    this.funcColsService = beans.funcColsService;\n    this.valueService = beans.valueService;\n    this.dataTypeService = beans.dataTypeService;\n  }\n  postConstruct() {\n    super.postConstruct();\n  }\n  // unlike the simple filters, nothing in the set filter UI shows/hides.\n  // maybe this method belongs in abstractSimpleFilter???\n  updateUiVisibility() {\n  }\n  createBodyTemplate() {\n    return (\n      /* html */\n      `\n            <div class=\"ag-set-filter\">\n                <div data-ref=\"eFilterLoading\" class=\"ag-filter-loading ag-hidden\">${this.translateForSetFilter(\"loadingOoo\")}</div>\n                <ag-input-text-field class=\"ag-mini-filter\" data-ref=\"eMiniFilter\"></ag-input-text-field>\n                <div data-ref=\"eFilterNoMatches\" class=\"ag-filter-no-matches ag-hidden\">${this.translateForSetFilter(\"noMatches\")}</div>\n                <div data-ref=\"eSetFilterList\" class=\"ag-set-filter-list\" role=\"presentation\"></div>\n            </div>`\n    );\n  }\n  getAgComponents() {\n    return [AgInputTextFieldSelector6];\n  }\n  handleKeyDown(e) {\n    super.handleKeyDown(e);\n    if (e.defaultPrevented) {\n      return;\n    }\n    switch (e.key) {\n      case KeyCode21.SPACE:\n        this.handleKeySpace(e);\n        break;\n      case KeyCode21.ENTER:\n        this.handleKeyEnter(e);\n        break;\n      case KeyCode21.LEFT:\n        this.handleKeyLeft(e);\n        break;\n      case KeyCode21.RIGHT:\n        this.handleKeyRight(e);\n        break;\n    }\n  }\n  handleKeySpace(e) {\n    this.getComponentForKeyEvent(e)?.toggleSelected();\n  }\n  handleKeyEnter(e) {\n    if (!this.setFilterParams) {\n      return;\n    }\n    const { excelMode, readOnly } = this.setFilterParams || {};\n    if (!excelMode || !!readOnly) {\n      return;\n    }\n    e.preventDefault();\n    this.onBtApply(false, false, e);\n    if (this.setFilterParams.excelMode === \"mac\") {\n      this.eMiniFilter.getInputElement().select();\n    }\n  }\n  handleKeyLeft(e) {\n    this.getComponentForKeyEvent(e)?.setExpanded(false);\n  }\n  handleKeyRight(e) {\n    this.getComponentForKeyEvent(e)?.setExpanded(true);\n  }\n  getComponentForKeyEvent(e) {\n    if (!this.eSetFilterList.contains(_getActiveDomElement13(this.gos)) || !this.virtualList) {\n      return;\n    }\n    const currentItem = this.virtualList.getLastFocusedRow();\n    if (currentItem == null) {\n      return;\n    }\n    const component = this.virtualList.getComponentAt(currentItem);\n    if (component == null) {\n      return;\n    }\n    e.preventDefault();\n    const { readOnly } = this.setFilterParams ?? {};\n    if (readOnly) {\n      return;\n    }\n    return component;\n  }\n  getCssIdentifier() {\n    return \"set-filter\";\n  }\n  setModel(model) {\n    if (model == null && this.valueModel?.getModel() == null) {\n      this.setMiniFilter(null);\n      return AgPromise32.resolve();\n    }\n    return super.setModel(model);\n  }\n  refresh(params) {\n    this.applyExcelModeOptions(params);\n    if (!super.refresh(params)) {\n      return false;\n    }\n    const oldParams = this.setFilterParams;\n    const paramsThatForceReload = [\n      \"treeList\",\n      \"treeListPathGetter\",\n      \"caseSensitive\",\n      \"comparator\",\n      \"excelMode\"\n    ];\n    if (paramsThatForceReload.some((param) => params[param] !== oldParams?.[param])) {\n      return false;\n    }\n    if (this.haveColDefParamsChanged(params)) {\n      return false;\n    }\n    super.updateParams(params);\n    this.updateSetFilterOnParamsChange(params);\n    this.updateMiniFilter();\n    if (params.suppressSelectAll !== oldParams?.suppressSelectAll) {\n      this.createVirtualListModel(params);\n    }\n    this.valueModel?.updateOnParamsChange(params).then(() => {\n      this.refreshFilterValues();\n    });\n    return true;\n  }\n  haveColDefParamsChanged(params) {\n    const { colDef, keyCreator } = params;\n    const { colDef: existingColDef, keyCreator: existingKeyCreator } = this.setFilterParams ?? {};\n    const currentKeyCreator = keyCreator ?? colDef.keyCreator;\n    const previousKeyCreator = existingKeyCreator ?? existingColDef?.keyCreator;\n    const filterValueGetterChanged = colDef.filterValueGetter !== existingColDef?.filterValueGetter;\n    const keyCreatorChanged = currentKeyCreator !== previousKeyCreator;\n    const valueFormatterIsKeyCreatorAndHasChanged = !!this.dataTypeService && !!currentKeyCreator && this.dataTypeService.getFormatValue(colDef.cellDataType) === currentKeyCreator && colDef.valueFormatter !== existingColDef?.valueFormatter;\n    return filterValueGetterChanged || keyCreatorChanged || valueFormatterIsKeyCreatorAndHasChanged;\n  }\n  setModelAndRefresh(values) {\n    return this.valueModel ? this.valueModel.setModel(values).then(() => {\n      if (this.isAlive()) {\n        this.checkAndRefreshVirtualList();\n      }\n    }) : AgPromise32.resolve();\n  }\n  resetUiToDefaults() {\n    this.setMiniFilter(null);\n    return this.setModelAndRefresh(null);\n  }\n  setModelIntoUi(model) {\n    this.setMiniFilter(null);\n    const values = model == null ? null : model.values;\n    return this.setModelAndRefresh(values);\n  }\n  getModelFromUi() {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const values = this.valueModel.getModel();\n    if (!values) {\n      return null;\n    }\n    return { values, filterType: this.getFilterType() };\n  }\n  getFilterType() {\n    return \"set\";\n  }\n  getValueModel() {\n    return this.valueModel;\n  }\n  areModelsEqual(a, b) {\n    if (a == null && b == null) {\n      return true;\n    }\n    return a != null && b != null && _areEqual5(a.values, b.values);\n  }\n  setParams(params) {\n    this.applyExcelModeOptions(params);\n    super.setParams(params);\n    this.updateSetFilterOnParamsChange(params);\n    const keyCreator = params.keyCreator ?? params.colDef.keyCreator;\n    this.valueModel = new SetValueModel({\n      filterParams: params,\n      setIsLoading: (loading) => this.setIsLoading(loading),\n      translate: (key) => this.translateForSetFilter(key),\n      caseFormat: (v) => this.caseFormat(v),\n      createKey: this.createKey,\n      valueFormatter: this.valueFormatter,\n      usingComplexObjects: !!keyCreator,\n      gos: this.gos,\n      funcColsService: this.funcColsService,\n      valueService: this.valueService,\n      treeDataTreeList: this.treeDataTreeList,\n      groupingTreeList: this.groupingTreeList,\n      addManagedEventListeners: (handlers) => this.addManagedEventListeners(handlers)\n    });\n    this.initialiseFilterBodyUi();\n    this.addEventListenersForDataChanges();\n  }\n  onAddCurrentSelectionToFilterChange(newValue) {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    this.valueModel.setAddCurrentSelectionToFilter(newValue);\n  }\n  setValueFormatter(providedValueFormatter, keyCreator, treeList, isRefData) {\n    let valueFormatter = providedValueFormatter;\n    if (!valueFormatter) {\n      if (keyCreator && !treeList) {\n        throw new Error(\"AG Grid: Must supply a Value Formatter in Set Filter params when using a Key Creator\");\n      }\n      this.noValueFormatterSupplied = true;\n      if (!isRefData) {\n        valueFormatter = (params) => _toStringOrNull3(params.value);\n      }\n    }\n    this.valueFormatter = valueFormatter;\n  }\n  generateCreateKey(keyCreator, treeDataOrGrouping) {\n    if (treeDataOrGrouping && !keyCreator) {\n      throw new Error(\n        \"AG Grid: Must supply a Key Creator in Set Filter params when `treeList = true` on a group column, and Tree Data or Row Grouping is enabled.\"\n      );\n    }\n    if (keyCreator) {\n      return (value, node = null) => {\n        const params = this.getKeyCreatorParams(value, node);\n        return _makeNull4(keyCreator(params));\n      };\n    }\n    return (value) => _makeNull4(_toStringOrNull3(value));\n  }\n  getFormattedValue(key) {\n    let value = this.valueModel.getValue(key);\n    if (this.noValueFormatterSupplied && (this.treeDataTreeList || this.groupingTreeList) && Array.isArray(value)) {\n      value = _last24(value);\n    }\n    const formattedValue = this.valueService.formatValue(\n      this.setFilterParams.column,\n      null,\n      value,\n      this.valueFormatter,\n      false\n    );\n    return (formattedValue == null ? _toStringOrNull3(value) : formattedValue) ?? this.translateForSetFilter(\"blanks\");\n  }\n  applyExcelModeOptions(params) {\n    if (params.excelMode === \"windows\") {\n      if (!params.buttons) {\n        params.buttons = [\"apply\", \"cancel\"];\n      }\n      if (params.closeOnApply == null) {\n        params.closeOnApply = true;\n      }\n    } else if (params.excelMode === \"mac\") {\n      if (!params.buttons) {\n        params.buttons = [\"reset\"];\n      }\n      if (params.applyMiniFilterWhileTyping == null) {\n        params.applyMiniFilterWhileTyping = true;\n      }\n      if (params.debounceMs == null) {\n        params.debounceMs = 500;\n      }\n    }\n    if (params.excelMode && params.defaultToNothingSelected) {\n      params.defaultToNothingSelected = false;\n      _warnOnce46(\n        'The Set Filter Parameter \"defaultToNothingSelected\" value was ignored because it does not work when \"excelMode\" is used.'\n      );\n    }\n  }\n  addEventListenersForDataChanges() {\n    if (!this.isValuesTakenFromGrid()) {\n      return;\n    }\n    this.addManagedEventListeners({\n      cellValueChanged: (event) => {\n        if (this.setFilterParams && event.column === this.setFilterParams.column) {\n          this.syncAfterDataChange();\n        }\n      }\n    });\n    this.addManagedPropertyListeners([\"treeData\", \"getDataPath\", \"groupAllowUnbalanced\"], () => {\n      this.syncAfterDataChange();\n    });\n  }\n  syncAfterDataChange() {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const promise = this.valueModel.refreshValues();\n    return promise.then(() => {\n      this.checkAndRefreshVirtualList();\n      if (!this.applyActive || this.areModelsEqual(this.getModel(), this.getModelFromUi())) {\n        this.onBtApply(false, true);\n      }\n    });\n  }\n  setIsLoading(isLoading) {\n    _setDisplayed26(this.eFilterLoading, isLoading);\n    if (!isLoading) {\n      this.hardRefreshVirtualList = true;\n    }\n  }\n  initialiseFilterBodyUi() {\n    this.initVirtualList();\n    this.initMiniFilter();\n  }\n  initVirtualList() {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const translate = this.localeService.getLocaleTextFunc();\n    const filterListName = translate(\"ariaFilterList\", \"Filter List\");\n    const isTree = !!this.setFilterParams.treeList;\n    const virtualList = this.virtualList = this.createBean(\n      new VirtualList({\n        cssIdentifier: \"filter\",\n        ariaRole: isTree ? \"tree\" : \"listbox\",\n        listName: filterListName\n      })\n    );\n    const eSetFilterList = this.eSetFilterList;\n    if (isTree) {\n      eSetFilterList.classList.add(\"ag-set-filter-tree-list\");\n    }\n    if (eSetFilterList) {\n      eSetFilterList.appendChild(virtualList.getGui());\n    }\n    const { cellHeight } = this.setFilterParams;\n    if (cellHeight != null) {\n      virtualList.setRowHeight(cellHeight);\n    }\n    const componentCreator = (item, listItemElement) => this.createSetListItem(item, isTree, listItemElement);\n    virtualList.setComponentCreator(componentCreator);\n    const componentUpdater = (item, component) => this.updateSetListItem(item, component);\n    virtualList.setComponentUpdater(componentUpdater);\n    this.createVirtualListModel(this.setFilterParams);\n  }\n  createVirtualListModel(params) {\n    if (!this.valueModel) {\n      return;\n    }\n    let model;\n    if (params.suppressSelectAll) {\n      model = new ModelWrapper(this.valueModel);\n    } else {\n      model = new ModelWrapperWithSelectAll(this.valueModel, () => this.isSelectAllSelected());\n    }\n    if (params.treeList) {\n      model = new TreeModelWrapper(model);\n    }\n    this.virtualList?.setModel(model);\n  }\n  getSelectAllLabel() {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const key = this.valueModel.getMiniFilter() == null || !this.setFilterParams.excelMode ? \"selectAll\" : \"selectAllSearchResults\";\n    return this.translateForSetFilter(key);\n  }\n  getAddSelectionToFilterLabel() {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    return this.translateForSetFilter(\"addCurrentSelectionToFilter\");\n  }\n  createSetListItem(item, isTree, focusWrapper) {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const groupsExist = this.valueModel.hasGroups();\n    const { isSelected, isExpanded } = this.isSelectedExpanded(item);\n    const { value, depth, isGroup, hasIndeterminateExpandState, selectedListener, expandedListener } = this.newSetListItemAttributes(item);\n    const itemParams = {\n      focusWrapper,\n      value,\n      params: this.setFilterParams,\n      translate: (translateKey) => this.translateForSetFilter(translateKey),\n      valueFormatter: this.valueFormatter,\n      item,\n      isSelected,\n      isTree,\n      depth,\n      groupsExist,\n      isGroup,\n      isExpanded,\n      hasIndeterminateExpandState\n    };\n    const listItem = this.createBean(new SetFilterListItem(itemParams));\n    listItem.addEventListener(\"selectionChanged\", selectedListener);\n    if (expandedListener) {\n      listItem.addEventListener(\"expandedChanged\", expandedListener);\n    }\n    return listItem;\n  }\n  newSetTreeItemAttributes(item) {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const groupsExist = this.valueModel.hasGroups();\n    if (item.key === SetFilterDisplayValue.SELECT_ALL) {\n      return {\n        value: () => this.getSelectAllLabel(),\n        isGroup: groupsExist,\n        depth: item.depth,\n        hasIndeterminateExpandState: true,\n        selectedListener: (e) => this.onSelectAll(e.isSelected),\n        expandedListener: (e) => this.onExpandAll(e.item, e.isExpanded)\n      };\n    }\n    if (item.key === SetFilterDisplayValue.ADD_SELECTION_TO_FILTER) {\n      return {\n        value: () => this.getAddSelectionToFilterLabel(),\n        depth: item.depth,\n        isGroup: false,\n        hasIndeterminateExpandState: false,\n        selectedListener: (e) => {\n          this.onAddCurrentSelectionToFilterChange(e.isSelected);\n        }\n      };\n    }\n    if (item.children) {\n      return {\n        value: this.setFilterParams.treeListFormatter?.(item.treeKey, item.depth, item.parentTreeKeys) ?? item.treeKey,\n        depth: item.depth,\n        isGroup: true,\n        selectedListener: (e) => this.onGroupItemSelected(e.item, e.isSelected),\n        expandedListener: (e) => this.onExpandedChanged(e.item, e.isExpanded)\n      };\n    }\n    return {\n      value: this.setFilterParams.treeListFormatter?.(item.treeKey, item.depth, item.parentTreeKeys) ?? item.treeKey,\n      depth: item.depth,\n      selectedListener: (e) => this.onItemSelected(e.item.key, e.isSelected)\n    };\n  }\n  newSetListItemAttributes(item) {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    if (this.isSetFilterModelTreeItem(item)) {\n      return this.newSetTreeItemAttributes(item);\n    }\n    if (item === SetFilterDisplayValue.SELECT_ALL) {\n      return {\n        value: () => this.getSelectAllLabel(),\n        selectedListener: (e) => this.onSelectAll(e.isSelected)\n      };\n    }\n    if (item === SetFilterDisplayValue.ADD_SELECTION_TO_FILTER) {\n      return {\n        value: () => this.getAddSelectionToFilterLabel(),\n        selectedListener: (e) => {\n          this.onAddCurrentSelectionToFilterChange(e.isSelected);\n        }\n      };\n    }\n    return {\n      value: this.valueModel.getValue(item),\n      selectedListener: (e) => this.onItemSelected(e.item, e.isSelected)\n    };\n  }\n  updateSetListItem(item, component) {\n    const { isSelected, isExpanded } = this.isSelectedExpanded(item);\n    component.refresh(item, isSelected, isExpanded);\n  }\n  isSelectedExpanded(item) {\n    let isSelected;\n    let isExpanded;\n    if (this.isSetFilterModelTreeItem(item)) {\n      isExpanded = item.expanded;\n      if (item.key === SetFilterDisplayValue.SELECT_ALL) {\n        isSelected = this.isSelectAllSelected();\n      } else if (item.key === SetFilterDisplayValue.ADD_SELECTION_TO_FILTER) {\n        isSelected = this.valueModel.isAddCurrentSelectionToFilterChecked();\n      } else if (item.children) {\n        isSelected = this.areAllChildrenSelected(item);\n      } else {\n        isSelected = this.valueModel.isKeySelected(item.key);\n      }\n    } else {\n      if (item === SetFilterDisplayValue.SELECT_ALL) {\n        isSelected = this.isSelectAllSelected();\n      } else if (item === SetFilterDisplayValue.ADD_SELECTION_TO_FILTER) {\n        isSelected = this.valueModel.isAddCurrentSelectionToFilterChecked();\n      } else {\n        isSelected = this.valueModel.isKeySelected(item);\n      }\n    }\n    return { isSelected, isExpanded };\n  }\n  isSetFilterModelTreeItem(item) {\n    return item?.treeKey !== void 0;\n  }\n  initMiniFilter() {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const { eMiniFilter, localeService } = this;\n    const translate = localeService.getLocaleTextFunc();\n    eMiniFilter.setDisplayed(!this.setFilterParams.suppressMiniFilter);\n    eMiniFilter.setValue(this.valueModel.getMiniFilter());\n    eMiniFilter.onValueChange(() => this.onMiniFilterInput());\n    eMiniFilter.setInputAriaLabel(translate(\"ariaSearchFilterValues\", \"Search filter values\"));\n    this.addManagedElementListeners(eMiniFilter.getInputElement(), {\n      keydown: (e) => this.onMiniFilterKeyDown(e)\n    });\n  }\n  updateMiniFilter() {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const { eMiniFilter } = this;\n    if (eMiniFilter.isDisplayed() !== !this.setFilterParams.suppressMiniFilter) {\n      eMiniFilter.setDisplayed(!this.setFilterParams.suppressMiniFilter);\n    }\n    const miniFilterValue = this.valueModel.getMiniFilter();\n    if (eMiniFilter.getValue() !== miniFilterValue) {\n      eMiniFilter.setValue(miniFilterValue);\n    }\n  }\n  // we need to have the GUI attached before we can draw the virtual rows, as the\n  // virtual row logic needs info about the GUI state\n  afterGuiAttached(params) {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    super.afterGuiAttached(params);\n    this.resetExpansion();\n    this.refreshVirtualList();\n    const { eMiniFilter } = this;\n    eMiniFilter.setInputPlaceholder(this.translateForSetFilter(\"searchOoo\"));\n    if (!params || !params.suppressFocus) {\n      if (eMiniFilter.isDisplayed()) {\n        eMiniFilter.getFocusableElement().focus();\n      } else {\n        this.virtualList?.awaitStable(() => this.virtualList?.focusRow(0));\n      }\n    }\n  }\n  afterGuiDetached() {\n    super.afterGuiDetached();\n    if (this.setFilterParams?.excelMode) {\n      this.resetMiniFilter();\n    }\n    const appliedModel = this.getModel();\n    if (this.setFilterParams?.excelMode || !this.areModelsEqual(appliedModel, this.getModelFromUi())) {\n      this.resetUiToActiveModel(appliedModel);\n      this.showOrHideResults();\n    }\n  }\n  applyModel(source = \"api\") {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    if (this.setFilterParams.excelMode && source !== \"rowDataUpdated\" && this.valueModel.isEverythingVisibleSelected()) {\n      this.valueModel.selectAllMatchingMiniFilter();\n    }\n    const shouldKeepCurrentSelection = this.valueModel.showAddCurrentSelectionToFilter() && this.valueModel.isAddCurrentSelectionToFilterChecked();\n    if (shouldKeepCurrentSelection && !this.getModel()) {\n      return false;\n    }\n    const result = super.applyModel(source);\n    const appliedModel = this.getModel();\n    if (appliedModel) {\n      if (!shouldKeepCurrentSelection) {\n        this.valueModel.setAppliedModelKeys(/* @__PURE__ */ new Set());\n      }\n      appliedModel.values.forEach((key) => {\n        this.valueModel.addToAppliedModelKeys(key);\n      });\n    } else {\n      if (!shouldKeepCurrentSelection) {\n        this.valueModel.setAppliedModelKeys(null);\n      }\n    }\n    return result;\n  }\n  isModelValid(model) {\n    return this.setFilterParams && this.setFilterParams.excelMode ? model == null || model.values.length > 0 : true;\n  }\n  doesFilterPass(params) {\n    if (!this.setFilterParams || !this.valueModel || !this.valueModel.getCaseFormattedAppliedModelKeys()) {\n      return true;\n    }\n    if (!this.valueModel.hasAnyAppliedModelKey()) {\n      return false;\n    }\n    const { node, data } = params;\n    if (this.treeDataTreeList) {\n      return this.doesFilterPassForTreeData(node, data);\n    }\n    if (this.groupingTreeList) {\n      return this.doesFilterPassForGrouping(node);\n    }\n    const value = this.getValueFromNode(node);\n    if (value != null && Array.isArray(value)) {\n      if (value.length === 0) {\n        return this.valueModel.hasAppliedModelKey(null);\n      }\n      return value.some((v) => this.isInAppliedModel(this.createKey(v, node)));\n    }\n    return this.isInAppliedModel(this.createKey(value, node));\n  }\n  doesFilterPassForTreeData(node, data) {\n    if (node.childrenAfterGroup?.length) {\n      return false;\n    }\n    return this.isInAppliedModel(\n      this.createKey(\n        processDataPath(this.getDataPath(data), true, this.gos.get(\"groupAllowUnbalanced\"))\n      )\n    );\n  }\n  doesFilterPassForGrouping(node) {\n    const dataPath = this.funcColsService.getRowGroupColumns().map((groupCol) => this.valueService.getKeyForNode(groupCol, node));\n    dataPath.push(this.getValueFromNode(node));\n    return this.isInAppliedModel(\n      this.createKey(processDataPath(dataPath, false, this.gos.get(\"groupAllowUnbalanced\")))\n    );\n  }\n  isInAppliedModel(key) {\n    return this.valueModel.hasAppliedModelKey(key);\n  }\n  getValueFromNode(node) {\n    return this.setFilterParams.getValue(node);\n  }\n  getKeyCreatorParams(value, node = null) {\n    return {\n      value,\n      colDef: this.setFilterParams.colDef,\n      column: this.setFilterParams.column,\n      node,\n      data: node?.data,\n      api: this.setFilterParams.api,\n      context: this.setFilterParams.context\n    };\n  }\n  onNewRowsLoaded() {\n    if (!this.isValuesTakenFromGrid()) {\n      return;\n    }\n    this.syncAfterDataChange();\n  }\n  isValuesTakenFromGrid() {\n    if (!this.valueModel) {\n      return false;\n    }\n    const valuesType = this.valueModel.getValuesType();\n    return valuesType === 2;\n  }\n  //noinspection JSUnusedGlobalSymbols\n  /**\n   * Public method provided so the user can change the value of the filter once\n   * the filter has been already started\n   * @param values The values to use.\n   */\n  setFilterValues(values) {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    this.valueModel.overrideValues(values).then(() => {\n      this.checkAndRefreshVirtualList();\n      this.onUiChanged();\n    });\n  }\n  //noinspection JSUnusedGlobalSymbols\n  /**\n   * Public method provided so the user can reset the values of the filter once that it has started.\n   */\n  resetFilterValues() {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    this.valueModel.setValuesType(\n      2\n      /* TAKEN_FROM_GRID_VALUES */\n    );\n    this.syncAfterDataChange();\n  }\n  refreshFilterValues() {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    if (!this.valueModel.isInitialised()) {\n      return;\n    }\n    this.valueModel.refreshValues().then(() => {\n      this.hardRefreshVirtualList = true;\n      this.checkAndRefreshVirtualList();\n      this.onUiChanged();\n    });\n  }\n  onAnyFilterChanged() {\n    setTimeout(() => {\n      if (!this.isAlive()) {\n        return;\n      }\n      if (!this.valueModel) {\n        throw new Error(\"Value model has not been created.\");\n      }\n      this.valueModel.refreshAfterAnyFilterChanged().then((refresh) => {\n        if (refresh) {\n          this.checkAndRefreshVirtualList();\n          this.showOrHideResults();\n        }\n      });\n    }, 0);\n  }\n  onMiniFilterInput() {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    if (!this.valueModel.setMiniFilter(this.eMiniFilter.getValue())) {\n      return;\n    }\n    const { applyMiniFilterWhileTyping, readOnly } = this.setFilterParams || {};\n    if (!readOnly && applyMiniFilterWhileTyping) {\n      this.filterOnAllVisibleValues(false);\n    } else {\n      this.updateUiAfterMiniFilterChange();\n    }\n  }\n  updateUiAfterMiniFilterChange() {\n    if (!this.setFilterParams) {\n      throw new Error(\"Set filter params have not been provided.\");\n    }\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const { excelMode, readOnly } = this.setFilterParams || {};\n    if (excelMode == null || !!readOnly) {\n      this.checkAndRefreshVirtualList();\n    } else if (this.valueModel.getMiniFilter() == null) {\n      this.resetUiToActiveModel(this.getModel());\n    } else {\n      this.valueModel.selectAllMatchingMiniFilter(true);\n      this.checkAndRefreshVirtualList();\n      this.onUiChanged();\n    }\n    this.showOrHideResults();\n  }\n  showOrHideResults() {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    const hideResults = this.valueModel.getMiniFilter() != null && this.valueModel.getDisplayedValueCount() < 1;\n    _setDisplayed26(this.eFilterNoMatches, hideResults);\n    _setDisplayed26(this.eSetFilterList, !hideResults);\n  }\n  resetMiniFilter() {\n    this.eMiniFilter.setValue(null, true);\n    this.valueModel?.setMiniFilter(null);\n  }\n  resetUiToActiveModel(currentModel, afterUiUpdatedFunc) {\n    this.setModelAndRefresh(currentModel == null ? null : currentModel.values).then(() => {\n      this.onUiChanged(false, \"prevent\");\n      afterUiUpdatedFunc?.();\n    });\n  }\n  handleCancelEnd(e) {\n    this.setMiniFilter(null);\n    super.handleCancelEnd(e);\n  }\n  onMiniFilterKeyDown(e) {\n    const { excelMode, readOnly } = this.setFilterParams || {};\n    if (e.key === KeyCode21.ENTER && !excelMode && !readOnly) {\n      this.filterOnAllVisibleValues();\n    }\n  }\n  filterOnAllVisibleValues(applyImmediately = true) {\n    const { readOnly } = this.setFilterParams || {};\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    if (readOnly) {\n      throw new Error(\"Unable to filter in readOnly mode.\");\n    }\n    this.valueModel.selectAllMatchingMiniFilter(true);\n    this.checkAndRefreshVirtualList();\n    this.onUiChanged(false, applyImmediately ? \"immediately\" : \"debounce\");\n    this.showOrHideResults();\n  }\n  focusRowIfAlive(rowIndex) {\n    if (rowIndex == null) {\n      return;\n    }\n    window.setTimeout(() => {\n      if (!this.virtualList) {\n        throw new Error(\"Virtual list has not been created.\");\n      }\n      if (this.isAlive()) {\n        this.virtualList.focusRow(rowIndex);\n      }\n    }, 0);\n  }\n  onSelectAll(isSelected) {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    if (!this.virtualList) {\n      throw new Error(\"Virtual list has not been created.\");\n    }\n    if (isSelected) {\n      this.valueModel.selectAllMatchingMiniFilter();\n    } else {\n      this.valueModel.deselectAllMatchingMiniFilter();\n    }\n    this.refreshAfterSelection();\n  }\n  onGroupItemSelected(item, isSelected) {\n    const recursiveGroupSelection = (i) => {\n      if (i.children) {\n        i.children.forEach((childItem) => recursiveGroupSelection(childItem));\n      } else {\n        this.selectItem(i.key, isSelected);\n      }\n    };\n    recursiveGroupSelection(item);\n    this.refreshAfterSelection();\n  }\n  onItemSelected(key, isSelected) {\n    if (!this.valueModel) {\n      throw new Error(\"Value model has not been created.\");\n    }\n    if (!this.virtualList) {\n      throw new Error(\"Virtual list has not been created.\");\n    }\n    this.selectItem(key, isSelected);\n    this.refreshAfterSelection();\n  }\n  selectItem(key, isSelected) {\n    if (isSelected) {\n      this.valueModel.selectKey(key);\n    } else {\n      this.valueModel.deselectKey(key);\n    }\n  }\n  onExpandAll(item, isExpanded) {\n    const recursiveExpansion = (i) => {\n      if (i.filterPasses && i.available && i.children) {\n        i.children.forEach((childItem) => recursiveExpansion(childItem));\n        i.expanded = isExpanded;\n      }\n    };\n    recursiveExpansion(item);\n    this.refreshAfterExpansion();\n  }\n  onExpandedChanged(item, isExpanded) {\n    item.expanded = isExpanded;\n    this.refreshAfterExpansion();\n  }\n  refreshAfterExpansion() {\n    const focusedRow = this.virtualList.getLastFocusedRow();\n    this.valueModel.updateDisplayedValues(\"expansion\");\n    this.checkAndRefreshVirtualList();\n    this.focusRowIfAlive(focusedRow);\n  }\n  refreshAfterSelection() {\n    const focusedRow = this.virtualList.getLastFocusedRow();\n    this.checkAndRefreshVirtualList();\n    this.onUiChanged();\n    this.focusRowIfAlive(focusedRow);\n  }\n  setMiniFilter(newMiniFilter) {\n    this.eMiniFilter.setValue(newMiniFilter);\n    this.onMiniFilterInput();\n  }\n  getMiniFilter() {\n    return this.valueModel ? this.valueModel.getMiniFilter() : null;\n  }\n  checkAndRefreshVirtualList() {\n    if (!this.virtualList) {\n      throw new Error(\"Virtual list has not been created.\");\n    }\n    this.virtualList.refresh(!this.hardRefreshVirtualList);\n    if (this.hardRefreshVirtualList) {\n      this.hardRefreshVirtualList = false;\n    }\n  }\n  getFilterKeys() {\n    return this.valueModel ? this.valueModel.getKeys() : [];\n  }\n  getFilterValues() {\n    return this.valueModel ? this.valueModel.getValues() : [];\n  }\n  getValues() {\n    return this.getFilterKeys();\n  }\n  refreshVirtualList() {\n    if (this.setFilterParams && this.setFilterParams.refreshValuesOnOpen) {\n      this.refreshFilterValues();\n    } else {\n      this.checkAndRefreshVirtualList();\n    }\n  }\n  translateForSetFilter(key) {\n    const translate = this.localeService.getLocaleTextFunc();\n    return translate(key, DEFAULT_LOCALE_TEXT[key]);\n  }\n  isSelectAllSelected() {\n    if (!this.setFilterParams || !this.valueModel) {\n      return false;\n    }\n    if (!this.setFilterParams.defaultToNothingSelected) {\n      if (this.valueModel.hasSelections() && this.valueModel.isNothingVisibleSelected()) {\n        return false;\n      }\n      if (this.valueModel.isEverythingVisibleSelected()) {\n        return true;\n      }\n    } else {\n      if (this.valueModel.hasSelections() && this.valueModel.isEverythingVisibleSelected()) {\n        return true;\n      }\n      if (this.valueModel.isNothingVisibleSelected()) {\n        return false;\n      }\n    }\n    return void 0;\n  }\n  areAllChildrenSelected(item) {\n    const recursiveChildSelectionCheck = (i) => {\n      if (i.children) {\n        let someTrue = false;\n        let someFalse = false;\n        const mixed = i.children.some((child) => {\n          if (!child.filterPasses || !child.available) {\n            return false;\n          }\n          const childSelected = recursiveChildSelectionCheck(child);\n          if (childSelected === void 0) {\n            return true;\n          }\n          if (childSelected) {\n            someTrue = true;\n          } else {\n            someFalse = true;\n          }\n          return someTrue && someFalse;\n        });\n        return mixed ? void 0 : someTrue;\n      } else {\n        return this.valueModel.isKeySelected(i.key);\n      }\n    };\n    if (!this.setFilterParams.defaultToNothingSelected) {\n      return recursiveChildSelectionCheck(item);\n    } else {\n      return this.valueModel.hasSelections() && recursiveChildSelectionCheck(item);\n    }\n  }\n  destroy() {\n    if (this.virtualList != null) {\n      this.virtualList.destroy();\n      this.virtualList = null;\n    }\n    super.destroy();\n  }\n  caseFormat(valueToFormat) {\n    if (valueToFormat == null || typeof valueToFormat !== \"string\") {\n      return valueToFormat;\n    }\n    return this.caseSensitive ? valueToFormat : valueToFormat.toUpperCase();\n  }\n  resetExpansion() {\n    if (!this.setFilterParams?.treeList) {\n      return;\n    }\n    const selectAllItem = this.valueModel?.getSelectAllItem();\n    if (this.isSetFilterModelTreeItem(selectAllItem)) {\n      const recursiveCollapse = (i) => {\n        if (i.children) {\n          i.children.forEach((childItem) => recursiveCollapse(childItem));\n          i.expanded = false;\n        }\n      };\n      recursiveCollapse(selectAllItem);\n      this.valueModel.updateDisplayedValues(\"expansion\");\n    }\n  }\n  getModelAsString(model) {\n    return this.filterModelFormatter.getModelAsString(model, this);\n  }\n  getPositionableElement() {\n    return this.eSetFilterList;\n  }\n};\nvar ModelWrapper = class {\n  constructor(model) {\n    this.model = model;\n  }\n  getRowCount() {\n    return this.model.getDisplayedValueCount();\n  }\n  getRow(index) {\n    return this.model.getDisplayedItem(index);\n  }\n  areRowsEqual(oldRow, newRow) {\n    return oldRow === newRow;\n  }\n};\nvar ModelWrapperWithSelectAll = class {\n  constructor(model, isSelectAllSelected) {\n    this.model = model;\n    this.isSelectAllSelected = isSelectAllSelected;\n  }\n  getRowCount() {\n    const showAddCurrentSelectionToFilter = this.model.showAddCurrentSelectionToFilter();\n    const outboundItems = showAddCurrentSelectionToFilter ? 2 : 1;\n    return this.model.getDisplayedValueCount() + outboundItems;\n  }\n  getRow(index) {\n    if (index === 0) {\n      return this.model.getSelectAllItem();\n    }\n    const showAddCurrentSelectionToFilter = this.model.showAddCurrentSelectionToFilter();\n    const outboundItems = showAddCurrentSelectionToFilter ? 2 : 1;\n    if (index === 1 && showAddCurrentSelectionToFilter) {\n      return this.model.getAddSelectionToFilterItem();\n    }\n    return this.model.getDisplayedItem(index - outboundItems);\n  }\n  areRowsEqual(oldRow, newRow) {\n    return oldRow === newRow;\n  }\n};\nvar TreeModelWrapper = class {\n  constructor(model) {\n    this.model = model;\n  }\n  getRowCount() {\n    return this.model.getRowCount();\n  }\n  getRow(index) {\n    return this.model.getRow(index);\n  }\n  areRowsEqual(oldRow, newRow) {\n    if (oldRow == null && newRow == null) {\n      return true;\n    }\n    return oldRow != null && newRow != null && oldRow.treeKey === newRow.treeKey && oldRow.depth === newRow.depth;\n  }\n};\nvar SetFloatingFilterComp = class extends Component214 {\n  constructor() {\n    super(\n      /* html */\n      `\n            <div class=\"ag-floating-filter-input ag-set-floating-filter-input\" role=\"presentation\">\n                <ag-input-text-field data-ref=\"eFloatingFilterText\"></ag-input-text-field>\n            </div>`,\n      [AgInputTextFieldSelector23]\n    );\n    this.eFloatingFilterText = RefPlaceholder38;\n    this.availableValuesListenerAdded = false;\n    this.filterModelFormatter = new SetFilterModelFormatter();\n  }\n  wireBeans(beans) {\n    this.columnNameService = beans.columnNameService;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n  init(params) {\n    this.params = params;\n    this.eFloatingFilterText.setDisabled(true).addGuiEventListener(\"click\", () => this.params.showParentFilter());\n    this.setParams(params);\n  }\n  setParams(params) {\n    const displayName = this.columnNameService.getDisplayNameForColumn(params.column, \"header\", true);\n    const translate = this.localeService.getLocaleTextFunc();\n    this.eFloatingFilterText.setInputAriaLabel(`${displayName} ${translate(\"ariaFilterInput\", \"Filter Input\")}`);\n  }\n  onParamsUpdated(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    this.params = params;\n    this.setParams(params);\n  }\n  onParentModelChanged(parentModel) {\n    this.updateFloatingFilterText(parentModel);\n  }\n  parentSetFilterInstance(cb) {\n    this.params.parentFilterInstance((filter) => {\n      if (!(filter instanceof SetFilter)) {\n        throw new Error(\"AG Grid - SetFloatingFilter expects SetFilter as its parent\");\n      }\n      cb(filter);\n    });\n  }\n  addAvailableValuesListener() {\n    this.parentSetFilterInstance((setFilter) => {\n      const setValueModel = setFilter.getValueModel();\n      if (!setValueModel) {\n        return;\n      }\n      this.addManagedListeners(setValueModel, { availableValuesChanged: () => this.updateFloatingFilterText() });\n    });\n    this.availableValuesListenerAdded = true;\n  }\n  updateFloatingFilterText(parentModel) {\n    if (!this.availableValuesListenerAdded) {\n      this.addAvailableValuesListener();\n    }\n    this.parentSetFilterInstance((setFilter) => {\n      this.eFloatingFilterText.setValue(this.filterModelFormatter.getModelAsString(parentModel, setFilter));\n    });\n  }\n};\nvar VERSION16 = \"32.3.9\";\nvar SetFilterCoreModule = _defineModule16({\n  version: VERSION16,\n  moduleName: `${ModuleNames17.SetFilterModule}-core`,\n  userComponents: [{ name: \"agSetColumnFilter\", classImp: SetFilter }],\n  dependantModules: [EnterpriseCoreModule, _ColumnFilterModule4]\n});\nvar SetFloatingFilterModule = _defineModule16({\n  version: VERSION16,\n  moduleName: \"@ag-grid-enterprise/set-floating-filter\",\n  userComponents: [{ name: \"agSetColumnFloatingFilter\", classImp: SetFloatingFilterComp }],\n  dependantModules: [SetFilterCoreModule, _FloatingFilterModule2]\n});\nvar SetFilterModule = _defineModule16({\n  version: VERSION16,\n  moduleName: ModuleNames17.SetFilterModule,\n  dependantModules: [SetFilterCoreModule, SetFloatingFilterModule]\n});\n\n// enterprise-modules/sparklines/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames18, _defineModule as _defineModule17 } from \"ag-grid-community\";\nimport { Component as Component59, RefPlaceholder as RefPlaceholder39 } from \"ag-grid-community\";\nimport { _warnOnce as _warnOnce213 } from \"ag-grid-community\";\nimport { _Util as _Util7 } from \"ag-charts-community\";\nimport { _Scale as _Scale2, _Scene as _Scene32, _Util as _Util22 } from \"ag-charts-community\";\nimport { _warnOnce as _warnOnce40 } from \"ag-grid-community\";\nimport { _Scene as _Scene25 } from \"ag-charts-community\";\nimport { _errorOnce as _errorOnce7 } from \"ag-grid-community\";\nimport { _Scale, _Scene as _Scene26, _Util as _Util8 } from \"ag-charts-community\";\nimport { _ModuleSupport as _ModuleSupport5, _Scale as _Scale3, _Util as _Util42 } from \"ag-charts-community\";\nimport { _Scene as _Scene42, _Util as _Util32 } from \"ag-charts-community\";\nimport { _ModuleSupport as _ModuleSupport22, _Scale as _Scale4, _Util as _Util52 } from \"ag-charts-community\";\nimport { _Scale as _Scale5, _Scene as _Scene52, _Util as _Util62 } from \"ag-charts-community\";\nimport { BeanStub as BeanStub31 } from \"ag-grid-community\";\nfunction getLineDash(lineCap, lineDash2 = \"solid\") {\n  const buttOrNull = {\n    solid: [],\n    dash: [4, 3],\n    dot: [1, 3],\n    dashDot: [4, 3, 1, 3],\n    dashDotDot: [4, 3, 1, 3, 1, 3],\n    shortDot: [1, 1],\n    shortDash: [3, 1],\n    shortDashDot: [3, 1, 1, 1],\n    shortDashDotDot: [3, 1, 1, 1, 1, 1],\n    longDash: [8, 3],\n    longDashDot: [8, 3, 1, 3],\n    longDashDotDot: [8, 3, 1, 3, 1, 3]\n  };\n  const roundOrSquare = {\n    solid: [],\n    dash: [3, 3],\n    dot: [0, 3],\n    dashDot: [3, 3, 0, 3],\n    dashDotDot: [3, 3, 0, 3, 0, 3],\n    shortDot: [0, 2],\n    shortDash: [2, 2],\n    shortDashDot: [2, 2, 0, 2],\n    shortDashDotDot: [2, 2, 0, 2, 0, 2],\n    longDash: [7, 3],\n    longDashDot: [7, 3, 0, 3],\n    longDashDotDot: [7, 3, 0, 3, 0, 3]\n  };\n  if (lineCap === \"round\" || lineCap === \"square\") {\n    if (roundOrSquare[lineDash2] == void 0) {\n      warnInvalid(lineDash2);\n      return roundOrSquare.solid;\n    }\n    return roundOrSquare[lineDash2];\n  }\n  if (buttOrNull[lineDash2] == void 0) {\n    warnInvalid(lineDash2);\n    return buttOrNull.solid;\n  }\n  return buttOrNull[lineDash2];\n}\nfunction warnInvalid(lineDash2) {\n  _warnOnce40(`'${lineDash2}' is not a valid 'lineDash' option.`);\n}\nfunction getMarker(shape) {\n  switch (shape) {\n    case \"circle\":\n      return _Scene25.Circle;\n    case \"square\":\n      return _Scene25.Square;\n    case \"diamond\":\n      return _Scene25.Diamond;\n    default:\n      return _Scene25.Circle;\n  }\n}\nvar defaultTooltipCss = `\n.ag-sparkline-tooltip-wrapper {\n    position: absolute;\n    user-select: none;\n    pointer-events: none;\n}\n\n.ag-sparkline-tooltip {\n    position: relative;\n    font: 12px arial,sans-serif;\n    border-radius: 2px;\n    box-shadow: 0 1px 3px rgb(0 0 0 / 20%), 0 1px 1px rgb(0 0 0 / 14%);\n    line-height: 1.7em;\n    overflow: hidden;\n    white-space: nowrap;\n    z-index: 99999;\n    background-color: rgb(255, 255, 255);\n    color: rgba(0,0,0, 0.67);\n}\n\n.ag-sparkline-tooltip-content {\n    padding: 0 7px;\n    opacity: 1;\n}\n\n.ag-sparkline-tooltip-title {\n    padding-left: 7px;\n    opacity: 1;\n}\n\n.ag-sparkline-tooltip-wrapper-hidden {\n    top: -10000px !important;\n}\n\n.ag-sparkline-wrapper {\n    box-sizing: border-box;\n    overflow: hidden;\n}\n`;\nvar { extent, isNumber, isString: isString2, isStringObject, isDate, createId, Padding } = _Util8;\nvar { LinearScale, BandScale, TimeScale } = _Scale;\nvar { Transformable } = _Scene26;\nvar SparklineAxis = class {\n  constructor() {\n    this.type = \"category\";\n    this.stroke = \"rgb(204, 214, 235)\";\n    this.strokeWidth = 1;\n  }\n};\nvar _Sparkline = class _Sparkline2 {\n  constructor() {\n    this.id = createId(this);\n    this.seriesRect = {\n      x: 0,\n      y: 0,\n      width: 0,\n      height: 0\n    };\n    this._context = void 0;\n    this._container = void 0;\n    this._data = void 0;\n    this.padding = new Padding(3);\n    this.xKey = \"x\";\n    this.yKey = \"y\";\n    this.dataType = void 0;\n    this.xData = [];\n    this.yData = [];\n    this.min = void 0;\n    this.max = void 0;\n    this.yScale = new LinearScale();\n    this.axis = new SparklineAxis();\n    this.highlightStyle = {\n      size: 6,\n      fill: \"yellow\",\n      stroke: \"silver\",\n      strokeWidth: 1\n    };\n    this._width = 100;\n    this._height = 100;\n    this.smallestInterval = void 0;\n    this.layoutId = 0;\n    this.defaultDateFormatter = new Intl.DateTimeFormat(\"en-US\", {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false\n    });\n    this._onMouseMove = this.onMouseMove.bind(this);\n    this._onMouseOut = this.onMouseOut.bind(this);\n    const root = new _Scene26.TranslatableGroup();\n    this.rootGroup = root;\n    const element = document.createElement(\"div\");\n    element.setAttribute(\"class\", \"ag-sparkline-wrapper\");\n    const scene = new _Scene26.Scene({});\n    this.scene = scene;\n    this.canvasElement = scene.canvas.element;\n    scene.setRoot(root);\n    scene.setContainer(element);\n    this.resizeAndSetDimensions(this.width, this.height);\n    if (!_Sparkline2.tooltipDocuments.includes(document)) {\n      this.initialiseTooltipStyles();\n    }\n    this.setupDomEventListeners(this.canvasElement);\n  }\n  set context(value) {\n    if (this._context !== value) {\n      this._context = value;\n    }\n  }\n  get context() {\n    return this._context;\n  }\n  set container(value) {\n    if (this._container !== value) {\n      const { parentNode } = this.canvasElement;\n      if (parentNode != null) {\n        parentNode.removeChild(this.canvasElement);\n      }\n      if (value) {\n        value.appendChild(this.canvasElement);\n      }\n      this._container = value;\n    }\n  }\n  get container() {\n    return this._container;\n  }\n  set data(value) {\n    if (this._data !== value) {\n      this._data = value;\n      this.processData();\n      if (this.mouseMoveEvent && this.highlightedDatum) {\n        this.updateHitPoint(this.mouseMoveEvent);\n      }\n    }\n  }\n  get data() {\n    return this._data;\n  }\n  resizeAndSetDimensions(width, height) {\n    this.scene.resize(width, height);\n    this.seriesRect.width = width;\n    this.seriesRect.height = height;\n  }\n  initialiseTooltipStyles() {\n    const styleElement = document.createElement(\"style\");\n    styleElement.innerHTML = defaultTooltipCss;\n    document.head.insertBefore(styleElement, document.head.querySelector(\"style\"));\n    _Sparkline2.tooltipDocuments.push(document);\n  }\n  set width(value) {\n    if (this._width !== value) {\n      this._width = value;\n      this.scene.resize(value, this.height);\n      this.scheduleLayout();\n    }\n  }\n  get width() {\n    return this._width;\n  }\n  set height(value) {\n    if (this._height !== value) {\n      this._height = value;\n      this.scene.resize(this.width, value);\n      this.scheduleLayout();\n    }\n  }\n  get height() {\n    return this._height;\n  }\n  /**\n   * Generate node data from processed data.\n   * Produce data joins.\n   * Update selection's nodes using node data.\n   */\n  update() {\n  }\n  // Update y scale based on processed data.\n  updateYScale() {\n    this.updateYScaleRange();\n    this.updateYScaleDomain();\n  }\n  // Update y scale domain based on processed data.\n  updateYScaleDomain() {\n  }\n  // Update y scale range based on height and padding (seriesRect).\n  updateYScaleRange() {\n    const { yScale, seriesRect } = this;\n    yScale.range = [seriesRect.height, 0];\n  }\n  // Update x scale based on processed data.\n  updateXScale() {\n    const { type } = this.axis;\n    this.xScale = this.getXScale(type);\n    this.updateXScaleRange();\n    this.updateXScaleDomain();\n  }\n  // Update x scale range based on width and padding (seriesRect).\n  updateXScaleRange() {\n    this.xScale.range = [0, this.seriesRect.width];\n  }\n  // Update x scale domain based on processed data and type of scale.\n  updateXScaleDomain() {\n    const { xData, xScale } = this;\n    let xMinMax;\n    if (xScale instanceof LinearScale || xScale instanceof TimeScale) {\n      xMinMax = extent(xData);\n    }\n    this.xScale.domain = xMinMax ? xMinMax.slice() : xData;\n  }\n  /**\n   * Return xScale instance based on the provided type or return a `BandScale` by default.\n   * The default type is `category`.\n   * @param type\n   */\n  getXScale(type = \"category\") {\n    switch (type) {\n      case \"number\":\n        return new LinearScale();\n      case \"time\":\n        return new TimeScale();\n      case \"category\":\n      default:\n        return new BandScale();\n    }\n  }\n  // Update axis line.\n  updateAxisLine() {\n  }\n  // Update X and Y scales and the axis line.\n  updateAxes() {\n    this.updateYScale();\n    this.updateXScale();\n    this.updateAxisLine();\n  }\n  // Update horizontal and vertical crosshair lines.\n  updateCrosshairs() {\n    this.updateXCrosshairLine();\n    this.updateYCrosshairLine();\n  }\n  // Using processed data, generate data that backs visible nodes.\n  generateNodeData() {\n    return [];\n  }\n  // Returns persisted node data associated with the sparkline's data.\n  getNodeData() {\n    return [];\n  }\n  // Update the selection's nodes.\n  updateNodes() {\n  }\n  // Update the vertical crosshair line.\n  updateXCrosshairLine() {\n  }\n  // Update the horizontal crosshair line.\n  updateYCrosshairLine() {\n  }\n  highlightDatum(closestDatum) {\n    this.updateNodes();\n  }\n  dehighlightDatum() {\n    this.highlightedDatum = void 0;\n    this.updateNodes();\n    this.updateCrosshairs();\n  }\n  /**\n   * Highlight closest datum and display tooltip if enabled.\n   * Only update if necessary, i.e. only update if the highlighted datum is different from previously highlighted datum,\n   * or if there is no previously highlighted datum.\n   * @param event\n   */\n  onMouseMove(event) {\n    this.mouseMoveEvent = event;\n    this.updateHitPoint(event);\n  }\n  renderScene() {\n    this.scene.render().catch((e) => _errorOnce7(`chart rendering failed`, e));\n  }\n  updateHitPoint(event) {\n    const closestDatum = this.pickClosestSeriesNodeDatum(event.offsetX, event.offsetY);\n    if (!closestDatum) {\n      return;\n    }\n    const oldHighlightedDatum = this.highlightedDatum;\n    this.highlightedDatum = closestDatum;\n    if (this.highlightedDatum && !oldHighlightedDatum || this.highlightedDatum && oldHighlightedDatum && this.highlightedDatum !== oldHighlightedDatum) {\n      this.highlightDatum(closestDatum);\n      this.updateCrosshairs();\n      this.renderScene();\n    }\n    const tooltipEnabled = this.processedOptions?.tooltip?.enabled ?? true;\n    if (tooltipEnabled) {\n      this.handleTooltip(event, closestDatum);\n    }\n  }\n  /**\n   * Dehighlight all nodes and remove tooltip.\n   * @param event\n   */\n  onMouseOut(event) {\n    this.dehighlightDatum();\n    this.tooltip.toggle(false);\n    this.renderScene();\n  }\n  // Fetch required values from the data object and process them.\n  processData() {\n    const { data, yData, xData } = this;\n    if (!data || this.invalidData(this.data)) {\n      return;\n    }\n    yData.length = 0;\n    xData.length = 0;\n    const n = data.length;\n    const dataType = this.getDataType(data);\n    this.dataType = dataType;\n    const { type: xValueType } = this.axis;\n    const xType = xValueType !== \"number\" && xValueType !== \"time\" ? \"category\" : xValueType;\n    const isContinuousX = xType === \"number\" || xType === \"time\";\n    const setSmallestXInterval = (curr, prev) => {\n      if (this.smallestInterval == void 0) {\n        this.smallestInterval = { x: Infinity, y: Infinity };\n      }\n      const { x } = this.smallestInterval;\n      const interval = Math.abs(curr - prev);\n      if (interval > 0 && interval < x) {\n        this.smallestInterval.x = interval;\n      }\n    };\n    let prevX;\n    if (dataType === \"number\") {\n      for (let i = 0; i < n; i++) {\n        const xDatum = i;\n        const yDatum = data[i];\n        const x = this.getDatum(xDatum, xType);\n        const y = this.getDatum(yDatum, \"number\");\n        if (isContinuousX) {\n          setSmallestXInterval(x, prevX);\n        }\n        xData.push(x);\n        yData.push(y);\n        prevX = x;\n      }\n    } else if (dataType === \"array\") {\n      for (let i = 0; i < n; i++) {\n        const datum = data[i];\n        if (Array.isArray(datum)) {\n          const xDatum = datum[0];\n          const yDatum = datum[1];\n          const x = this.getDatum(xDatum, xType);\n          const y = this.getDatum(yDatum, \"number\");\n          if (x == void 0) {\n            continue;\n          }\n          if (isContinuousX) {\n            setSmallestXInterval(x, prevX);\n          }\n          xData.push(x);\n          yData.push(y);\n          prevX = x;\n        }\n      }\n    } else if (dataType === \"object\") {\n      const { yKey, xKey } = this;\n      for (let i = 0; i < n; i++) {\n        const datum = data[i];\n        if (typeof datum === \"object\" && !Array.isArray(datum)) {\n          const xDatum = datum[xKey];\n          const yDatum = datum[yKey];\n          const x = this.getDatum(xDatum, xType);\n          const y = this.getDatum(yDatum, \"number\");\n          if (x == void 0) {\n            continue;\n          }\n          if (isContinuousX) {\n            setSmallestXInterval(x, prevX);\n          }\n          xData.push(x);\n          yData.push(y);\n          prevX = x;\n        }\n      }\n    }\n    this.updateAxes();\n    this.immediateLayout();\n  }\n  /**\n   * Return the type of data provided to the sparkline based on the first truthy value in the data array.\n   * If the value is not a number, array or object, return `undefined`.\n   * @param data\n   */\n  getDataType(data) {\n    for (const datum of data) {\n      if (datum != void 0) {\n        if (isNumber(datum)) {\n          return \"number\";\n        } else if (Array.isArray(datum)) {\n          return \"array\";\n        } else if (typeof datum === \"object\") {\n          return \"object\";\n        }\n      }\n    }\n  }\n  /**\n   * Return the given value depending on the type of axis.\n   * Return `undefined` if the value is invalid for the given axis type.\n   * @param value\n   */\n  getDatum(value, type) {\n    if (type === \"number\" && isNumber(value) || type === \"time\" && (isNumber(value) || isDate(value))) {\n      return value;\n    } else if (type === \"category\") {\n      if (isString2(value) || isDate(value) || isNumber(value)) {\n        return { toString: () => String(value) };\n      } else if (isStringObject(value)) {\n        return value;\n      }\n    }\n  }\n  /**\n   * Only `true` while we are waiting for the layout to start.\n   * This will be `false` if the layout has already started and is ongoing.\n   */\n  get layoutScheduled() {\n    return !!this.layoutId;\n  }\n  /**\n   * Execute update method on the next available screen repaint to make changes to the canvas.\n   * If we are waiting for a layout to start and a new layout is requested,\n   * cancel the previous layout using the non 0 integer (this.layoutId) returned from requestAnimationFrame.\n   */\n  scheduleLayout() {\n    if (this.layoutId) {\n      cancelAnimationFrame(this.layoutId);\n    }\n    this.layoutId = requestAnimationFrame(() => {\n      this.immediateLayout();\n      this.layoutId = 0;\n    });\n  }\n  immediateLayout() {\n    this.setSparklineDimensions();\n    if (this.invalidData(this.data)) {\n      return;\n    }\n    this.updateXScaleRange();\n    this.updateYScaleRange();\n    this.updateAxisLine();\n    this.update();\n    this.renderScene();\n  }\n  setSparklineDimensions() {\n    const { width, height, padding, seriesRect, rootGroup } = this;\n    const shrunkWidth = width - padding.left - padding.right;\n    const shrunkHeight = height - padding.top - padding.bottom;\n    seriesRect.width = shrunkWidth;\n    seriesRect.height = shrunkHeight;\n    seriesRect.x = padding.left;\n    seriesRect.y = padding.top;\n    rootGroup.translationX = seriesRect.x;\n    rootGroup.translationY = seriesRect.y;\n  }\n  /**\n   * Return the closest data point to x/y canvas coordinates.\n   * @param x\n   * @param y\n   */\n  pickClosestSeriesNodeDatum(x, y) {\n    let minDistance = Infinity;\n    let closestDatum;\n    const hitPoint = Transformable.fromCanvasPoint(this.rootGroup, x, y);\n    const nodeData = this.getNodeData();\n    for (let i = 0; i < nodeData.length; i++) {\n      const datum = nodeData[i];\n      if (!datum.point) {\n        return;\n      }\n      const distance = this.getDistance(hitPoint, datum.point);\n      if (distance <= minDistance) {\n        minDistance = distance;\n        closestDatum = datum;\n      }\n    }\n    return closestDatum;\n  }\n  /**\n   * Return the relevant distance between two points.\n   * The distance will be calculated based on the x value of the points for all sparklines except bar sparkline, where the distance is based on the y values.\n   * @param x\n   * @param y\n   */\n  getDistance(p1, p2) {\n    return Math.abs(p1.x - p2.x);\n  }\n  /**\n   * calculate x/y coordinates for tooltip based on coordinates of highlighted datum, position of canvas and page offset.\n   * @param datum\n   */\n  handleTooltip(event, datum) {\n    const { seriesDatum } = datum;\n    const { canvasElement } = this;\n    const { clientX, clientY } = event;\n    const tooltipOptions = this.processedOptions?.tooltip;\n    const meta = {\n      pageX: clientX,\n      pageY: clientY,\n      position: {\n        xOffset: tooltipOptions?.xOffset,\n        yOffset: tooltipOptions?.yOffset\n      },\n      container: tooltipOptions?.container\n    };\n    if (meta.container == void 0) {\n      meta.container = canvasElement;\n    }\n    const yValue = seriesDatum.y;\n    const xValue = seriesDatum.x;\n    let enabled = tooltipOptions?.enabled ?? true;\n    const tooltipRenderer = tooltipOptions?.renderer;\n    if (tooltipRenderer) {\n      const tooltipRendererResult = tooltipRenderer({\n        context: this.context,\n        datum: seriesDatum,\n        yValue,\n        xValue\n      });\n      enabled = typeof tooltipRendererResult !== \"string\" && tooltipRendererResult.enabled !== void 0 ? tooltipRendererResult.enabled : enabled;\n    }\n    const html = enabled && seriesDatum.y !== void 0 && this.getTooltipHtml(datum);\n    if (html) {\n      this.tooltip.show(meta, html);\n    }\n  }\n  formatNumericDatum(datum) {\n    return String(Math.round(datum * 10) / 10);\n  }\n  // locale.format('%m/%d/%y, %H:%M:%S');\n  formatDatum(datum) {\n    const type = this.axis.type || \"category\";\n    if (type === \"number\" && typeof datum === \"number\") {\n      return this.formatNumericDatum(datum);\n    } else if (type === \"time\" && (datum instanceof Date || isNumber(datum))) {\n      return this.defaultDateFormatter.format(datum);\n    } else {\n      return String(datum);\n    }\n  }\n  setupDomEventListeners(chartElement) {\n    chartElement.addEventListener(\"mousemove\", this._onMouseMove);\n    chartElement.addEventListener(\"mouseout\", this._onMouseOut);\n  }\n  cleanupDomEventListeners(chartElement) {\n    chartElement.removeEventListener(\"mousemove\", this._onMouseMove);\n    chartElement.removeEventListener(\"mouseout\", this._onMouseOut);\n  }\n  invalidData(data) {\n    return !data || !Array.isArray(data);\n  }\n  /**\n   * Cleanup and remove canvas element from the DOM.\n   */\n  destroy() {\n    this.cleanupDomEventListeners(this.canvasElement);\n    this.scene.destroy();\n    this.container = void 0;\n  }\n};\n_Sparkline.tooltipDocuments = [];\nvar Sparkline = _Sparkline;\nfunction toTooltipHtml(input, defaults) {\n  if (typeof input === \"string\") {\n    return input;\n  }\n  defaults = defaults ?? {};\n  const {\n    content = defaults.content ?? \"\",\n    title = defaults.title ?? void 0,\n    color = defaults.color,\n    backgroundColor = defaults.backgroundColor,\n    opacity = defaults.opacity ?? 1\n  } = input;\n  let titleHtml;\n  let contentHtml;\n  if (color) {\n    titleHtml = title ? `<span class=\"${TooltipClass}-title\"; style=\"color: ${color}\">${title}</span>` : \"\";\n    contentHtml = `<span class=\"${TooltipClass}-content\" style=\"color: ${color}\">${content}</span>`;\n  } else {\n    titleHtml = title ? `<span class=\"${TooltipClass}-title\">${title}</span>` : \"\";\n    contentHtml = `<span class=\"${TooltipClass}-content\">${content}</span>`;\n  }\n  let style = `opacity: ${opacity}`;\n  if (backgroundColor) {\n    style += `; background-color: ${backgroundColor.toLowerCase()}`;\n  }\n  return `<div class=\"${TooltipClass}\" style=\"${style}\">\n                ${titleHtml}\n                ${contentHtml}\n            </div>`;\n}\nvar TooltipClass = \"ag-sparkline-tooltip\";\nvar SparklineTooltip = class {\n  constructor() {\n    this.created = false;\n    this.element = document.createElement(\"div\");\n  }\n  isVisible() {\n    const { element } = this;\n    if (element.classList) {\n      return !element.classList.contains(`${TooltipClass}-wrapper-hidden`);\n    }\n    const classes = element.getAttribute(\"class\");\n    if (classes) {\n      return classes.split(\" \").indexOf(`${TooltipClass}-wrapper-hidden`) < 0;\n    }\n    return false;\n  }\n  updateClass(visible) {\n    if (!this.created) {\n      const tooltipRoot = document.body;\n      tooltipRoot.appendChild(this.element);\n      this.created = true;\n    }\n    const classList = [`${TooltipClass}-wrapper`];\n    if (visible !== true) {\n      classList.push(`${TooltipClass}-wrapper-hidden`);\n    }\n    this.element.setAttribute(\"class\", classList.join(\" \"));\n  }\n  show(meta, html) {\n    this.toggle(false);\n    const { element } = this;\n    if (html !== void 0) {\n      element.innerHTML = html;\n    } else if (!element.innerHTML) {\n      return;\n    }\n    const xOffset = meta.position?.xOffset ?? 10;\n    const yOffset = meta.position?.yOffset ?? 0;\n    let left = meta.pageX + xOffset;\n    let top = meta.pageY + yOffset;\n    const tooltipRect = element.getBoundingClientRect();\n    let maxLeft = window.innerWidth - tooltipRect.width;\n    if (meta.container) {\n      const containerRect = meta.container.getBoundingClientRect();\n      maxLeft = containerRect.left + (containerRect.width - tooltipRect.width);\n    }\n    if (left > maxLeft) {\n      left = meta.pageX - element.clientWidth - xOffset;\n    }\n    if (typeof scrollX !== \"undefined\") {\n      left += scrollX;\n    }\n    if (typeof scrollY !== \"undefined\") {\n      top += scrollY;\n    }\n    element.style.left = `${Math.round(left)}px`;\n    element.style.top = `${Math.round(top)}px`;\n    this.toggle(true);\n  }\n  toggle(visible) {\n    this.updateClass(visible);\n  }\n  destroy() {\n    const { parentNode } = this.element;\n    if (parentNode) {\n      parentNode.removeChild(this.element);\n    }\n  }\n};\nvar { extent: extent2 } = _Util22;\nvar { BandScale: BandScale2 } = _Scale2;\nvar SparklineMarker = class {\n  constructor() {\n    this.enabled = true;\n    this.shape = \"circle\";\n    this.size = 0;\n    this.fill = \"rgb(124, 181, 236)\";\n    this.stroke = \"rgb(124, 181, 236)\";\n    this.strokeWidth = 1;\n    this.formatter = void 0;\n  }\n};\nvar SparklineLine = class {\n  constructor() {\n    this.stroke = \"rgb(124, 181, 236)\";\n    this.strokeWidth = 1;\n  }\n};\nvar SparklineCrosshairs = class {\n  constructor() {\n    this.xLine = {\n      enabled: true,\n      stroke: \"rgba(0,0,0, 0.54)\",\n      strokeWidth: 1,\n      lineDash: \"solid\",\n      lineCap: void 0\n    };\n    this.yLine = {\n      enabled: false,\n      stroke: \"rgba(0,0,0, 0.54)\",\n      strokeWidth: 1,\n      lineDash: \"solid\",\n      lineCap: void 0\n    };\n  }\n};\nvar AreaSparkline = class extends Sparkline {\n  constructor() {\n    super();\n    this.fill = \"rgba(124, 181, 236, 0.25)\";\n    this.strokePath = new _Scene32.Path();\n    this.fillPath = new _Scene32.Path();\n    this.xCrosshairLine = new _Scene32.Line();\n    this.yCrosshairLine = new _Scene32.Line();\n    this.areaSparklineGroup = new _Scene32.Group();\n    this.xAxisLine = new _Scene32.Line();\n    this.markers = new _Scene32.Group();\n    this.markerSelection = _Scene32.Selection.select(\n      this.markers,\n      () => this.markerFactory()\n    );\n    this.markerSelectionData = [];\n    this.marker = new SparklineMarker();\n    this.line = new SparklineLine();\n    this.crosshairs = new SparklineCrosshairs();\n    this.rootGroup.append(this.areaSparklineGroup);\n    this.xAxisLine.zIndex = 500;\n    this.fillPath.zIndex = 50;\n    this.strokePath.zIndex = 1e3;\n    this.xCrosshairLine.zIndex = 2e3;\n    this.yCrosshairLine.zIndex = 2e3;\n    this.markers.zIndex = 2500;\n    this.areaSparklineGroup.append([\n      this.fillPath,\n      this.xAxisLine,\n      this.strokePath,\n      this.xCrosshairLine,\n      this.yCrosshairLine,\n      this.markers\n    ]);\n  }\n  markerFactory() {\n    const { shape } = this.marker;\n    const MarkerShape = getMarker(shape);\n    return new MarkerShape();\n  }\n  getNodeData() {\n    return this.markerSelectionData;\n  }\n  update() {\n    const data = this.generateNodeData();\n    if (!data) {\n      return;\n    }\n    const { nodeData, fillData, strokeData } = data;\n    this.markerSelectionData = nodeData;\n    this.updateSelection(nodeData);\n    this.updateNodes();\n    this.updateStroke(strokeData);\n    this.updateFill(fillData);\n  }\n  updateYScaleDomain() {\n    const { yData, yScale } = this;\n    const yMinMax = extent2(yData);\n    let yMin = 0;\n    let yMax = 1;\n    if (yMinMax != null) {\n      yMin = this.min = yMinMax[0];\n      yMax = this.max = yMinMax[1];\n    }\n    yMin = yMin < 0 ? yMin : 0;\n    yMax = yMax < 0 ? 0 : yMax;\n    yScale.domain = [yMin, yMax];\n  }\n  generateNodeData() {\n    const { data, yData, xData, xScale, yScale } = this;\n    if (!data) {\n      return;\n    }\n    const continuous = !(xScale instanceof BandScale2);\n    const offsetX = !continuous ? xScale.bandwidth / 2 : 0;\n    const n = yData.length;\n    const nodeData = [];\n    const fillData = [];\n    const strokeData = [];\n    let firstValidX;\n    let lastValidX;\n    let previousX;\n    let nextX;\n    const yZero = yScale.convert(0);\n    for (let i = 0; i < n; i++) {\n      const yDatum = yData[i];\n      const xDatum = xData[i];\n      const x = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum) + offsetX;\n      const y = yDatum === void 0 ? NaN : yScale.convert(yDatum);\n      if (i + 1 < n) {\n        nextX = xScale.convert(continuous ? xScale.toDomain(xData[i + 1]) : xData[i + 1]) + offsetX;\n      }\n      strokeData.push({\n        seriesDatum: { x: xDatum, y: yDatum },\n        point: { x, y }\n      });\n      if (yDatum === void 0 && previousX !== void 0) {\n        fillData.push({ seriesDatum: void 0, point: { x: previousX, y: yZero } });\n        if (nextX !== void 0) {\n          fillData.push({ seriesDatum: void 0, point: { x: nextX, y: yZero } });\n        }\n      } else if (yDatum !== void 0) {\n        fillData.push({\n          seriesDatum: { x: xDatum, y: yDatum },\n          point: { x, y }\n        });\n        nodeData.push({\n          seriesDatum: { x: xDatum, y: yDatum },\n          point: { x, y }\n        });\n        firstValidX = firstValidX !== void 0 ? firstValidX : x;\n        lastValidX = x;\n      }\n      previousX = x;\n    }\n    fillData.push(\n      { seriesDatum: void 0, point: { x: lastValidX, y: yZero } },\n      { seriesDatum: void 0, point: { x: firstValidX, y: yZero } }\n    );\n    return { nodeData, fillData, strokeData };\n  }\n  updateAxisLine() {\n    const {\n      xScale,\n      yScale,\n      axis: { stroke, strokeWidth: strokeWidth2 },\n      xAxisLine\n    } = this;\n    const yZero = yScale.convert(0);\n    xAxisLine.x1 = xScale.range[0];\n    xAxisLine.x2 = xScale.range[1];\n    xAxisLine.y1 = xAxisLine.y2 = yZero;\n    xAxisLine.stroke = stroke;\n    xAxisLine.strokeWidth = strokeWidth2;\n  }\n  updateSelection(selectionData) {\n    this.markerSelection.update(selectionData);\n  }\n  updateNodes() {\n    const { highlightedDatum, highlightStyle, marker } = this;\n    const {\n      size: highlightSize,\n      fill: highlightFill,\n      stroke: highlightStroke,\n      strokeWidth: highlightStrokeWidth\n    } = highlightStyle;\n    const markerFormatter = marker.formatter;\n    this.markerSelection.each((node, datum, index) => {\n      const { point, seriesDatum } = datum;\n      if (!point) {\n        return;\n      }\n      const highlighted = datum === highlightedDatum;\n      const markerFill = highlighted && highlightFill !== void 0 ? highlightFill : marker.fill;\n      const markerStroke = highlighted && highlightStroke !== void 0 ? highlightStroke : marker.stroke;\n      const markerStrokeWidth = highlighted && highlightStrokeWidth !== void 0 ? highlightStrokeWidth : marker.strokeWidth;\n      const markerSize = highlighted && highlightSize !== void 0 ? highlightSize : marker.size;\n      let markerFormat;\n      if (markerFormatter) {\n        const first = index === 0;\n        const last = index === this.markerSelectionData.length - 1;\n        const min = seriesDatum.y === this.min;\n        const max = seriesDatum.y === this.max;\n        markerFormat = markerFormatter({\n          datum,\n          xValue: seriesDatum.x,\n          yValue: seriesDatum.y,\n          min,\n          max,\n          first,\n          last,\n          fill: markerFill,\n          stroke: markerStroke,\n          strokeWidth: markerStrokeWidth,\n          size: markerSize,\n          highlighted\n        });\n      }\n      node.size = markerFormat && markerFormat.size != void 0 ? markerFormat.size : markerSize;\n      node.fill = markerFormat && markerFormat.fill != void 0 ? markerFormat.fill : markerFill;\n      node.stroke = markerFormat && markerFormat.stroke != void 0 ? markerFormat.stroke : markerStroke;\n      node.strokeWidth = markerFormat && markerFormat.strokeWidth != void 0 ? markerFormat.strokeWidth : markerStrokeWidth;\n      node.translationX = point.x;\n      node.translationY = point.y;\n      node.visible = markerFormat && markerFormat.enabled != void 0 ? markerFormat.enabled : marker.enabled && node.size > 0;\n    });\n  }\n  updateStroke(strokeData) {\n    const { strokePath, yData, line } = this;\n    const path = strokePath.path;\n    path.clear();\n    if (yData.length < 2) {\n      return;\n    }\n    const n = strokeData.length;\n    let moveTo = true;\n    for (let i = 0; i < n; i++) {\n      const { point, seriesDatum } = strokeData[i];\n      const x = point.x;\n      const y = point.y;\n      if (seriesDatum.y == void 0) {\n        moveTo = true;\n      } else {\n        if (moveTo) {\n          path.moveTo(x, y);\n          moveTo = false;\n        } else {\n          path.lineTo(x, y);\n        }\n      }\n    }\n    strokePath.lineJoin = strokePath.lineCap = \"round\";\n    strokePath.fill = void 0;\n    strokePath.stroke = line.stroke;\n    strokePath.strokeWidth = line.strokeWidth;\n  }\n  updateFill(areaData) {\n    const { fillPath, yData, fill } = this;\n    const path = fillPath.path;\n    const n = areaData.length;\n    path.clear();\n    if (yData.length < 2) {\n      return;\n    }\n    for (let i = 0; i < n; i++) {\n      const { point } = areaData[i];\n      const x = point.x;\n      const y = point.y;\n      if (i > 0) {\n        path.lineTo(x, y);\n      } else {\n        path.moveTo(x, y);\n      }\n    }\n    path.closePath();\n    fillPath.lineJoin = \"round\";\n    fillPath.stroke = void 0;\n    fillPath.fill = fill;\n  }\n  updateXCrosshairLine() {\n    const {\n      yScale,\n      xCrosshairLine,\n      highlightedDatum,\n      crosshairs: { xLine }\n    } = this;\n    if (!xLine.enabled || highlightedDatum == void 0) {\n      xCrosshairLine.strokeWidth = 0;\n      return;\n    }\n    xCrosshairLine.y1 = yScale.range[0];\n    xCrosshairLine.y2 = yScale.range[1];\n    xCrosshairLine.x1 = xCrosshairLine.x2 = highlightedDatum.point.x;\n    xCrosshairLine.stroke = xLine.stroke;\n    xCrosshairLine.strokeWidth = xLine.strokeWidth ?? 1;\n    xCrosshairLine.lineCap = xLine.lineCap === \"round\" || xLine.lineCap === \"square\" ? xLine.lineCap : void 0;\n    const { lineDash: lineDash2 } = xLine;\n    xCrosshairLine.lineDash = Array.isArray(lineDash2) ? lineDash2 : getLineDash(xCrosshairLine.lineCap, xLine.lineDash);\n  }\n  updateYCrosshairLine() {\n    const {\n      xScale,\n      yCrosshairLine,\n      highlightedDatum,\n      crosshairs: { yLine }\n    } = this;\n    if (!yLine.enabled || highlightedDatum == void 0) {\n      yCrosshairLine.strokeWidth = 0;\n      return;\n    }\n    yCrosshairLine.x1 = xScale.range[0];\n    yCrosshairLine.x2 = xScale.range[1];\n    yCrosshairLine.y1 = yCrosshairLine.y2 = highlightedDatum.point.y;\n    yCrosshairLine.stroke = yLine.stroke;\n    yCrosshairLine.strokeWidth = yLine.strokeWidth ?? 1;\n    yCrosshairLine.lineCap = yLine.lineCap === \"round\" || yLine.lineCap === \"square\" ? yLine.lineCap : void 0;\n    const { lineDash: lineDash2 } = yLine;\n    yCrosshairLine.lineDash = Array.isArray(lineDash2) ? lineDash2 : getLineDash(yCrosshairLine.lineCap, yLine.lineDash);\n  }\n  getTooltipHtml(datum) {\n    const { dataType } = this;\n    const { seriesDatum } = datum;\n    const yValue = seriesDatum.y;\n    const xValue = seriesDatum.x;\n    const content = this.formatNumericDatum(yValue);\n    const title = dataType === \"array\" || dataType === \"object\" ? this.formatDatum(xValue) : void 0;\n    const defaults = {\n      content,\n      title\n    };\n    const tooltipRenderer = this.processedOptions?.tooltip?.renderer;\n    if (tooltipRenderer) {\n      return toTooltipHtml(\n        tooltipRenderer({\n          context: this.context,\n          datum: seriesDatum,\n          yValue,\n          xValue\n        }),\n        defaults\n      );\n    }\n    return toTooltipHtml(defaults);\n  }\n};\nvar Label = class {\n  constructor() {\n    this.enabled = true;\n    this.fontSize = 8;\n    this.fontFamily = \"Verdana, sans-serif\";\n    this.fontStyle = void 0;\n    this.fontWeight = void 0;\n    this.color = \"rgba(70, 70, 70, 1)\";\n  }\n};\nvar { extent: extent3 } = _Util32;\nvar BarColumnLabel = class extends Label {\n  constructor() {\n    super(...arguments);\n    this.formatter = void 0;\n    this.placement = \"insideEnd\";\n  }\n};\nvar BarColumnSparkline = class extends Sparkline {\n  constructor() {\n    super();\n    this.fill = \"rgb(124, 181, 236)\";\n    this.stroke = \"silver\";\n    this.strokeWidth = 0;\n    this.paddingInner = 0.1;\n    this.paddingOuter = 0.2;\n    this.valueAxisDomain = void 0;\n    this.formatter = void 0;\n    this.axisLine = new _Scene42.Line();\n    this.bandWidth = 0;\n    this.sparklineGroup = new _Scene42.Group();\n    this.rectGroup = new _Scene42.Group();\n    this.labelGroup = new _Scene42.Group();\n    this.rectSelection = _Scene42.Selection.select(\n      this.rectGroup,\n      _Scene42.Rect\n    );\n    this.labelSelection = _Scene42.Selection.select(\n      this.labelGroup,\n      _Scene42.Text\n    );\n    this.nodeSelectionData = [];\n    this.label = new BarColumnLabel();\n    this.rootGroup.append(this.sparklineGroup);\n    this.rectGroup.zIndex = 50;\n    this.axisLine.zIndex = 500;\n    this.labelGroup.zIndex = 1500;\n    this.sparklineGroup.append([this.rectGroup, this.axisLine, this.labelGroup]);\n    this.axisLine.lineCap = \"round\";\n    this.label.enabled = false;\n  }\n  getNodeData() {\n    return this.nodeSelectionData;\n  }\n  update() {\n    this.updateSelections();\n    this.updateNodes();\n  }\n  updateSelections() {\n    const nodeData = this.generateNodeData();\n    if (!nodeData) {\n      return;\n    }\n    this.nodeSelectionData = nodeData;\n    this.updateRectSelection(nodeData);\n    this.updateLabelSelection(nodeData);\n  }\n  updateNodes() {\n    this.updateRectNodes();\n    this.updateLabelNodes();\n  }\n  calculateStep(range) {\n    const { xScale, paddingInner, paddingOuter, smallestInterval } = this;\n    const domainLength = xScale.domain[1] - xScale.domain[0];\n    const intervals = domainLength / (smallestInterval?.x ?? 1) + 1;\n    const maxBands = 50;\n    const bands = Math.min(intervals, maxBands);\n    const gaps = bands - 1;\n    const step = range / Math.max(1, 2 * paddingOuter + gaps * paddingInner + bands);\n    return step;\n  }\n  updateYScaleDomain() {\n    const { yScale, yData, valueAxisDomain } = this;\n    const yMinMax = extent3(yData);\n    let yMin = 0;\n    let yMax = 1;\n    if (yMinMax != null) {\n      yMin = this.min = yMinMax[0];\n      yMax = this.max = yMinMax[1];\n    }\n    yMin = yMin < 0 ? yMin : 0;\n    yMax = yMax < 0 ? 0 : yMax;\n    if (valueAxisDomain) {\n      if (valueAxisDomain[1] < yMax) {\n        valueAxisDomain[1] = yMax;\n      }\n      if (valueAxisDomain[0] > yMin) {\n        valueAxisDomain[0] = yMin;\n      }\n    }\n    yScale.domain = valueAxisDomain ? valueAxisDomain : [yMin, yMax];\n  }\n  updateRectSelection(selectionData) {\n    this.rectSelection.update(selectionData);\n  }\n  updateRectNodes() {\n    const { highlightedDatum, formatter: nodeFormatter, fill, stroke, strokeWidth: strokeWidth2 } = this;\n    const { fill: highlightFill, stroke: highlightStroke, strokeWidth: highlightStrokeWidth } = this.highlightStyle;\n    this.rectSelection.each((node, datum, index) => {\n      const highlighted = datum === highlightedDatum;\n      const nodeFill = highlighted && highlightFill !== void 0 ? highlightFill : fill;\n      const nodeStroke = highlighted && highlightStroke !== void 0 ? highlightStroke : stroke;\n      const nodeStrokeWidth = highlighted && highlightStrokeWidth !== void 0 ? highlightStrokeWidth : strokeWidth2;\n      let nodeFormat;\n      const { x, y, width, height, seriesDatum } = datum;\n      if (nodeFormatter) {\n        const first = index === 0;\n        const last = index === this.nodeSelectionData.length - 1;\n        const min = seriesDatum.y === this.min;\n        const max = seriesDatum.y === this.max;\n        nodeFormat = nodeFormatter({\n          datum,\n          xValue: seriesDatum.x,\n          yValue: seriesDatum.y,\n          width,\n          height,\n          min,\n          max,\n          first,\n          last,\n          fill: nodeFill,\n          stroke: nodeStroke,\n          strokeWidth: nodeStrokeWidth,\n          highlighted\n        });\n      }\n      node.fill = nodeFormat && nodeFormat.fill || nodeFill;\n      node.stroke = nodeFormat && nodeFormat.stroke || nodeStroke;\n      node.strokeWidth = nodeFormat && nodeFormat.strokeWidth || nodeStrokeWidth;\n      node.x = x;\n      node.y = y;\n      node.width = width;\n      node.height = height;\n      node.visible = node.height > 0;\n    });\n  }\n  updateLabelSelection(selectionData) {\n    this.labelSelection.update(selectionData, (text) => {\n      text.tag = 1;\n      text.pointerEvents = _Scene42.PointerEvents.None;\n    });\n  }\n  updateLabelNodes() {\n    const {\n      label: { enabled: labelEnabled, fontStyle, fontWeight, fontSize, fontFamily, color }\n    } = this;\n    this.labelSelection.each((text, datum) => {\n      const label = datum.label;\n      if (label && labelEnabled) {\n        text.fontStyle = fontStyle;\n        text.fontWeight = fontWeight;\n        text.fontSize = fontSize;\n        text.fontFamily = fontFamily;\n        text.textAlign = label.textAlign;\n        text.textBaseline = label.textBaseline;\n        text.text = label.text;\n        text.x = label.x;\n        text.y = label.y;\n        text.fill = color;\n        text.visible = true;\n      } else {\n        text.visible = false;\n      }\n    });\n  }\n  getTooltipHtml(datum) {\n    const { dataType } = this;\n    const { seriesDatum } = datum;\n    const yValue = seriesDatum.y;\n    const xValue = seriesDatum.x;\n    const content = this.formatNumericDatum(yValue);\n    const title = dataType === \"array\" || dataType === \"object\" ? this.formatDatum(xValue) : void 0;\n    const defaults = {\n      content,\n      title\n    };\n    const tooltipRenderer = this.processedOptions?.tooltip?.renderer;\n    if (tooltipRenderer) {\n      return toTooltipHtml(\n        tooltipRenderer({\n          context: this.context,\n          datum: seriesDatum,\n          yValue,\n          xValue\n        }),\n        defaults\n      );\n    }\n    return toTooltipHtml(defaults);\n  }\n  formatLabelValue(value) {\n    return value % 1 !== 0 ? value.toFixed(1) : value.toFixed(0);\n  }\n};\nvar { isNumber: isNumber2 } = _Util42;\nvar { BandScale: BandScale3 } = _Scale3;\nvar BarSparkline = class extends BarColumnSparkline {\n  updateYScaleRange() {\n    const { seriesRect, yScale } = this;\n    yScale.range = [0, seriesRect.width];\n  }\n  updateXScaleRange() {\n    const { xScale, seriesRect, paddingOuter, paddingInner } = this;\n    if (xScale instanceof BandScale3) {\n      xScale.range = [0, seriesRect.height];\n      xScale.paddingInner = paddingInner;\n      xScale.paddingOuter = paddingOuter;\n    } else {\n      const step = this.calculateStep(seriesRect.height);\n      const padding = step * paddingOuter;\n      this.bandWidth = step * (1 - paddingInner);\n      xScale.range = [padding, seriesRect.height - padding - this.bandWidth];\n    }\n  }\n  updateAxisLine() {\n    const {\n      yScale,\n      axis: { stroke, strokeWidth: strokeWidth2 },\n      axisLine,\n      seriesRect\n    } = this;\n    const yZero = yScale.convert(0);\n    axisLine.x1 = axisLine.x2 = yZero;\n    axisLine.y1 = 0;\n    axisLine.y2 = seriesRect.height;\n    axisLine.stroke = stroke;\n    axisLine.strokeWidth = strokeWidth2 + (strokeWidth2 % 2 === 1 ? 1 : 0);\n  }\n  generateNodeData() {\n    const { data, yData, xData, xScale, yScale, fill, stroke, strokeWidth: strokeWidth2, label } = this;\n    if (!data) {\n      return;\n    }\n    const {\n      fontStyle: labelFontStyle,\n      fontWeight: labelFontWeight,\n      fontSize: labelFontSize,\n      fontFamily: labelFontFamily,\n      color: labelColor,\n      formatter: labelFormatter,\n      placement: labelPlacement\n    } = label;\n    const nodeData = [];\n    const yZero = yScale.convert(0);\n    const continuous = !(xScale instanceof BandScale3);\n    for (let i = 0, n = yData.length; i < n; i++) {\n      let yDatum = yData[i];\n      const xDatum = xData[i];\n      const invalidDatum = yDatum === void 0;\n      if (invalidDatum) {\n        yDatum = 0;\n      }\n      const y = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum);\n      const x = Math.min(yDatum === void 0 ? NaN : yScale.convert(yDatum), yZero);\n      const bottom = Math.max(yDatum === void 0 ? NaN : yScale.convert(yDatum), yZero);\n      const height = !continuous ? xScale.bandwidth : this.bandWidth;\n      const width = bottom - x;\n      const midPoint = {\n        x: yZero,\n        y\n      };\n      let labelText;\n      if (labelFormatter) {\n        labelText = labelFormatter({ value: yDatum });\n      } else {\n        labelText = yDatum !== void 0 && isNumber2(yDatum) ? this.formatLabelValue(yDatum) : \"\";\n      }\n      const labelY = y + height / 2;\n      let labelX;\n      const labelTextBaseline = \"middle\";\n      let labelTextAlign;\n      const isPositiveY = yDatum !== void 0 && yDatum >= 0;\n      const labelPadding = 4;\n      if (labelPlacement === \"center\") {\n        labelX = x + width / 2;\n        labelTextAlign = \"center\";\n      } else if (labelPlacement === \"outsideEnd\") {\n        labelX = x + (isPositiveY ? width + labelPadding : -labelPadding);\n        labelTextAlign = isPositiveY ? \"start\" : \"end\";\n      } else if (labelPlacement === \"insideEnd\") {\n        labelX = x + (isPositiveY ? width - labelPadding : labelPadding);\n        labelTextAlign = isPositiveY ? \"end\" : \"start\";\n        const textSize = _ModuleSupport5.CachedTextMeasurerPool.measureText(labelText, {\n          font: labelFontFamily\n        });\n        const textWidth = textSize.width || 20;\n        const positiveBoundary = yZero + textWidth;\n        const negativeBoundary = yZero - textWidth;\n        const exceedsBoundaries = isPositiveY && labelX < positiveBoundary || !isPositiveY && labelX > negativeBoundary;\n        if (exceedsBoundaries) {\n          labelX = yZero + labelPadding * (isPositiveY ? 1 : -1);\n          labelTextAlign = isPositiveY ? \"start\" : \"end\";\n        }\n      } else {\n        labelX = yZero + labelPadding * (isPositiveY ? 1 : -1);\n        labelTextAlign = isPositiveY ? \"start\" : \"end\";\n      }\n      nodeData.push({\n        x,\n        y,\n        width,\n        height,\n        fill,\n        stroke,\n        strokeWidth: strokeWidth2,\n        seriesDatum: { x: xDatum, y: invalidDatum ? void 0 : yDatum },\n        point: midPoint,\n        label: {\n          x: labelX,\n          y: labelY,\n          text: labelText,\n          fontStyle: labelFontStyle,\n          fontWeight: labelFontWeight,\n          fontSize: labelFontSize,\n          fontFamily: labelFontFamily,\n          textAlign: labelTextAlign,\n          textBaseline: labelTextBaseline,\n          fill: labelColor\n        }\n      });\n    }\n    return nodeData;\n  }\n  getDistance(p1, p2) {\n    return Math.abs(p1.y - p2.y);\n  }\n};\nvar { isNumber: isNumber3 } = _Util52;\nvar { BandScale: BandScale4 } = _Scale4;\nvar ColumnSparkline = class extends BarColumnSparkline {\n  updateYScaleRange() {\n    const { seriesRect, yScale } = this;\n    yScale.range = [seriesRect.height, 0];\n  }\n  updateXScaleRange() {\n    const { xScale, seriesRect, paddingOuter, paddingInner } = this;\n    if (xScale instanceof BandScale4) {\n      xScale.range = [0, seriesRect.width];\n      xScale.paddingInner = paddingInner;\n      xScale.paddingOuter = paddingOuter;\n    } else {\n      const step = this.calculateStep(seriesRect.width);\n      const padding = step * paddingOuter;\n      this.bandWidth = step * (1 - paddingInner);\n      xScale.range = [padding, seriesRect.width - padding - this.bandWidth];\n    }\n  }\n  updateAxisLine() {\n    const {\n      yScale,\n      axis: { stroke, strokeWidth: strokeWidth2 },\n      axisLine,\n      seriesRect\n    } = this;\n    const yZero = yScale.convert(0);\n    axisLine.x1 = 0;\n    axisLine.x2 = seriesRect.width;\n    axisLine.y1 = axisLine.y2 = yZero;\n    axisLine.stroke = stroke;\n    axisLine.strokeWidth = strokeWidth2 + (strokeWidth2 % 2 === 1 ? 1 : 0);\n  }\n  generateNodeData() {\n    const { data, yData, xData, xScale, yScale, fill, stroke, strokeWidth: strokeWidth2, label } = this;\n    if (!data) {\n      return;\n    }\n    const {\n      fontStyle: labelFontStyle,\n      fontWeight: labelFontWeight,\n      fontSize: labelFontSize,\n      fontFamily: labelFontFamily,\n      color: labelColor,\n      formatter: labelFormatter,\n      placement: labelPlacement\n    } = label;\n    const nodeData = [];\n    const yZero = yScale.convert(0);\n    const continuous = !(xScale instanceof BandScale4);\n    for (let i = 0, n = yData.length; i < n; i++) {\n      let yDatum = yData[i];\n      const xDatum = xData[i];\n      const invalidDatum = yDatum === void 0;\n      if (invalidDatum) {\n        yDatum = 0;\n      }\n      const y = Math.min(yDatum === void 0 ? NaN : yScale.convert(yDatum), yZero);\n      const x = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum);\n      const bottom = Math.max(yDatum === void 0 ? NaN : yScale.convert(yDatum), yZero);\n      const width = !continuous ? xScale.bandwidth : this.bandWidth;\n      const height = bottom - y;\n      const midPoint = {\n        x: x + width / 2,\n        y: yZero\n      };\n      let labelText;\n      if (labelFormatter) {\n        labelText = labelFormatter({ value: yDatum });\n      } else {\n        labelText = yDatum !== void 0 && isNumber3(yDatum) ? this.formatLabelValue(yDatum) : \"\";\n      }\n      const labelX = x + width / 2;\n      let labelY;\n      const labelTextAlign = \"center\";\n      let labelTextBaseline;\n      const isPositiveY = yDatum !== void 0 && yDatum >= 0;\n      const labelPadding = 2;\n      if (labelPlacement === \"center\") {\n        labelY = y + height / 2;\n        labelTextBaseline = \"middle\";\n      } else if (labelPlacement === \"outsideEnd\") {\n        labelY = y + (isPositiveY ? -labelPadding : height + labelPadding);\n        labelTextBaseline = isPositiveY ? \"bottom\" : \"top\";\n      } else if (labelPlacement === \"insideEnd\") {\n        labelY = y + (isPositiveY ? labelPadding : height - labelPadding);\n        labelTextBaseline = isPositiveY ? \"top\" : \"bottom\";\n        const textSize = _ModuleSupport22.CachedTextMeasurerPool.measureText(labelText, {\n          font: labelFontFamily\n        });\n        const textHeight = textSize.height || 10;\n        const positiveBoundary = yZero - textHeight;\n        const negativeBoundary = yZero + textHeight;\n        const exceedsBoundaries = isPositiveY && labelY > positiveBoundary || !isPositiveY && labelY < negativeBoundary;\n        if (exceedsBoundaries) {\n          labelY = yZero + labelPadding * (isPositiveY ? -1 : 1);\n          labelTextBaseline = isPositiveY ? \"bottom\" : \"top\";\n        }\n      } else {\n        labelY = yZero + labelPadding * (isPositiveY ? -1 : 1);\n        labelTextBaseline = isPositiveY ? \"bottom\" : \"top\";\n      }\n      nodeData.push({\n        x,\n        y,\n        width,\n        height,\n        fill,\n        stroke,\n        strokeWidth: strokeWidth2,\n        seriesDatum: { x: xDatum, y: invalidDatum ? void 0 : yDatum },\n        point: midPoint,\n        label: {\n          x: labelX,\n          y: labelY,\n          text: labelText,\n          fontStyle: labelFontStyle,\n          fontWeight: labelFontWeight,\n          fontSize: labelFontSize,\n          fontFamily: labelFontFamily,\n          textAlign: labelTextAlign,\n          textBaseline: labelTextBaseline,\n          fill: labelColor\n        }\n      });\n    }\n    return nodeData;\n  }\n};\nvar { extent: extent4 } = _Util62;\nvar { BandScale: BandScale5 } = _Scale5;\nvar SparklineMarker2 = class {\n  constructor() {\n    this.enabled = true;\n    this.shape = \"circle\";\n    this.size = 0;\n    this.fill = \"rgb(124, 181, 236)\";\n    this.stroke = \"rgb(124, 181, 236)\";\n    this.strokeWidth = 1;\n    this.formatter = void 0;\n  }\n};\nvar SparklineLine2 = class {\n  constructor() {\n    this.stroke = \"rgb(124, 181, 236)\";\n    this.strokeWidth = 1;\n  }\n};\nvar SparklineCrosshairs2 = class {\n  constructor() {\n    this.xLine = {\n      enabled: true,\n      stroke: \"rgba(0,0,0, 0.54)\",\n      strokeWidth: 1,\n      lineDash: \"solid\",\n      lineCap: void 0\n    };\n    this.yLine = {\n      enabled: false,\n      stroke: \"rgba(0,0,0, 0.54)\",\n      strokeWidth: 1,\n      lineDash: \"solid\",\n      lineCap: void 0\n    };\n  }\n};\nvar LineSparkline = class extends Sparkline {\n  constructor() {\n    super();\n    this.linePath = new _Scene52.Path();\n    this.xCrosshairLine = new _Scene52.Line();\n    this.yCrosshairLine = new _Scene52.Line();\n    this.lineSparklineGroup = new _Scene52.Group();\n    this.markers = new _Scene52.Group();\n    this.markerSelection = _Scene52.Selection.select(\n      this.markers,\n      () => this.markerFactory()\n    );\n    this.markerSelectionData = [];\n    this.marker = new SparklineMarker2();\n    this.line = new SparklineLine2();\n    this.crosshairs = new SparklineCrosshairs2();\n    this.rootGroup.append(this.lineSparklineGroup);\n    this.linePath.zIndex = 1e3;\n    this.xCrosshairLine.zIndex = 2e3;\n    this.yCrosshairLine.zIndex = 2e3;\n    this.markers.zIndex = 2500;\n    this.lineSparklineGroup.append([this.linePath, this.xCrosshairLine, this.yCrosshairLine, this.markers]);\n  }\n  getNodeData() {\n    return this.markerSelectionData;\n  }\n  markerFactory() {\n    const { shape } = this.marker;\n    const MarkerShape = getMarker(shape);\n    return new MarkerShape();\n  }\n  /**\n   * If marker shape is changed, this method should be called to remove the previous marker nodes selection.\n   */\n  onMarkerShapeChange() {\n    this.markerSelection = this.markerSelection.clear();\n    this.scheduleLayout();\n  }\n  update() {\n    const nodeData = this.generateNodeData();\n    if (!nodeData) {\n      return;\n    }\n    this.markerSelectionData = nodeData;\n    this.updateSelection(nodeData);\n    this.updateNodes();\n    this.updateLine();\n  }\n  updateYScaleDomain() {\n    const { yData, yScale } = this;\n    const yMinMax = extent4(yData);\n    let yMin = 0;\n    let yMax = 1;\n    if (yMinMax != null) {\n      yMin = this.min = yMinMax[0];\n      yMax = this.max = yMinMax[1];\n    }\n    if (yMin === yMax) {\n      const padding = Math.abs(yMin * 0.01);\n      yMin -= padding;\n      yMax += padding;\n    }\n    yScale.domain = [yMin, yMax];\n  }\n  generateNodeData() {\n    const { data, yData, xData, xScale, yScale } = this;\n    if (!data) {\n      return;\n    }\n    const continuous = !(xScale instanceof BandScale5);\n    const offsetX = !continuous ? xScale.bandwidth / 2 : 0;\n    const nodeData = [];\n    for (let i = 0; i < yData.length; i++) {\n      const yDatum = yData[i];\n      const xDatum = xData[i];\n      if (yDatum == void 0) {\n        continue;\n      }\n      const x = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum) + offsetX;\n      const y = yDatum === void 0 ? NaN : yScale.convert(yDatum);\n      nodeData.push({\n        seriesDatum: { x: xDatum, y: yDatum },\n        point: { x, y }\n      });\n    }\n    return nodeData;\n  }\n  updateSelection(selectionData) {\n    this.markerSelection.update(selectionData);\n  }\n  updateNodes() {\n    const { highlightedDatum, highlightStyle, marker } = this;\n    const {\n      size: highlightSize,\n      fill: highlightFill,\n      stroke: highlightStroke,\n      strokeWidth: highlightStrokeWidth\n    } = highlightStyle;\n    const markerFormatter = marker.formatter;\n    this.markerSelection.each((node, datum, index) => {\n      const highlighted = datum === highlightedDatum;\n      const markerFill = highlighted && highlightFill !== void 0 ? highlightFill : marker.fill;\n      const markerStroke = highlighted && highlightStroke !== void 0 ? highlightStroke : marker.stroke;\n      const markerStrokeWidth = highlighted && highlightStrokeWidth !== void 0 ? highlightStrokeWidth : marker.strokeWidth;\n      const markerSize = highlighted && highlightSize !== void 0 ? highlightSize : marker.size;\n      let markerFormat;\n      const { seriesDatum, point } = datum;\n      if (markerFormatter) {\n        const first = index === 0;\n        const last = index === this.markerSelectionData.length - 1;\n        const min = seriesDatum.y === this.min;\n        const max = seriesDatum.y === this.max;\n        markerFormat = markerFormatter({\n          datum,\n          xValue: seriesDatum.x,\n          yValue: seriesDatum.y,\n          min,\n          max,\n          first,\n          last,\n          fill: markerFill,\n          stroke: markerStroke,\n          strokeWidth: markerStrokeWidth,\n          size: markerSize,\n          highlighted\n        });\n      }\n      node.size = markerFormat && markerFormat.size != void 0 ? markerFormat.size : markerSize;\n      node.fill = markerFormat && markerFormat.fill != void 0 ? markerFormat.fill : markerFill;\n      node.stroke = markerFormat && markerFormat.stroke != void 0 ? markerFormat.stroke : markerStroke;\n      node.strokeWidth = markerFormat && markerFormat.strokeWidth != void 0 ? markerFormat.strokeWidth : markerStrokeWidth;\n      node.translationX = point.x;\n      node.translationY = point.y;\n      node.visible = markerFormat && markerFormat.enabled != void 0 ? markerFormat.enabled : marker.enabled && node.size > 0;\n    });\n  }\n  updateLine() {\n    const { linePath, yData, xData, xScale, yScale, line } = this;\n    const path = linePath.path;\n    path.clear();\n    if (yData.length < 2) {\n      return;\n    }\n    const continuous = !(xScale instanceof BandScale5);\n    const n = yData.length;\n    const offsetX = !continuous ? xScale.bandwidth / 2 : 0;\n    let moveTo = true;\n    for (let i = 0; i < n; i++) {\n      const xDatum = xData[i];\n      const yDatum = yData[i];\n      const x = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum) + offsetX;\n      const y = yDatum === void 0 ? NaN : yScale.convert(yDatum);\n      if (yDatum == void 0) {\n        moveTo = true;\n      } else {\n        if (moveTo) {\n          path.moveTo(x, y);\n          moveTo = false;\n        } else {\n          path.lineTo(x, y);\n        }\n      }\n    }\n    linePath.fill = void 0;\n    linePath.stroke = line.stroke;\n    linePath.strokeWidth = line.strokeWidth;\n  }\n  updateXCrosshairLine() {\n    const {\n      yScale,\n      xCrosshairLine,\n      highlightedDatum,\n      crosshairs: { xLine }\n    } = this;\n    if (!xLine.enabled || highlightedDatum == void 0) {\n      xCrosshairLine.strokeWidth = 0;\n      return;\n    }\n    xCrosshairLine.y1 = yScale.range[0];\n    xCrosshairLine.y2 = yScale.range[1];\n    xCrosshairLine.x1 = xCrosshairLine.x2 = highlightedDatum.point.x;\n    xCrosshairLine.stroke = xLine.stroke;\n    xCrosshairLine.strokeWidth = xLine.strokeWidth ?? 1;\n    xCrosshairLine.lineCap = xLine.lineCap === \"round\" || xLine.lineCap === \"square\" ? xLine.lineCap : void 0;\n    const { lineDash: lineDash2 } = xLine;\n    xCrosshairLine.lineDash = Array.isArray(lineDash2) ? lineDash2 : getLineDash(xCrosshairLine.lineCap, xLine.lineDash);\n  }\n  updateYCrosshairLine() {\n    const {\n      xScale,\n      yCrosshairLine,\n      highlightedDatum,\n      crosshairs: { yLine }\n    } = this;\n    if (!yLine.enabled || highlightedDatum == void 0) {\n      yCrosshairLine.strokeWidth = 0;\n      return;\n    }\n    yCrosshairLine.x1 = xScale.range[0];\n    yCrosshairLine.x2 = xScale.range[1];\n    yCrosshairLine.y1 = yCrosshairLine.y2 = highlightedDatum.point.y;\n    yCrosshairLine.stroke = yLine.stroke;\n    yCrosshairLine.strokeWidth = yLine.strokeWidth ?? 1;\n    yCrosshairLine.lineCap = yLine.lineCap === \"round\" || yLine.lineCap === \"square\" ? yLine.lineCap : void 0;\n    const { lineDash: lineDash2 } = yLine;\n    yCrosshairLine.lineDash = Array.isArray(lineDash2) ? lineDash2 : getLineDash(yCrosshairLine.lineCap, yLine.lineDash);\n  }\n  getTooltipHtml(datum) {\n    const { dataType } = this;\n    const { seriesDatum } = datum;\n    const yValue = seriesDatum.y;\n    const xValue = seriesDatum.x;\n    const content = this.formatNumericDatum(yValue);\n    const title = dataType === \"array\" || dataType === \"object\" ? this.formatDatum(xValue) : void 0;\n    const defaults = {\n      content,\n      title\n    };\n    const tooltipRenderer = this.processedOptions?.tooltip?.renderer;\n    if (tooltipRenderer) {\n      return toTooltipHtml(\n        tooltipRenderer({\n          context: this.context,\n          datum: seriesDatum,\n          yValue,\n          xValue\n        }),\n        defaults\n      );\n    }\n    return toTooltipHtml(defaults);\n  }\n};\nvar { isNumber: isNumber4 } = _Util7;\nvar AgSparkline = class {\n  static create(options, tooltip) {\n    options = _Util7.deepClone(options);\n    const sparkline = getSparklineInstance(options.type);\n    if (tooltip) {\n      sparkline.tooltip = tooltip;\n    }\n    initSparkline(sparkline, options);\n    initSparklineByType(sparkline, options);\n    if (options.data) {\n      sparkline.data = options.data;\n    }\n    sparkline.processedOptions = options;\n    return sparkline;\n  }\n};\nfunction getSparklineInstance(type = \"line\") {\n  switch (type) {\n    case \"column\":\n      return new ColumnSparkline();\n    case \"bar\":\n      return new BarSparkline();\n    case \"area\":\n      return new AreaSparkline();\n    case \"line\":\n    default:\n      return new LineSparkline();\n  }\n}\nfunction initSparklineByType(sparkline, options) {\n  switch (options.type) {\n    case \"bar\":\n      initBarColumnSparkline(sparkline, options);\n      break;\n    case \"column\":\n      initBarColumnSparkline(sparkline, options);\n      break;\n    case \"area\":\n      initAreaSparkline(sparkline, options);\n      break;\n    case \"line\":\n    default:\n      initLineSparkline(sparkline, options);\n      break;\n  }\n}\nfunction initSparkline(sparkline, options) {\n  setValueIfPropertyExists(sparkline, \"context\", options.context, options);\n  setValueIfPropertyExists(sparkline, \"width\", options.width, options);\n  setValueIfPropertyExists(sparkline, \"height\", options.height, options);\n  setValueIfPropertyExists(sparkline, \"container\", options.container, options);\n  setValueIfPropertyExists(sparkline, \"xKey\", options.xKey, options);\n  setValueIfPropertyExists(sparkline, \"yKey\", options.yKey, options);\n  if (options.padding) {\n    initPaddingOptions(sparkline.padding, options.padding);\n  }\n  if (options.axis) {\n    initAxisOptions(sparkline.axis, options.axis);\n  }\n  if (options.highlightStyle) {\n    initHighlightStyleOptions(sparkline.highlightStyle, options.highlightStyle);\n  }\n}\nfunction initLineSparkline(sparkline, options) {\n  if (options.marker) {\n    initMarkerOptions(sparkline.marker, options.marker);\n  }\n  if (options.line) {\n    initLineOptions(sparkline.line, options.line);\n  }\n  if (options.crosshairs) {\n    initCrosshairsOptions(sparkline.crosshairs, options.crosshairs);\n  }\n}\nfunction initAreaSparkline(sparkline, options) {\n  setValueIfPropertyExists(sparkline, \"fill\", options.fill, options);\n  if (options.marker) {\n    initMarkerOptions(sparkline.marker, options.marker);\n  }\n  if (options.line) {\n    initLineOptions(sparkline.line, options.line);\n  }\n  if (options.crosshairs) {\n    initCrosshairsOptions(sparkline.crosshairs, options.crosshairs);\n  }\n}\nfunction initBarColumnSparkline(sparkline, options) {\n  setValueIfPropertyExists(sparkline, \"valueAxisDomain\", options.valueAxisDomain, options);\n  setValueIfPropertyExists(sparkline, \"fill\", options.fill, options);\n  setValueIfPropertyExists(sparkline, \"stroke\", options.stroke, options);\n  setValueIfPropertyExists(sparkline, \"strokeWidth\", options.strokeWidth, options);\n  setValueIfPropertyExists(sparkline, \"paddingInner\", options.paddingInner, options);\n  setValueIfPropertyExists(sparkline, \"paddingOuter\", options.paddingOuter, options);\n  setValueIfPropertyExists(sparkline, \"formatter\", options.formatter, options);\n  if (options.label) {\n    initLabelOptions(sparkline.label, options.label);\n  }\n}\nfunction initPaddingOptions(target, options) {\n  setValueIfPropertyExists(target, \"top\", options.top, options);\n  setValueIfPropertyExists(target, \"right\", options.right, options);\n  setValueIfPropertyExists(target, \"bottom\", options.bottom, options);\n  setValueIfPropertyExists(target, \"left\", options.left, options);\n}\nfunction initMarkerOptions(target, options) {\n  setValueIfPropertyExists(target, \"enabled\", options.enabled, options);\n  setValueIfPropertyExists(target, \"size\", options.size, options);\n  setValueIfPropertyExists(target, \"shape\", options.shape, options);\n  setValueIfPropertyExists(target, \"fill\", options.fill, options);\n  setValueIfPropertyExists(target, \"stroke\", options.stroke, options);\n  setValueIfPropertyExists(target, \"strokeWidth\", options.strokeWidth, options);\n  setValueIfPropertyExists(target, \"formatter\", options.formatter, options);\n}\nfunction initLabelOptions(target, options) {\n  setValueIfPropertyExists(target, \"enabled\", options.enabled, options);\n  setValueIfPropertyExists(target, \"fontStyle\", options.fontStyle, options);\n  setValueIfPropertyExists(target, \"fontWeight\", options.fontWeight, options);\n  setValueIfPropertyExists(target, \"fontSize\", options.fontSize, options);\n  setValueIfPropertyExists(target, \"fontFamily\", options.fontFamily, options);\n  setValueIfPropertyExists(target, \"textAlign\", options.textAlign, options);\n  setValueIfPropertyExists(target, \"textBaseline\", options.textBaseline, options);\n  setValueIfPropertyExists(target, \"color\", options.color, options);\n  setValueIfPropertyExists(target, \"formatter\", options.formatter, options);\n  setValueIfPropertyExists(target, \"placement\", options.placement, options);\n}\nfunction initLineOptions(target, options) {\n  setValueIfPropertyExists(target, \"stroke\", options.stroke, options);\n  setValueIfPropertyExists(target, \"strokeWidth\", options.strokeWidth, options);\n}\nfunction initAxisOptions(target, options) {\n  setValueIfPropertyExists(target, \"type\", options.type, options);\n  setValueIfPropertyExists(target, \"stroke\", options.stroke, options);\n  setValueIfPropertyExists(target, \"strokeWidth\", options.strokeWidth, options);\n}\nfunction initHighlightStyleOptions(target, options) {\n  setValueIfPropertyExists(target, \"fill\", options.fill, options);\n  setValueIfPropertyExists(target, \"size\", options.size, options);\n  setValueIfPropertyExists(target, \"stroke\", options.stroke, options);\n  setValueIfPropertyExists(target, \"strokeWidth\", options.strokeWidth, options);\n}\nfunction initCrosshairsOptions(target, options) {\n  if (target.xLine && options.xLine) {\n    initCrosshairLineOptions(target.xLine, options.xLine);\n  }\n  if (target.yLine && options.yLine) {\n    initCrosshairLineOptions(target.yLine, options.yLine);\n  }\n}\nfunction initCrosshairLineOptions(target, options) {\n  setValueIfPropertyExists(target, \"enabled\", options.enabled, options);\n  setValueIfPropertyExists(target, \"stroke\", options.stroke, options);\n  setValueIfPropertyExists(target, \"strokeWidth\", options.strokeWidth, options);\n  setValueIfPropertyExists(target, \"lineDash\", options.lineDash, options);\n  setValueIfPropertyExists(target, \"lineCap\", options.lineCap, options);\n}\nvar offsetValidator = (property, value, defaultOffset) => {\n  if (isNumber4(value)) {\n    return true;\n  }\n  _warnOnce213(\n    `${property} must be a number, the value you provided is not a valid number. Using the default of ${defaultOffset}px.`\n  );\n  return false;\n};\nvar validators = {\n  xOffset: offsetValidator,\n  yOffset: offsetValidator\n};\nfunction setValueIfPropertyExists(target, property, value, options) {\n  if (property in options) {\n    if (property in target) {\n      const validator = validators[property];\n      const isValid = validator ? validator(property, value, target[property]) : true;\n      if (isValid && target[property] !== value) {\n        target[property] = value;\n      }\n    } else {\n      _warnOnce213(`Property ${property} does not exist on the target object.`);\n    }\n  }\n}\nvar SparklineCellRenderer = class extends Component59 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-sparkline-wrapper\">\n            <span data-ref=\"eSparkline\"></span>\n        </div>`\n    );\n    this.eSparkline = RefPlaceholder39;\n  }\n  wireBeans(beans) {\n    this.resizeObserverService = beans.resizeObserverService;\n    this.sparklineTooltipSingleton = beans.sparklineTooltipSingleton;\n  }\n  init(params) {\n    let firstTimeIn = true;\n    const updateSparkline = () => {\n      const { clientWidth, clientHeight } = this.getGui();\n      if (clientWidth === 0 || clientHeight === 0) {\n        return;\n      }\n      if (firstTimeIn) {\n        const options = {\n          data: params.value,\n          width: clientWidth,\n          height: clientHeight,\n          context: {\n            data: params.data\n          },\n          ...params.sparklineOptions\n        };\n        this.sparkline = AgSparkline.create(options, this.sparklineTooltipSingleton.getSparklineTooltip());\n        this.eSparkline.appendChild(this.sparkline.canvasElement);\n        firstTimeIn = false;\n      } else {\n        this.sparkline.width = clientWidth;\n        this.sparkline.height = clientHeight;\n      }\n    };\n    const unsubscribeFromResize = this.resizeObserverService.observeResize(this.getGui(), updateSparkline);\n    this.addDestroyFunc(() => unsubscribeFromResize());\n  }\n  refresh(params) {\n    if (this.sparkline) {\n      this.sparkline.data = params.value;\n      this.sparkline.context = {\n        data: params.data\n      };\n      return true;\n    }\n    return false;\n  }\n  destroy() {\n    if (this.sparkline) {\n      this.sparkline.destroy();\n    }\n    super.destroy();\n  }\n};\nvar SparklineTooltipSingleton = class extends BeanStub31 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"sparklineTooltipSingleton\";\n  }\n  postConstruct() {\n    this.tooltip = new SparklineTooltip();\n  }\n  getSparklineTooltip() {\n    return this.tooltip;\n  }\n  destroy() {\n    if (this.tooltip) {\n      this.tooltip.destroy();\n    }\n    super.destroy();\n  }\n};\nvar VERSION17 = \"32.3.9\";\nvar SparklinesModule = _defineModule17({\n  version: VERSION17,\n  moduleName: ModuleNames18.SparklinesModule,\n  beans: [SparklineTooltipSingleton],\n  userComponents: [{ name: \"agSparklineCellRenderer\", classImp: SparklineCellRenderer }],\n  dependantModules: [EnterpriseCoreModule]\n});\n\n// enterprise-modules/status-bar/src/statusBarModule.ts\nimport { ModuleNames as ModuleNames19, _defineModule as _defineModule18 } from \"ag-grid-community\";\n\n// enterprise-modules/status-bar/src/statusBar/providedPanels/aggregationComp.ts\nimport {\n  Component as Component61,\n  RefPlaceholder as RefPlaceholder41,\n  _exists as _exists18,\n  _formatNumberTwoDecimalPlacesAndCommas,\n  _isClientSideRowModel as _isClientSideRowModel6,\n  _isServerSideRowModel as _isServerSideRowModel6,\n  _missing as _missing7,\n  _missingOrEmpty as _missingOrEmpty6,\n  _warnOnce as _warnOnce41\n} from \"ag-grid-community\";\n\n// enterprise-modules/status-bar/src/statusBar/providedPanels/agNameValue.ts\nimport { Component as Component60, RefPlaceholder as RefPlaceholder40 } from \"ag-grid-community\";\nvar AgNameValue = class extends Component60 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-status-name-value\">\n            <span data-ref=\"eLabel\"></span>:&nbsp;\n            <span data-ref=\"eValue\" class=\"ag-status-name-value-value\"></span>\n        </div>`\n    );\n    this.eLabel = RefPlaceholder40;\n    this.eValue = RefPlaceholder40;\n  }\n  setLabel(key, defaultValue) {\n    this.setDisplayed(false);\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    this.eLabel.innerHTML = localeTextFunc(key, defaultValue);\n  }\n  setValue(value) {\n    this.eValue.innerHTML = value;\n  }\n};\nvar AgNameValueSelector = {\n  selector: \"AG-NAME-VALUE\",\n  component: AgNameValue\n};\n\n// enterprise-modules/status-bar/src/statusBar/providedPanels/aggregationComp.ts\nvar AggregationComp = class extends Component61 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-status-panel ag-status-panel-aggregations\">\n            <ag-name-value data-ref=\"avgAggregationComp\"></ag-name-value>\n            <ag-name-value data-ref=\"countAggregationComp\"></ag-name-value>\n            <ag-name-value data-ref=\"minAggregationComp\"></ag-name-value>\n            <ag-name-value data-ref=\"maxAggregationComp\"></ag-name-value>\n            <ag-name-value data-ref=\"sumAggregationComp\"></ag-name-value>\n        </div>`,\n      [AgNameValueSelector]\n    );\n    this.sumAggregationComp = RefPlaceholder41;\n    this.countAggregationComp = RefPlaceholder41;\n    this.minAggregationComp = RefPlaceholder41;\n    this.maxAggregationComp = RefPlaceholder41;\n    this.avgAggregationComp = RefPlaceholder41;\n  }\n  wireBeans(beans) {\n    this.valueService = beans.valueService;\n    this.cellNavigationService = beans.cellNavigationService;\n    this.cellPositionUtils = beans.cellPositionUtils;\n    this.rowPositionUtils = beans.rowPositionUtils;\n    this.rangeService = beans.rangeService;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n  postConstruct() {\n    if (!_isClientSideRowModel6(this.gos) && !_isServerSideRowModel6(this.gos)) {\n      _warnOnce41(`agAggregationComponent should only be used with the client and server side row model.`);\n      return;\n    }\n    this.avgAggregationComp.setLabel(\"avg\", \"Average\");\n    this.countAggregationComp.setLabel(\"count\", \"Count\");\n    this.minAggregationComp.setLabel(\"min\", \"Min\");\n    this.maxAggregationComp.setLabel(\"max\", \"Max\");\n    this.sumAggregationComp.setLabel(\"sum\", \"Sum\");\n    this.addManagedEventListeners({\n      cellSelectionChanged: this.onCellSelectionChanged.bind(this),\n      modelUpdated: this.onCellSelectionChanged.bind(this)\n    });\n  }\n  init(params) {\n    this.refresh(params);\n  }\n  refresh(params) {\n    this.params = params;\n    this.onCellSelectionChanged();\n    return true;\n  }\n  setAggregationComponentValue(aggFuncName, value, visible) {\n    const statusBarValueComponent = this.getAllowedAggregationValueComponent(aggFuncName);\n    if (_exists18(statusBarValueComponent) && statusBarValueComponent) {\n      const localeTextFunc = this.localeService.getLocaleTextFunc();\n      const thousandSeparator = localeTextFunc(\"thousandSeparator\", \",\");\n      const decimalSeparator = localeTextFunc(\"decimalSeparator\", \".\");\n      statusBarValueComponent.setValue(\n        _formatNumberTwoDecimalPlacesAndCommas(value, thousandSeparator, decimalSeparator)\n      );\n      statusBarValueComponent.setDisplayed(visible);\n    } else {\n      this.getAggregationValueComponent(aggFuncName)?.setDisplayed(false);\n    }\n  }\n  getAllowedAggregationValueComponent(aggFuncName) {\n    const { aggFuncs } = this.params;\n    if (!aggFuncs || aggFuncs.includes(aggFuncName)) {\n      return this.getAggregationValueComponent(aggFuncName);\n    }\n    return null;\n  }\n  getAggregationValueComponent(aggFuncName) {\n    const refComponentName = `${aggFuncName}AggregationComp`;\n    return this[refComponentName];\n  }\n  onCellSelectionChanged() {\n    const cellRanges = this.rangeService?.getCellRanges();\n    let sum = 0;\n    let count = 0;\n    let numberCount = 0;\n    let min = null;\n    let max = null;\n    const cellsSoFar = {};\n    if (cellRanges && !_missingOrEmpty6(cellRanges) && this.rangeService) {\n      for (let i = 0; i < cellRanges.length; i++) {\n        const cellRange = cellRanges[i];\n        let currentRow = this.rangeService.getRangeStartRow(cellRange);\n        const lastRow = this.rangeService.getRangeEndRow(cellRange);\n        while (true) {\n          const finishedAllRows = _missing7(currentRow) || !currentRow || this.rowPositionUtils.before(lastRow, currentRow);\n          if (finishedAllRows || !currentRow || !cellRange.columns) {\n            break;\n          }\n          cellRange.columns.forEach((col) => {\n            if (currentRow === null) {\n              return;\n            }\n            const cellId = this.cellPositionUtils.createId({\n              rowPinned: currentRow.rowPinned,\n              column: col,\n              rowIndex: currentRow.rowIndex\n            });\n            if (cellsSoFar[cellId]) {\n              return;\n            }\n            cellsSoFar[cellId] = true;\n            const rowNode = this.rowPositionUtils.getRowNode(currentRow);\n            if (_missing7(rowNode)) {\n              return;\n            }\n            let value = this.valueService.getValue(col, rowNode);\n            if (_missing7(value) || value === \"\") {\n              return;\n            }\n            count++;\n            if (typeof value === \"object\" && \"value\" in value) {\n              value = value.value;\n              if (value === \"\") {\n                return;\n              }\n            }\n            if (typeof value === \"string\") {\n              value = Number(value);\n            }\n            if (typeof value === \"number\" && !isNaN(value)) {\n              sum += value;\n              if (max === null || value > max) {\n                max = value;\n              }\n              if (min === null || value < min) {\n                min = value;\n              }\n              numberCount++;\n            }\n          });\n          currentRow = this.cellNavigationService.getRowBelow(currentRow);\n        }\n      }\n    }\n    const gotResult = count > 1;\n    const gotNumberResult = numberCount > 1;\n    this.setAggregationComponentValue(\"count\", count, gotResult);\n    this.setAggregationComponentValue(\"sum\", sum, gotNumberResult);\n    this.setAggregationComponentValue(\"min\", min, gotNumberResult);\n    this.setAggregationComponentValue(\"max\", max, gotNumberResult);\n    this.setAggregationComponentValue(\"avg\", sum / numberCount, gotNumberResult);\n  }\n};\n\n// enterprise-modules/status-bar/src/statusBar/providedPanels/filteredRowsComp.ts\nimport { _formatNumberCommas, _isClientSideRowModel as _isClientSideRowModel7, _warnOnce as _warnOnce47 } from \"ag-grid-community\";\nvar FilteredRowsComp = class extends AgNameValue {\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.setLabel(\"filteredRows\", \"Filtered\");\n    if (!_isClientSideRowModel7(this.gos)) {\n      _warnOnce47(`agFilteredRowCountComponent should only be used with the client side row model.`);\n      return;\n    }\n    this.addCssClass(\"ag-status-panel\");\n    this.addCssClass(\"ag-status-panel-filtered-row-count\");\n    this.setDisplayed(true);\n    const listener = this.onDataChanged.bind(this);\n    this.addManagedEventListeners({ modelUpdated: listener });\n    listener();\n  }\n  onDataChanged() {\n    const totalRowCountValue = this.getTotalRowCountValue();\n    const filteredRowCountValue = this.getFilteredRowCountValue();\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const thousandSeparator = localeTextFunc(\"thousandSeparator\", \",\");\n    const decimalSeparator = localeTextFunc(\"decimalSeparator\", \".\");\n    this.setValue(_formatNumberCommas(filteredRowCountValue, thousandSeparator, decimalSeparator));\n    this.setDisplayed(totalRowCountValue !== filteredRowCountValue);\n  }\n  getTotalRowCountValue() {\n    let totalRowCount = 0;\n    this.rowModel.forEachNode(() => totalRowCount += 1);\n    return totalRowCount;\n  }\n  getFilteredRowCountValue() {\n    let filteredRowCount = 0;\n    this.rowModel.forEachNodeAfterFilter((node) => {\n      if (!node.group) {\n        filteredRowCount += 1;\n      }\n    });\n    return filteredRowCount;\n  }\n  init() {\n  }\n  refresh() {\n    return true;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n};\n\n// enterprise-modules/status-bar/src/statusBar/providedPanels/selectedRowsComp.ts\nimport { _formatNumberCommas as _formatNumberCommas2, _isClientSideRowModel as _isClientSideRowModel8, _isServerSideRowModel as _isServerSideRowModel7, _warnOnce as _warnOnce48 } from \"ag-grid-community\";\nvar SelectedRowsComp = class extends AgNameValue {\n  wireBeans(beans) {\n    this.selectionService = beans.selectionService;\n  }\n  postConstruct() {\n    if (!_isClientSideRowModel8(this.gos) && !_isServerSideRowModel7(this.gos)) {\n      _warnOnce48(`agSelectedRowCountComponent should only be used with the client and server side row model.`);\n      return;\n    }\n    this.setLabel(\"selectedRows\", \"Selected\");\n    this.addCssClass(\"ag-status-panel\");\n    this.addCssClass(\"ag-status-panel-selected-row-count\");\n    this.onRowSelectionChanged();\n    const eventListener = this.onRowSelectionChanged.bind(this);\n    this.addManagedEventListeners({ modelUpdated: eventListener, selectionChanged: eventListener });\n  }\n  onRowSelectionChanged() {\n    const selectedRowCount = this.selectionService.getSelectionCount();\n    if (selectedRowCount < 0) {\n      this.setValue(\"?\");\n      this.setDisplayed(true);\n      return;\n    }\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const thousandSeparator = localeTextFunc(\"thousandSeparator\", \",\");\n    const decimalSeparator = localeTextFunc(\"decimalSeparator\", \".\");\n    this.setValue(_formatNumberCommas2(selectedRowCount, thousandSeparator, decimalSeparator));\n    this.setDisplayed(selectedRowCount > 0);\n  }\n  init() {\n  }\n  refresh() {\n    return true;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n};\n\n// enterprise-modules/status-bar/src/statusBar/providedPanels/totalAndFilteredRowsComp.ts\nimport { _formatNumberCommas as _formatNumberCommas3, _isClientSideRowModel as _isClientSideRowModel9, _warnOnce as _warnOnce49 } from \"ag-grid-community\";\nvar TotalAndFilteredRowsComp = class extends AgNameValue {\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    if (!_isClientSideRowModel9(this.gos)) {\n      _warnOnce49(`agTotalAndFilteredRowCountComponent should only be used with the client side row model.`);\n      return;\n    }\n    this.setLabel(\"totalAndFilteredRows\", \"Rows\");\n    this.addCssClass(\"ag-status-panel\");\n    this.addCssClass(\"ag-status-panel-total-and-filtered-row-count\");\n    this.setDisplayed(true);\n    this.addManagedEventListeners({ modelUpdated: this.onDataChanged.bind(this) });\n    this.onDataChanged();\n  }\n  onDataChanged() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const thousandSeparator = localeTextFunc(\"thousandSeparator\", \",\");\n    const decimalSeparator = localeTextFunc(\"decimalSeparator\", \".\");\n    const rowCount = _formatNumberCommas3(this.getFilteredRowCountValue(), thousandSeparator, decimalSeparator);\n    const totalRowCount = _formatNumberCommas3(this.getTotalRowCount(), thousandSeparator, decimalSeparator);\n    if (rowCount === totalRowCount) {\n      this.setValue(rowCount);\n    } else {\n      const localeTextFunc2 = this.localeService.getLocaleTextFunc();\n      this.setValue(`${rowCount} ${localeTextFunc2(\"of\", \"of\")} ${totalRowCount}`);\n    }\n  }\n  getFilteredRowCountValue() {\n    let filteredRowCount = 0;\n    this.rowModel.forEachNodeAfterFilter((node) => {\n      if (!node.group) {\n        filteredRowCount++;\n      }\n    });\n    return filteredRowCount;\n  }\n  getTotalRowCount() {\n    let totalRowCount = 0;\n    this.rowModel.forEachNode((node) => {\n      if (!node.group) {\n        totalRowCount++;\n      }\n    });\n    return totalRowCount;\n  }\n  init() {\n  }\n  refresh() {\n    return true;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n};\n\n// enterprise-modules/status-bar/src/statusBar/providedPanels/totalRowsComp.ts\nimport { _formatNumberCommas as _formatNumberCommas4, _isClientSideRowModel as _isClientSideRowModel10, _warnOnce as _warnOnce50 } from \"ag-grid-community\";\nvar TotalRowsComp = class extends AgNameValue {\n  wireBeans(beans) {\n    this.rowModel = beans.rowModel;\n  }\n  postConstruct() {\n    this.setLabel(\"totalRows\", \"Total Rows\");\n    if (!_isClientSideRowModel10(this.gos)) {\n      _warnOnce50(\"agTotalRowCountComponent should only be used with the client side row model.\");\n      return;\n    }\n    this.addCssClass(\"ag-status-panel\");\n    this.addCssClass(\"ag-status-panel-total-row-count\");\n    this.setDisplayed(true);\n    this.addManagedEventListeners({ modelUpdated: this.onDataChanged.bind(this) });\n    this.onDataChanged();\n  }\n  onDataChanged() {\n    const localeTextFunc = this.localeService.getLocaleTextFunc();\n    const thousandSeparator = localeTextFunc(\"thousandSeparator\", \",\");\n    const decimalSeparator = localeTextFunc(\"decimalSeparator\", \".\");\n    this.setValue(_formatNumberCommas4(this.getRowCountValue(), thousandSeparator, decimalSeparator));\n  }\n  getRowCountValue() {\n    let totalRowCount = 0;\n    this.rowModel.forEachLeafNode(() => totalRowCount += 1);\n    return totalRowCount;\n  }\n  init() {\n  }\n  refresh() {\n    return true;\n  }\n  // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n  // so we need to override destroy() just to make the method public.\n  destroy() {\n    super.destroy();\n  }\n};\n\n// enterprise-modules/status-bar/src/statusBar/statusBarApi.ts\nimport { _unwrapUserComp as _unwrapUserComp2 } from \"ag-grid-community\";\nfunction getStatusPanel(beans, key) {\n  const comp = beans.statusBarService.getStatusPanel(key);\n  return _unwrapUserComp2(comp);\n}\n\n// enterprise-modules/status-bar/src/statusBar/statusBarService.ts\nimport { BeanStub as BeanStub37 } from \"ag-grid-community\";\n\n// enterprise-modules/status-bar/src/statusBar/agStatusBar.ts\nimport { AgPromise as AgPromise8, Component as Component65, RefPlaceholder as RefPlaceholder46, _removeFromParent as _removeFromParent9 } from \"ag-grid-community\";\nvar AgStatusBar = class extends Component65 {\n  constructor() {\n    super(\n      /* html */\n      `<div class=\"ag-status-bar\">\n            <div data-ref=\"eStatusBarLeft\" class=\"ag-status-bar-left\" role=\"status\"></div>\n            <div data-ref=\"eStatusBarCenter\" class=\"ag-status-bar-center\" role=\"status\"></div>\n            <div data-ref=\"eStatusBarRight\" class=\"ag-status-bar-right\" role=\"status\"></div>\n        </div>`\n    );\n    this.updateQueued = false;\n    this.panelsPromise = AgPromise8.resolve();\n    this.eStatusBarLeft = RefPlaceholder46;\n    this.eStatusBarCenter = RefPlaceholder46;\n    this.eStatusBarRight = RefPlaceholder46;\n    this.compDestroyFunctions = {};\n  }\n  wireBeans(beans) {\n    this.userComponentFactory = beans.userComponentFactory;\n    this.statusBarService = beans.statusBarService;\n  }\n  postConstruct() {\n    this.processStatusPanels(/* @__PURE__ */ new Map());\n    this.addManagedPropertyListeners([\"statusBar\"], this.handleStatusBarChanged.bind(this));\n  }\n  processStatusPanels(existingStatusPanelsToReuse) {\n    const statusPanels = this.gos.get(\"statusBar\")?.statusPanels;\n    if (statusPanels) {\n      const leftStatusPanelComponents = statusPanels.filter(\n        (componentConfig) => componentConfig.align === \"left\"\n      );\n      const centerStatusPanelComponents = statusPanels.filter(\n        (componentConfig) => componentConfig.align === \"center\"\n      );\n      const rightStatusPanelComponents = statusPanels.filter(\n        (componentConfig) => !componentConfig.align || componentConfig.align === \"right\"\n      );\n      this.panelsPromise = AgPromise8.all([\n        this.createAndRenderComponents(\n          leftStatusPanelComponents,\n          this.eStatusBarLeft,\n          existingStatusPanelsToReuse\n        ),\n        this.createAndRenderComponents(\n          centerStatusPanelComponents,\n          this.eStatusBarCenter,\n          existingStatusPanelsToReuse\n        ),\n        this.createAndRenderComponents(\n          rightStatusPanelComponents,\n          this.eStatusBarRight,\n          existingStatusPanelsToReuse\n        )\n      ]);\n    } else {\n      this.setDisplayed(false);\n    }\n  }\n  handleStatusBarChanged() {\n    if (this.updateQueued) {\n      return;\n    }\n    this.updateQueued = true;\n    this.panelsPromise.then(() => {\n      this.updateStatusBar();\n      this.updateQueued = false;\n    });\n  }\n  updateStatusBar() {\n    const statusPanels = this.gos.get(\"statusBar\")?.statusPanels;\n    const validStatusBarPanelsProvided = Array.isArray(statusPanels) && statusPanels.length > 0;\n    this.setDisplayed(validStatusBarPanelsProvided);\n    const existingStatusPanelsToReuse = /* @__PURE__ */ new Map();\n    if (validStatusBarPanelsProvided) {\n      statusPanels.forEach((statusPanelConfig) => {\n        const key = statusPanelConfig.key ?? statusPanelConfig.statusPanel;\n        const existingStatusPanel = this.statusBarService.getStatusPanel(key);\n        if (existingStatusPanel?.refresh) {\n          const newParams = this.gos.addGridCommonParams(statusPanelConfig.statusPanelParams ?? {});\n          const hasRefreshed = existingStatusPanel.refresh(newParams);\n          if (hasRefreshed) {\n            existingStatusPanelsToReuse.set(key, existingStatusPanel);\n            delete this.compDestroyFunctions[key];\n            _removeFromParent9(existingStatusPanel.getGui());\n          }\n        }\n      });\n    }\n    this.resetStatusBar();\n    if (validStatusBarPanelsProvided) {\n      this.processStatusPanels(existingStatusPanelsToReuse);\n    }\n  }\n  resetStatusBar() {\n    this.eStatusBarLeft.innerHTML = \"\";\n    this.eStatusBarCenter.innerHTML = \"\";\n    this.eStatusBarRight.innerHTML = \"\";\n    this.destroyComponents();\n    this.statusBarService.unregisterAllComponents();\n  }\n  destroy() {\n    this.destroyComponents();\n    super.destroy();\n  }\n  destroyComponents() {\n    Object.values(this.compDestroyFunctions).forEach((func) => func());\n    this.compDestroyFunctions = {};\n  }\n  createAndRenderComponents(statusBarComponents, ePanelComponent, existingStatusPanelsToReuse) {\n    const componentDetails = [];\n    statusBarComponents.forEach((componentConfig) => {\n      const key = componentConfig.key || componentConfig.statusPanel;\n      const existingStatusPanel = existingStatusPanelsToReuse.get(key);\n      let promise;\n      if (existingStatusPanel) {\n        promise = AgPromise8.resolve(existingStatusPanel);\n      } else {\n        const params = {};\n        const compDetails = this.userComponentFactory.getStatusPanelCompDetails(componentConfig, params);\n        promise = compDetails.newAgStackInstance();\n        if (promise == null) {\n          return;\n        }\n      }\n      componentDetails.push({\n        key,\n        promise\n      });\n    });\n    return AgPromise8.all(componentDetails.map((details) => details.promise)).then(() => {\n      componentDetails.forEach((componentDetail) => {\n        componentDetail.promise.then((component) => {\n          const destroyFunc = () => {\n            this.destroyBean(component);\n          };\n          if (this.isAlive()) {\n            this.statusBarService.registerStatusPanel(componentDetail.key, component);\n            ePanelComponent.appendChild(component.getGui());\n            this.compDestroyFunctions[componentDetail.key] = destroyFunc;\n          } else {\n            destroyFunc();\n          }\n        });\n      });\n    });\n  }\n};\nvar AgStatusBarSelector = {\n  selector: \"AG-STATUS-BAR\",\n  component: AgStatusBar\n};\n\n// enterprise-modules/status-bar/src/statusBar/statusBarService.ts\nvar StatusBarService = class extends BeanStub37 {\n  // tslint:disable-next-line\n  constructor() {\n    super();\n    this.beanName = \"statusBarService\";\n    this.allComponents = /* @__PURE__ */ new Map();\n  }\n  registerStatusPanel(key, component) {\n    this.allComponents.set(key, component);\n  }\n  unregisterStatusPanel(key) {\n    this.allComponents.delete(key);\n  }\n  unregisterAllComponents() {\n    this.allComponents.clear();\n  }\n  getStatusPanel(key) {\n    return this.allComponents.get(key);\n  }\n  getStatusPanelSelector() {\n    return AgStatusBarSelector;\n  }\n  destroy() {\n    this.unregisterAllComponents();\n    super.destroy();\n  }\n};\n\n// enterprise-modules/status-bar/src/version.ts\nvar VERSION18 = \"32.3.9\";\n\n// enterprise-modules/status-bar/src/statusBarModule.ts\nvar StatusBarCoreModule = _defineModule18({\n  version: VERSION18,\n  moduleName: `${ModuleNames19.StatusBarModule}-core`,\n  beans: [StatusBarService],\n  userComponents: [\n    { name: \"agAggregationComponent\", classImp: AggregationComp },\n    { name: \"agSelectedRowCountComponent\", classImp: SelectedRowsComp },\n    { name: \"agTotalRowCountComponent\", classImp: TotalRowsComp },\n    { name: \"agFilteredRowCountComponent\", classImp: FilteredRowsComp },\n    { name: \"agTotalAndFilteredRowCountComponent\", classImp: TotalAndFilteredRowsComp }\n  ],\n  dependantModules: [EnterpriseCoreModule]\n});\nvar StatusBarApiModule = _defineModule18({\n  version: VERSION18,\n  moduleName: `${ModuleNames19.StatusBarModule}-api`,\n  apiFunctions: {\n    getStatusPanel\n  },\n  dependantModules: [StatusBarCoreModule]\n});\nvar StatusBarModule = _defineModule18({\n  version: VERSION18,\n  moduleName: ModuleNames19.StatusBarModule,\n  dependantModules: [StatusBarCoreModule, StatusBarApiModule]\n});\n\n// enterprise-modules/viewport-row-model/dist/package/main.esm.mjs\nimport { ModuleNames as ModuleNames20, _defineModule as _defineModule19 } from \"ag-grid-community\";\nimport { BeanStub as BeanStub38, RowNode as RowNode4, _getRowHeightAsNumber as _getRowHeightAsNumber5, _iterateObject as _iterateObject6, _missing as _missing8, _warnOnce as _warnOnce51 } from \"ag-grid-community\";\nvar VERSION19 = \"32.3.9\";\nvar ViewportRowModel = class extends BeanStub38 {\n  constructor() {\n    super(...arguments);\n    this.beanName = \"rowModel\";\n    this.firstRow = -1;\n    this.lastRow = -1;\n    this.rowCount = -1;\n    this.rowNodesByIndex = {};\n  }\n  wireBeans(beans) {\n    this.rowRenderer = beans.rowRenderer;\n    this.focusService = beans.focusService;\n    this.beans = beans;\n  }\n  // we don't implement as lazy row heights is not supported in this row model\n  ensureRowHeightsValid(startPixel, endPixel, startLimitIndex, endLimitIndex) {\n    return false;\n  }\n  postConstruct() {\n    this.rowHeight = _getRowHeightAsNumber5(this.gos);\n    this.addManagedEventListeners({ viewportChanged: this.onViewportChanged.bind(this) });\n    this.addManagedPropertyListener(\"viewportDatasource\", () => this.updateDatasource());\n    this.addManagedPropertyListener(\"rowHeight\", () => {\n      this.rowHeight = _getRowHeightAsNumber5(this.gos);\n      this.updateRowHeights();\n    });\n  }\n  start() {\n    this.updateDatasource();\n  }\n  isLastRowIndexKnown() {\n    return true;\n  }\n  destroy() {\n    this.destroyDatasource();\n    super.destroy();\n  }\n  destroyDatasource() {\n    if (!this.viewportDatasource) {\n      return;\n    }\n    if (this.viewportDatasource.destroy) {\n      this.viewportDatasource.destroy();\n    }\n    this.rowRenderer.datasourceChanged();\n    this.firstRow = -1;\n    this.lastRow = -1;\n  }\n  updateDatasource() {\n    const datasource = this.gos.get(\"viewportDatasource\");\n    if (datasource) {\n      this.setViewportDatasource(datasource);\n    }\n  }\n  getViewportRowModelPageSize() {\n    return this.gos.get(\"viewportRowModelPageSize\");\n  }\n  getViewportRowModelBufferSize() {\n    return this.gos.get(\"viewportRowModelBufferSize\");\n  }\n  calculateFirstRow(firstRenderedRow) {\n    const bufferSize = this.getViewportRowModelBufferSize();\n    const pageSize = this.getViewportRowModelPageSize();\n    const afterBuffer = firstRenderedRow - bufferSize;\n    if (afterBuffer < 0) {\n      return 0;\n    }\n    return Math.floor(afterBuffer / pageSize) * pageSize;\n  }\n  calculateLastRow(lastRenderedRow) {\n    if (lastRenderedRow === -1) {\n      return lastRenderedRow;\n    }\n    const bufferSize = this.getViewportRowModelBufferSize();\n    const pageSize = this.getViewportRowModelPageSize();\n    const afterBuffer = lastRenderedRow + bufferSize;\n    const result = Math.ceil(afterBuffer / pageSize) * pageSize;\n    const lastRowIndex = this.rowCount - 1;\n    return Math.min(result, lastRowIndex);\n  }\n  onViewportChanged(event) {\n    const newFirst = this.calculateFirstRow(event.firstRow);\n    const newLast = this.calculateLastRow(event.lastRow);\n    if (this.firstRow !== newFirst || this.lastRow !== newLast) {\n      this.firstRow = newFirst;\n      this.lastRow = newLast;\n      this.purgeRowsNotInViewport();\n      if (this.viewportDatasource) {\n        this.viewportDatasource.setViewportRange(this.firstRow, this.lastRow);\n      }\n    }\n  }\n  purgeRowsNotInViewport() {\n    Object.keys(this.rowNodesByIndex).forEach((indexStr) => {\n      const index = parseInt(indexStr, 10);\n      if (index < this.firstRow || index > this.lastRow) {\n        if (this.isRowFocused(index)) {\n          return;\n        }\n        delete this.rowNodesByIndex[index];\n      }\n    });\n  }\n  isRowFocused(rowIndex) {\n    const focusedCell = this.focusService.getFocusCellToUseAfterRefresh();\n    if (!focusedCell) {\n      return false;\n    }\n    if (focusedCell.rowPinned != null) {\n      return false;\n    }\n    const hasFocus = focusedCell.rowIndex === rowIndex;\n    return hasFocus;\n  }\n  setViewportDatasource(viewportDatasource) {\n    this.destroyDatasource();\n    this.viewportDatasource = viewportDatasource;\n    this.rowCount = -1;\n    if (!viewportDatasource.init) {\n      _warnOnce51(\"viewport is missing init method.\");\n    } else {\n      viewportDatasource.init({\n        setRowCount: this.setRowCount.bind(this),\n        setRowData: this.setRowData.bind(this),\n        getRow: this.getRow.bind(this)\n      });\n    }\n  }\n  getType() {\n    return \"viewport\";\n  }\n  getRow(rowIndex) {\n    if (!this.rowNodesByIndex[rowIndex]) {\n      this.rowNodesByIndex[rowIndex] = this.createBlankRowNode(rowIndex);\n    }\n    return this.rowNodesByIndex[rowIndex];\n  }\n  getRowNode(id) {\n    let result;\n    this.forEachNode((rowNode) => {\n      if (rowNode.id === id) {\n        result = rowNode;\n      }\n    });\n    return result;\n  }\n  getRowCount() {\n    return this.rowCount === -1 ? 0 : this.rowCount;\n  }\n  getRowIndexAtPixel(pixel) {\n    if (this.rowHeight !== 0) {\n      return Math.floor(pixel / this.rowHeight);\n    }\n    return 0;\n  }\n  getRowBounds(index) {\n    return {\n      rowHeight: this.rowHeight,\n      rowTop: this.rowHeight * index\n    };\n  }\n  updateRowHeights() {\n    this.forEachNode((node) => {\n      node.setRowHeight(this.rowHeight);\n      node.setRowTop(this.rowHeight * node.rowIndex);\n    });\n    this.eventService.dispatchEvent({\n      type: \"modelUpdated\",\n      newData: false,\n      newPage: false,\n      keepRenderedRows: true,\n      animate: false\n    });\n  }\n  getTopLevelRowCount() {\n    return this.getRowCount();\n  }\n  getTopLevelRowDisplayedIndex(topLevelIndex) {\n    return topLevelIndex;\n  }\n  isEmpty() {\n    return this.rowCount > 0;\n  }\n  isRowsToRender() {\n    return this.rowCount > 0;\n  }\n  getNodesInRangeForSelection(firstInRange, lastInRange) {\n    const firstIndex = firstInRange.rowIndex;\n    const lastIndex = lastInRange.rowIndex;\n    const firstNodeOutOfRange = firstIndex < this.firstRow || firstIndex > this.lastRow;\n    const lastNodeOutOfRange = lastIndex < this.firstRow || lastIndex > this.lastRow;\n    if (firstNodeOutOfRange || lastNodeOutOfRange) {\n      return [];\n    }\n    const result = [];\n    const startIndex = firstIndex <= lastIndex ? firstIndex : lastIndex;\n    const endIndex = firstIndex <= lastIndex ? lastIndex : firstIndex;\n    for (let i = startIndex; i <= endIndex; i++) {\n      result.push(this.rowNodesByIndex[i]);\n    }\n    return result;\n  }\n  forEachNode(callback) {\n    let callbackCount = 0;\n    Object.keys(this.rowNodesByIndex).forEach((indexStr) => {\n      const index = parseInt(indexStr, 10);\n      const rowNode = this.rowNodesByIndex[index];\n      callback(rowNode, callbackCount);\n      callbackCount++;\n    });\n  }\n  setRowData(rowData) {\n    _iterateObject6(rowData, (indexStr, dataItem) => {\n      const index = parseInt(indexStr, 10);\n      if (index >= this.firstRow && index <= this.lastRow) {\n        let rowNode = this.rowNodesByIndex[index];\n        if (_missing8(rowNode)) {\n          rowNode = this.createBlankRowNode(index);\n          this.rowNodesByIndex[index] = rowNode;\n        }\n        rowNode.setDataAndId(dataItem, index.toString());\n      }\n    });\n  }\n  createBlankRowNode(rowIndex) {\n    const rowNode = new RowNode4(this.beans);\n    rowNode.setRowHeight(this.rowHeight);\n    rowNode.setRowTop(this.rowHeight * rowIndex);\n    rowNode.setRowIndex(rowIndex);\n    return rowNode;\n  }\n  setRowCount(rowCount, keepRenderedRows = false) {\n    if (rowCount === this.rowCount) {\n      return;\n    }\n    this.rowCount = rowCount;\n    this.eventService.dispatchEventOnce({\n      type: \"rowCountReady\"\n    });\n    this.eventService.dispatchEvent({\n      type: \"modelUpdated\",\n      newData: false,\n      newPage: false,\n      keepRenderedRows,\n      animate: false\n    });\n  }\n  isRowPresent(rowNode) {\n    const foundRowNode = this.getRowNode(rowNode.id);\n    return !!foundRowNode;\n  }\n};\nvar ViewportRowModelModule = _defineModule19({\n  version: VERSION19,\n  moduleName: ModuleNames20.ViewportRowModelModule,\n  rowModel: \"viewport\",\n  beans: [ViewportRowModel],\n  dependantModules: [EnterpriseCoreModule]\n});\n\n// packages/ag-grid-enterprise/src/main.ts\n__reExport(main_exports, main_esm_exports);\nexport * from \"ag-grid-community\";\nexport * from \"ag-grid-community\";\nModuleRegistry2.__registerModules(\n  [\n    CommunityFeaturesModule,\n    ClientSideRowModelModule,\n    InfiniteRowModelModule,\n    CsvExportModule2,\n    AdvancedFilterModule,\n    GridChartsModule,\n    ClipboardModule,\n    ColumnsToolPanelModule,\n    ExcelExportModule,\n    FiltersToolPanelModule,\n    MasterDetailModule,\n    MenuModule,\n    MultiFilterModule,\n    RangeSelectionModule,\n    RichSelectModule,\n    RowGroupingModule,\n    ServerSideRowModelModule,\n    SetFilterModule,\n    SideBarModule,\n    SparklinesModule,\n    StatusBarModule,\n    ViewportRowModelModule\n  ],\n  false,\n  void 0\n);\nexport {\n  AdvancedFilterModule,\n  AgDialog,\n  AgGroupComponent,\n  AgGroupComponentSelector,\n  AgMenuItemComponent,\n  AgMenuItemRenderer,\n  AgMenuList,\n  AgMenuPanel,\n  AgPanel,\n  AgPrimaryCols,\n  AgRichSelect,\n  ClipboardModule,\n  ColumnsToolPanelModule,\n  EnterpriseCoreModule,\n  ExcelExportModule,\n  FiltersToolPanelModule,\n  GridChartsModule,\n  GroupCellRenderer,\n  GroupCellRendererCtrl,\n  GridLicenseManager as LicenseManager,\n  MasterDetailModule,\n  MenuModule,\n  MultiFilter,\n  MultiFilterModule,\n  PillDragComp,\n  PillDropZonePanel,\n  PivotDropZonePanel,\n  RangeSelectionModule,\n  RichSelectModule,\n  RowGroupDropZonePanel,\n  RowGroupingModule,\n  ServerSideRowModelModule,\n  SetFilter,\n  SetFilterModule,\n  SideBarModule,\n  SparklinesModule,\n  StatusBarModule,\n  TabbedLayout,\n  ToolPanelColDefService,\n  ValuesDropZonePanel,\n  ViewportRowModelModule,\n  VirtualList,\n  VirtualListDragFeature,\n  agCharts,\n  exportMultipleSheetsAsExcel,\n  getMultipleSheetsAsExcel\n};\n", "console.log(\"Loading project.js...\");\n\n\n// CHART.JS\n// .............................................................................\nimport Chart from \"chart.js/auto\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\ntry {\n  Chart.register(zoomPlugin);\n} catch (e) {\n  console.error(\"Could not register zoom plugin for Chart.js\", e);\n}\n\n// HTMX\n// .............................................................................\n\nimport \"./custom_htmx.js\";\n\n// AG GRID\n// .............................................................................\nimport { createGrid, LicenseManager } from \"ag-grid-enterprise\";\nwindow.createGrid = createGrid;\n\nconst licenseKey =\n  \"Using_this_{AG_Grid}_Enterprise_key_{AG-098358}_in_excess_of_the_licence_granted_is_not_permitted___Please_report_misuse_to_legal@ag-grid.com___For_help_with_changing_this_key_please_contact_info@ag-grid.com___{Lawrence_Berkeley_National_Lab}_is_granted_a_{Multiple_Applications}_Developer_License_for_{1}_Front-End_JavaScript_developer___All_Front-End_JavaScript_developers_need_to_be_licensed_in_addition_to_the_ones_working_with_{AG_Grid}_Enterprise___This_key_has_not_been_granted_a_Deployment_License_Add-on___This_key_works_with_{AG_Grid}_Enterprise_versions_released_before_{2_June_2027}____[v3]_[01]_MTgxMTg5MDgwMDAwMA==da915223715103c5d36627cd736e13ff\";\nLicenseManager.setLicenseKey(licenseKey);\n\n// VARIOUS FUNCTIONS FOR SITE...\n// .............................................................................\n\nfunction igsdbEnableToasts() {\n  try {\n    console.log(\"Enabling bootstrap toasts...\");\n    var toastElList = [].slice.call(document.querySelectorAll(\".toast\"));\n    var toastList = toastElList.map(function (toastEl) {\n      return new bootstrap.Toast(toastEl, {});\n    });\n    toastList.forEach((toast) => toast.show());\n  } catch (err) {\n    console.log(\"Error initializing toasts: \", err);\n  }\n}\n\nfunction igsdbEnableTooltips() {\n  try {\n    console.log(\"Enabling bootstrap tooltips...\");\n    var tooltipTriggerList = [].slice.call(\n      document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n    );\n    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n      return new bootstrap.Tooltip(tooltipTriggerEl);\n    });\n  } catch (err) {\n    console.log(\"Error initializing tooltips: \", err);\n  }\n}\n\nwindow.addEventListener(\"DOMContentLoaded\", (event) => {\n  // Boostrap setup...\n  igsdbEnableToasts();\n  igsdbEnableTooltips();\n});\n\n// FUNCTIONS FOR CHART\n// .............................................................................\n\nfunction buildSubmittedProductChart(ctx, chartConfig) {\n  console.log(\"Building chart: product-chart-{{ product.id }}\");\n  let chart = new Chart(ctx, chartConfig);\n  console.log(\"Chart config\", chartConfig);\n  window.spectral_data_chart = chart;\n}\nwindow.buildSubmittedProductChart = buildSubmittedProductChart;\n\nfunction updateXAxis(option) {\n  var minX;\n  var maxX;\n\n  switch (option) {\n    case \"range_0_3_to_0_8\":\n      minX = 0.3;\n      maxX = 0.8;\n      break;\n    case \"range_0_3_to_2_5\":\n      minX = 0.3;\n      maxX = 2.5;\n      break;\n    case \"range_2_to_7\":\n      minX = 2;\n      maxX = 7;\n      break;\n    case \"range_0_to_40\":\n      minX = 0;\n      maxX = 40;\n      break;\n    default:\n      minX = 0.3;\n      maxX = 2.5;\n  }\n\n  window.spectral_data_chart.options.scales.x.min = minX;\n  window.spectral_data_chart.options.scales.x.max = maxX;\n  window.spectral_data_chart.update();\n}\nwindow.updateXAxis = updateXAxis;\n\nfunction showProductDetailModal(productToken) {\n  const modalElement = document.getElementById(\"product-detail-modal\");\n  const modal = new bootstrap.Modal(modalElement);\n  modal.show();\n  const modalContent = document.getElementById(\"product-detail-modal-content\");\n  modalContent.innerHTML = `\n  <div class=\"modal-header\">\n      Product detail\n  </div>\n  <div class=\"modal-body d-flex flex-row justify-content-center align-items-center\" style=\"height: 80vh; overflow:scroll;\">\n      <div class=\"d-flex flex-row align-items-center\">\n          <div class=\"spinner-border text-primary\" style=\"width: 3rem; height: 3rem;\" role=\"status\">\n          </div>\n          <div class=\"ms-2\">Loading product detail...</div>\n      </div>\n  </div>\n  <div class=\"modal-footer\">\n      <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\n  </div>\n  `;\n  htmx.ajax(\"GET\", `/products/${productToken}/hx`, {\n    target: modalContent,\n    swap: \"innerHTML\",\n    onLoad: function () {\n      console.log(\"HTMX content loaded, initializing chart\");\n    },\n  });\n}\n\nwindow.showProductDetailModal = showProductDetailModal;\n"],
  "mappings": "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;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,gBAAc,oBAAoB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,gBAAc,mBAAmB;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,gBAAc,oBAAoB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,gBAAc,qBAAqB;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AA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A,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAA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",
  "names": ["window", "document", "undefined", "round", "each", "assign", "index", "extend", "merge", "str", "find", "toArray", "element", "callback", "self", "center", "getCenter", "offset", "start", "end", "destroy", "isValid", "distance", "Hammer", "add", "str", "range", "ratio", "_Color", "color", "noop", "uid", "id", "isNullOrUndef", "value", "undefined", "isArray", "Array", "type", "Object", "prototype", "toString", "call", "slice", "isObject", "isNumberFinite", "Number", "isFinite", "finiteOrDefault", "defaultValue", "valueOrDefault", "toPercentage", "dimension", "endsWith", "parseFloat", "toDimension", "callback", "fn", "args", "thisArg", "apply", "each", "loopable", "reverse", "i", "len", "keys", "length", "_elementsEqual", "a0", "a1", "ilen", "v0", "v1", "datasetIndex", "index", "clone", "source", "map", "target", "create", "klen", "k", "isValidKey", "key", "indexOf", "_merger", "options", "tval", "sval", "merge", "sources", "merger", "current", "mergeIf", "_mergerIf", "hasOwnProperty", "keyResolvers", "v", "x", "o", "y", "_splitKey", "key", "parts", "split", "keys", "tmp", "part", "endsWith", "slice", "push", "_getKeyResolver", "obj", "k", "resolveObjectKey", "resolver", "_capitalize", "str", "charAt", "toUpperCase", "defined", "value", "isFunction", "setsEqual", "a", "b", "size", "item", "has", "_isClickEvent", "e", "type", "PI", "Math", "TAU", "PITAU", "INFINITY", "Number", "POSITIVE_INFINITY", "RAD_PER_DEG", "HALF_PI", "QUARTER_PI", "TWO_THIRDS_PI", "log10", "sign", "almostEquals", "epsilon", "abs", "niceNum", "range", "roundedRange", "round", "niceRange", "pow", "floor", "fraction", "niceFraction", "_factorize", "result", "sqrt", "i", "sort", "pop", "isNonPrimitive", "n", "Symbol", "toPrimitive", "isNumber", "isNaN", "parseFloat", "isFinite", "almostWhole", "rounded", "_setMinAndMaxByKey", "array", "target", "property", "ilen", "length", "min", "max", "toRadians", "degrees", "toDegrees", "radians", "_decimalPlaces", "isFiniteNumber", "p", "getAngleFromPoint", "centrePoint", "anglePoint", "distanceFromXCenter", "distanceFromYCenter", "radialDistanceFromCenter", "angle", "atan2", "distance", "distanceBetweenPoints", "pt1", "pt2", "_angleDiff", "_normalizeAngle", "_angleBetween", "start", "end", "sameAngleIsFullCircle", "s", "angleToStart", "angleToEnd", "startToAngle", "endToAngle", "_limitValue", "_int16Range", "_isBetween", "_lookup", "table", "cmp", "index", "hi", "lo", "mid", "_lookupByKey", "last", "ti", "_rlookupByKey", "_filterBetween", "values", "arrayEvents", "listenArrayEvents", "listener", "_chartjs", "listeners", "Object", "defineProperty", "configurable", "enumerable", "forEach", "method", "base", "args", "res", "apply", "object", "unlistenArrayEvents", "stub", "indexOf", "splice", "_arrayUnique", "items", "set", "Set", "Array", "from", "requestAnimFrame", "window", "callback", "requestAnimationFrame", "throttled", "fn", "thisArg", "argsToUse", "ticking", "args", "call", "apply", "debounce", "delay", "timeout", "clearTimeout", "setTimeout", "_toLeftRightCenter", "align", "_alignStartEnd", "start", "end", "_textX", "left", "right", "rtl", "check", "_getStartAndCountOfVisiblePoints", "meta", "points", "animationsDisabled", "pointCount", "length", "count", "_sorted", "iScale", "vScale", "_parsed", "spanGaps", "dataset", "options", "axis", "min", "max", "minDefined", "maxDefined", "getUserBounds", "Math", "_lookupByKey", "lo", "getPixelForValue", "distanceToDefinedLo", "slice", "reverse", "findIndex", "point", "isNullOrUndef", "_limitValue", "hi", "distanceToDefinedHi", "_scaleRangesChanged", "xScale", "yScale", "_scaleRanges", "newRanges", "xmin", "xmax", "ymin", "ymax", "changed", "Object", "assign", "atEdge", "t", "elasticIn", "s", "p", "pow", "sin", "TAU", "elasticOut", "effects", "linear", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInCubic", "easeOutCubic", "easeInOutCubic", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInSine", "cos", "HALF_PI", "easeOutSine", "easeInOutSine", "PI", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "sqrt", "easeOutCirc", "easeInOutCirc", "easeInElastic", "easeOutElastic", "easeInOutElastic", "easeInBack", "easeOutBack", "easeInOutBack", "easeInBounce", "easeOutBounce", "m", "d", "easeInOutBounce", "isPatternOrGradient", "value", "type", "toString", "color", "Color", "getHoverColor", "saturate", "darken", "hexString", "numbers", "colors", "applyAnimationsDefaults", "defaults", "set", "undefined", "duration", "easing", "from", "loop", "to", "describe", "_fallback", "_indexable", "_scriptable", "name", "properties", "active", "animation", "resize", "show", "animations", "visible", "hide", "v", "applyLayoutsDefaults", "autoPadding", "padding", "top", "bottom", "intlCache", "Map", "getNumberFormat", "locale", "cacheKey", "JSON", "stringify", "formatter", "get", "Intl", "NumberFormat", "formatNumber", "num", "format", "formatters", "values", "isArray", "numeric", "tickValue", "index", "ticks", "chart", "notation", "delta", "maxTick", "abs", "calculateDelta", "logDelta", "log10", "numDecimal", "isNaN", "floor", "minimumFractionDigits", "maximumFractionDigits", "logarithmic", "remain", "significand", "includes", "applyScaleDefaults", "display", "offset", "beginAtZero", "bounds", "clip", "grace", "grid", "lineWidth", "drawOnChartArea", "drawTicks", "tickLength", "tickWidth", "_ctx", "tickColor", "border", "dash", "dashOffset", "width", "title", "text", "minRotation", "maxRotation", "mirror", "textStrokeWidth", "textStrokeColor", "autoSkip", "autoSkipPadding", "labelOffset", "Ticks", "minor", "major", "crossAlign", "showLabelBackdrop", "backdropColor", "backdropPadding", "route", "startsWith", "overrides", "create", "descriptors", "getScope", "node", "key", "keys", "split", "i", "n", "k", "root", "scope", "merge", "Defaults", "constructor", "_descriptors", "_appliers", "backgroundColor", "borderColor", "datasets", "devicePixelRatio", "context", "platform", "getDevicePixelRatio", "elements", "events", "font", "family", "size", "style", "lineHeight", "weight", "hover", "hoverBackgroundColor", "ctx", "hoverBorderColor", "hoverColor", "indexAxis", "interaction", "mode", "intersect", "includeInvisible", "maintainAspectRatio", "onHover", "onClick", "parsing", "plugins", "responsive", "scale", "scales", "showLine", "drawActiveElementsOnTop", "override", "targetScope", "targetName", "scopeObject", "targetScopeObject", "privateName", "defineProperties", "writable", "enumerable", "local", "target", "isObject", "valueOrDefault", "appliers", "forEach", "toFontString", "_measureText", "data", "gc", "longest", "string", "textWidth", "measureText", "push", "_longestText", "arrayOfThings", "cache", "garbageCollect", "save", "ilen", "j", "jlen", "thing", "nestedThing", "restore", "gcLen", "splice", "_alignPixel", "pixel", "currentDevicePixelRatio", "halfWidth", "round", "clearCanvas", "canvas", "getContext", "resetTransform", "clearRect", "height", "drawPoint", "x", "y", "drawPointLegend", "w", "xOffset", "yOffset", "cornerRadius", "xOffsetW", "yOffsetW", "pointStyle", "rotation", "radius", "rad", "RAD_PER_DEG", "translate", "rotate", "drawImage", "beginPath", "ellipse", "arc", "closePath", "moveTo", "TWO_THIRDS_PI", "lineTo", "QUARTER_PI", "SQRT1_2", "rect", "fill", "borderWidth", "stroke", "_isPointInArea", "area", "margin", "clipArea", "unclipArea", "_steppedLineTo", "previous", "flip", "midpoint", "_bezierCurveTo", "bezierCurveTo", "cp1x", "cp2x", "cp1y", "cp2y", "setRenderOpts", "opts", "translation", "fillStyle", "textAlign", "textBaseline", "decorateText", "line", "strikethrough", "underline", "metrics", "actualBoundingBoxLeft", "actualBoundingBoxRight", "actualBoundingBoxAscent", "actualBoundingBoxDescent", "yDecoration", "strokeStyle", "decorationWidth", "drawBackdrop", "oldColor", "fillRect", "renderText", "lines", "strokeWidth", "strokeColor", "backdrop", "strokeText", "maxWidth", "fillText", "Number", "addRoundedRectPath", "h", "topLeft", "bottomLeft", "bottomRight", "topRight", "LINE_HEIGHT", "FONT_STYLE", "toLineHeight", "matches", "match", "numberOrZero", "_readValueToProps", "props", "ret", "objProps", "read", "prop", "toTRBL", "toTRBLCorners", "toPadding", "obj", "toFont", "fallback", "parseInt", "console", "warn", "resolve", "inputs", "info", "cacheable", "_addGrace", "minmax", "change", "toDimension", "keepZero", "add", "createContext", "parentContext", "_createResolver", "scopes", "prefixes", "rootScopes", "getTarget", "finalRootScopes", "_resolve", "Symbol", "toStringTag", "_cacheable", "_scopes", "_rootScopes", "_getTarget", "Proxy", "deleteProperty", "_keys", "_cached", "_resolveWithPrefixes", "getOwnPropertyDescriptor", "Reflect", "getPrototypeOf", "has", "getKeysFromAllScopes", "ownKeys", "storage", "_storage", "_attachContext", "proxy", "subProxy", "descriptorDefaults", "_proxy", "_context", "_subProxy", "_stack", "Set", "setContext", "receiver", "_resolveWithContext", "allKeys", "configurable", "scriptable", "indexable", "_allKeys", "isScriptable", "isFunction", "isIndexable", "readKey", "prefix", "_capitalize", "needsSubResolver", "prototype", "hasOwnProperty", "_resolveScriptable", "_resolveArray", "getValue", "Error", "Array", "join", "delete", "createSubResolver", "arr", "filter", "item", "resolver", "resolveFallback", "parent", "resolveObjectKey", "addScopes", "parentScopes", "parentFallback", "allScopes", "addScopesFromKey", "subGetTarget", "resolveKeysFromAllScopes", "_parseObjectDataRadialScale", "_parsing", "parsed", "r", "parse", "EPSILON", "getPoint", "skip", "getValueAxis", "splineCurve", "firstPoint", "middlePoint", "afterPoint", "current", "next", "d01", "distanceBetweenPoints", "d12", "s01", "s12", "fa", "fb", "monotoneAdjust", "deltaK", "mK", "pointsLen", "alphaK", "betaK", "tauK", "squaredMagnitude", "pointCurrent", "pointAfter", "almostEquals", "monotoneCompute", "valueAxis", "pointBefore", "iPixel", "vPixel", "splineCurveMonotone", "slopeDelta", "sign", "capControlPoint", "pt", "capBezierPoints", "inArea", "inAreaPrev", "inAreaNext", "_updateBezierControlPoints", "controlPoints", "cubicInterpolationMode", "prev", "tension", "_isDomSupported", "document", "_getParentNode", "domNode", "parentNode", "host", "parseMaxStyle", "styleValue", "parentProperty", "valueInPixels", "indexOf", "getComputedStyle", "element", "ownerDocument", "defaultView", "getStyle", "el", "property", "getPropertyValue", "positions", "getPositionedStyle", "styles", "suffix", "result", "pos", "parseFloat", "useOffsetPos", "shadowRoot", "getCanvasPosition", "e", "touches", "source", "offsetX", "offsetY", "box", "getBoundingClientRect", "clientX", "clientY", "getRelativePosition", "event", "borderBox", "boxSizing", "paddings", "borders", "getContainerSize", "maxHeight", "container", "clientWidth", "clientHeight", "containerStyle", "containerBorder", "containerPadding", "INFINITY", "round1", "getMaximumSize", "bbWidth", "bbHeight", "aspectRatio", "margins", "containerSize", "maintainHeight", "retinaScale", "forceRatio", "forceStyle", "pixelRatio", "deviceHeight", "deviceWidth", "setTransform", "supportsEventListenerOptions", "passiveSupported", "passive", "addEventListener", "removeEventListener", "readUsedSize", "_pointInLine", "p1", "p2", "_steppedInterpolation", "_bezierInterpolation", "cp1", "cp2", "a", "b", "c", "getRightToLeftAdapter", "rectX", "setWidth", "xPlus", "leftForLtr", "itemWidth", "getLeftToRightAdapter", "_itemWidth", "getRtlAdapter", "overrideTextDirection", "direction", "original", "getPropertyPriority", "setProperty", "prevTextDirection", "restoreTextDirection", "propertyFn", "between", "_angleBetween", "compare", "_angleDiff", "normalize", "_normalizeAngle", "_isBetween", "normalizeSegment", "getSegment", "segment", "startBound", "endBound", "_boundSegment", "inside", "subStart", "prevValue", "startIsBefore", "endIsBefore", "shouldStart", "shouldStop", "_boundSegments", "segments", "sub", "findStartAndEnd", "solidSegments", "last", "cur", "stop", "_computeSegments", "segmentOptions", "_loop", "splitByStyles", "completeLoop", "_fullLoop", "doSplitByStyles", "chartContext", "_chart", "baseStyle", "readStyle", "_datasetIndex", "datasetIndex", "prevStyle", "addStyle", "l", "st", "dir", "p0", "p0DataIndex", "p1DataIndex", "styleChanged", "borderCapStyle", "borderDash", "borderDashOffset", "borderJoinStyle", "replacer", "getSizeForArea", "chartArea", "field", "getDatasetArea", "getDatasetClipArea", "_clip", "disabled", "Animator", "constructor", "_request", "_charts", "Map", "_running", "_lastDate", "undefined", "_notify", "chart", "anims", "date", "type", "callbacks", "listeners", "numSteps", "duration", "forEach", "fn", "initial", "currentStep", "Math", "min", "start", "_refresh", "requestAnimFrame", "call", "window", "_update", "Date", "now", "remaining", "running", "items", "length", "i", "draw", "item", "_active", "_total", "tick", "pop", "_getAnims", "charts", "get", "complete", "progress", "set", "listen", "event", "cb", "push", "add", "has", "reduce", "acc", "cur", "max", "_duration", "stop", "cancel", "remove", "delete", "transparent", "interpolators", "boolean", "from", "to", "factor", "color", "c0", "helpersColor", "c1", "valid", "mix", "hexString", "number", "Animation", "cfg", "target", "prop", "currentValue", "resolve", "_fn", "_easing", "effects", "easing", "linear", "_start", "floor", "delay", "_loop", "loop", "_target", "_prop", "_from", "_to", "_promises", "active", "update", "elapsed", "remain", "wait", "promises", "Promise", "res", "rej", "resolved", "method", "Animations", "config", "_chart", "_properties", "configure", "isObject", "animationOptions", "Object", "keys", "defaults", "animation", "animatedProps", "getOwnPropertyNames", "key", "option", "isArray", "properties", "_animateOptions", "values", "newOptions", "options", "resolveTargetOptions", "animations", "_createAnimations", "$shared", "awaitAll", "$animations", "then", "props", "charAt", "value", "size", "assign", "animator", "anim", "all", "scaleClip", "scale", "allowedOverflow", "opts", "reverse", "end", "defaultClip", "xScale", "yScale", "x", "y", "top", "right", "bottom", "left", "toClip", "t", "r", "b", "l", "disabled", "getSortedDatasetIndices", "filterVisible", "metasets", "_getSortedDatasetMetas", "ilen", "index", "applyStack", "stack", "dsIndex", "singleMode", "mode", "datasetIndex", "otherValue", "found", "isFinite", "sign", "convertObjectDataToArray", "data", "meta", "iScale", "vScale", "iAxisKey", "axis", "vAxisKey", "adata", "Array", "isStacked", "stacked", "getStackKey", "indexScale", "valueScale", "id", "getUserBounds", "minDefined", "maxDefined", "Number", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "getOrCreateStack", "stacks", "stackKey", "indexValue", "subStack", "getLastIndexInStack", "positive", "getMatchingVisibleMetas", "updateStacks", "controller", "parsed", "_cachedMeta", "_stacks", "iAxis", "vAxis", "itemStacks", "_top", "_bottom", "visualValues", "_visualValues", "getFirstScaleId", "scales", "filter", "shift", "createDatasetContext", "parent", "createContext", "dataset", "createDataContext", "element", "dataIndex", "raw", "clearStacks", "_parsed", "isDirectUpdateMode", "cloneIfNotShared", "cached", "shared", "createStack", "canStack", "hidden", "_stacked", "DatasetController", "datasetElementType", "dataElementType", "_ctx", "ctx", "_cachedDataOpts", "getMeta", "_type", "_parsing", "_data", "_objectData", "_sharedOptions", "_drawStart", "_drawCount", "enableOptionSharing", "supportsDecimation", "$context", "_syncList", "initialize", "linkScales", "addElements", "fill", "isPluginEnabled", "console", "warn", "updateIndex", "getDataset", "chooseId", "xid", "xAxisID", "valueOrDefault", "yid", "yAxisID", "rid", "rAxisID", "indexAxis", "iid", "iAxisID", "vid", "vAxisID", "getScaleForId", "rScale", "datasets", "getDatasetMeta", "scaleID", "_getOtherScale", "reset", "_destroy", "unlistenArrayEvents", "_dataCheck", "isExtensible", "listenArrayEvents", "buildOrUpdateElements", "resetNewElements", "stackChanged", "oldStacked", "_resyncElements", "scopeKeys", "datasetScopeKeys", "scopes", "getOptionScopes", "createResolver", "getContext", "parsing", "parse", "count", "sorted", "_sorted", "prev", "parseArrayData", "parseObjectData", "parsePrimitiveData", "isNotInOrderComparedToPrev", "labels", "getLabels", "singleScale", "xAxisKey", "yAxisKey", "resolveObjectKey", "getParsed", "getDataElement", "updateRangeFromParsed", "range", "parsedValue", "NaN", "getMinMax", "otherScale", "otherMin", "otherMax", "_skip", "getAllParsedValues", "getMaxOverflow", "getLabelAndValue", "label", "getLabelForValue", "_clip", "clip", "elements", "area", "chartArea", "drawActiveElementsOnTop", "getStyle", "resolveDatasetElementOptions", "resolveDataElementOptions", "context", "_resolveElementOptions", "elementType", "cache", "cacheKey", "sharing", "defined", "datasetElementScopeKeys", "prefixes", "names", "resolveNamedOptions", "freeze", "_resolveAnimations", "transition", "datasetAnimationScopeKeys", "_cacheable", "getSharedOptions", "includeOptions", "sharedOptions", "_animationsDisabled", "_getSharedOptions", "firstOpts", "previouslySharedOptions", "updateSharedOptions", "updateElement", "_setStyle", "removeHoverStyle", "setHoverStyle", "_removeDatasetHoverStyle", "_setDatasetHoverStyle", "arg1", "arg2", "numMeta", "numData", "_insertElements", "_removeElements", "move", "arr", "updateElements", "removed", "splice", "_sync", "args", "_dataChanges", "_onDataPush", "arguments", "_onDataPop", "_onDataShift", "_onDataSplice", "newCount", "_onDataUnshift", "getAllScaleValues", "_cache", "$bar", "visibleMetas", "concat", "_arrayUnique", "sort", "a", "computeMinSampleSize", "_length", "curr", "updateMinAndPrev", "abs", "getPixelForValue", "ticks", "getPixelForTick", "computeFitCategoryTraits", "ruler", "stackCount", "thickness", "barThickness", "ratio", "isNullOrUndef", "categoryPercentage", "barPercentage", "chunk", "pixels", "computeFlexCategoryTraits", "next", "percent", "parseFloatBar", "entry", "startValue", "endValue", "barStart", "barEnd", "_custom", "parseValue", "parseArrayOrPrimitive", "isFloatBar", "custom", "barSign", "actualBase", "isHorizontal", "borderProps", "horizontal", "base", "setBorderSkipped", "edge", "borderSkipped", "enableBorderRadius", "parseEdge", "swap", "startEnd", "orig", "v1", "v2", "v", "setInflateAmount", "inflateAmount", "BarController", "grouped", "numbers", "overrides", "_index_", "offset", "grid", "_value_", "beginAtZero", "obj", "bars", "getBasePixel", "_getRuler", "vpixels", "head", "_calculateBarValuePixels", "ipixels", "_calculateBarIndexPixels", "center", "height", "width", "_getStacks", "last", "currentParsed", "iScaleValue", "skipNull", "find", "val", "isNaN", "indexOf", "_getStackCount", "_getAxisCount", "_getAxis", "getFirstScaleIdForIndexAxis", "indexScaleId", "firstScaleAxisId", "_getStackIndex", "name", "_startPixel", "_endPixel", "baseValue", "minBarLength", "floating", "getDataVisibility", "startPixel", "getPixelForDecimal", "endPixel", "getValueForPixel", "halfGrid", "getLineWidthForValue", "maxBarThickness", "Infinity", "axisCount", "axisID", "axisNumber", "stackIndex", "rects", "BubbleController", "radius", "points", "point", "iPixel", "vPixel", "skip", "getRatioAndOffset", "rotation", "circumference", "cutout", "ratioX", "ratioY", "offsetX", "offsetY", "TAU", "startAngle", "endAngle", "startX", "cos", "startY", "sin", "endX", "endY", "calcMax", "angle", "_angleBetween", "calcMin", "maxX", "maxY", "HALF_PI", "minX", "PI", "minY", "DoughnutController", "animateRotate", "animateScale", "spacing", "descriptors", "_scriptable", "_indexable", "startsWith", "aspectRatio", "plugins", "legend", "generateLabels", "pointStyle", "textAlign", "useBorderRadius", "borderRadius", "map", "style", "text", "fillStyle", "backgroundColor", "fontColor", "lineDash", "borderDash", "lineDashOffset", "borderDashOffset", "lineJoin", "borderJoinStyle", "lineWidth", "borderWidth", "strokeStyle", "borderColor", "onClick", "e", "legendItem", "toggleDataVisibility", "innerRadius", "outerRadius", "getter", "_getRotation", "toRadians", "_getCircumference", "_getRotationExtents", "isDatasetVisible", "arcs", "getMaxBorderWidth", "getMaxOffset", "maxSize", "toPercentage", "chartWeight", "_getRingWeight", "maxWidth", "maxHeight", "maxRadius", "toDimension", "radiusLength", "_getVisibleDatasetWeightTotal", "total", "calculateTotal", "_getRingWeightOffset", "_circumference", "calculateCircumference", "animationOpts", "centerX", "centerY", "arc", "metaData", "formatNumber", "locale", "borderAlign", "hoverBorderWidth", "hoverOffset", "ringWeightOffset", "weight", "LineController", "showLine", "spanGaps", "line", "_dataset", "animationsDisabled", "_getStartAndCountOfVisiblePoints", "_scaleRangesChanged", "_datasetIndex", "_decimated", "segment", "animated", "maxGapLength", "isNumber", "directUpdate", "pointsCount", "prevParsed", "nullData", "border", "firstPoint", "lastPoint", "updateControlPoints", "PolarAreaController", "angleLines", "display", "circular", "pointLabels", "_parseObjectDataRadialScale", "bind", "_updateRadius", "minSize", "cutoutPercentage", "getVisibleDatasetCount", "xCenter", "yCenter", "datasetStartAngle", "getIndexAngle", "defaultAngle", "countVisibleElements", "_computeAngle", "getDistanceFromCenterForValue", "PieController", "RadarController", "_fullLoop", "pointPosition", "getPointPositionForValue", "ScatterController", "interaction", "registry", "getElement", "abstract", "Error", "DateAdapterBase", "override", "members", "prototype", "init", "formats", "format", "diff", "startOf", "endOf", "_date", "binarySearch", "metaset", "intersect", "lookupMethod", "_reversePixels", "_rlookupByKey", "_lookupByKey", "result", "distanceToDefinedLo", "slice", "lo", "findIndex", "distanceToDefinedHi", "hi", "el", "getRange", "evaluateInteractionItems", "position", "handler", "getSortedVisibleDatasetMetas", "j", "getDistanceMetricForAxis", "useX", "useY", "pt1", "pt2", "deltaX", "deltaY", "sqrt", "pow", "getIntersectItems", "useFinalPosition", "includeInvisible", "isPointInArea", "evaluationFunc", "_isPointInArea", "inRange", "getNearestRadialItems", "getProps", "getAngleFromPoint", "getNearestCartesianItems", "distanceMetric", "minDistance", "getCenterPoint", "pointInArea", "distance", "getNearestItems", "getAxisItems", "rangeMethod", "intersectsItem", "modes", "getRelativePosition", "nearest", "STATIC_POSITIONS", "filterByPosition", "array", "pos", "filterDynamicPositionByAxis", "box", "sortByWeight", "v0", "wrapBoxes", "boxes", "layoutBoxes", "stackWeight", "buildStacks", "layouts", "wrap", "includes", "_stack", "placed", "setLayoutDims", "params", "vBoxMaxWidth", "hBoxMaxHeight", "layout", "fullSize", "availableWidth", "availableHeight", "buildLayoutBoxes", "centerHorizontal", "centerVertical", "leftAndTop", "rightAndBottom", "vertical", "getCombinedMax", "maxPadding", "updateMaxPadding", "boxPadding", "updateDims", "getPadding", "newWidth", "outerWidth", "newHeight", "outerHeight", "widthChanged", "w", "heightChanged", "h", "same", "other", "handleMaxPadding", "updatePos", "change", "getMargins", "marginForPositions", "positions", "margin", "fitBoxes", "refitBoxes", "refit", "changed", "setBoxDims", "placeBoxes", "userPadding", "padding", "addBox", "_layers", "z", "removeBox", "layoutItem", "minPadding", "toPadding", "verticalBoxes", "horizontalBoxes", "each", "beforeLayout", "visibleVerticalBoxCount", "BasePlatform", "acquireContext", "canvas", "releaseContext", "addEventListener", "listener", "removeEventListener", "getDevicePixelRatio", "getMaximumSize", "isAttached", "updateConfig", "BasicPlatform", "EXPANDO_KEY", "EVENT_TYPES", "touchstart", "touchmove", "touchend", "pointerenter", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointerout", "isNullOrEmpty", "initCanvas", "renderHeight", "getAttribute", "renderWidth", "boxSizing", "displayWidth", "readUsedSize", "displayHeight", "eventListenerOptions", "supportsEventListenerOptions", "passive", "addListener", "node", "removeListener", "fromNativeEvent", "native", "nodeListContains", "nodeList", "contains", "createAttachObserver", "observer", "MutationObserver", "entries", "trigger", "addedNodes", "removedNodes", "observe", "document", "childList", "subtree", "createDetachObserver", "drpListeningCharts", "oldDevicePixelRatio", "onWindowResize", "dpr", "devicePixelRatio", "resize", "currentDevicePixelRatio", "listenDevicePixelRatioChanges", "unlistenDevicePixelRatioChanges", "createResizeObserver", "container", "_getParentNode", "throttled", "clientWidth", "ResizeObserver", "contentRect", "releaseObserver", "disconnect", "createProxyAndListen", "proxy", "DomPlatform", "removeAttribute", "setAttribute", "proxies", "$proxies", "handlers", "attach", "detach", "isConnected", "_detectPlatform", "_isDomSupported", "OffscreenCanvas", "Element", "defaultRoutes", "tooltipPosition", "hasValue", "final", "ret", "autoSkip", "tickOpts", "determinedMaxTicks", "determineMaxTicks", "ticksLimit", "maxTicksLimit", "majorIndices", "major", "enabled", "getMajorIndices", "numMajorIndices", "first", "newTicks", "skipMajors", "calculateSpacing", "avgMajorSpacing", "round", "tickLength", "_tickSize", "maxScale", "maxChart", "_maxLength", "evenMajorSpacing", "getEvenSpacing", "factors", "_factorize", "ceil", "majorStart", "majorEnd", "len", "reverseAlign", "align", "offsetFromEdge", "getTicksLimit", "ticksLength", "sample", "numItems", "increment", "getPixelForGridLine", "offsetGridLines", "validIndex", "epsilon", "lineValue", "garbageCollect", "caches", "gc", "gcLen", "getTickMarkLength", "drawTicks", "getTitleHeight", "fallback", "font", "toFont", "lines", "lineHeight", "createScaleContext", "createTickContext", "titleAlign", "_toLeftRightCenter", "titleArgs", "titleX", "titleY", "_alignStartEnd", "positionAxisID", "Scale", "_margins", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight", "labelRotation", "_range", "_gridLineItems", "_labelItems", "_labelSizes", "_longestTextCache", "_userMax", "_userMin", "_suggestedMax", "_suggestedMin", "_ticksLength", "_borderValue", "_dataLimitsCached", "setContext", "suggestedMin", "suggestedMax", "finiteOrDefault", "metas", "getTicks", "xLabels", "yLabels", "getLabelItems", "_computeLabelItems", "beforeUpdate", "margins", "grace", "sampleSize", "beforeSetDimensions", "setDimensions", "afterSetDimensions", "beforeDataLimits", "determineDataLimits", "afterDataLimits", "_addGrace", "beforeBuildTicks", "buildTicks", "afterBuildTicks", "samplingEnabled", "_convertTicksToLabels", "beforeCalculateLabelRotation", "calculateLabelRotation", "afterCalculateLabelRotation", "source", "afterAutoSkip", "beforeFit", "fit", "afterFit", "afterUpdate", "reversePixels", "_alignToPixels", "alignToPixels", "_callHooks", "notifyPlugins", "beforeTickToLabelConversion", "generateTickLabels", "callback", "afterTickToLabelConversion", "numTicks", "minRotation", "maxRotation", "tickWidth", "maxLabelDiagonal", "_isVisible", "labelSizes", "_getLabelSizes", "maxLabelWidth", "widest", "maxLabelHeight", "highest", "_limitValue", "title", "toDegrees", "asin", "titleOpts", "gridOpts", "titleHeight", "tickPadding", "angleRadians", "labelHeight", "mirror", "labelWidth", "_calculatePadding", "_handleMargins", "isRotated", "labelsBelowTicks", "offsetLeft", "offsetRight", "isFullSize", "_computeLabelSizes", "widths", "heights", "widestLabelSize", "highestLabelSize", "jlen", "tickFont", "fontString", "nestedLabel", "_resolveTickFontOptions", "string", "_measureText", "valueAt", "idx", "pixel", "decimal", "_int16Range", "_alignPixel", "getDecimalForPixel", "getBaseValue", "optionTicks", "rot", "autoSkipPadding", "_computeGridLineItems", "tl", "borderOpts", "axisWidth", "axisHalfWidth", "alignBorderValue", "borderValue", "alignedLineValue", "tx1", "ty1", "tx2", "ty2", "x1", "y1", "x2", "y2", "limit", "step", "optsAtIndex", "optsAtIndexBorder", "lineColor", "dash", "dashOffset", "tickColor", "tickBorderDash", "tickBorderDashOffset", "crossAlign", "tickAndPadding", "hTickAndPadding", "lineCount", "textOffset", "textBaseline", "_getXAxisLabelAlignment", "_getYAxisLabelAlignment", "labelOffset", "halfCount", "strokeColor", "textStrokeColor", "strokeWidth", "textStrokeWidth", "tickTextAlign", "showLabelBackdrop", "backdrop", "labelPadding", "backdropPadding", "backdropColor", "translation", "_computeLabelArea", "drawBackground", "save", "fillRect", "restore", "drawGrid", "drawLine", "p1", "p2", "setLineDash", "beginPath", "moveTo", "lineTo", "stroke", "drawOnChartArea", "drawBorder", "lastLineWidth", "drawLabels", "clipArea", "renderTextOptions", "renderText", "unclipArea", "drawTitle", "tz", "gz", "bz", "_maxDigits", "fontSize", "TypedRegistry", "scope", "create", "isForType", "isPrototypeOf", "register", "proto", "getPrototypeOf", "parentScope", "isIChartComponent", "registerDefaults", "unregister", "itemDefaults", "merge", "routeDefaults", "describe", "routes", "property", "propertyParts", "split", "sourceName", "sourceScope", "join", "parts", "targetName", "targetScope", "route", "Registry", "controllers", "_typedRegistries", "_each", "addControllers", "addPlugins", "addScales", "getController", "_get", "getPlugin", "getScale", "removeControllers", "removeElements", "removePlugins", "removeScales", "typedRegistry", "arg", "reg", "_getRegistryForType", "_exec", "itemReg", "component", "camelMethod", "_capitalize", "PluginService", "_init", "notify", "hook", "_createDescriptors", "_descriptors", "descriptor", "plugin", "callCallback", "cancelable", "invalidate", "_oldCache", "_notifyStateChanges", "allPlugins", "createDescriptors", "previousDescriptors", "some", "localIds", "local", "getOpts", "pluginOpts", "pluginScopeKeys", "scriptable", "indexable", "allKeys", "getIndexAxis", "datasetDefaults", "datasetOptions", "getAxisFromDefaultScaleID", "getDefaultScaleIDFromAxis", "idMatchesAxis", "axisFromPosition", "determineAxis", "scaleOptions", "toLowerCase", "getAxisFromDataset", "retrieveAxisFromDatasets", "boundDs", "d", "mergeScaleConfig", "chartDefaults", "configScales", "chartIndexAxis", "scaleConf", "error", "_proxy", "defaultId", "defaultScaleOptions", "mergeIf", "defaultID", "initOptions", "initData", "initConfig", "keyCache", "keysCached", "Set", "cachedKeys", "generate", "addIfFound", "Config", "_config", "_scopeCache", "_resolverCache", "platform", "clearCache", "clear", "datasetType", "additionalOptionScopes", "_cachedScopes", "mainScope", "resetCache", "keyLists", "chartOptionScopes", "resolver", "subPrefixes", "getResolver", "needContext", "isFunction", "subResolver", "_attachContext", "descriptorDefaults", "resolverCache", "_createResolver", "p", "hasFunction", "isScriptable", "isIndexable", "KNOWN_POSITIONS", "positionIsHorizontal", "compare2Level", "l1", "l2", "onAnimationsComplete", "onComplete", "onAnimationProgress", "onProgress", "getCanvas", "getElementById", "instances", "getChart", "c", "moveNumericKeys", "intKey", "determineLastEvent", "lastEvent", "inChartArea", "isClick", "Chart", "version", "invalidatePlugins", "userConfig", "initialCanvas", "existingChart", "uid", "_options", "_aspectRatio", "_metasets", "_lastEvent", "_listeners", "_responsiveListeners", "_sortedMetasets", "_plugins", "_hiddenIndices", "attached", "_doResize", "debounce", "resizeDelay", "_initialize", "maintainAspectRatio", "responsive", "retinaScale", "bindEvents", "clearCanvas", "_resize", "_resizeBeforeDraw", "newSize", "newRatio", "onResize", "render", "ensureScalesHaveIDs", "scalesOptions", "axisOptions", "buildOrUpdateScales", "scaleOpts", "updated", "isRadial", "dposition", "dtype", "scaleType", "scaleClass", "hasUpdated", "_updateMetasets", "_destroyDatasetMeta", "_removeUnreferencedMetasets", "buildOrUpdateControllers", "newControllers", "order", "visible", "ControllerClass", "_resetElements", "animsDisabled", "_updateScales", "_checkEventBindings", "_updateHiddenIndices", "_minPadding", "autoPadding", "_updateLayout", "_updateDatasets", "_eventHandler", "_updateHoverStyles", "existingEvents", "newEvents", "events", "setsEqual", "unbindEvents", "changes", "_getUniformDataChanges", "datasetCount", "makeSet", "changeSet", "noArea", "_idx", "_updateDataset", "layers", "_drawDatasets", "_drawDataset", "getDatasetClipArea", "getElementsAtEventForMode", "Interaction", "setDatasetVisibility", "_updateVisibility", "hide", "show", "_stop", "destroy", "toBase64Image", "toDataURL", "bindUserEvents", "bindResponsiveEvents", "_add", "_remove", "detached", "updateHoverStyle", "prefix", "getActiveElements", "setActiveElements", "activeElements", "lastActive", "_elementsEqual", "pluginId", "replay", "hoverOptions", "hover", "deactivated", "activated", "eventFilter", "_handleEvent", "_getActiveElements", "_isClickEvent", "onHover", "clipSelf", "outerAngleClip", "_normalizeAngle", "innerAngleClip", "clipWidth", "closePath", "rect", "clipArc", "pixelMargin", "angleMargin", "toRadiusCorners", "_readValueToProps", "parseBorderRadius", "angleDelta", "o", "halfThickness", "innerLimit", "computeOuterLimit", "outerArcLimit", "outerStart", "outerEnd", "innerStart", "innerEnd", "rThetaToXY", "theta", "pathArc", "innerR", "spacingOffset", "alpha", "noSpacingInnerRadius", "noSpacingOuterRadius", "avNogSpacingRadius", "adjustedAngle", "beta", "angleOffset", "outerStartAdjustedRadius", "outerEndAdjustedRadius", "outerStartAdjustedAngle", "outerEndAdjustedAngle", "innerStartAdjustedRadius", "innerEndAdjustedRadius", "innerStartAdjustedAngle", "innerEndAdjustedAngle", "outerMidAdjustedAngle", "pCenter", "p4", "innerMidAdjustedAngle", "p8", "outerStartX", "outerStartY", "outerEndX", "outerEndY", "drawArc", "fullCircles", "inner", "selfJoin", "ArcElement", "chartX", "chartY", "rAdjust", "nonZeroBetween", "betweenAngles", "withinRadius", "_isBetween", "halfAngle", "halfRadius", "translate", "fix", "radiusOffset", "setStyle", "lineCap", "borderCapStyle", "previous", "getLineMethod", "stepped", "_steppedLineTo", "tension", "cubicInterpolationMode", "_bezierCurveTo", "pathVars", "paramsStart", "paramsEnd", "segmentStart", "segmentEnd", "outside", "pathSegment", "lineMethod", "fastPathSegment", "avgX", "countX", "prevX", "lastY", "pointIndex", "drawX", "truncX", "_getSegmentMethod", "useFastPath", "_getInterpolationMethod", "_steppedInterpolation", "_bezierInterpolation", "_pointInLine", "strokePathWithCache", "path", "_path", "Path2D", "strokePathDirect", "segments", "segmentMethod", "usePath2D", "LineElement", "capBezierPoints", "_points", "_segments", "_pointsUpdated", "_updateBezierControlPoints", "_computeSegments", "interpolate", "_boundSegments", "_interpolate", "interpolated", "hitRadius", "PointElement", "hoverRadius", "mouseX", "mouseY", "inXRange", "inYRange", "drawPoint", "getBarBounds", "bar", "half", "skipOrLimit", "parseBorderWidth", "maxW", "maxH", "toTRBL", "toTRBLCorners", "maxR", "enableBorder", "topLeft", "topRight", "bottomLeft", "bottomRight", "boundingRects", "bounds", "outer", "skipX", "skipY", "skipBoth", "hasRadius", "addNormalRectPath", "inflateRect", "amount", "refRect", "BarElement", "addRectPath", "addRoundedRectPath", "BORDER_COLORS", "BACKGROUND_COLORS", "replace", "getBorderColor", "getBackgroundColor", "colorizeDefaultDataset", "colorizeDoughnutDataset", "colorizePolarAreaDataset", "getColorizer", "containsColorsDefinitions", "k", "containsColorsDefinition", "containsDefaultColorsDefenitions", "forceOverride", "_args", "chartOptions", "containsColorDefenition", "colorizer", "lttbDecimation", "samples", "decimated", "bucketWidth", "sampledIndex", "endIndex", "maxAreaPoint", "maxArea", "nextA", "avgY", "avgRangeStart", "avgRangeEnd", "avgRangeLength", "rangeOffs", "rangeTo", "pointAx", "pointAy", "minMaxDecimation", "minIndex", "maxIndex", "startIndex", "xMin", "xMax", "dx", "lastIndex", "intermediateIndex1", "intermediateIndex2", "cleanDecimatedDataset", "defineProperty", "configurable", "enumerable", "writable", "cleanDecimatedData", "getStartAndCountOfVisiblePointsSimplified", "pointCount", "algorithm", "beforeElementsUpdate", "xAxis", "threshold", "tpoints", "_findSegmentEnd", "_getBounds", "targetSegments", "tgt", "subBounds", "fillSources", "_boundSegment", "fillSource", "_getEdge", "_pointsFromSegments", "boundary", "linePoints", "_createBoundaryLine", "_shouldApplyFill", "_resolveTarget", "sources", "propagate", "visited", "_decodeFill", "parseFillOption", "parseFloat", "decodeTargetIndex", "firstCh", "_getTargetPixel", "_getTargetValue", "fillOption", "_buildStackLine", "sourcePoints", "linesBelow", "getLinesBelow", "addPointsBelow", "below", "unshift", "sourcePoint", "postponed", "findPoint", "pointValue", "firstValue", "lastValue", "simpleArc", "_getTarget", "getLineByIndex", "computeBoundary", "computeCircularBoundary", "computeLinearBoundary", "_drawfill", "lineOpts", "above", "doFill", "fillColor", "clipVertical", "clipHorizontal", "clipY", "lineLoop", "clipX", "src", "notShape", "clipBounds", "interpolatedLineTo", "targetLoop", "interpolatedPoint", "afterDatasetsUpdate", "$filler", "beforeDraw", "drawTime", "beforeDatasetsDraw", "beforeDatasetDraw", "getBoxSize", "labelOpts", "boxHeight", "boxWidth", "usePointStyle", "pointStyleWidth", "itemHeight", "itemsEqual", "Legend", "_added", "legendHitBoxes", "_hoveredItem", "doughnutMode", "legendItems", "columnSizes", "lineWidths", "buildLabels", "labelFont", "_computeTitleHeight", "_fitRows", "_fitCols", "hitboxes", "totalHeight", "row", "itemWidth", "measureText", "_itemHeight", "heightLimit", "totalWidth", "currentColWidth", "currentColHeight", "col", "calculateItemSize", "adjustHitBoxes", "rtl", "rtlHelper", "getRtlAdapter", "hitbox", "leftForLtr", "_draw", "defaultColor", "halfFontSize", "cursor", "drawLegendBox", "drawOptions", "SQRT2", "xPlus", "drawPointLegend", "yBoxTop", "xBoxLeft", "fillText", "strikethrough", "overrideTextDirection", "textDirection", "textWidth", "setWidth", "realX", "_textX", "fontLineHeight", "calculateLegendItemHeight", "restoreTextDirection", "titleFont", "titlePadding", "topPaddingPlusHalfFontSize", "_getLegendItemAt", "hitBox", "lh", "handleEvent", "isListened", "hoveredItem", "sameItem", "onLeave", "calculateItemWidth", "calculateItemHeight", "legendItemText", "_element", "afterEvent", "ci", "Title", "_padding", "textSize", "_drawArgs", "fontOpts", "createTitle", "titleBlock", "WeakMap", "positioners", "average", "xSet", "xAverage", "eventPosition", "nearestElement", "distanceBetweenPoints", "tp", "pushOrConcat", "toPush", "apply", "splitNewlines", "str", "String", "createTooltipItem", "formattedValue", "getTooltipSize", "tooltip", "body", "footer", "bodyFont", "footerFont", "titleLineCount", "footerLineCount", "bodyLineItemCount", "combinedBodyLength", "bodyItem", "before", "after", "beforeBody", "afterBody", "titleSpacing", "titleMarginBottom", "bodyLineHeight", "displayColors", "bodySpacing", "footerMarginTop", "footerSpacing", "widthPadding", "maxLineWidth", "determineYAlign", "doesNotFitWithAlign", "xAlign", "caret", "caretSize", "caretPadding", "determineXAlign", "yAlign", "chartWidth", "determineAlignment", "alignX", "alignY", "paddingAndSize", "getBackgroundPoint", "alignment", "cornerRadius", "getAlignedX", "getBeforeAfterBodyLines", "createTooltipContext", "tooltipItems", "overrideCallbacks", "defaultCallbacks", "beforeTitle", "noop", "labelCount", "afterTitle", "beforeLabel", "tooltipItem", "labelColor", "labelTextColor", "bodyColor", "labelPointStyle", "afterLabel", "beforeFooter", "afterFooter", "invokeCallbackWithFallback", "Tooltip", "opacity", "_eventPosition", "_size", "_cachedAnimations", "_tooltipItems", "dataPoints", "caretX", "caretY", "labelColors", "labelPointStyles", "labelTextColors", "getTitle", "getBeforeBody", "getBody", "bodyItems", "scoped", "getAfterBody", "getFooter", "_createItems", "itemSort", "positionAndSize", "backgroundPoint", "external", "drawCaret", "tooltipPoint", "caretPosition", "getCaretPosition", "x3", "y3", "ptX", "ptY", "pt", "titleColor", "_drawColorBox", "colorX", "rtlColorX", "yOffSet", "colorY", "multiKeyBackground", "outerX", "innerX", "strokeRect", "drawBody", "bodyAlign", "xLinePadding", "fillLineOfText", "bodyAlignForCalculation", "textColor", "drawFooter", "footerAlign", "footerColor", "tooltipSize", "quadraticCurveTo", "_updateAnimationTarget", "animX", "animY", "_willRender", "hasTooltipContent", "globalAlpha", "positionChanged", "_positionChanged", "_ignoreReplayEvents", "afterInit", "afterDraw", "_fallback", "addIfString", "addedLabels", "findOrAddLabel", "lastIndexOf", "_getLabelForValue", "CategoryScale", "_startValue", "_valueRange", "_addedLabels", "added", "generateTicks", "generationOptions", "dataRange", "MIN_SPACING", "precision", "maxTicks", "maxDigits", "includeBounds", "unit", "maxSpaces", "rmin", "rmax", "countDefined", "minSpacing", "niceNum", "niceMin", "niceMax", "numSpaces", "almostWhole", "almostEquals", "decimalPlaces", "_decimalPlaces", "relativeLabelSize", "tickValue", "rad", "LinearScaleBase", "_endValue", "handleTickRangeOptions", "setMin", "setMax", "minSign", "maxSign", "getTickLimit", "stepSize", "computeTickLimit", "numericGeneratorOptions", "_setMinAndMaxByKey", "LinearScale", "Ticks", "formatters", "numeric", "log10Floor", "log10", "changeExponent", "m", "isMajor", "tickVal", "steps", "rangeExp", "rangeStep", "startExp", "minExp", "exp", "significand", "lastTick", "LogarithmicScale", "logarithmic", "_zero", "getTickBackdropHeight", "measureLabelSize", "_longestText", "determineLimits", "fitWithPointLabels", "limits", "valueCount", "_pointLabels", "pointLabelOpts", "additionalAngle", "centerPointLabels", "getPointLabelContext", "getPointPosition", "drawingArea", "plFont", "hLimits", "vLimits", "updateLimits", "setCenterPoint", "_pointLabelItems", "buildPointLabelItems", "createPointLabelItem", "itemOpts", "outerDistance", "extra", "pointLabelPosition", "yForAngle", "getTextAlignForAngle", "leftForTextAlign", "isNotOverlapped", "apexesInArea", "drawPointLabelBox", "backdropLeft", "backdropTop", "backdropWidth", "backdropHeight", "drawPointLabels", "pathRadiusLine", "drawRadiusLine", "gridLineOpts", "createPointLabelContext", "RadialLinearScale", "animate", "leftMovement", "rightMovement", "topMovement", "bottomMovement", "angleMultiplier", "scalingFactor", "getValueForDistanceFromCenter", "scaledDistance", "pointLabel", "distanceFromCenter", "getBasePosition", "getPointLabelPosition", "rotate", "INTERVALS", "millisecond", "common", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "UNITS", "sorter", "input", "adapter", "_adapter", "parser", "isoWeekday", "_parseOpts", "determineUnitForAutoTicks", "minUnit", "capacity", "interval", "MAX_SAFE_INTEGER", "determineUnitForFormatting", "determineMajorUnit", "addTick", "time", "timestamps", "_lookup", "timestamp", "setMajorTicks", "majorUnit", "ticksFromTimestamps", "TimeScale", "adapters", "displayFormats", "_unit", "_majorUnit", "_offsets", "_normalized", "normalized", "_applyBounds", "_getLabelBounds", "getLabelTimestamps", "timeOpts", "_generate", "_filterBetween", "_getLabelCapacity", "initOffsets", "offsetAfterAutoskip", "getDecimalForValue", "minor", "weekday", "hasWeekday", "getDataTimestamps", "tooltipFormat", "datetime", "fmt", "_tickFormatFunction", "formatter", "minorFormat", "majorFormat", "offsets", "_getLabelSize", "ticksOpts", "tickLabelWidth", "cosRotation", "sinRotation", "tickFontSize", "exampleTime", "exampleLabel", "normalize", "table", "prevSource", "nextSource", "prevTarget", "nextTarget", "span", "TimeSeriesScale", "_table", "_minPos", "_tableRange", "_getTimestampsForTable", "buildLookupTable", "registerables", "debounce", "scales", "scale", "range", "zoom", "center", "delta", "offset", "epsilon", "from", "to", "labels", "pan", "round", "end", "width", "height", "ratio", "distance", "Hammer", "version", "draw", "htmx", "str", "global", "ancestor", "callback", "offset", "selector", "start", "elt", "extensions", "parentElt", "string", "element", "_resolve", "elements", "clone", "validate", "prompt", "origin", "array", "index", "resolve", "target", "event", "callback", "object", "height", "element", "index", "array", "width", "map", "string", "length", "str", "location", "set", "scale", "center", "to", "from", "_PropertyKeys", "_ComponentUtil", "element", "matches", "height", "width", "map", "callback", "_TooltipStateManager", "location", "elements", "delta", "length", "str", "distance", "resolve", "index", "_ModuleRegistry", "width", "height", "element", "_RowNode", "callback", "formatValue", "width", "height", "diff", "_ManagedFocusFeature", "apply", "isValid", "index", "elements", "from", "year", "month", "day", "_AbstractHeaderCellCtrl", "resolve", "setAttribute", "version", "height", "width", "callback", "start", "width", "end", "diff", "delta", "index", "offset", "height", "width", "height", "callback", "index", "ranges", "range", "_CellCtrl", "element", "_RowCtrl", "names", "offset", "elements", "pad", "_MouseEventService", "diff", "formatValue", "ranges", "range", "index", "elements", "element", "offset", "height", "callback", "version", "block", "end", "index", "start", "end", "element", "positions", "callback", "removeListeners", "resolve", "diff", "height", "_FocusService", "location", "formatValue", "addEventListener", "getState", "width", "version", "validate", "object", "_GridOptionsService", "map", "set", "_GlobalGridOptions", "mod2", "registry", "names", "index", "add", "length", "diff", "callback", "isPivotMode", "element", "time", "number", "hex", "getHeaders", "offset", "str", "block", "VERSION", "__defProp", "__getOwnPropDesc", "__export", "callback2", "interpolate", "getDocument", "getWindow", "clamp", "round", "mod", "_BBox", "_Node", "Node", "sign", "_Color", "str", "hex", "alpha", "hue", "Color", "isArray", "isFunction", "isObject", "isNumber", "clone2", "SKIP_JS_BUILTINS", "Animation", "to", "_ContinuousScale", "arraysEqual", "toArray", "index", "extent2", "_BandScale", "self", "FONT_STYLE", "fill", "_LogScale", "TimeScale", "_OrdinalTimeScale", "_Matrix", "elements2", "_Group", "skip", "toRadians", "toDegrees", "color", "_Shape", "colors", "strokeWidth", "fontString", "_Text", "lineDash", "h2", "labels", "_StateMachine", "defaults", "Tooltip", "_Layer", "fillOpacity", "_CartesianCrossLine", "_Axis", "names", "_CartesianAxis", "_CategoryAxis", "ModuleRegistry", "resolve", "version", "formatters", "_HdpiCanvas", "_SpriteRenderer", "_InteractionManager", "ContextMenu", "addHandler", "zoom2", "round2", "_DataController", "_SyncManager", "cleanup", "_Chart", "Chart", "_Cross", "_Diamond", "_Plus", "_Triangle", "mod2", "map", "_AgChartInstanceProxy", "LinearScale", "Legend", "swap", "shadow", "from", "rotate", "overrides", "elements", "positions", "zoom", "validators", "callback", "_ChartTheme", "licenseKey", "_AgChartsInternal", "rotate2", "_ArrowUp", "clone", "from2", "_HierarchyNode", "_AxisTicks", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "__copyProps", "to", "from", "mod", "_LicenseManager", "licenseKey", "version", "day", "year", "matches", "VERSION", "index", "diff", "callback", "start", "positions", "str", "isArray", "_AgPanel", "width", "height", "elements", "element", "isValid", "string", "VERSION2", "main_esm_exports", "range", "end", "offset", "VERSION3", "seriesType", "chartType", "isStacked", "color", "hue", "VERSION4", "SKIP_JS_BUILTINS", "set", "overrides", "map", "isString", "isBoolean", "themes", "hex", "alpha", "fill", "array", "sanitizeHtml", "keyMapper", "angle", "center", "toRadians", "area", "sum", "length", "offset2", "length2", "ratio", "lineTo", "merge", "ranges", "SOURCE_PASTE", "VERSION5", "resolve", "set2", "TreeNode", "add", "VERSION6", "second", "delta", "addListeners", "getBorderColor", "rotate", "numberFormat", "getFont", "getPath", "names", "location", "collapseAll", "object", "chartTypes", "setFilterModel", "formatValue", "apply", "isLastRowIndexKnown", "block", "getValue", "isDate2", "getMarker", "extent", "isNumber", "isString2", "isStringObject", "isDate", "createId", "Padding", "LinearScale", "BandScale", "TimeScale", "Transformable", "distance", "toTooltipHtml", "defaults", "extent2", "BandScale2", "Label", "isNumber2", "isNumber3", "sparkline"]
}
