@htmlbricks/hb-chartjs 0.50.0-alpha.9 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/main.iife.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.iife.js","sources":["../../../node_modules/svelte/src/internal/disclose-version.js","../../../node_modules/svelte/src/constants.js","../../../node_modules/esm-env/false.js","../../../node_modules/svelte/src/internal/shared/utils.js","../../../node_modules/svelte/src/internal/client/constants.js","../../../node_modules/svelte/src/internal/shared/errors.js","../../../node_modules/svelte/src/internal/client/errors.js","../../../node_modules/svelte/src/internal/client/warnings.js","../../../node_modules/svelte/src/internal/client/dom/hydration.js","../../../node_modules/svelte/src/internal/client/reactivity/equality.js","../../../node_modules/svelte/src/internal/flags/index.js","../../../node_modules/svelte/src/internal/client/context.js","../../../node_modules/svelte/src/internal/client/error-handling.js","../../../node_modules/svelte/src/internal/client/dom/task.js","../../../node_modules/svelte/src/internal/client/reactivity/deriveds.js","../../../node_modules/svelte/src/internal/client/reactivity/batch.js","../../../node_modules/svelte/src/internal/client/reactivity/sources.js","../../../node_modules/svelte/src/internal/client/proxy.js","../../../node_modules/svelte/src/internal/client/dom/operations.js","../../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../../../node_modules/svelte/src/internal/client/reactivity/effects.js","../../../node_modules/svelte/src/internal/client/runtime.js","../../../node_modules/svelte/src/internal/client/dom/elements/events.js","../../../node_modules/svelte/src/internal/client/dom/reconciler.js","../../../node_modules/svelte/src/internal/client/dom/template.js","../../../node_modules/svelte/src/utils.js","../../../node_modules/svelte/src/internal/client/render.js","../../../node_modules/svelte/src/index-client.js","../../../node_modules/svelte/src/internal/client/dom/css.js","../../../node_modules/svelte/src/internal/client/reactivity/props.js","../../../node_modules/svelte/src/legacy/legacy-client.js","../../../node_modules/svelte/src/internal/client/dom/elements/custom-element.js","../../../node_modules/debounce/index.js","../../../node_modules/@kurkle/color/dist/color.esm.js","../../../node_modules/chart.js/dist/chunks/helpers.dataset.js","../../../node_modules/chart.js/dist/chart.js","../../../src/wc/chartjs/component.wc.svelte"],"sourcesContent":["import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error\n\t((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);\n}\n","export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const TEMPLATE_USE_SVG = 1 << 2;\nexport const TEMPLATE_USE_MATHML = 1 << 3;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\n\nexport const UNINITIALIZED = Symbol();\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n","export default false;\n","// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var index_of = Array.prototype.indexOf;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\nexport var is_extensible = Object.isExtensible;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template T\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n\n/**\n * When encountering a situation like `let [a, b, c] = $derived(blah())`,\n * we need to stash an intermediate value that `a`, `b`, and `c` derive\n * from, in case it's an iterable\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} value\n * @param {number} [n]\n * @returns {Array<T>}\n */\nexport function to_array(value, n) {\n\t// return arrays unchanged\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\n\t// if value is not iterable, or `n` is unspecified (indicates a rest\n\t// element, which means we're not concerned about unbounded iterables)\n\t// convert to an array with `Array.from`\n\tif (n === undefined || !(Symbol.iterator in value)) {\n\t\treturn Array.from(value);\n\t}\n\n\t// otherwise, populate an array with `n` values\n\n\t/** @type {T[]} */\n\tconst array = [];\n\n\tfor (const element of value) {\n\t\tarray.push(element);\n\t\tif (array.length === n) break;\n\t}\n\n\treturn array;\n}\n","export const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\nexport const UNOWNED = 1 << 8;\nexport const DISCONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\nexport const EFFECT_RAN = 1 << 15;\n/** 'Transparent' effects do not create a transition boundary */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const INSPECT_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\n\n// Flags used for async\nexport const REACTION_IS_UPDATING = 1 << 21;\nexport const ASYNC = 1 << 22;\n\nexport const ERROR_VALUE = 1 << 23;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\nexport const PROXY_PATH_SYMBOL = Symbol('proxy path');\n\n/** allow users to ignore aborted signal errors if `reason.name === 'StaleReactionError` */\nexport const STALE_REACTION = new (class StaleReactionError extends Error {\n\tname = 'StaleReactionError';\n\tmessage = 'The reaction that called `getAbortSignal()` was re-run or destroyed';\n})();\n\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot await outside a `<svelte:boundary>` with a `pending` snippet\n * @returns {never}\n */\nexport function await_outside_boundary() {\n\tif (DEV) {\n\t\tconst error = new Error(`await_outside_boundary\\nCannot await outside a \\`<svelte:boundary>\\` with a \\`pending\\` snippet\\nhttps://svelte.dev/e/await_outside_boundary`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/await_outside_boundary`);\n\t}\n}\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n * @returns {never}\n */\nexport function invalid_snippet_arguments() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet_arguments\\nA snippet function was passed invalid arguments. Snippets should only be instantiated via \\`{@render ...}\\`\\nhttps://svelte.dev/e/invalid_snippet_arguments`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet_arguments`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n * @returns {never}\n */\nexport function snippet_without_render_tag() {\n\tif (DEV) {\n\t\tconst error = new Error(`snippet_without_render_tag\\nAttempted to render a snippet without a \\`{@render}\\` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change \\`{snippet}\\` to \\`{@render snippet()}\\`.\\nhttps://svelte.dev/e/snippet_without_render_tag`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/snippet_without_render_tag`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nexport * from '../shared/errors.js';\n\n/**\n * Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n * @returns {never}\n */\nexport function async_derived_orphan() {\n\tif (DEV) {\n\t\tconst error = new Error(`async_derived_orphan\\nCannot create a \\`$derived(...)\\` with an \\`await\\` expression outside of an effect tree\\nhttps://svelte.dev/e/async_derived_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/async_derived_orphan`);\n\t}\n}\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\nCalling \\`${method}\\` on a component instance (of ${component}) is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value\n\t\t\t? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}`\n\t\t\t: `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * `$effect.pending()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function effect_pending_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_pending_outside_reaction\\n\\`$effect.pending()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/effect_pending_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_pending_outside_reaction`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Cannot use `flushSync` inside an effect\n * @returns {never}\n */\nexport function flush_sync_in_effect() {\n\tif (DEV) {\n\t\tconst error = new Error(`flush_sync_in_effect\\nCannot use \\`flushSync\\` inside an effect\\nhttps://svelte.dev/e/flush_sync_in_effect`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/flush_sync_in_effect`);\n\t}\n}\n\n/**\n * `getAbortSignal()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function get_abort_signal_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`get_abort_signal_outside_reaction\\n\\`getAbortSignal()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/get_abort_signal_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n * @returns {never}\n */\nexport function set_context_after_init() {\n\tif (DEV) {\n\t\tconst error = new Error(`set_context_after_init\\n\\`setContext\\` must be called when a component first initializes, not in a subsequent effect or after an \\`await\\` expression\\nhttps://svelte.dev/e/set_context_after_init`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/set_context_after_init`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside \\`$derived(...)\\`, \\`$inspect(...)\\` or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n * @returns {never}\n */\nexport function svelte_boundary_reset_onerror() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_boundary_reset_onerror\\nA \\`<svelte:boundary>\\` \\`reset\\` function cannot be called while an error is still being handled\\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);\n\t}\n}","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}","/** @import { TemplateNode } from '#client' */\n\nimport { COMMENT_NODE } from '#client/constants';\nimport {\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n\tHYDRATION_START_ELSE\n} from '../../../constants.js';\nimport * as w from '../warnings.js';\nimport { get_next_sibling } from './operations.js';\n\n/**\n * Use this variable to guard everything related to hydration code so it can be treeshaken out\n * if the user doesn't use the `hydrate` method and these code paths are therefore not needed.\n */\nexport let hydrating = false;\n\n/** @param {boolean} value */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * The node that is currently being hydrated. This starts out as the first node inside the opening\n * <!--[--> comment, and updates each time a component calls `$.child(...)` or `$.sibling(...)`.\n * When entering a block (e.g. `{#if ...}`), `hydrate_node` is the block opening comment; by the\n * time we leave the block it is the closing comment, which serves as the block's anchor.\n * @type {TemplateNode}\n */\nexport let hydrate_node;\n\n/** @param {TemplateNode} node */\nexport function set_hydrate_node(node) {\n\tif (node === null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(/** @type {TemplateNode} */ (get_next_sibling(hydrate_node)));\n}\n\n/** @param {TemplateNode} node */\nexport function reset(node) {\n\tif (!hydrating) return;\n\n\t// If the node has remaining siblings, something has gone wrong\n\tif (get_next_sibling(hydrate_node) !== null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\thydrate_node = node;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n */\nexport function hydrate_template(template) {\n\tif (hydrating) {\n\t\t// @ts-expect-error TemplateNode doesn't include DocumentFragment, but it's actually fine\n\t\thydrate_node = template.content;\n\t}\n}\n\nexport function next(count = 1) {\n\tif (hydrating) {\n\t\tvar i = count;\n\t\tvar node = hydrate_node;\n\n\t\twhile (i--) {\n\t\t\tnode = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/**\n * Removes all nodes starting at `hydrate_node` up until the next hydration end comment\n */\nexport function remove_nodes() {\n\tvar depth = 0;\n\tvar node = hydrate_node;\n\n\twhile (true) {\n\t\tif (node.nodeType === COMMENT_NODE) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\n\n\t\t\tif (data === HYDRATION_END) {\n\t\t\t\tif (depth === 0) return node;\n\t\t\t\tdepth -= 1;\n\t\t\t} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\n\t\tvar next = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n *\n * @param {TemplateNode} node\n */\nexport function read_hydration_instruction(node) {\n\tif (!node || node.nodeType !== COMMENT_NODE) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn /** @type {Comment} */ (node).data;\n}\n","/** @import { Equals } from '#client' */\n\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","export let async_mode_flag = false;\nexport let legacy_mode_flag = false;\nexport let tracing_mode_flag = false;\n\nexport function enable_async_mode_flag() {\n\tasync_mode_flag = true;\n}\n\n/** ONLY USE THIS DURING TESTING */\nexport function disable_async_mode_flag() {\n\tasync_mode_flag = false;\n}\n\nexport function enable_legacy_mode_flag() {\n\tlegacy_mode_flag = true;\n}\n\nexport function enable_tracing_mode_flag() {\n\ttracing_mode_flag = true;\n}\n","/** @import { ComponentContext, DevStackEntry, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\nimport { active_effect, active_reaction } from './runtime.js';\nimport { create_user_effect } from './reactivity/effects.js';\nimport { async_mode_flag, legacy_mode_flag } from '../flags/index.js';\nimport { FILENAME } from '../../constants.js';\nimport { BRANCH_EFFECT, EFFECT_RAN } from './constants.js';\n\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/** @type {DevStackEntry | null} */\nexport let dev_stack = null;\n\n/** @param {DevStackEntry | null} stack */\nexport function set_dev_stack(stack) {\n\tdev_stack = stack;\n}\n\n/**\n * Execute a callback with a new dev stack entry\n * @param {() => any} callback - Function to execute\n * @param {DevStackEntry['type']} type - Type of block/component\n * @param {any} component - Component function\n * @param {number} line - Line number\n * @param {number} column - Column number\n * @param {Record<string, any>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {any}\n */\nexport function add_svelte_meta(callback, type, component, line, column, additional) {\n\tconst parent = dev_stack;\n\n\tdev_stack = {\n\t\ttype,\n\t\tfile: component[FILENAME],\n\t\tline,\n\t\tcolumn,\n\t\tparent,\n\t\t...additional\n\t};\n\n\ttry {\n\t\treturn callback();\n\t} finally {\n\t\tdev_stack = parent;\n\t}\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n * <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\n\tif (async_mode_flag) {\n\t\tvar flags = /** @type {Effect} */ (active_effect).f;\n\t\tvar valid = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & EFFECT_RAN) === 0;\n\n\t\tif (!valid) {\n\t\t\te.set_context_after_init();\n\t\t}\n\t}\n\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tl: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null\n\t};\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tvar context = /** @type {ComponentContext} */ (component_context);\n\tvar effects = context.e;\n\n\tif (effects !== null) {\n\t\tcontext.e = null;\n\n\t\tfor (var fn of effects) {\n\t\t\tcreate_user_effect(fn);\n\t\t}\n\t}\n\n\tif (component !== undefined) {\n\t\tcontext.x = component;\n\t}\n\n\tcomponent_context = context.p;\n\n\tif (DEV) {\n\t\tdev_current_component_function = component_context?.function ?? null;\n\t}\n\n\treturn component ?? /** @type {T} */ ({});\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n","/** @import { Derived, Effect } from '#client' */\n/** @import { Boundary } from './dom/blocks/boundary.js' */\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../../constants.js';\nimport { is_firefox } from './dom/operations.js';\nimport { ERROR_VALUE, BOUNDARY_EFFECT, EFFECT_RAN } from './constants.js';\nimport { define_property, get_descriptor } from '../shared/utils.js';\nimport { active_effect, active_reaction } from './runtime.js';\n\nconst adjustments = new WeakMap();\n\n/**\n * @param {unknown} error\n */\nexport function handle_error(error) {\n\tvar effect = active_effect;\n\n\t// for unowned deriveds, don't throw until we read the value\n\tif (effect === null) {\n\t\t/** @type {Derived} */ (active_reaction).f |= ERROR_VALUE;\n\t\treturn error;\n\t}\n\n\tif (DEV && error instanceof Error && !adjustments.has(error)) {\n\t\tadjustments.set(error, get_adjustments(error, effect));\n\t}\n\n\tif ((effect.f & EFFECT_RAN) === 0) {\n\t\t// if the error occurred while creating this subtree, we let it\n\t\t// bubble up until it hits a boundary that can handle it\n\t\tif ((effect.f & BOUNDARY_EFFECT) === 0) {\n\t\t\tif (!effect.parent && error instanceof Error) {\n\t\t\t\tapply_adjustments(error);\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t} else {\n\t\t// otherwise we bubble up the effect tree ourselves\n\t\tinvoke_error_boundary(error, effect);\n\t}\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\twhile (effect !== null) {\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\ttry {\n\t\t\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\n\t\teffect = effect.parent;\n\t}\n\n\tif (error instanceof Error) {\n\t\tapply_adjustments(error);\n\t}\n\n\tthrow error;\n}\n\n/**\n * Add useful information to the error message/stack in development\n * @param {Error} error\n * @param {Effect} effect\n */\nfunction get_adjustments(error, effect) {\n\tconst message_descriptor = get_descriptor(error, 'message');\n\n\t// if the message was already changed and it's not configurable we can't change it\n\t// or it will throw a different error swallowing the original error\n\tif (message_descriptor && !message_descriptor.configurable) return;\n\n\tvar indent = is_firefox ? ' ' : '\\t';\n\tvar component_stack = `\\n${indent}in ${effect.fn?.name || '<unknown>'}`;\n\tvar context = effect.ctx;\n\n\twhile (context !== null) {\n\t\tcomponent_stack += `\\n${indent}in ${context.function?.[FILENAME].split('/').pop()}`;\n\t\tcontext = context.p;\n\t}\n\n\treturn {\n\t\tmessage: error.message + `\\n${component_stack}\\n`,\n\t\tstack: error.stack\n\t\t\t?.split('\\n')\n\t\t\t.filter((line) => !line.includes('svelte/src/internal'))\n\t\t\t.join('\\n')\n\t};\n}\n\n/**\n * @param {Error} error\n */\nfunction apply_adjustments(error) {\n\tconst adjusted = adjustments.get(error);\n\n\tif (adjusted) {\n\t\tdefine_property(error, 'message', {\n\t\t\tvalue: adjusted.message\n\t\t});\n\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: adjusted.stack\n\t\t});\n\t}\n}\n","import { run_all } from '../../shared/utils.js';\n\n// Fallback for when requestIdleCallback is not available\nconst request_idle_callback =\n\ttypeof requestIdleCallback === 'undefined'\n\t\t? (/** @type {() => void} */ cb) => setTimeout(cb, 1)\n\t\t: requestIdleCallback;\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\n/** @type {Array<() => void>} */\nlet idle_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_tasks = [];\n\trun_all(tasks);\n}\n\nfunction run_idle_tasks() {\n\tvar tasks = idle_tasks;\n\tidle_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (micro_tasks.length === 0) {\n\t\tqueueMicrotask(run_micro_tasks);\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_idle_task(fn) {\n\tif (idle_tasks.length === 0) {\n\t\trequest_idle_callback(run_idle_tasks);\n\t}\n\n\tidle_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\tif (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\n\n\tif (idle_tasks.length > 0) {\n\t\trun_idle_tasks();\n\t}\n}\n","/** @import { Derived, Effect, Source } from '#client' */\n/** @import { Batch } from './batch.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tMAYBE_DIRTY,\n\tSTALE_REACTION,\n\tUNOWNED,\n\tASYNC\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tset_signal_status,\n\tskip_reaction,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport { async_effect, destroy_effect } from './effects.js';\nimport { inspect_effects, internal_set, set_inspect_effects, source } from './sources.js';\nimport { get_stack } from '../dev/tracing.js';\nimport { tracing_mode_flag } from '../../flags/index.js';\nimport { Boundary } from '../dom/blocks/boundary.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_deriveds, current_batch } from './batch.js';\nimport { unset_context } from './async.js';\n\n/** @type {Effect | null} */\nexport let current_async_effect = null;\n\n/** @param {Effect | null} v */\nexport function set_from_async_derived(v) {\n\tcurrent_async_effect = v;\n}\n\nexport const recent_async_deriveds = new Set();\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\tvar parent_derived =\n\t\tactive_reaction !== null && (active_reaction.f & DERIVED) !== 0\n\t\t\t? /** @type {Derived} */ (active_reaction)\n\t\t\t: null;\n\n\tif (active_effect === null || (parent_derived !== null && (parent_derived.f & UNOWNED) !== 0)) {\n\t\tflags |= UNOWNED;\n\t} else {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: parent_derived ?? active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_stack('CreatedAt');\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [location] If provided, print a warning if the value is not read immediately after update\n * @returns {Promise<Source<V>>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function async_derived(fn, location) {\n\tlet parent = /** @type {Effect | null} */ (active_effect);\n\n\tif (parent === null) {\n\t\te.async_derived_orphan();\n\t}\n\n\tvar boundary = /** @type {Boundary} */ (parent.b);\n\n\tvar promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\t/** @type {Promise<V> | null} */\n\tvar prev = null;\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\tasync_effect(() => {\n\t\tif (DEV) current_async_effect = active_effect;\n\n\t\ttry {\n\t\t\tvar p = fn();\n\t\t\t// Make sure to always access the then property to read any signals\n\t\t\t// it might access, so that we track them as dependencies.\n\t\t\tif (prev) Promise.resolve(p).catch(() => {}); // avoid unhandled rejection\n\t\t} catch (error) {\n\t\t\tp = Promise.reject(error);\n\t\t}\n\n\t\tif (DEV) current_async_effect = null;\n\n\t\tvar r = () => p;\n\t\tpromise = prev?.then(r, r) ?? Promise.resolve(p);\n\n\t\tprev = promise;\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar pending = boundary.is_pending();\n\n\t\tif (should_suspend) {\n\t\t\tboundary.update_pending_count(1);\n\t\t\tif (!pending) batch.increment();\n\t\t}\n\n\t\t/**\n\t\t * @param {any} value\n\t\t * @param {unknown} error\n\t\t */\n\t\tconst handler = (value, error = undefined) => {\n\t\t\tprev = null;\n\n\t\t\tcurrent_async_effect = null;\n\n\t\t\tif (!pending) batch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tif (error !== STALE_REACTION) {\n\t\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\t\tinternal_set(signal, error);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\t\t\t\tsignal.f ^= ERROR_VALUE;\n\t\t\t\t}\n\n\t\t\t\tinternal_set(signal, value);\n\n\t\t\t\tif (DEV && location !== undefined) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal)) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (should_suspend) {\n\t\t\t\tboundary.update_pending_count(-1);\n\t\t\t\tif (!pending) batch.decrement();\n\t\t\t}\n\n\t\t\tunset_context();\n\t\t};\n\n\t\tpromise.then(handler, (e) => handler(null, e || 'unknown'));\n\n\t\tif (batch) {\n\t\t\treturn () => {\n\t\t\t\tqueueMicrotask(() => batch.neuter());\n\t\t\t};\n\t\t}\n\t});\n\n\tif (DEV) {\n\t\t// add a flag that lets this be printed as a derived\n\t\t// when using `$inspect.trace()`\n\t\tsignal.f |= ASYNC;\n\t}\n\n\treturn new Promise((fulfil) => {\n\t\t/** @param {Promise<V>} p */\n\t\tfunction next(p) {\n\t\t\tfunction go() {\n\t\t\t\tif (p === promise) {\n\t\t\t\t\tfulfil(signal);\n\t\t\t\t} else {\n\t\t\t\t\t// if the effect re-runs before the initial promise\n\t\t\t\t\t// resolves, delay resolution until we have a value\n\t\t\t\t\tnext(promise);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.then(go, go);\n\t\t}\n\n\t\tnext(promise);\n\t});\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function user_derived(fn) {\n\tconst d = derived(fn);\n\n\tpush_reaction_value(d);\n\n\treturn d;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived_effects(derived) {\n\tvar effects = derived.effects;\n\n\tif (effects !== null) {\n\t\tderived.effects = null;\n\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdestroy_effect(/** @type {Effect} */ (effects[i]));\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @param {Derived} derived\n * @returns {Effect | null}\n */\nfunction get_derived_parent_effect(derived) {\n\tvar parent = derived.parent;\n\twhile (parent !== null) {\n\t\tif ((parent.f & DERIVED) === 0) {\n\t\t\treturn /** @type {Effect} */ (parent);\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\treturn null;\n}\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(get_derived_parent_effect(derived));\n\n\tif (DEV) {\n\t\tlet prev_inspect_effects = inspect_effects;\n\t\tset_inspect_effects(new Set());\n\t\ttry {\n\t\t\tif (stack.includes(derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_inspect_effects(prev_inspect_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar value = execute_derived(derived);\n\n\tif (!derived.equals(value)) {\n\t\tderived.v = value;\n\t\tderived.wv = increment_write_version();\n\t}\n\n\t// don't mark derived clean if we're reading it inside a\n\t// cleanup function, or it will cache a stale value\n\tif (is_destroying_effect) {\n\t\treturn;\n\t}\n\n\tif (batch_deriveds !== null) {\n\t\tbatch_deriveds.set(derived, derived.v);\n\t} else {\n\t\tvar status =\n\t\t\t(skip_reaction || (derived.f & UNOWNED) !== 0) && derived.deps !== null ? MAYBE_DIRTY : CLEAN;\n\n\t\tset_signal_status(derived, status);\n\t}\n}\n","/** @import { Derived, Effect, Source } from '#client' */\nimport {\n\tBLOCK_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tINERT,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tUSER_EFFECT,\n\tMAYBE_DIRTY\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property } from '../../shared/utils.js';\nimport { get_boundary } from '../dom/blocks/boundary.js';\nimport {\n\tactive_effect,\n\tis_dirty,\n\tis_updating_effect,\n\tset_is_updating_effect,\n\tset_signal_status,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { old_values } from './sources.js';\nimport { unlink_effect } from './effects.js';\nimport { unset_context } from './async.js';\n\n/** @type {Set<Batch>} */\nconst batches = new Set();\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs in non-async mode\n * TODO 6.0 remove this, as non-async mode will go away\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling, we re-evaluate deriveds based on the temporary\n * values of their dependencies rather than their actual values, and cache\n * the results in this map rather than on the deriveds themselves\n * @type {Map<Derived, any> | null}\n */\nexport let batch_deriveds = null;\n\n/** @type {Set<() => void>} */\nexport let effect_pending_updates = new Set();\n\n/** @type {Array<() => void>} */\nlet tasks = [];\n\nfunction dequeue() {\n\tconst task = /** @type {() => void} */ (tasks.shift());\n\n\tif (tasks.length > 0) {\n\t\tqueueMicrotask(dequeue);\n\t}\n\n\ttask();\n}\n\n/** @type {Effect[]} */\nlet queued_root_effects = [];\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nlet is_flushing = false;\nlet is_flushing_sync = false;\n\nexport class Batch {\n\t/**\n\t * The current values of any sources that are updated in this batch\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Source, any>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any sources that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Source, any>}\n\t */\n\t#previous = new Map();\n\n\t/**\n\t * When the batch is committed (and the DOM is updated), we need to remove old branches\n\t * and append new ones by calling the functions added inside (if/each/key/etc) blocks\n\t * @type {Set<() => void>}\n\t */\n\t#callbacks = new Set();\n\n\t/**\n\t * The number of async effects that are currently in flight\n\t */\n\t#pending = 0;\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * True if an async effect inside this batch resolved and\n\t * its parent branch was already deleted\n\t */\n\t#neutered = false;\n\n\t/**\n\t * Async effects (created inside `async_derived`) encountered during processing.\n\t * These run after the rest of the batch has updated, since they should\n\t * always have the latest values\n\t * @type {Effect[]}\n\t */\n\t#async_effects = [];\n\n\t/**\n\t * The same as `#async_effects`, but for effects inside a newly-created\n\t * `<svelte:boundary>` — these do not prevent the batch from committing\n\t * @type {Effect[]}\n\t */\n\t#boundary_async_effects = [];\n\n\t/**\n\t * Template effects and `$effect.pre` effects, which run when\n\t * a batch is committed\n\t * @type {Effect[]}\n\t */\n\t#render_effects = [];\n\n\t/**\n\t * The same as `#render_effects`, but for `$effect` (which runs after)\n\t * @type {Effect[]}\n\t */\n\t#effects = [];\n\n\t/**\n\t * Block effects, which may need to re-run on subsequent flushes\n\t * in order to update internal sources (e.g. each block items)\n\t * @type {Effect[]}\n\t */\n\t#block_effects = [];\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Effect[]}\n\t */\n\t#dirty_effects = [];\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Effect[]}\n\t */\n\t#maybe_dirty_effects = [];\n\n\t/**\n\t * A set of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`\n\t * @type {Set<Effect>}\n\t */\n\tskipped_effects = new Set();\n\n\t/**\n\t *\n\t * @param {Effect[]} root_effects\n\t */\n\tprocess(root_effects) {\n\t\tqueued_root_effects = [];\n\n\t\tprevious_batch = null;\n\n\t\t/** @type {Map<Source, { v: unknown, wv: number }> | null} */\n\t\tvar current_values = null;\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to undo the changes belonging to any batch\n\t\t// other than the current one\n\t\tif (async_mode_flag && batches.size > 1) {\n\t\t\tcurrent_values = new Map();\n\t\t\tbatch_deriveds = new Map();\n\n\t\t\tfor (const [source, current] of this.current) {\n\t\t\t\tcurrent_values.set(source, { v: source.v, wv: source.wv });\n\t\t\t\tsource.v = current;\n\t\t\t}\n\n\t\t\tfor (const batch of batches) {\n\t\t\t\tif (batch === this) continue;\n\n\t\t\t\tfor (const [source, previous] of batch.#previous) {\n\t\t\t\t\tif (!current_values.has(source)) {\n\t\t\t\t\t\tcurrent_values.set(source, { v: source.v, wv: source.wv });\n\t\t\t\t\t\tsource.v = previous;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const root of root_effects) {\n\t\t\tthis.#traverse_effect_tree(root);\n\t\t}\n\n\t\t// if we didn't start any new async work, and no async work\n\t\t// is outstanding from a previous flush, commit\n\t\tif (this.#async_effects.length === 0 && this.#pending === 0) {\n\t\t\tthis.#commit();\n\n\t\t\tvar render_effects = this.#render_effects;\n\t\t\tvar effects = this.#effects;\n\n\t\t\tthis.#render_effects = [];\n\t\t\tthis.#effects = [];\n\t\t\tthis.#block_effects = [];\n\n\t\t\t// If sources are written to, then work needs to happen in a separate batch, else prior sources would be mixed with\n\t\t\t// newly updated sources, which could lead to infinite loops when effects run over and over again.\n\t\t\tprevious_batch = current_batch;\n\t\t\tcurrent_batch = null;\n\n\t\t\tflush_queued_effects(render_effects);\n\t\t\tflush_queued_effects(effects);\n\n\t\t\t// Reinstate the current batch if there was no new one created, as `process()` runs in a loop in `flush_effects()`.\n\t\t\t// That method expects `current_batch` to be set, and could run the loop again if effects result in new effects\n\t\t\t// being scheduled but without writes happening in which case no new batch is created.\n\t\t\tif (current_batch === null) {\n\t\t\t\tcurrent_batch = this;\n\t\t\t} else {\n\t\t\t\tbatches.delete(this);\n\t\t\t}\n\n\t\t\tthis.#deferred?.resolve();\n\t\t} else {\n\t\t\tthis.#defer_effects(this.#render_effects);\n\t\t\tthis.#defer_effects(this.#effects);\n\t\t\tthis.#defer_effects(this.#block_effects);\n\t\t}\n\n\t\tif (current_values) {\n\t\t\tfor (const [source, { v, wv }] of current_values) {\n\t\t\t\t// reset the source to the current value (unless\n\t\t\t\t// it got a newer value as a result of effects running)\n\t\t\t\tif (source.wv <= wv) {\n\t\t\t\t\tsource.v = v;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch_deriveds = null;\n\t\t}\n\n\t\tfor (const effect of this.#async_effects) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\n\t\tfor (const effect of this.#boundary_async_effects) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\n\t\tthis.#async_effects = [];\n\t\tthis.#boundary_async_effects = [];\n\t}\n\n\t/**\n\t * Traverse the effect tree, executing effects or stashing\n\t * them for later execution as appropriate\n\t * @param {Effect} root\n\t */\n\t#traverse_effect_tree(root) {\n\t\troot.f ^= CLEAN;\n\n\t\tvar effect = root.first;\n\n\t\twhile (effect !== null) {\n\t\t\tvar flags = effect.f;\n\t\t\tvar is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;\n\t\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\t\tvar skip = is_skippable_branch || (flags & INERT) !== 0 || this.skipped_effects.has(effect);\n\n\t\t\tif (!skip && effect.fn !== null) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\teffect.f ^= CLEAN;\n\t\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\t\tthis.#effects.push(effect);\n\t\t\t\t} else if (async_mode_flag && (flags & RENDER_EFFECT) !== 0) {\n\t\t\t\t\tthis.#render_effects.push(effect);\n\t\t\t\t} else if ((flags & CLEAN) === 0) {\n\t\t\t\t\tif ((flags & ASYNC) !== 0) {\n\t\t\t\t\t\tvar effects = effect.b?.is_pending()\n\t\t\t\t\t\t\t? this.#boundary_async_effects\n\t\t\t\t\t\t\t: this.#async_effects;\n\n\t\t\t\t\t\teffects.push(effect);\n\t\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\t\tif ((effect.f & BLOCK_EFFECT) !== 0) this.#block_effects.push(effect);\n\t\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar child = effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\teffect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar parent = effect.parent;\n\t\t\teffect = effect.next;\n\n\t\t\twhile (effect === null && parent !== null) {\n\t\t\t\teffect = parent.next;\n\t\t\t\tparent = parent.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (const e of effects) {\n\t\t\tconst target = (e.f & DIRTY) !== 0 ? this.#dirty_effects : this.#maybe_dirty_effects;\n\t\t\ttarget.push(e);\n\n\t\t\t// mark as clean so they get scheduled if they depend on pending async state\n\t\t\tset_signal_status(e, CLEAN);\n\t\t}\n\n\t\teffects.length = 0;\n\t}\n\n\t/**\n\t * Associate a change to a given source with the current\n\t * batch, noting its previous and current values\n\t * @param {Source} source\n\t * @param {any} value\n\t */\n\tcapture(source, value) {\n\t\tif (!this.#previous.has(source)) {\n\t\t\tthis.#previous.set(source, value);\n\t\t}\n\n\t\tthis.current.set(source, source.v);\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t}\n\n\tdeactivate() {\n\t\tcurrent_batch = null;\n\t\tprevious_batch = null;\n\n\t\tfor (const update of effect_pending_updates) {\n\t\t\teffect_pending_updates.delete(update);\n\t\t\tupdate();\n\n\t\t\tif (current_batch !== null) {\n\t\t\t\t// only do one at a time\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tneuter() {\n\t\tthis.#neutered = true;\n\t}\n\n\tflush() {\n\t\tif (queued_root_effects.length > 0) {\n\t\t\tflush_effects();\n\t\t} else {\n\t\t\tthis.#commit();\n\t\t}\n\n\t\tif (current_batch !== this) {\n\t\t\t// this can happen if a `flushSync` occurred during `flush_effects()`,\n\t\t\t// which is permitted in legacy mode despite being a terrible idea\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#pending === 0) {\n\t\t\tbatches.delete(this);\n\t\t}\n\n\t\tthis.deactivate();\n\t}\n\n\t/**\n\t * Append and remove branches to/from the DOM\n\t */\n\t#commit() {\n\t\tif (!this.#neutered) {\n\t\t\tfor (const fn of this.#callbacks) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t}\n\n\t\tthis.#callbacks.clear();\n\t}\n\n\tincrement() {\n\t\tthis.#pending += 1;\n\t}\n\n\tdecrement() {\n\t\tthis.#pending -= 1;\n\n\t\tif (this.#pending === 0) {\n\t\t\tfor (const e of this.#dirty_effects) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tschedule_effect(e);\n\t\t\t}\n\n\t\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tschedule_effect(e);\n\t\t\t}\n\n\t\t\tthis.#render_effects = [];\n\t\t\tthis.#effects = [];\n\n\t\t\tthis.flush();\n\t\t} else {\n\t\t\tthis.deactivate();\n\t\t}\n\t}\n\n\t/** @param {() => void} fn */\n\tadd_callback(fn) {\n\t\tthis.#callbacks.add(fn);\n\t}\n\n\tsettled() {\n\t\treturn (this.#deferred ??= deferred()).promise;\n\t}\n\n\tstatic ensure() {\n\t\tif (current_batch === null) {\n\t\t\tconst batch = (current_batch = new Batch());\n\t\t\tbatches.add(current_batch);\n\n\t\t\tif (!is_flushing_sync) {\n\t\t\t\tBatch.enqueue(() => {\n\t\t\t\t\tif (current_batch !== batch) {\n\t\t\t\t\t\t// a flushSync happened in the meantime\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tbatch.flush();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\t/** @param {() => void} task */\n\tstatic enqueue(task) {\n\t\tif (tasks.length === 0) {\n\t\t\tqueueMicrotask(dequeue);\n\t\t}\n\n\t\ttasks.unshift(task);\n\t}\n}\n\n/**\n * Synchronously flush any pending updates.\n * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n * @template [T=void]\n * @param {(() => T) | undefined} [fn]\n * @returns {T}\n */\nexport function flushSync(fn) {\n\tif (async_mode_flag && active_effect !== null) {\n\t\t// We disallow this because it creates super-hard to reason about stack trace and because it's generally a bad idea\n\t\te.flush_sync_in_effect();\n\t}\n\n\tvar was_flushing_sync = is_flushing_sync;\n\tis_flushing_sync = true;\n\n\ttry {\n\t\tvar result;\n\n\t\tif (fn) {\n\t\t\tflush_effects();\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (queued_root_effects.length === 0) {\n\t\t\t\tcurrent_batch?.flush();\n\n\t\t\t\t// we need to check again, in case we just updated an `$effect.pending()`\n\t\t\t\tif (queued_root_effects.length === 0) {\n\t\t\t\t\t// this would be reset in `flush_effects()` but since we are early returning here,\n\t\t\t\t\t// we need to reset it here as well in case the first time there's 0 queued root effects\n\t\t\t\t\tlast_scheduled_effect = null;\n\n\t\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tflush_effects();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t}\n}\n\nfunction flush_effects() {\n\tvar was_updating_effect = is_updating_effect;\n\tis_flushing = true;\n\n\ttry {\n\t\tvar flush_count = 0;\n\t\tset_is_updating_effect(true);\n\n\t\twhile (queued_root_effects.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\n\t\t\tif (flush_count++ > 1000) {\n\t\t\t\tif (DEV) {\n\t\t\t\t\tvar updates = new Map();\n\n\t\t\t\t\tfor (const source of batch.current.keys()) {\n\t\t\t\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tentry.count += update.count;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const update of updates.values()) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error(update.error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tinfinite_loop_guard();\n\t\t\t}\n\n\t\t\tbatch.process(queued_root_effects);\n\t\t\told_values.clear();\n\t\t}\n\t} finally {\n\t\tis_flushing = false;\n\t\tset_is_updating_effect(was_updating_effect);\n\n\t\tlast_scheduled_effect = null;\n\t}\n}\n\nfunction infinite_loop_guard() {\n\ttry {\n\t\te.effect_update_depth_exceeded();\n\t} catch (error) {\n\t\tif (DEV) {\n\t\t\t// stack contains no useful information, replace it\n\t\t\tdefine_property(error, 'stack', { value: '' });\n\t\t}\n\n\t\t// Best effort: invoke the boundary nearest the most recent\n\t\t// effect and hope that it's relevant to the infinite loop\n\t\tinvoke_error_boundary(error, last_scheduled_effect);\n\t}\n}\n\n/** @type {Effect[] | null} */\nexport let eager_block_effects = null;\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tvar i = 0;\n\n\twhile (i < length) {\n\t\tvar effect = effects[i++];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {\n\t\t\teager_block_effects = [];\n\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (effect.deps === null && effect.first === null && effect.nodes_start === null) {\n\t\t\t\t// if there's no teardown or abort controller we completely unlink\n\t\t\t\t// the effect from the graph\n\t\t\t\tif (effect.teardown === null && effect.ac === null) {\n\t\t\t\t\t// remove this effect from the graph\n\t\t\t\t\tunlink_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\t// keep the effect in the graph, but free up some memory\n\t\t\t\t\teffect.fn = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If update_effect() has a flushSync() in it, we may have flushed another flush_queued_effects(),\n\t\t\t// which already handled this logic and did set eager_block_effects to null.\n\t\t\tif (eager_block_effects?.length > 0) {\n\t\t\t\t// TODO this feels incorrect! it gets the tests passing\n\t\t\t\told_values.clear();\n\n\t\t\t\tfor (const e of eager_block_effects) {\n\t\t\t\t\tupdate_effect(e);\n\t\t\t\t}\n\n\t\t\t\teager_block_effects = [];\n\t\t\t}\n\t\t}\n\t}\n\n\teager_block_effects = null;\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function schedule_effect(signal) {\n\tvar effect = (last_scheduled_effect = signal);\n\n\twhile (effect.parent !== null) {\n\t\teffect = effect.parent;\n\t\tvar flags = effect.f;\n\n\t\t// if the effect is being scheduled because a parent (each/await/etc) block\n\t\t// updated an internal source, bail out or we'll cause a second flush\n\t\tif (is_flushing && effect === active_effect && (flags & BLOCK_EFFECT) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\tif ((flags & CLEAN) === 0) return;\n\t\t\teffect.f ^= CLEAN;\n\t\t}\n\t}\n\n\tqueued_root_effects.push(effect);\n}\n\nexport function suspend() {\n\tvar boundary = get_boundary();\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar pending = boundary.is_pending();\n\n\tboundary.update_pending_count(1);\n\tif (!pending) batch.increment();\n\n\treturn function unsuspend() {\n\t\tboundary.update_pending_count(-1);\n\n\t\tif (!pending) {\n\t\t\tbatch.activate();\n\t\t\tbatch.decrement();\n\t\t} else {\n\t\t\tbatch.deactivate();\n\t\t}\n\n\t\tunset_context();\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tbatches.clear();\n}\n","/** @import { Derived, Effect, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tset_untracked_writes,\n\tset_signal_status,\n\tuntrack,\n\tincrement_write_version,\n\tupdate_effect,\n\tcurrent_sources,\n\tis_dirty,\n\tuntracking,\n\tis_destroying_effect,\n\tpush_reaction_value\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tINSPECT_EFFECT,\n\tUNOWNED,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { get_stack, tag_proxy } from '../dev/tracing.js';\nimport { component_context, is_runes } from '../context.js';\nimport { Batch, eager_block_effects, schedule_effect } from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\n\n/** @type {Set<any>} */\nexport let inspect_effects = new Set();\n\n/** @type {Map<Source, any>} */\nexport const old_values = new Map();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_inspect_effects(v) {\n\tinspect_effects = v;\n}\n\nlet inspect_effects_deferred = false;\n\nexport function set_inspect_effects_deferred() {\n\tinspect_effects_deferred = true;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\n// TODO rename this to `state` throughout the codebase\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\trv: 0,\n\t\twv: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_stack('CreatedAt');\n\t\tsignal.updated = null;\n\t\tsignal.set_during_effect = false;\n\t\tsignal.trace = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function state(v, stack) {\n\tconst s = source(v, stack);\n\n\tpush_reaction_value(s);\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false, trackable = true) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {boolean} [should_proxy]\n * @returns {V}\n */\nexport function set(source, value, should_proxy = false) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t// since we are untracking the function inside `$inspect.with` we need to add this check\n\t\t// to ensure we error if state is set inside an inspect effect\n\t\t(!untracking || (active_reaction.f & INSPECT_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | INSPECT_EFFECT)) !== 0 &&\n\t\t!current_sources?.includes(source)\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\tlet new_value = should_proxy ? proxy(value) : value;\n\n\tif (DEV) {\n\t\ttag_proxy(new_value, /** @type {string} */ (source.label));\n\t}\n\n\treturn internal_set(source, new_value);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @returns {V}\n */\nexport function internal_set(source, value) {\n\tif (!source.equals(value)) {\n\t\tvar old_value = source.v;\n\n\t\tif (is_destroying_effect) {\n\t\t\told_values.set(source, value);\n\t\t} else {\n\t\t\told_values.set(source, old_value);\n\t\t}\n\n\t\tsource.v = value;\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, old_value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tconst error = get_stack('UpdatedAt');\n\n\t\t\t\tif (error !== null) {\n\t\t\t\t\tsource.updated ??= new Map();\n\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tentry.count++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (active_effect !== null) {\n\t\t\t\tsource.set_during_effect = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\t// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies\n\t\t\tif ((source.f & DIRTY) !== 0) {\n\t\t\t\texecute_derived(/** @type {Derived} */ (source));\n\t\t\t}\n\t\t\tset_signal_status(source, (source.f & UNOWNED) === 0 ? CLEAN : MAYBE_DIRTY);\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\tmark_reactions(source, DIRTY);\n\n\t\t// It's possible that the current reaction might not have up-to-date dependencies\n\t\t// whilst it's actively running. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0\n\t\t) {\n\t\t\tif (untracked_writes === null) {\n\t\t\t\tset_untracked_writes([source]);\n\t\t\t} else {\n\t\t\t\tuntracked_writes.push(source);\n\t\t\t}\n\t\t}\n\n\t\tif (DEV && inspect_effects.size > 0 && !inspect_effects_deferred) {\n\t\t\tflush_inspect_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_inspect_effects() {\n\tinspect_effects_deferred = false;\n\n\tconst inspects = Array.from(inspect_effects);\n\n\tfor (const effect of inspects) {\n\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\n\t\tif (is_dirty(effect)) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\tinspect_effects.clear();\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(source, d = 1) {\n\tvar value = get(source);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(source, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(source, d = 1) {\n\tvar value = get(source);\n\n\t// @ts-expect-error\n\treturn set(source, d === 1 ? ++value : --value);\n}\n\n/**\n * Silently (without using `get`) increment a source\n * @param {Source<number>} source\n */\nexport function increment(source) {\n\tset(source, source.v + 1);\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @returns {void}\n */\nfunction mark_reactions(signal, status) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & INSPECT_EFFECT) !== 0) {\n\t\t\tinspect_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_reactions(/** @type {Derived} */ (reaction), MAYBE_DIRTY);\n\t\t} else if (not_dirty) {\n\t\t\tif ((flags & BLOCK_EFFECT) !== 0) {\n\t\t\t\tif (eager_block_effects !== null) {\n\t\t\t\t\teager_block_effects.push(/** @type {Effect} */ (reaction));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tget,\n\tactive_effect,\n\tupdate_version,\n\tactive_reaction,\n\tset_update_version,\n\tset_active_reaction\n} from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport {\n\tstate as source,\n\tset,\n\tincrement,\n\tflush_inspect_effects,\n\tset_inspect_effects_deferred\n} from './reactivity/sources.js';\nimport { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { get_stack, tag } from './dev/tracing.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n// TODO move all regexes into shared module?\nconst regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * @template T\n * @param {T} value\n * @returns {T}\n */\nexport function proxy(value) {\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tvar stack = DEV && tracing_mode_flag ? get_stack('CreatedAt') : null;\n\tvar parent_version = update_version;\n\n\t/**\n\t * Executes the proxy in the context of the reaction it was originally created in, if any\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\tvar with_parent = (fn) => {\n\t\tif (update_version === parent_version) {\n\t\t\treturn fn();\n\t\t}\n\n\t\t// child source is being created after the initial proxy —\n\t\t// prevent it from being associated with the current reaction\n\t\tvar reaction = active_reaction;\n\t\tvar version = update_version;\n\n\t\tset_active_reaction(null);\n\t\tset_update_version(parent_version);\n\n\t\tvar result = fn();\n\n\t\tset_active_reaction(reaction);\n\t\tset_update_version(version);\n\n\t\treturn result;\n\t};\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t\tif (DEV) {\n\t\t\tvalue = /** @type {any} */ (inspectable_array(/** @type {any[]} */ (value)));\n\t\t}\n\t}\n\n\t/** Used in dev for $inspect.trace() */\n\tvar path = '';\n\tlet updating = false;\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tif (updating) return;\n\t\tupdating = true;\n\t\tpath = new_path;\n\n\t\ttag(version, `${path} version`);\n\n\t\t// rename all child sources and child proxies\n\t\tfor (const [prop, source] of sources) {\n\t\t\ttag(source, get_label(path, prop));\n\t\t}\n\t\tupdating = false;\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\t\t\tvar s = sources.get(prop);\n\t\t\tif (s === undefined) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar s = source(descriptor.value, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tif (DEV && typeof prop === 'string') {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tset(s, descriptor.value, true);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tincrement(version);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (DEV && prop === PROXY_PATH_SYMBOL) {\n\t\t\t\treturn update_path;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar p = proxy(exists ? target[prop] : UNINITIALIZED);\n\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\tvar s = sources.get(prop);\n\t\t\t\tif (s) descriptor.value = get(s);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar source = sources.get(prop);\n\t\t\t\tvar value = source?.v;\n\n\t\t\t\tif (source !== undefined && value !== UNINITIALIZED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = with_parent(() => {\n\t\t\t\t\t\tvar p = has ? proxy(target[prop]) : UNINITIALIZED;\n\t\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t});\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create a uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(other_s, get_label(path, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = with_parent(() => source(undefined, stack));\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\n\t\t\t\tvar p = with_parent(() => proxy(value));\n\t\t\t\tset(s, p);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {string} path\n * @param {string | symbol} prop\n */\nfunction get_label(path, prop) {\n\tif (typeof prop === 'symbol') return `${path}[Symbol(${prop.description ?? ''})]`;\n\tif (regex_is_valid_identifier.test(prop)) return `${path}.${prop}`;\n\treturn /^\\d+$/.test(prop) ? `${path}[${prop}]` : `${path}['${prop}']`;\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\ttry {\n\t\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\t\treturn value[STATE_SYMBOL];\n\t\t}\n\t} catch {\n\t\t// the above if check can throw an error if the value in question\n\t\t// is the contentWindow of an iframe on another domain, in which\n\t\t// case we want to just return the value (because it's definitely\n\t\t// not a proxied value) so we don't break any JavaScript interacting\n\t\t// with that iframe (such as various payment companies client side\n\t\t// JavaScript libraries interacting with their iframes on the same\n\t\t// domain)\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n\nconst ARRAY_MUTATING_METHODS = new Set([\n\t'copyWithin',\n\t'fill',\n\t'pop',\n\t'push',\n\t'reverse',\n\t'shift',\n\t'sort',\n\t'splice',\n\t'unshift'\n]);\n\n/**\n * Wrap array mutating methods so $inspect is triggered only once and\n * to prevent logging an array in intermediate state (e.g. with an empty slot)\n * @param {any[]} array\n */\nfunction inspectable_array(array) {\n\treturn new Proxy(array, {\n\t\tget(target, prop, receiver) {\n\t\t\tvar value = Reflect.get(target, prop, receiver);\n\t\t\tif (!ARRAY_MUTATING_METHODS.has(/** @type {string} */ (prop))) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @this {any[]}\n\t\t\t * @param {any[]} args\n\t\t\t */\n\t\t\treturn function (...args) {\n\t\t\t\tset_inspect_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_inspect_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { TEXT_NODE, EFFECT_RAN } from '#client/constants';\nimport { eager_block_effects } from '../reactivity/batch.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\tvar text_prototype = Text.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\tif (is_extensible(element_prototype)) {\n\t\t// the following assignments improve perf of lookups on DOM nodes\n\t\t// @ts-expect-error\n\t\telement_prototype.__click = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__className = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__attributes = null;\n\t\t// @ts-expect-error\n\t\telement_prototype.__style = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t// @ts-expect-error\n\t\ttext_prototype.__t = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn first_child_getter.call(node);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn next_sibling_getter.call(node);\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = /** @type {TemplateNode} */ (get_first_child(hydrate_node));\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {DocumentFragment | TemplateNode[]} fragment\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function first_child(fragment, is_text) {\n\tif (!hydrating) {\n\t\t// when not hydrating, `fragment` is a `DocumentFragment` (the result of calling `open_frag`)\n\t\tvar first = /** @type {DocumentFragment} */ (get_first_child(/** @type {Node} */ (fragment)));\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\t// if an {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && hydrate_node?.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\n\t\thydrate_node?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\t// if a sibling {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && next_sibling?.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t// node and insert it after the last sibling\n\t\tif (next_sibling === null) {\n\t\t\tlast_sibling?.after(text);\n\t\t} else {\n\t\t\tnext_sibling.before(text);\n\t\t}\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn /** @type {TemplateNode} */ (next_sibling);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n\n/**\n * Returns `true` if we're updating the current block, for example `condition` in\n * an `{#if condition}` block just changed. In this case, the branch should be\n * appended (or removed) at the same time as other updates within the\n * current `<svelte:boundary>`\n */\nexport function should_defer_append() {\n\tif (!async_mode_flag) return false;\n\tif (eager_block_effects !== null) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & EFFECT_RAN) !== 0;\n}\n\n/**\n *\n * @param {string} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns\n */\nexport function create_element(tag, namespace, is) {\n\tlet options = is ? { is } : undefined;\n\tif (namespace) {\n\t\treturn document.createElementNS(namespace, tag, options);\n\t}\n\treturn document.createElement(tag, options);\n}\n\nexport function create_fragment() {\n\treturn document.createDocumentFragment();\n}\n\n/**\n * @param {string} data\n * @returns\n */\nexport function create_comment(data = '') {\n\treturn document.createComment(data);\n}\n\n/**\n * @param {Element} element\n * @param {string} key\n * @param {string} value\n * @returns\n */\nexport function set_attribute(element, key, value = '') {\n\tif (key.startsWith('xlink:')) {\n\t\telement.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n\t\treturn;\n\t}\n\treturn element.setAttribute(key, value);\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\t// @ts-expect-error\n\tconst prev = element.__on_r;\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tis_dirty,\n\tactive_effect,\n\tactive_reaction,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tremove_reactions,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tset_signal_status,\n\tuntrack,\n\tuntracking\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tEFFECT_RAN,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tUNOWNED,\n\tCLEAN,\n\tINSPECT_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { component_context, dev_current_component_function, dev_stack } from '../context.js';\nimport { Batch, schedule_effect } from './batch.js';\nimport { flatten } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null && active_reaction === null) {\n\t\te.effect_orphan(rune);\n\t}\n\n\tif (active_reaction !== null && (active_reaction.f & UNOWNED) !== 0 && active_effect === null) {\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @param {boolean} sync\n * @param {boolean} push\n * @returns {Effect}\n */\nfunction create_effect(type, fn, sync, push = true) {\n\tvar parent = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent !== null && (parent.f & INSPECT_EFFECT) !== 0) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tif (parent !== null && (parent.f & INERT) !== 0) {\n\t\ttype |= INERT;\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tnodes_start: null,\n\t\tnodes_end: null,\n\t\tf: type | DIRTY,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent,\n\t\tb: parent && parent.b,\n\t\tprev: null,\n\t\tteardown: null,\n\t\ttransitions: null,\n\t\twv: 0,\n\t\tac: null\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tif (sync) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t\teffect.f |= EFFECT_RAN;\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\t} else if (fn !== null) {\n\t\tschedule_effect(effect);\n\t}\n\n\tif (push) {\n\t\t/** @type {Effect | null} */\n\t\tvar e = effect;\n\n\t\t// if an effect has already ran and doesn't need to be kept in the tree\n\t\t// (because it won't re-run, has no DOM, and has no teardown etc)\n\t\t// then we skip it and go to its child (if any)\n\t\tif (\n\t\t\tsync &&\n\t\t\te.deps === null &&\n\t\t\te.teardown === null &&\n\t\t\te.nodes_start === null &&\n\t\t\te.first === e.last && // either `null`, or a singular child\n\t\t\t(e.f & EFFECT_PRESERVED) === 0\n\t\t) {\n\t\t\te = e.first;\n\t\t}\n\n\t\tif (e !== null) {\n\t\t\te.parent = parent;\n\n\t\t\tif (parent !== null) {\n\t\t\t\tpush_effect(e, parent);\n\t\t\t}\n\n\t\t\t// if we're in a derived, add the effect there too\n\t\t\tif (\n\t\t\t\tactive_reaction !== null &&\n\t\t\t\t(active_reaction.f & DERIVED) !== 0 &&\n\t\t\t\t(type & ROOT_EFFECT) === 0\n\t\t\t) {\n\t\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t\t(derived.effects ??= []).push(e);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\treturn active_reaction !== null && !untracking;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null, false);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\tvar defer = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & EFFECT_RAN) === 0;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn create_effect(RENDER_EFFECT | USER_EFFECT, fn, true);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function inspect_effect(fn) {\n\treturn create_effect(INSPECT_EFFECT, fn, true);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean, deps: () => any }} */\n\tvar token = { effect: null, ran: false, deps };\n\n\tcontext.l.$.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\t\tuntrack(fn);\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.$) {\n\t\t\ttoken.deps();\n\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (is_dirty(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function async_effect(fn) {\n\treturn create_effect(ASYNC | EFFECT_PRESERVED, fn, true);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | flags, fn, true);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n */\nexport function template_effect(fn, sync = [], async = []) {\n\tflatten(sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => fn(...values.map(get)), true);\n\t});\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\tvar effect = create_effect(BLOCK_EFFECT | flags, fn, true);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {boolean} [push]\n */\nexport function branch(fn, push = true) {\n\treturn create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true, push);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tconst controller = effect.ac;\n\n\t\tif (controller !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\tcontroller.abort(STALE_REACTION);\n\t\t\t});\n\t\t}\n\n\t\tvar next = effect.next;\n\n\t\tif ((effect.f & ROOT_EFFECT) !== 0) {\n\t\t\t// this is now an independent root\n\t\t\teffect.parent = null;\n\t\t} else {\n\t\t\tdestroy_effect(effect, remove_dom);\n\t\t}\n\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif (\n\t\t(remove_dom || (effect.f & HEAD_EFFECT) !== 0) &&\n\t\teffect.nodes_start !== null &&\n\t\teffect.nodes_end !== null\n\t) {\n\t\tremove_effect_dom(effect.nodes_start, /** @type {TemplateNode} */ (effect.nodes_end));\n\t\tremoved = true;\n\t}\n\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\tset_signal_status(effect, DESTROYED);\n\n\tvar transitions = effect.transitions;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes_start =\n\t\teffect.nodes_end =\n\t\teffect.ac =\n\t\t\tnull;\n}\n\n/**\n *\n * @param {TemplateNode | null} node\n * @param {TemplateNode} end\n */\nexport function remove_effect_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : /** @type {TemplateNode} */ (get_next_sibling(node));\n\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n */\nexport function pause_effect(effect, callback) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\trun_out_transitions(transitions, () => {\n\t\tdestroy_effect(effect);\n\t\tif (callback) callback();\n\t});\n}\n\n/**\n * @param {TransitionManager[]} transitions\n * @param {() => void} fn\n */\nexport function run_out_transitions(transitions, fn) {\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nexport function pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tif (effect.transitions !== null) {\n\t\tfor (const transition of effect.transitions) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\tschedule_effect(effect);\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tif (effect.transitions !== null) {\n\t\tfor (const transition of effect.transitions) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function aborted(effect = /** @type {Effect} */ (active_effect)) {\n\treturn (effect.f & DESTROYED) !== 0;\n}\n","/** @import { Derived, Effect, Reaction, Signal, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tUNOWNED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tDISCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\tdestroy_derived_effects,\n\texecute_derived,\n\tcurrent_async_effect,\n\trecent_async_deriveds,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions, get_stack } from './dev/tracing.js';\nimport {\n\tcomponent_context,\n\tdev_current_component_function,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from './context.js';\nimport * as w from './warnings.js';\nimport { Batch, batch_deriveds, flushSync, schedule_effect } from './reactivity/batch.js';\nimport { handle_error } from './error-handling.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport { captured_signals } from './legacy.js';\nimport { without_reactive_context } from './dom/elements/bindings/shared.js';\n\nexport let is_updating_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_updating_effect(value) {\n\tis_updating_effect = value;\n}\n\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\nexport let untracking = false;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a reaction, reading and writing\n * them within that reaction should not cause a re-run\n * @type {null | Source[]}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {\n\t\tif (current_sources === null) {\n\t\t\tcurrent_sources = [value];\n\t\t} else {\n\t\t\tcurrent_sources.push(value);\n\t\t}\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nlet new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\n// If we are working with a get() chain that has no active container,\n// to prevent memory leaks, we skip adding the reaction.\nexport let skip_reaction = false;\n\nexport function increment_write_version() {\n\treturn ++write_version;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function is_dirty(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = reaction.deps;\n\t\tvar is_unowned = (flags & UNOWNED) !== 0;\n\n\t\tif (dependencies !== null) {\n\t\t\tvar i;\n\t\t\tvar dependency;\n\t\t\tvar is_disconnected = (flags & DISCONNECTED) !== 0;\n\t\t\tvar is_unowned_connected = is_unowned && active_effect !== null && !skip_reaction;\n\t\t\tvar length = dependencies.length;\n\n\t\t\t// If we are working with a disconnected or an unowned signal that is now connected (due to an active effect)\n\t\t\t// then we need to re-connect the reaction to the dependency, unless the effect has already been destroyed\n\t\t\t// (which can happen if the derived is read by an async derived)\n\t\t\tif (\n\t\t\t\t(is_disconnected || is_unowned_connected) &&\n\t\t\t\t(active_effect === null || (active_effect.f & DESTROYED) === 0)\n\t\t\t) {\n\t\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\t\t\t\tvar parent = derived.parent;\n\n\t\t\t\tfor (i = 0; i < length; i++) {\n\t\t\t\t\tdependency = dependencies[i];\n\n\t\t\t\t\t// We always re-add all reactions (even duplicates) if the derived was\n\t\t\t\t\t// previously disconnected, however we don't if it was unowned as we\n\t\t\t\t\t// de-duplicate dependencies in that case\n\t\t\t\t\tif (is_disconnected || !dependency?.reactions?.includes(derived)) {\n\t\t\t\t\t\t(dependency.reactions ??= []).push(derived);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (is_disconnected) {\n\t\t\t\t\tderived.f ^= DISCONNECTED;\n\t\t\t\t}\n\t\t\t\t// If the unowned derived is now fully connected to the graph again (it's unowned and reconnected, has a parent\n\t\t\t\t// and the parent is not unowned), then we can mark it as connected again, removing the need for the unowned\n\t\t\t\t// flag\n\t\t\t\tif (is_unowned_connected && parent !== null && (parent.f & UNOWNED) === 0) {\n\t\t\t\t\tderived.f ^= UNOWNED;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < length; i++) {\n\t\t\t\tdependency = dependencies[i];\n\n\t\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t\t}\n\n\t\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Unowned signals should never be marked as clean unless they\n\t\t// are used within an active_effect without skip_reaction\n\t\tif (!is_unowned || (active_effect !== null && !skip_reaction)) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Value} signal\n * @param {Effect} effect\n * @param {boolean} [root]\n */\nfunction schedule_possible_effect_self_invalidation(signal, effect, root = true) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tif (!async_mode_flag && current_sources?.includes(signal)) {\n\t\treturn;\n\t}\n\n\tfor (var i = 0; i < reactions.length; i++) {\n\t\tvar reaction = reactions[i];\n\n\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\tschedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);\n\t\t} else if (effect === reaction) {\n\t\t\tif (root) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t} else if ((reaction.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(reaction, MAYBE_DIRTY);\n\t\t\t}\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/** @param {Reaction} reaction */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_skip_reaction = skip_reaction;\n\tvar previous_sources = current_sources;\n\tvar previous_component_context = component_context;\n\tvar previous_untracking = untracking;\n\tvar previous_update_version = update_version;\n\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tskip_reaction =\n\t\t(flags & UNOWNED) !== 0 && (untracking || !is_updating_effect || active_reaction === null);\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\n\tcurrent_sources = null;\n\tset_component_context(reaction.ctx);\n\tuntracking = false;\n\tupdate_version = ++read_version;\n\n\tif (reaction.ac !== null) {\n\t\twithout_reactive_context(() => {\n\t\t\t/** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);\n\t\t});\n\n\t\treaction.ac = null;\n\t}\n\n\ttry {\n\t\treaction.f |= REACTION_IS_UPDATING;\n\t\tvar fn = /** @type {Function} */ (reaction.fn);\n\t\tvar result = fn();\n\t\tvar deps = reaction.deps;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tremove_reactions(reaction, skipped_deps);\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!skip_reaction ||\n\t\t\t\t// Deriveds that already have reactions can cleanup, so we still add them as reactions\n\t\t\t\t((flags & DERIVED) !== 0 &&\n\t\t\t\t\t/** @type {import('#client').Derived} */ (reaction).reactions !== null)\n\t\t\t) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\t// If we're inside an effect and we have untracked writes, then we need to\n\t\t// ensure that if any of those untracked writes result in re-invalidation\n\t\t// of the current effect, then that happens accordingly\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tuntracked_writes !== null &&\n\t\t\t!untracking &&\n\t\t\tdeps !== null &&\n\t\t\t(reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0\n\t\t) {\n\t\t\tfor (i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {\n\t\t\t\tschedule_possible_effect_self_invalidation(\n\t\t\t\t\tuntracked_writes[i],\n\t\t\t\t\t/** @type {Effect} */ (reaction)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// If we are returning to an previous reaction then\n\t\t// we need to increment the read version to ensure that\n\t\t// any dependencies in this reaction aren't marked with\n\t\t// the same version\n\t\tif (previous_reaction !== null && previous_reaction !== reaction) {\n\t\t\tread_version++;\n\n\t\t\tif (untracked_writes !== null) {\n\t\t\t\tif (previous_untracked_writes === null) {\n\t\t\t\t\tprevious_untracked_writes = untracked_writes;\n\t\t\t\t} else {\n\t\t\t\t\tprevious_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ((reaction.f & ERROR_VALUE) !== 0) {\n\t\t\treaction.f ^= ERROR_VALUE;\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\treturn handle_error(error);\n\t} finally {\n\t\treaction.f ^= REACTION_IS_UPDATING;\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tskip_reaction = previous_skip_reaction;\n\t\tcurrent_sources = previous_sources;\n\t\tset_component_context(previous_component_context);\n\t\tuntracking = previous_untracking;\n\t\tupdate_version = previous_update_version;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = index_of.call(reactions, signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !new_deps.includes(dependency))\n\t) {\n\t\tset_signal_status(dependency, MAYBE_DIRTY);\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected.\n\t\tif ((dependency.f & (UNOWNED | DISCONNECTED)) === 0) {\n\t\t\tdependency.f ^= DISCONNECTED;\n\t\t}\n\t\t// Disconnect any reactions owned by this reaction\n\t\tdestroy_derived_effects(/** @type {Derived} **/ (dependency));\n\t\tremove_reactions(/** @type {Derived} **/ (dependency), 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar was_updating_effect = is_updating_effect;\n\n\tactive_effect = effect;\n\tis_updating_effect = true;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tset_dev_current_component_function(effect.component_function);\n\t\tvar previous_stack = /** @type {any} */ (dev_stack);\n\t\t// only block effects have a dev stack, keep the current one otherwise\n\t\tset_dev_stack(effect.dev_stack ?? dev_stack);\n\t}\n\n\ttry {\n\t\tif ((flags & BLOCK_EFFECT) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.wv = write_version;\n\n\t\t// In DEV, increment versions of any sources that were written to during the effect,\n\t\t// so that they are correctly marked as dirty when the effect re-runs\n\t\tif (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {\n\t\t\tfor (var dep of effect.deps) {\n\t\t\t\tif (dep.set_during_effect) {\n\t\t\t\t\tdep.wv = increment_write_version();\n\t\t\t\t\tdep.set_during_effect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tis_updating_effect = was_updating_effect;\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tset_dev_current_component_function(previous_component_fn);\n\t\t\tset_dev_stack(previous_stack);\n\t\t}\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tif (async_mode_flag) {\n\t\treturn new Promise((f) => requestAnimationFrame(() => f()));\n\t}\n\n\tawait Promise.resolve();\n\n\t// By calling flushSync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflushSync();\n}\n\n/**\n * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n * have resolved and the DOM has been updated\n * @returns {Promise<void>}\n * @since 5.36\n */\nexport function settled() {\n\treturn Batch.ensure().settled();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\tcaptured_signals?.add(signal);\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null && !untracking) {\n\t\t// if we're in a derived that is being read inside an _async_ derived,\n\t\t// it's possible that the effect was already destroyed. In this case,\n\t\t// we don't add the dependency, because that would create a memory leak\n\t\tvar destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;\n\n\t\tif (!destroyed && !current_sources?.includes(signal)) {\n\t\t\tvar deps = active_reaction.deps;\n\n\t\t\tif ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {\n\t\t\t\t// we're in the effect init/update cycle\n\t\t\t\tif (signal.rv < read_version) {\n\t\t\t\t\tsignal.rv = read_version;\n\n\t\t\t\t\t// If the signal is accessing the same dependencies in the same\n\t\t\t\t\t// order as it did last time, increment `skipped_deps`\n\t\t\t\t\t// rather than updating `new_deps`, which creates GC cost\n\t\t\t\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\t\t\t\tskipped_deps++;\n\t\t\t\t\t} else if (new_deps === null) {\n\t\t\t\t\t\tnew_deps = [signal];\n\t\t\t\t\t} else if (!skip_reaction || !new_deps.includes(signal)) {\n\t\t\t\t\t\t// Normally we can push duplicated dependencies to `new_deps`, but if we're inside\n\t\t\t\t\t\t// an unowned derived because skip_reaction is true, then we need to ensure that\n\t\t\t\t\t\t// we don't have duplicates\n\t\t\t\t\t\tnew_deps.push(signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// we're adding a dependency outside the init/update cycle\n\t\t\t\t// (i.e. after an `await`)\n\t\t\t\t(active_reaction.deps ??= []).push(signal);\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!reactions.includes(active_reaction)) {\n\t\t\t\t\treactions.push(active_reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (\n\t\tis_derived &&\n\t\t/** @type {Derived} */ (signal).deps === null &&\n\t\t/** @type {Derived} */ (signal).effects === null\n\t) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\t\tvar parent = derived.parent;\n\n\t\tif (parent !== null && (parent.f & UNOWNED) === 0) {\n\t\t\t// If the derived is owned by another derived then mark it as unowned\n\t\t\t// as the derived value might have been referenced in a different context\n\t\t\t// since and thus its parent might not be its true owner anymore\n\t\t\tderived.f ^= UNOWNED;\n\t\t}\n\t}\n\n\tif (DEV) {\n\t\tif (current_async_effect) {\n\t\t\tvar tracking = (current_async_effect.f & REACTION_IS_UPDATING) !== 0;\n\t\t\tvar was_read = current_async_effect.deps?.includes(signal);\n\n\t\t\tif (!tracking && !untracking && !was_read) {\n\t\t\t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t\t\tvar trace = get_stack('TracedAt');\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tif (trace) console.warn(trace);\n\t\t\t}\n\t\t}\n\n\t\trecent_async_deriveds.delete(signal);\n\n\t\tif (\n\t\t\ttracing_mode_flag &&\n\t\t\t!untracking &&\n\t\t\ttracing_expressions !== null &&\n\t\t\tactive_reaction !== null &&\n\t\t\ttracing_expressions.reaction === active_reaction\n\t\t) {\n\t\t\t// Used when mapping state between special blocks like `each`\n\t\t\tif (signal.trace) {\n\t\t\t\tsignal.trace();\n\t\t\t} else {\n\t\t\t\ttrace = get_stack('TracedAt');\n\n\t\t\t\tif (trace) {\n\t\t\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\t\t\tif (entry === undefined) {\n\t\t\t\t\t\tentry = { traces: [] };\n\t\t\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar last = entry.traces[entry.traces.length - 1];\n\n\t\t\t\t\t// traces can be duplicated, e.g. by `snapshot` invoking both\n\t\t\t\t\t// both `getOwnPropertyDescriptor` and `get` traps at once\n\t\t\t\t\tif (trace.stack !== last?.stack) {\n\t\t\t\t\t\tentry.traces.push(trace);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_destroying_effect) {\n\t\tif (old_values.has(signal)) {\n\t\t\treturn old_values.get(signal);\n\t\t}\n\n\t\tif (is_derived) {\n\t\t\tderived = /** @type {Derived} */ (signal);\n\n\t\t\tvar value = derived.v;\n\n\t\t\t// if the derived is dirty and has reactions, or depends on the values that just changed, re-execute\n\t\t\t// (a derived can be maybe_dirty due to the effect destroy removing its last reaction)\n\t\t\tif (\n\t\t\t\t((derived.f & CLEAN) === 0 && derived.reactions !== null) ||\n\t\t\t\tdepends_on_old_values(derived)\n\t\t\t) {\n\t\t\t\tvalue = execute_derived(derived);\n\t\t\t}\n\n\t\t\told_values.set(derived, value);\n\n\t\t\treturn value;\n\t\t}\n\t} else if (is_derived) {\n\t\tderived = /** @type {Derived} */ (signal);\n\n\t\tif (batch_deriveds?.has(derived)) {\n\t\t\treturn batch_deriveds.get(derived);\n\t\t}\n\n\t\tif (is_dirty(derived)) {\n\t\t\tupdate_derived(derived);\n\t\t}\n\t}\n\n\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\tthrow signal.v;\n\t}\n\n\treturn signal.v;\n}\n\n/** @param {Derived} derived */\nfunction depends_on_old_values(derived) {\n\tif (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst\n\tif (derived.deps === null) return false;\n\n\tfor (const dep of derived.deps) {\n\t\tif (old_values.has(dep)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n * // this will run when `data` changes, but not when `time` changes\n * save(data, {\n * timestamp: untrack(() => time)\n * });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_untracking = untracking;\n\ttry {\n\t\tuntracking = true;\n\t\treturn fn();\n\t} finally {\n\t\tuntracking = previous_untracking;\n\t}\n}\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n * @returns {void}\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * @param {Record<string, unknown>} obj\n * @param {string[]} keys\n * @returns {Record<string, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import { teardown } from '../../reactivity/effects.js';\nimport { define_property, is_array } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tdom.removeAttribute('onload');\n\tdom.removeAttribute('onerror');\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} [handler]\n * @param {AddEventListenerOptions} [options]\n */\nexport function create_event(event_name, dom, handler, options = {}) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} [handler]\n * @param {boolean} [capture]\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\tif (\n\t\tdom === document.body ||\n\t\t// @ts-ignore\n\t\tdom === window ||\n\t\t// @ts-ignore\n\t\tdom === document ||\n\t\t// Firefox has quirky behavior, it can happen that we still get \"canplay\" events when the element is already removed\n\t\tdom instanceof HTMLMediaElement\n\t) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n// used to store the reference to the currently propagated event\n// to prevent garbage collection between microtasks in Firefox\n// If the event object is GCed too early, the expando __root property\n// set on the event object is lost, causing the event delegation\n// to process the event twice\nlet last_propagated_event = null;\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\tlast_propagated_event = event;\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check __root to skip all nodes below it in case this is a\n\t// parent of the __root node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// the `last_propagated_event === event` check is redundant, but\n\t// without it the variable will be DCE'd and things will\n\t// fail mysteriously in Firefox\n\t// @ts-expect-error is added below\n\tvar handled_at = last_propagated_event === event && event.__root;\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent.__root = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target['__' + event_name];\n\n\t\t\t\tif (\n\t\t\t\t\tdelegated != null &&\n\t\t\t\t\t(!(/** @type {any} */ (current_target).disabled) ||\n\t\t\t\t\t\t// DOM could've been updated already by the time this is reached, so we check this as well\n\t\t\t\t\t\t// -> the target could not have been disabled because it emits the event in the first place\n\t\t\t\t\t\tevent.target === current_target)\n\t\t\t\t) {\n\t\t\t\t\tif (is_array(delegated)) {\n\t\t\t\t\t\tvar [fn, ...data] = delegated;\n\t\t\t\t\t\tfn.apply(current_target, [event, ...data]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent.__root = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler !== 'function' && (has_side_effects || handler != null || error)) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\t\tconst phase = args[0]?.eventPhase < Event.BUBBLING_PHASE ? 'capture' : '';\n\t\tconst event_name = args[0]?.type + phase;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\thandler?.apply(element, args);\n}\n","/** @param {string} html */\nexport function create_fragment_from_html(html) {\n\tvar elem = document.createElement('template');\n\telem.innerHTML = html.replaceAll('<!>', '<!---->'); // XHTML compliance\n\treturn elem.content;\n}\n","/** @import { Effect, TemplateNode } from '#client' */\n/** @import { TemplateStructure } from './types' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport {\n\tcreate_text,\n\tget_first_child,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute\n} from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport {\n\tNAMESPACE_MATHML,\n\tNAMESPACE_SVG,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_USE_MATHML,\n\tTEMPLATE_USE_SVG\n} from '../../../constants.js';\nimport { COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, TEXT_NODE } from '#client/constants';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes_start === null) {\n\t\teffect.nodes_start = start;\n\t\teffect.nodes_end = end;\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_html(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content);\n\t\t\tif (!is_fragment) node = /** @type {Node} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction from_namespace(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {Node} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_svg(content, flags) {\n\treturn from_namespace(content, flags, 'svg');\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_mathml(content, flags) {\n\treturn from_namespace(content, flags, 'math');\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {typeof NAMESPACE_SVG | typeof NAMESPACE_MATHML | undefined} [ns]\n */\nfunction fragment_from_tree(structure, ns) {\n\tvar fragment = create_fragment();\n\n\tfor (var item of structure) {\n\t\tif (typeof item === 'string') {\n\t\t\tfragment.append(create_text(item));\n\t\t\tcontinue;\n\t\t}\n\n\t\t// if `preserveComments === true`, comments are represented as `['// <data>']`\n\t\tif (item === undefined || item[0][0] === '/') {\n\t\t\tfragment.append(create_comment(item ? item[0].slice(3) : ''));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [name, attributes, ...children] = item;\n\n\t\tconst namespace = name === 'svg' ? NAMESPACE_SVG : name === 'math' ? NAMESPACE_MATHML : ns;\n\n\t\tvar element = create_element(name, namespace, attributes?.is);\n\n\t\tfor (var key in attributes) {\n\t\t\tset_attribute(element, key, attributes[key]);\n\t\t}\n\n\t\tif (children.length > 0) {\n\t\t\tvar target =\n\t\t\t\telement.tagName === 'TEMPLATE'\n\t\t\t\t\t? /** @type {HTMLTemplateElement} */ (element).content\n\t\t\t\t\t: element;\n\n\t\t\ttarget.append(\n\t\t\t\tfragment_from_tree(children, element.tagName === 'foreignObject' ? undefined : namespace)\n\t\t\t);\n\t\t}\n\n\t\tfragment.append(element);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_tree(structure, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tconst ns =\n\t\t\t\t(flags & TEMPLATE_USE_SVG) !== 0\n\t\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t\t: (flags & TEMPLATE_USE_MATHML) !== 0\n\t\t\t\t\t\t? NAMESPACE_MATHML\n\t\t\t\t\t\t: undefined;\n\n\t\t\tnode = fragment_from_tree(structure, ns);\n\t\t\tif (!is_fragment) node = /** @type {Node} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {() => Element | DocumentFragment} fn\n */\nexport function with_script(fn) {\n\treturn () => run_scripts(fn());\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === DOCUMENT_FRAGMENT_NODE;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).tagName === 'SCRIPT'\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\tconst effect = /** @type {Effect} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = document.createElement('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes_start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes_end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== TEXT_NODE) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\t/** @type {Effect} */ (active_effect).nodes_end = hydrate_node;\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\n/**\n * Create (or hydrate) an unique UID for the component instance.\n */\nexport function props_id() {\n\tif (\n\t\thydrating &&\n\t\thydrate_node &&\n\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\thydrate_node.textContent?.startsWith(`#`)\n\t) {\n\t\tconst id = hydrate_node.textContent.substring(1);\n\t\thydrate_next();\n\t\treturn id;\n\t}\n\n\t// @ts-expect-error This way we ensure the id is unique even across Svelte runtimes\n\t(window.__svelte ??= {}).uid ??= 1;\n\n\t// @ts-expect-error\n\treturn `c${window.__svelte.uid++}`;\n}\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function is_delegated(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'hidden',\n\t'indeterminate',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory',\n\t'defer',\n\t'disablepictureinpicture',\n\t'disableremoteplayback'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject',\n\tnovalidate: 'noValidate',\n\tallowfullscreen: 'allowFullscreen',\n\tdisablepictureinpicture: 'disablePictureInPicture',\n\tdisableremoteplayback: 'disableRemotePlayback'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject',\n\t'noValidate',\n\t'allowFullscreen',\n\t'disablePictureInPicture',\n\t'disableRemotePlayback'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst STATE_CREATION_RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$derived',\n\t'$derived.by'\n]);\n\nconst RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.snapshot',\n\t'$props',\n\t'$props.id',\n\t'$bindable',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$effect.pending',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/** @typedef {typeof RUNES[number]} RuneName */\n\n/**\n * @param {string} name\n * @returns {name is RuneName}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RuneName} */ (name));\n}\n\n/** @typedef {typeof STATE_CREATION_RUNES[number]} StateCreationRuneName */\n\n/**\n * @param {string} name\n * @returns {name is StateCreationRuneName}\n */\nexport function is_state_creation_rune(name) {\n\treturn STATE_CREATION_RUNES.includes(/** @type {StateCreationRuneName} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {typeof RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @template {string | undefined} T\n * @param {T} location\n * @returns {T};\n */\nexport function sanitize_location(location) {\n\treturn /** @type {T} */ (location?.replace(/\\//g, '/\\u200b'));\n}\n","/** @import { ComponentContext, Effect, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { active_effect } from './runtime.js';\nimport { push, pop, component_context } from './context.js';\nimport { component_root, branch } from './reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating\n} from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport { reset_head_anchor } from './dom/blocks/svelte-head.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\nimport { COMMENT_NODE } from './constants.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? value + '' : value;\n\t// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = str + '';\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = /** @type {TemplateNode} */ (get_first_child(target));\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = /** @type {TemplateNode} */ (get_next_sibling(anchor));\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\t\thydrate_next();\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tif (\n\t\t\thydrate_node === null ||\n\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t) {\n\t\t\tw.hydration_mismatch();\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(false);\n\n\t\treturn /** @type {Exports} */ (instance);\n\t} catch (error) {\n\t\t// re-throw Svelte errors - they are certainly not related to hydration\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message.split('\\n').some((line) => line.startsWith('https://svelte.dev/e/'))\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tif (error !== HYDRATION_ERROR) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Failed to hydrate: ', error);\n\t\t}\n\n\t\tif (options.recover === false) {\n\t\t\te.hydration_failed();\n\t\t}\n\n\t\t// If an error occured above, the operations might not yet have been initialised.\n\t\tinit_operations();\n\t\tclear_text_content(target);\n\n\t\tset_hydrating(false);\n\t\treturn mount(component, options);\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t\treset_head_anchor();\n\t}\n}\n\n/** @type {Map<string, number>} */\nconst document_listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {\n\tinit_operations();\n\n\t/** @type {Set<string>} */\n\tvar registered_events = new Set();\n\n\t/** @param {Array<string>} events */\n\tvar event_handle = (events) => {\n\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\tvar event_name = events[i];\n\n\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\tregistered_events.add(event_name);\n\n\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t// Add the event listener to both the container and the document.\n\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t// the outer content stops propagation of the event.\n\t\t\ttarget.addEventListener(event_name, handle_event_propagation, { passive });\n\n\t\t\tvar n = document_listeners.get(event_name);\n\n\t\t\tif (n === undefined) {\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tdocument.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\tdocument_listeners.set(event_name, 1);\n\t\t\t} else {\n\t\t\t\tdocument_listeners.set(event_name, n + 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tevent_handle(array_from(all_registered_events));\n\troot_event_handles.add(event_handle);\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tbranch(() => {\n\t\t\tif (context) {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tctx.c = context;\n\t\t\t}\n\n\t\t\tif (events) {\n\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t}\n\n\t\t\tif (hydrating) {\n\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t}\n\n\t\t\tshould_intro = intro;\n\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\tshould_intro = true;\n\n\t\t\tif (hydrating) {\n\t\t\t\t/** @type {Effect} */ (active_effect).nodes_end = hydrate_node;\n\t\t\t}\n\n\t\t\tif (context) {\n\t\t\t\tpop();\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\ttarget.removeEventListener(event_name, handle_event_propagation);\n\n\t\t\t\tvar n = /** @type {number} */ (document_listeners.get(event_name));\n\n\t\t\t\tif (--n === 0) {\n\t\t\t\t\tdocument.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\tdocument_listeners.delete(event_name);\n\t\t\t\t} else {\n\t\t\t\t\tdocument_listeners.set(event_name, n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tw.lifecycle_double_unmount();\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { active_reaction, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\nimport { component_context } from './internal/client/context.js';\nimport { DEV } from 'esm-env';\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n\n/**\n * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n *\n * Must be called while a derived or effect is running.\n *\n * ```svelte\n * <script>\n * \timport { getAbortSignal } from 'svelte';\n *\n * \tlet { id } = $props();\n *\n * \tasync function getData(id) {\n * \t\tconst response = await fetch(`/items/${id}`, {\n * \t\t\tsignal: getAbortSignal()\n * \t\t});\n *\n * \t\treturn await response.json();\n * \t}\n *\n * \tconst data = $derived(await getData(id));\n * </script>\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n * loaded: null; // does not take a detail argument\n * change: string; // takes a detail argument of type string, which is required\n * optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync } from './internal/client/reactivity/batch.js';\nexport { getContext, getAllContexts, hasContext, setContext } from './internal/client/context.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n","import { DEV } from 'esm-env';\nimport { register_style } from '../dev/css.js';\nimport { effect } from '../reactivity/effects.js';\n\n/**\n * @param {Node} anchor\n * @param {{ hash: string, code: string }} css\n */\nexport function append_styles(anchor, css) {\n\t// Use `queue_micro_task` to ensure `anchor` is in the DOM, otherwise getRootNode() will yield wrong results\n\teffect(() => {\n\t\tvar root = anchor.getRootNode();\n\n\t\tvar target = /** @type {ShadowRoot} */ (root).host\n\t\t\t? /** @type {ShadowRoot} */ (root)\n\t\t\t: /** @type {Document} */ (root).head ?? /** @type {Document} */ (root.ownerDocument).head;\n\n\t\t// Always querying the DOM is roughly the same perf as additionally checking for presence in a map first assuming\n\t\t// that you'll get cache hits half of the time, so we just always query the dom for simplicity and code savings.\n\t\tif (!target.querySelector('#' + css.hash)) {\n\t\t\tconst style = document.createElement('style');\n\t\t\tstyle.id = css.hash;\n\t\t\tstyle.textContent = css.code;\n\n\t\t\ttarget.appendChild(style);\n\n\t\t\tif (DEV) {\n\t\t\t\tregister_style(css.hash, style);\n\t\t\t}\n\t\t}\n\t});\n}\n","/** @import { Effect, Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { set, source, update } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tis_destroying_effect,\n\tset_active_effect,\n\tuntrack\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { DESTROYED, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(\n\t\tDEV ? { props, exclude, name, other: {}, to_proxy: [] } : { props, exclude },\n\t\trest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\n\tvar get_fallback = () => {\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\tvar setter;\n\n\tif (bindable) {\n\t\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t\t// or `createClassComponent(Component, props)`\n\t\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\t\tsetter =\n\t\t\tget_descriptor(props, key)?.set ??\n\t\t\t(is_entry_props && key in props ? (v) => (props[key] = v) : undefined);\n\t}\n\n\tvar initial_value;\n\tvar is_store_sub = false;\n\n\tif (bindable) {\n\t\t[initial_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tinitial_value = /** @type {V} */ (props[key]);\n\t}\n\n\tif (initial_value === undefined && fallback !== undefined) {\n\t\tinitial_value = get_fallback();\n\n\t\tif (setter) {\n\t\t\tif (runes) e.props_invalid_value(key);\n\t\t\tsetter(initial_value);\n\t\t}\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\n\t\t\tif (value !== undefined) {\n\t\t\t\t// in legacy mode, we don't revert to the fallback value\n\t\t\t\t// if the prop goes from defined to undefined. The easiest\n\t\t\t\t// way to model this is to make the fallback undefined\n\t\t\t\t// as soon as the prop has a value\n\t\t\t\tfallback_value = /** @type {V} */ (undefined);\n\t\t\t}\n\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// prop is never written to — we only need a getter\n\tif (runes && (flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// prop is written to, but the parent component had `bind:foo` which\n\t// means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn /** @type {() => V} */ (\n\t\t\tfunction (/** @type {V} */ value, /** @type {boolean} */ mutation) {\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t);\n\t}\n\n\t// Either prop is written to, but there's no binding, which means we\n\t// create a derived that we can write to locally.\n\t// Or we are in legacy mode where we always create a derived to replicate that\n\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\tvar overridden = false;\n\n\tvar d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {\n\t\toverridden = false;\n\t\treturn getter();\n\t});\n\n\tif (DEV) {\n\t\td.label = key;\n\t}\n\n\t// Capture the initial value if it's bindable\n\tif (bindable) get(d);\n\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\treturn /** @type {() => V} */ (\n\t\tfunction (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconst new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;\n\n\t\t\t\tset(d, new_value);\n\t\t\t\toverridden = true;\n\n\t\t\t\tif (fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// special case — avoid recalculating the derived if we're in a\n\t\t\t// teardown function and the prop was overridden locally, or the\n\t\t\t// component was already destroyed (this latter part is necessary\n\t\t\t// because `bind:this` can read props after the component has\n\t\t\t// been destroyed. TODO simplify `bind:this`\n\t\t\tif ((is_destroying_effect && overridden) || (parent_effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn d.v;\n\t\t\t}\n\n\t\t\treturn get(d);\n\t\t}\n\t);\n}\n","/** @import { ComponentConstructorOptions, ComponentType, SvelteComponent, Component } from 'svelte' */\nimport { DIRTY, LEGACY_PROPS, MAYBE_DIRTY } from '../internal/client/constants.js';\nimport { user_pre_effect } from '../internal/client/reactivity/effects.js';\nimport { mutable_source, set } from '../internal/client/reactivity/sources.js';\nimport { hydrate, mount, unmount } from '../internal/client/render.js';\nimport { active_effect, get, set_signal_status } from '../internal/client/runtime.js';\nimport { flushSync } from '../internal/client/reactivity/batch.js';\nimport { define_property, is_array } from '../internal/shared/utils.js';\nimport * as e from '../internal/client/errors.js';\nimport * as w from '../internal/client/warnings.js';\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../constants.js';\nimport { component_context, dev_current_component_function } from '../internal/client/context.js';\nimport { async_mode_flag } from '../internal/flags/index.js';\n\n/**\n * Takes the same options as a Svelte 4 component and the component function and returns a Svelte 4 compatible component.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {ComponentConstructorOptions<Props> & {\n * \tcomponent: ComponentType<SvelteComponent<Props, Events, Slots>> | Component<Props>;\n * }} options\n * @returns {SvelteComponent<Props, Events, Slots> & Exports}\n */\nexport function createClassComponent(options) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn new Svelte4Component(options);\n}\n\n/**\n * Takes the component function and returns a Svelte 4 compatible component constructor.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {SvelteComponent<Props, Events, Slots> | Component<Props>} component\n * @returns {ComponentType<SvelteComponent<Props, Events, Slots> & Exports>}\n */\nexport function asClassComponent(component) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn class extends Svelte4Component {\n\t\t/** @param {any} options */\n\t\tconstructor(options) {\n\t\t\tsuper({\n\t\t\t\tcomponent,\n\t\t\t\t...options\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Support using the component as both a class and function during the transition period\n * @typedef {{new (o: ComponentConstructorOptions): SvelteComponent;(...args: Parameters<Component<Record<string, any>>>): ReturnType<Component<Record<string, any>, Record<string, any>>>;}} LegacyComponentType\n */\n\nclass Svelte4Component {\n\t/** @type {any} */\n\t#events;\n\n\t/** @type {Record<string, any>} */\n\t#instance;\n\n\t/**\n\t * @param {ComponentConstructorOptions & {\n\t * component: any;\n\t * }} options\n\t */\n\tconstructor(options) {\n\t\tvar sources = new Map();\n\n\t\t/**\n\t\t * @param {string | symbol} key\n\t\t * @param {unknown} value\n\t\t */\n\t\tvar add_source = (key, value) => {\n\t\t\tvar s = mutable_source(value, false, false);\n\t\t\tsources.set(key, s);\n\t\t\treturn s;\n\t\t};\n\n\t\t// Replicate coarse-grained props through a proxy that has a version source for\n\t\t// each property, which is incremented on updates to the property itself. Do not\n\t\t// use our $state proxy because that one has fine-grained reactivity.\n\t\tconst props = new Proxy(\n\t\t\t{ ...(options.props || {}), $$events: {} },\n\t\t\t{\n\t\t\t\tget(target, prop) {\n\t\t\t\t\treturn get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t},\n\t\t\t\thas(target, prop) {\n\t\t\t\t\t// Necessary to not throw \"invalid binding\" validation errors on the component side\n\t\t\t\t\tif (prop === LEGACY_PROPS) return true;\n\n\t\t\t\t\tget(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t\treturn Reflect.has(target, prop);\n\t\t\t\t},\n\t\t\t\tset(target, prop, value) {\n\t\t\t\t\tset(sources.get(prop) ?? add_source(prop, value), value);\n\t\t\t\t\treturn Reflect.set(target, prop, value);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tthis.#instance = (options.hydrate ? hydrate : mount)(options.component, {\n\t\t\ttarget: options.target,\n\t\t\tanchor: options.anchor,\n\t\t\tprops,\n\t\t\tcontext: options.context,\n\t\t\tintro: options.intro ?? false,\n\t\t\trecover: options.recover\n\t\t});\n\n\t\t// We don't flushSync for custom element wrappers or if the user doesn't want it,\n\t\t// or if we're in async mode since `flushSync()` will fail\n\t\tif (!async_mode_flag && (!options?.props?.$$host || options.sync === false)) {\n\t\t\tflushSync();\n\t\t}\n\n\t\tthis.#events = props.$$events;\n\n\t\tfor (const key of Object.keys(this.#instance)) {\n\t\t\tif (key === '$set' || key === '$destroy' || key === '$on') continue;\n\t\t\tdefine_property(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#instance[key];\n\t\t\t\t},\n\t\t\t\t/** @param {any} value */\n\t\t\t\tset(value) {\n\t\t\t\t\tthis.#instance[key] = value;\n\t\t\t\t},\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t}\n\n\t\tthis.#instance.$set = /** @param {Record<string, any>} next */ (next) => {\n\t\t\tObject.assign(props, next);\n\t\t};\n\n\t\tthis.#instance.$destroy = () => {\n\t\t\tunmount(this.#instance);\n\t\t};\n\t}\n\n\t/** @param {Record<string, any>} props */\n\t$set(props) {\n\t\tthis.#instance.$set(props);\n\t}\n\n\t/**\n\t * @param {string} event\n\t * @param {(...args: any[]) => any} callback\n\t * @returns {any}\n\t */\n\t$on(event, callback) {\n\t\tthis.#events[event] = this.#events[event] || [];\n\n\t\t/** @param {any[]} args */\n\t\tconst cb = (...args) => callback.call(this, ...args);\n\t\tthis.#events[event].push(cb);\n\t\treturn () => {\n\t\t\tthis.#events[event] = this.#events[event].filter(/** @param {any} fn */ (fn) => fn !== cb);\n\t\t};\n\t}\n\n\t$destroy() {\n\t\tthis.#instance.$destroy();\n\t}\n}\n\n/**\n * Runs the given function once immediately on the server, and works like `$effect.pre` on the client.\n *\n * @deprecated Use this only as a temporary solution to migrate your component code to Svelte 5.\n * @param {() => void | (() => void)} fn\n * @returns {void}\n */\nexport function run(fn) {\n\tuser_pre_effect(() => {\n\t\tfn();\n\t\tvar effect = /** @type {import('#client').Effect} */ (active_effect);\n\t\t// If the effect is immediately made dirty again, mark it as maybe dirty to emulate legacy behaviour\n\t\tif ((effect.f & DIRTY) !== 0) {\n\t\t\tlet filename = \"a file (we can't know which one)\";\n\t\t\tif (DEV) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tfilename = dev_current_component_function?.[FILENAME] ?? filename;\n\t\t\t}\n\t\t\tw.legacy_recursive_reactive_block(filename);\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\t});\n}\n\n/**\n * Function to mimic the multiple listeners available in svelte 4\n * @deprecated\n * @param {EventListener[]} handlers\n * @returns {EventListener}\n */\nexport function handlers(...handlers) {\n\treturn function (event) {\n\t\tconst { stopImmediatePropagation } = event;\n\t\tlet stopped = false;\n\n\t\tevent.stopImmediatePropagation = () => {\n\t\t\tstopped = true;\n\t\t\tstopImmediatePropagation.call(event);\n\t\t};\n\n\t\tconst errors = [];\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error `this` is not typed\n\t\t\t\thandler?.call(this, event);\n\t\t\t} catch (e) {\n\t\t\t\terrors.push(e);\n\t\t\t}\n\n\t\t\tif (stopped) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let error of errors) {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Function to create a `bubble` function that mimic the behavior of `on:click` without handler available in svelte 4.\n * @deprecated Use this only as a temporary solution to migrate your automatically delegated events in Svelte 5.\n */\nexport function createBubbler() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createBubbler');\n\t}\n\n\treturn (/**@type {string}*/ type) => (/**@type {Event}*/ event) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {any} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport {\n\tonce,\n\tpreventDefault,\n\tself,\n\tstopImmediatePropagation,\n\tstopPropagation,\n\ttrusted,\n\tpassive,\n\tnonpassive\n} from '../internal/client/dom/legacy/event-modifiers.js';\n","import { createClassComponent } from '../../../../legacy/legacy-client.js';\nimport { effect_root, render_effect } from '../../reactivity/effects.js';\nimport { append } from '../template.js';\nimport { define_property, get_descriptor, object_keys } from '../../../shared/utils.js';\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n\n/** @type {any} */\nlet SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** @type {any} The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** @type {Record<string, any>} Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, EventListenerOrEventListenerObject[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<EventListenerOrEventListenerObject, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\t\t/** @type {any} The managed render effect for reflecting attributes */\n\t\t$$me;\n\n\t\t/**\n\t\t * @param {*} $$componentCtor\n\t\t * @param {*} $$slots\n\t\t * @param {*} use_shadow_dom\n\t\t */\n\t\tconstructor($$componentCtor, $$slots, use_shadow_dom) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\t\t\tif (use_shadow_dom) {\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t/** @param {string} name */\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @param {Element} anchor\n\t\t\t\t\t */\n\t\t\t\t\treturn (anchor) => {\n\t\t\t\t\t\tconst slot = document.createElement('slot');\n\t\t\t\t\t\tif (name !== 'default') slot.name = name;\n\n\t\t\t\t\t\tappend(anchor, slot);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t/** @type {Record<string, any>} */\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\tif (name === 'default' && !this.$$d.children) {\n\t\t\t\t\t\t\tthis.$$d.children = create_slot(name);\n\t\t\t\t\t\t\t$$slots.default = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$$slots[name] = create_slot(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = createClassComponent({\n\t\t\t\t\tcomponent: this.$$ctor,\n\t\t\t\t\ttarget: this.shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$host: this\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tthis.$$me = effect_root(() => {\n\t\t\t\t\trender_effect(() => {\n\t\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\t\tfor (const key of object_keys(this.$$c)) {\n\t\t\t\t\t\t\tif (!this.$$p_d[key]?.reflect) continue;\n\t\t\t\t\t\t\tthis.$$d[key] = this.$$c[key];\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.$$r = false;\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\n\t\t/**\n\t\t * @param {string} attr\n\t\t * @param {string} _oldValue\n\t\t * @param {string} newValue\n\t\t */\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn && this.$$c) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$me();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * @param {string} attribute_name\n\t\t */\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tobject_keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n */\nfunction get_custom_elements_slots(element) {\n\t/** @type {Record<string, true>} */\n\tconst result = {};\n\telement.childNodes.forEach((node) => {\n\t\tresult[/** @type {Element} node */ (node).slot || 'default'] = true;\n\t});\n\treturn result;\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {any} Component A Svelte component function\n * @param {Record<string, CustomElementPropDefinition>} props_definition The props to observe\n * @param {string[]} slots The slots to create\n * @param {string[]} exports Explicitly exported values, other than props\n * @param {boolean} use_shadow_dom Whether to use shadow DOM\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\texports,\n\tuse_shadow_dom,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, use_shadow_dom);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn object_keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tobject_keys(props_definition).forEach((prop) => {\n\t\tdefine_property(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tvar component = this.$$c;\n\n\t\t\t\tif (component) {\n\t\t\t\t\t// // If the instance has an accessor, use that instead\n\t\t\t\t\tvar setter = get_descriptor(component, prop)?.get;\n\n\t\t\t\t\tif (setter) {\n\t\t\t\t\t\tcomponent[prop] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcomponent.$set({ [prop]: value });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\texports.forEach((property) => {\n\t\tdefine_property(Class.prototype, property, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[property];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ Class;\n\treturn Class;\n}\n","function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\t// TODO: Deprecate the boolean parameter at some point.\n\tconst {immediate} = typeof options === 'boolean' ? {immediate: options} : options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\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 * Chart.js v4.5.0\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\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 */ function isNullOrUndef(value) {\n return value === null || value === undefined;\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 */ function isArray(value) {\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 * 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 */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\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 */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\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 */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\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 */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\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 * 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 */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\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 for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\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 */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\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}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\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);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\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 * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\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 * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\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}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\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 * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\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)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\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}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\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 */ function _decimalPlaces(x) {\n if (!isNumberFinite(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// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\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 return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\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 || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\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 return {\n lo,\n 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 */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\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 */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\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 */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\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 * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\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 * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\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 if (minDefined) {\n start = Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @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.slice(0, start + 1).reverse().findIndex((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(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @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.slice(end - 1).findIndex((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 return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ 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 || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\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 */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\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 easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\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 easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction 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 defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\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 defaults.describe('animations', {\n _fallback: 'animation'\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\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\n }\n }\n }\n });\n}\n\nfunction 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();\nfunction getNumberFormat(locale, options) {\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}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\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 delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\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 ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\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 border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\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 callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\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 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 defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(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}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n 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 this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\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 apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__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}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\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 */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\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/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\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 ctx.restore();\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 * 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 */ function _alignPixel(chart, pixel, width) {\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 * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\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}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\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 if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\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 */ 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 */ 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 ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\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 */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\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}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\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 * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\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 */ 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 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}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\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 */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\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 * @alias Chart.helpers.options\n * @namespace\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 */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\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 */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n 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 */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n '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 */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\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 */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\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 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 font.string = toFontString(font);\n return font;\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 */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\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 * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\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 */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\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 * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, 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 });\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 */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\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}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\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}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\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}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\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}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\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}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\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), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\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}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\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}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\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}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\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\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\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 let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\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 const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\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 * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\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 if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\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 tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\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 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 * 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 */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\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 if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\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] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\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 * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\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 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(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\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 if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\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 return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\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}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\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 {\n x,\n y,\n 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 */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\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 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}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\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}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\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 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 const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n 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 */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\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 if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.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 * 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 */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\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 * 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 */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\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\nconst getRightToLeftAdapter = function(rectX, width) {\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};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\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}\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}\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 let { start , end , loop } = segment;\n let i, ilen;\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 if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n 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 const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\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 for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\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 function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function 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 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({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\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 if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\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 function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function 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 function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\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({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\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 return result;\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}\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\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\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}\nfunction getDatasetClipArea(chart, meta) {\n const clip = meta._clip;\n if (clip.disabled) {\n return false;\n }\n const area = getDatasetArea(meta, chart.chartArea);\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\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, getStyle as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, distanceBetweenPoints as aF, noop as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, Ticks as aM, log10 as aN, _longestText as aO, _filterBetween as aP, _lookup as aQ, isPatternOrGradient as aR, getHoverColor as aS, clone as aT, _merger as aU, _mergerIf as aV, _deprecated as aW, _splitKey as aX, toFontString as aY, splineCurve as aZ, splineCurveMonotone as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, getDatasetClipArea as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _normalizeAngle as al, _readValueToProps as am, _updateBezierControlPoints as an, _computeSegments as ao, _boundSegments as ap, _steppedInterpolation as aq, _bezierInterpolation as ar, _pointInLine as as, _steppedLineTo as at, _bezierCurveTo as au, drawPoint as av, addRoundedRectPath as aw, toTRBL as ax, toTRBLCorners as ay, _boundSegment as az, isArray as b, fontString as b0, toLineHeight as b1, PITAU as b2, INFINITY as b3, RAD_PER_DEG as b4, QUARTER_PI as b5, TWO_THIRDS_PI as b6, _angleDiff as b7, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.dataset.js.map\n","/*!\n * Chart.js v4.5.0\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as getDatasetClipArea, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _normalizeAngle, am as _readValueToProps, an as _updateBezierControlPoints, ao as _computeSegments, ap as _boundSegments, aq as _steppedInterpolation, ar as _bezierInterpolation, as as _pointInLine, at as _steppedLineTo, au as _bezierCurveTo, av as drawPoint, aw as addRoundedRectPath, ax as toTRBL, ay as toTRBLCorners, az as _boundSegment, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as distanceBetweenPoints, aG as noop, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as Ticks, aN as log10, aO as _longestText, aP as _filterBetween, aQ as _lookup } from './chunks/helpers.dataset.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\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 for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\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 listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\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 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 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 for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n 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 active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\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([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\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 this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\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 this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n 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\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\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 (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\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 for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\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 if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\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 return Promise.all(running);\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 target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\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}\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 return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\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 return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\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 if (value === null) {\n return;\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 (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n if (!found && !options.all) {\n return 0;\n }\n return value;\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}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\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}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\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 return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\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 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 stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\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}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\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}\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),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\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 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 this.initialize();\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 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 updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\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 getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\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 _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\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 addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\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 parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\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 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 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 if (_stacked) {\n updateStacks(this, parsed);\n }\n }\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 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 parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\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 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 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 getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\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, {\n mode\n });\n }\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 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 = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\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 break;\n }\n }\n if (sorted) {\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 getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\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 _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 update(mode) {}\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 if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\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 for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\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 || (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 || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\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 ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\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 getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\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 {\n sharedOptions,\n includeOptions\n };\n }\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 updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\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 options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\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 _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\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 for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\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 _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([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\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 function 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 return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function 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 if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\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 if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\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}\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 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}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\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}\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 {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\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 res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\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}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\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 parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\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 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 range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\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) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\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 for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\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 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 _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).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 const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getAxisCount() {\n return this._getAxis().length;\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 _getAxis() {\n const axis = {};\n const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n for (const dataset of this.chart.data.datasets){\n axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;\n }\n return Object.keys(axis);\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\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 for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\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 ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\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 if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\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 if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\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 return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\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' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : 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 center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\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 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\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\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 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 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 getMaxOverflow() {\n const data = this._cachedMeta.data;\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 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 return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\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 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 properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\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 (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 {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\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 return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\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 index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\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 _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\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 min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\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 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 meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\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 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 for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\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 this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\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 return total;\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 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 return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\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 if (!arcs) {\n return 0;\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 getMaxOffset(arcs) {\n let max = 0;\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 _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\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 this.updateElements(points, start, count, mode);\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 for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\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 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 if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\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 draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\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 return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\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 index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\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 constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\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 return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\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 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 this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\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 const defaultAngle = 360 / this.countVisibleElements();\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 if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\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 this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\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 static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\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 line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\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 const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\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 return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\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 delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\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 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 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 if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\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 const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\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\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\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 */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\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 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 const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.lo -= Math.max(0, distanceToDefinedLo);\n const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\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 {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function 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 function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\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 function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\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({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\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 ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\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({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\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 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 x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\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\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\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 ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\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}\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] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function 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}\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 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}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\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}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\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 if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\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 return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\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}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\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}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\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 chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\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 configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\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 each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\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 const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\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 each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\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 isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const 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};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\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 style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\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 return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\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}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\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, {\n childList: true,\n subtree: true\n });\n return observer;\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, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\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}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\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 listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].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 const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\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 removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\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 getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction 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 if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\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}\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 function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\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 function 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 function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\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 function 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 spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\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 function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\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\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 function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function 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;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\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 if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function 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 function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\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 return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\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 if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\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 {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\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._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\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 init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\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 parse(raw, index) {\n return raw;\n }\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: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n 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 min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\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 getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\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 this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\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 this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\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 if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\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 afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\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 = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\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 if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\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;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\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 if (isHorizontal) {\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 const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\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 _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 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 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 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 if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\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 afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\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 this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\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 this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\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 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] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\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 for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\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 const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n 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 getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\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 getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\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 return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\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 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 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 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 tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\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 const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\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 this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\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 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 if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\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 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 if (isHorizontal) {\n x = pixel;\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 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 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 let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\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 }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\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: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\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 return align;\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 let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\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 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 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 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 return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\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 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 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 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 ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n 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 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 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 ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\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 if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\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 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 const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\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: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\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 if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\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 _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass 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 isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\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}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\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 = [\n scope\n ].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}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass 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 this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].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 each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\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 return this.plugins;\n }\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}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\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 const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\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 = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\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 return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\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 function 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 const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n 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}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\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, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\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 scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction 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}\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}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\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}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || 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}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n 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}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\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), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\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], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\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}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\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 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 _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 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 const scopes = new Set();\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 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 chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\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 const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\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}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\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)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.5.0\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\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 function 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}\nclass Chart {\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 static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\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('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\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 this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\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 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 instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n 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 this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\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 if (scaleOpts) {\n items = items.concat(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 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 if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\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 scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\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 _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 buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\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 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 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 this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\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 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 if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\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 this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\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 if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\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 _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\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).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\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({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\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 this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\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 return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n const clip = getDatasetClipArea(this, meta);\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (clip) {\n clipArea(ctx, clip);\n }\n meta.controller.draw();\n if (clip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\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 return [];\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 if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\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 return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\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 if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\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 _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\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 delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\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 const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\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 getActiveElements() {\n return this._active || [];\n }\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 return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\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 if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\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 if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\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 if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipSelf(ctx, element, endAngle) {\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 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 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 ctx.moveTo(0, 0);\n ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.clip('evenodd');\n}\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\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}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\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 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 * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\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 */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\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 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$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\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 // 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 // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\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 // 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 // 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 // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\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 const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\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}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\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 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 if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n clipSelf(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\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 static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\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 if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\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 return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\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 tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\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 if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\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 ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\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}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\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 return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function 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 let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\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 prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function 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 const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _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 function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\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}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\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}\nclass LineElement extends Element {\n static id = 'line';\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 static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\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 if (cfg) {\n Object.assign(this, cfg);\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 set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\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 interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\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 pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\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 * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\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 draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\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 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\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\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 return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\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}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\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}\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 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}\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 return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\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}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\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 if (cfg) {\n Object.assign(this, cfg);\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 ctx.save();\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 ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\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}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\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 for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\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 maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\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 const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\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 if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\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 if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\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}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\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 return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\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 if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\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 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 dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\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 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}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _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({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _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}\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\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n 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 pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\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 value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _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({\n x: null,\n y: scale.bottom\n }, line));\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({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\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 function 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 if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\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 {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\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\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\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 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 for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _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, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis,\n clip\n });\n unclipArea(ctx);\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 ctx.save();\n let fillColor = below;\n if (below !== above) {\n if (property === 'x') {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property,\n clip\n });\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, {\n line,\n target,\n color: below,\n scale,\n property,\n clip\n });\n ctx.restore();\n ctx.save();\n clipHorizontal(ctx, target, area.right);\n fillColor = above;\n }\n }\n fill(ctx, {\n line,\n target,\n color: fillColor,\n scale,\n property,\n clip\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\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, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction clipHorizontal(ctx, target, clipX) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\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, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(clipX, lastPoint.y);\n }\n }\n ctx.lineTo(clipX, target.first().y);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale , clip } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, clip, bounds) {\n const chartArea = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x' || property === 'y') {\n let left, top, right, bottom;\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 ctx.beginPath();\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 ctx.rect(left, top, right - left, bottom - top);\n ctx.clip();\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\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\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 meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\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 source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\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 update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\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 buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\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 let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\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 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 hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\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 let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\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 isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\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 this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\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 ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\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 drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\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 ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\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 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 overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\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 rtlHelper.setWidth(this.width);\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 const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\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 restoreTextDirection(this.ctx, opts.textDirection);\n }\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 if (!titleOpts.display) {\n return;\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 let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\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 const x = _alignStartEnd(position, left, left + maxWidth);\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 renderText(ctx, titleOpts.text, x, y, titleFont);\n }\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 _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\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 {\n itemWidth,\n 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}\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}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\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}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\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 onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\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 datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\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 update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\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 if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\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 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 {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\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 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: [\n titleX,\n 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 layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\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\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\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\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\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 if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\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 if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function 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 function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\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 function 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 const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\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 if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\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 widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\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 if (xAlign === 'right' && x - width - caret < 0) {\n return true;\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 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 if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\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}\nfunction alignY(size, yAlign, paddingAndSize) {\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 function 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 let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\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 return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\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}\nconst defaultCallbacks = {\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 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 return '';\n },\n afterTitle: noop,\n beforeBody: noop,\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 let label = tooltipItem.dataset.label || '';\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 afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\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 this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\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 return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\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 let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\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 bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\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 let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\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 for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\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 this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\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 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 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 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 this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\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 this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\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 if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\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 if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\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;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\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 if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\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 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 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 ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\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 const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\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 const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\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 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 ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\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 ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\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 _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\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 opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\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 if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\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}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\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 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: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\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 additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\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}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\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 parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\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 this.min = min;\n this.max = max;\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 labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\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 getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\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 if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\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 if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\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 niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\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 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({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== 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({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\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}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\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 if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\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$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\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 getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\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 getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\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}\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 function 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({\n value,\n major: isMajor(value),\n significand\n });\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({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\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 setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\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 ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\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}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\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 return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\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 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 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 scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\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}\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 visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\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 for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\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}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\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}\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}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\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 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}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\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 renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\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 determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\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 getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\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 getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\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 getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\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 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 drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\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 drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\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 ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\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 if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function 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 return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function 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 function 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 function 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 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 function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\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 if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\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 if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\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 this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\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 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 if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\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 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 if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\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 _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\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 return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\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 getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\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 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 _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 return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\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 return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\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 const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\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 buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\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 if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n 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 if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\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 _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\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\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","<svelte:options customElement=\"hb-chartjs\" />\n\n<script lang=\"ts\">\n import { onMount } from \"svelte\";\n\n import debounce from \"debounce\";\n import {\n Chart,\n ArcElement,\n LineElement,\n BarElement,\n PointElement,\n BarController,\n BubbleController,\n DoughnutController,\n LineController,\n PieController,\n PolarAreaController,\n RadarController,\n ScatterController,\n CategoryScale,\n LinearScale,\n LogarithmicScale,\n RadialLinearScale,\n TimeScale,\n TimeSeriesScale,\n Decimation,\n Filler,\n Legend,\n Title,\n Tooltip,\n SubTitle,\n } from \"chart.js\";\n const component = $host();\n\n Chart.register(\n ArcElement,\n LineElement,\n BarElement,\n PointElement,\n BarController,\n BubbleController,\n DoughnutController,\n LineController,\n PieController,\n PolarAreaController,\n RadarController,\n ScatterController,\n CategoryScale,\n LinearScale,\n LogarithmicScale,\n RadialLinearScale,\n TimeScale,\n TimeSeriesScale,\n Decimation,\n Filler,\n Legend,\n Title,\n Tooltip,\n SubTitle,\n );\n\n import type { Component, Events } from \"./types/webcomponent.type\";\n\n function dispatch(name: string, detail: any) {\n $host().dispatchEvent(new CustomEvent(name, { detail }));\n }\n\n let { id = \"\", data = undefined }: Component = $props();\n\n let mounted = false;\n let chart: Chart | undefined = $state(undefined);\n $effect(() => {\n if (data && typeof data === \"string\") {\n data = JSON.parse(data);\n\n updateChart();\n }\n });\n\n function chartClick(evt: MouseEvent) {\n const points = chart?.getElementsAtEventForMode(\n evt,\n \"nearest\",\n { intersect: true },\n true,\n );\n\n let graphPoint: Events[\"chartClick\"] = {};\n\n if (points?.length) {\n const firstPoint = points[0];\n graphPoint.label = chart?.data?.labels?.[firstPoint.index] as string;\n graphPoint.value =\n chart?.data.datasets[firstPoint.datasetIndex].data[firstPoint.index];\n }\n dispatch(\"chartClick\", graphPoint);\n }\n function updateChart() {\n if (mounted && data && component?.shadowRoot?.getElementById(\"canvas\")) {\n if (chart) {\n chart.destroy();\n chart = undefined;\n }\n chart = new Chart(\n component?.shadowRoot?.getElementById(\"canvas\") as HTMLCanvasElement,\n {\n type: data.type,\n data: data.data,\n options: data.options,\n },\n );\n }\n }\n onMount(() => {\n mounted = true;\n\n updateChart();\n });\n</script>\n\n<div part=\"container\" class=\"chart-container\">\n <canvas id=\"canvas\" onclick={debounce(chartClick, 200)}></canvas>\n</div>\n\n<style lang=\"scss\">\n // @forward \"./styles/webcomponent.scss\";\n\n .chart-container {\n position: relative;\n margin: auto;\n }\n</style>\n"],"names":["TEMPLATE_USE_IMPORT_NODE","HYDRATION_START","HYDRATION_END","HYDRATION_ERROR","UNINITIALIZED","DEV","is_array","index_of","array_from","object_keys","define_property","get_descriptor","object_prototype","array_prototype","get_prototype_of","is_extensible","run_all","arr","i","deferred","resolve","reject","promise","res","rej","DERIVED","EFFECT","RENDER_EFFECT","BLOCK_EFFECT","BRANCH_EFFECT","ROOT_EFFECT","BOUNDARY_EFFECT","UNOWNED","DISCONNECTED","CLEAN","DIRTY","MAYBE_DIRTY","INERT","DESTROYED","EFFECT_RAN","EFFECT_TRANSPARENT","INSPECT_EFFECT","HEAD_EFFECT","EFFECT_PRESERVED","USER_EFFECT","REACTION_IS_UPDATING","ASYNC","ERROR_VALUE","STATE_SYMBOL","LEGACY_PROPS","STALE_REACTION","COMMENT_NODE","lifecycle_outside_component","name","effect_in_teardown","rune","effect_in_unowned_derived","effect_orphan","effect_update_depth_exceeded","hydration_failed","state_descriptors_fixed","state_prototype_fixed","state_unsafe_mutation","hydration_mismatch","location","hydrating","set_hydrating","value","hydrate_node","set_hydrate_node","node","w.hydration_mismatch","hydrate_next","get_next_sibling","reset","equals","safe_not_equal","a","b","safe_equals","tracing_mode_flag","component_context","set_component_context","context","push","props","runes","fn","pop","component","effects","create_user_effect","is_runes","adjustments","handle_error","error","effect","active_effect","active_reaction","apply_adjustments","invoke_error_boundary","adjusted","micro_tasks","idle_tasks","run_micro_tasks","tasks","run_idle_tasks","flush_tasks","derived","flags","parent_derived","user_derived","d","push_reaction_value","destroy_derived_effects","destroy_effect","get_derived_parent_effect","parent","execute_derived","prev_active_effect","set_active_effect","update_reaction","update_derived","increment_write_version","is_destroying_effect","status","skip_reaction","set_signal_status","batches","current_batch","effect_pending_updates","dequeue","task","queued_root_effects","last_scheduled_effect","is_flushing","is_flushing_sync","Batch","#previous","#callbacks","#pending","#deferred","#neutered","#async_effects","#boundary_async_effects","#render_effects","#effects","#block_effects","#dirty_effects","#maybe_dirty_effects","root_effects","root","#traverse_effect_tree","#commit","render_effects","flush_queued_effects","#defer_effects","update_effect","is_branch","is_skippable_branch","skip","is_dirty","child","source","update","flush_effects","e","schedule_effect","batch","flushSync","was_flushing_sync","result","was_updating_effect","is_updating_effect","flush_count","set_is_updating_effect","updates","entry","infinite_loop_guard","old_values","e.effect_update_depth_exceeded","eager_block_effects","length","unlink_effect","signal","v","stack","state","s","mutable_source","initial_value","immutable","trackable","set","should_proxy","untracking","current_sources","e.state_unsafe_mutation","new_value","proxy","internal_set","old_value","mark_reactions","untracked_writes","set_untracked_writes","increment","reactions","reaction","not_dirty","prototype","sources","is_proxied_array","version","parent_version","update_version","with_parent","set_active_reaction","set_update_version","_","prop","descriptor","e.state_descriptors_fixed","target","receiver","exists","p","get","has","other_s","ls","n","own_keys","key","e.state_prototype_fixed","$window","is_firefox","first_child_getter","next_sibling_getter","init_operations","element_prototype","node_prototype","text_prototype","create_text","get_first_child","is_text","clear_text_content","without_reactive_context","previous_reaction","previous_effect","validate_effect","e.effect_orphan","e.effect_in_unowned_derived","e.effect_in_teardown","push_effect","parent_effect","parent_last","create_effect","type","sync","user_effect","defer","effect_root","component_root","options","fulfil","pause_effect","render_effect","branch","execute_effect_teardown","teardown","previously_destroying_effect","set_is_destroying_effect","destroy_effect_children","remove_dom","controller","next","destroy_block_effect_children","removed","remove_effect_dom","remove_reactions","transitions","transition","end","prev","callback","pause_children","run_out_transitions","remaining","check","local","sibling","transparent","new_deps","skipped_deps","write_version","read_version","dependencies","is_unowned","dependency","is_disconnected","is_unowned_connected","schedule_possible_effect_self_invalidation","previous_deps","previous_skipped_deps","previous_untracked_writes","previous_skip_reaction","previous_sources","previous_component_context","previous_untracking","previous_update_version","deps","remove_reaction","index","new_length","start_index","dep","is_derived","destroyed","depends_on_old_values","untrack","STATUS_MASK","all_registered_events","root_event_handles","delegate","events","last_propagated_event","handle_event_propagation","event","handler_element","owner_document","event_name","path","current_target","path_idx","handled_at","at_idx","handler_idx","throw_error","other_errors","parent_element","delegated","data","create_fragment_from_html","html","elem","assign_nodes","start","from_html","content","use_import_node","has_start","clone","append","anchor","dom","PASSIVE_EVENTS","is_passive_event","mount","_mount","hydrate","was_hydrating","previous_hydrate_node","instance","line","e.hydration_failed","document_listeners","Component","intro","registered_events","event_handle","passive","unmount","anchor_node","ctx","mounted_components","onMount","e.lifecycle_outside_component","cleanup","append_styles","css","style","fallback","fallback_value","fallback_dirty","get_fallback","getter","overridden","mutation","createClassComponent","Svelte4Component","#events","#instance","add_source","cb","args","SvelteElement","$$componentCtor","$$slots","use_shadow_dom","listener","unsub","create_slot","slot","existing_slots","get_custom_elements_slots","attribute","get_custom_element_value","attribute_value","attr","_oldValue","newValue","attribute_name","props_definition","transform","element","create_custom_element","slots","exports","extend","Class","setter","property","debounce","function_","wait","immediate","storedContext","storedArguments","timeoutId","timestamp","run","callContext","callArguments","later","last","debounced","arguments_","callNow","debounceModule","round","lim","l","h","p2b","n2b","b2n","n2p","map$1","hex","h1","h2","eq","isShort","hexParse","str","len","ret","alpha","f","hexString","HUE_RE","hsl2rgbn","k","hsv2rgbn","hwb2rgbn","w","rgb","hueValue","r","g","max","rgb2hsl","min","calln","c","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","m","p1","p2","rotate","deg","hslString","map","names$1","unpack","unpacked","keys","tkeys","j","ok","nk","names","nameParse","RGB_RE","rgbParse","rgbString","to","from","interpolate","rgb1","rgb2","t","modHSL","ratio","tmp","proto","fromObject","input","functionParse","Color","obj","color","weight","c1","c2","w2","w1","val","noop","uid","id","isNullOrUndef","isArray","isObject","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","toDimension","thisArg","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","klen","isValidKey","_merger","tval","sval","merge","merger","current","mergeIf","_mergerIf","keyResolvers","o","_splitKey","parts","part","_getKeyResolver","resolveObjectKey","_capitalize","defined","isFunction","setsEqual","item","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","x","y","epsilon","niceNum","range","roundedRange","niceRange","fraction","_factorize","sqrt","isNonPrimitive","isNumber","almostWhole","rounded","_setMinAndMaxByKey","array","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","hi","lo","mid","_lookupByKey","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","method","base","object","unlistenArrayEvents","stub","listeners","_arrayUnique","items","requestAnimFrame","throttled","argsToUse","ticking","delay","timeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","iScale","vScale","_parsed","spanGaps","axis","minDefined","maxDefined","distanceToDefinedLo","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","changed","atEdge","elasticIn","elasticOut","isPatternOrGradient","getHoverColor","numbers","colors","applyAnimationsDefaults","defaults","applyLayoutsDefaults","intlCache","getNumberFormat","locale","cacheKey","formatter","formatNumber","num","formatters","tickValue","ticks","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","remain","Ticks","applyScaleDefaults","_ctx","overrides","descriptors","getScope$1","scope","Defaults","_descriptors","_appliers","targetScope","targetName","scopeObject","targetScopeObject","privateName","appliers","apply","toFontString","font","_measureText","gc","longest","string","textWidth","_longestText","arrayOfThings","cache","jlen","thing","nestedThing","gcLen","_alignPixel","chart","pixel","width","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","drawPointLegend","xOffset","yOffset","size","cornerRadius","xOffsetW","yOffsetW","rotation","radius","rad","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","mode","midpoint","_bezierCurveTo","setRenderOpts","opts","decorateText","metrics","top","bottom","yDecoration","drawBackdrop","oldColor","renderText","text","lines","stroke","addRoundedRectPath","rect","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","inputs","info","_addGrace","minmax","grace","beginAtZero","change","keepZero","add","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","subProxy","descriptorDefaults","_resolveWithContext","_scriptable","_indexable","_allKeys","readKey","prefix","needsSubResolver","_proxy","_context","_subProxy","_resolveScriptable","_resolveArray","getValue","_stack","createSubResolver","isIndexable","resolver","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","parsed","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","getStyle","el","positions","getPositionedStyle","styles","suffix","pos","useOffsetPos","getCanvasPosition","touches","offsetX","offsetY","box","getRelativePosition","currentDevicePixelRatio","borderBox","paddings","borders","height","getContainerSize","maxWidth","maxHeight","container","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","restoreTextDirection","propertyFn","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","normalize","_boundSegment","compare","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","st","dir","styleChanged","replacer","getSizeForArea","scale","chartArea","field","getDatasetArea","getDatasetClipArea","clip","Animator","anims","date","callbacks","numSteps","draw","charts","acc","animator","interpolators","factor","c0","Animation","cfg","currentValue","elapsed","duration","promises","resolved","Animations","config","animationOptions","animatedProps","option","newOptions","resolveTargetOptions","animations","awaitAll","running","animation","properties","anim","scaleClip","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","dsIndex","singleMode","otherValue","found","convertObjectDataToArray","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","updateStacks","iAxis","vAxis","itemStacks","visualValues","getFirstScaleId","scales","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","yid","rid","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","sorted","isNotInOrderComparedToPrev","labels","singleScale","xAxisKey","yAxisKey","parsedValue","otherScale","otherMin","otherMax","_skip","elements","active","drawActiveElementsOnTop","elementType","sharing","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","arg1","arg2","numMeta","numData","move","newCount","getAllScaleValues","visibleMetas","computeMinSampleSize","curr","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","computeFlexCategoryTraits","pixels","percent","parseFloatBar","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","borderProps","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","BarController","bars","horizontal","vpixels","ipixels","dataIndex","currentParsed","iScaleValue","skipNull","indexScaleId","firstScaleAxisId","barThickness","baseValue","minBarLength","floating","head","startPixel","endPixel","halfGrid","maxBarThickness","center","axisCount","axisID","axisNumber","stackIndex","rects","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","pointStyle","label","legendItem","legend","arcs","spacing","maxSize","chartWeight","maxRadius","outerRadius","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","total","ringWeightOffset","LineController","_dataset","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","border","lastPoint","PolarAreaController","minSize","datasetStartAngle","defaultAngle","PieController","RadarController","pointPosition","ScatterController","showLine","abstract","DateAdapterBase","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","evaluateInteractionItems","position","handler","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","includeInvisible","getNearestRadialItems","evaluationFunc","getNearestCartesianItems","distanceMetric","minDistance","inRange","distance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","same","other","setBoxDims","placeBoxes","userPadding","layoutItem","minPadding","padding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","observer","entries","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","resize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","initial","proxies","_detectPlatform","Element$1","final","autoSkip","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","offset","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","diff","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","getPixelForGridLine","offsetGridLines","validIndex","lineValue","garbageCollect","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","tick","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","Element","raw","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","tickFont","fontString","lineHeight","nestedLabel","valueAt","idx","decimal","optionTicks","rot","grid","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","backgroundColor","drawLine","lastLineWidth","renderTextOptions","title","tz","gz","bz","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","typedRegistry","arg","reg","itemReg","registry","camelMethod","PluginService","hook","filter","plugin","all","plugins","allPlugins","createDescriptors","previousDescriptors","localIds","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","visible","platform","_add","_remove","detached","attached","enabled","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","clipSelf","borderWidth","borderJoinStyle","outerAngleClip","innerAngleClip","clipWidth","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","circular","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawBorder","borderRadius","inner","ArcElement","chartX","chartY","rAdjust","_circumference","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineTo","getLineMethod","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","strokePathWithCache","strokePathDirect","segmentMethod","usePath2D","LineElement","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","amount","refRect","BarElement","borderColor","outer","addRectPath","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","cleanDecimatedDataset","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","plugin_decimation","xAxis","threshold","_segments","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_loop","_shouldApplyFill","_resolveTarget","propagate","fill","visited","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","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","_args","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","row","_itemHeight","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","rtlHelper","hitbox","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","yBoxTop","xBoxLeft","fillText","realX","fontLineHeight","calculateLegendItemHeight","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","ci","usePointStyle","useBorderRadius","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","plugin_subtitle","positioners","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","labelCount","tooltipItem","invokeCallbackWithFallback","Tooltip","beforeTitle","afterTitle","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","titleSpacing","labelColor","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","opacity","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","addIfString","addedLabels","findOrAddLabel","_getLabelForValue","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","setMin","setMax","minSign","maxSign","stepSize","numericGeneratorOptions","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","significand","lastTick","LogarithmicScale","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","limits","valueCount","pointLabelOpts","additionalAngle","plFont","hLimits","vLimits","updateLimits","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","centerPointLabels","drawPointLabelBox","backdropColor","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","angleLines","INTERVALS","UNITS","sorter","parse","adapter","parser","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","minor","weekday","hasWeekday","format","formats","fmt","minorFormat","majorFormat","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","$$props","Decimation","Filler","SubTitle","dispatch","detail","mounted","$.user_effect","updateChart","chartClick","evt","$.get","graphPoint","$.set"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]}
|