{ "version": 3, "sources": ["../node_modules/dayjs/dayjs.min.js", "../node_modules/dayjs/plugin/duration.js", "../node_modules/dayjs/plugin/relativeTime.js", "../src/services/Discord/constants/USER_FLAGS.macro.js", "../node_modules/@twemoji/parser/dist/lib/regex.js", "../node_modules/@twemoji/parser/dist/index.js", "../src/__dayjs.js", "../src/__env.js", "../src/__jsx.tsx", "../src/util/helpers.js", "../src/constants/STOP_WORDS.js", "../node_modules/fflate/esm/browser.js", "../src/util/fs/BaseDirectory.ts", "../node_modules/gocsv/src/errors.ts", "../node_modules/gocsv/src/slice_reader.ts", "../node_modules/gocsv/src/utf8.ts", "../node_modules/gocsv/src/record_buffer.ts", "../node_modules/gocsv/src/reader.ts", "../src/util/fs/BaseFile.ts", "../src/util/fs/JSFile.ts", "../src/util/fs/JSDirectory.ts", "../src/util/fs/ZipFile.ts", "../src/util/fs/ZipDirectory.ts", "../src/components/Spinner.jsx", "../src/components/Dropzone.jsx", "../src/components/ServiceCard.jsx", "../src/services/Discord/index.jsx", "../src/components/Row.jsx", "../src/services/Discord/tiles/Account.jsx", "../node_modules/@kurkle/color/dist/color.esm.js", "../node_modules/chart.js/src/helpers/helpers.core.ts", "../node_modules/chart.js/src/helpers/helpers.math.ts", "../node_modules/chart.js/src/helpers/helpers.collection.ts", "../node_modules/chart.js/src/helpers/helpers.extras.ts", "../node_modules/chart.js/src/helpers/helpers.easing.ts", "../node_modules/chart.js/src/helpers/helpers.color.ts", "../node_modules/chart.js/src/core/core.animations.defaults.js", "../node_modules/chart.js/src/core/core.layouts.defaults.js", "../node_modules/chart.js/src/helpers/helpers.intl.ts", "../node_modules/chart.js/src/core/core.ticks.js", "../node_modules/chart.js/src/core/core.scale.defaults.js", "../node_modules/chart.js/src/core/core.defaults.js", "../node_modules/chart.js/src/helpers/helpers.canvas.ts", "../node_modules/chart.js/src/helpers/helpers.options.ts", "../node_modules/chart.js/src/helpers/helpers.config.ts", "../node_modules/chart.js/src/helpers/helpers.curve.ts", "../node_modules/chart.js/src/helpers/helpers.dom.ts", "../node_modules/chart.js/src/helpers/helpers.interpolation.ts", "../node_modules/chart.js/src/helpers/helpers.rtl.ts", "../node_modules/chart.js/src/helpers/helpers.segment.js", "../node_modules/chart.js/src/core/core.animator.js", "../node_modules/chart.js/src/core/core.animation.js", "../node_modules/chart.js/src/core/core.animations.js", "../node_modules/chart.js/src/core/core.datasetController.js", "../node_modules/chart.js/src/controllers/controller.bar.js", "../node_modules/chart.js/src/controllers/controller.bubble.js", "../node_modules/chart.js/src/controllers/controller.doughnut.js", "../node_modules/chart.js/src/controllers/controller.line.js", "../node_modules/chart.js/src/controllers/controller.polarArea.js", "../node_modules/chart.js/src/controllers/controller.pie.js", "../node_modules/chart.js/src/controllers/controller.radar.js", "../node_modules/chart.js/src/controllers/controller.scatter.js", "../node_modules/chart.js/src/core/core.adapters.ts", "../node_modules/chart.js/src/core/core.interaction.js", "../node_modules/chart.js/src/core/core.layouts.js", "../node_modules/chart.js/src/platform/platform.base.js", "../node_modules/chart.js/src/platform/platform.basic.js", "../node_modules/chart.js/src/platform/platform.dom.js", "../node_modules/chart.js/src/platform/index.js", "../node_modules/chart.js/src/core/core.element.ts", "../node_modules/chart.js/src/core/core.scale.autoskip.js", "../node_modules/chart.js/src/core/core.scale.js", "../node_modules/chart.js/src/core/core.typedRegistry.js", "../node_modules/chart.js/src/core/core.registry.js", "../node_modules/chart.js/src/core/core.plugins.js", "../node_modules/chart.js/src/core/core.config.js", "../node_modules/chart.js/src/core/core.controller.js", "../node_modules/chart.js/src/elements/element.arc.ts", "../node_modules/chart.js/src/elements/element.line.js", "../node_modules/chart.js/src/elements/element.point.ts", "../node_modules/chart.js/src/elements/element.bar.js", "../node_modules/chart.js/src/plugins/plugin.colors.ts", "../node_modules/chart.js/src/plugins/plugin.decimation.js", "../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js", "../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js", "../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js", "../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js", "../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js", "../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js", "../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js", "../node_modules/chart.js/src/plugins/plugin.filler/index.js", "../node_modules/chart.js/src/plugins/plugin.legend.js", "../node_modules/chart.js/src/plugins/plugin.title.js", "../node_modules/chart.js/src/plugins/plugin.subtitle.js", "../node_modules/chart.js/src/plugins/plugin.tooltip.js", "../node_modules/chart.js/src/scales/scale.category.js", "../node_modules/chart.js/src/scales/scale.linearbase.js", "../node_modules/chart.js/src/scales/scale.linear.js", "../node_modules/chart.js/src/scales/scale.logarithmic.js", "../node_modules/chart.js/src/scales/scale.radialLinear.js", "../node_modules/chart.js/src/scales/scale.time.js", "../node_modules/chart.js/src/scales/scale.timeseries.js", "../node_modules/chart.js/src/index.ts", "../src/components/Chart.jsx", "../src/components/Field.jsx", "../src/components/Tile.jsx", "../src/constants/DATE_FORMATS.js", "../src/services/Discord/helpers.js", "../src/services/Discord/tiles/Activity.jsx", "../src/util/readline.js", "../src/util/counter.js", "../src/services/Discord/enums/ChannelTypes.js", "../src/components/Link.jsx", "../src/services/Discord/tiles/Messages.jsx", "../src/services/Spotify/index.jsx", "../src/services/Spotify/tiles/Streaming.jsx", "../src/services/TikTok/index.jsx", "../src/services/TikTok/tiles/Activity.jsx", "../src/services/TikTok/tiles/Advertising.jsx", "../src/services/TikTok/tiles/Videos.jsx", "../src/services/TikTok/tiles/Profile.jsx", "../src/services/index.js", "../src/index.jsx"], "sourcesContent": ["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));", "export = {\"USER_FLAGS\":[{\"flag\":\"STAFF\",\"description\":\"User is a Discord employee.\",\"undocumented\":false,\"value\":BigInt(\"1\")},{\"flag\":\"PARTNER\",\"description\":\"User is a Discord partner.\",\"undocumented\":false,\"value\":BigInt(\"2\")},{\"flag\":\"HYPESQUAD\",\"description\":\"User is a HypeSquad Events member.\",\"undocumented\":false,\"value\":BigInt(\"4\")},{\"flag\":\"BUG_HUNTER_LEVEL_1\",\"description\":\"User is a Bug Hunter.\",\"undocumented\":false,\"value\":BigInt(\"8\")},{\"flag\":\"MFA_SMS\",\"description\":\"User has SMS 2FA enabled.\",\"undocumented\":true,\"value\":BigInt(\"16\")},{\"flag\":\"PREMIUM_PROMO_DISMISSED\",\"description\":\"Unknown. Presumably some sort of Discord Nitro promotion that the user dismissed.\",\"undocumented\":true,\"value\":BigInt(\"32\")},{\"flag\":\"HYPESQUAD_ONLINE_HOUSE_1\",\"description\":\"User is part of HypeSquad Bravery.\",\"undocumented\":false,\"value\":BigInt(\"64\")},{\"flag\":\"HYPESQUAD_ONLINE_HOUSE_2\",\"description\":\"User is part of HypeSquad Brilliance.\",\"undocumented\":false,\"value\":BigInt(\"128\")},{\"flag\":\"HYPESQUAD_ONLINE_HOUSE_3\",\"description\":\"User is a part of HypeSquad Balance.\",\"undocumented\":false,\"value\":BigInt(\"256\")},{\"flag\":\"PREMIUM_EARLY_SUPPORTER\",\"description\":\"User is an Early Supporter.\",\"undocumented\":false,\"value\":BigInt(\"512\")},{\"flag\":\"TEAM_PSEUDO_USER\",\"description\":\"Account is a Team account.\",\"undocumented\":false,\"value\":BigInt(\"1024\")},{\"flag\":\"INTERNAL_APPLICATION\",\"description\":\"An internal flag accidentally leaked to the client's private flags. Relates to partner\\u002Fverification applications but nothing else is known.\",\"undocumented\":true,\"value\":BigInt(\"2048\")},{\"flag\":\"SYSTEM\",\"description\":\"Account is a Discord system account.\",\"undocumented\":true,\"value\":BigInt(\"4096\")},{\"flag\":\"HAS_UNREAD_URGENT_MESSAGES\",\"description\":\"User has unread messages from Discord.\",\"undocumented\":true,\"value\":BigInt(\"8192\")},{\"flag\":\"BUG_HUNTER_LEVEL_2\",\"description\":\"User has the gold Bug Hunter badge.\",\"undocumented\":false,\"value\":BigInt(\"16384\")},{\"flag\":\"UNDERAGE_DELETED\",\"description\":\"Unused. User was deleted for being underage.\",\"undocumented\":true,\"value\":BigInt(\"32768\")},{\"flag\":\"VERIFIED_BOT\",\"description\":\"User is a verified bot.\",\"undocumented\":false,\"value\":BigInt(\"65536\")},{\"flag\":\"VERIFIED_DEVELOPER\",\"description\":\"User is a verified bot developer.\",\"undocumented\":false,\"value\":BigInt(\"131072\")},{\"flag\":\"CERTIFIED_MODERATOR\",\"description\":\"User is a Discord certified moderator alum.\",\"undocumented\":false,\"value\":BigInt(\"262144\")},{\"flag\":\"BOT_HTTP_INTERACTIONS\",\"description\":\"Bot is an HTTP interaction.\",\"undocumented\":false,\"value\":BigInt(\"524288\")},{\"flag\":\"SPAMMER\",\"description\":\"User is marked as a spammer.\",\"undocumented\":true,\"value\":BigInt(\"1048576\")},{\"flag\":\"DISABLE_PREMIUM\",\"description\":\"Forcefully disables Nitro features.\",\"undocumented\":true,\"value\":BigInt(\"2097152\")},{\"flag\":\"ACTIVE_DEVELOPER\",\"description\":\"User is an active developer. https:\\u002F\\u002Fdiscord.com\\u002Fdevelopers\\u002Factive-developer\",\"undocumented\":false,\"value\":BigInt(\"4194304\")},{\"flag\":\"HIGH_GLOBAL_RATE_LIMIT\",\"description\":\"Account has a high global ratelimit.\",\"undocumented\":true,\"value\":BigInt(\"8589934592\")},{\"flag\":\"DELETED\",\"description\":\"Account has been deleted.\",\"undocumented\":true,\"value\":BigInt(\"17179869184\")},{\"flag\":\"DISABLED_SUSPICIOUS_ACTIVITY\",\"description\":\"Account has been disabled for suspicious activity.\",\"undocumented\":true,\"value\":BigInt(\"34359738368\")},{\"flag\":\"SELF_DELETED\",\"description\":\"Account was deleted by the user.\",\"undocumented\":true,\"value\":BigInt(\"68719476736\")},{\"flag\":\"PREMIUM_DISCRIMINATOR\",\"description\":\"User has a premium discriminator.\",\"undocumented\":true,\"value\":BigInt(\"137438953472\")},{\"flag\":\"USED_DESKTOP_CLIENT\",\"description\":\"User has used the desktop client.\",\"undocumented\":true,\"value\":BigInt(\"274877906944\")},{\"flag\":\"USED_WEB_CLIENT\",\"description\":\"User has used the web client.\",\"undocumented\":true,\"value\":BigInt(\"549755813888\")},{\"flag\":\"USED_MOBILE_CLIENT\",\"description\":\"User has used the mobile client.\",\"undocumented\":true,\"value\":BigInt(\"1099511627776\")},{\"flag\":\"DISABLED\",\"description\":\"User is currently temporarily or permanently disabled.\",\"undocumented\":true,\"value\":BigInt(\"2199023255552\")},{\"flag\":\"VERIFIED_EMAIL\",\"description\":\"User has a verified email.\",\"undocumented\":true,\"value\":BigInt(\"8796093022208\")},{\"flag\":\"QUARANTINED\",\"description\":\"User account is quarantined.\",\"undocumented\":true,\"value\":BigInt(\"17592186044416\")},{\"flag\":\"COLLABORATOR\",\"description\":\"User is a collaborator and has staff permissions.\",\"undocumented\":true,\"value\":BigInt(\"1125899906842624\")},{\"flag\":\"RESTRICTED_COLLABORATOR\",\"description\":\"User is a restricted collaborator and has staff permissions.\",\"undocumented\":true,\"value\":BigInt(\"2251799813685248\")}]}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// Copyright Twitter Inc. and other contributors. Licensed under MIT\n// https://github.com/jdecked/twemoji-parser/blob/master/LICENSE.md\n\n// This file is generated by src/scala/scripts/generate.sh\nexports.default = /(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])(?:\\u200d\\u27a1\\ufe0f)?|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f(?:\\u200d\\u27a1\\ufe0f)?)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f(?:\\u200d\\u27a1\\ufe0f)?|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83e\\uddd1\\u200d\\ud83e\\uddd1\\u200d\\ud83e\\uddd2\\u200d\\ud83e\\uddd2|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83e\\uddd1\\u200d\\ud83e\\uddd1\\u200d\\ud83e\\uddd2|\\ud83e\\uddd1\\u200d\\ud83e\\uddd2\\u200d\\ud83e\\uddd2|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u26d3\\ufe0f\\u200d\\ud83d\\udca5|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udf44\\u200d\\ud83d\\udfeb|\\ud83c\\udf4b\\u200d\\ud83d\\udfe9|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc26\\u200d\\ud83d\\udd25|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83d\\ude42\\u200d\\u2194\\ufe0f|\\ud83d\\ude42\\u200d\\u2195\\ufe0f|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddd1\\u200d\\ud83e\\uddd2|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b|\\ud83d\\udc26\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[\u00A9\u00AE\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|\\ud83e\\udef0|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c\\udfc3|\\ud83d\\udeb6|\\ud83e\\uddce)(?:\\ud83c[\\udffb-\\udfff])?(?:\\u200d\\u27a1\\ufe0f)?|(?:\\ud83c[\\udf85\\udfc2\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4\\udeb5\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef1-\\udef8]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedc-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude7c\\ude80-\\ude88\\ude90-\\udebd\\udebf-\\udec2\\udece-\\udedb\\udee0-\\udee8]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g;", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.TypeName = undefined;\nexports.parse = parse;\nexports.toCodePoints = toCodePoints;\n\nvar _regex = require('./lib/regex');\n\nvar _regex2 = _interopRequireDefault(_regex);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TypeName = exports.TypeName = 'emoji';\n// Copyright Twitter Inc. and other contributors. Licensed under MIT\n// https://github.com/jdecked/twemoji-parser/blob/master/LICENSE.md\nfunction parse(text, options) {\n var assetType = options && options.assetType ? options.assetType : 'svg';\n var getTwemojiUrl = options && options.buildUrl ? options.buildUrl : function (codepoints, assetType) {\n return assetType === 'png' ? 'https://cdn.jsdelivr.net/gh/jdecked/twemoji@latest/assets/72x72/' + codepoints + '.png' : 'https://cdn.jsdelivr.net/gh/jdecked/twemoji@latest/assets/svg/' + codepoints + '.svg';\n };\n\n var entities = [];\n\n _regex2.default.lastIndex = 0;\n while (true) {\n var result = _regex2.default.exec(text);\n if (!result) {\n break;\n }\n\n var emojiText = result[0];\n var codepoints = toCodePoints(removeVS16s(emojiText)).join('-');\n\n entities.push({\n url: codepoints ? getTwemojiUrl(codepoints, assetType) : '',\n indices: [result.index, _regex2.default.lastIndex],\n text: emojiText,\n type: TypeName\n });\n }\n return entities;\n}\n\nvar vs16RegExp = /\\uFE0F/g;\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nvar zeroWidthJoiner = String.fromCharCode(0x200d);\n\nvar removeVS16s = function removeVS16s(rawEmoji) {\n return rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji;\n};\n\nfunction toCodePoints(unicodeSurrogates) {\n var points = [];\n var char = 0;\n var previous = 0;\n var i = 0;\n while (i < unicodeSurrogates.length) {\n char = unicodeSurrogates.charCodeAt(i++);\n if (previous) {\n points.push((0x10000 + (previous - 0xd800 << 10) + (char - 0xdc00)).toString(16));\n previous = 0;\n } else if (char > 0xd800 && char <= 0xdbff) {\n previous = char;\n } else {\n points.push(char.toString(16));\n }\n }\n return points;\n}", "import dayjs from \"dayjs\";\n\nimport duration from \"dayjs/plugin/duration\";\nimport relative from \"dayjs/plugin/relativeTime\";\n\ndayjs.extend(duration);\ndayjs.extend(relative);", "window.__ENV = new URL(location).searchParams.get(\"env\");", "declare global {\n namespace JSX {\n type Element = HTMLElement;\n type IntrinsicElements = {\n [K in keyof HTMLElementTagNameMap]: Partial;\n };\n }\n}\n\nexport function __jsx(\n tag: T | Function,\n props: Partial,\n ...children: any[]\n): HTMLElementTagNameMap[T] {\n const element =\n typeof tag === \"string\"\n ? document.createElement(tag)\n : tag instanceof HTMLElement\n ? tag\n : props\n ? tag(props)\n : tag();\n if (props) Object.entries(props).forEach(([key, value]) => (element[key] = value));\n element.append(...children.flat().filter(child => child !== false));\n return element;\n}\n\nexport function __fragment() {\n return document.createDocumentFragment();\n}\n\nObject.assign(window, {__jsx, __fragment});", "import dayjs from \"dayjs\";\nimport { STOP_WORDS } from \"../constants/STOP_WORDS\";\n\nconst WORD_REGEX = /(?<=\\s|^)\\w+(?=\\s|$)/g;\n\nexport function $(id) {\n return document.getElementById(id);\n}\n\nexport function rangeNum(start, end, fn = i => i) {\n if (!end) {\n end = start;\n start = 0;\n }\n\n return Array.from({ length: end - start }, (_, i) => fn(i + start));\n}\n\n/**\n * @param {dayjs.Dayjs} start\n * @param {dayjs.Dayjs} end\n * @param {dayjs.ManipulateType} unit\n */\nexport function rangeDate(start, end, unit) {\n const dates = [];\n for (let current = start; current.isBefore(end); current = current.add(1, unit)) dates.push(current);\n return dates;\n}\n\nlet dummyDate = dayjs();\nexport function formatHour(hour) {\n return dummyDate.hour(hour).format(\"h A\");\n}\n\nexport function formatNum(num) {\n return num.toLocaleString();\n}\n\nexport function formatCurrency(amount, currency) {\n amount ||= 0;\n currency ||= \"USD\";\n return amount.toLocaleString(undefined, { style: \"currency\", currency });\n}\n\nexport function getWords(text) {\n return (text.match(WORD_REGEX) ?? []).map(word => word.toLowerCase()).filter(word => !STOP_WORDS.has(word));\n}", "// https://www.ranks.nl/stopwords\nexport const STOP_WORDS = new Set([\n \"a\",\n \"able\",\n \"about\",\n \"above\",\n \"abst\",\n \"accordance\",\n \"according\",\n \"accordingly\",\n \"across\",\n \"act\",\n \"actually\",\n \"added\",\n \"adj\",\n \"affected\",\n \"affecting\",\n \"affects\",\n \"after\",\n \"afterwards\",\n \"again\",\n \"against\",\n \"ah\",\n \"all\",\n \"almost\",\n \"alone\",\n \"along\",\n \"already\",\n \"also\",\n \"although\",\n \"always\",\n \"am\",\n \"among\",\n \"amongst\",\n \"an\",\n \"and\",\n \"announce\",\n \"another\",\n \"any\",\n \"anybody\",\n \"anyhow\",\n \"anymore\",\n \"anyone\",\n \"anything\",\n \"anyway\",\n \"anyways\",\n \"anywhere\",\n \"apparently\",\n \"approximately\",\n \"are\",\n \"aren\",\n \"arent\",\n \"arise\",\n \"around\",\n \"as\",\n \"aside\",\n \"ask\",\n \"asking\",\n \"at\",\n \"auth\",\n \"available\",\n \"away\",\n \"awfully\",\n \"b\",\n \"back\",\n \"be\",\n \"became\",\n \"because\",\n \"become\",\n \"becomes\",\n \"becoming\",\n \"been\",\n \"before\",\n \"beforehand\",\n \"begin\",\n \"beginning\",\n \"beginnings\",\n \"begins\",\n \"behind\",\n \"being\",\n \"believe\",\n \"below\",\n \"beside\",\n \"besides\",\n \"between\",\n \"beyond\",\n \"biol\",\n \"both\",\n \"brief\",\n \"briefly\",\n \"but\",\n \"by\",\n \"c\",\n \"ca\",\n \"came\",\n \"can\",\n \"cannot\",\n \"can't\",\n \"cause\",\n \"causes\",\n \"certain\",\n \"certainly\",\n \"co\",\n \"com\",\n \"come\",\n \"comes\",\n \"contain\",\n \"containing\",\n \"contains\",\n \"could\",\n \"couldnt\",\n \"d\",\n \"date\",\n \"did\",\n \"didn't\",\n \"different\",\n \"do\",\n \"does\",\n \"doesn't\",\n \"doing\",\n \"done\",\n \"don't\",\n \"down\",\n \"downwards\",\n \"due\",\n \"during\",\n \"e\",\n \"each\",\n \"ed\",\n \"edu\",\n \"effect\",\n \"eg\",\n \"eight\",\n \"eighty\",\n \"either\",\n \"else\",\n \"elsewhere\",\n \"end\",\n \"ending\",\n \"enough\",\n \"especially\",\n \"et\",\n \"et-al\",\n \"etc\",\n \"even\",\n \"ever\",\n \"every\",\n \"everybody\",\n \"everyone\",\n \"everything\",\n \"everywhere\",\n \"ex\",\n \"except\",\n \"f\",\n \"far\",\n \"few\",\n \"ff\",\n \"fifth\",\n \"first\",\n \"five\",\n \"fix\",\n \"followed\",\n \"following\",\n \"follows\",\n \"for\",\n \"former\",\n \"formerly\",\n \"forth\",\n \"found\",\n \"four\",\n \"from\",\n \"further\",\n \"furthermore\",\n \"g\",\n \"gave\",\n \"get\",\n \"gets\",\n \"getting\",\n \"give\",\n \"given\",\n \"gives\",\n \"giving\",\n \"go\",\n \"goes\",\n \"gone\",\n \"got\",\n \"gotten\",\n \"h\",\n \"had\",\n \"happens\",\n \"hardly\",\n \"has\",\n \"hasn't\",\n \"have\",\n \"haven't\",\n \"having\",\n \"he\",\n \"hed\",\n \"hence\",\n \"her\",\n \"here\",\n \"hereafter\",\n \"hereby\",\n \"herein\",\n \"heres\",\n \"hereupon\",\n \"hers\",\n \"herself\",\n \"hes\",\n \"hi\",\n \"hid\",\n \"him\",\n \"himself\",\n \"his\",\n \"hither\",\n \"home\",\n \"how\",\n \"howbeit\",\n \"however\",\n \"hundred\",\n \"i\",\n \"id\",\n \"ie\",\n \"if\",\n \"i'll\",\n \"im\",\n \"immediate\",\n \"immediately\",\n \"importance\",\n \"important\",\n \"in\",\n \"inc\",\n \"indeed\",\n \"index\",\n \"information\",\n \"instead\",\n \"into\",\n \"invention\",\n \"inward\",\n \"is\",\n \"isn't\",\n \"it\",\n \"itd\",\n \"it'll\",\n \"its\",\n \"itself\",\n \"i've\",\n \"j\",\n \"just\",\n \"k\",\n \"keep\\tkeeps\",\n \"kept\",\n \"kg\",\n \"km\",\n \"know\",\n \"known\",\n \"knows\",\n \"l\",\n \"largely\",\n \"last\",\n \"lately\",\n \"later\",\n \"latter\",\n \"latterly\",\n \"least\",\n \"less\",\n \"lest\",\n \"let\",\n \"lets\",\n \"like\",\n \"liked\",\n \"likely\",\n \"line\",\n \"little\",\n \"'ll\",\n \"look\",\n \"looking\",\n \"looks\",\n \"ltd\",\n \"m\",\n \"made\",\n \"mainly\",\n \"make\",\n \"makes\",\n \"many\",\n \"may\",\n \"maybe\",\n \"me\",\n \"mean\",\n \"means\",\n \"meantime\",\n \"meanwhile\",\n \"merely\",\n \"mg\",\n \"might\",\n \"million\",\n \"miss\",\n \"ml\",\n \"more\",\n \"moreover\",\n \"most\",\n \"mostly\",\n \"mr\",\n \"mrs\",\n \"much\",\n \"mug\",\n \"must\",\n \"my\",\n \"myself\",\n \"n\",\n \"na\",\n \"name\",\n \"namely\",\n \"nay\",\n \"nd\",\n \"near\",\n \"nearly\",\n \"necessarily\",\n \"necessary\",\n \"need\",\n \"needs\",\n \"neither\",\n \"never\",\n \"nevertheless\",\n \"new\",\n \"next\",\n \"nine\",\n \"ninety\",\n \"no\",\n \"nobody\",\n \"non\",\n \"none\",\n \"nonetheless\",\n \"noone\",\n \"nor\",\n \"normally\",\n \"nos\",\n \"not\",\n \"noted\",\n \"nothing\",\n \"now\",\n \"nowhere\",\n \"o\",\n \"obtain\",\n \"obtained\",\n \"obviously\",\n \"of\",\n \"off\",\n \"often\",\n \"oh\",\n \"ok\",\n \"okay\",\n \"old\",\n \"omitted\",\n \"on\",\n \"once\",\n \"one\",\n \"ones\",\n \"only\",\n \"onto\",\n \"or\",\n \"ord\",\n \"other\",\n \"others\",\n \"otherwise\",\n \"ought\",\n \"our\",\n \"ours\",\n \"ourselves\",\n \"out\",\n \"outside\",\n \"over\",\n \"overall\",\n \"owing\",\n \"own\",\n \"p\",\n \"page\",\n \"pages\",\n \"part\",\n \"particular\",\n \"particularly\",\n \"past\",\n \"per\",\n \"perhaps\",\n \"placed\",\n \"please\",\n \"plus\",\n \"poorly\",\n \"possible\",\n \"possibly\",\n \"potentially\",\n \"pp\",\n \"predominantly\",\n \"present\",\n \"previously\",\n \"primarily\",\n \"probably\",\n \"promptly\",\n \"proud\",\n \"provides\",\n \"put\",\n \"q\",\n \"que\",\n \"quickly\",\n \"quite\",\n \"qv\",\n \"r\",\n \"ran\",\n \"rather\",\n \"rd\",\n \"re\",\n \"readily\",\n \"really\",\n \"recent\",\n \"recently\",\n \"ref\",\n \"refs\",\n \"regarding\",\n \"regardless\",\n \"regards\",\n \"related\",\n \"relatively\",\n \"research\",\n \"respectively\",\n \"resulted\",\n \"resulting\",\n \"results\",\n \"right\",\n \"run\",\n \"s\",\n \"said\",\n \"same\",\n \"saw\",\n \"say\",\n \"saying\",\n \"says\",\n \"sec\",\n \"section\",\n \"see\",\n \"seeing\",\n \"seem\",\n \"seemed\",\n \"seeming\",\n \"seems\",\n \"seen\",\n \"self\",\n \"selves\",\n \"sent\",\n \"seven\",\n \"several\",\n \"shall\",\n \"she\",\n \"shed\",\n \"she'll\",\n \"shes\",\n \"should\",\n \"shouldn't\",\n \"show\",\n \"showed\",\n \"shown\",\n \"showns\",\n \"shows\",\n \"significant\",\n \"significantly\",\n \"similar\",\n \"similarly\",\n \"since\",\n \"six\",\n \"slightly\",\n \"so\",\n \"some\",\n \"somebody\",\n \"somehow\",\n \"someone\",\n \"somethan\",\n \"something\",\n \"sometime\",\n \"sometimes\",\n \"somewhat\",\n \"somewhere\",\n \"soon\",\n \"sorry\",\n \"specifically\",\n \"specified\",\n \"specify\",\n \"specifying\",\n \"still\",\n \"stop\",\n \"strongly\",\n \"sub\",\n \"substantially\",\n \"successfully\",\n \"such\",\n \"sufficiently\",\n \"suggest\",\n \"sup\",\n \"sure\\tt\",\n \"take\",\n \"taken\",\n \"taking\",\n \"tell\",\n \"tends\",\n \"th\",\n \"than\",\n \"thank\",\n \"thanks\",\n \"thanx\",\n \"that\",\n \"that'll\",\n \"thats\",\n \"that've\",\n \"the\",\n \"their\",\n \"theirs\",\n \"them\",\n \"themselves\",\n \"then\",\n \"thence\",\n \"there\",\n \"thereafter\",\n \"thereby\",\n \"thered\",\n \"therefore\",\n \"therein\",\n \"there'll\",\n \"thereof\",\n \"therere\",\n \"theres\",\n \"thereto\",\n \"thereupon\",\n \"there've\",\n \"these\",\n \"they\",\n \"theyd\",\n \"they'll\",\n \"theyre\",\n \"they've\",\n \"think\",\n \"this\",\n \"those\",\n \"thou\",\n \"though\",\n \"thoughh\",\n \"thousand\",\n \"throug\",\n \"through\",\n \"throughout\",\n \"thru\",\n \"thus\",\n \"til\",\n \"tip\",\n \"to\",\n \"together\",\n \"too\",\n \"took\",\n \"toward\",\n \"towards\",\n \"tried\",\n \"tries\",\n \"truly\",\n \"try\",\n \"trying\",\n \"ts\",\n \"twice\",\n \"two\",\n \"u\",\n \"un\",\n \"under\",\n \"unfortunately\",\n \"unless\",\n \"unlike\",\n \"unlikely\",\n \"until\",\n \"unto\",\n \"up\",\n \"upon\",\n \"ups\",\n \"us\",\n \"use\",\n \"used\",\n \"useful\",\n \"usefully\",\n \"usefulness\",\n \"uses\",\n \"using\",\n \"usually\",\n \"v\",\n \"value\",\n \"various\",\n \"'ve\",\n \"very\",\n \"via\",\n \"viz\",\n \"vol\",\n \"vols\",\n \"vs\",\n \"w\",\n \"want\",\n \"wants\",\n \"was\",\n \"wasnt\",\n \"way\",\n \"we\",\n \"wed\",\n \"welcome\",\n \"we'll\",\n \"went\",\n \"were\",\n \"werent\",\n \"we've\",\n \"what\",\n \"whatever\",\n \"what'll\",\n \"whats\",\n \"when\",\n \"whence\",\n \"whenever\",\n \"where\",\n \"whereafter\",\n \"whereas\",\n \"whereby\",\n \"wherein\",\n \"wheres\",\n \"whereupon\",\n \"wherever\",\n \"whether\",\n \"which\",\n \"while\",\n \"whim\",\n \"whither\",\n \"who\",\n \"whod\",\n \"whoever\",\n \"whole\",\n \"who'll\",\n \"whom\",\n \"whomever\",\n \"whos\",\n \"whose\",\n \"why\",\n \"widely\",\n \"willing\",\n \"wish\",\n \"with\",\n \"within\",\n \"without\",\n \"wont\",\n \"words\",\n \"world\",\n \"would\",\n \"wouldnt\",\n \"www\",\n \"x\",\n \"y\",\n \"yes\",\n \"yet\",\n \"you\",\n \"youd\",\n \"you'll\",\n \"your\",\n \"youre\",\n \"yours\",\n \"yourself\",\n \"yourselves\",\n \"you've\",\n \"z\",\n \"zero\"\n]);", "// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data.length) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush();\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function () { w.postMessage([]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n */\n Deflate.prototype.flush = function () {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n */\n Gzip.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n */\n Zlib.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n", "import { BaseFile } from \"./BaseFile\";\n\nexport abstract class BaseDirectory {\n isFile: false = false;\n isDirectory: true = true;\n\n abstract get name(): string;\n\n abstract getDir(name: string): Promise>;\n abstract getFile(name: string): Promise;\n\n async findDir(fn: (name: string) => boolean): Promise> {\n for await (const entry of this) if (entry.isDirectory && fn(entry.name)) return entry;\n }\n\n async findFile(fn: (name: string) => boolean): Promise {\n for await (const entry of this) if (entry.isFile && fn(entry.name)) return entry;\n }\n\n abstract [Symbol.asyncIterator](): AsyncGenerator | File>;\n}", "/**\n * Common error class for anything that might go wrong with Reader\n */\nexport class ReaderError extends Error {\n constructor(message: string) {\n super(`csv.Reader: ${message}`)\n Object.setPrototypeOf(this, ReaderError.prototype)\n }\n}\n\ntype ParseErrorArgs = {\n startLine: number\n line: number\n column?: number\n err: ParseErrMessage\n}\n\nexport enum ParseErrMessage {\n ErrTrailingComma = 'extra delimiter at end of line',\n ErrBareQuote = 'bare \" in non-quoted-field',\n ErrQuote = 'extraneous or missing \" in quoted-field',\n ErrFieldCount = 'wrong number of fields',\n}\n\n/**\n * Common error class for parse errors\n */\nexport class ParseError extends ReaderError {\n constructor(args: ParseErrorArgs) {\n if (args.err === ParseErrMessage.ErrFieldCount) {\n super(`record on line ${args.line}: ${args.err}`)\n } else if (args.startLine !== args.line) {\n super(\n `record on line ${args.startLine}; parse error on line ${args.line}, column ${args.column}: ${args.err}`\n )\n } else {\n super(`parse error on line ${args.line}, column ${args.column}: ${args.err}`)\n }\n Object.setPrototypeOf(this, ParseError.prototype)\n }\n}\n\nexport class EOF extends Error {}\n", "import { ReaderError } from './errors'\n\nconst maxConsecutiveEmptyReads = 100\n\nconst isReadableStream = (s: any): s is ReadableStream => {\n return typeof s.getReader === 'function'\n}\n\nconst decoder = new TextDecoder()\n\nexport default class SliceReader {\n buf = ''\n rd?: ReadableStream | ReadableStream // reader provided by the client\n r = 0 // buf read position\n eof = false\n\n constructor(source: ReadableStream | ReadableStream | string | Uint8Array) {\n if (isReadableStream(source)) {\n this.rd = source\n } else if (typeof source === 'string') {\n this.buf = source\n this.eof = true\n } else {\n this.buf = decoder.decode(source)\n this.eof = true\n }\n }\n\n async fill(): Promise {\n if (!this.rd) return\n\n const reader = this.rd.getReader()\n\n // Read new data: try a limited number of times.\n for (let i = maxConsecutiveEmptyReads; i > 0; i--) {\n let newStr: string\n const { done, value } = await reader.read()\n if (done) {\n reader.releaseLock()\n this.eof = true\n return\n }\n if (typeof value === 'string') {\n newStr = value\n } else if (value instanceof Uint8Array) {\n newStr = decoder.decode(value)\n } else {\n reader.releaseLock()\n throw new ReaderError(`unhandled stream result value type \"${typeof value}\"`)\n }\n\n const n = newStr.length\n this.buf = this.buf.slice(this.r) + newStr\n this.r = 0\n if (n > 0) {\n reader.releaseLock()\n return\n }\n }\n throw new ReaderError('no progress')\n }\n\n readSlice(delim: string): string | null {\n // Search buffer.\n const n = this.buf.length\n if (n === this.r) {\n return null\n }\n const i = this.buf.slice(this.r).indexOf(delim)\n if (i >= 0) {\n const line = this.buf.slice(this.r, this.r + i + 1)\n this.r += i + 1\n return line\n } else if (this.eof) {\n const line = this.buf.slice(this.r)\n this.r = n\n return line\n }\n return null\n }\n}\n", "const stringToNum = (s: string) => {\n const a = new Uint8Array(4)\n a.set(new TextEncoder().encode(s))\n return new DataView(a.buffer).getUint32(0)\n}\n\nconst numToString = (n: number) => {\n const dv = new DataView(new Uint8Array(4).buffer)\n dv.setUint32(0, n)\n const b = new Uint8Array(dv.buffer)\n return new TextDecoder().decode(b)\n}\n\nexport const RuneError = 0xfffd // the \"error\" Rune or \"Unicode replacement character\"\nexport const RuneSelf = 0x80 // characters below RuneSelf are represented as themselves in a single byte.\nexport const MaxRune = 0x0010ffff // Maximum valid Unicode code point.\nexport const UTFMax = 4 // maximum number of bytes of a UTF-8 encoded Unicode character.\n\nconst t1 = 0b00000000\nconst tx = 0b10000000\nconst t2 = 0b11000000\nconst t3 = 0b11100000\nconst t4 = 0b11110000\nconst t5 = 0b11111000\n\nconst maskx = 0b00111111\nconst mask2 = 0b00011111\nconst mask3 = 0b00001111\nconst mask4 = 0b00000111\n\nconst rune1Max = (1 << 7) - 1\nconst rune2Max = (1 << 11) - 1\nconst rune3Max = (1 << 16) - 1\n\n// The default lowest and highest continuation byte.\nconst locb = 0b10000000\nconst hicb = 0b10111111\n\n// These names of these constants are chosen to give nice alignment in the\n// table below. The first nibble is an index into acceptRanges or F for\n// special one-byte cases. The second nibble is the Rune length or the\n// Status for the special one-byte case.\nconst xx = 0xf1 // invalid: size 1\nconst as = 0xf0 // ASCII: size 1\nconst s1 = 0x02 // accept 0, size 2\nconst s2 = 0x13 // accept 1, size 3\nconst s3 = 0x03 // accept 0, size 3\nconst s4 = 0x23 // accept 2, size 3\nconst s5 = 0x34 // accept 3, size 4\nconst s6 = 0x04 // accept 0, size 4\nconst s7 = 0x44 // accept 4, size 4\n\n// first is information about the first byte in a UTF-8 sequence.\n// prettier-ignore\nconst first = [\n\t// 1 2 3 4 5 6 7 8 9 A B C D E F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x00-0x0F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x10-0x1F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x20-0x2F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x30-0x3F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x40-0x4F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x50-0x5F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x60-0x6F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x70-0x7F\n\t// 1 2 3 4 5 6 7 8 9 A B C D E F\n\txx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x80-0x8F\n\txx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x90-0x9F\n\txx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xA0-0xAF\n\txx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xB0-0xBF\n\txx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xC0-0xCF\n\ts1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xD0-0xDF\n\ts2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3, // 0xE0-0xEF\n\ts5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xF0-0xFF\n]\n\n// acceptRange gives the range of valid values for the second byte in a UTF-8\n// sequence.\ntype acceptRange = {\n lo: number // lowest value for second byte.\n hi: number // highest value for second byte.\n}\n\n// acceptRanges has size 16 to avoid bounds checks in the code that uses it.\nconst acceptRanges = [\n { lo: locb, hi: hicb },\n { lo: 0xa0, hi: hicb },\n { lo: locb, hi: 0x9f },\n { lo: 0x90, hi: hicb },\n { lo: locb, hi: 0x8f }\n]\nacceptRanges.length = 16\n\n// DecodeRune unpacks the first UTF-8 encoding in p and returns the rune and\n// its width in bytes. If p is empty it returns (RuneError, 0). Otherwise, if\n// the encoding is invalid, it returns (RuneError, 1). Both are impossible\n// results for correct, non-empty UTF-8.\n//\n// An encoding is invalid if it is incorrect UTF-8, encodes a rune that is\n// out of range, or is not the shortest possible UTF-8 encoding for the\n// value. No other validation is performed.\nexport const decodeRune = (p: Uint8Array): [number, number] => {\n const n = p.length\n if (n < 1) {\n return [RuneError, 0]\n }\n const p0 = p[0]\n const x = first[p0]\n if (x >= as) {\n // The following code simulates an additional check for x === xx and\n // handling the ASCII and invalid cases accordingly. This mask-and-or\n // approach prevents an additional branch.\n const mask = (x << 31) >> 31 // Create 0x0000 or 0xFFFF.\n return [(p[0] & ~mask) | (RuneError & mask), 1]\n }\n const sz = x & 7\n const accept = acceptRanges[x >> 4]\n if (n < sz) {\n return [RuneError, 1]\n }\n const b1 = p[1]\n if (b1 < accept.lo || accept.hi < b1) {\n return [RuneError, 1]\n }\n if (sz <= 2) {\n // <= instead of === to help the compiler eliminate some bounds checks\n return [((p0 & mask2) << 6) | (b1 & maskx), 2]\n }\n const b2 = p[2]\n if (b2 < locb || hicb < b2) {\n return [RuneError, 1]\n }\n if (sz <= 3) {\n return [((p0 & mask3) << 12) | ((b1 & maskx) << 6) | (b2 & maskx), 3]\n }\n const b3 = p[3]\n if (b3 < locb || hicb < b3) {\n return [RuneError, 1]\n }\n return [((p0 & mask4) << 18) | ((b1 & maskx) << 12) | ((b2 & maskx) << 6) | (b3 & maskx), 4]\n}\n\n// EncodeRune writes into p (which must be large enough) the UTF-8 encoding of the rune.\n// It returns the number of bytes written.\nexport const encodeRune = (p: Uint8Array, r: number): number => {\n // Negative values are erroneous. Making it unsigned addresses the problem.\n if (r <= rune1Max) {\n p[0] = r\n return 1\n } else if (r <= rune2Max) {\n p[0] = t2 | (r >> 6)\n p[1] = tx | (r & maskx)\n return 2\n } else {\n if (r > MaxRune || (surrogateMin <= r && r <= surrogateMax)) {\n r = RuneError\n }\n if (r <= rune3Max) {\n p[0] = t3 | (r >> 12)\n p[1] = tx | ((r >> 6) & maskx)\n p[2] = tx | (r & maskx)\n return 3\n } else {\n p[0] = t4 | (r >> 18)\n p[1] = tx | ((r >> 12) & maskx)\n p[2] = tx | ((r >> 6) & maskx)\n p[3] = tx | (r & maskx)\n return 4\n }\n }\n}\n\nconst surrogateMin = 0xd800\nconst surrogateMax = 0xdfff\n\n// ValidRune reports whether r can be legally encoded as UTF-8.\n// Code points that are out of range or a surrogate half are illegal.\nexport const validRune = (r: number) => {\n if (0 <= r && r < surrogateMin) return true\n if (surrogateMax < r && r <= MaxRune) return true\n return false\n}\n\n// RuneStart reports whether the byte could be the first byte of an encoded,\n// possibly invalid rune. Second and subsequent bytes always have the top two\n// bits set to 10.\nexport const runeStart = (b: number): boolean => {\n return (b & 0xc0) !== 0x80\n}\n\n// DecodeLastRune unpacks the last UTF-8 encoding in p and returns the rune and\n// its width in bytes. If p is empty it returns (RuneError, 0). Otherwise, if\n// the encoding is invalid, it returns (RuneError, 1). Both are impossible\n// results for correct, non-empty UTF-8.\n//\n// An encoding is invalid if it is incorrect UTF-8, encodes a rune that is\n// out of range, or is not the shortest possible UTF-8 encoding for the\n// value. No other validation is performed.\nexport const decodeLastRune = (p: Uint8Array): [number, number] => {\n const end = p.length\n if (end === 0) {\n return [RuneError, 0]\n }\n let start = end - 1\n let r = p[start]\n if (r < RuneSelf) {\n return [r, 1]\n }\n // guard against O(n^2) behavior when traversing\n // backwards through strings with long sequences of\n // invalid UTF-8.\n let lim = end - UTFMax\n if (lim < 0) {\n lim = 0\n }\n for (start--; start >= lim; start--) {\n if (runeStart(p[start])) {\n break\n }\n }\n if (start < 0) {\n start = 0\n }\n const res = decodeRune(p.slice(start, end))\n r = res[0]\n const size = res[1]\n if (start + size !== end) {\n return [RuneError, 1]\n }\n return [r, size]\n}\n\n// RuneCount returns the number of runes in p. Erroneous and short\n// encodings are treated as single runes of width 1 byte.\nexport const runeCount = (p: Uint8Array): number => {\n const np = p.length\n let n = 0\n for (let i = 0; i < np; ) {\n n++\n const c = p[i]\n if (c < RuneSelf) {\n // ASCII fast path\n i++\n continue\n }\n const x = first[c]\n if (x === xx) {\n i++ // invalid.\n continue\n }\n let size = Math.floor(x & 7)\n if (i + size > np) {\n i++ // Short or invalid.\n continue\n }\n const accept = acceptRanges[x >> 4]\n if (p[i + 1] < accept.lo || accept.hi < p[i + 1]) {\n size = 1\n } else if (size === 2) {\n } else if (p[i + 2] < locb || hicb < p[i + 2]) {\n size = 1\n } else if (size === 3) {\n } else if (p[i + 3] < locb || hicb < p[i + 3]) {\n size = 1\n }\n i += size\n }\n return n\n}\n", "import { ParseErrMessage, ParseError } from './errors'\n\nexport default class RecordBuffer {\n writeIdx = 0\n fieldsPerRecord: number\n fieldBuffer: string[] = []\n fields: string[] = []\n\n constructor(fieldsPerRecord = 0) {\n this.fieldsPerRecord = fieldsPerRecord\n }\n\n append(s: string): void {\n this.fieldBuffer.push(s)\n }\n\n reset(): void {\n if (this.fieldsPerRecord > 0) {\n this.fields = Array(this.fieldsPerRecord)\n } else {\n this.fields = []\n }\n this.fieldBuffer = []\n this.writeIdx = 0\n }\n\n demarcateField(): void {\n const s = this.fieldBuffer.length === 1 ? this.fieldBuffer[0] : this.fieldBuffer.join('')\n if (this.fieldsPerRecord > 0) {\n this.fields[this.writeIdx] = s\n } else {\n this.fields.push(s)\n }\n this.writeIdx++\n this.fieldBuffer = []\n }\n\n toStringArray(recLine: number): string[] {\n // Check or update the expected fields per record.\n if (this.fieldsPerRecord > 0) {\n if (this.writeIdx !== this.fieldsPerRecord) {\n throw new ParseError({\n startLine: recLine,\n line: recLine,\n err: ParseErrMessage.ErrFieldCount,\n })\n }\n } else if (this.fieldsPerRecord === 0) {\n this.fieldsPerRecord = this.writeIdx\n }\n return this.fields\n }\n}\n", "import SliceReader from './slice_reader'\nimport { ReaderError, ParseError, ParseErrMessage } from './errors'\nimport { RuneError, validRune } from './utf8'\nimport RecordBuffer from './record_buffer'\n\nconst isStringArray = (s: any): s is string[] => {\n return s.length === 0 || (s.length > 0 && typeof s[0] === 'string')\n}\n\n/**\n * Reader configurations at the time of creation.\n * @typedef {Object} readerConfig\n */\nexport type readerConfig = {\n /**\n * The field delimiter. Default to comma character (',').\n * Comma must be a valid rune and must not be \\r, \\n,\n * or the Unicode replacement character (0xFFFD).\n */\n comma?: string\n /**\n * Comment, if defined, is the comment character.\n * Lines beginning with the comment character without preceding whitespace are ignored.\n * With leading whitespace the comment character becomes part of the\n * field, even if {@link trimLeadingSpace} is true.\n * Comment must be a valid rune and must not be \\r, \\n,\n * or the Unicode replacement character (0xFFFD).\n * It must also not be equal to {@link comma}.\n */\n comment?: string\n /**\n * The number of expected fields per record.\n * If fieldsPerRecord is positive, Read requires each record to\n * have the given number of fields. If fieldsPerRecord is 0, Read sets it to\n * the number of fields in the first record, so that future records must\n * have the same field count. If fieldsPerRecord is negative, no check is\n * made and records may have a variable number of fields.\n */\n fieldsPerRecord?: number\n /**\n * If lazyQuotes is true,\n * a quote may appear in an unquoted field and a\n * non-doubled quote may appear in a quoted field.\n */\n lazyQuotes?: boolean\n /**\n * If trimLeadingSpace is true,\n * leading white space in a field is ignored.\n * This is done even if the field delimiter, Comma, is white space.\n */\n trimLeadingSpace?: boolean\n}\n\n/**\n * Called once for each record. If this callback returns `true`\n * then abort reading prematurely.\n * @param {string[]} record - Array of fields in this record.\n * @returns {boolean|void} true to abort iteration.\n */\nexport type recordCallback = (record: string[]) => boolean | void\n\nexport const errInvalidDelim = new ReaderError('invalid field or comment delimiter')\n\nconst validDelim = (s: string) => {\n const r = s.charCodeAt(0)\n return r !== 0 && s !== '\"' && s !== '\\r' && s !== '\\n' && validRune(r) && r !== RuneError\n}\n\n// lengthNL reports the number of bytes for the trailing \\n.\nconst lengthNL = (b?: string) => {\n if (b && b.length > 0 && b[b.length - 1] === '\\n') {\n return 1\n }\n return 0\n}\n\n/**\n * @class\n */\nexport default class Reader {\n private comma = ','\n private comment = ''\n private commaLen = 0\n private lazyQuotes = false\n private trimLeadingSpace = false\n private r: SliceReader\n private numLine = 0\n private line = ''\n private fullLine = ''\n private lastRecord = []\n private parsingQuotedString = false\n private recLine = 0\n private rawBuffer = new Uint8Array()\n private recordBuffer: RecordBuffer\n\n /**\n * Create a new instance of Reader.\n * @constructor\n * @param input - CSV text string, bytes array or readable stream of those types.\n * @param config - If present then override default settings.\n */\n constructor(\n input: ReadableStream | ReadableStream | string | Uint8Array,\n config?: readerConfig\n ) {\n this.r = new SliceReader(input)\n this._setComma(',')\n let fieldsPerRecord = 0\n if (config) {\n if (config.comma && config.comma.length > 1) {\n throw new Error('invalid config: comma can be one character only')\n }\n if (config.comment && config.comment.length > 1) {\n throw new Error('invalid config: comment can be one character only')\n }\n if (config.comma) {\n this._setComma(config.comma)\n }\n if (config.comment) {\n this._setComment(config.comment)\n }\n fieldsPerRecord = config.fieldsPerRecord || fieldsPerRecord\n this.lazyQuotes = config.lazyQuotes || this.lazyQuotes\n this.trimLeadingSpace = config.trimLeadingSpace || this.trimLeadingSpace\n }\n this.recordBuffer = new RecordBuffer(fieldsPerRecord)\n }\n\n /**\n * @ignore\n */\n private _setComma(cstr: string): void {\n this.comma = cstr\n this.commaLen = cstr.length\n }\n\n /**\n * @ignore\n */\n private _setComment(cstr: string): void {\n this.comment = cstr\n }\n\n private _readLine(): string | null {\n const sl = this.r.readSlice('\\n')\n if (sl === null) return sl\n let line = sl as string\n\n if (line.length > 0 && this.r.eof) {\n // For backwards compatibility, drop trailing \\r before EOF.\n if (line[line.length - 1] === '\\r') {\n line = line.slice(0, line.length - 1)\n }\n }\n this.numLine++\n // Normalize \\r\\n to \\n on all input lines.\n const n = line.length\n if (n >= 2 && line[n - 2] === '\\r' && line[n - 1] === '\\n') {\n line = line.slice(0, n - 2) + '\\n'\n }\n return line\n }\n\n private _validateCommaComment(): void {\n if (\n this.comma === this.comment ||\n !validDelim(this.comma) ||\n (this.comment !== '' && !validDelim(this.comment))\n ) {\n throw errInvalidDelim\n }\n }\n\n private _handleEOF(): void {\n // Abrupt end of file (EOF or error).\n if (!this.lazyQuotes) {\n const col = this.fullLine.length\n throw new ParseError({\n startLine: this.recLine,\n line: this.numLine,\n column: col,\n err: ParseErrMessage.ErrQuote,\n })\n }\n this.recordBuffer.demarcateField()\n this.parsingQuotedString = false\n }\n\n private _processLine(): boolean {\n if (this.trimLeadingSpace) {\n this.line = this.line.trimStart()\n }\n if (this.line.length === 0 || this.line[0] !== '\"') {\n // Non-quoted string field\n const i = this.line.indexOf(this.comma)\n let field = this.line\n if (i >= 0) {\n field = field.slice(0, i)\n } else {\n field = field.slice(0, field.length - lengthNL(field))\n }\n // Check to make sure a quote does not appear in field.\n if (!this.lazyQuotes) {\n const j = field.indexOf('\"')\n if (j >= 0) {\n const col = this.fullLine.length - (this.line.length - j)\n throw new ParseError({\n startLine: this.recLine,\n line: this.numLine,\n column: col,\n err: ParseErrMessage.ErrBareQuote,\n })\n }\n }\n this.recordBuffer.append(field)\n this.recordBuffer.demarcateField()\n if (i >= 0) {\n this.line = this.line.slice(i + this.commaLen)\n return false\n }\n return true\n } else {\n // Quoted string field\n this.parsingQuotedString = true\n this.line = this.line.slice(1)\n }\n return false\n }\n\n private _parseQuotedString(): boolean | string[] {\n const i = this.line.indexOf('\"')\n if (i >= 0) {\n // Hit next quote.\n this.recordBuffer.append(this.line.slice(0, i))\n this.line = this.line.slice(i + 1)\n const rn = this.line[0]\n\n if (rn === '\"') {\n // `\"\"` sequence (append quote).\n this.recordBuffer.append('\"')\n this.line = this.line.slice(1)\n } else if (rn === this.comma) {\n // `\",` sequence (end of field).\n this.line = this.line.slice(this.commaLen)\n this.recordBuffer.demarcateField()\n this.parsingQuotedString = false\n return false\n } else if (lengthNL(this.line) === this.line.length) {\n // `\"\\n` sequence (end of line).\n this.recordBuffer.demarcateField()\n this.parsingQuotedString = false\n return true\n } else if (this.lazyQuotes) {\n // `\"` sequence (bare quote).\n this.recordBuffer.append('\"')\n } else {\n // `\"*` sequence (invalid non-escaped quote).\n const col = this.fullLine.length - this.line.length - 1\n throw new ParseError({\n startLine: this.recLine,\n line: this.numLine,\n column: col,\n err: ParseErrMessage.ErrQuote,\n })\n }\n } else if (this.line.length > 0) {\n // Hit end of line (copy all data so far).\n this.recordBuffer.append(this.line)\n const sl = this._readLine()\n if (sl === null) {\n if (this.r.eof) {\n this._handleEOF()\n return true\n }\n return []\n }\n this.line = sl\n this.fullLine = this.line\n } else {\n this._handleEOF()\n return true\n }\n return false\n }\n\n private _readLineSkipEmpty(): boolean {\n // Read line (automatically skipping past empty lines and any comments).\n if (this.parsingQuotedString) {\n const sl = this._readLine()\n if (sl === null) {\n return true\n }\n this.line = sl\n this.fullLine = this.line\n } else {\n this.line = ''\n this.fullLine = ''\n while (true) {\n const sl = this._readLine()\n if (sl === null) return true\n this.line = sl\n if (this.comment !== '' && this.line[0] === this.comment) {\n this.line = ''\n continue // Skip comment lines\n }\n if (this.line.length > 0 && this.line.length === lengthNL(this.line)) {\n this.line = ''\n continue // Skip empty lines\n }\n this.fullLine = this.line\n break\n }\n if (this.fullLine.length === 0) {\n return true\n }\n }\n return false\n }\n\n private _fillRecordBuffer(): boolean {\n while (true) {\n if (this.parsingQuotedString) {\n const sl = this._parseQuotedString()\n if (isStringArray(sl)) return true\n if (sl) break\n } else {\n if (this._processLine()) break\n }\n }\n return false\n }\n\n private _readRecord(): string[] {\n this._validateCommaComment()\n if (this._readLineSkipEmpty()) return []\n\n // Parse each field in the record.\n if (!this.parsingQuotedString) {\n this.recordBuffer.reset()\n this.recLine = this.numLine // Starting line for record\n }\n if (this._fillRecordBuffer()) return []\n\n return this.recordBuffer.toStringArray(this.recLine)\n }\n\n /**\n * Read all the remaining records.\n * @param {recordCallback} cb - The callback that will be called with each record.\n * @returns {Promise} Resolve when there's no record left or if reading is aborted.\n */\n async readAll(cb: recordCallback): Promise {\n do {\n await this.r.fill()\n while (true) {\n const record = this._readRecord()\n if (record.length === 0) {\n break\n }\n if (cb(record)) return\n }\n } while (!this.r.eof)\n }\n\n /**\n * Read at most N records.\n * @param {int} n - Maximum number of records to read.\n * @param {recordCallback} cb - The callback to be called with each record.\n * @returns {Promise} Resolve when there's no record left or the maximum number of records have been reached.\n */\n async readN(n: number, cb: recordCallback): Promise {\n let i = n\n while (true) {\n while (true) {\n const record = this._readRecord()\n if (record.length === 0) {\n break\n }\n if (cb(record)) return\n if (--i <= 0) return\n }\n if (this.r.eof) {\n break\n }\n await this.r.fill()\n }\n }\n}\n", "import { Reader } from \"gocsv\";\n\nexport abstract class BaseFile {\n isFile: true = true;\n isDirectory: false = false;\n\n abstract get name(): string;\n\n abstract stream(): Promise>;\n abstract blob(): Promise;\n abstract text(): Promise;\n\n async url() {\n return URL.createObjectURL(await this.blob());\n }\n\n async json() {\n return JSON.parse(await this.text());\n }\n\n csv(withHeaders?: false): AsyncGenerator;\n csv(withHeaders: true): AsyncGenerator, any, unknown>;\n async *csv(withHeaders): any {\n const reader = new Reader(await this.stream());\n\n // extract headers\n const headers =\n withHeaders && (await new Promise(resolve => reader.readN(1, resolve)));\n const columns = withHeaders && headers.length;\n\n // https://github.com/pckhoi/gocsv/blob/main/src/reader.ts#L352\n // not using the built in method because its hard to do async generators\n do {\n // @ts-ignore\n await reader.r.fill();\n while (true) {\n // @ts-ignore\n const record = reader._readRecord();\n if (record.length === 0) break;\n if (withHeaders) {\n const obj = {};\n for (let i = 0; i < columns; i++) obj[headers[i]] = record[i];\n yield obj;\n } else {\n yield record;\n }\n }\n // @ts-ignore\n } while (!reader.r.eof);\n }\n}", "import { BaseFile } from \"./BaseFile\";\n\nexport class JSFile extends BaseFile {\n entry: FileSystemFileEntry;\n\n constructor(entry) {\n super();\n this.entry = entry;\n }\n\n get name() {\n return this.entry.name;\n }\n\n async file() {\n return new Promise((resolve, reject) => this.entry.file(resolve, reject));\n }\n\n async blob(): Promise {\n return await this.file();\n }\n\n async stream(): Promise> {\n // @ts-ignore\n return await this.file().then(file => file.stream());\n }\n\n async text() {\n return await this.file().then(file => file.text());\n }\n}", "import { JSFile } from \"./JSFile\";\nimport { BaseDirectory } from \"./BaseDirectory\";\n\nexport async function readNextEntriesAsync(reader: FileSystemDirectoryReader) {\n return await new Promise((resolve, reject) =>\n reader.readEntries(resolve, reject)\n );\n}\n\nexport async function detectSubfolder(dir: JSDirectory): Promise {\n const entries = [];\n for await (const entry of dir) entries.push(entry);\n if (entries.length === 1) {\n const [entry] = entries\n if (!entry.isDirectory) return dir\n if (!dir.name) return await detectSubfolder(entry)\n return entry\n }\n\n return dir\n}\n\nexport class JSDirectory extends BaseDirectory {\n entry: FileSystemDirectoryEntry;\n\n constructor(entry) {\n super();\n this.entry = entry;\n }\n\n get name() {\n return this.entry.name;\n }\n\n getDir(name: string): Promise> {\n return new Promise((resolve, reject) =>\n this.entry.getDirectory(name, {}, dir => resolve(new JSDirectory(dir)), reject)\n );\n }\n\n getFile(name: string): Promise {\n return new Promise((resolve, reject) =>\n this.entry.getFile(name, {}, entry => resolve(new JSFile(entry)), reject)\n );\n }\n\n async *[Symbol.asyncIterator]() {\n const reader = this.entry.createReader();\n while (true) {\n const entries = await readNextEntriesAsync(reader);\n if (entries.length === 0) break;\n for (const entry of entries) {\n if (entry.isDirectory) yield new JSDirectory(entry);\n if (entry.isFile) yield new JSFile(entry);\n }\n }\n }\n}", "import { DecodeUTF8, UnzipFile } from \"fflate\";\nimport { BaseFile } from \"./BaseFile\";\n\nexport class ZipFile extends BaseFile {\n file: UnzipFile;\n\n constructor(file: UnzipFile) {\n super();\n this.file = file;\n }\n\n get name() {\n return this.file.name.split(\"/\").pop();\n }\n\n async stream(): Promise> {\n const file = this.file;\n return new ReadableStream({\n start(controller) {\n file.ondata = (err, chunk, final) => {\n if (err) return controller.error(err);\n controller.enqueue(chunk);\n if (final) controller.close();\n };\n\n file.start();\n }\n });\n }\n\n async blob() {\n return await new Response(await this.stream()).blob();\n }\n\n async text() {\n let text = \"\";\n return new Promise((resolve, reject) => {\n const decoder = new DecodeUTF8((chunk, final) => {\n text += chunk;\n if (final) resolve(text);\n });\n\n this.file.ondata = (err, chunk, final) => {\n if (err) reject(err);\n else decoder.push(chunk, final);\n };\n\n this.file.start();\n });\n }\n}", "import { BaseDirectory } from \"./BaseDirectory\";\nimport { ZipFile } from \"./ZipFile\";\nimport { UnzipFile } from \"fflate\";\n\nexport class ZipDirectory extends BaseDirectory {\n entries = new Map();\n name: string;\n\n constructor(name: string) {\n super();\n this.name = name;\n }\n\n createFile(file: UnzipFile) {\n const parts = file.name.split(\"/\");\n const name = parts.pop();\n\n if (name) {\n let parentDir: ZipDirectory = this;\n parts.forEach(part => {\n if (parentDir.entries.has(part)) {\n const childDir = parentDir.entries.get(part);\n if (!childDir.isDirectory) throw new Error(`File ${file.name} is a directory`);\n parentDir = childDir;\n } else {\n const childDir = new ZipDirectory(part);\n parentDir.entries.set(part, childDir);\n parentDir = childDir;\n }\n });\n\n parentDir.entries.set(name, new ZipFile(file));\n }\n }\n\n async getDir(name: string) {\n let parentDir: ZipDirectory = this;\n name.split(\"/\").forEach(part => {\n const childDir = parentDir.entries.get(part);\n if (!childDir || !childDir.isDirectory) throw new Error(`Directory ${name} not found`);\n parentDir = childDir;\n });\n\n return parentDir;\n }\n\n async getFile(name: string) {\n const parts = name.split(\"/\");\n const fileName = parts.pop();\n const parentDir = parts.length ? await this.getDir(parts.join(\"/\")) : this;\n const file = parentDir.entries.get(fileName);\n if (!file || !file.isFile) throw new Error(`File ${name} not found`);\n return file;\n }\n\n async *[Symbol.asyncIterator]() {\n return yield* this.entries.values();\n }\n}", "export function Spinner() {\n return (\n
\n
\n
\n
\n
\n
\n );\n}", "import { AsyncUnzipInflate, Unzip } from \"fflate\";\nimport { BaseDirectory, JSDirectory, JSFile, ZipDirectory, detectSubfolder } from \"@common/util/fs\";\n\nimport { $ } from \"@common/util/helpers\";\nimport { Spinner } from \"./Spinner\";\n\nconst app = $(\"app\");\n\nexport function Dropzone({ extract }) {\n return (\n
\n );\n\n /** @type {BaseDirectory} */\n let root;\n\n const entry = ev.target.files[0];\n if (entry.name.endsWith(\".zip\")) {\n const uz = new Unzip();\n const dir = new ZipDirectory(entry.name.replace(\".zip\", \"\"));\n uz.register(AsyncUnzipInflate);\n uz.onfile = file => dir.createFile(file);\n\n const stream = await entry.stream();\n const reader = await stream.getReader();\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n uz.push(value);\n }\n\n root = dir;\n } else {\n throw new Error(\"Invalid file type\");\n }\n\n await extract({ root })\n .then(res => app.replaceChildren(
{res}
))\n .catch(err => {\n console.error(err);\n document.body.innerText = err.message;\n });\n }} />\n );\n\n /** @type {BaseDirectory} */\n let root;\n\n const entry = ev.dataTransfer.items[0].webkitGetAsEntry();\n if (entry.isFile && entry.name.endsWith(\".zip\")) {\n const uz = new Unzip();\n const dir = new ZipDirectory(entry.name.replace(\".zip\", \"\"));\n uz.register(AsyncUnzipInflate);\n uz.onfile = file => dir.createFile(file);\n\n const stream = await new JSFile(entry).stream();\n const reader = await stream.getReader();\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n uz.push(value);\n }\n\n root = dir;\n } else if (entry.isDirectory) {\n root = await detectSubfolder(new JSDirectory(entry.filesystem.root));\n } else {\n throw new Error(\"Invalid file type\");\n }\n\n await extract({ root })\n .then(res => app.replaceChildren(
{res}
))\n .catch(err => {\n console.error(err);\n document.body.innerText = err.message;\n });\n }}\n ondragenter={function () {\n this.classList.add(\"dropzone-active\");\n }}\n ondragleave={function () {\n this.classList.remove(\"dropzone-active\");\n }}\n onclick={() => $(\"dropzone-file-input\").click()}\n ondragover={ev => ev.preventDefault()}\n >\n

Drag and drop files here!

\n
Or click to select files
\n
\n \n );\n}", "import { $ } from \"@common/util/helpers\";\nimport { Dropzone } from \"./Dropzone\";\n\nconst app = $(\"app\");\n\nexport function ServiceCard(service) {\n return (\n {\n app.style.setProperty('--foreground-accent', service.accentColor)\n app.replaceChildren(\n
\n

Click here to learn how to receive your {service.name} data package

\n \n
\n )\n }}\n />\n );\n}", "import { BaseDirectory } from \"@common/util/fs/BaseDirectory.js\";\nimport { Row } from \"@common/components/Row\";\nimport { extractAccount } from \"./tiles/Account\";\nimport { extractActivity } from \"./tiles/Activity\";\nimport { extractMessages } from \"./tiles/Messages.jsx\";\n\nexport const name = \"Discord\"\nexport const accentColor = '#5865F2'\nexport const instructions = 'https://support.discord.com/hc/en-us/articles/360004027692-Requesting-a-Copy-of-your-Data'\n\nexport { default as banner } from './banner.svg'\n\n\n/** @param {{ root: BaseDirectory }} */\nexport async function extract({ root }) {\n const channelNames = await root\n .getFile(\"messages/index.json\")\n .then(res => res.json())\n .then(res => new Map(Object.entries(res).map(([id, name]) => ([id, name?.endsWith('#0') ? name.slice(0, -2) : name]))));\n\n const { Account, Flags, Connections, TopGames } = await extractAccount({ root });\n const { totalReactions, totalMessagesEdited, totalMessagesDeleted, Analytics, TopCalls, PredictedGender, PredictedAge } =\n await extractActivity({ root, channelNames });\n const {\n Messages,\n TopWords,\n TopEmojis,\n TopDms,\n TopChannels,\n TopGuilds,\n MessagesPerMonth,\n MessagesPerHour\n } = await extractMessages({\n root,\n channelNames,\n totalReactions,\n totalMessagesEdited,\n totalMessagesDeleted\n });\n\n return <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n}\n", "export function Row() {\n return
;\n}", "import dayjs from \"dayjs\";\n\nimport { Chart } from \"@common/components/Chart\";\nimport { Field, FieldGroup } from \"@common/components/Field\";\nimport { Tile } from \"@common/components/Tile\";\nimport { SHORT_DATE_TIME } from \"@common/constants/DATE_FORMATS\";\nimport { BaseDirectory } from \"@common/util/fs\";\nimport { formatNum, formatCurrency } from \"@common/util/helpers\";\n\nimport { getSnowflakeTimestamp, extractUserFlags } from \"../helpers\";\nimport { accentColor } from \"..\";\n\nfunction formatDiscriminator(discriminator) {\n return discriminator ? \"#\" + discriminator.toString().padStart(4, \"0\") : '';\n}\n\n/** @param {{ root: BaseDirectory }} */\nexport async function extractAccount({ root }) {\n const accountDir = await root.getDir(\"account\");\n /** @type {import(\"../util/types\").Account} */\n const user = await accountDir.getFile(\"user.json\").then(file => file.json());\n const avatar = await accountDir.findFile(name => /^avatar\\..*$/.test(name));\n const avatarUrl = await avatar.url();\n\n const created = getSnowflakeTimestamp(user.id);\n const moneySpent = formatCurrency(\n user.payments.reduce((total, { amount, amount_refunded }) => total + amount - amount_refunded, 0) / 100,\n user.payments[0]?.currency\n );\n\n const topGames = user.user_activity_application_statistics\n .sort((a, b) => b.total_duration - a.total_duration)\n .slice(0, 10);\n\n if (__ENV !== \"dev\")\n for (const game of topGames)\n game.application_name = await fetch(`https://discord.com/api/v10/applications/${game.application_id}/rpc`)\n .then(res => res.json())\n .then(res => res.name)\n .catch(() => { });\n\n return {\n Account: () =>\n \n

\n \"Avatar\"\n {user.username} {formatDiscriminator(user.discriminator)}\n

\n \n \n \n \n \n \n \n \n \n
,\n Flags: () =>\n \n

Flags

\n \n {extractUserFlags(user.flags).map(({ flag, description }) => )}\n \n
,\n Connections: () =>\n \n

Connections

\n \n {user.connections.map(({ type, name }) => (\n \n ))}\n \n
,\n TopGames: () =>\n \n game.application_name ?? \"Unknown\"),\n datasets: [\n {\n data: topGames.map(game => game.total_duration),\n backgroundColor: accentColor\n }\n ]\n }}\n options={{\n scales: {\n y: { ticks: { callback: label => dayjs.duration(label, \"seconds\").humanize() } }\n }\n }}\n />\n \n };\n}", "/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 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 x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n", "/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n let id = 0;\n return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n return value === null || typeof value === 'undefined';\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray(value: unknown): value is T[] {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault(value: T | undefined, defaultValue: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback R, TA, R>(\n fn: T | undefined,\n args: unknown[],\n thisArg?: TA\n): R | undefined {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each(\n loopable: Record,\n fn: (this: TA, v: T, i: string) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[],\n fn: (this: TA, v: T, i: number) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[] | Record,\n fn: (this: TA, v: T, i: any) => void,\n thisArg?: TA,\n reverse?: boolean\n) {\n let i: number, len: number, keys: string[];\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone(source: T): T {\n if (isArray(source)) {\n return source.map(clone) as unknown as T;\n }\n\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key: string) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\n\nexport interface MergeOptions {\n merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge(target: T, source: [], options?: MergeOptions): T;\nexport function merge(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge(\n target: T,\n source: [S1, S2, S3, S4],\n options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n\n if (!isObject(target)) {\n return target as AnyObject;\n }\n\n options = options || {};\n const merger = options.merger || _merger;\n let current: AnyObject;\n\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options as AnyObject);\n }\n }\n\n return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf(target: T, source: []): T;\nexport function mergeIf(target: T, source: S1): T & S1;\nexport function mergeIf(target: T, source: [S1]): T & S1;\nexport function mergeIf(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n const parts = key.split('.');\n const keys: string[] = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n // For backward compatibility:\n // Chart.helpers.core resolveObjectKey should break at empty key\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = (a: Set, b: Set) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n", "import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n const result: number[] = [];\n const sqrt = Math.sqrt(value);\n let i: number;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) { // if value is a square number\n result.push(sqrt);\n }\n\n result.sort((a, b) => a - b).pop();\n return result;\n}\n\nexport function isNumber(n: unknown): n is number {\n return !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n array: Record[],\n target: { min: number, max: number },\n property: string\n) {\n let i: number, ilen: number, value: number;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n if (!isFiniteNumber(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n centrePoint: Point,\n anglePoint: Point\n) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < (-0.5 * PI)) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n", "import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n table: number[],\n value: number,\n cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: T[],\n value: number,\n cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: unknown[],\n value: number,\n cmp?: (value: number) => boolean\n) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid: number;\n\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n table: Record[],\n key: string,\n value: number,\n last?: boolean\n) =>\n _lookup(table, value, last\n ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n }\n : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n table: Record[],\n key: string,\n value: number\n) =>\n _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n let start = 0;\n let end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener {\n _onDataPush?(...item: T[]): void;\n _onDataPop?(): void;\n _onDataShift?(): void;\n _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n\n delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique(items: T[]) {\n const set = new Set(items);\n\n if (set.size === items.length) {\n return items;\n }\n\n return Array.from(set);\n}\n", "import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled>(\n fn: (...args: TArgs) => void,\n thisArg: any,\n) {\n let argsToUse = [] as TArgs;\n let ticking = false;\n\n return function(...args: TArgs) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce>(fn: (...args: TArgs) => void, delay: number) {\n let timeout;\n return function(...args: TArgs) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n const pointCount = points.length;\n\n let start = 0;\n let count = pointCount;\n\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = _limitValue(Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n", "import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: (t: number) => t,\n\n easeInQuad: (t: number) => t * t,\n\n easeOutQuad: (t: number) => -t * (t - 2),\n\n easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n\n easeInCubic: (t: number) => t * t * t,\n\n easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n\n easeInQuart: (t: number) => t * t * t * t,\n\n easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n\n easeInQuint: (t: number) => t * t * t * t * t,\n\n easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n easeInOutElastic(t: number) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n\n easeInBack(t: number) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n\n easeOutBack(t: number) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n\n easeInOutBack(t: number) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n\n easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n easeOutBounce(t: number) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n\n easeInOutBounce: (t: number) => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n", "import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n value:\n | string\n | { r: number; g: number; b: number; a: number }\n | [number, number, number]\n | [number, number, number, number]\n): Color;\nexport function color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n", "const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n });\n\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n });\n\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n });\n\n defaults.describe('animations', {\n _fallback: 'animation',\n });\n\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0 // show immediately\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n },\n }\n }\n });\n}\n", "export function applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n", "\nconst intlCache = new Map();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n return getNumberFormat(locale, options).format(num);\n}\n", "import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values(value) {\n return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n },\n\n /**\n * Formatter for numeric ticks\n * @method Chart.Ticks.formatters.numeric\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0'; // never show decimal places for 0\n }\n\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n if (ticks.length > 1) {\n // all ticks are small or there huge numbers; use scientific notation\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n const logDelta = log10(Math.abs(delta));\n\n // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n //\n // toFixed has a max of 20 decimal places\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n\n return formatNumber(tickValue, locale, options);\n },\n\n\n /**\n * Formatter for logarithmic ticks\n * @method Chart.Ticks.formatters.logarithmic\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n // Figure out how many digits to show\n // The space between the first two ticks might be smaller than normal spacing\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n", "import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 3.0.0\n */\n bounds: 'ticks',\n\n clip: true,\n\n /**\n * Addition grace added to max and reduced from min data value.\n * @since 3.0.0\n */\n grace: 0,\n\n // grid line settings\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n },\n\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n\n // scale title\n title: {\n // display property\n display: false,\n\n // actual label\n text: '',\n\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n\n // label settings\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n });\n\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n });\n\n defaults.describe('scales', {\n _fallback: 'scale',\n });\n\n defaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n });\n}\n", "import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\n\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope(root, scope), values);\n }\n return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n set(scope, values) {\n return set(this, scope, values);\n }\n\n /**\n\t * @param {string} scope\n\t */\n get(scope) {\n return getScope(this, scope);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n\n override(scope, values) {\n return set(overrides, scope, values);\n }\n\n /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t * - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope(this, scope);\n const targetScopeObject = getScope(this, targetScope);\n const privateName = '_' + name;\n\n Object.defineProperties(scopeObject, {\n // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n\n apply(appliers) {\n appliers.forEach((apply) => apply(this));\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n", "import type {\n Chart,\n Point,\n FontSpec,\n CanvasFontSpec,\n PointStyle,\n RenderTextOpts,\n BackdropOptions\n} from '../types/index.js';\nimport type {\n TRBL,\n SplinePoint,\n RoundedRect,\n TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n ctx: CanvasRenderingContext2D,\n data: Record,\n gc: string[],\n longest: number,\n string: string\n) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n ctx: CanvasRenderingContext2D,\n font: string,\n arrayOfThings: Things,\n cache?: {data?: Record, garbageCollect?: string[], font?: string}\n) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n ctx = ctx || canvas.getContext('2d');\n\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nexport interface DrawPointOptions {\n pointStyle: PointStyle;\n rotation?: number;\n radius: number;\n borderWidth: number;\n}\n\nexport function drawPoint(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number\n) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number,\n w: number\n) {\n let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n point: Point,\n area: TRBL,\n margin?: number\n) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n ctx: CanvasRenderingContext2D,\n previous: Point,\n target: Point,\n flip?: boolean,\n mode?: string\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n ctx: CanvasRenderingContext2D,\n previous: SplinePoint,\n target: SplinePoint,\n flip?: boolean\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n line: string,\n opts: RenderTextOpts\n) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n const oldColor = ctx.fillStyle;\n\n ctx.fillStyle = opts.color as string;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n ctx: CanvasRenderingContext2D,\n text: string | string[],\n x: number,\n y: number,\n font: CanvasFontSpec,\n opts: RenderTextOpts = {}\n) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i: number, line: string;\n\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n\n y += Number(font.lineHeight);\n }\n\n ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n rect: RoundedRect & { radius: TRBLCorners }\n) {\n const {x, y, w, h, radius} = rect;\n\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n", "import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n default:\n break;\n }\n\n return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps(value: number | Record, props: K[]): Record;\nexport function _readValueToProps(value: number | Record, props: Record): Record;\nexport function _readValueToProps(value: number | Record, props: string[] | Record) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n const obj = toTRBL(value) as ChartArea;\n\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n\n return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial, fallback?: Partial) {\n options = options || {};\n fallback = fallback || defaults.font as FontSpec;\n\n let size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n\n font.string = toFontString(font);\n return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array, context?: object, index?: number, info?: { cacheable: boolean }) {\n let cacheable = true;\n let i: number, ilen: number, value: unknown;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext(parentContext: null, context: T): T;\nexport function createContext(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n return Object.assign(Object.create(parentContext), context);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n ResolverObjectKey,\n ResolverCache,\n ResolverProxy,\n DescriptorDefaults,\n Descriptor,\n ContextCache,\n ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n scopes: T,\n prefixes = [''],\n rootScopes?: R,\n fallback?: ResolverObjectKey,\n getTarget = () => scopes[0]\n) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache: ResolverCache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop: string) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop: string) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop: string, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n }) as ResolverProxy;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n proxy: ResolverProxy,\n context: AnyObject,\n subProxy?: ResolverProxy,\n descriptorDefaults?: DescriptorDefaults\n) {\n const cache: ContextCache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n }) as ContextProxy;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n proxy: ResolverCache,\n defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n target: AnyObject,\n prop: string,\n resolve: () => unknown\n) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(\n target: ContextCache,\n prop: string,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop]; // resolve from proxy\n\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\n\nfunction _resolveScriptable(\n prop: string,\n getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n target: ContextCache,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\n\nfunction _resolveArray(\n prop: string,\n value: unknown[],\n target: ContextCache,\n isIndexable: (key: string) => boolean\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\n\nfunction resolveFallback(\n fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n prop: ResolverObjectKey,\n value: unknown\n) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n set: Set,\n parentScopes: AnyObject[],\n key: ResolverObjectKey,\n parentFallback: ResolverObjectKey,\n value: unknown\n) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\n\nfunction createSubResolver(\n parentScopes: AnyObject[],\n resolver: ResolverCache,\n prop: ResolverObjectKey,\n value: unknown\n) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n set: Set,\n allScopes: AnyObject[],\n key: ResolverObjectKey,\n fallback: ResolverObjectKey,\n item: unknown\n) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\n\nfunction subGetTarget(\n resolver: ResolverCache,\n prop: string,\n value: unknown\n) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\n\nfunction _resolveWithPrefixes(\n prop: string,\n prefixes: string[],\n scopes: AnyObject[],\n proxy: ResolverProxy\n) {\n let value: unknown;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n meta: ChartMeta<'line' | 'scatter'>,\n data: AnyObject[],\n start: number,\n count: number\n) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array<{r: unknown}>(count);\n let i: number, ilen: number, index: number, item: AnyObject;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n", "import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n firstPoint: SplinePoint,\n middlePoint: SplinePoint,\n afterPoint: SplinePoint,\n t: number\n): {\n previous: SplinePoint\n next: SplinePoint\n } {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n // This function must also respect \"skipped\" points\n\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n const pointsLen = points.length;\n\n let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK: number[] = Array(pointsLen).fill(0);\n const mK: number[] = Array(pointsLen);\n\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n points: SplinePoint[],\n options,\n area: ChartArea,\n loop: boolean,\n indexAxis: 'x' | 'y'\n) {\n let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType;\n\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n", "import type {ChartArea, Scale} from '../types/index.js';\nimport type Chart from '../core/core.controller.js';\nimport type {ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = (parent as ShadowRoot).host;\n }\n return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n let valueInPixels: number;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n const result = {} as ChartArea;\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n e: Event | TouchEvent | MouseEvent,\n canvas: HTMLCanvasElement\n): {\n x: number;\n y: number;\n box: boolean;\n } {\n const touches = (e as TouchEvent).touches;\n const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n const {offsetX, offsetY} = source as MouseEvent;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n event: Event | ChartEvent | TouchEvent | MouseEvent,\n chart: Chart\n): { x: number; y: number } {\n if ('native' in event) {\n return event;\n }\n\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial {\n let maxWidth: number, maxHeight: number;\n\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n canvas: HTMLCanvasElement,\n bbWidth?: number,\n bbHeight?: number,\n aspectRatio?: number\n): { width: number; height: number } {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n\n return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n chart: Chart,\n forceRatio: number,\n forceStyle?: boolean\n): boolean | void {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n\n const canvas = chart.canvas;\n\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() { // This function will be called when the browser attempts to access the passive property.\n passiveSupported = true;\n return false;\n }\n } as EventListenerOptions;\n\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n element: HTMLElement,\n property: 'width' | 'height'\n): number | undefined {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n", "import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n p1: Point,\n p2: Point,\n t: number, mode: 'middle' | 'after' | unknown\n) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n", "export interface RTLAdapter {\n x(x: number): number;\n setWidth(w: number): void;\n textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n xPlus(x: number, value: number): number;\n leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n return {\n x(x) {\n return x;\n },\n setWidth(w) { // eslint-disable-line no-unused-vars\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return x;\n },\n };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n let style: CSSStyleDeclaration, original: [string, string];\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n\n style.setProperty('direction', direction, 'important');\n (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n if (original !== undefined) {\n delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n", "import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n // eslint-disable-next-line prefer-const\n let {start, end, loop} = segment;\n let i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n\n return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n\n if (loop && !spanGaps) {\n // loop and not spanning gaps, first find a gap to start from\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n // find first non skipped point (after the first gap possibly)\n while (start < count && points[start].skip) {\n start++;\n }\n\n // if we looped to count, start needs to be 0\n start %= count;\n\n if (loop) {\n // loop will go past count, if start > 0\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n // end could be more than count, normalize\n end %= count;\n\n return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n // @ts-ignore\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n\n return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n\n if (!count) {\n return [];\n }\n\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n // Style can not start/end on a skipped point, adjust indices accordingly\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n", "import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n /**\n\t * @private\n\t */\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n\n /**\n\t * @private\n\t */\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n\n if (this._running) {\n this._refresh();\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _update(date = Date.now()) {\n let remaining = 0;\n\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n // if the animation has been updated and its duration prolonged,\n // update to total duration of current animations run (for progress event)\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n // Remove the item by replacing it with last item and removing the last\n // A lot faster than splice.\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n\n /**\n\t * @private\n\t */\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n\n /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n\n /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n\n /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n\n /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n\n /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n", "import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n /**\n * @param {string} from\n * @param {string} to\n * @param {number} factor\n */\n color(from, to, factor) {\n const c0 = helpersColor(from || transparent);\n const c1 = c0.valid && helpersColor(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nexport default class Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n active() {\n return this._active;\n }\n\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n\n cancel() {\n if (this._active) {\n // update current evaluated value, for smoother animations\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n\n this._active = from !== to && (loop || (elapsed < duration));\n\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n this._target[prop] = this._fn(from, to, factor);\n }\n\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n", "import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n\n /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n // Going to shared options:\n // After all animations are done, assign the shared options object to the element\n // So any new updates to the shared options are observed\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n // rejected, noop\n });\n }\n\n return animations;\n }\n\n /**\n\t * @private\n\t */\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n // There is an existing active animation, let's update that\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n // not animated, set directly to new value\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n\n\n /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n update(target, values) {\n if (this._properties.size === 0) {\n // Nothing is animated, just apply the new values.\n Object.assign(target, values);\n return;\n }\n\n const animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\n\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n // @ts-ignore\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n // Going from shared options to distinct one:\n // Create new options object containing the old shared values and start updating that.\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n", "import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n let t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\n\nfunction convertObjectDataToArray(data) {\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 x: key,\n y: data[key]\n };\n }\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n // Not using meta.index here, because it might be already updated if the dataset changed location\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n /**\n * @type {any}\n */\n static defaults = {};\n\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n */\n static datasetElementType = null;\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n */\n static dataElementType = null;\n\n /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n /** @type {boolean | object} */\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n\n this.initialize();\n }\n\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n\n /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n\n /**\n\t * @private\n\t */\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n\n reset() {\n this._update('reset');\n }\n\n /**\n\t * @private\n\t */\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n\n /**\n\t * @private\n\t */\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n\n // In order to correctly handle data addition/deletion animation (and thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal metadata accordingly.\n\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(_data, this);\n // Discard old parsed data and stacks\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n\n addElements() {\n const meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n\n this._dataCheck();\n\n // make sure cached _stacked status is current\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n // detect change in stack option\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n // remove values from old stack\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n this._resyncElements(resetNewElements);\n\n // if stack changed, update stack values for the whole dataset\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n\n /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n\n /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n\n /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n\n /**\n\t * @protected\n\t */\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n\n /**\n\t * @protected\n\t */\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n\n /**\n\t * @protected\n\t */\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n // if the data is sorted, we don't need to check further from this end of array\n break;\n }\n }\n if (sorted) {\n // in the sorted case, find first non-skipped value from other end of array\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return false;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n\n /**\n\t * @private\n\t */\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {} // eslint-disable-line no-unused-vars\n\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n\n /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n\n /**\n\t * @protected\n\t */\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n\n /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n\n /**\n\t * @private\n\t */\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n // context is provided as a function, and is called only if needed,\n // so we don't create a context for each element if not needed.\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n // `$shared` indicates this set of options can be shared between multiple elements.\n // Sharing is used to reduce number of properties to change during animation.\n values.$shared = sharing;\n\n // We cache options by `mode`, which can be 'active' for example. This enables us\n // to have the 'active' element options and 'default' options to switch between\n // when interacting.\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n\n\n /**\n\t * @private\n\t */\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n\n /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n\n /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n\n /**\n * @todo v4, rename to getSharedOptions and remove excess functions\n */\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n\n /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n\n /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n\n /**\n\t * @private\n\t */\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n // When going from active to inactive, we need to update to the shared options.\n // This way the once hovered element will end up with the same original shared options instance, after animation.\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n\n /**\n\t * @private\n\t */\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n\n /**\n\t * @private\n\t */\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n\n /**\n\t * @private\n\t */\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n\n // Apply changes detected through array listeners\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n\n if (count) {\n // TODO: It is not optimal to always parse the old data\n // This is done because we are not detecting direct assignments:\n // chart.data.datasets[0].data[5] = 10;\n // chart.data.datasets[0].data[5].y = 10;\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n\n /**\n\t * @private\n\t */\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n\n updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @private\n\t */\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n\n /**\n\t * @private\n */\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {\n _arrayUnique, isArray, isNullOrUndef,\n valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n // Ignore truncated pixels\n return;\n }\n if (defined(prev)) {\n // curr - prev === 0 is ignored\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n // Store `barEnd` (furthest away from origin) as parsed value,\n // to make stacking straight forward\n item[vScale.axis] = barEnd;\n\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n\n const {start, end, reverse, top, bottom} = borderProps(properties);\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n };\n\n\n /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n // float bar: only one end of the bar is considered by `super`\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n\n initialize() {\n this.enableOptionSharing = true;\n\n super.initialize();\n\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n\n /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n\n const skipNull = (meta) => {\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n\n // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n // stack where possible invisible bars will be located.\n // https://github.com/chartjs/Chart.js/issues/6368\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n\n /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n\n /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1; // indexOf returns -1 if element is not present\n\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n\n /**\n\t * @private\n\t */\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n // bar thickness ratio used for non-grouped bars\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n\n /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n // bars crossing origin are not stacked\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n // When not visible, no height\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n\n if (_stacked && !floating) {\n // visual data coordinates after applying minBarLength\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n\n /**\n\t * @private\n\t */\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n // For non-grouped bar charts, exact pixel values are used\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n static id = 'bubble';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n\n update(mode) {\n const points = this._cachedMeta.data;\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n\n // In case values were cached (and thus frozen), we need to clone the values\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n\n // Custom radius resolution\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n return values;\n }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n static id = 'doughnut';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n // The percentage of the chart that we cut out of the middle.\n cutout: '50%',\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%',\n\n // Spacing between arcs\n spacing: 0,\n\n indexAxis: 'r',\n };\n\n static descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n // Need to override these to give a nice default\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n\n linkScales() {}\n\n /**\n\t * Override data parsing, since we are not using scales\n\t */\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n\n /**\n\t * @private\n\t */\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n\n /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n\n // Compute the maximal rotation & circumference limits.\n // If we only consider our dataset, this can cause problems when two datasets\n // are both less than a circle with different rotations (starting angles)\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n\n meta.total = this.calculateTotal();\n\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @private\n */\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n\n getMaxOffset(arcs) {\n let max = 0;\n\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n\n /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n\n /**\n\t * @private\n\t */\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n\n /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n\n showLine: true,\n spanGaps: false,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n static id = 'polarArea';\n\n /**\n * @type {any}\n */\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const arcs = this._cachedMeta.data;\n\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @protected\n */\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n\n return range;\n }\n\n /**\n\t * @private\n\t */\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n\n const defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n\n return count;\n }\n\n /**\n\t * @private\n\t */\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\n", "import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n static id = 'pie';\n\n /**\n * @type {any}\n */\n static defaults = {\n // The percentage of the chart that we cut out of the middle.\n cutout: 0,\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%'\n };\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n static id = 'radar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n\n // Update Line\n line.points = points;\n // In resize mode only point locations change, so no need to set the points or options.\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n\n this.updateElement(line, undefined, properties, mode);\n }\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n static id = 'scatter';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n\n interaction: {\n mode: 'point'\n },\n\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n\n // https://github.com/chartjs/Chart.js/issues/11333\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {dataset: line, _dataset} = meta;\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n // https://github.com/chartjs/Chart.js/issues/11333\n delete meta.dataset;\n this.datasetElementType = false;\n }\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n addElements() {\n const {showLine} = this.options;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n\n super.addElements();\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n", "/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter {\n readonly options: T;\n /**\n * Will called with chart options after adapter creation.\n */\n init(this: DateAdapter, chartOptions: ChartOptions): void;\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n */\n formats(this: DateAdapter): Record;\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param value - the value to parse (usually comes from the data)\n * @param [format] - the expected data format\n */\n parse(this: DateAdapter, value: unknown, format?: TimeUnit): number | null;\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param timestamp - the timestamp to format\n * @param format - the date/time token\n */\n format(this: DateAdapter, timestamp: number, format: TimeUnit): string;\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param amount - the amount to add\n * @param unit - the unit as string\n */\n add(this: DateAdapter, timestamp: number, amount: number, unit: TimeUnit): number;\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param a - the input timestamp (reference)\n * @param b - the timestamp to subtract\n * @param unit - the unit as string\n */\n diff(this: DateAdapter, a: number, b: number, unit: TimeUnit): number;\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n * @param [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n */\n startOf(this: DateAdapter, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number): number;\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n */\n endOf(this: DateAdapter, timestamp: number, unit: TimeUnit | 'isoWeek'): number;\n}\n\nfunction abstract(): T {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override(\n members: Partial, 'options'>>\n ) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n\n readonly options: AnyObject;\n\n constructor(options: AnyObject) {\n this.options = options || {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n\n formats(): Record {\n return abstract();\n }\n\n parse(): number | null {\n return abstract();\n }\n\n format(): string {\n return abstract();\n }\n\n add(): number {\n return abstract();\n }\n\n diff(): number {\n return abstract();\n }\n\n startOf(): number {\n return abstract();\n }\n\n endOf(): number {\n return abstract();\n }\n}\n\nexport default {\n _date: DateAdapterBase\n};\n", "import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n // _sharedOptions indicates that each element has equal options -> equal proportions\n // So we can do a ranged binary search based on the range of first element and\n // be confident to get the full range of indices that can intersect with the value.\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n // Default to all elements, when binary search can not be used.\n return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n // Part of the public API to facilitate developers creating their own modes\n evaluateInteractionItems,\n\n // Helper function for different modes\n modes: {\n /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n // Default axis for index mode is 'x' to match old behaviour\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n\n // don't count items that are skipped (null data)\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n\n return elements;\n },\n\n /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n\n return items;\n },\n\n /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n\n /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n", "import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n\n // dynamically placed boxes size is not considered\n if (!isObject(pos)) {\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n\n // return booleans on the changes per direction\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit |= same && refitBoxes.length;\n\n // Chart area changed in the opposite direction\n changed = changed || other;\n\n if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n // initialize item with default values\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n // @ts-ignore\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n\n /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n\n // Before any changes are made, notify boxes that an update is about to being\n // This is used to clear any cached data (e.g. scale limits)\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n\n // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n // First fit the fullSize boxes, to reduce probability of re-fitting.\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n // Then fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n // Then fit horizontal boxes\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n\n // Finally place the boxes to correct coordinates\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n // Move to opposite side of chart\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n\n // Finally update boxes in chartArea (radial scale for example)\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n", "\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n releaseContext(context) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n getDevicePixelRatio() {\n return 1;\n }\n\n /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n isAttached(canvas) { // eslint-disable-line no-unused-vars\n return true;\n }\n\n /**\n * Updates config with platform specific requirements\n * @param {import('../core/core.config.js').default} config\n */\n updateConfig(config) { // eslint-disable-line no-unused-vars\n // no-op\n }\n}\n", "/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n acquireContext(item) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n", "/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n\n // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n\n // Chart.js modifies some canvas values that we want to restore on destroy\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n\n // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n style.display = style.display || 'block';\n // Include possible borders in the size\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener();\n }\n }, window);\n\n // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n // When its container's display is set to 'none' the callback will be called with a\n // size of (0, 0), which will cause the chart to lose its original height, so skip\n // resizing in such case.\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n // This case can occur if the chart is destroyed while waiting\n // for the throttled function to occur. We prevent crashes by checking\n // for a destroyed chart\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n\n addListener(canvas, type, proxy);\n\n return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n acquireContext(canvas, aspectRatio) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n if (context && context.canvas === canvas) {\n // Load platform resources on first chart creation, to make it possible to\n // import the library before setting platform options.\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n\n /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n\n // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n canvas.width = canvas.width;\n\n delete canvas[EXPANDO_KEY];\n return true;\n }\n\n /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n addEventListener(chart, type, listener) {\n // Can have only one listener per type, so make sure previous is removed\n this.removeEventListener(chart, type);\n\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n", "import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n", "import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element {\n\n static defaults = {};\n static defaultRoutes = undefined;\n\n x: number;\n y: number;\n active = false;\n options: O;\n $animations: Record;\n\n tooltipPosition(useFinalPosition: boolean): Point {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y} as Point;\n }\n\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n\n /**\n * Gets the current or final value of each prop. Can return extra properties (whole object).\n * @param props - properties to get\n * @param [final] - get the final value (animation target)\n */\n getProps

(props: P, final?: boolean): Pick;\n getProps

(props: P[], final?: boolean): Partial>;\n getProps(props: string[], final?: boolean): Partial> {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this as Record;\n }\n const ret: Record = {};\n props.forEach((prop) => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n });\n return ret;\n }\n}\n", "import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n\n // If there are too many major ticks to display them all\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n\n // If the major ticks are evenly spaced apart, place the minor ticks\n // so that they divide the major ticks into even chunks\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n", "import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n\n // Return undefined if the pixel is out of the range\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n\n return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n /** @type {CanvasTextAlign} */\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n // eslint-disable-next-line max-statements\n constructor(cfg) {\n super();\n\n /** @type {string} */\n this.id = cfg.id;\n /** @type {string} */\n this.type = cfg.type;\n /** @type {any} */\n this.options = undefined;\n /** @type {CanvasRenderingContext2D} */\n this.ctx = cfg.ctx;\n /** @type {Chart} */\n this.chart = cfg.chart;\n\n // implements box\n /** @type {number} */\n this.top = undefined;\n /** @type {number} */\n this.bottom = undefined;\n /** @type {number} */\n this.left = undefined;\n /** @type {number} */\n this.right = undefined;\n /** @type {number} */\n this.width = undefined;\n /** @type {number} */\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n /** @type {number} */\n this.maxWidth = undefined;\n /** @type {number} */\n this.maxHeight = undefined;\n /** @type {number} */\n this.paddingTop = undefined;\n /** @type {number} */\n this.paddingBottom = undefined;\n /** @type {number} */\n this.paddingLeft = undefined;\n /** @type {number} */\n this.paddingRight = undefined;\n\n // scale-specific properties\n /** @type {string=} */\n this.axis = undefined;\n /** @type {number=} */\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n /** @type {Tick[]} */\n this.ticks = [];\n /** @type {object[]|null} */\n this._gridLineItems = null;\n /** @type {object[]|null} */\n this._labelItems = null;\n /** @type {object|null} */\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n /** @type {number} */\n this._startPixel = undefined;\n /** @type {number} */\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n\n /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n init(options) {\n this.options = options.setContext(this.getContext());\n\n this.axis = options.axis;\n\n // parse min/max value, so we can properly determine min/max for other scales\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n\n /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n return raw;\n }\n\n /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isFinite(_userMin),\n maxDefined: isFinite(_userMax)\n };\n }\n\n /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n getMinMax(canStack) {\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n\n if (minDefined && maxDefined) {\n return {min, max};\n }\n\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n // Make sure min <= max when only min or max is defined by user and the data is outside that range\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n\n /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n\n /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n getTicks() {\n return this.ticks;\n }\n\n /**\n\t * @return {string[]}\n\t */\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n\n /**\n * @return {import('../types.js').LabelItem[]}\n */\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n\n // When a new layout is created, reset the data limits cache\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n\n beforeUpdate() {\n call(this.options.beforeUpdate, [this]);\n }\n\n /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t * This space comes from two sources:\n\t * - padding - space that's required to show the labels at the edges of the scale\n\t * - thickness of scales or legends in another orientation\n\t */\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n\n // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n this.beforeUpdate();\n\n // Absorb the master measurements\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n\n // Dimensions\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n\n // Data min/max\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n\n this.ticks = this.buildTicks() || [];\n\n // Allow modification of ticks in callback.\n this.afterBuildTicks();\n\n // Compute tick rotation and fit using a sampled subset of labels\n // We generally don't need to compute the size of every single label for determining scale size\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n // configure is called twice, once here, once from core.controller.updateLayout.\n // Here we haven't been positioned yet, but dimensions are correct.\n // Variables set in configure are needed for calculateLabelRotation, and\n // it's ok that coordinates are not correct there, only dimensions matter.\n this.configure();\n\n // Tick Rotation\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n this.afterCalculateLabelRotation();\n\n // Auto-skip\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n // Generate labels using all non-skipped ticks\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n this.afterFit();\n\n // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n this.afterUpdate();\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n // by default vertical scales are from bottom to top, so pixels are reversed\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n\n afterUpdate() {\n call(this.options.afterUpdate, [this]);\n }\n\n //\n\n beforeSetDimensions() {\n call(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n if (this.isHorizontal()) {\n // Reset position before calculating rotation\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n\n // Reset position before calculating rotation\n this.top = 0;\n this.bottom = this.height;\n }\n\n // Reset padding\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n call(this.options.afterSetDimensions, [this]);\n }\n\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n call(this.options[name], [this]);\n }\n\n // Data limits\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n\n //\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n /**\n\t * @return {object[]} the ticks\n\t */\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n\n beforeTickToLabelConversion() {\n call(this.options.beforeTickToLabelConversion, [this]);\n }\n /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n call(this.options.afterTickToLabelConversion, [this]);\n }\n\n //\n\n beforeCalculateLabelRotation() {\n call(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n\n // Estimate the width of each grid based on the canvas width, the maximum\n // label width and the number of tick intervals\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n // Allow 3 pixels x2 padding either side for label readability\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n call(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n\n //\n\n beforeFit() {\n call(this.options.beforeFit, [this]);\n }\n fit() {\n // Reset\n const minSize = {\n width: 0,\n height: 0\n };\n\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight; // fill all the height\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n // Don't bother fitting the ticks if we are not showing the labels\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n // A horizontal axis is more constrained by the height.\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n\n // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n // Adjust padding taking into account changes in offsets\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n\n /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n\n afterFit() {\n call(this.options.afterFit, [this]);\n }\n\n // Shared Methods\n /**\n\t * @return {boolean}\n\t */\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n /**\n\t * @return {boolean}\n\t */\n isFullSize() {\n return this.options.fullSize;\n }\n\n /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n\n this.generateTickLabels(ticks);\n\n // Ticks should be skipped when callback returns null or undef, so lets remove those.\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n\n /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n\n return labelSizes;\n }\n\n /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n // if it is an array let's measure each element\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = /** @type {string} */ (label[j]);\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n\n /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value;\n }\n\n /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n return NaN;\n }\n\n /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n\n /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n\n /**\n\t * @return {number}\n\t */\n getBaseValue() {\n const {min, max} = this;\n\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n\n /**\n\t * @protected\n\t */\n getContext(index) {\n const ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n\n /**\n\t * @return {number}\n\t * @private\n\t */\n _tickSize() {\n const optionTicks = this.options.ticks;\n\n // Calculate space needed by label in axis direction.\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n // Calculate space needed for 1 tick in axis direction.\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n\n /**\n\t * @return {boolean}\n\t * @private\n\t */\n _isVisible() {\n const display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n\n /**\n\t * @private\n\t */\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position, border} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n lineValue = getPixelForGridLine(this, i, offset);\n\n // Skip if the pixel is out of the range\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n\n return items;\n }\n\n /**\n\t * @private\n\t */\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += (lineHeight / 2) * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n let backdrop;\n\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n default:\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n default:\n break;\n }\n\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n\n color: optsAtIndex.backdropColor,\n };\n }\n\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n }\n });\n }\n\n return items;\n }\n\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n let align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n\n let textAlign;\n let x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {textAlign, x};\n }\n\n /**\n\t * @private\n\t */\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n const chart = this.chart;\n const position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n\n /**\n * @protected\n */\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {\n const {chart, ctx, options: {border, grid}} = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n const ctx = this.ctx;\n\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n\n if (!title.display) {\n return;\n }\n\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n\n /**\n\t * @return {object[]}\n\t * @private\n\t */\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n // backward compatibility: draw has been overridden by custom scale\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n\n /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n\n /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n\n /**\n * @protected\n */\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n", "import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n\n /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n\n if (isIChartComponent(proto)) {\n // Make sure the parent is registered and note the scope where its defaults are.\n parentScope = this.register(proto);\n }\n\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n // already registered\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n get(id) {\n return this.items[id];\n }\n\n /**\n\t * @param {IChartComponent} item\n\t */\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n // Inherit the parent's defaults and keep existing defaults\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n", "import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n // Order is important, Scale has Element in prototype chain,\n // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n /**\n\t * @param {...any} args\n\t */\n add(...args) {\n this._each('register', args);\n }\n\n remove(...args) {\n this._each('unregister', args);\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n\n /**\n\t * @private\n\t */\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n // Handle loopable args\n // Use case:\n // import * as plugins from './plugins.js';\n // Chart.register(plugins);\n each(arg, item => {\n // If there are mixed types in the loopable, make sure those are\n // registered in correct registry\n // Use case: (treemap exporting controller, elements etc)\n // import * as treemap from 'chartjs-chart-treemap.js';\n // Chart.register(treemap);\n\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n registry[method](component);\n call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n }\n\n /**\n\t * @private\n\t */\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n // plugins is the fallback registry\n return this.plugins;\n }\n\n /**\n\t * @private\n\t */\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n", "import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n constructor() {\n this._init = [];\n }\n\n /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n\n /**\n\t * @private\n\t */\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callCallback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n\n return true;\n }\n\n invalidate() {\n // When plugins are registered, there is the possibility of a double\n // invalidate situation. In this case, we only want to invalidate once.\n // If we invalidate multiple times, the `_oldCache` is lost and all of the\n // plugins are restarted without being correctly stopped.\n // See https://github.com/chartjs/Chart.js/issues/8147\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n const descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n // options === false => all plugins are disabled\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n // make sure plugin defaults are in scopes for local (not registered) plugins\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n // These are just defaults that plugins can override\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n", "import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis\n || axisFromPosition(opts.position)\n || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {axis};\n }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n\n // First figure out first scale id's per axis.\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n\n // Then merge dataset defaults to scale configs\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n\n // apply scale defaults, if not overridden by dataset defaults\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n\n return scales;\n}\n\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n\n initOptions(config);\n\n return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nexport default class Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n get platform() {\n return this._config.platform;\n }\n\n get type() {\n return this._config.type;\n }\n\n set type(type) {\n this._config.type = type;\n }\n\n get data() {\n return this._config.data;\n }\n\n set data(data) {\n this._config.data = initData(data);\n }\n\n get options() {\n return this._config.options;\n }\n\n set options(options) {\n this._config.options = options;\n }\n\n get plugins() {\n return this._config.plugins;\n }\n\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n\n /**\n * Returns the option scope keys for resolving dataset options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @return {string[][]}\n */\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the option scope keys for resolving dataset animation options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @param {string} transition\n * @return {string[][]}\n */\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n // The following are used for looking up the `animations` and `animation` keys\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n\n /**\n * Returns the options scope keys for resolving element options that belong\n * to an dataset. These keys do not include the dataset itself, because it\n * is not under options.\n * @param {string} datasetType\n * @param {string} elementType\n * @return {string[][]}\n */\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the options scope keys for resolving plugin options.\n * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n * @return {string[][]}\n */\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n\n /**\n * @private\n */\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n\n /**\n * Resolves the objects from options and defaults for option value resolution.\n * @param {object} mainScope - The main scope object for options\n * @param {string[][]} keyLists - The arrays of keys in resolution order\n * @param {boolean} [resetCache] - reset the cache for this mainScope\n */\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n\n const scopes = new Set();\n\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n\n /**\n * Returns the option scopes for resolving chart options\n * @return {object[]}\n */\n chartOptionScopes() {\n const {options, type} = this;\n\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n {type},\n defaults,\n descriptors\n ];\n }\n\n /**\n * @param {object[]} scopes\n * @param {string[]} names\n * @param {function|object} context\n * @param {string[]} [prefixes]\n * @return {object}\n */\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n // subResolver is passed to scriptable options. It should not resolve to hover options.\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n\n /**\n * @param {object[]} scopes\n * @param {object} [context]\n * @param {string[]} [prefixes]\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n */\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\n\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n", "import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {retinaScale, _isDomSupported} from '../helpers/helpers.dom.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n\n chart.notifyPlugins('afterRender');\n callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\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}\n\nclass Chart {\n\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n\n // eslint-disable-next-line max-statements\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n // Store the previously used aspect ratio to determine if a resize\n // is needed during updates. Do this after _options is set since\n // aspectRatio uses a getter\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n /** @type {?{attach?: function, detach?: function, resize?: function}} */\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n\n // Add the chart instance to the global namespace\n instances[this.id] = this;\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n // If aspectRatio is defined in options, use that.\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n return _aspectRatio;\n }\n\n // Calculate\n return height ? width / height : null;\n }\n\n get data() {\n return this.config.data;\n }\n\n set data(data) {\n this.config.data = data;\n }\n\n get options() {\n return this._options;\n }\n\n set options(options) {\n this.config.options = options;\n }\n\n get registry() {\n return registry;\n }\n\n /**\n\t * @private\n\t */\n _initialize() {\n // Before init plugin notification\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n\n // After init plugin notification\n this.notifyPlugins('afterInit');\n\n return this;\n }\n\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n\n stop() {\n animator.stop(this);\n return this;\n }\n\n /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {size: newSize});\n\n callCallback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n // The resize update is delayed, only draw without updating.\n this.render();\n }\n }\n }\n\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n\n /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n // clear up discarded scales\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n\n /**\n\t * @private\n\t */\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n\n /**\n\t * @private\n\t */\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n return newControllers;\n }\n\n /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n\n /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n\n update(mode) {\n const config = this.config;\n\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n\n // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n // Make sure dataset controllers are updated and new controllers are reset\n const newControllers = this.buildOrUpdateControllers();\n\n this.notifyPlugins('beforeElementsUpdate');\n\n // Make sure all dataset controllers have correct meta data counts\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n // New controllers will be reset after the layout pass, so we only want to modify\n // elements added to new datasets\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n\n // Only reset the controllers if we have animations\n if (!animsDisabled) {\n // Can only reset the new controllers after the scales have been updated\n // Reset is done to get the starting point for the initial animation\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n // Do this before render so that any plugins that need final scale updates can use it\n this.notifyPlugins('afterUpdate', {mode});\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n // Replay last event from before update, or set hover styles on active elements\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n\n /**\n * @private\n */\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n // The configured events have changed. Rebind.\n this.unbindEvents();\n this.bindEvents();\n }\n }\n\n /**\n * @private\n */\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n\n /**\n * @private\n */\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n\n /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n return;\n }\n\n // configure is called twice, once in core.scale.update and once here.\n // Here the boxes are fully updated and at their final positions.\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n\n /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n\n /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n\n // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n // currently be part of layers. Instead, we draw\n // layers <= 0 before(default, backward compat), and the rest after\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n // Rest of layers\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n\n /**\n\t * @private\n\t */\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n\n /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n\n /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n\n /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n\n meta.controller.draw();\n\n if (useClip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n\n /**\n * Checks whether the given point is in the chart area.\n * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n * @returns {boolean}\n */\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\t\t\t// See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n\n const meta = this.getDatasetMeta(datasetIndex);\n\n // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n\n /**\n\t * @private\n\t */\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n\n /**\n\t * @private\n\t */\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n\n this._stop();\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n delete instances[this.id];\n\n this.notifyPlugins('afterDestroy');\n }\n\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n\n /**\n\t * @private\n\t */\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n\n /**\n * @private\n */\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n\n each(this.options.events, (type) => _add(type, listener));\n }\n\n /**\n * @private\n */\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n\n let detached; // eslint-disable-line prefer-const\n const attached = () => {\n _remove('attach', attached);\n\n this.attached = true;\n this.resize();\n\n _add('resize', listener);\n _add('detach', detached);\n };\n\n detached = () => {\n this.attached = false;\n\n _remove('resize', listener);\n\n // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n this._stop();\n this._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n\n /**\n\t * @private\n\t */\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n\n /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n // Make sure we don't use the previous mouse event to override the active elements in update.\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n\n /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n\n /**\n * Check if a plugin with the specific ID is registered and enabled\n * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n * @returns {boolean}\n */\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n\n /**\n\t * @private\n\t */\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n\n /**\n\t * @private\n\t */\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n const changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n\n // If the event is replayed from `update`, we should evaluate with the final positions.\n //\n // The `replay`:\n // It's the last event (excluding click) that has occurred before `update`.\n // So mouse has not moved. It's also over the chart, because there is a `replay`.\n //\n // The why:\n // If animations are active, the elements haven't moved yet compared to state before update.\n // But if they will, we are activating the elements that would be active, if this check\n // was done after the animations have completed. => \"final positions\".\n // If there is no animations, the \"final\" and \"current\" positions are equal.\n // This is done so we do not have to evaluate the active elements each animation frame\n // - it would be expensive.\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n // Set _lastEvent to null while we are processing the event handlers.\n // This prevents recursion if the handler calls chart.update()\n this._lastEvent = null;\n\n // Invoke onHover hook\n callCallback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callCallback(options.onClick, [e, active, this], this);\n }\n }\n\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n\n return changed;\n }\n\n /**\n * @param {ChartEvent} e - The event\n * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n * @param {boolean} inChartArea - Is the envent inside chartArea\n * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n * @pravate\n */\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n", "import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n end: number,\n circular: boolean,\n) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n let spacingOffset = 0;\n const alpha = end - start;\n\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n ctx.beginPath();\n\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawBorder(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference, options} = element;\n const {borderWidth, borderJoinStyle, borderDash, borderDashOffset} = options;\n const inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\n\nexport interface ArcProps extends Point {\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n circumference: number;\n}\n\nexport default class ArcElement extends Element {\n\n static id = 'arc';\n\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n };\n\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash'\n };\n\n circumference: number;\n endAngle: number;\n fullCircles: number;\n innerRadius: number;\n outerRadius: number;\n pixelMargin: number;\n startAngle: number;\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return (betweenAngles && withinRadius);\n }\n\n getCenterPoint(useFinalPosition: boolean) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n\n tooltipPosition(useFinalPosition: boolean) {\n return this.getCenterPoint(useFinalPosition);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n ctx.restore();\n }\n}\n", "import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n // eslint-disable-next-line prefer-const\n let {move = true, reverse} = params || {};\n let i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n // Draw line to maxY and minY, using the average x-coordinate\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n // Line to y-value of last point in group. So the line continues\n // from correct position. Not using move, to have solid path.\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n }\n\n const x = point.x;\n const y = point.y;\n const truncX = x | 0; // truncated x-coordinate\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n // Draw line to next x-position, using the first (or only)\n // y-value in that group\n ctx.lineTo(x, y);\n\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n // Keep track of the last y-value in group\n lastY = y;\n }\n drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nexport default class LineElement extends Element {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n };\n\n\n constructor(cfg) {\n super();\n\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n\n get points() {\n return this._points;\n }\n\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n\n /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n\n /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n\n /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n\n if (!segments.length) {\n return;\n }\n\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n\n /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n\n /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n\n start = start || 0;\n count = count || (this.points.length - start);\n\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n\n /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n // When line is animated, the control points and path are not cached.\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n", "import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n CartesianParsedData,\n ChartArea,\n Point,\n PointHoverOptions,\n PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element {\n\n static id = 'point';\n\n parsed: CartesianParsedData;\n skip?: boolean;\n stop?: boolean;\n\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n\n inXRange(mouseX: number, useFinalPosition?: boolean) {\n return inRange(this, mouseX, 'x', useFinalPosition);\n }\n\n inYRange(mouseY: number, useFinalPosition?: boolean) {\n return inRange(this, mouseY, 'y', useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition?: boolean) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n\n size(options?: Partial) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n\n draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n const options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n", "import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n let left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n\n // If the value is an object, assume the user knows what they are doing\n // and apply as directed.\n const enableBorder = enableBorderRadius || isObject(value);\n\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nexport default class BarElement extends Element {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n", "import {DoughnutController, PolarAreaController} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n enabled?: boolean;\n forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n backgroundColor?: unknown;\n borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)', // blue\n 'rgb(255, 99, 132)', // red\n 'rgb(255, 159, 64)', // orange\n 'rgb(255, 205, 86)', // yellow\n 'rgb(75, 192, 192)', // green\n 'rgb(153, 102, 255)', // purple\n 'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n\n return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n return i;\n}\n\nfunction getColorizer(chart: Chart) {\n let i = 0;\n\n return (dataset: ChartDataset, datasetIndex: number) => {\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\n\nfunction containsColorsDefinitions(\n descriptors: ColorsDescriptor[] | Record\n) {\n let k: number | string;\n\n for (k in descriptors) {\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction containsColorsDefinition(\n descriptor: ColorsDescriptor\n) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nexport default {\n id: 'colors',\n\n defaults: {\n enabled: true,\n forceOverride: false\n } as ColorsPluginOptions,\n\n beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n if (!options.enabled) {\n return;\n }\n\n const {\n data: {datasets},\n options: chartOptions\n } = chart.config;\n const {elements} = chartOptions;\n\n if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || (elements && containsColorsDefinitions(elements)))) {\n return;\n }\n\n const colorizer = getColorizer(chart);\n\n datasets.forEach(colorizer);\n }\n};\n", "import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n /**\n * Implementation of the Largest Triangle Three Buckets algorithm.\n *\n * This implementation is based on the original implementation by Sveinn Steinarsson\n * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n *\n * The original implementation is MIT licensed.\n */\n const samples = options.samples || availableWidth;\n // There are less points than the threshold, returning the whole array\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n\n const decimated = [];\n\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n // Starting from offset\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n\n decimated[sampledIndex++] = data[a];\n\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n\n // Adding offset\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n\n // Adding offset\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n\n // Note that this is changed from the original algorithm which initializes these\n // values to 1. The reason for this change is that if the area is small, nextA\n // would never be set and thus a crash would occur in the next loop as `a` would become\n // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n // initializing with a negative number is the correct solution.\n maxArea = area = -1;\n\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n\n // Include the last point\n decimated[sampledIndex++] = data[endIndex];\n\n return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n // Use point.x here because we're computing the average data `x` value\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n // Push up to 4 points, 3 for the last interval and the first point for this interval\n const lastIndex = i - 1;\n\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n // The interval is defined by 4 points: start, min, max, end.\n // The starting point is already considered at this point, so we need to determine which\n // of the other points to add. We need to sort these points to ensure the decimated data\n // is still sorted and then ensure there are no duplicates.\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n\n // lastIndex === startIndex will occur when a range has only 1 point which could\n // happen with very uneven data\n if (i > 0 && lastIndex !== startIndex) {\n // Last point in the previous interval\n decimated.push(data[lastIndex]);\n }\n\n // Start of the new interval\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n\n return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data,\n });\n }\n}\n\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n\n let start = 0;\n let count;\n\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n\n return {start, count};\n}\n\nexport default {\n id: 'decimation',\n\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n cleanDecimatedData(chart);\n return;\n }\n\n // Assume the entire chart is available to show a few more points than needed\n const availableWidth = chart.width;\n\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n // Decimation is only supported for lines that have an X indexAxis\n return;\n }\n\n if (!meta.controller.supportsDecimation) {\n // Only line datasets are supported\n return;\n }\n\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n // Only linear interpolation is supported\n return;\n }\n\n if (chart.options.parsing) {\n // Plugin only supports data that does not need parsing\n return;\n }\n\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n // No decimation is required until we are above this threshold\n cleanDecimatedDataset(dataset);\n return;\n }\n\n if (isNullOrUndef(_data)) {\n // First time we are seeing this dataset\n // We override the 'data' property with a setter that stores the\n // raw data in _data, but reads the decimated data from _decimated\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n\n // Point the chart to the decimated data\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n\n dataset._decimated = decimated;\n });\n },\n\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n", "import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n // Special case for boundary not supporting `segments` (simpleArc)\n // Bounds are provided as `target` for partial circle, or undefined for full circle\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n // Get all segments from `target` that intersect the bounds of current segment of `line`\n const targetSegments = _boundSegments(target, bounds);\n\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n // @ts-ignore\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n", "import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n /** @type {string | {value: number}} */\n const fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n let target = parseFloat(fill);\n\n if (isFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n // @ts-ignore\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n let value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n // @ts-ignore\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n // First point of an segment -> need to add another point before this,\n // from next line below.\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n // In the middle of an segment, no need to add more points.\n break;\n }\n }\n }\n points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n", "import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n", "import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n const {chart, fill, line} = source;\n\n if (isFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n const boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n\n if (isFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\n}\n\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\n", "import {clipArea, unclipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {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 if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\n\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n\n ctx.save();\n\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {line, target, color: below, scale, property});\n\n ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n\n ctx.save();\n ctx.fillStyle = backgroundColor;\n\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n\n ctx.beginPath();\n\n const lineLoop = !!line.pathSegment(ctx, src);\n\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n ctx.restore();\n }\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\n", "/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n id: 'filler',\n\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n", "import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n _isBetween,\n callback as call,\n clipArea,\n getRtlAdapter,\n overrideTextDirection,\n restoreTextDirection,\n toFont,\n toPadding,\n unclipArea,\n valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this._added = false;\n\n // Contains hit boxes for each dataset (in dataset order)\n this.legendHitBoxes = [];\n\n /**\n \t\t * @private\n \t\t */\n this._hoveredItem = null;\n\n // Are we in doughnut mode which has a different data type\n this.doughnutMode = false;\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n\n fit() {\n const {options, ctx} = this;\n\n // The legend may not be displayed for a variety of reasons including\n // the fact that the defaults got set to `false`.\n // When the legend is not displayed, there are no guarantees that the options\n // are correctly formatted so we need to bail out as early as possible.\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n let width, height;\n\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth; // fill all the width\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight; // fill all the height\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n\n /**\n\t * @private\n\t */\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n\n return totalHeight;\n }\n\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n\n let left = 0;\n let col = 0;\n\n this.legendItems.forEach((legendItem, i) => {\n const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n // If too tall, go to new column\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n // Store the hitbox width and height here. Final position will be updated in `draw`\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n // Get max width\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n return totalWidth;\n }\n\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @private\n\t */\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n\n this.drawTitle();\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n // current position\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n // Set the ctx for the box\n ctx.save();\n\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n\n // Draw pointStyle as legend symbol\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n // Draw box as legend symbol\n // Adjust position when boxHeight < fontSize (want it centered)\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n // Horizontal\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n\n rtlHelper.setWidth(this.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n\n const realX = rtlHelper.x(x);\n\n drawLegendBox(realX, y, legendItem);\n\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n // Fill the actual label\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n\n // These defaults are used when the legend is vertical.\n // When horizontal, they are computed below.\n let left = this.left;\n let maxWidth = this.width;\n\n if (this.isHorizontal()) {\n // Move left / right so that the title is above the legend lines\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n // Move down so that the title is above the legend stack in every alignment\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n // Now that we know the left edge of the inner legend box, compute the correct\n // X coordinate from the title alignment\n const x = _alignStartEnd(position, left, left + maxWidth);\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n\n /**\n\t * @private\n\t */\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n\n /**\n\t * @private\n\t */\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n // See if we are touching one of the dataset boxes\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n // Touching an element\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n\n // Chart event already has relative position in it\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n call(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n call(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n call(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\n\nexport default {\n id: 'legend',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Legend,\n\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n\n // During the beforeUpdate step, the layout configuration needs to run\n // This ensures that if the legend position changes (via an option update)\n // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n\n // The labels need to be built after datasets are updated to ensure that colors\n // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n\n\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n\n // a callback that will handle\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n\n onHover: null,\n onLeave: null,\n\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n // Generates labels shown in the legend\n // Valid properties to return:\n // text : text to display\n // fillStyle : fill of coloured box\n // strokeStyle: stroke of coloured box\n // hidden : if this legend item refers to a hidden item\n // lineCap : cap style for line\n // lineDash\n // lineDashOffset :\n // lineJoin :\n // lineWidth :\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n // Below is extra data used for toggling the datasets\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n", "import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight) {\n const opts = this.options;\n\n this.left = 0;\n this.top = 0;\n\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n\n if (!opts.display) {\n return;\n }\n\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\n\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\n\nexport default {\n id: 'title',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Title,\n\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000 // by default greater than legend (1000) to be above\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n", "import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n id: 'subtitle',\n\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500 // by default greater than legend (1000) and smaller than title (2000)\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n", "import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n average(items) {\n if (!items.length) {\n return false;\n }\n\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n return {\n x: xAverage,\n y: y / count\n };\n },\n\n /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x,\n y\n };\n }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n\n // Count of all lines in the body\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n // Body lines may include some extra height depending on boxHeight\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n\n // Title width\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n\n // Body width\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n // Body lines may include some extra width due to the color box\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n\n // Reset back to 0\n widthPadding = 0;\n\n // Footer width\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n\n ctx.restore();\n\n // Add padding\n width += padding.width;\n\n return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n // eslint-disable-next-line prefer-const\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n // Args are: (tooltipItems, data)\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n\n // Args are: (tooltipItems, data)\n beforeBody: noop,\n\n // Args are: (tooltipItem, data)\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n let label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n\n // Args are: (tooltipItems, data)\n afterBody: noop,\n\n // Args are: (tooltipItems, data)\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n\n return result;\n}\n\nexport class Tooltip extends Element {\n\n /**\n * @namespace Chart.Tooltip.positioners\n */\n static positioners = positioners;\n\n constructor(config) {\n super();\n\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n // and `labelTextColors` to create a single variable\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n\n /**\n\t * @private\n\t */\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n\n /**\n\t * @protected\n\t */\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n\n getTitle(context, options) {\n const {callbacks} = options;\n\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n return lines;\n }\n\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n );\n }\n\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n bodyItems.push(bodyItem);\n });\n\n return bodyItems;\n }\n\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n );\n }\n\n // Get the footer and beforeFooter and afterFooter lines\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n return lines;\n }\n\n /**\n\t * @private\n\t */\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n // If the user provided a filter function, use it to modify the tooltip items\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n\n // If the user provided a sorting function, use it to modify the tooltip items\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n\n // Determine colors for boxes\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n\n // Left draws bottom -> top, this y1 is on the bottom\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n\n // Right draws top -> bottom, thus y1 is on the top\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n\n // Top draws left -> right, thus x1 is on the left\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n\n // Bottom draws right -> left, thus x1 is on the right\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.titleAlign, options);\n\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n\n // Fill the point with white so that colours merge nicely if the opacity is < 1\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n\n // Draw the point\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n // Border\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n // Normal rect\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n // restore fillStyle\n ctx.fillStyle = this.labelTextColors[i];\n }\n\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n // Before body lines\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n\n // Draw body lines now\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n\n lines = bodyItem.lines;\n // Draw Legend-like boxes if needed\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n // Reset for any lines that don't include colorbox\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n // Reset back to 0 for after body\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n\n // After body lines\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n }\n\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n\n footerFont = toFont(options.footerFont);\n\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n\n /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n\n /**\n * Determine if the tooltip will draw anything\n * @returns {boolean} True if the tooltip will render\n */\n _willRender() {\n return !!this.opacity;\n }\n\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n\n // IE11/Edge does not like very small opacities, so snap to 0\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n const padding = toPadding(options.padding);\n\n // Truthy/falsey value for empty tooltip\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n\n // Draw Background\n this.drawBackground(pt, ctx, tooltipSize, options);\n\n overrideTextDirection(ctx, options.textDirection);\n\n pt.y += padding.top;\n\n // Titles\n this.drawTitle(pt, ctx, options);\n\n // Body\n this.drawBody(pt, ctx, options);\n\n // Footer\n this.drawFooter(pt, ctx, options);\n\n restoreTextDirection(ctx, options.textDirection);\n\n ctx.restore();\n }\n }\n\n /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n // When there are multiple items shown, but the tooltip position is nearest mode\n // an update may need to be made because our position may have changed even though\n // the items are the same as before.\n const positionChanged = this._positionChanged(active, e);\n\n // Remember Last Actives\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n // Only handle target event on tooltip change\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n\n /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n // But make sure that active elements are still valid.\n return lastActive.filter(i =>\n this.chart.data.datasets[i.datasetIndex] &&\n this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n );\n }\n\n // Find Active Elements for tooltips\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n\n /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\n\nexport default {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n\n afterEvent(chart, args) {\n if (chart.tooltip) {\n // If the event is replayed from `update`, we should evaluate with the final positions.\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n // notify chart about the change, so it will render\n args.changed = true;\n }\n }\n },\n\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n\n // Resolve additionally from `interaction` options and defaults.\n additionalOptionScopes: ['interaction']\n};\n", "import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n static id = 'category';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n\n // If we are viewing some subset of labels, slice the original array\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n super.configure();\n\n if (!this.isHorizontal()) {\n // For backward compatibility, vertical category scale reverse is inverted.\n this._reversePixels = !this._reversePixels;\n }\n }\n\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n // Must override base implementation because it calls getPixelForValue\n // and category scale can have duplicate values\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n\n getBasePixel() {\n return this.bottom;\n }\n}\n", "import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n * if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n * Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n * spacing = (max - min) / count\n * Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n * spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n const ticks = [];\n // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n\n // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n // spacing = step;\n // numSpaces = (max - min) / spacing;\n // Note that we round here to handle the case where almostWhole translated an FP error\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n // Sometimes these are no-ops, but it makes the code a lot clearer\n // and when a user defined range is specified, we want the correct ticks\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n // Case 4\n numSpaces = (niceMax - niceMin) / spacing;\n\n // If very close to our rounded value, use it.\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n // until this point\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n\n if (niceMin < min) {\n j++; // Skip niceMin\n }\n // If the next nice tick is close to min, skip it\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({value: tickValue});\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n // If the previous tick is too close to max, replace it with max, else add max\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n /** @type {number} */\n this._endValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n\n getTickLimit() {\n const tickOpts = this.options.ticks;\n // eslint-disable-next-line prefer-const\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n\n /**\n\t * @protected\n\t */\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n\n super.configure();\n\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n", "import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n static id = 'linear';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? min : 0;\n this.max = isFinite(max) ? max : 1;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n\n // Utils\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n", "import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\n\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({value, major: isMajor(value), significand});\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n static id = 'logarithmic';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isFinite(value) && value > 0 ? value : null;\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? Math.max(0, min) : null;\n this.max = isFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n\n this.handleTickRangeOptions();\n }\n\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (min === max) {\n if (min <= 0) { // includes null\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n\n setMax(changeExponent(min, +1));\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const opts = this.options;\n\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const start = this.min;\n\n super.configure();\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n", "import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n\n // Now that text size is determined, compute the full positions\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {extra, additionalAngle, padding, size} = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n // if to draw or overlapped\n visible: true,\n\n // Text position\n x: pointLabelPosition.x,\n y,\n\n // Text rendering data\n textAlign,\n\n // Bounding box\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\n\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {left, top, right, bottom} = item;\n const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {centerPointLabels, display} = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n const {left, top, right, bottom} = item;\n const {backdropColor} = opts;\n\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n // overlapping\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign} = item;\n\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n // Draw straight lines connecting each index\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n\n const {color, lineWidth} = gridLineOpts;\n\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n static id = 'radialLinear';\n\n /**\n * @type {any}\n */\n static defaults = {\n display: true,\n\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n\n grid: {\n circular: false\n },\n\n startAngle: 0,\n\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n\n callback: Ticks.formatters.numeric\n },\n\n pointLabels: {\n backdropColor: undefined,\n\n // Number - The backdrop padding above & below the label in pixels\n backdropPadding: 2,\n\n // Boolean - if true, show point labels\n display: true,\n\n // Number - Point label font size in pixels\n font: {\n size: 10\n },\n\n // Function - Used to convert point labels\n callback(label) {\n return label;\n },\n\n // Number - Additionl padding between scale and pointLabel\n padding: 5,\n\n // Boolean - if true, center point labels to slices in polar chart\n centerPointLabels: false\n }\n };\n\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.xCenter = undefined;\n /** @type {number} */\n this.yCenter = undefined;\n /** @type {number} */\n this.drawingArea = undefined;\n /** @type {string[]} */\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n\n this.min = isFinite(min) && !isNaN(min) ? min : 0;\n this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n // Point labels\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n\n fit() {\n const opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n // Take into account half font size + the yPadding of the top value\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n\n /**\n\t * @protected\n\t */\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid, border} = opts;\n const labelCount = this._pointLabels.length;\n\n let i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || (index === 0 && this.min < 0)) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {}\n\n /**\n\t * @protected\n\t */\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n this.ticks.forEach((tick, index) => {\n if ((index === 0 && this.min >= 0) && !opts.reverse) {\n return;\n }\n\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth,\n });\n });\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {}\n}\n", "import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object}\n */\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n // Only parse if it's not a timestamp already\n if (!isFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, /** @type {Unit} */ (parser))\n : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n /** @type {Object} */\n const map = {};\n const ilen = values.length;\n let i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n\n ticks.push({\n value,\n major: false\n });\n }\n\n // We set the major ticks separately from the above loop because calling startOf for every tick\n // is expensive when there is a large number of ticks\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n static id = 'time';\n\n /**\n * @type {any}\n */\n static defaults = {\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n\n adapters: {},\n time: {\n parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n unit: false, // false == automatic or override with week, month, year, etc.\n round: false, // none, or override with week, month, year, etc.\n isoWeekday: false, // override week start day\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n\n callback: false,\n\n major: {\n enabled: false\n }\n }\n };\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {{data: number[], labels: number[], all: number[]}} */\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n\n /** @type {Unit} */\n this._unit = 'day';\n /** @type {Unit=} */\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n /** @type {DateAdapter} */\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n adapter.init(opts);\n\n // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n mergeIf(time.displayFormats, adapter.formats());\n\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n super.init(scaleOpts);\n\n this._normalized = opts.normalized;\n }\n\n /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n /**\n\t\t * @param {object} bounds\n\t\t */\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n // If we have user provided `min` and `max` labels / data bounds can be ignored\n if (!minDefined || !maxDefined) {\n // Labels are always considered, when user did not force bounds\n _applyBounds(this._getLabelBounds());\n\n // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n // data bounds are ignored (and don't need to be determined)\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n\n /**\n\t * @private\n\t */\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n\n /**\n\t * @return {object[]}\n\t */\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n const min = this.min;\n const max = this.max;\n\n const ticks = _filterBetween(timestamps, min, max);\n\n // PRIVATE\n // determineUnitForFormatting relies on the number of ticks so we don't use it when\n // autoSkip is enabled because we don't yet know what the final number of ticks will be\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n\n afterAutoSkip() {\n // Offsets for bar charts need to be handled with the auto skipped\n // ticks. Once ticks have been skipped, we re-compute the offsets.\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n\n /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n\n /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n // @ts-ignore\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n\n // For 'week' unit, handle the first day of week option\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n // Align first ticks on unit\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n // Prevent browser from freezing in case user options request millions of milliseconds\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n // @ts-ignore\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n\n /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n\n /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n\n if (formatter) {\n return call(formatter, [time, index, ticks], this);\n }\n\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n\n /**\n\t * @param {object[]} ticks\n\t */\n generateTickLabels(ticks) {\n let i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n\n /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n\n /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n\n // pick the longest format (milliseconds) for guesstimation\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n // subtract 1 - if offset then there's one less label than tick\n // if not offset then one half label padding is added to each end leaving room for one less label\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n\n /**\n\t * @protected\n\t */\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return (this._cache.data = this.normalize(timestamps));\n }\n\n /**\n\t * @protected\n\t */\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n\n /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n normalize(values) {\n // It seems to be somewhat faster to do sorting first\n return _arrayUnique(values.sort(sorter));\n }\n}\n", "import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n static id = 'timeseries';\n\n /**\n * @type {any}\n */\n static defaults = TimeScale.defaults;\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {object[]} */\n this._table = [];\n /** @type {number} */\n this._minPos = undefined;\n /** @type {number} */\n this._tableRange = undefined;\n }\n\n /**\n\t * @protected\n\t */\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n\n /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n // only add points that breaks the scale linearity\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n\n /**\n * Generates all timestamps defined in the data.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n * @protected\n */\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n\n /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n // If combining labels and data (data might not contain all labels),\n // we need to recheck uniqueness and sort\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n\n return timestamps;\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nexport default TimeSeriesScale;\n", "export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n controllers,\n elements,\n plugins,\n scales,\n};\n\nexport const registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n", "const GRID_COLOR = \"rgba(255,255,255,0.1)\";\n\nimport { Chart as ChartJS, registerables } from \"chart.js\";\n\nChartJS.register(...registerables);\n\n/** @param {import(\"chart.js\").ChartConfiguration & { title: string }} props */\nexport function Chart(props) {\n props.options = {\n ...props?.options,\n maintainAspectRatio: false,\n plugins: {\n ...props?.options?.plugins,\n legend: { display: false, ...props?.options?.plugins?.legend },\n title: {\n ...props?.options?.plugins?.title,\n display: true,\n color: \"white\",\n font: {\n ...props?.options?.plugins?.title?.font,\n size: 24\n },\n text: props.title\n }\n },\n scales: {\n ...props?.options?.scales,\n x: {\n ...props?.options?.scales?.x,\n grid: { ...props?.options?.scales?.x?.grid, color: GRID_COLOR, borderColor: GRID_COLOR }\n },\n y: {\n ...props?.options?.scales?.y,\n grid: { ...props?.options?.scales?.x?.grid, color: GRID_COLOR, borderColor: GRID_COLOR }\n }\n }\n };\n\n const canvas = ;\n new ChartJS(canvas, props);\n return canvas;\n}", "export function FieldGroup() {\n return

;\n}\n\nexport function Field({ label, value }) {\n return (\n
\n
{label}
\n
{value}
\n
\n );\n}", "export function Tile({ size } = { size: 1 }) {\n return
;\n}", "export const SHORT_DATE_TIME = `MMMM D, YYYY h:mm A`;\nexport const LONG_DATE_TIME = `dddd, ${SHORT_DATE_TIME}`;", "import { USER_FLAGS } from \"./constants/USER_FLAGS.macro\";\nimport { parse } from \"@twemoji/parser\";\nimport regexPkg from \"@twemoji/parser/dist/lib/regex.js\";\nimport dayjs from \"dayjs\";\n\nconst DISCORD_EPOCH = 1420070400000n;\nconst MENTION_REGEX = /\\<(@|@!|#|@&)\\d+\\>/g;\nconst GLOBAL_CUSTOM_EMOJI_REGEX = //g;\nconst CUSTOM_EMOJI_REGEX = /\\w+):(?\\d+)>/;\nconst TWEMOJI_REGEX = regexPkg.default ?? regexPkg;\n\nexport const hasFlag = (flags, bit) => (BigInt(flags) & bit) === bit;\nexport const extractUserFlags = flags => USER_FLAGS.filter(flag => hasFlag(flags, flag.value));\n\nexport const getAttachmentCount = attachments => (attachments ? attachments.split(\" \").length : 0);\nexport const getMentionCount = text => text.match(MENTION_REGEX)?.length ?? 0;\nexport const getCustomEmojis = text => text.match(GLOBAL_CUSTOM_EMOJI_REGEX) ?? [];\nexport const getDefaultEmojis = text => text.match(TWEMOJI_REGEX) ?? [];\n\nexport const getMessageUrl = (guildId, channelId, messageId) =>\n `https://discord.com/channels/${guildId ?? \"@me\"}/${channelId}/${messageId}`;\n\nexport function getSnowflakeTimestamp(snowflake) {\n const ms = BigInt(snowflake) >> 22n;\n const unix = ms + DISCORD_EPOCH;\n return dayjs(Number(unix));\n}\n\nexport function getEmojiUrl(emoji) {\n const customEmoji = emoji.match(CUSTOM_EMOJI_REGEX);\n if (customEmoji) return `https://cdn.discordapp.com/emojis/${customEmoji.groups.id}`;\n const defaultEmoji = parse(emoji)[0];\n if (defaultEmoji) return defaultEmoji.url;\n}\n", "import dayjs from \"dayjs\";\n\nimport { BaseDirectory } from \"@common/util/fs\";\nimport { Tile } from \"@common/components/Tile\";\nimport { formatNum } from \"@common/util/helpers\";\n\nimport { getSnowflakeTimestamp } from \"../helpers\";\nimport { readline } from \"@common/util/readline\";\nimport { Counter } from \"@common/util/counter\";\nimport { ChannelTypes } from \"../enums/ChannelTypes\";\nimport { Chart } from '@common/components/Chart';\nimport { accentColor } from '../../Discord';\n\n/** @param {{ root: BaseDirectory }} */\nexport async function extractActivity({ root, channelNames }) {\n const analyticsDir = await root.getDir(\"activity/analytics\");\n const createdAt = await root\n .getFile(\"account/user.json\")\n .then(file => file.json())\n .then(user => getSnowflakeTimestamp(user.id));\n\n let events = {\n activity_updated: 0,\n channel_opened: 0,\n guild_viewed: 0,\n join_thread: 0,\n keyboard_shortcut_used: 0,\n launch_game: 0,\n message_edited: 0,\n message_deleted: 0,\n quickswitcher_opened: 0,\n add_reaction: 0,\n search_started: 0,\n slash_command_used: 0\n };\n\n let totalCallDuration = 0;\n let callTimeCounter = new Counter();\n\n let probabilityGender = [];\n let probabilityAge = [];\n\n\n if (__ENV === \"dev\")\n events = {\n activity_updated: 44111,\n // app_crashed: 102,\n // app_exception_thrown: 2260,\n // app_native_crash: 590,\n // app_opened: 8080,\n // captcha_served: 452,\n // captcha_solved: 293,\n channel_opened: 73147,\n // guild_joined: 1297,\n guild_viewed: 47901,\n // join_call: 370,\n // join_thread: 151,\n // join_voice_channel: 4748,\n keyboard_shortcut_used: 9803,\n launch_game: 5116,\n message_edited: 8682,\n message_deleted: 3131,\n // open_modal: 19995,\n // open_popout: 71701,\n quickswitcher_opened: 3313,\n add_reaction: 14762\n // search_started: 15296,\n // session_end: 14798,\n // session_start: 14858,\n // slash_command_used: 141\n };\n else\n for await (const eventsFile of analyticsDir) {\n if (!eventsFile.name.startsWith('events-')) continue\n const eventsStream = await eventsFile.stream();\n for await (const line of readline(eventsStream.getReader())) {\n const event = JSON.parse(line);\n switch (event.event_type) {\n case 'leave_voice_channel':\n if (!event.duration) break\n let channelType = parseInt(event.channel_type);\n if (channelType !== ChannelTypes.DM && channelType !== ChannelTypes.GROUP_DM) break\n callTimeCounter.incr(event.channel_id, parseInt(event.duration));\n totalCallDuration += event.duration;\n break;\n case \"activity_updated\":\n case \"channel_opened\":\n case \"guild_viewed\":\n case \"join_thread\":\n case \"keyboard_shortcut_used\":\n case \"launch_game\":\n case \"message_edited\":\n case \"message_deleted\":\n case \"quickswitcher_opened\":\n case \"add_reaction\":\n case \"search_started\":\n case \"slash_command_used\":\n events[event.event_type]++;\n break;\n default:\n if (event.predicted_gender)\n probabilityGender.push({\n timestamp: dayjs(event.day_pt),\n male: event.prob_male,\n female: event.prob_female,\n other: event.prob_non_binary_gender_expansive\n })\n\n if (event.predicted_age)\n probabilityAge.push({\n timestamp: dayjs(event.day_pt),\n '13-17': event.prob_13_17,\n '18-24': event.prob_18_24,\n '25-34': event.prob_25_34,\n '35+': event.prob_35_over\n })\n }\n }\n }\n\n const totalDays = dayjs().diff(createdAt, \"days\");\n const averageDailyGuilds = Math.round(events.guild_viewed / totalDays);\n const averageDailyChannels = Math.round(events.channel_opened / totalDays);\n\n const topCalls = callTimeCounter.sort().slice(0, 100);\n\n probabilityAge.sort((a, b) => a.timestamp.diff(b.timestamp));\n probabilityGender.sort((a, b) => a.timestamp.diff(b.timestamp));\n\n return {\n totalReactions: events.add_reaction,\n totalMessagesEdited: events.message_edited,\n totalMessagesDeleted: events.message_deleted,\n Analytics: () =>\n \n

Analytics

\n
Your status was updated {formatNum(events.activity_updated)} times.
\n
Overall, you clicked on a server {formatNum(events.guild_viewed)} times, and a channel {formatNum(events.channel_opened)} times.
\n
That's an average of {formatNum(averageDailyGuilds)} servers and {formatNum(averageDailyChannels)} channels a day.
\n
Ring ring, you've spent {dayjs.duration(totalCallDuration).humanize()} in calls and voice channels.
\n
Fast typer? You used {formatNum(events.keyboard_shortcut_used)} keyboard shortcuts.
\n
Discord detected {formatNum(events.launch_game)} game launches.
\n
You opened the quick switcher {formatNum(events.quickswitcher_opened)} times.
\n
,\n TopCalls: () =>\n \n

Top Calls

\n \n \n {topCalls.map(([channelId, duration], index) => (\n \n \n \n \n ))}\n \n
{index + 1}. {channelNames.get(channelId) ?? \"Unknown\"}{dayjs.duration(duration).humanize()}
\n
,\n PredictedGender: () =>\n \n timestamp.format(\"YYYY-MM-DD\")),\n datasets: [\n {\n label: 'Male',\n data: probabilityGender.map(({ male }) => male),\n borderColor: '#3498db',\n },\n {\n label: 'Female',\n data: probabilityGender.map(({ female }) => female),\n borderColor: '#e97bce',\n },\n {\n label: 'Other',\n data: probabilityGender.map(({ other }) => other),\n borderColor: '#1abc9c'\n }\n ]\n }}\n options={{\n scales: {\n y: {\n max: 1,\n }\n },\n plugins: {\n legend: {\n display: true,\n }\n },\n }}\n />\n ,\n PredictedAge: () =>\n \n timestamp.format(\"YYYY-MM-DD\")),\n datasets: [\n {\n label: '13-17',\n data: probabilityAge.map(point => point['13-17']),\n borderColor: 'rgb(88, 101, 242)',\n },\n {\n label: '18-24',\n data: probabilityAge.map(point => point['18-24']),\n borderColor: 'rgb(155, 132, 239)',\n },\n {\n label: '25-34',\n data: probabilityAge.map(point => point['25-34']),\n borderColor: 'rgb(35, 165, 89)'\n },\n {\n label: '35+',\n data: probabilityAge.map(point => point['35+']),\n borderColor: 'rgb(252, 194, 69)'\n }\n ]\n }}\n options={{\n scales: {\n y: {\n max: 1,\n }\n },\n plugins: {\n legend: {\n display: true,\n }\n },\n }}\n />\n \n };\n}\n", "export async function* readline(reader) {\n const decoder = new TextDecoder();\n let buffer = \"\";\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let line;\n while ((line = buffer.indexOf(\"\\n\")) >= 0) {\n const result = buffer.slice(0, line);\n buffer = buffer.slice(line + 1);\n yield result;\n }\n }\n\n if (buffer.length) yield buffer;\n}", "export class Counter extends Map {\n get(key) {\n return super.get(key) ?? 0;\n }\n\n incr(key, n = 1) {\n let value = this.get(key);\n this.set(key, value + n);\n }\n\n sort() {\n return [...this].sort((a, b) => b[1] - a[1]);\n }\n\n keys(fn) {\n return Array.from(super.keys(), fn)\n }\n\n values(fn) {\n return Array.from(super.values(), fn)\n }\n\n [Symbol.iterator]() {\n return this.entries();\n }\n}", "export const ChannelTypes = {\n DM: 1,\n GROUP_DM: 3,\n GUILD_TEXT: 0,\n GUILD_VOICE: 2,\n GUILD_CATEGORY: 4,\n GUILD_ANNOUNCEMENT: 5,\n GUILD_STORE: 6,\n ANNOUNCEMENT_THREAD: 10,\n PUBLIC_THREAD: 11,\n PRIVATE_THREAD: 12,\n GUILD_STAGE_VOICE: 13,\n GUILD_DIRECTORY: 14,\n GUILD_FORUM: 15\n};", "export function Link({ url }, children) {\n return (\n \n );\n}", "import { formatHour, formatNum, getWords, rangeDate, rangeNum } from \"@common/util/helpers\";\nimport {\n getAttachmentCount,\n getCustomEmojis,\n getDefaultEmojis,\n getEmojiUrl,\n getMentionCount,\n getMessageUrl\n} from \"../helpers\";\n\nimport { BaseDirectory } from \"@common/util/fs\";\nimport { ChannelTypes } from \"../enums/ChannelTypes\";\nimport { Chart } from \"@common/components/Chart\";\nimport { Counter } from \"@common/util/counter\";\nimport { Link } from \"@common/components/Link\";\nimport { SHORT_DATE_TIME } from \"@common/constants/DATE_FORMATS\";\nimport { Tile } from \"@common/components/Tile\";\nimport { accentColor } from \"..\";\nimport dayjs from \"dayjs\";\n\n/** @param {{ root: BaseDirectory, totalReactions: number, totalMessagesEdited: number, totalMessagesDeleted: number }} */\nexport async function extractMessages({\n root,\n channelNames,\n totalReactions,\n totalMessagesEdited,\n totalMessagesDeleted\n}) {\n let totalMessages = 0;\n let totalWords = 0;\n let totalCharacters = 0;\n let totalAttachments = 0;\n let totalMentions = 0;\n let totalCustomEmojis = 0;\n let totalDefaultEmojis = 0;\n let oldestMessage;\n let newestMessageDate;\n let hourlyMessageCounter = new Counter(rangeNum(24, i => [i, 0]));\n let monthlyMessageCounter = new Counter();\n let wordCounter = new Counter();\n let emojiCounter = new Counter();\n let dmMessageCounter = new Counter();\n let channelMessageCounter = new Counter();\n let guildMessageCounter = new Counter();\n\n const guildNames = new Map();\n\n for await (const channelDir of await root.getDir(\"messages\")) {\n if (channelDir.isDirectory) {\n const channel = await channelDir.getFile(\"channel.json\").then(file => file.json());\n if (!channelNames.has(channel.id)) channelNames.set(channel.id, channel.name);\n if (channel.guild) guildNames.set(channel.guild.id, channel.guild.name);\n\n /** @type {AsyncGenerator} */\n const messages = await channelDir\n .getFile(\"messages.csv\")\n .then(file => file.csv({ withHeaders: true }))\n .catch(() => channelDir.getFile(\"messages.json\").then(file => file.json()));\n\n for await (const message of messages) {\n totalMessages++;\n totalCharacters += message.Contents.length;\n totalAttachments += getAttachmentCount(message.Attachments);\n totalMentions += getMentionCount(message.Contents);\n\n for (const word of getWords(message.Contents)) {\n totalWords++;\n wordCounter.incr(word);\n }\n\n for (const customEmoji of getCustomEmojis(message.Contents)) {\n totalCustomEmojis++;\n emojiCounter.incr(customEmoji);\n }\n\n for (const defaultEmoji of getDefaultEmojis(message.Contents)) {\n totalDefaultEmojis++;\n emojiCounter.incr(defaultEmoji);\n }\n\n if (channel.type === ChannelTypes.DM || channel.type === ChannelTypes.GROUP_DM) dmMessageCounter.incr(channel.id);\n else channelMessageCounter.incr(channel.id);\n if (channel.guild) guildMessageCounter.incr(channel.guild.id);\n\n const date = dayjs(message.Timestamp);\n if (!oldestMessage || date.isBefore(oldestMessage.date))\n oldestMessage = {\n date,\n message,\n guild_id: channel.guild?.id,\n channel_id: channel.id\n };\n if (!newestMessageDate || date.isAfter(newestMessageDate)) newestMessageDate = date;\n\n hourlyMessageCounter.incr(date.hour());\n monthlyMessageCounter.incr(date.format(\"YYYY-MM\"));\n }\n }\n }\n\n const totalDays = newestMessageDate.diff(oldestMessage.date, \"days\");\n const averageDailyMessages = Math.round(totalMessages / totalDays);\n\n const topWords = wordCounter.sort().slice(0, 25);\n const topEmojis = emojiCounter.sort().slice(0, 25);\n\n const topDms = dmMessageCounter.sort().slice(0, 100);\n const topChannels = channelMessageCounter.sort().slice(0, 100);\n const topGuilds = guildMessageCounter.sort().slice(0, 100);\n\n const monthlyMessageLabels = rangeDate(oldestMessage.date, newestMessageDate, \"month\").map(date => date.format(\"YYYY-MM\"));\n\n return {\n Messages: () =>\n \n

Messages

\n
You've sent {formatNum(totalMessages)} total messages in your {formatNum(totalDays)} days on Discord.
\n
That's an average of {formatNum(averageDailyMessages)} messages a day.
\n
That's a total of {formatNum(totalWords)} words and {formatNum(totalCharacters)} characters.
\n
Text wasn't enough? You sent {formatNum(totalAttachments)} files.
\n
Like emojis? You used {formatNum(totalCustomEmojis)} custom emojis and {formatNum(totalDefaultEmojis)} default emojis.
\n
Overall, you pinged {formatNum(totalMentions)} users, roles, and channels
\n
Whoops, you edited {formatNum(totalMessagesEdited)} messages and deleted {formatNum(totalMessagesDeleted)} messages.
\n
You added {formatNum(totalReactions)} reactions to messages.
\n
Your first message was {oldestMessage.message.Contents} on {oldestMessage.date.format(SHORT_DATE_TIME)} in {channelNames.get(oldestMessage.channel_id) ?? \"Unknown\"}\n
\n
,\n TopWords: () =>\n \n

Top {topWords.length} words

\n \n \n {topWords.map(([word, count], index) => (\n \n \n \n \n ))}\n \n
{index + 1}. {word}{formatNum(count)}
\n
,\n TopEmojis: () =>\n \n

Top {topEmojis.length} emojis

\n \n \n {topEmojis.map(([emoji, count], index) => (\n \n \n \n \n ))}\n \n
{index + 1}. {formatNum(count)}
\n
,\n TopDms: () =>\n \n

Top {topDms.length} DMs

\n \n \n {topDms.map(([dmId, count], index) => (\n \n \n \n \n ))}\n \n
{index + 1}. {channelNames.get(dmId) ?? 'Unknown'}{formatNum(count)}
\n
,\n TopChannels: () =>\n \n

Top {topChannels.length} channels

\n \n \n {topChannels.map(([channelId, count], index) => (\n \n \n \n \n ))}\n \n
{index + 1}. {channelNames.get(channelId) ?? 'Unknown'}{formatNum(count)}
\n
,\n TopGuilds: () =>\n \n

Top {topGuilds.length} guilds

\n \n \n {topGuilds.map(([guildId, count], index) => (\n \n \n \n \n ))}\n \n
{index + 1}. {guildNames.get(guildId)}{formatNum(count)}
\n
,\n MessagesPerMonth: () =>\n \n monthlyMessageCounter.get(label)),\n borderColor: accentColor,\n backgroundColor: accentColor\n }\n ]\n }}\n />\n ,\n MessagesPerHour: () =>\n \n \n \n };\n}", "import { extractStreaming } from \"./tiles/Streaming\";\nimport { Row } from \"@common/components/Row\";\n\nexport const name = \"Spotify\";\nexport const accentColor = \"#1DB954\";\nexport const instructions = 'https://support.spotify.com/us/artists/article/exporting-data/'\n\nexport { default as banner } from './banner.svg'\n\n/** @param {{ root: BaseDirectory }} */\nexport async function extract({ root }) {\n const { Streaming, TopTracks, TopArtists, ListeningPerMonth, ListeningPerHour } = await extractStreaming({ root });\n return <>\n \n \n \n \n \n \n \n \n \n \n}\n", "import dayjs from \"dayjs\";\n\nimport { Chart } from \"@common/components/Chart\";\nimport { Tile } from \"@common/components/Tile\";\nimport { Counter } from \"@common/util/counter\";\nimport { BaseDirectory } from \"@common/util/fs\";\nimport { formatHour, formatNum, rangeDate, rangeNum } from \"@common/util/helpers\";\n\nimport { accentColor } from \"..\";\nimport { SHORT_DATE_TIME } from \"@common/constants/DATE_FORMATS\";\n\n\n/** @param {{ root: BaseDirectory }} */\nexport async function extractStreaming({ root }) {\n let totalListeningTime = 0\n let hourlyListeningCounter = new Counter(rangeNum(24, i => [i, 0]));\n let monthlyListeningCounter = new Counter();\n let trackCounter = new Counter();\n let artistCounter = new Counter();\n\n const streamingHistory = await root.getFile('StreamingHistory0.json').then(res => res.json())\n for (const track of streamingHistory) {\n totalListeningTime += track.msPlayed\n const endTime = dayjs(track.endTime)\n hourlyListeningCounter.incr(endTime.hour(), track.msPlayed);\n monthlyListeningCounter.incr(endTime.format('YYYY-MM'), track.msPlayed);\n if (track.trackName !== 'Unknown Track' && track.artistName !== 'Unknown Artist') {\n trackCounter.incr(track.trackName, track.msPlayed);\n artistCounter.incr(track.artistName, track.msPlayed);\n }\n }\n\n const [firstTrack] = streamingHistory\n const startTime = dayjs(firstTrack.endTime).subtract(dayjs.duration(firstTrack.msPlayed, 'milliseconds'))\n\n const topTracks = trackCounter.sort().slice(0, 25)\n const topArtists = artistCounter.sort().slice(0, 25)\n\n const monthlyListeningLabels = rangeDate(\n dayjs(streamingHistory[0].endTime),\n dayjs(streamingHistory[streamingHistory.length - 1].endTime), \"month\"\n ).map(date => date.format(\"YYYY-MM\"))\n\n return {\n Streaming: () =>\n \n

Streaming

\n

You've streamed a total of {formatNum(Math.round(dayjs.duration(totalListeningTime, 'milliseconds').asMinutes()))} minutes of music since {startTime.format('MMMM YYYY')}

\n
,\n TopTracks: () =>\n \n

Top {topTracks.length} tracks

\n \n {\n topTracks.map(([track, count]) =>\n \n \n \n )}\n \n
{track}{dayjs.duration(count, 'milliseconds').humanize()}
\n
,\n TopArtists: () =>\n \n

Top {topArtists.length} artists

\n \n {\n topArtists.map(([artist, count]) =>\n \n \n \n )}\n \n
{artist}{dayjs.duration(count, 'milliseconds').humanize()}
\n
,\n ListeningPerMonth: () =>\n \n monthlyListeningCounter.get(label)),\n borderColor: accentColor,\n backgroundColor: accentColor\n }\n ]\n }}\n options={{\n scales: {\n y: { ticks: { callback: ms => dayjs.duration(ms, 'milliseconds').humanize() } }\n }\n }}\n />\n ,\n ListeningPerHour: () =>\n \n dayjs.duration(ms, 'milliseconds').humanize() } }\n }\n }}\n />\n \n }\n}", "import { BaseDirectory } from \"@common/util/fs\";\nimport { Row } from \"@common/components/Row\";\n\nimport { extractActivity } from \"./tiles/Activity\";\nimport { extractAdvertising } from \"./tiles/Advertising\";\nimport { extractVideos } from \"./tiles/Videos\";\nimport { extractProfile } from \"./tiles/Profile\";\n\nexport const name = \"TikTok\"\nexport const accentColor = '#FF004F'\nexport const instructions = 'https://support.tiktok.com/en/account-and-privacy/personalized-ads-and-data/requesting-your-data'\n\nexport { default as banner } from './banner.svg'\n\n/** @param {{ root: BaseDirectory }} */\nexport async function extract({ root }) {\n const userData = await root.getFile(\"user_data.json\").then(res => res.json());\n const { Activity } = await extractActivity({ userData });\n const { Advertisers } = await extractAdvertising({ userData });\n const { Profile } = await extractProfile({ userData });\n const { VideosPerMonth, VideosPerHour, TopVideos } = await extractVideos({ userData });\n\n return <>\n \n \n \n \n \n \n \n \n \n \n ;\n}\n", "import { Tile } from \"@common/components/Tile\";\nimport { formatNum } from \"@common/util/helpers\";\n\nexport async function extractActivity({ userData }) {\n const watchedVideoList = userData[\"Activity\"][\"Video Browsing History\"][\"VideoList\"];\n const uploadedVideoList = userData['Video']['Videos']['VideoList'];\n const likedVideoList = userData[\"Activity\"][\"Like List\"][\"ItemFavoriteList\"];\n const favoriteVideoList = userData[\"Activity\"][\"Favorite Videos\"][\"FavoriteVideoList\"];\n const commentList = userData[\"Comment\"][\"Comments\"][\"CommentsList\"];\n const profile = userData[\"Profile\"]['Profile Information']['ProfileMap'];\n\n return {\n Activity: () =>\n \n

Activity

\n
You've watched {formatNum(watchedVideoList.length)} total videos.
\n
Out of those, you've liked {formatNum(likedVideoList.length)} of them, and favorited {formatNum(favoriteVideoList.length)} of them.
\n
You posted {formatNum(commentList.length)} comments.
\n
You've uploaded {formatNum(uploadedVideoList.length)} videos, and received {formatNum(profile.likesReceived)} likes.
\n
\n };\n}", "import { Tile } from \"@common/components/Tile\";\n\nexport async function extractAdvertising({ userData }) {\n const advertisersList = userData['Ads and data']['Ads Based On Data Received From Partners']['AdvertiserList'].split(/(?\n \n

Advertisers

\n
    {advertisersList.map(advertiser =>
  • {advertiser}
  • )}
\n
\n };\n}", "import { Chart } from \"@common/components/Chart\";\nimport { Link } from \"@common/components/Link\";\nimport { Tile } from \"@common/components/Tile\";\nimport { Counter } from \"@common/util/counter\";\nimport { formatHour, rangeDate, rangeNum } from \"@common/util/helpers\";\nimport dayjs from \"dayjs\";\nimport { accentColor } from \"..\";\n\nexport async function extractVideos({ userData }) {\n const watchedVideoList = userData[\"Activity\"][\"Video Browsing History\"][\"VideoList\"];\n\n let oldestVideoDate;\n let newestVideoDate;\n let hourlyVideoCounter = new Counter(rangeNum(24, i => [i, 0]));\n let monthlyVideoCounter = new Counter();\n let videoCounter = new Counter();\n\n for (const video of watchedVideoList) {\n videoCounter.incr(video.VideoLink);\n\n const date = dayjs(video.Date);\n hourlyVideoCounter.incr(date.hour());\n monthlyVideoCounter.incr(date.format(\"YYYY-MM\"));\n\n if (!oldestVideoDate || date.isBefore(oldestVideoDate)) oldestVideoDate = date;\n if (!newestVideoDate || date.isAfter(newestVideoDate)) newestVideoDate = date;\n }\n\n const monthlyVideoLabels = rangeDate(oldestVideoDate, newestVideoDate, \"month\").map(date => date.format(\"YYYY-MM\"));\n\n const topVideos = __ENV === 'dev'\n ? videoCounter.sort().slice(0, 25).map(([url, count]) => ([{ url }, count]))\n : await Promise.all(videoCounter.sort().slice(0, 25).map(async ([rawUrl, count]) => {\n const url = await fetch(`https://resolve-redirect.commandtechno.workers.dev/?q=${encodeURIComponent(rawUrl)}`)\n .then(res => res.text())\n .catch(() => rawUrl);\n\n const meta = await fetch(`https://www.tiktok.com/oembed?url=${encodeURIComponent(url)}`)\n .then(res => res.json())\n .catch(() => { });\n\n return [{ url, meta }, count];\n }));\n\n return {\n VideosPerMonth: () =>\n \n monthlyVideoCounter.get(label)),\n borderColor: accentColor,\n backgroundColor: accentColor\n }\n ]\n }}\n />\n ,\n VideosPerHour: () =>\n \n \n ,\n TopVideos: () =>\n \n

Top {topVideos.length} most watched videos

\n \n \n {topVideos.map(([{ url, meta }, count]) =>\n \n \n \n \n )}\n \n
{meta ? `@${meta.author_name} - ${meta.title}` : 'Unavailable Video'}{count}
\n
\n };\n}", "import { Field, FieldGroup } from \"@common/components/Field\";\nimport { Tile } from \"@common/components/Tile\";\nimport { SHORT_DATE_TIME } from \"@common/constants/DATE_FORMATS\";\nimport dayjs from \"dayjs\";\n\nexport async function extractProfile({ userData }) {\n const profile = userData[\"Profile\"]['Profile Information']['ProfileMap'];\n const followingList = userData['Activity'][\"Following List\"]?.[\"Following\"] ?? [];\n const followerList = userData['Activity'][\"Follower List\"]?.[\"Follower\"] ?? [];\n\n return {\n Profile: () =>\n \n

Profile

\n \n \n \n \n \n \n \n \n \n
\n };\n}", "import * as Discord from \"./Discord\";\nimport * as Spotify from './Spotify';\nimport * as TikTok from \"./TikTok\";\n\nexport default [Discord, Spotify, TikTok];", "import \"./__dayjs\";\nimport \"./__env\";\nimport \"./__jsx\";\n\nimport { ServiceCard } from \"./components/ServiceCard\";\nimport services from \"./services\";\nimport { $ } from \"./util/helpers\";\n\nconst app = $(\"app\");\n\napp.replaceChildren(\n

Pick a supported service:

,\n
,\n
\n {services.map(service => (\n \n ))}\n
,\n);\n"], "mappings": "klBAAA,IAAAA,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAAC,SAASC,EAAEC,EAAE,CAAW,OAAOH,IAAjB,UAAuC,OAAOC,GAApB,IAA2BA,GAAO,QAAQE,EAAE,EAAc,OAAO,QAAnB,YAA2B,OAAO,IAAI,OAAOA,CAAC,GAAGD,EAAe,OAAO,WAApB,IAA+B,WAAWA,GAAG,MAAM,MAAMC,EAAE,CAAC,GAAEH,GAAM,UAAU,CAAC,aAAa,IAAIE,EAAE,IAAIC,EAAE,IAAIC,EAAE,KAAKC,EAAE,cAAcC,EAAE,SAASC,EAAE,SAASC,EAAE,OAAO,EAAE,MAAMC,EAAE,OAAOC,EAAE,QAAQC,EAAE,UAAUC,EAAE,OAAOC,EAAE,OAAOC,EAAE,eAAeC,EAAE,6FAA6FC,EAAE,sFAAsFC,EAAE,CAAC,KAAK,KAAK,SAAS,2DAA2D,MAAM,GAAG,EAAE,OAAO,wFAAwF,MAAM,GAAG,EAAE,QAAQ,SAASf,EAAE,CAAC,IAAIC,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,EAAEC,EAAEF,EAAE,IAAI,MAAM,IAAIA,GAAGC,GAAGC,EAAE,IAAI,EAAE,GAAGD,EAAEC,CAAC,GAAGD,EAAE,CAAC,GAAG,GAAG,CAAC,EAAEe,EAAE,SAAShB,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAE,OAAOH,CAAC,EAAE,MAAM,CAACG,GAAGA,EAAE,QAAQF,EAAED,EAAE,GAAG,MAAMC,EAAE,EAAEE,EAAE,MAAM,EAAE,KAAKD,CAAC,EAAEF,CAAC,EAAEiB,EAAE,CAAC,EAAED,EAAE,EAAE,SAAShB,EAAE,CAAC,IAAIC,EAAE,CAACD,EAAE,UAAU,EAAEE,EAAE,KAAK,IAAID,CAAC,EAAEE,EAAE,KAAK,MAAMD,EAAE,EAAE,EAAEE,EAAEF,EAAE,GAAG,OAAOD,GAAG,EAAE,IAAI,KAAKe,EAAEb,EAAE,EAAE,GAAG,EAAE,IAAIa,EAAEZ,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAASJ,EAAEC,EAAEC,EAAE,CAAC,GAAGD,EAAE,KAAK,EAAEC,EAAE,KAAK,EAAE,MAAM,CAACF,EAAEE,EAAED,CAAC,EAAE,IAAIE,EAAE,IAAID,EAAE,KAAK,EAAED,EAAE,KAAK,IAAIC,EAAE,MAAM,EAAED,EAAE,MAAM,GAAGG,EAAEH,EAAE,MAAM,EAAE,IAAIE,EAAEK,CAAC,EAAEH,EAAEH,EAAEE,EAAE,EAAEE,EAAEL,EAAE,MAAM,EAAE,IAAIE,GAAGE,EAAE,GAAG,GAAGG,CAAC,EAAE,MAAM,EAAE,EAAEL,GAAGD,EAAEE,IAAIC,EAAED,EAAEE,EAAEA,EAAEF,KAAK,EAAE,EAAE,EAAE,SAASJ,EAAE,CAAC,OAAOA,EAAE,EAAE,KAAK,KAAKA,CAAC,GAAG,EAAE,KAAK,MAAMA,CAAC,CAAC,EAAE,EAAE,SAASA,EAAE,CAAC,MAAM,CAAC,EAAEQ,EAAE,EAAEE,EAAE,EAAEH,EAAE,EAAE,EAAE,EAAEI,EAAE,EAAEL,EAAE,EAAED,EAAED,EAAI,GAAGD,EAAE,EAAEM,CAAC,EAAET,CAAC,GAAG,OAAOA,GAAG,EAAE,EAAE,YAAY,EAAE,QAAQ,KAAK,EAAE,CAAC,EAAE,EAAE,SAASA,EAAE,CAAC,OAAgBA,IAAT,MAAU,CAAC,EAAEkB,EAAE,KAAKC,EAAE,CAAC,EAAEA,EAAED,CAAC,EAAEH,EAAE,IAAIK,EAAE,iBAAiBC,EAAE,SAASrB,EAAE,CAAC,OAAOA,aAAasB,GAAG,EAAE,CAACtB,GAAG,CAACA,EAAEoB,CAAC,EAAE,EAAEG,EAAE,SAASvB,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAE,GAAG,CAACH,EAAE,OAAOiB,EAAE,GAAa,OAAOjB,GAAjB,SAAmB,CAAC,IAAII,EAAEJ,EAAE,YAAY,EAAEkB,EAAEd,CAAC,IAAID,EAAEC,GAAGH,IAAIiB,EAAEd,CAAC,EAAEH,EAAEE,EAAEC,GAAG,IAAIC,EAAEL,EAAE,MAAM,GAAG,EAAE,GAAG,CAACG,GAAGE,EAAE,OAAO,EAAE,OAAON,EAAEM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAIkB,EAAEvB,EAAE,KAAKkB,EAAEK,CAAC,EAAEvB,EAAEG,EAAEoB,CAAC,CAAC,MAAM,CAACrB,GAAGC,IAAIc,EAAEd,GAAGA,GAAG,CAACD,GAAGe,CAAC,EAAEO,EAAE,SAASzB,EAAEC,EAAE,CAAC,GAAGoB,EAAErB,CAAC,EAAE,OAAOA,EAAE,MAAM,EAAE,IAAIE,EAAY,OAAOD,GAAjB,SAAmBA,EAAE,CAAC,EAAE,OAAOC,EAAE,KAAKF,EAAEE,EAAE,KAAK,UAAU,IAAIoB,EAAEpB,CAAC,CAAC,EAAEwB,EAAET,EAAES,EAAE,EAAEH,EAAEG,EAAE,EAAEL,EAAEK,EAAE,EAAE,SAAS1B,EAAEC,EAAE,CAAC,OAAOwB,EAAEzB,EAAE,CAAC,OAAOC,EAAE,GAAG,IAAIA,EAAE,GAAG,EAAEA,EAAE,GAAG,QAAQA,EAAE,OAAO,CAAC,CAAC,EAAE,IAAIqB,EAAE,UAAU,CAAC,SAASP,EAAEf,EAAE,CAAC,KAAK,GAAGuB,EAAEvB,EAAE,OAAO,KAAK,EAAE,EAAE,KAAK,MAAMA,CAAC,EAAE,KAAK,GAAG,KAAK,IAAIA,EAAE,GAAG,CAAC,EAAE,KAAKoB,CAAC,EAAE,EAAE,CAAC,IAAIJ,EAAED,EAAE,UAAU,OAAOC,EAAE,MAAM,SAAShB,EAAE,CAAC,KAAK,GAAG,SAASA,EAAE,CAAC,IAAIC,EAAED,EAAE,KAAKE,EAAEF,EAAE,IAAI,GAAUC,IAAP,KAAS,OAAO,IAAI,KAAK,GAAG,EAAE,GAAGyB,EAAE,EAAEzB,CAAC,EAAE,OAAO,IAAI,KAAK,GAAGA,aAAa,KAAK,OAAO,IAAI,KAAKA,CAAC,EAAE,GAAa,OAAOA,GAAjB,UAAoB,CAAC,MAAM,KAAKA,CAAC,EAAE,CAAC,IAAIE,EAAEF,EAAE,MAAMY,CAAC,EAAE,GAAGV,EAAE,CAAC,IAAIC,EAAED,EAAE,CAAC,EAAE,GAAG,EAAEE,GAAGF,EAAE,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC,EAAE,OAAOD,EAAE,IAAI,KAAK,KAAK,IAAIC,EAAE,CAAC,EAAEC,EAAED,EAAE,CAAC,GAAG,EAAEA,EAAE,CAAC,GAAG,EAAEA,EAAE,CAAC,GAAG,EAAEA,EAAE,CAAC,GAAG,EAAEE,CAAC,CAAC,EAAE,IAAI,KAAKF,EAAE,CAAC,EAAEC,EAAED,EAAE,CAAC,GAAG,EAAEA,EAAE,CAAC,GAAG,EAAEA,EAAE,CAAC,GAAG,EAAEA,EAAE,CAAC,GAAG,EAAEE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,KAAKJ,CAAC,CAAC,EAAED,CAAC,EAAE,KAAK,KAAK,CAAC,EAAEgB,EAAE,KAAK,UAAU,CAAC,IAAIhB,EAAE,KAAK,GAAG,KAAK,GAAGA,EAAE,YAAY,EAAE,KAAK,GAAGA,EAAE,SAAS,EAAE,KAAK,GAAGA,EAAE,QAAQ,EAAE,KAAK,GAAGA,EAAE,OAAO,EAAE,KAAK,GAAGA,EAAE,SAAS,EAAE,KAAK,GAAGA,EAAE,WAAW,EAAE,KAAK,GAAGA,EAAE,WAAW,EAAE,KAAK,IAAIA,EAAE,gBAAgB,CAAC,EAAEgB,EAAE,OAAO,UAAU,CAAC,OAAOU,CAAC,EAAEV,EAAE,QAAQ,UAAU,CAAC,OAAQ,KAAK,GAAG,SAAS,IAAIJ,CAAE,EAAEI,EAAE,OAAO,SAAShB,EAAEC,EAAE,CAAC,IAAIC,EAAEuB,EAAEzB,CAAC,EAAE,OAAO,KAAK,QAAQC,CAAC,GAAGC,GAAGA,GAAG,KAAK,MAAMD,CAAC,CAAC,EAAEe,EAAE,QAAQ,SAAShB,EAAEC,EAAE,CAAC,OAAOwB,EAAEzB,CAAC,EAAE,KAAK,QAAQC,CAAC,CAAC,EAAEe,EAAE,SAAS,SAAShB,EAAEC,EAAE,CAAC,OAAO,KAAK,MAAMA,CAAC,EAAEwB,EAAEzB,CAAC,CAAC,EAAEgB,EAAE,GAAG,SAAShB,EAAEC,EAAEC,EAAE,CAAC,OAAOwB,EAAE,EAAE1B,CAAC,EAAE,KAAKC,CAAC,EAAE,KAAK,IAAIC,EAAEF,CAAC,CAAC,EAAEgB,EAAE,KAAK,UAAU,CAAC,OAAO,KAAK,MAAM,KAAK,QAAQ,EAAE,GAAG,CAAC,EAAEA,EAAE,QAAQ,UAAU,CAAC,OAAO,KAAK,GAAG,QAAQ,CAAC,EAAEA,EAAE,QAAQ,SAAShB,EAAEC,EAAE,CAAC,IAAIC,EAAE,KAAKC,EAAE,CAAC,CAACuB,EAAE,EAAEzB,CAAC,GAAGA,EAAEQ,EAAEiB,EAAE,EAAE1B,CAAC,EAAEY,EAAE,SAASZ,GAAEC,GAAE,CAAC,IAAIG,GAAEsB,EAAE,EAAExB,EAAE,GAAG,KAAK,IAAIA,EAAE,GAAGD,GAAED,EAAC,EAAE,IAAI,KAAKE,EAAE,GAAGD,GAAED,EAAC,EAAEE,CAAC,EAAE,OAAOC,EAAEC,GAAEA,GAAE,MAAM,CAAC,CAAC,EAAES,EAAE,SAASb,GAAEC,GAAE,CAAC,OAAOyB,EAAE,EAAExB,EAAE,OAAO,EAAEF,EAAC,EAAE,MAAME,EAAE,OAAO,GAAG,GAAGC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,MAAMF,EAAC,CAAC,EAAEC,CAAC,CAAC,EAAEY,EAAE,KAAK,GAAGC,EAAE,KAAK,GAAGC,EAAE,KAAK,GAAGC,GAAE,OAAO,KAAK,GAAG,MAAM,IAAI,OAAOR,EAAE,CAAC,KAAKC,EAAE,OAAOP,EAAES,EAAE,EAAE,CAAC,EAAEA,EAAE,GAAG,EAAE,EAAE,KAAKJ,EAAE,OAAOL,EAAES,EAAE,EAAEG,CAAC,EAAEH,EAAE,EAAEG,EAAE,CAAC,EAAE,KAAKR,EAAE,IAAIW,GAAE,KAAK,QAAQ,EAAE,WAAW,EAAEC,IAAGL,EAAEI,GAAEJ,EAAE,EAAEA,GAAGI,GAAE,OAAON,EAAET,EAAEa,EAAEG,GAAEH,GAAG,EAAEG,IAAGJ,CAAC,EAAE,KAAK,EAAE,KAAKJ,EAAE,OAAOE,EAAEI,GAAE,QAAQ,CAAC,EAAE,KAAKX,EAAE,OAAOO,EAAEI,GAAE,UAAU,CAAC,EAAE,KAAKZ,EAAE,OAAOQ,EAAEI,GAAE,UAAU,CAAC,EAAE,KAAKb,EAAE,OAAOS,EAAEI,GAAE,eAAe,CAAC,EAAE,QAAQ,OAAO,KAAK,MAAM,CAAC,CAAC,EAAED,EAAE,MAAM,SAAShB,EAAE,CAAC,OAAO,KAAK,QAAQA,EAAE,EAAE,CAAC,EAAEgB,EAAE,KAAK,SAAShB,EAAEC,EAAE,CAAC,IAAIC,EAAEK,EAAEmB,EAAE,EAAE1B,CAAC,EAAES,EAAE,OAAO,KAAK,GAAG,MAAM,IAAIG,GAAGV,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEO,EAAE,OAAOP,EAAES,CAAC,EAAEF,EAAE,OAAOP,EAAEM,CAAC,EAAEC,EAAE,QAAQP,EAAEQ,CAAC,EAAED,EAAE,WAAWP,EAAEI,CAAC,EAAEG,EAAE,QAAQP,EAAEG,CAAC,EAAEI,EAAE,UAAUP,EAAEE,CAAC,EAAEK,EAAE,UAAUP,EAAEC,CAAC,EAAEM,EAAE,eAAeP,GAAGK,CAAC,EAAEM,EAAEN,IAAI,EAAE,KAAK,IAAIN,EAAE,KAAK,IAAIA,EAAE,GAAGM,IAAIC,GAAGD,IAAIG,EAAE,CAAC,IAAII,EAAE,KAAK,MAAM,EAAE,IAAIH,EAAE,CAAC,EAAEG,EAAE,GAAGF,CAAC,EAAEC,CAAC,EAAEC,EAAE,KAAK,EAAE,KAAK,GAAGA,EAAE,IAAIH,EAAE,KAAK,IAAI,KAAK,GAAGG,EAAE,YAAY,CAAC,CAAC,EAAE,EAAE,MAAMF,GAAG,KAAK,GAAGA,CAAC,EAAEC,CAAC,EAAE,OAAO,KAAK,KAAK,EAAE,IAAI,EAAEG,EAAE,IAAI,SAAShB,EAAEC,EAAE,CAAC,OAAO,KAAK,MAAM,EAAE,KAAKD,EAAEC,CAAC,CAAC,EAAEe,EAAE,IAAI,SAAShB,EAAE,CAAC,OAAO,KAAK0B,EAAE,EAAE1B,CAAC,CAAC,EAAE,CAAC,EAAEgB,EAAE,IAAI,SAASb,EAAEM,EAAE,CAAC,IAAIE,EAAEC,EAAE,KAAKT,EAAE,OAAOA,CAAC,EAAE,IAAIU,EAAEa,EAAE,EAAEjB,CAAC,EAAEK,EAAE,SAASd,EAAE,CAAC,IAAIC,EAAEwB,EAAEb,CAAC,EAAE,OAAOc,EAAE,EAAEzB,EAAE,KAAKA,EAAE,KAAK,EAAE,KAAK,MAAMD,EAAEG,CAAC,CAAC,EAAES,CAAC,CAAC,EAAE,GAAGC,IAAIL,EAAE,OAAO,KAAK,IAAIA,EAAE,KAAK,GAAGL,CAAC,EAAE,GAAGU,IAAIH,EAAE,OAAO,KAAK,IAAIA,EAAE,KAAK,GAAGP,CAAC,EAAE,GAAGU,IAAI,EAAE,OAAOC,EAAE,CAAC,EAAE,GAAGD,IAAIN,EAAE,OAAOO,EAAE,CAAC,EAAE,IAAIC,GAAGJ,EAAE,CAAC,EAAEA,EAAEN,CAAC,EAAEJ,EAAEU,EAAEL,CAAC,EAAEJ,EAAES,EAAEP,CAAC,EAAEJ,EAAEW,GAAGE,CAAC,GAAG,EAAEG,EAAE,KAAK,GAAG,QAAQ,EAAEb,EAAEY,EAAE,OAAOW,EAAE,EAAEV,EAAE,IAAI,CAAC,EAAEA,EAAE,SAAS,SAAShB,EAAEC,EAAE,CAAC,OAAO,KAAK,IAAI,GAAGD,EAAEC,CAAC,CAAC,EAAEe,EAAE,OAAO,SAAShB,EAAE,CAAC,IAAIC,EAAE,KAAKC,EAAE,KAAK,QAAQ,EAAE,GAAG,CAAC,KAAK,QAAQ,EAAE,OAAOA,EAAE,aAAaU,EAAE,IAAIT,EAAEH,GAAG,uBAAuBI,EAAEsB,EAAE,EAAE,IAAI,EAAErB,EAAE,KAAK,GAAGC,EAAE,KAAK,GAAGkB,EAAE,KAAK,GAAGjB,EAAEL,EAAE,SAASM,EAAEN,EAAE,OAAOO,GAAEP,EAAE,SAASQ,GAAE,SAASV,GAAEE,GAAEE,GAAEC,GAAE,CAAC,OAAOL,KAAIA,GAAEE,EAAC,GAAGF,GAAEC,EAAEE,CAAC,IAAIC,GAAEF,EAAC,EAAE,MAAM,EAAEG,EAAC,CAAC,EAAEM,GAAE,SAASX,GAAE,CAAC,OAAO0B,EAAE,EAAErB,EAAE,IAAI,GAAGL,GAAE,GAAG,CAAC,EAAEa,GAAEJ,IAAG,SAAST,GAAEC,GAAEC,GAAE,CAAC,IAAIC,GAAEH,GAAE,GAAG,KAAK,KAAK,OAAOE,GAAEC,GAAE,YAAY,EAAEA,EAAC,EAAE,OAAOA,EAAE,QAAQW,EAAG,SAASd,GAAEG,GAAE,CAAC,OAAOA,IAAG,SAASH,GAAE,CAAC,OAAOA,GAAE,CAAC,IAAI,KAAK,OAAO,OAAOC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,OAAO,OAAOyB,EAAE,EAAEzB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,OAAOuB,EAAE,EAAE,IAAI,KAAK,OAAOE,EAAE,EAAEF,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,MAAM,OAAOd,GAAER,EAAE,YAAYsB,EAAEhB,EAAE,CAAC,EAAE,IAAI,OAAO,OAAOE,GAAEF,EAAEgB,CAAC,EAAE,IAAI,IAAI,OAAOvB,EAAE,GAAG,IAAI,KAAK,OAAOyB,EAAE,EAAEzB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,OAAO,OAAOA,EAAE,EAAE,EAAE,IAAI,KAAK,OAAOS,GAAER,EAAE,YAAYD,EAAE,GAAGM,EAAE,CAAC,EAAE,IAAI,MAAM,OAAOG,GAAER,EAAE,cAAcD,EAAE,GAAGM,EAAE,CAAC,EAAE,IAAI,OAAO,OAAOA,EAAEN,EAAE,EAAE,EAAE,IAAI,IAAI,OAAO,OAAOI,CAAC,EAAE,IAAI,KAAK,OAAOqB,EAAE,EAAErB,EAAE,EAAE,GAAG,EAAE,IAAI,IAAI,OAAOM,GAAE,CAAC,EAAE,IAAI,KAAK,OAAOA,GAAE,CAAC,EAAE,IAAI,IAAI,OAAOE,GAAER,EAAEC,EAAE,EAAE,EAAE,IAAI,IAAI,OAAOO,GAAER,EAAEC,EAAE,EAAE,EAAE,IAAI,IAAI,OAAO,OAAOA,CAAC,EAAE,IAAI,KAAK,OAAOoB,EAAE,EAAEpB,EAAE,EAAE,GAAG,EAAE,IAAI,IAAI,OAAO,OAAOL,EAAE,EAAE,EAAE,IAAI,KAAK,OAAOyB,EAAE,EAAEzB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,MAAM,OAAOyB,EAAE,EAAEzB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,OAAOG,CAAC,CAAC,OAAO,IAAI,EAAEJ,EAAC,GAAGI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAE,CAAC,EAAEY,EAAE,UAAU,UAAU,CAAC,MAAO,IAAG,CAAC,KAAK,MAAM,KAAK,GAAG,kBAAkB,EAAE,EAAE,CAAC,EAAEA,EAAE,KAAK,SAASb,EAAEQ,EAAEC,EAAE,CAAC,IAAIC,EAAEC,EAAE,KAAKC,EAAEW,EAAE,EAAEf,CAAC,EAAEK,EAAES,EAAEtB,CAAC,EAAEc,GAAGD,EAAE,UAAU,EAAE,KAAK,UAAU,GAAGf,EAAEiB,EAAE,KAAKF,EAAEG,EAAE,UAAU,CAAC,OAAOO,EAAE,EAAEZ,EAAEE,CAAC,CAAC,EAAE,OAAOD,EAAE,CAAC,KAAKL,EAAEG,EAAEM,EAAE,EAAE,GAAG,MAAM,KAAKX,EAAEK,EAAEM,EAAE,EAAE,MAAM,KAAKV,EAAEI,EAAEM,EAAE,EAAE,EAAE,MAAM,KAAKZ,EAAEM,GAAGK,EAAED,GAAG,OAAO,MAAM,KAAK,EAAEJ,GAAGK,EAAED,GAAG,MAAM,MAAM,KAAKX,EAAEO,EAAEK,EAAEhB,EAAE,MAAM,KAAKG,EAAEQ,EAAEK,EAAEjB,EAAE,MAAM,KAAKG,EAAES,EAAEK,EAAElB,EAAE,MAAM,QAAQa,EAAEK,CAAC,CAAC,OAAON,EAAEC,EAAEa,EAAE,EAAEb,CAAC,CAAC,EAAEG,EAAE,YAAY,UAAU,CAAC,OAAO,KAAK,MAAMR,CAAC,EAAE,EAAE,EAAEQ,EAAE,QAAQ,UAAU,CAAC,OAAOG,EAAE,KAAK,EAAE,CAAC,EAAEH,EAAE,OAAO,SAAShB,EAAEC,EAAE,CAAC,GAAG,CAACD,EAAE,OAAO,KAAK,GAAG,IAAIE,EAAE,KAAK,MAAM,EAAEC,EAAEoB,EAAEvB,EAAEC,EAAE,EAAE,EAAE,OAAOE,IAAID,EAAE,GAAGC,GAAGD,CAAC,EAAEc,EAAE,MAAM,UAAU,CAAC,OAAOU,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,EAAEV,EAAE,OAAO,UAAU,CAAC,OAAO,IAAI,KAAK,KAAK,QAAQ,CAAC,CAAC,EAAEA,EAAE,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,IAAI,EAAEA,EAAE,YAAY,UAAU,CAAC,OAAO,KAAK,GAAG,YAAY,CAAC,EAAEA,EAAE,SAAS,UAAU,CAAC,OAAO,KAAK,GAAG,YAAY,CAAC,EAAED,CAAC,EAAE,EAAEY,EAAEL,EAAE,UAAU,OAAOG,EAAE,UAAUE,EAAE,CAAC,CAAC,MAAMxB,CAAC,EAAE,CAAC,KAAKC,CAAC,EAAE,CAAC,KAAKC,CAAC,EAAE,CAAC,KAAKC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAKE,CAAC,EAAE,CAAC,KAAKE,CAAC,EAAE,CAAC,KAAKC,CAAC,CAAC,EAAE,QAAS,SAASX,EAAE,CAAC2B,EAAE3B,EAAE,CAAC,CAAC,EAAE,SAASC,EAAE,CAAC,OAAO,KAAK,GAAGA,EAAED,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,EAAEyB,EAAE,OAAO,SAASzB,EAAEC,EAAE,CAAC,OAAOD,EAAE,KAAKA,EAAEC,EAAEqB,EAAEG,CAAC,EAAEzB,EAAE,GAAG,IAAIyB,CAAC,EAAEA,EAAE,OAAOF,EAAEE,EAAE,QAAQJ,EAAEI,EAAE,KAAK,SAASzB,EAAE,CAAC,OAAOyB,EAAE,IAAIzB,CAAC,CAAC,EAAEyB,EAAE,GAAGN,EAAED,CAAC,EAAEO,EAAE,GAAGN,EAAEM,EAAE,EAAE,CAAC,EAAEA,CAAC,CAAE,ICAt/N,IAAAG,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAAC,SAASC,EAAEC,EAAE,CAAW,OAAOH,IAAjB,UAAuC,OAAOC,GAApB,IAA2BA,GAAO,QAAQE,EAAE,EAAc,OAAO,QAAnB,YAA2B,OAAO,IAAI,OAAOA,CAAC,GAAGD,EAAe,OAAO,WAApB,IAA+B,WAAWA,GAAG,MAAM,sBAAsBC,EAAE,CAAC,GAAEH,GAAM,UAAU,CAAC,aAAa,IAAIE,EAAEC,EAAEC,EAAE,IAAIC,EAAE,IAAIC,EAAE,KAAKC,EAAE,MAAMC,EAAE,sFAAsFC,EAAE,QAAQ,EAAE,OAAOC,EAAE,sKAAsKC,EAAE,CAAC,MAAMF,EAAE,OAAO,EAAE,KAAKF,EAAE,MAAMD,EAAE,QAAQD,EAAE,QAAQD,EAAE,aAAa,EAAE,MAAM,MAAM,EAAEQ,EAAE,SAASV,EAAE,CAAC,OAAOA,aAAaW,CAAC,EAAEC,EAAE,SAASZ,EAAEC,EAAEC,EAAE,CAAC,OAAO,IAAIS,EAAEX,EAAEE,EAAED,EAAE,EAAE,CAAC,EAAEY,EAAE,SAASb,EAAE,CAAC,OAAOC,EAAE,EAAED,CAAC,EAAE,GAAG,EAAEc,EAAE,SAASd,EAAE,CAAC,OAAOA,EAAE,CAAC,EAAEe,EAAE,SAASf,EAAE,CAAC,OAAOc,EAAEd,CAAC,EAAE,KAAK,KAAKA,CAAC,EAAE,KAAK,MAAMA,CAAC,CAAC,EAAEgB,EAAE,SAAShB,EAAE,CAAC,OAAO,KAAK,IAAIA,CAAC,CAAC,EAAEiB,EAAE,SAASjB,EAAEC,EAAE,CAAC,OAAOD,EAAEc,EAAEd,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,GAAGgB,EAAEhB,CAAC,EAAEC,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,GAAGD,EAAEC,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC,EAAEU,EAAE,UAAU,CAAC,SAASG,EAAEd,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,GAAGD,EAAWF,IAAT,SAAa,KAAK,IAAI,EAAE,KAAK,sBAAsB,GAAGC,EAAE,OAAOW,EAAEZ,EAAES,EAAEI,EAAEZ,CAAC,CAAC,EAAE,IAAI,EAAE,GAAa,OAAOD,GAAjB,SAAmB,OAAO,KAAK,IAAIA,EAAE,KAAK,sBAAsB,EAAE,KAAK,GAAa,OAAOA,GAAjB,SAAmB,OAAO,OAAO,KAAKA,CAAC,EAAE,QAAS,SAASC,EAAE,CAACE,EAAE,GAAGU,EAAEZ,CAAC,CAAC,EAAED,EAAEC,CAAC,CAAC,CAAE,EAAE,KAAK,gBAAgB,EAAE,KAAK,GAAa,OAAOD,GAAjB,SAAmB,CAAC,IAAII,EAAEJ,EAAE,MAAMQ,CAAC,EAAE,GAAGJ,EAAE,CAAC,IAAIC,EAAED,EAAE,MAAM,CAAC,EAAE,IAAK,SAASJ,EAAE,CAAC,OAAaA,GAAN,KAAQ,OAAOA,CAAC,EAAE,CAAC,CAAE,EAAE,OAAO,KAAK,GAAG,MAAMK,EAAE,CAAC,EAAE,KAAK,GAAG,OAAOA,EAAE,CAAC,EAAE,KAAK,GAAG,MAAMA,EAAE,CAAC,EAAE,KAAK,GAAG,KAAKA,EAAE,CAAC,EAAE,KAAK,GAAG,MAAMA,EAAE,CAAC,EAAE,KAAK,GAAG,QAAQA,EAAE,CAAC,EAAE,KAAK,GAAG,QAAQA,EAAE,CAAC,EAAE,KAAK,gBAAgB,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,EAAES,EAAE,UAAU,OAAO,EAAE,gBAAgB,UAAU,CAAC,IAAId,EAAE,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,EAAE,EAAE,OAAQ,SAASC,EAAEC,EAAE,CAAC,OAAOD,GAAGD,EAAE,GAAGE,CAAC,GAAG,GAAGO,EAAEP,CAAC,CAAC,EAAG,CAAC,CAAC,EAAE,EAAE,sBAAsB,UAAU,CAAC,IAAIF,EAAE,KAAK,IAAI,KAAK,GAAG,MAAMe,EAAEf,EAAEO,CAAC,EAAEP,GAAGO,EAAE,KAAK,GAAG,OAAOQ,EAAEf,EAAE,CAAC,EAAEA,GAAG,EAAE,KAAK,GAAG,KAAKe,EAAEf,EAAEK,CAAC,EAAEL,GAAGK,EAAE,KAAK,GAAG,MAAMU,EAAEf,EAAEI,CAAC,EAAEJ,GAAGI,EAAE,KAAK,GAAG,QAAQW,EAAEf,EAAEG,CAAC,EAAEH,GAAGG,EAAE,KAAK,GAAG,QAAQY,EAAEf,EAAEE,CAAC,EAAEF,GAAGE,EAAE,KAAK,GAAG,aAAaF,CAAC,EAAE,EAAE,YAAY,UAAU,CAAC,IAAIA,EAAEiB,EAAE,KAAK,GAAG,MAAM,GAAG,EAAEhB,EAAEgB,EAAE,KAAK,GAAG,OAAO,GAAG,EAAEf,EAAE,CAAC,KAAK,GAAG,MAAM,EAAE,KAAK,GAAG,QAAQA,GAAG,EAAE,KAAK,GAAG,OAAO,IAAIC,EAAEc,EAAEf,EAAE,GAAG,EAAEE,EAAEa,EAAE,KAAK,GAAG,MAAM,GAAG,EAAEZ,EAAEY,EAAE,KAAK,GAAG,QAAQ,GAAG,EAAEX,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,GAAG,eAAeA,GAAG,KAAK,GAAG,aAAa,IAAIA,EAAE,KAAK,MAAM,IAAIA,CAAC,EAAE,KAAK,IAAIC,EAAEU,EAAEX,EAAE,GAAG,EAAEY,EAAElB,EAAE,UAAUC,EAAE,UAAUE,EAAE,UAAUC,EAAE,UAAUC,EAAE,UAAUE,EAAE,SAASC,EAAEJ,EAAE,QAAQC,EAAE,QAAQE,EAAE,OAAO,IAAI,GAAGE,GAAGS,EAAE,IAAI,IAAI,IAAIlB,EAAE,OAAOC,EAAE,OAAOE,EAAE,OAAOK,EAAEJ,EAAE,OAAOC,EAAE,OAAOE,EAAE,OAAO,OAAYE,IAAN,KAAgBA,IAAP,KAAS,MAAMA,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,OAAO,KAAK,YAAY,CAAC,EAAE,EAAE,OAAO,SAAST,EAAE,CAAC,IAAIE,EAAEF,GAAG,sBAAsBG,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,GAAGF,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,KAAKA,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,OAAO,GAAGA,EAAE,EAAE,KAAK,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,KAAK,GAAGA,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,MAAM,GAAGA,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAGA,EAAE,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAGA,EAAE,EAAE,KAAK,GAAG,QAAQ,EAAE,GAAG,EAAE,IAAIA,EAAE,EAAE,KAAK,GAAG,aAAa,EAAE,GAAG,CAAC,EAAE,OAAOC,EAAE,QAAQI,EAAG,SAASN,EAAEC,EAAE,CAAC,OAAOA,GAAG,OAAOE,EAAEH,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,GAAG,SAASA,EAAE,CAAC,OAAO,KAAK,IAAIS,EAAEI,EAAEb,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,SAASA,EAAE,CAAC,IAAIC,EAAE,KAAK,IAAIC,EAAEW,EAAEb,CAAC,EAAE,OAAuBE,IAAjB,eAAmBD,GAAG,IAAIA,EAAYC,IAAV,QAAYa,EAAEd,EAAEQ,EAAEP,CAAC,CAAC,EAAE,KAAK,GAAGA,CAAC,EAAED,GAAG,CAAC,EAAE,EAAE,IAAI,SAASD,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAE,OAAOA,EAAEF,EAAED,EAAES,EAAEI,EAAEZ,CAAC,CAAC,EAAES,EAAEV,CAAC,EAAEA,EAAE,IAAIY,EAAEZ,EAAE,IAAI,EAAE,IAAIY,EAAE,KAAK,IAAIT,GAAGD,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,SAAS,SAASF,EAAEC,EAAE,CAAC,OAAO,KAAK,IAAID,EAAEC,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,SAASD,EAAE,CAAC,IAAIC,EAAE,KAAK,MAAM,EAAE,OAAOA,EAAE,GAAGD,EAAEC,CAAC,EAAE,EAAE,MAAM,UAAU,CAAC,OAAOW,EAAE,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE,SAAS,SAASX,EAAE,CAAC,OAAOD,EAAE,EAAE,IAAI,KAAK,IAAI,IAAI,EAAE,OAAO,KAAK,EAAE,EAAE,QAAQ,CAACC,CAAC,CAAC,EAAE,EAAE,QAAQ,UAAU,CAAC,OAAO,KAAK,eAAe,CAAC,EAAE,EAAE,aAAa,UAAU,CAAC,OAAO,KAAK,IAAI,cAAc,CAAC,EAAE,EAAE,eAAe,UAAU,CAAC,OAAO,KAAK,GAAG,cAAc,CAAC,EAAE,EAAE,QAAQ,UAAU,CAAC,OAAO,KAAK,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,UAAU,CAAC,OAAO,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,UAAU,CAAC,OAAO,KAAK,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,UAAU,CAAC,OAAO,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,MAAM,UAAU,CAAC,OAAO,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,QAAQ,UAAU,CAAC,OAAO,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,KAAK,UAAU,CAAC,OAAO,KAAK,IAAI,MAAM,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,UAAU,CAAC,OAAO,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,QAAQ,UAAU,CAAC,OAAO,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,EAAE,EAAE,SAAS,UAAU,CAAC,OAAO,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,UAAU,CAAC,OAAO,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,QAAQ,UAAU,CAAC,OAAO,KAAK,GAAG,OAAO,CAAC,EAAEa,CAAC,EAAE,EAAEK,EAAE,SAASnB,EAAEC,EAAEC,EAAE,CAAC,OAAOF,EAAE,IAAIC,EAAE,MAAM,EAAEC,EAAE,GAAG,EAAE,IAAID,EAAE,OAAO,EAAEC,EAAE,GAAG,EAAE,IAAID,EAAE,KAAK,EAAEC,EAAE,GAAG,EAAE,IAAID,EAAE,MAAM,EAAEC,EAAE,GAAG,EAAE,IAAID,EAAE,QAAQ,EAAEC,EAAE,GAAG,EAAE,IAAID,EAAE,QAAQ,EAAEC,EAAE,GAAG,EAAE,IAAID,EAAE,aAAa,EAAEC,EAAE,IAAI,CAAC,EAAE,OAAO,SAASA,EAAEC,EAAEC,EAAE,CAACJ,EAAEI,EAAEH,EAAEG,EAAE,EAAE,OAAO,EAAEA,EAAE,SAAS,SAASJ,EAAEC,EAAE,CAAC,IAAIC,EAAEE,EAAE,OAAO,EAAE,OAAOQ,EAAEZ,EAAE,CAAC,GAAGE,CAAC,EAAED,CAAC,CAAC,EAAEG,EAAE,WAAWM,EAAE,IAAIL,EAAEF,EAAE,UAAU,IAAIG,EAAEH,EAAE,UAAU,SAASA,EAAE,UAAU,IAAI,SAASH,EAAEC,EAAE,CAAC,OAAOS,EAAEV,CAAC,EAAEmB,EAAE,KAAKnB,EAAE,CAAC,EAAEK,EAAE,KAAK,IAAI,EAAEL,EAAEC,CAAC,CAAC,EAAEE,EAAE,UAAU,SAAS,SAASH,EAAEC,EAAE,CAAC,OAAOS,EAAEV,CAAC,EAAEmB,EAAE,KAAKnB,EAAE,EAAE,EAAEM,EAAE,KAAK,IAAI,EAAEN,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAE,ICA3uJ,IAAAmB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAAC,SAASC,EAAEC,EAAE,CAAW,OAAOH,IAAjB,UAAuC,OAAOC,GAApB,IAA2BA,GAAO,QAAQE,EAAE,EAAc,OAAO,QAAnB,YAA2B,OAAO,IAAI,OAAOA,CAAC,GAAGD,EAAe,OAAO,WAApB,IAA+B,WAAWA,GAAG,MAAM,0BAA0BC,EAAE,CAAC,GAAEH,GAAM,UAAU,CAAC,aAAa,OAAO,SAASE,EAAEC,EAAEC,EAAE,CAACF,EAAEA,GAAG,CAAC,EAAE,IAAI,EAAEC,EAAE,UAAUE,EAAE,CAAC,OAAO,QAAQ,KAAK,SAAS,EAAE,gBAAgB,EAAE,WAAW,GAAG,aAAa,EAAE,UAAU,GAAG,WAAW,EAAE,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,YAAY,EAAE,SAAS,GAAG,UAAU,EAAE,SAASC,EAAEJ,EAAEC,EAAEC,EAAEC,EAAE,CAAC,OAAO,EAAE,WAAWH,EAAEC,EAAEC,EAAEC,CAAC,CAAC,CAACD,EAAE,GAAG,aAAaC,EAAE,EAAE,WAAW,SAASF,EAAEI,EAAED,EAAEE,EAAE,EAAE,CAAC,QAAQC,EAAEC,EAAEC,EAAEC,EAAEN,EAAE,QAAQ,EAAE,cAAcD,EAAEQ,EAAEX,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAEY,EAAED,EAAE,OAAOE,EAAE,EAAEA,EAAED,EAAEC,GAAG,EAAE,CAAC,IAAIC,EAAEH,EAAEE,CAAC,EAAEC,EAAE,IAAIP,EAAED,EAAEJ,EAAED,CAAC,EAAE,KAAKG,EAAEU,EAAE,EAAE,EAAE,EAAEV,EAAE,KAAKH,EAAEa,EAAE,EAAE,EAAE,GAAG,IAAIC,GAAGf,EAAE,UAAU,KAAK,OAAO,KAAK,IAAIO,CAAC,CAAC,EAAE,GAAGE,EAAEF,EAAE,EAAEQ,GAAGD,EAAE,GAAG,CAACA,EAAE,EAAE,CAACC,GAAG,GAAGF,EAAE,IAAIC,EAAEH,EAAEE,EAAE,CAAC,GAAG,IAAIG,EAAEN,EAAEI,EAAE,CAAC,EAAE,IAAIC,EAAE,EAAE,GAAGA,CAAC,GAAGP,EAAY,OAAOQ,GAAjB,SAAmBA,EAAE,QAAQ,KAAKD,CAAC,EAAEC,EAAED,EAAEV,EAAES,EAAE,EAAEL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAGJ,EAAE,OAAOG,EAAE,IAAIS,EAAER,EAAEC,EAAE,OAAOA,EAAE,KAAK,OAAkB,OAAOO,GAAnB,WAAqBA,EAAET,CAAC,EAAES,EAAE,QAAQ,KAAKT,CAAC,CAAC,EAAE,EAAE,GAAG,SAASR,EAAEC,EAAE,CAAC,OAAOG,EAAEJ,EAAEC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,SAASD,EAAEC,EAAE,CAAC,OAAOG,EAAEJ,EAAEC,EAAE,IAAI,CAAC,EAAE,IAAIK,EAAE,SAASN,EAAE,CAAC,OAAOA,EAAE,GAAGE,EAAE,IAAI,EAAEA,EAAE,CAAC,EAAE,EAAE,MAAM,SAASF,EAAE,CAAC,OAAO,KAAK,GAAGM,EAAE,IAAI,EAAEN,CAAC,CAAC,EAAE,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAO,KAAK,KAAKM,EAAE,IAAI,EAAEN,CAAC,CAAC,CAAC,CAAC,CAAE,ICA54C,IAAAkB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAA,QAAS,CAAC,WAAa,CAAC,CAAC,KAAO,QAAQ,YAAc,8BAA8B,aAAe,GAAM,MAAQ,OAAO,GAAG,CAAC,EAAE,CAAC,KAAO,UAAU,YAAc,6BAA6B,aAAe,GAAM,MAAQ,OAAO,GAAG,CAAC,EAAE,CAAC,KAAO,YAAY,YAAc,qCAAqC,aAAe,GAAM,MAAQ,OAAO,GAAG,CAAC,EAAE,CAAC,KAAO,qBAAqB,YAAc,wBAAwB,aAAe,GAAM,MAAQ,OAAO,GAAG,CAAC,EAAE,CAAC,KAAO,UAAU,YAAc,4BAA4B,aAAe,GAAK,MAAQ,OAAO,IAAI,CAAC,EAAE,CAAC,KAAO,0BAA0B,YAAc,oFAAoF,aAAe,GAAK,MAAQ,OAAO,IAAI,CAAC,EAAE,CAAC,KAAO,2BAA2B,YAAc,qCAAqC,aAAe,GAAM,MAAQ,OAAO,IAAI,CAAC,EAAE,CAAC,KAAO,2BAA2B,YAAc,wCAAwC,aAAe,GAAM,MAAQ,OAAO,KAAK,CAAC,EAAE,CAAC,KAAO,2BAA2B,YAAc,uCAAuC,aAAe,GAAM,MAAQ,OAAO,KAAK,CAAC,EAAE,CAAC,KAAO,0BAA0B,YAAc,8BAA8B,aAAe,GAAM,MAAQ,OAAO,KAAK,CAAC,EAAE,CAAC,KAAO,mBAAmB,YAAc,6BAA6B,aAAe,GAAM,MAAQ,OAAO,MAAM,CAAC,EAAE,CAAC,KAAO,uBAAuB,YAAc,8IAAmJ,aAAe,GAAK,MAAQ,OAAO,MAAM,CAAC,EAAE,CAAC,KAAO,SAAS,YAAc,uCAAuC,aAAe,GAAK,MAAQ,OAAO,MAAM,CAAC,EAAE,CAAC,KAAO,6BAA6B,YAAc,yCAAyC,aAAe,GAAK,MAAQ,OAAO,MAAM,CAAC,EAAE,CAAC,KAAO,qBAAqB,YAAc,sCAAsC,aAAe,GAAM,MAAQ,OAAO,OAAO,CAAC,EAAE,CAAC,KAAO,mBAAmB,YAAc,+CAA+C,aAAe,GAAK,MAAQ,OAAO,OAAO,CAAC,EAAE,CAAC,KAAO,eAAe,YAAc,0BAA0B,aAAe,GAAM,MAAQ,OAAO,OAAO,CAAC,EAAE,CAAC,KAAO,qBAAqB,YAAc,oCAAoC,aAAe,GAAM,MAAQ,OAAO,QAAQ,CAAC,EAAE,CAAC,KAAO,sBAAsB,YAAc,8CAA8C,aAAe,GAAM,MAAQ,OAAO,QAAQ,CAAC,EAAE,CAAC,KAAO,wBAAwB,YAAc,8BAA8B,aAAe,GAAM,MAAQ,OAAO,QAAQ,CAAC,EAAE,CAAC,KAAO,UAAU,YAAc,+BAA+B,aAAe,GAAK,MAAQ,OAAO,SAAS,CAAC,EAAE,CAAC,KAAO,kBAAkB,YAAc,sCAAsC,aAAe,GAAK,MAAQ,OAAO,SAAS,CAAC,EAAE,CAAC,KAAO,mBAAmB,YAAc,+EAAmG,aAAe,GAAM,MAAQ,OAAO,SAAS,CAAC,EAAE,CAAC,KAAO,yBAAyB,YAAc,uCAAuC,aAAe,GAAK,MAAQ,OAAO,YAAY,CAAC,EAAE,CAAC,KAAO,UAAU,YAAc,4BAA4B,aAAe,GAAK,MAAQ,OAAO,aAAa,CAAC,EAAE,CAAC,KAAO,+BAA+B,YAAc,qDAAqD,aAAe,GAAK,MAAQ,OAAO,aAAa,CAAC,EAAE,CAAC,KAAO,eAAe,YAAc,mCAAmC,aAAe,GAAK,MAAQ,OAAO,aAAa,CAAC,EAAE,CAAC,KAAO,wBAAwB,YAAc,oCAAoC,aAAe,GAAK,MAAQ,OAAO,cAAc,CAAC,EAAE,CAAC,KAAO,sBAAsB,YAAc,oCAAoC,aAAe,GAAK,MAAQ,OAAO,cAAc,CAAC,EAAE,CAAC,KAAO,kBAAkB,YAAc,gCAAgC,aAAe,GAAK,MAAQ,OAAO,cAAc,CAAC,EAAE,CAAC,KAAO,qBAAqB,YAAc,mCAAmC,aAAe,GAAK,MAAQ,OAAO,eAAe,CAAC,EAAE,CAAC,KAAO,WAAW,YAAc,yDAAyD,aAAe,GAAK,MAAQ,OAAO,eAAe,CAAC,EAAE,CAAC,KAAO,iBAAiB,YAAc,6BAA6B,aAAe,GAAK,MAAQ,OAAO,eAAe,CAAC,EAAE,CAAC,KAAO,cAAc,YAAc,+BAA+B,aAAe,GAAK,MAAQ,OAAO,gBAAgB,CAAC,EAAE,CAAC,KAAO,eAAe,YAAc,oDAAoD,aAAe,GAAK,MAAQ,OAAO,kBAAkB,CAAC,EAAE,CAAC,KAAO,0BAA0B,YAAc,+DAA+D,aAAe,GAAK,MAAQ,OAAO,kBAAkB,CAAC,CAAC,CAAC,ICA/pJ,IAAAC,GAAAC,GAAAC,IAAA,cAEA,OAAO,eAAeA,GAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAKDA,GAAQ,QAAU,otaCTlB,IAAAC,GAAAC,GAAAC,IAAA,cAEA,OAAO,eAAeA,GAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,GAAQ,SAAW,OACnBA,GAAQ,MAAQC,GAChBD,GAAQ,aAAeE,GAEvB,IAAIC,GAAS,KAETC,GAAUC,GAAuBF,EAAM,EAE3C,SAASE,GAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAI,CAAG,CAE9F,IAAIC,GAAWP,GAAQ,SAAW,QAGlC,SAASC,GAAMO,EAAMC,EAAS,CAC5B,IAAIC,EAAYD,GAAWA,EAAQ,UAAYA,EAAQ,UAAY,MAC/DE,EAAgBF,GAAWA,EAAQ,SAAWA,EAAQ,SAAW,SAAUG,EAAYF,EAAW,CACpG,OAAOA,IAAc,MAAQ,mEAAqEE,EAAa,OAAS,iEAAmEA,EAAa,MAC1M,EAEIC,EAAW,CAAC,EAGhB,IADAT,GAAQ,QAAQ,UAAY,IACf,CACX,IAAIU,EAASV,GAAQ,QAAQ,KAAKI,CAAI,EACtC,GAAI,CAACM,EACH,MAGF,IAAIC,EAAYD,EAAO,CAAC,EACpBF,EAAaV,GAAac,GAAYD,CAAS,CAAC,EAAE,KAAK,GAAG,EAE9DF,EAAS,KAAK,CACZ,IAAKD,EAAaD,EAAcC,EAAYF,CAAS,EAAI,GACzD,QAAS,CAACI,EAAO,MAAOV,GAAQ,QAAQ,SAAS,EACjD,KAAMW,EACN,KAAMR,EACR,CAAC,CACH,CACA,OAAOM,CACT,CAEA,IAAII,GAAa,UAEbC,GAAkB,SAElBF,GAAc,SAAqBG,EAAU,CAC/C,OAAOA,EAAS,QAAQD,EAAe,EAAI,EAAIC,EAAS,QAAQF,GAAY,EAAE,EAAIE,CACpF,EAEA,SAASjB,GAAakB,EAAmB,CAKvC,QAJIC,EAAS,CAAC,EACVC,EAAO,EACPC,EAAW,EACXC,EAAI,EACDA,EAAIJ,EAAkB,QAC3BE,EAAOF,EAAkB,WAAWI,GAAG,EACnCD,GACFF,EAAO,MAAM,OAAWE,EAAW,OAAU,KAAOD,EAAO,QAAS,SAAS,EAAE,CAAC,EAChFC,EAAW,GACFD,EAAO,OAAUA,GAAQ,MAClCC,EAAWD,EAEXD,EAAO,KAAKC,EAAK,SAAS,EAAE,CAAC,EAGjC,OAAOD,CACT,ICvEA,IAAAI,GAAkB,WAElBC,GAAqB,WACrBC,GAAqB,WAErB,GAAAC,QAAM,OAAO,GAAAC,OAAQ,EACrB,GAAAD,QAAM,OAAO,GAAAE,OAAQ,ECNrB,OAAO,MAAQ,IAAI,IAAI,QAAQ,EAAE,aAAa,IAAI,KAAK,ECShD,SAASC,GACdC,EACAC,KACGC,EACuB,CAC1B,IAAMC,EACJ,OAAOH,GAAQ,SACX,SAAS,cAAiBA,CAAG,EAC7BA,aAAe,YACfA,EACAC,EACAD,EAAIC,CAAK,EACTD,EAAI,EACV,OAAIC,GAAO,OAAO,QAAQA,CAAK,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAK,IAAOF,EAAQC,CAAG,EAAIC,CAAM,EACjFF,EAAQ,OAAO,GAAGD,EAAS,KAAK,EAAE,OAAOI,GAASA,IAAU,EAAK,CAAC,EAC3DH,CACT,CAEO,SAASI,IAAa,CAC3B,OAAO,SAAS,uBAAuB,CACzC,CAEA,OAAO,OAAO,OAAQ,CAAC,MAAAR,GAAO,WAAAQ,EAAU,CAAC,EC/BzC,IAAAC,GAAkB,WCCX,IAAMC,GAAa,IAAI,IAAI,CAChC,IACA,OACA,QACA,QACA,OACA,aACA,YACA,cACA,SACA,MACA,WACA,QACA,MACA,WACA,YACA,UACA,QACA,aACA,QACA,UACA,KACA,MACA,SACA,QACA,QACA,UACA,OACA,WACA,SACA,KACA,QACA,UACA,KACA,MACA,WACA,UACA,MACA,UACA,SACA,UACA,SACA,WACA,SACA,UACA,WACA,aACA,gBACA,MACA,OACA,QACA,QACA,SACA,KACA,QACA,MACA,SACA,KACA,OACA,YACA,OACA,UACA,IACA,OACA,KACA,SACA,UACA,SACA,UACA,WACA,OACA,SACA,aACA,QACA,YACA,aACA,SACA,SACA,QACA,UACA,QACA,SACA,UACA,UACA,SACA,OACA,OACA,QACA,UACA,MACA,KACA,IACA,KACA,OACA,MACA,SACA,QACA,QACA,SACA,UACA,YACA,KACA,MACA,OACA,QACA,UACA,aACA,WACA,QACA,UACA,IACA,OACA,MACA,SACA,YACA,KACA,OACA,UACA,QACA,OACA,QACA,OACA,YACA,MACA,SACA,IACA,OACA,KACA,MACA,SACA,KACA,QACA,SACA,SACA,OACA,YACA,MACA,SACA,SACA,aACA,KACA,QACA,MACA,OACA,OACA,QACA,YACA,WACA,aACA,aACA,KACA,SACA,IACA,MACA,MACA,KACA,QACA,QACA,OACA,MACA,WACA,YACA,UACA,MACA,SACA,WACA,QACA,QACA,OACA,OACA,UACA,cACA,IACA,OACA,MACA,OACA,UACA,OACA,QACA,QACA,SACA,KACA,OACA,OACA,MACA,SACA,IACA,MACA,UACA,SACA,MACA,SACA,OACA,UACA,SACA,KACA,MACA,QACA,MACA,OACA,YACA,SACA,SACA,QACA,WACA,OACA,UACA,MACA,KACA,MACA,MACA,UACA,MACA,SACA,OACA,MACA,UACA,UACA,UACA,IACA,KACA,KACA,KACA,OACA,KACA,YACA,cACA,aACA,YACA,KACA,MACA,SACA,QACA,cACA,UACA,OACA,YACA,SACA,KACA,QACA,KACA,MACA,QACA,MACA,SACA,OACA,IACA,OACA,IACA,aACA,OACA,KACA,KACA,OACA,QACA,QACA,IACA,UACA,OACA,SACA,QACA,SACA,WACA,QACA,OACA,OACA,MACA,OACA,OACA,QACA,SACA,OACA,SACA,MACA,OACA,UACA,QACA,MACA,IACA,OACA,SACA,OACA,QACA,OACA,MACA,QACA,KACA,OACA,QACA,WACA,YACA,SACA,KACA,QACA,UACA,OACA,KACA,OACA,WACA,OACA,SACA,KACA,MACA,OACA,MACA,OACA,KACA,SACA,IACA,KACA,OACA,SACA,MACA,KACA,OACA,SACA,cACA,YACA,OACA,QACA,UACA,QACA,eACA,MACA,OACA,OACA,SACA,KACA,SACA,MACA,OACA,cACA,QACA,MACA,WACA,MACA,MACA,QACA,UACA,MACA,UACA,IACA,SACA,WACA,YACA,KACA,MACA,QACA,KACA,KACA,OACA,MACA,UACA,KACA,OACA,MACA,OACA,OACA,OACA,KACA,MACA,QACA,SACA,YACA,QACA,MACA,OACA,YACA,MACA,UACA,OACA,UACA,QACA,MACA,IACA,OACA,QACA,OACA,aACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,SACA,WACA,WACA,cACA,KACA,gBACA,UACA,aACA,YACA,WACA,WACA,QACA,WACA,MACA,IACA,MACA,UACA,QACA,KACA,IACA,MACA,SACA,KACA,KACA,UACA,SACA,SACA,WACA,MACA,OACA,YACA,aACA,UACA,UACA,aACA,WACA,eACA,WACA,YACA,UACA,QACA,MACA,IACA,OACA,OACA,MACA,MACA,SACA,OACA,MACA,UACA,MACA,SACA,OACA,SACA,UACA,QACA,OACA,OACA,SACA,OACA,QACA,UACA,QACA,MACA,OACA,SACA,OACA,SACA,YACA,OACA,SACA,QACA,SACA,QACA,cACA,gBACA,UACA,YACA,QACA,MACA,WACA,KACA,OACA,WACA,UACA,UACA,WACA,YACA,WACA,YACA,WACA,YACA,OACA,QACA,eACA,YACA,UACA,aACA,QACA,OACA,WACA,MACA,gBACA,eACA,OACA,eACA,UACA,MACA,SACA,OACA,QACA,SACA,OACA,QACA,KACA,OACA,QACA,SACA,QACA,OACA,UACA,QACA,UACA,MACA,QACA,SACA,OACA,aACA,OACA,SACA,QACA,aACA,UACA,SACA,YACA,UACA,WACA,UACA,UACA,SACA,UACA,YACA,WACA,QACA,OACA,QACA,UACA,SACA,UACA,QACA,OACA,QACA,OACA,SACA,UACA,WACA,SACA,UACA,aACA,OACA,OACA,MACA,MACA,KACA,WACA,MACA,OACA,SACA,UACA,QACA,QACA,QACA,MACA,SACA,KACA,QACA,MACA,IACA,KACA,QACA,gBACA,SACA,SACA,WACA,QACA,OACA,KACA,OACA,MACA,KACA,MACA,OACA,SACA,WACA,aACA,OACA,QACA,UACA,IACA,QACA,UACA,MACA,OACA,MACA,MACA,MACA,OACA,KACA,IACA,OACA,QACA,MACA,QACA,MACA,KACA,MACA,UACA,QACA,OACA,OACA,SACA,QACA,OACA,WACA,UACA,QACA,OACA,SACA,WACA,QACA,aACA,UACA,UACA,UACA,SACA,YACA,WACA,UACA,QACA,QACA,OACA,UACA,MACA,OACA,UACA,QACA,SACA,OACA,WACA,OACA,QACA,MACA,SACA,UACA,OACA,OACA,SACA,UACA,OACA,QACA,QACA,QACA,UACA,MACA,IACA,IACA,MACA,MACA,MACA,OACA,SACA,OACA,QACA,QACA,WACA,aACA,SACA,IACA,MACF,CAAC,EDxpBD,IAAMC,GAAa,wBAEZ,SAASC,GAAEC,EAAI,CACpB,OAAO,SAAS,eAAeA,CAAE,CACnC,CAEO,SAASC,GAASC,EAAOC,EAAKC,EAAKC,GAAKA,EAAG,CAChD,OAAKF,IACHA,EAAMD,EACNA,EAAQ,GAGH,MAAM,KAAK,CAAE,OAAQC,EAAMD,CAAM,EAAG,CAACI,EAAGD,IAAMD,EAAGC,EAAIH,CAAK,CAAC,CACpE,CAOO,SAASK,GAAUL,EAAOC,EAAKK,EAAM,CAC1C,IAAMC,EAAQ,CAAC,EACf,QAASC,EAAUR,EAAOQ,EAAQ,SAASP,CAAG,EAAGO,EAAUA,EAAQ,IAAI,EAAGF,CAAI,EAAGC,EAAM,KAAKC,CAAO,EACnG,OAAOD,CACT,CAEA,IA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", "names": ["require_dayjs_min", "__commonJSMin", "exports", "module", "t", "e", "n", "r", "i", "s", "u", "o", "c", "f", "h", "d", "l", "$", "y", "M", "m", "v", "g", "D", "p", "S", "_", "w", "a", "O", "b", "k", "require_duration", "__commonJSMin", "exports", "module", "t", "s", "n", "i", "e", "r", "o", "u", "a", "h", "c", "g", "f", "m", "l", "$", "y", "v", "d", "p", "require_relativeTime", "__commonJSMin", "exports", "module", "r", "e", "t", "o", "i", "n", "d", "f", "a", "s", "l", "h", "m", "c", "y", "p", "v", "M", "require_USER_FLAGS_macro", "__commonJSMin", "exports", "module", "require_regex", "__commonJSMin", "exports", "require_dist", "__commonJSMin", "exports", "parse", "toCodePoints", "_regex", "_regex2", "_interopRequireDefault", "obj", "TypeName", "text", "options", "assetType", "getTwemojiUrl", "codepoints", "entities", "result", "emojiText", "removeVS16s", "vs16RegExp", "zeroWidthJoiner", "rawEmoji", "unicodeSurrogates", "points", "char", "previous", "i", "import_dayjs", "import_duration", "import_relativeTime", "dayjs", "duration", "relative", "__jsx", "tag", "props", "children", "element", "key", "value", "child", "__fragment", "import_dayjs", "STOP_WORDS", "WORD_REGEX", "$", "id", "rangeNum", "start", "end", "fn", "i", "_", "rangeDate", "unit", "dates", "current", "dummyDate", "dayjs", "formatHour", "hour", "formatNum", "num", "formatCurrency", "amount", "currency", "getWords", "text", "word", "STOP_WORDS", "ch2", "wk", "c", "id", "msg", "transfer", "cb", "w", "e", "d", "ed", "err", "u8", "u16", "i32", "fleb", "fdeb", "clim", "freb", "eb", "start", "b", "i", "r", "j", "_a", "fl", "revfl", "_b", "fd", "revfd", "rev", "x", "hMap", "cd", "mb", "s", "l", "le", "co", "rvb", "sv", "r_1", "v", "m", "flt", "fdt", "flrm", "hMap", "flt", "fdrm", "hMap", "fdt", "max", "a", "m", "i", "bits", "d", "p", "o", "bits16", "shft", "slc", "v", "s", "u8", "ec", "err", "ind", "msg", "nt", "e", "inflt", "dat", "st", "buf", "dict", "sl", "dl", "u8", "noBuf", "resize", "noSt", "cbuf", "l", "bl", "nbuf", "final", "pos", "bt", "lm", "dm", "lbt", "dbt", "tbts", "bits", "type", "flrm", "fdrm", "hLit", "hcLen", "tl", "ldt", "clt", "i", "clim", "clb", "max", "clbmsk", "clm", "hMap", "r", "s", "c", "n", "lt", "dt", "shft", "t", "lms", "dms", "lpos", "bits16", "sym", "add", "b", "fleb", "fl", "d", "dsym", "fd", "fdeb", "end", "shift", "dend", "slc", "et", "u8", "mrg", "a", "b", "o", "k", "wcln", "fn", "fnStr", "td", "dt", "st", "ks", "i", "v", "st_1", "spInd", "t", "ch", "cbfs", "tl", "wrkr", "fns", "init", "id", "cb", "td_1", "m", "wk", "bInflt", "u8", "u16", "i32", "fleb", "fdeb", "clim", "fl", "fd", "flrm", "fdrm", "rev", "ec", "hMap", "max", "bits", "bits16", "shft", "slc", "err", "inflt", "inflateSync", "pbf", "gopt", "pbf", "msg", "gopt", "o", "u8", "astrm", "strm", "dat", "final", "ev", "astrmify", "fns", "opts", "init", "id", "flush", "ext", "t", "w", "wrkr", "err", "d", "f", "b2", "b", "b4", "b8", "StrmOpt", "opts", "cb", "Inflate", "opts", "cb", "dict", "u8", "c", "err", "n", "final", "bts", "dt", "inflt", "slc", "chunk", "AsyncInflate", "opts", "cb", "astrmify", "bInflt", "astrm", "Inflate", "StrmOpt", "ev", "strm", "inflateSync", "data", "opts", "inflt", "td", "tds", "et", "dutf8", "d", "r", "i", "c", "eb", "slc", "DecodeUTF8", "cb", "chunk", "final", "err", "dat", "u8", "_a", "s", "strFromU8", "dat", "latin1", "r", "i", "td", "_a", "dutf8", "s", "err", "z64e", "d", "b", "b2", "b8", "UnzipPassThrough", "data", "final", "AsyncUnzipInflate", "_", "sz", "_this", "Inflate", "dat", "final", "AsyncInflate", "err", "data", "slc", "Unzip", "cb", "UnzipPassThrough", "et", "chunk", "final", "_this", "err", "len", "toAdd", "f", "i", "is", "buf", "u8", "l", "oc", "add", "_loop_2", "_a", "sig", "b4", "this_1", "bf", "b2", "cmp_1", "u", "dd", "fnl", "es", "chks_3", "sc_1", "su_1", "fn_1", "strFromU8", "z64e", "d_1", "file_1", "ctr", "dat", "_i", "chks_4", "state_1", "decoder", "BaseDirectory", "fn", "entry", "ReaderError", "_ReaderError", "message", "ParseErrMessage", "ParseError", "_ParseError", "args", "maxConsecutiveEmptyReads", "isReadableStream", "s", "decoder", "SliceReader", "source", "reader", "i", "newStr", "done", "value", "n", "delim", "line", "RuneError", "MaxRune", "locb", "hicb", "acceptRanges", "surrogateMin", "surrogateMax", "validRune", "r", "RecordBuffer", "fieldsPerRecord", "recLine", "isStringArray", "errInvalidDelim", "validDelim", "lengthNL", "b", "Reader", "input", "config", "cstr", "sl", "col", "field", "j", "rn", "cb", "record", "BaseFile", "withHeaders", "reader", "Reader", "headers", "resolve", "columns", "record", "obj", "i", "JSFile", "BaseFile", "entry", "resolve", "reject", "file", "readNextEntriesAsync", "reader", "resolve", "reject", "detectSubfolder", "dir", "entries", "entry", "JSDirectory", "_JSDirectory", "BaseDirectory", "name", "JSFile", "ZipFile", "BaseFile", "file", "controller", "err", "chunk", "final", "text", "resolve", "reject", "decoder", "DecodeUTF8", "ZipDirectory", "_ZipDirectory", "BaseDirectory", "name", "file", "parts", "parentDir", "part", "childDir", "ZipFile", "fileName", "Spinner", "app", "$", "Dropzone", "extract", "ev", "Spinner", "root", "entry", "uz", "Unzip", "dir", "ZipDirectory", "AsyncUnzipInflate", "file", "reader", "value", "done", "res", "err", "JSFile", "detectSubfolder", "JSDirectory", "app", "$", "ServiceCard", "service", "Dropzone", "Discord_exports", "__export", "accentColor", "banner_default", "extract", "instructions", "name", "Row", "import_dayjs", "round", "v", "lim", "l", "h", "p2b", "n2b", "v", "lim", "round", "b2n", "n2p", "map$1", "hex", "h1", "b", "h2", "eq", "isShort", "hexParse", "str", "len", "ret", "alpha", "a", "f", "hexString", "HUE_RE", "hsl2rgbn", "h", "s", "l", "n", "k", "hsv2rgbn", "hwb2rgbn", "w", "rgb", "i", "hueValue", "r", "g", "d", "max", "rgb2hsl", "min", "calln", "c", "hsl2rgb", "hwb2rgb", "hsv2rgb", "hue", "hueParse", "m", "p2b", "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", "clone", "proto", "fromObject", "input", "functionParse", "Color", "_Color", "type", "obj", "color", "weight", "c1", "c2", "w2", "p", "w1", "val", "noop", "uid", "id", "isNullOrUndef", "value", "isArray", "Array", "type", "Object", "prototype", "toString", "call", "slice", "isObject", "isNumberFinite", "Number", "isFinite", "finiteOrDefault", "defaultValue", "valueOrDefault", "toPercentage", "dimension", "endsWith", "parseFloat", "toDimension", "callback", "fn", "args", "thisArg", "apply", "each", "loopable", "reverse", "i", "len", "keys", "length", "_elementsEqual", "a0", "a1", "ilen", "v0", "v1", "datasetIndex", "index", "clone", "source", "map", "target", "create", "klen", "k", "isValidKey", "key", "indexOf", "_merger", "options", "tval", "sval", "merge", "sources", "merger", "current", "mergeIf", "_mergerIf", "hasOwnProperty", "keyResolvers", "v", "x", "o", "y", "_splitKey", "key", "parts", "split", "keys", "tmp", "part", "endsWith", "slice", "push", "_getKeyResolver", "obj", "k", "resolveObjectKey", "_capitalize", "str", "charAt", "toUpperCase", "defined", "value", "isFunction", "setsEqual", "a", "b", "size", "item", "has", "_isClickEvent", "e", "type", "PI", "Math", "TAU", "PITAU", "INFINITY", "Number", "POSITIVE_INFINITY", "RAD_PER_DEG", "HALF_PI", "QUARTER_PI", "TWO_THIRDS_PI", "log10", "sign", "almostEquals", "epsilon", "abs", "niceNum", "range", "roundedRange", "round", "niceRange", "pow", "floor", "fraction", "_factorize", "result", "sqrt", "i", "sort", "pop", "isNumber", "n", "isNaN", "parseFloat", "isFinite", "almostWhole", "rounded", "_setMinAndMaxByKey", "array", "target", "property", "ilen", "length", "min", "max", "toRadians", "degrees", "toDegrees", "radians", "_decimalPlaces", "isFiniteNumber", "p", "getAngleFromPoint", "centrePoint", "anglePoint", "distanceFromXCenter", "distanceFromYCenter", "radialDistanceFromCenter", "angle", "atan2", "distance", "distanceBetweenPoints", "pt1", "pt2", "_angleDiff", "_normalizeAngle", "_angleBetween", "start", "end", "sameAngleIsFullCircle", "s", "angleToStart", "angleToEnd", "startToAngle", "endToAngle", "_limitValue", "_int16Range", "_isBetween", "_lookup", "table", "cmp", "index", "hi", "lo", "mid", "_lookupByKey", "last", "ti", "_rlookupByKey", "_filterBetween", "values", "arrayEvents", "listenArrayEvents", "listener", "_chartjs", "listeners", "Object", "defineProperty", "configurable", "enumerable", "forEach", "method", "base", "args", "res", "apply", "object", "unlistenArrayEvents", "stub", "indexOf", "splice", "_arrayUnique", "items", "set", "Set", "Array", "from", "requestAnimFrame", "window", "callback", "requestAnimationFrame", "throttled", "fn", "thisArg", "argsToUse", "ticking", "args", "call", "apply", "debounce", "delay", "timeout", "clearTimeout", "setTimeout", "_toLeftRightCenter", "align", "_alignStartEnd", "start", "end", "_textX", "left", "right", "rtl", "_getStartAndCountOfVisiblePoints", "meta", "points", "animationsDisabled", "pointCount", "length", "count", "_sorted", "iScale", "_parsed", "axis", "min", "max", "minDefined", "maxDefined", "getUserBounds", "_limitValue", "Math", "_lookupByKey", "lo", "getPixelForValue", "hi", "_scaleRangesChanged", "xScale", "yScale", "_scaleRanges", "newRanges", "xmin", "xmax", "ymin", "ymax", "changed", "Object", "assign", "atEdge", "t", "elasticIn", "s", "p", "pow", "sin", "TAU", "elasticOut", "effects", "linear", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInCubic", "easeOutCubic", "easeInOutCubic", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInSine", "cos", "HALF_PI", "easeOutSine", "easeInOutSine", "PI", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "sqrt", "easeOutCirc", "easeInOutCirc", "easeInElastic", "easeOutElastic", "easeInOutElastic", "easeInBack", "easeOutBack", "easeInOutBack", "easeInBounce", "easeOutBounce", "d", "m", "easeInOutBounce", "isPatternOrGradient", "value", "type", "toString", "color", "Color", "getHoverColor", "saturate", "darken", "hexString", "numbers", "colors", "applyAnimationsDefaults", "defaults", "set", "undefined", "duration", "easing", "from", "loop", "to", "describe", "_fallback", "_indexable", "_scriptable", "name", "properties", "active", "animation", "resize", "show", "animations", "visible", "hide", "v", "applyLayoutsDefaults", "autoPadding", "padding", "top", "bottom", "intlCache", "Map", "getNumberFormat", "locale", "options", "cacheKey", "JSON", "stringify", "formatter", "get", "Intl", "NumberFormat", "formatNumber", "num", "format", "formatters", "values", "isArray", "numeric", "tickValue", "index", "ticks", "chart", "notation", "delta", "maxTick", "abs", "calculateDelta", "logDelta", "log10", "numDecimal", "isNaN", "floor", "minimumFractionDigits", "maximumFractionDigits", "logarithmic", "remain", "significand", "includes", "Ticks", "applyScaleDefaults", "display", "offset", "reverse", "beginAtZero", "bounds", "clip", "grace", "grid", "lineWidth", "drawOnChartArea", "drawTicks", "tickLength", "tickWidth", "_ctx", "tickColor", "border", "dash", "dashOffset", "width", "title", "text", "minRotation", "maxRotation", "mirror", "textStrokeWidth", "textStrokeColor", "autoSkip", "autoSkipPadding", "labelOffset", "minor", "major", "crossAlign", "showLabelBackdrop", "backdropColor", "backdropPadding", "route", "startsWith", "overrides", "create", "descriptors", "getScope", "node", "key", "keys", "split", "i", "n", "k", "root", "scope", "merge", "Defaults", "constructor", "_descriptors", "_appliers", "backgroundColor", "borderColor", "datasets", "devicePixelRatio", "context", "platform", "getDevicePixelRatio", "elements", "events", "font", "family", "size", "style", "lineHeight", "weight", "hover", "hoverBackgroundColor", "ctx", "hoverBorderColor", "hoverColor", "indexAxis", "interaction", "mode", "intersect", "includeInvisible", "maintainAspectRatio", "onHover", "onClick", "parsing", "plugins", "responsive", "scale", "scales", "showLine", "drawActiveElementsOnTop", "override", "targetScope", "targetName", "scopeObject", "targetScopeObject", "privateName", "defineProperties", "writable", "enumerable", "local", "target", "isObject", "valueOrDefault", "appliers", "forEach", "toFontString", "isNullOrUndef", "_measureText", "data", "gc", "longest", "string", "textWidth", "measureText", "push", "_longestText", "arrayOfThings", "cache", "garbageCollect", "save", "ilen", "j", "jlen", "thing", "nestedThing", "restore", "gcLen", "splice", "_alignPixel", "pixel", "currentDevicePixelRatio", "halfWidth", "round", "clearCanvas", "canvas", "getContext", "resetTransform", "clearRect", "height", "drawPoint", "x", "y", "drawPointLegend", "w", "xOffset", "yOffset", "cornerRadius", "xOffsetW", "yOffsetW", "pointStyle", "rotation", "radius", "rad", "RAD_PER_DEG", "translate", "rotate", "drawImage", "beginPath", "ellipse", "arc", "closePath", "moveTo", "TWO_THIRDS_PI", "lineTo", "QUARTER_PI", "SQRT1_2", "rect", "fill", "borderWidth", "stroke", "_isPointInArea", "point", "area", "margin", "clipArea", "unclipArea", "_steppedLineTo", "previous", "flip", "midpoint", "_bezierCurveTo", "bezierCurveTo", "cp1x", "cp2x", "cp1y", "cp2y", "setRenderOpts", "opts", "translation", "fillStyle", "textAlign", "textBaseline", "decorateText", "line", "strikethrough", "underline", "metrics", "actualBoundingBoxLeft", "actualBoundingBoxRight", "actualBoundingBoxAscent", "actualBoundingBoxDescent", "yDecoration", "strokeStyle", "decorationWidth", "drawBackdrop", "oldColor", "fillRect", "renderText", "lines", "strokeWidth", "strokeColor", "backdrop", "strokeText", "maxWidth", "fillText", "Number", "addRoundedRectPath", "h", "topLeft", "bottomLeft", "bottomRight", "topRight", "LINE_HEIGHT", "FONT_STYLE", "toLineHeight", "matches", "match", "numberOrZero", "_readValueToProps", "props", "ret", "objProps", "read", "prop", "toTRBL", "toTRBLCorners", "toPadding", "obj", "toFont", "fallback", "parseInt", "console", "warn", "resolve", "inputs", "info", "cacheable", "_addGrace", "minmax", "change", "toDimension", "keepZero", "add", "createContext", "parentContext", "_createResolver", "scopes", "prefixes", "rootScopes", "getTarget", "finalRootScopes", "_resolve", "Symbol", "toStringTag", "_cacheable", "_scopes", "_rootScopes", "_getTarget", "Proxy", "deleteProperty", "_keys", "_cached", "_resolveWithPrefixes", "getOwnPropertyDescriptor", "Reflect", "getPrototypeOf", "has", "getKeysFromAllScopes", "ownKeys", "storage", "_storage", "_attachContext", "proxy", "subProxy", "descriptorDefaults", "_proxy", "_context", "_subProxy", "_stack", "Set", "setContext", "receiver", "_resolveWithContext", "allKeys", "configurable", "scriptable", "indexable", "_allKeys", "isScriptable", "isFunction", "isIndexable", "readKey", "prefix", "_capitalize", "needsSubResolver", "prototype", "hasOwnProperty", "_resolveScriptable", "_resolveArray", "getValue", "Error", "Array", "join", "delete", "createSubResolver", "arr", "filter", "item", "resolver", "resolveFallback", "parent", "resolveObjectKey", "addScopes", "parentScopes", "parentFallback", "allScopes", "addScopesFromKey", "subGetTarget", "resolveKeysFromAllScopes", "_parseObjectDataRadialScale", "_parsing", "parsed", "r", "parse", "EPSILON", "getPoint", "skip", "getValueAxis", "splineCurve", "firstPoint", "middlePoint", "afterPoint", "current", "next", "d01", "distanceBetweenPoints", "d12", "s01", "s12", "fa", "fb", "monotoneAdjust", "deltaK", "mK", "pointsLen", "alphaK", "betaK", "tauK", "squaredMagnitude", "pointCurrent", "pointAfter", "almostEquals", "monotoneCompute", "valueAxis", "pointBefore", "iPixel", "vPixel", "splineCurveMonotone", "slopeDelta", "sign", "capControlPoint", "pt", "capBezierPoints", "inArea", "inAreaPrev", "inAreaNext", "_updateBezierControlPoints", "controlPoints", "spanGaps", "cubicInterpolationMode", "prev", "tension", "_isDomSupported", "document", "_getParentNode", "domNode", "parentNode", "host", "parseMaxStyle", "styleValue", "parentProperty", "valueInPixels", "indexOf", "getComputedStyle", "element", "ownerDocument", "defaultView", "getStyle", "el", "property", "getPropertyValue", "positions", "getPositionedStyle", "styles", "suffix", "result", "pos", "parseFloat", "useOffsetPos", "shadowRoot", "getCanvasPosition", "e", "touches", "source", "offsetX", "offsetY", "box", "getBoundingClientRect", "clientX", "clientY", "getRelativePosition", "event", "borderBox", "boxSizing", "paddings", "borders", "getContainerSize", "maxHeight", "container", "clientWidth", "clientHeight", "containerStyle", "containerBorder", "containerPadding", "INFINITY", "round1", "getMaximumSize", "bbWidth", "bbHeight", "aspectRatio", "margins", "containerSize", "retinaScale", "forceRatio", "forceStyle", "pixelRatio", "deviceHeight", "deviceWidth", "setTransform", "supportsEventListenerOptions", "passiveSupported", "passive", "addEventListener", "removeEventListener", "readUsedSize", "_pointInLine", "p1", "p2", "_steppedInterpolation", "_bezierInterpolation", "cp1", "cp2", "a", "b", "c", "getRightToLeftAdapter", "rectX", "setWidth", "xPlus", "leftForLtr", "itemWidth", "getLeftToRightAdapter", "_itemWidth", "getRtlAdapter", "overrideTextDirection", "direction", "original", "getPropertyPriority", "setProperty", "prevTextDirection", "restoreTextDirection", "propertyFn", "between", "_angleBetween", "compare", "_angleDiff", "normalize", "_normalizeAngle", "_isBetween", "normalizeSegment", "getSegment", "segment", "startBound", "endBound", "_boundSegment", "inside", "subStart", "prevValue", "startIsBefore", "endIsBefore", "shouldStart", "shouldStop", "_boundSegments", "segments", "sub", "findStartAndEnd", "solidSegments", "last", "cur", "stop", "_computeSegments", "segmentOptions", "_loop", "splitByStyles", "completeLoop", "_fullLoop", "doSplitByStyles", "chartContext", "_chart", "baseStyle", "readStyle", "_datasetIndex", "datasetIndex", "prevStyle", "addStyle", "l", "st", "dir", "p0", "p0DataIndex", "p1DataIndex", "styleChanged", "borderCapStyle", "borderDash", "borderDashOffset", "borderJoinStyle", "replacer", "Animator", "constructor", "_request", "_charts", "Map", "_running", "_lastDate", "undefined", "_notify", "chart", "anims", "date", "type", "callbacks", "listeners", "numSteps", "duration", "forEach", "fn", "initial", "currentStep", "Math", "min", "start", "_refresh", "requestAnimFrame", "call", "window", "_update", "Date", "now", "remaining", "running", "items", "length", "i", "draw", "item", "_active", "_total", "tick", "pop", "_getAnims", "charts", "get", "complete", "progress", "set", "listen", "event", "cb", "push", "add", "has", "reduce", "acc", "cur", "max", "_duration", "stop", "cancel", "remove", "delete", "animator", "transparent", "interpolators", "boolean", "from", "to", "factor", "color", "c0", "helpersColor", "c1", "valid", "mix", "hexString", "number", "Animation", "cfg", "target", "prop", "currentValue", "resolve", "_fn", "_easing", "effects", "easing", "linear", "_start", "floor", "delay", "_loop", "loop", "_target", "_prop", "_from", "_to", "_promises", "active", "update", "elapsed", "remain", "wait", "promises", "Promise", "res", "rej", "resolved", "method", "Animations", "config", "_chart", "_properties", "configure", "isObject", "animationOptions", "Object", "keys", "defaults", "animation", "animatedProps", "getOwnPropertyNames", "key", "option", "isArray", "properties", "_animateOptions", "values", "newOptions", "options", "resolveTargetOptions", "animations", "_createAnimations", "$shared", "awaitAll", "$animations", "then", "props", "charAt", "value", "size", "assign", "anim", "all", "scaleClip", "scale", "allowedOverflow", "opts", "reverse", "end", "defaultClip", "xScale", "yScale", "x", "y", "top", "right", "bottom", "left", "toClip", "t", "r", "b", "l", "disabled", "getSortedDatasetIndices", "filterVisible", "metasets", "_getSortedDatasetMetas", "ilen", "index", "applyStack", "stack", "dsIndex", "singleMode", "mode", "datasetIndex", "otherValue", "isFinite", "sign", "convertObjectDataToArray", "data", "adata", "Array", "isStacked", "meta", "stacked", "getStackKey", "indexScale", "valueScale", "id", "getUserBounds", "minDefined", "maxDefined", "Number", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "getOrCreateStack", "stacks", "stackKey", "indexValue", "subStack", "getLastIndexInStack", "vScale", "positive", "getMatchingVisibleMetas", "updateStacks", "controller", "parsed", "_cachedMeta", "_stacks", "iScale", "iAxis", "axis", "vAxis", "itemStacks", "_top", "_bottom", "visualValues", "_visualValues", "getFirstScaleId", "scales", "filter", "shift", "createDatasetContext", "parent", "createContext", "dataset", "createDataContext", "element", "dataIndex", "raw", "clearStacks", "_parsed", "isDirectUpdateMode", "cloneIfNotShared", "cached", "shared", "createStack", "canStack", "hidden", "_stacked", "DatasetController", "datasetElementType", "dataElementType", "_ctx", "ctx", "_cachedDataOpts", "getMeta", "_type", "_parsing", "_data", "_objectData", "_sharedOptions", "_drawStart", "_drawCount", "enableOptionSharing", "supportsDecimation", "$context", "_syncList", "initialize", "linkScales", "addElements", "fill", "isPluginEnabled", "console", "warn", "updateIndex", "getDataset", "chooseId", "xid", "xAxisID", "valueOrDefault", "yid", "yAxisID", "rid", "rAxisID", "indexAxis", "iid", "iAxisID", "vid", "vAxisID", "getScaleForId", "rScale", "datasets", "getDatasetMeta", "scaleID", "_getOtherScale", "reset", "_destroy", "unlistenArrayEvents", "_dataCheck", "isExtensible", "listenArrayEvents", "buildOrUpdateElements", "resetNewElements", "stackChanged", "oldStacked", "_resyncElements", "scopeKeys", "datasetScopeKeys", "scopes", "getOptionScopes", "createResolver", "getContext", "parsing", "parse", "count", "sorted", "_sorted", "prev", "parseArrayData", "parseObjectData", "parsePrimitiveData", "isNotInOrderComparedToPrev", "labels", "getLabels", "singleScale", "xAxisKey", "yAxisKey", "resolveObjectKey", "getParsed", "getDataElement", "updateRangeFromParsed", "range", "parsedValue", "NaN", "getMinMax", "otherScale", "otherMin", "otherMax", "_skip", "getAllParsedValues", "getMaxOverflow", "getLabelAndValue", "label", "getLabelForValue", "_clip", "clip", "elements", "area", "chartArea", "drawActiveElementsOnTop", "getStyle", "resolveDatasetElementOptions", "resolveDataElementOptions", "context", "_resolveElementOptions", "elementType", "cache", "cacheKey", "sharing", "defined", "datasetElementScopeKeys", "prefixes", "names", "resolveNamedOptions", "freeze", "_resolveAnimations", "transition", "datasetAnimationScopeKeys", "_cacheable", "getSharedOptions", "includeOptions", "sharedOptions", "_animationsDisabled", "_getSharedOptions", "firstOpts", "previouslySharedOptions", "updateSharedOptions", "updateElement", "_setStyle", "removeHoverStyle", "setHoverStyle", "_removeDatasetHoverStyle", "_setDatasetHoverStyle", "arg1", "arg2", "numMeta", "numData", "_insertElements", "_removeElements", "move", "arr", "updateElements", "removed", "splice", "_sync", "args", "_dataChanges", "_onDataPush", "arguments", "_onDataPop", "_onDataShift", "_onDataSplice", "newCount", "_onDataUnshift", "getAllScaleValues", "_cache", "$bar", "visibleMetas", "concat", "_arrayUnique", "sort", "a", "computeMinSampleSize", "_length", "curr", "updateMinAndPrev", "abs", "getPixelForValue", "ticks", "getPixelForTick", "computeFitCategoryTraits", "ruler", "stackCount", "thickness", "barThickness", "ratio", "isNullOrUndef", "categoryPercentage", "barPercentage", "chunk", "pixels", "computeFlexCategoryTraits", "next", "percent", "parseFloatBar", "entry", "startValue", "endValue", "barStart", "barEnd", "_custom", "parseValue", "parseArrayOrPrimitive", "isFloatBar", "custom", "barSign", "actualBase", "isHorizontal", "borderProps", "horizontal", "base", "setBorderSkipped", "edge", "borderSkipped", "enableBorderRadius", "parseEdge", "swap", "startEnd", "orig", "v1", "v2", "v", "setInflateAmount", "inflateAmount", "BarController", "grouped", "numbers", "overrides", "_index_", "offset", "grid", "_value_", "beginAtZero", "iAxisKey", "vAxisKey", "obj", "bars", "getBasePixel", "_getRuler", "vpixels", "head", "_calculateBarValuePixels", "ipixels", "_calculateBarIndexPixels", "center", "height", "width", "_getStacks", "last", "skipNull", "val", "isNaN", "indexOf", "_getStackCount", "_getStackIndex", "name", "_startPixel", "_endPixel", "baseValue", "minBarLength", "floating", "getDataVisibility", "startPixel", "getPixelForDecimal", "endPixel", "getValueForPixel", "halfGrid", "getLineWidthForValue", "maxBarThickness", "Infinity", "stackIndex", "rects", "BubbleController", "radius", "points", "point", "iPixel", "vPixel", "skip", "getRatioAndOffset", "rotation", "circumference", "cutout", "ratioX", "ratioY", "offsetX", "offsetY", "TAU", "startAngle", "endAngle", "startX", "cos", "startY", "sin", "endX", "endY", "calcMax", "angle", "_angleBetween", "calcMin", "maxX", "maxY", "HALF_PI", "minX", "PI", "minY", "DoughnutController", "animateRotate", "animateScale", "spacing", "descriptors", "_scriptable", "_indexable", "startsWith", "aspectRatio", "plugins", "legend", "generateLabels", "pointStyle", "map", "style", "text", "fillStyle", "backgroundColor", "strokeStyle", "borderColor", "fontColor", "lineWidth", "borderWidth", "onClick", "e", "legendItem", "toggleDataVisibility", "innerRadius", "outerRadius", "getter", "_getRotation", "toRadians", "_getCircumference", "_getRotationExtents", "isDatasetVisible", "arcs", "getMaxBorderWidth", "getMaxOffset", "maxSize", "toPercentage", "chartWeight", "_getRingWeight", "maxWidth", "maxHeight", "maxRadius", "toDimension", "radiusLength", "_getVisibleDatasetWeightTotal", "total", "calculateTotal", "_getRingWeightOffset", "_circumference", "calculateCircumference", "animationOpts", "centerX", "centerY", "arc", "metaData", "formatNumber", "locale", "borderAlign", "hoverBorderWidth", "hoverOffset", "ringWeightOffset", "weight", "LineController", "showLine", "spanGaps", "line", "_dataset", "animationsDisabled", "_getStartAndCountOfVisiblePoints", "_scaleRangesChanged", "_datasetIndex", "_decimated", "segment", "animated", "maxGapLength", "isNumber", "directUpdate", "pointsCount", "prevParsed", "nullData", "border", "firstPoint", "lastPoint", "updateControlPoints", "PolarAreaController", "angleLines", "display", "circular", "pointLabels", "_parseObjectDataRadialScale", "bind", "_updateRadius", "minSize", "cutoutPercentage", "getVisibleDatasetCount", "xCenter", "yCenter", "datasetStartAngle", "getIndexAngle", "defaultAngle", "countVisibleElements", "_computeAngle", "getDistanceFromCenterForValue", "PieController", "RadarController", "_fullLoop", "pointPosition", "getPointPositionForValue", "ScatterController", "interaction", "registry", "getElement", "abstract", "Error", "DateAdapterBase", "override", "members", "prototype", "init", "formats", "format", "diff", "startOf", "endOf", "adapters", "_date", "binarySearch", "metaset", "intersect", "lookupMethod", "_reversePixels", "_rlookupByKey", "_lookupByKey", "el", "getRange", "lo", "hi", "evaluateInteractionItems", "position", "handler", "getSortedVisibleDatasetMetas", "j", "getDistanceMetricForAxis", "useX", "useY", "pt1", "pt2", "deltaX", "deltaY", "sqrt", "pow", "getIntersectItems", "useFinalPosition", "includeInvisible", "isPointInArea", "_isPointInArea", "inRange", "getNearestRadialItems", "evaluationFunc", "getProps", "getAngleFromPoint", "getNearestCartesianItems", "distanceMetric", "minDistance", "getCenterPoint", "distance", "getNearestItems", "getAxisItems", "rangeMethod", "intersectsItem", "Interaction", "modes", "getRelativePosition", "nearest", "STATIC_POSITIONS", "filterByPosition", "array", "pos", "filterDynamicPositionByAxis", "box", "sortByWeight", "v0", "wrapBoxes", "boxes", "layoutBoxes", "stackWeight", "buildStacks", "layouts", "wrap", "includes", "_stack", "placed", "setLayoutDims", "params", "vBoxMaxWidth", "hBoxMaxHeight", "layout", "fullSize", "availableWidth", "availableHeight", "buildLayoutBoxes", "centerHorizontal", "centerVertical", "leftAndTop", "rightAndBottom", "vertical", "getCombinedMax", "maxPadding", "updateMaxPadding", "boxPadding", "updateDims", "getPadding", "newWidth", "outerWidth", "newHeight", "outerHeight", "widthChanged", "w", "heightChanged", "h", "same", "other", "handleMaxPadding", "updatePos", "change", "getMargins", "marginForPositions", "positions", "margin", "fitBoxes", "refitBoxes", "refit", "changed", "setBoxDims", "placeBoxes", "userPadding", "padding", "addBox", "_layers", "z", "removeBox", "layoutItem", "minPadding", "toPadding", "verticalBoxes", "horizontalBoxes", "each", "beforeLayout", "visibleVerticalBoxCount", "BasePlatform", "acquireContext", "canvas", "releaseContext", "addEventListener", "listener", "removeEventListener", "getDevicePixelRatio", "getMaximumSize", "isAttached", "updateConfig", "BasicPlatform", "EXPANDO_KEY", "EVENT_TYPES", "touchstart", "touchmove", "touchend", "pointerenter", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointerout", "isNullOrEmpty", "initCanvas", "renderHeight", "getAttribute", "renderWidth", "boxSizing", "displayWidth", "readUsedSize", "displayHeight", "eventListenerOptions", "supportsEventListenerOptions", "passive", "addListener", "node", "removeListener", "fromNativeEvent", "native", "nodeListContains", "nodeList", "contains", "createAttachObserver", "observer", "MutationObserver", "entries", "trigger", "addedNodes", "removedNodes", "observe", "document", "childList", "subtree", "createDetachObserver", "drpListeningCharts", "oldDevicePixelRatio", "onWindowResize", "dpr", "devicePixelRatio", "resize", "currentDevicePixelRatio", "listenDevicePixelRatioChanges", "unlistenDevicePixelRatioChanges", "createResizeObserver", "container", "_getParentNode", "throttled", "clientWidth", "ResizeObserver", "contentRect", "releaseObserver", "disconnect", "createProxyAndListen", "proxy", "DomPlatform", "removeAttribute", "setAttribute", "proxies", "$proxies", "attach", "detach", "isConnected", "_detectPlatform", "_isDomSupported", "OffscreenCanvas", "Element", "defaultRoutes", "tooltipPosition", "hasValue", "final", "ret", "autoSkip", "tickOpts", "determinedMaxTicks", "determineMaxTicks", "ticksLimit", "maxTicksLimit", "majorIndices", "major", "enabled", "getMajorIndices", "numMajorIndices", "first", "newTicks", "skipMajors", "calculateSpacing", "avgMajorSpacing", "round", "tickLength", "_tickSize", "maxScale", "maxChart", "_maxLength", "evenMajorSpacing", "getEvenSpacing", "factors", "_factorize", "result", "ceil", "majorStart", "majorEnd", "len", "reverseAlign", "align", "offsetFromEdge", "getTicksLimit", "ticksLength", "sample", "numItems", "increment", "getPixelForGridLine", "offsetGridLines", "validIndex", "epsilon", "lineValue", "garbageCollect", "caches", "gc", "gcLen", "getTickMarkLength", "drawTicks", "getTitleHeight", "fallback", "font", "toFont", "lineHeight", "createScaleContext", "createTickContext", "titleAlign", "_toLeftRightCenter", "titleArgs", "titleX", "titleY", "_alignStartEnd", "positionAxisID", "Scale", "_margins", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight", "labelRotation", "_range", "_gridLineItems", "_labelItems", "_labelSizes", "_longestTextCache", "_userMax", "_userMin", "_suggestedMax", "_suggestedMin", "_ticksLength", "_borderValue", "_dataLimitsCached", "setContext", "suggestedMin", "suggestedMax", "finiteOrDefault", "metas", "getTicks", "xLabels", "yLabels", "getLabelItems", "_computeLabelItems", "beforeUpdate", "margins", "grace", "sampleSize", "beforeSetDimensions", "setDimensions", "afterSetDimensions", "beforeDataLimits", "determineDataLimits", "afterDataLimits", "_addGrace", "beforeBuildTicks", "buildTicks", "afterBuildTicks", "samplingEnabled", "_convertTicksToLabels", "beforeCalculateLabelRotation", "calculateLabelRotation", "afterCalculateLabelRotation", "source", "afterAutoSkip", "beforeFit", "fit", "afterFit", "afterUpdate", "reversePixels", "_alignToPixels", "alignToPixels", "_callHooks", "notifyPlugins", "beforeTickToLabelConversion", "generateTickLabels", "callback", "afterTickToLabelConversion", "numTicks", "minRotation", "maxRotation", "tickWidth", "maxLabelDiagonal", "_isVisible", "labelSizes", "_getLabelSizes", "maxLabelWidth", "widest", "maxLabelHeight", "highest", "_limitValue", "title", "toDegrees", "asin", "titleOpts", "gridOpts", "titleHeight", "tickPadding", "angleRadians", "labelHeight", "mirror", "labelWidth", "_calculatePadding", "_handleMargins", "isRotated", "labelsBelowTicks", "offsetLeft", "offsetRight", "isFullSize", "_computeLabelSizes", "widths", "heights", "widestLabelSize", "highestLabelSize", "jlen", "tickFont", "fontString", "nestedLabel", "_resolveTickFontOptions", "string", "_measureText", "valueAt", "idx", "pixel", "decimal", "_int16Range", "_alignPixel", "getDecimalForPixel", "getBaseValue", "optionTicks", "rot", "autoSkipPadding", "_computeGridLineItems", "tl", "borderOpts", "axisWidth", "axisHalfWidth", "alignBorderValue", "borderValue", "alignedLineValue", "tx1", "ty1", "tx2", "ty2", "x1", "y1", "x2", "y2", "limit", "step", "optsAtIndex", "optsAtIndexBorder", "lineColor", "borderDash", "dash", "borderDashOffset", "dashOffset", "tickColor", "tickBorderDash", "tickBorderDashOffset", "crossAlign", "tickAndPadding", "hTickAndPadding", "textAlign", "lineCount", "textOffset", "textBaseline", "_getXAxisLabelAlignment", "_getYAxisLabelAlignment", "labelOffset", "halfCount", "strokeColor", "textStrokeColor", "strokeWidth", "textStrokeWidth", "tickTextAlign", "showLabelBackdrop", "backdrop", "labelPadding", "backdropPadding", "backdropColor", "translation", "_computeLabelArea", "drawBackground", "save", "fillRect", "restore", "findIndex", "drawGrid", "drawLine", "p1", "p2", "setLineDash", "lineDashOffset", "beginPath", "moveTo", "lineTo", "stroke", "drawOnChartArea", "drawBorder", "lastLineWidth", "drawLabels", "clipArea", "renderTextOptions", "renderText", "unclipArea", "drawTitle", "tz", "gz", "bz", "axisID", "_maxDigits", "fontSize", "TypedRegistry", "scope", "create", "isForType", "isPrototypeOf", "register", "proto", "getPrototypeOf", "parentScope", "isIChartComponent", "registerDefaults", "unregister", "itemDefaults", "merge", "routeDefaults", "describe", "routes", "property", "propertyParts", "split", "sourceName", "sourceScope", "join", "parts", "targetName", "targetScope", "route", "Registry", "controllers", "_typedRegistries", "_each", "addControllers", "addPlugins", "addScales", "getController", "_get", "getPlugin", "getScale", "removeControllers", "removeElements", "removePlugins", "removeScales", "typedRegistry", "arg", "reg", "_getRegistryForType", "_exec", "itemReg", "component", "camelMethod", "_capitalize", "PluginService", "_init", "notify", "hook", "_createDescriptors", "_descriptors", "descriptor", "plugin", "callCallback", "cancelable", "invalidate", "_oldCache", "_notifyStateChanges", "allPlugins", "createDescriptors", "previousDescriptors", "some", "localIds", "local", "getOpts", "pluginOpts", "pluginScopeKeys", "scriptable", "indexable", "allKeys", "getIndexAxis", "datasetDefaults", "getAxisFromDefaultScaleID", "getDefaultScaleIDFromAxis", "idMatchesAxis", "axisFromPosition", "determineAxis", "scaleOptions", "toLowerCase", "getAxisFromDataset", "retrieveAxisFromDatasets", "boundDs", "d", "mergeScaleConfig", "chartDefaults", "configScales", "chartIndexAxis", "scaleConf", "error", "_proxy", "defaultId", "defaultScaleOptions", "mergeIf", "defaultID", "initOptions", "initData", "initConfig", "keyCache", "keysCached", "Set", "cachedKeys", "generate", "addIfFound", "Config", "_config", "_scopeCache", "_resolverCache", "platform", "clearCache", "clear", "datasetType", "additionalOptionScopes", "_cachedScopes", "mainScope", "resetCache", "keyLists", "chartOptionScopes", "resolver", "subPrefixes", "getResolver", "needContext", "isFunction", "subResolver", "_attachContext", "descriptorDefaults", "resolverCache", "_createResolver", "p", "hasFunction", "isScriptable", "isIndexable", "KNOWN_POSITIONS", "positionIsHorizontal", "compare2Level", "l1", "l2", "onAnimationsComplete", "onComplete", "onAnimationProgress", "onProgress", "getCanvas", "getElementById", "instances", "getChart", "c", "moveNumericKeys", "intKey", "determineLastEvent", "lastEvent", "inChartArea", "isClick", "getSizeForArea", "field", "getDatasetArea", "Chart", "version", "invalidatePlugins", "userConfig", "initialCanvas", "existingChart", "uid", "_options", "_aspectRatio", "_metasets", "_lastEvent", "_listeners", "_responsiveListeners", "_sortedMetasets", "_plugins", "_hiddenIndices", "attached", "_doResize", "debounce", "resizeDelay", "_initialize", "maintainAspectRatio", "responsive", "retinaScale", "bindEvents", "clearCanvas", "_resizeBeforeDraw", "_resize", "newSize", "newRatio", "onResize", "render", "ensureScalesHaveIDs", "scalesOptions", "axisOptions", "buildOrUpdateScales", "scaleOpts", "updated", "isRadial", "dposition", "dtype", "scaleType", "scaleClass", "hasUpdated", "_updateMetasets", "_destroyDatasetMeta", "slice", "_removeUnreferencedMetasets", "buildOrUpdateControllers", "newControllers", "order", "visible", "ControllerClass", "_resetElements", "animsDisabled", "_updateScales", "_checkEventBindings", "_updateHiddenIndices", "_minPadding", "autoPadding", "_updateLayout", "_updateDatasets", "_eventHandler", "_updateHoverStyles", "existingEvents", "newEvents", "events", "setsEqual", "unbindEvents", "changes", "_getUniformDataChanges", "datasetCount", "makeSet", "changeSet", "noArea", "_idx", "_updateDataset", "layers", "_drawDatasets", "_drawDataset", "useClip", "getElementsAtEventForMode", "setDatasetVisibility", "_updateVisibility", "hide", "show", "_stop", "destroy", "toBase64Image", "toDataURL", "bindUserEvents", "bindResponsiveEvents", "_add", "_remove", "detached", "updateHoverStyle", "prefix", "getActiveElements", "setActiveElements", "activeElements", "lastActive", "_elementsEqual", "pluginId", "replay", "hoverOptions", "hover", "deactivated", "activated", "eventFilter", "_handleEvent", "_getActiveElements", "_isClickEvent", "onHover", "clipArc", "pixelMargin", "angleMargin", "closePath", "toRadiusCorners", "_readValueToProps", "parseBorderRadius", "angleDelta", "o", "borderRadius", "halfThickness", "innerLimit", "computeOuterLimit", "outerArcLimit", "outerStart", "outerEnd", "innerStart", "innerEnd", "rThetaToXY", "theta", "pathArc", "innerR", "spacingOffset", "alpha", "noSpacingInnerRadius", "noSpacingOuterRadius", "avNogSpacingRadius", "adjustedAngle", "beta", "angleOffset", "outerStartAdjustedRadius", "outerEndAdjustedRadius", "outerStartAdjustedAngle", "outerEndAdjustedAngle", "innerStartAdjustedRadius", "innerEndAdjustedRadius", "innerStartAdjustedAngle", "innerEndAdjustedAngle", "outerMidAdjustedAngle", "pCenter", "p4", "innerMidAdjustedAngle", "p8", "outerStartX", "outerStartY", "outerEndX", "outerEndY", "drawArc", "fullCircles", "borderJoinStyle", "inner", "lineJoin", "ArcElement", "chartX", "chartY", "rAdjust", "betweenAngles", "withinRadius", "_isBetween", "halfAngle", "halfRadius", "translate", "fix", "radiusOffset", "setStyle", "lineCap", "borderCapStyle", "previous", "getLineMethod", "stepped", "_steppedLineTo", "tension", "cubicInterpolationMode", "_bezierCurveTo", "pathVars", "paramsStart", "paramsEnd", "segmentStart", "segmentEnd", "outside", "pathSegment", "lineMethod", "fastPathSegment", "avgX", "countX", "prevX", "lastY", "pointIndex", "drawX", "truncX", "_getSegmentMethod", "_getInterpolationMethod", "_steppedInterpolation", "_bezierInterpolation", "_pointInLine", "strokePathWithCache", "path", "_path", "Path2D", "strokePathDirect", "segments", "segmentMethod", "usePath2D", "LineElement", "capBezierPoints", "_points", "_segments", "_pointsUpdated", "_updateBezierControlPoints", "_computeSegments", "interpolate", "_boundSegments", "_interpolate", "interpolated", "hitRadius", "PointElement", "hoverRadius", "mouseX", "mouseY", "inXRange", "inYRange", "drawPoint", "getBarBounds", "bar", "half", "skipOrLimit", "parseBorderWidth", "maxW", "maxH", "toTRBL", "toTRBLCorners", "maxR", "enableBorder", "topLeft", "topRight", "bottomLeft", "bottomRight", "boundingRects", "bounds", "outer", "skipX", "skipY", "hasRadius", "addNormalRectPath", "rect", "inflateRect", "amount", "refRect", "BarElement", "addRectPath", "addRoundedRectPath", "BORDER_COLORS", "BACKGROUND_COLORS", "replace", "getBorderColor", "getBackgroundColor", "colorizeDefaultDataset", "colorizeDoughnutDataset", "colorizePolarAreaDataset", "getColorizer", "containsColorsDefinitions", "k", "containsColorsDefinition", "plugin_colors", "forceOverride", "_args", "chartOptions", "colorizer", "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", "defineProperty", "configurable", "enumerable", "writable", "cleanDecimatedData", "getStartAndCountOfVisiblePointsSimplified", "pointCount", "plugin_decimation", "algorithm", "beforeElementsUpdate", "xAxis", "threshold", "tpoints", "_findSegmentEnd", "_getBounds", "targetSegments", "tgt", "subBounds", "fillSources", "_boundSegment", "fillSource", "_getEdge", "_normalizeAngle", "_pointsFromSegments", "boundary", "linePoints", "_createBoundaryLine", "_shouldApplyFill", "_resolveTarget", "sources", "propagate", "visited", "_decodeFill", "parseFillOption", "parseFloat", "decodeTargetIndex", "firstCh", "_getTargetPixel", "_getTargetValue", "fillOption", "_buildStackLine", "sourcePoints", "linesBelow", "getLinesBelow", "addPointsBelow", "below", "unshift", "sourcePoint", "postponed", "findPoint", "pointValue", "firstValue", "lastValue", "simpleArc", "_getTarget", "getLineByIndex", "computeBoundary", "computeCircularBoundary", "computeLinearBoundary", "_drawfill", "lineOpts", "above", "doFill", "clipVertical", "clipY", "lineLoop", "src", "notShape", "clipBounds", "interpolatedLineTo", "targetLoop", "interpolatedPoint", "afterDatasetsUpdate", "$filler", "beforeDraw", "drawTime", "beforeDatasetsDraw", "beforeDatasetDraw", "getBoxSize", "labelOpts", "boxHeight", "boxWidth", "usePointStyle", "pointStyleWidth", "itemHeight", "itemsEqual", "Legend", "_added", "legendHitBoxes", "_hoveredItem", "doughnutMode", "legendItems", "columnSizes", "lineWidths", "buildLabels", "labelFont", "_computeTitleHeight", "_fitRows", "_fitCols", "hitboxes", "totalHeight", "row", "itemWidth", "measureText", "_itemHeight", "heightLimit", "totalWidth", "currentColWidth", "currentColHeight", "col", "calculateItemSize", "adjustHitBoxes", "rtl", "rtlHelper", "getRtlAdapter", "hitbox", "leftForLtr", "_draw", "defaultColor", "halfFontSize", "cursor", "drawLegendBox", "lineDash", "drawOptions", "SQRT2", "xPlus", "drawPointLegend", "yBoxTop", "xBoxLeft", "fillText", "strikethrough", "overrideTextDirection", "textDirection", "textWidth", "setWidth", "realX", "_textX", "fontLineHeight", "calculateLegendItemHeight", "restoreTextDirection", "titleFont", "titlePadding", "topPaddingPlusHalfFontSize", "_getLegendItemAt", "hitBox", "lh", "handleEvent", "isListened", "hoveredItem", "sameItem", "onLeave", "calculateItemWidth", "calculateItemHeight", "legendItemText", "plugin_legend", "_element", "afterEvent", "ci", "useBorderRadius", "Title", "_padding", "textSize", "_drawArgs", "fontOpts", "createTitle", "titleBlock", "plugin_title", "WeakMap", "plugin_subtitle", "positioners", "average", "xSet", "eventPosition", "nearestElement", "distanceBetweenPoints", "tp", "pushOrConcat", "toPush", "apply", "splitNewlines", "str", "String", "createTooltipItem", "formattedValue", "getTooltipSize", "tooltip", "body", "footer", "bodyFont", "footerFont", "titleLineCount", "footerLineCount", "bodyLineItemCount", "combinedBodyLength", "bodyItem", "before", "lines", "after", "beforeBody", "afterBody", "titleSpacing", "titleMarginBottom", "bodyLineHeight", "displayColors", "bodySpacing", "footerMarginTop", "footerSpacing", "widthPadding", "maxLineWidth", "determineYAlign", "doesNotFitWithAlign", "xAlign", "caret", "caretSize", "caretPadding", "determineXAlign", "yAlign", "chartWidth", "determineAlignment", "alignX", "alignY", "paddingAndSize", "getBackgroundPoint", "alignment", "cornerRadius", "getAlignedX", "getBeforeAfterBodyLines", "createTooltipContext", "tooltipItems", "overrideCallbacks", "defaultCallbacks", "beforeTitle", "noop", "labelCount", "afterTitle", "beforeLabel", "tooltipItem", "labelColor", "labelTextColor", "bodyColor", "labelPointStyle", "afterLabel", "beforeFooter", "afterFooter", "invokeCallbackWithFallback", "Tooltip", "opacity", "_eventPosition", "_size", "_cachedAnimations", "_tooltipItems", "dataPoints", "caretX", "caretY", "labelColors", "labelPointStyles", "labelTextColors", "getTitle", "getBeforeBody", "getBody", "bodyItems", "scoped", "getAfterBody", "getFooter", "_createItems", "itemSort", "positionAndSize", "backgroundPoint", "external", "drawCaret", "tooltipPoint", "caretPosition", "getCaretPosition", "x3", "y3", "ptX", "ptY", "pt", "titleColor", "_drawColorBox", "colorX", "rtlColorX", "yOffSet", "colorY", "multiKeyBackground", "outerX", "innerX", "strokeRect", "drawBody", "bodyAlign", "xLinePadding", "fillLineOfText", "bodyAlignForCalculation", "textColor", "drawFooter", "footerAlign", "footerColor", "tooltipSize", "quadraticCurveTo", "_updateAnimationTarget", "animX", "animY", "_willRender", "hasTooltipContent", "globalAlpha", "positionChanged", "_positionChanged", "_ignoreReplayEvents", "plugin_tooltip", "afterInit", "afterDraw", "_fallback", "addIfString", "addedLabels", "findOrAddLabel", "lastIndexOf", "_getLabelForValue", "CategoryScale", "_startValue", "_valueRange", "_addedLabels", "added", "generateTicks", "generationOptions", "dataRange", "precision", "maxTicks", "maxDigits", "includeBounds", "unit", "maxSpaces", "rmin", "rmax", "countDefined", "minSpacing", "niceNum", "niceMin", "niceMax", "numSpaces", "MIN_SPACING", "almostWhole", "almostEquals", "decimalPlaces", "_decimalPlaces", "relativeLabelSize", "tickValue", "rad", "LinearScaleBase", "_endValue", "handleTickRangeOptions", "setMin", "setMax", "minSign", "maxSign", "getTickLimit", "stepSize", "computeTickLimit", "numericGeneratorOptions", "_setMinAndMaxByKey", "LinearScale", "Ticks", "formatters", "numeric", "log10Floor", "log10", "changeExponent", "m", "isMajor", "tickVal", "steps", "rangeExp", "rangeStep", "startExp", "minExp", "exp", "significand", "lastTick", "LogarithmicScale", "logarithmic", "_zero", "getTickBackdropHeight", "measureLabelSize", "_longestText", "determineLimits", "fitWithPointLabels", "limits", "valueCount", "_pointLabels", "pointLabelOpts", "additionalAngle", "centerPointLabels", "getPointLabelContext", "getPointPosition", "drawingArea", "plFont", "hLimits", "vLimits", "updateLimits", "setCenterPoint", "_pointLabelItems", "buildPointLabelItems", "createPointLabelItem", "itemOpts", "outerDistance", "extra", "pointLabelPosition", "yForAngle", "getTextAlignForAngle", "leftForTextAlign", "isNotOverlapped", "drawPointLabelBox", "backdropLeft", "backdropTop", "backdropWidth", "backdropHeight", "drawPointLabels", "pathRadiusLine", "drawRadiusLine", "gridLineOpts", "createPointLabelContext", "RadialLinearScale", "animate", "leftMovement", "rightMovement", "topMovement", "bottomMovement", "angleMultiplier", "scalingFactor", "getValueForDistanceFromCenter", "scaledDistance", "pointLabel", "distanceFromCenter", "getBasePosition", "getPointLabelPosition", "rotate", "INTERVALS", "millisecond", "common", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "UNITS", "sorter", "input", "adapter", "_adapter", "parser", "isoWeekday", "_parseOpts", "determineUnitForAutoTicks", "minUnit", "capacity", "interval", "MAX_SAFE_INTEGER", "determineUnitForFormatting", "determineMajorUnit", "addTick", "time", "timestamps", "_lookup", "timestamp", "setMajorTicks", "majorUnit", "ticksFromTimestamps", "TimeScale", "displayFormats", "_unit", "_majorUnit", "_offsets", "_normalized", "normalized", "_applyBounds", "_getLabelBounds", "getLabelTimestamps", "timeOpts", "_generate", "_filterBetween", "_getLabelCapacity", "initOffsets", "offsetAfterAutoskip", "getDecimalForValue", "minor", "weekday", "hasWeekday", "getDataTimestamps", "tooltipFormat", "datetime", "fmt", "_tickFormatFunction", "formatter", "minorFormat", "majorFormat", "offsets", "_getLabelSize", "ticksOpts", "tickLabelWidth", "cosRotation", "sinRotation", "tickFontSize", "exampleTime", "exampleLabel", "normalize", "table", "prevSource", "nextSource", "prevTarget", "nextTarget", "span", "TimeSeriesScale", "_table", "_minPos", "_tableRange", "_getTimestampsForTable", "buildLookupTable", "registerables", "GRID_COLOR", "Chart", "registerables", "props", "canvas", "FieldGroup", "Field", "label", "value", "Tile", "size", "SHORT_DATE_TIME", "LONG_DATE_TIME", "import_USER_FLAGS", "import_parser", "import_regex", "import_dayjs", "DISCORD_EPOCH", "MENTION_REGEX", "GLOBAL_CUSTOM_EMOJI_REGEX", "CUSTOM_EMOJI_REGEX", "TWEMOJI_REGEX", "regexPkg", "hasFlag", "flags", "bit", "extractUserFlags", "flag", "getAttachmentCount", "attachments", "getMentionCount", "text", "getCustomEmojis", "getDefaultEmojis", "getMessageUrl", "guildId", "channelId", "messageId", "getSnowflakeTimestamp", "snowflake", "unix", "dayjs", "getEmojiUrl", "emoji", "customEmoji", "defaultEmoji", "formatDiscriminator", "discriminator", "extractAccount", "root", "accountDir", "user", "file", "avatarUrl", "name", "created", "getSnowflakeTimestamp", "moneySpent", "formatCurrency", "total", "amount", "amount_refunded", "topGames", "a", "b", "game", "res", "Tile", "FieldGroup", "Field", "SHORT_DATE_TIME", "formatNum", "extractUserFlags", "flag", "description", "type", "Chart", "accentColor", "label", "dayjs", "import_dayjs", "readline", "reader", "decoder", "buffer", "value", "done", "line", "result", "Counter", "key", "n", "value", "a", "b", "fn", "ChannelTypes", "extractActivity", "root", "channelNames", "analyticsDir", "createdAt", "file", "user", "getSnowflakeTimestamp", "events", "totalCallDuration", "callTimeCounter", "Counter", "probabilityGender", "probabilityAge", "eventsFile", "eventsStream", "line", "readline", "event", "channelType", "ChannelTypes", "dayjs", "totalDays", "averageDailyGuilds", "averageDailyChannels", "topCalls", "a", "b", "Tile", "formatNum", "channelId", "duration", "index", "Chart", "timestamp", "male", "female", "other", "point", "Link", "url", "children", "import_dayjs", "extractMessages", "root", "channelNames", "totalReactions", "totalMessagesEdited", "totalMessagesDeleted", "totalMessages", "totalWords", "totalCharacters", "totalAttachments", "totalMentions", "totalCustomEmojis", "totalDefaultEmojis", "oldestMessage", "newestMessageDate", "hourlyMessageCounter", "Counter", "rangeNum", "i", "monthlyMessageCounter", "wordCounter", "emojiCounter", "dmMessageCounter", "channelMessageCounter", "guildMessageCounter", "guildNames", "channelDir", "channel", "file", "messages", "message", "getAttachmentCount", "getMentionCount", "word", "getWords", "customEmoji", "getCustomEmojis", "defaultEmoji", "getDefaultEmojis", "ChannelTypes", "date", "dayjs", "totalDays", "averageDailyMessages", "topWords", "topEmojis", "topDms", "topChannels", "topGuilds", "monthlyMessageLabels", "rangeDate", "Tile", "formatNum", "Link", "getMessageUrl", "SHORT_DATE_TIME", "count", "index", "emoji", "getEmojiUrl", "dmId", "channelId", "guildId", "Chart", "label", "accentColor", "formatHour", "name", "accentColor", "instructions", "extract", "root", "channelNames", "res", "id", "Account", "Flags", "Connections", "TopGames", "extractAccount", "totalReactions", "totalMessagesEdited", "totalMessagesDeleted", "Analytics", "TopCalls", "PredictedGender", "PredictedAge", "extractActivity", "Messages", "TopWords", "TopEmojis", "TopDms", "TopChannels", "TopGuilds", "MessagesPerMonth", "MessagesPerHour", "extractMessages", "Row", "Spotify_exports", "__export", "accentColor", "banner_default", "extract", "instructions", "name", "import_dayjs", "extractStreaming", "root", "totalListeningTime", "hourlyListeningCounter", "Counter", "rangeNum", "i", "monthlyListeningCounter", "trackCounter", "artistCounter", "streamingHistory", "res", "track", "endTime", "dayjs", "firstTrack", "startTime", "topTracks", "topArtists", "monthlyListeningLabels", "rangeDate", "date", "Tile", "formatNum", "count", "artist", "Chart", "label", "accentColor", "ms", "formatHour", "name", "accentColor", "instructions", "extract", "root", "Streaming", "TopTracks", "TopArtists", "ListeningPerMonth", "ListeningPerHour", "extractStreaming", "Row", "TikTok_exports", "__export", "accentColor", "banner_default", "extract", "instructions", "name", "extractActivity", "userData", "watchedVideoList", "uploadedVideoList", "likedVideoList", "favoriteVideoList", "commentList", "profile", "Tile", "formatNum", "extractAdvertising", "userData", "advertisersList", "Tile", "advertiser", "import_dayjs", "extractVideos", "userData", "watchedVideoList", "oldestVideoDate", "newestVideoDate", "hourlyVideoCounter", "Counter", "rangeNum", "i", "monthlyVideoCounter", "videoCounter", "video", "date", "dayjs", "monthlyVideoLabels", "rangeDate", "topVideos", "url", "count", "rawUrl", "res", "meta", "Tile", "Chart", "label", "accentColor", "formatHour", "Link", "import_dayjs", "extractProfile", "userData", "profile", "followingList", "followerList", "Tile", "FieldGroup", "Field", "dayjs", "SHORT_DATE_TIME", "name", "accentColor", "instructions", "extract", "root", "userData", "res", "Activity", "extractActivity", "Advertisers", "extractAdvertising", "Profile", "extractProfile", "VideosPerMonth", "VideosPerHour", "TopVideos", "extractVideos", "Row", "services_default", "Discord_exports", "Spotify_exports", "TikTok_exports", "app", "$", "services_default", "service", "ServiceCard"] }