@embeddable.com/remarkable-ui 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/BarChartDefaultHorizontalPro.js +30 -29
  2. package/dist/BarChartDefaultHorizontalPro.js.map +1 -1
  3. package/dist/BarChartDefaultPro.js +35 -34
  4. package/dist/BarChartDefaultPro.js.map +1 -1
  5. package/dist/BarChartGroupedHorizontalPro.js +29 -28
  6. package/dist/BarChartGroupedHorizontalPro.js.map +1 -1
  7. package/dist/BarChartGroupedPro.js +40 -39
  8. package/dist/BarChartGroupedPro.js.map +1 -1
  9. package/dist/BarChartStackedHorizontalPro.js +28 -27
  10. package/dist/BarChartStackedHorizontalPro.js.map +1 -1
  11. package/dist/BarChartStackedPro.js +47 -46
  12. package/dist/BarChartStackedPro.js.map +1 -1
  13. package/dist/ChartCard-FOSghcoD.js +127 -0
  14. package/dist/ChartCard-FOSghcoD.js.map +1 -0
  15. package/dist/Color.type.emb-CTiA_AzI.js +9 -0
  16. package/dist/Color.type.emb-CTiA_AzI.js.map +1 -0
  17. package/dist/ColorEditor.js +38 -0
  18. package/dist/ColorEditor.js.map +1 -0
  19. package/dist/ComparisonPeriod.type.emb-CQ63PFtq.js +14 -0
  20. package/dist/{ComparisonPeriod.type.emb-Dlysd_iF.js.map → ComparisonPeriod.type.emb-CQ63PFtq.js.map} +1 -1
  21. package/dist/ComparisonPeriodSelectFieldPro.js +33 -32
  22. package/dist/ComparisonPeriodSelectFieldPro.js.map +1 -1
  23. package/dist/DateRangeSelectFieldPro.js +10 -8
  24. package/dist/DateRangeSelectFieldPro.js.map +1 -1
  25. package/dist/DonutChartPro.js +13 -12
  26. package/dist/DonutChartPro.js.map +1 -1
  27. package/dist/DonutLabelChartPro.js +16 -15
  28. package/dist/DonutLabelChartPro.js.map +1 -1
  29. package/dist/{EditorCard-ncOGVWah.js → EditorCard-CB-re8Qn.js} +24 -23
  30. package/dist/EditorCard-CB-re8Qn.js.map +1 -0
  31. package/dist/{HeatMap-DvjtDRTL.js → HeatMap-DwXoxYyu.js} +33 -33
  32. package/dist/{HeatMap-DvjtDRTL.js.map → HeatMap-DwXoxYyu.js.map} +1 -1
  33. package/dist/HeatMapPro.js +84 -60
  34. package/dist/HeatMapPro.js.map +1 -1
  35. package/dist/KpiChart-lEsVao_M.js +110 -0
  36. package/dist/KpiChart-lEsVao_M.js.map +1 -0
  37. package/dist/KpiChartNumberComparisonPro.js +55 -53
  38. package/dist/KpiChartNumberComparisonPro.js.map +1 -1
  39. package/dist/KpiChartNumberPro.js +12 -11
  40. package/dist/KpiChartNumberPro.js.map +1 -1
  41. package/dist/LineChartComparisonDefaultPro.js +120 -112
  42. package/dist/LineChartComparisonDefaultPro.js.map +1 -1
  43. package/dist/LineChartDefaultPro.js +87 -84
  44. package/dist/LineChartDefaultPro.js.map +1 -1
  45. package/dist/LineChartGroupedPro.js +52 -51
  46. package/dist/LineChartGroupedPro.js.map +1 -1
  47. package/dist/MultiSelectFieldPro.js +10 -9
  48. package/dist/MultiSelectFieldPro.js.map +1 -1
  49. package/dist/PieChartPro.js +14 -13
  50. package/dist/PieChartPro.js.map +1 -1
  51. package/dist/{PivotTable-UDo7378U.js → PivotTable-DlBkWU2O.js} +8 -8
  52. package/dist/{PivotTable-UDo7378U.js.map → PivotTable-DlBkWU2O.js.map} +1 -1
  53. package/dist/PivotTablePro.js +48 -48
  54. package/dist/PivotTablePro.js.map +1 -1
  55. package/dist/SingleSelectField-ammJ2Zc2.js +110 -0
  56. package/dist/SingleSelectField-ammJ2Zc2.js.map +1 -0
  57. package/dist/SingleSelectFieldPro.js +9 -8
  58. package/dist/SingleSelectFieldPro.js.map +1 -1
  59. package/dist/TableChartPaginated.js +73 -72
  60. package/dist/TableChartPaginated.js.map +1 -1
  61. package/dist/TablePaginated-pVrIngVd.js +12448 -0
  62. package/dist/TablePaginated-pVrIngVd.js.map +1 -0
  63. package/dist/{bars.utils-DLuq19zt.js → bars.utils-8ka9OKUG.js} +4 -4
  64. package/dist/{bars.utils-DLuq19zt.js.map → bars.utils-8ka9OKUG.js.map} +1 -1
  65. package/dist/{charts.utils-VLkuIHmS.js → charts.utils-Cbyzr0nO.js} +16149 -16144
  66. package/dist/charts.utils-Cbyzr0nO.js.map +1 -0
  67. package/dist/component.constants-VpbbPSIL.js +5452 -0
  68. package/dist/component.constants-VpbbPSIL.js.map +1 -0
  69. package/dist/embeddable-components.json +15 -13
  70. package/dist/embeddable-theme-2b917.js +16739 -16736
  71. package/dist/{embeddable-types-363c8.js → embeddable-types-df460.js} +21 -17
  72. package/dist/embeddable-types.js.map +1 -1
  73. package/dist/{formatter.utils-Dza9buQ8.js → formatter.utils-BLz3TSY0.js} +2 -2
  74. package/dist/{formatter.utils-Dza9buQ8.js.map → formatter.utils-BLz3TSY0.js.map} +1 -1
  75. package/dist/index-B7Pv2FEr.js +48 -0
  76. package/dist/{index-DTedizV6.js.map → index-B7Pv2FEr.js.map} +1 -1
  77. package/dist/index-BYbp2vA7.js +57 -0
  78. package/dist/index-BYbp2vA7.js.map +1 -0
  79. package/dist/{index-Bv_AzW89.js → index-CCJCuW1J.js} +37 -36
  80. package/dist/index-CCJCuW1J.js.map +1 -0
  81. package/dist/index-DcyTRz2V.js +63 -0
  82. package/dist/{index-Cvk5RTZT.js.map → index-DcyTRz2V.js.map} +1 -1
  83. package/dist/{index-DiSLIUsa.js → index-DtmAIOuh.js} +25 -24
  84. package/dist/{index-DiSLIUsa.js.map → index-DtmAIOuh.js.map} +1 -1
  85. package/dist/index-mMCdUsGD.js +63 -0
  86. package/dist/{index-CHbc8CTj.js.map → index-mMCdUsGD.js.map} +1 -1
  87. package/dist/index.js +187 -181
  88. package/dist/index.js.map +1 -1
  89. package/dist/{pies.utils-BZEnXtqg.js → pies.utils-Cr-a3NjZ.js} +15 -14
  90. package/dist/{pies.utils-BZEnXtqg.js.map → pies.utils-Cr-a3NjZ.js.map} +1 -1
  91. package/dist/remarkable-pro/components/charts/kpis/KpiChartNumberComparisonPro/index.d.ts.map +1 -1
  92. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts +2 -2
  93. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts.map +1 -1
  94. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.d.ts +6 -2
  95. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.d.ts.map +1 -1
  96. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts +2 -3
  97. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts.map +1 -1
  98. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts +0 -1
  99. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts.map +1 -1
  100. package/dist/remarkable-pro/components/charts/tables/TableChartPaginated/index.d.ts.map +1 -1
  101. package/dist/remarkable-pro/components/component.constants.d.ts +0 -14
  102. package/dist/remarkable-pro/components/component.constants.d.ts.map +1 -1
  103. package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.d.ts +1 -0
  104. package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.d.ts.map +1 -1
  105. package/dist/remarkable-pro/editors/ColorEditor/index.d.ts +8 -0
  106. package/dist/remarkable-pro/editors/ColorEditor/index.d.ts.map +1 -0
  107. package/dist/remarkable-pro/theme/defaults/defaults.ChartCardMenu.constants.d.ts +17 -0
  108. package/dist/remarkable-pro/theme/defaults/defaults.ChartCardMenu.constants.d.ts.map +1 -0
  109. package/dist/remarkable-pro/theme/i18n/translations/de.d.ts.map +1 -1
  110. package/dist/remarkable-pro/theme/i18n/translations/en.d.ts.map +1 -1
  111. package/dist/remarkable-pro/theme/theme.constants.d.ts.map +1 -1
  112. package/dist/remarkable-pro/theme/theme.types.d.ts +2 -4
  113. package/dist/remarkable-pro/theme/theme.types.d.ts.map +1 -1
  114. package/dist/remarkable-pro/theme/utils/export.utils.d.ts +4 -4
  115. package/dist/remarkable-pro/theme/utils/export.utils.d.ts.map +1 -1
  116. package/dist/remarkable-ui/components/charts/chartjs.cartesian.constants.d.ts +5 -5
  117. package/dist/remarkable-ui/components/charts/chartjs.cartesian.constants.d.ts.map +1 -1
  118. package/dist/remarkable-ui/components/charts/chartjs.constants.d.ts +1 -1
  119. package/dist/remarkable-ui/components/charts/chartjs.constants.d.ts.map +1 -1
  120. package/dist/remarkable-ui/components/charts/kpis/KpiChart.d.ts.map +1 -1
  121. package/dist/remarkable-ui/components/charts/kpis/KpiChart.stories.d.ts +2 -1
  122. package/dist/remarkable-ui/components/charts/kpis/KpiChart.stories.d.ts.map +1 -1
  123. package/dist/remarkable-ui/components/charts/kpis/KpiChart.types.d.ts +2 -1
  124. package/dist/remarkable-ui/components/charts/kpis/KpiChart.types.d.ts.map +1 -1
  125. package/dist/remarkable-ui/components/charts/kpis/components/KpiChartChange.d.ts.map +1 -1
  126. package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.d.ts +1 -1
  127. package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.d.ts.map +1 -1
  128. package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.stories.d.ts +1 -1
  129. package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.stories.d.ts.map +1 -1
  130. package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.d.ts +3 -3
  131. package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.d.ts.map +1 -1
  132. package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.stories.d.ts +3 -3
  133. package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.stories.d.ts.map +1 -1
  134. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.d.ts +1 -1
  135. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.d.ts.map +1 -1
  136. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.d.ts.map +1 -0
  137. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.d.ts.map +1 -0
  138. package/dist/remarkable-ui/components/shared/Overlay/Overlay.d.ts +8 -0
  139. package/dist/remarkable-ui/components/shared/Overlay/Overlay.d.ts.map +1 -0
  140. package/dist/remarkable-ui/components/shared/Overlay/Overlay.stories.d.ts +10 -0
  141. package/dist/remarkable-ui/components/shared/Overlay/Overlay.stories.d.ts.map +1 -0
  142. package/dist/remarkable-ui/index.d.ts +4 -5
  143. package/dist/remarkable-ui/index.d.ts.map +1 -1
  144. package/dist/remarkable-ui.css +1 -1
  145. package/dist/{timeRange.utils-Yy_Z93Kv.js → timeRange.utils-AEhW9Gu4.js} +2 -2
  146. package/dist/{timeRange.utils-Yy_Z93Kv.js.map → timeRange.utils-AEhW9Gu4.js.map} +1 -1
  147. package/package.json +1 -1
  148. package/dist/ChartCard-DE8akLvk.js +0 -122
  149. package/dist/ChartCard-DE8akLvk.js.map +0 -1
  150. package/dist/ComparisonPeriod.type.emb-Dlysd_iF.js +0 -14
  151. package/dist/EditorCard-ncOGVWah.js.map +0 -1
  152. package/dist/KpiChart-B9tgnF4B.js +0 -105
  153. package/dist/KpiChart-B9tgnF4B.js.map +0 -1
  154. package/dist/SingleSelectField-BTpa_tLg.js +0 -109
  155. package/dist/SingleSelectField-BTpa_tLg.js.map +0 -1
  156. package/dist/charts.utils-VLkuIHmS.js.map +0 -1
  157. package/dist/component.constants-BfTb5vNm.js +0 -17898
  158. package/dist/component.constants-BfTb5vNm.js.map +0 -1
  159. package/dist/index-9-Jj7smT.js +0 -56
  160. package/dist/index-9-Jj7smT.js.map +0 -1
  161. package/dist/index-Bv_AzW89.js.map +0 -1
  162. package/dist/index-CHbc8CTj.js +0 -62
  163. package/dist/index-Cvk5RTZT.js +0 -62
  164. package/dist/index-DTedizV6.js +0 -47
  165. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.stories.d.ts +0 -20
  166. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.stories.d.ts.map +0 -1
  167. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.constants.d.ts +0 -3
  168. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.constants.d.ts.map +0 -1
  169. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.stories.d.ts +0 -16
  170. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.stories.d.ts.map +0 -1
  171. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.types.d.ts +0 -16
  172. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.types.d.ts.map +0 -1
  173. package/dist/remarkable-pro/components/editors/ComparisonPeriodSelectFieldPro/index.stories.d.ts +0 -12
  174. package/dist/remarkable-pro/components/editors/ComparisonPeriodSelectFieldPro/index.stories.d.ts.map +0 -1
  175. package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.stories.d.ts +0 -17
  176. package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.stories.d.ts.map +0 -1
  177. package/dist/remarkable-pro/components/editors/shared/EditorCard/EditorCard.stories.d.ts +0 -12
  178. package/dist/remarkable-pro/components/editors/shared/EditorCard/EditorCard.stories.d.ts.map +0 -1
  179. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectListOptions/SelectFieldCategory/SelectFieldCategory.d.ts.map +0 -1
  180. package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectListOptions/SelectFieldOption/SelectFieldOption.d.ts.map +0 -1
  181. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.d.ts +0 -3
  182. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.d.ts.map +0 -1
  183. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.stories.d.ts +0 -7
  184. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.stories.d.ts.map +0 -1
  185. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.types.d.ts +0 -7
  186. package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.types.d.ts.map +0 -1
  187. /package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/{SelectListOptions → SelectFieldOptions}/SelectFieldCategory/SelectFieldCategory.d.ts +0 -0
  188. /package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/{SelectListOptions → SelectFieldOptions}/SelectFieldOption/SelectFieldOption.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TablePaginated-pVrIngVd.js","sources":["../node_modules/mergician/dist/mergician.esm.js","../node_modules/@embeddable.com/core/lib/index.esm.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/jsx-runtime.js","../node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs","../node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconChevronsLeft.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconChevronsRight.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconLoader2.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconCaretDownFilled.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconCaretUpDownFilled.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconCaretUpFilled.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconCopyCheckFilled.mjs","../node_modules/clsx/dist/clsx.mjs","../src/remarkable-ui/components/shared/Card/Card.tsx","../src/remarkable-ui/components/shared/ActionIcon/ActionIcon.tsx","../src/remarkable-ui/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/remarkable-ui/components/shared/Field/FieldFeedback.tsx","../src/remarkable-ui/components/shared/Field/FieldHeader.tsx","../src/remarkable-ui/components/editors/inputs/shared/InputField/InputField.tsx","../src/remarkable-ui/components/editors/inputs/TextField/TextField.tsx","../src/remarkable-ui/components/editors/inputs/NumberField/NumberField.tsx","../node_modules/@kurkle/color/dist/color.esm.js","../node_modules/chart.js/dist/chunks/helpers.dataset.js","../node_modules/chart.js/dist/chart.js","../node_modules/react-chartjs-2/dist/index.js","../src/remarkable-ui/components/charts/chartjs.utils.ts","../src/remarkable-ui/styles/styles.utils.ts","../src/remarkable-ui/components/charts/charts.constants.ts","../src/remarkable-ui/components/charts/chartjs.constants.ts","../src/remarkable-ui/components/charts/chartjs.cartesian.constants.ts","../src/remarkable-ui/components/charts/bars/bars.utils.ts","../node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js","../src/remarkable-ui/components/charts/bars/BarChart.tsx","../src/remarkable-ui/components/charts/lines/lines.utils.ts","../src/remarkable-ui/components/charts/lines/LineChart.tsx","../node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js","../src/remarkable-ui/components/charts/pies/pies.utils.ts","../src/remarkable-ui/components/charts/pies/DonutChart/DonutChart.tsx","../src/remarkable-ui/components/charts/pies/PieChart/PieChart.tsx","../src/remarkable-ui/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/remarkable-ui/components/charts/tables/Table/table.types.ts","../src/remarkable-ui/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/remarkable-ui/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/remarkable-ui/components/charts/tables/Table/TablePaginated.tsx"],"sourcesContent":["/*!\n * mergician\n * v2.0.2\n * https://jhildenbiddle.github.io/mergician/\n * (c) 2022-2024 John Hildenbiddle\n * MIT license\n */\n\n// src/util.js\nfunction countOccurrences(...arrays) {\n const countObj = {};\n arrays.forEach((array) => {\n array.forEach((v) => {\n countObj[v] = v in countObj ? ++countObj[v] : 1;\n });\n });\n return countObj;\n}\nfunction getInAll(...arrays) {\n return arrays.reduce(\n (acc, curr) => acc.filter(Set.prototype.has, new Set(curr))\n );\n}\nfunction getInMultiple(...arrays) {\n const countObj = countOccurrences(...arrays);\n return Object.keys(countObj).filter((v) => countObj[v] > 1);\n}\nfunction getNotInAll(...arrays) {\n const countObj = countOccurrences(...arrays);\n return Object.keys(countObj).filter((v) => countObj[v] < arrays.length);\n}\nfunction getNotInMultiple(...arrays) {\n const countObj = countOccurrences(...arrays);\n return Object.keys(countObj).filter((v) => countObj[v] === 1);\n}\nfunction getObjectKeys(obj, hoistEnumerable = false) {\n const keys = Object.getOwnPropertyNames(obj);\n if (hoistEnumerable) {\n for (const key in obj) {\n !keys.includes(key) && keys.push(key);\n }\n }\n return keys;\n}\nfunction isObject(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction isPropDescriptor(obj) {\n if (!isObject(obj)) {\n return false;\n }\n const hasFlagKey = [\"writable\", \"enumerable\", \"configurable\"].some(\n (key) => key in obj\n );\n const hasMethod = [\"get\", \"set\"].some((key) => typeof obj[key] === \"function\");\n const hasMethodKeys = [\"get\", \"set\"].every((key) => key in obj);\n let isDescriptor = \"value\" in obj && hasFlagKey || hasMethod && (hasMethodKeys || hasFlagKey);\n if (isDescriptor) {\n const validKeys = [\n \"configurable\",\n \"get\",\n \"set\",\n \"enumerable\",\n \"value\",\n \"writable\"\n ];\n isDescriptor = Object.keys(obj).some((key) => !(key in validKeys));\n }\n return isDescriptor;\n}\n\n// src/index.js\n/**\n * @typedef {Object} MergicianOptions\n * @property {string[]} [onlyKeys] - Exclusive array of keys to be merged\n * (others are skipped)\n * @property {string[]} [skipKeys] - Array of keys to skip (others are\n * merged)\n * @property {boolean} [onlyCommonKeys=false] - Merge only keys found\n * in multiple objects (ignore single occurrence keys)\n * @property {boolean} [onlyUniversalKeys=false] - Merge only keys\n * found in all objects\n * @property {boolean} [skipCommonKeys=false] - Skip keys found in\n * multiple objects (merge only single occurrence keys)\n * @property {boolean} [skipUniversalKeys=false] - Skip keys found in\n * all objects (merge only common keys)\n * @property {boolean} [invokeGetters=false] - Invoke \"getter\" methods\n * and merge returned values\n * @property {boolean} [skipSetters=false] - Skip \"setter\" methods\n * during merge\n * @property {boolean} [appendArrays=false] - Merge array values at\n * the end of existing arrays\n * @property {boolean} [prependArrays=false] - Merge array values at\n * the beginning of existing arrays\n * @property {boolean} [dedupArrays=false] - Remove duplicate array\n * values in new merged object\n * @property {boolean|function} [sortArrays=false] - Sort array values\n * in new merged object\n * @property {boolean} [hoistEnumerable=false] - Merge enumerable\n * prototype properties as direct properties of merged object\n * @property {boolean} [hoistProto=false] - Merge custom prototype\n * properties as direct properties of merged object\n * @property {boolean} [skipProto=false] - Skip merging of custom\n * prototype properties\n * @property {filterCallback} [filter] - Callback used to conditionally merge\n * or skip a property. Return a \"truthy\" value to merge or a \"falsy\" value to\n * skip. Return no value to proceed according to other option values.\n * @property {beforeEachCallback} [beforeEach] - Callback used for\n * inspecting/modifying properties before merge. Return value is used as value\n * to merge.\n * @property {afterEachCallback} [afterEach] - Callback used for\n * inspecting/modifying properties after merge. Return value is used as merged\n * value.\n * @property {onCircularCallback} [onCircular] - Callback used for handling\n * circular object references during merge\n * @preserve\n */\n/**\n * @callback filterCallback\n * @param {callbackData} callbackData\n * @preserve\n */\n/**\n * @callback beforeEachCallback\n * @param {callbackData} callbackData\n * @preserve\n */\n/**\n * @callback afterEachCallback\n * @param {afterEachCallbackData} callbackData\n * @preserve\n */\n/**\n * @callback onCircularCallback\n * @param {callbackData} callbackData\n * @preserve\n */\n/**\n * @typedef {Object} callbackData\n * @property {number} depth - Nesting level of the key being processed\n * @property {string} key - Object key being processed\n * @property {object} srcObj - Object containing the source value\n * @property {any} srcVal - Source object’s property value\n * @property {object} targetObj - New merged object\n * @property {any} targetVal - New merged object’s current property value\n * @preserve\n */\n/**\n * @typedef {Object} afterEachCallbackData\n * @property {number} depth - Nesting level of the key being processed\n * @property {string} key - Object key being processed\n * @property {any} mergeVal - New merged value\n * @property {object} srcObj - Object containing the source value\n * @property {object} targetObj - New merged object\n * @preserve\n */\nvar defaults = {\n // Keys\n onlyKeys: [],\n skipKeys: [],\n onlyCommonKeys: false,\n onlyUniversalKeys: false,\n skipCommonKeys: false,\n skipUniversalKeys: false,\n // Values\n invokeGetters: false,\n skipSetters: false,\n // Arrays\n appendArrays: false,\n prependArrays: false,\n dedupArrays: false,\n sortArrays: false,\n // Prototype\n hoistEnumerable: false,\n hoistProto: false,\n skipProto: false,\n // Callbacks\n filter: Function.prototype,\n beforeEach: Function.prototype,\n afterEach: Function.prototype,\n onCircular: Function.prototype\n};\n/**\n * @description Deep (recursive) object merging with support for descriptor\n * values, accessor functions, custom prototypes, and advanced options for\n * customizing the merge process.\n *\n * @example\n * // Custom merge options\n * const mergedObj = mergician({\n * // Options\n * })(obj1, obj2, obj3);\n *\n * // Custom merge function\n * const customMerge = mergician({\n * // Options\n * });\n * const customMergeObj = customMerge(obj1, obj2, obj3);\n *\n * @overload\n * @param {MergicianOptions} options\n * @returns {function} New merge function with options set as defaults\n * @preserve\n */\n/**\n * @description Deep (recursive) object merging with support for descriptor\n * values, accessor functions, custom prototypes, and advanced options for\n * customizing the merge process.\n *\n * @example\n * // Clone with default options\n * const clonedObj = mergician({}, obj1);\n *\n * // Merge with default options\n * const mergedObj = mergician(obj1, obj2, obj3);\n *\n * @overload\n * @param {...object} objects\n * @returns {object} New merged object\n * @preserve\n */\n/**\n * @description Deep (recursive) object merging with support for descriptor\n * values, accessor functions, custom prototypes, and advanced options for\n * customizing the merge process.\n *\n * @example\n * // Clone with default options\n * const clonedObj = mergician({}, obj1);\n *\n * // Merge with default options\n * const mergedObj = mergician(obj1, obj2, obj3);\n *\n * @example\n * // Custom merge options\n * const mergedObj = mergician({\n * // Options\n * })(obj1, obj2, obj3);\n *\n * // Custom merge function\n * const customMerge = mergician({\n * // Options\n * });\n * const customMergeObj = customMerge(obj1, obj2, obj3);\n *\n * @param {MergicianOptions} optionsOrObject\n * @param {...object} [objects]\n * @returns {function|object} New merge function with options set as defaults\n * (single argument) or new merged object (multiple arguments)\n * @preserve\n */\nfunction mergician(optionsOrObject, ...objects) {\n const options = arguments.length === 1 ? arguments[0] : {};\n const settings = { ...defaults, ...options };\n const dedupArrayMap = /* @__PURE__ */ new Map();\n const sortArrayMap = /* @__PURE__ */ new Map();\n const sortArrayFn = typeof settings.sortArrays === \"function\" ? settings.sortArrays : void 0;\n const circularRefs = /* @__PURE__ */ new WeakMap();\n let mergeDepth = 0;\n function _getObjectKeys(obj) {\n return getObjectKeys(obj, settings.hoistEnumerable);\n }\n function _mergician(...objects2) {\n let mergeKeyList;\n if (objects2.length > 1) {\n if (settings.onlyCommonKeys) {\n mergeKeyList = getInMultiple(\n ...objects2.map((obj) => _getObjectKeys(obj))\n );\n } else if (settings.onlyUniversalKeys) {\n mergeKeyList = getInAll(...objects2.map((obj) => _getObjectKeys(obj)));\n } else if (settings.skipCommonKeys) {\n mergeKeyList = getNotInMultiple(\n ...objects2.map((obj) => _getObjectKeys(obj))\n );\n } else if (settings.skipUniversalKeys) {\n mergeKeyList = getNotInAll(...objects2.map((obj) => _getObjectKeys(obj)));\n }\n }\n if (!mergeKeyList && settings.onlyKeys.length) {\n mergeKeyList = settings.onlyKeys;\n }\n if (mergeKeyList && mergeKeyList !== settings.onlyKeys && settings.onlyKeys.length) {\n mergeKeyList = mergeKeyList.filter(\n (key) => settings.onlyKeys.includes(key)\n );\n }\n const newObjProps = objects2.reduce((targetObj, srcObj) => {\n circularRefs.set(srcObj, targetObj);\n let keys = mergeKeyList || _getObjectKeys(srcObj);\n if (settings.skipKeys.length) {\n keys = keys.filter((key) => settings.skipKeys.indexOf(key) === -1);\n }\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const targetVal = targetObj[key];\n const mergeDescriptor = {\n configurable: true,\n enumerable: true\n };\n if (key in srcObj === false) {\n continue;\n }\n let isReturnVal = false;\n let mergeVal = srcObj[key];\n const srcDescriptor = Object.getOwnPropertyDescriptor(srcObj, key);\n const isSetterOnly = srcDescriptor && typeof srcDescriptor.set === \"function\" && typeof srcDescriptor.get !== \"function\";\n if (isSetterOnly) {\n if (!settings.skipSetters) {\n Object.defineProperty(targetObj, key, srcDescriptor);\n }\n continue;\n }\n if (settings.filter !== defaults.filter) {\n const returnVal = settings.filter({\n depth: mergeDepth,\n key,\n srcObj,\n srcVal: mergeVal,\n targetObj,\n targetVal\n });\n if (returnVal !== void 0 && !returnVal) {\n continue;\n }\n }\n if (settings.beforeEach !== defaults.beforeEach) {\n const returnVal = settings.beforeEach({\n depth: mergeDepth,\n key,\n srcObj,\n srcVal: mergeVal,\n targetObj,\n targetVal\n });\n if (returnVal !== void 0) {\n isReturnVal = true;\n mergeVal = returnVal;\n }\n }\n if (typeof mergeVal === \"object\" && mergeVal !== null) {\n if (circularRefs.has(srcObj[key])) {\n const returnVal = settings.onCircular({\n depth: mergeDepth,\n key,\n srcObj,\n srcVal: srcObj[key],\n targetObj,\n targetVal\n });\n if (returnVal === void 0) {\n mergeVal = circularRefs.get(srcObj[key]);\n targetObj[key] = mergeVal;\n continue;\n }\n isReturnVal = true;\n mergeVal = returnVal;\n }\n }\n if (Array.isArray(mergeVal)) {\n mergeVal = [...mergeVal];\n if (Array.isArray(targetVal)) {\n if (settings.appendArrays) {\n mergeVal = [...targetVal, ...mergeVal];\n } else if (settings.prependArrays) {\n mergeVal = [...mergeVal, ...targetVal];\n }\n }\n if (settings.dedupArrays) {\n if (settings.afterEach !== defaults.afterEach) {\n mergeVal = [...new Set(mergeVal)];\n } else {\n const keyArray = dedupArrayMap.get(targetObj);\n if (keyArray && !keyArray.includes(key)) {\n keyArray.push(key);\n } else {\n dedupArrayMap.set(targetObj, [key]);\n }\n }\n }\n if (settings.sortArrays) {\n if (settings.afterEach !== defaults.afterEach) {\n mergeVal = mergeVal.sort(sortArrayFn);\n } else {\n const keyArray = sortArrayMap.get(targetObj);\n if (keyArray && !keyArray.includes(key)) {\n keyArray.push(key);\n } else {\n sortArrayMap.set(targetObj, [key]);\n }\n }\n }\n } else if (mergeVal instanceof Date) {\n mergeVal = new Date(mergeVal);\n } else if (isObject(mergeVal) && (!isReturnVal || !isPropDescriptor(mergeVal))) {\n mergeDepth++;\n if (isObject(targetVal)) {\n mergeVal = _mergician(targetVal, mergeVal);\n } else {\n mergeVal = _mergician(mergeVal);\n }\n mergeDepth--;\n }\n if (settings.afterEach !== defaults.afterEach) {\n const returnVal = settings.afterEach({\n depth: mergeDepth,\n key,\n mergeVal,\n srcObj,\n targetObj\n });\n if (returnVal !== void 0) {\n isReturnVal = true;\n mergeVal = returnVal;\n }\n }\n if (isReturnVal) {\n const returnDescriptor = isPropDescriptor(mergeVal) ? mergeVal : {\n configurable: true,\n enumerable: true,\n value: mergeVal,\n writable: true\n };\n Object.defineProperty(targetObj, key, returnDescriptor);\n continue;\n }\n if (srcDescriptor) {\n const { configurable, enumerable, get, set, writable } = srcDescriptor;\n Object.assign(mergeDescriptor, {\n configurable,\n enumerable\n });\n if (typeof get === \"function\") {\n if (settings.invokeGetters) {\n mergeDescriptor.value = mergeVal;\n } else {\n mergeDescriptor.get = get;\n }\n }\n if (!settings.skipSetters && typeof set === \"function\" && !Object.hasOwnProperty.call(mergeDescriptor, \"value\")) {\n mergeDescriptor.set = set;\n }\n if (!mergeDescriptor.get && !mergeDescriptor.set) {\n mergeDescriptor.writable = Boolean(writable);\n }\n }\n if (!mergeDescriptor.get && !mergeDescriptor.set && !(\"value\" in mergeDescriptor)) {\n mergeDescriptor.value = mergeVal;\n mergeDescriptor.writable = srcDescriptor && \"writable\" in srcDescriptor ? srcDescriptor.writable : true;\n }\n Object.defineProperty(targetObj, key, mergeDescriptor);\n }\n return targetObj;\n }, {});\n for (const [obj, keyArray] of dedupArrayMap.entries()) {\n for (const key of keyArray) {\n const propDescriptor = Object.getOwnPropertyDescriptor(obj, key);\n const { configurable, enumerable, writable } = propDescriptor;\n Object.defineProperty(obj, key, {\n configurable,\n enumerable,\n value: [...new Set(obj[key])],\n writable: writable !== void 0 ? writable : true\n });\n }\n }\n for (const [obj, keyArray] of sortArrayMap.entries()) {\n for (const key of keyArray) {\n obj[key].sort(sortArrayFn);\n }\n }\n let newObj = newObjProps;\n if (!settings.skipProto) {\n const customProtos = objects2.reduce((protosArr, obj) => {\n const proto = Object.getPrototypeOf(obj);\n if (proto && proto !== Object.prototype) {\n protosArr.push(proto);\n }\n return protosArr;\n }, []);\n if (customProtos.length) {\n const newObjProto = _mergician(...customProtos);\n if (settings.hoistProto) {\n newObj = _mergician(newObjProto, newObjProps);\n } else {\n newObj = Object.create(\n newObjProto,\n Object.getOwnPropertyDescriptors(newObjProps)\n );\n }\n }\n }\n return newObj;\n }\n if (arguments.length === 1) {\n return function(...objects2) {\n if (arguments.length === 1) {\n return mergician({ ...settings, ...objects2[0] });\n } else {\n return _mergician(...objects2);\n }\n };\n } else {\n return _mergician(...arguments);\n }\n}\nexport {\n mergician\n};\n","import { mergician } from 'mergician';\n\nconst DEFAULT_LOCALE = \"en-US\";\nconst normalizeEntities = (entities, { mapFn = (x) => x, filterFn = Boolean, }) => {\n if (!entities)\n return undefined;\n const filtered = entities.filter(filterFn);\n if (filtered.length === 0)\n return undefined;\n return filtered.map(mapFn);\n};\nconst getName = (x) => x.name;\nconst checkTimeDimension = (timeDimension) => Boolean(timeDimension &&\n timeDimension.dimension &&\n (timeDimension.granularity || timeDimension.dateRange));\nconst validateOrderBy = (orderByParam, dimensions, measures, timeDimensions) => {\n const unknownDimensionsOrMeasures = [];\n const dimensionAndMeasureNames = [\n ...[...measures, ...dimensions].filter(Boolean).map((x) => x.name),\n ...timeDimensions\n .filter(Boolean)\n .map((x) => x.dimension)\n .filter(Boolean),\n ];\n for (const orderBy of orderByParam) {\n const { name } = orderBy.property;\n if (dimensionAndMeasureNames.includes(name))\n continue;\n unknownDimensionsOrMeasures.push(name);\n }\n return unknownDimensionsOrMeasures;\n};\nconst createBuiltInType = (name, typeConfig = {}) => ({\n __embeddableType: \"built-in\",\n toString: () => name,\n typeConfig: {\n label: name,\n optionLabel: () => name,\n ...typeConfig,\n },\n});\nconst validateFilter = (filter) => {\n if (!filter.property)\n return \"filter property must be set\";\n if (!filter.operator)\n return \"filter operator must be set\";\n};\nconst convertFilterValue = (value) => {\n // no need to convert these values\n if (value == null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n typeof value === \"number\" ||\n value instanceof Date ||\n Array.isArray(value)) {\n return value;\n }\n // time or timeRange must be converted\n if (value?.relativeTimeString)\n return value?.relativeTimeString;\n if (Object.hasOwn(value, \"date\"))\n return value?.date;\n if (Object.hasOwn(value, \"from\") || Object.hasOwn(value, \"to\")) {\n const timeRange = value;\n return [timeRange?.from, timeRange?.to].filter(Boolean);\n }\n};\nfunction deduplicateEntitiesByName(entities) {\n if (!entities || entities.length === 0)\n return [];\n const seen = new Set();\n return entities.filter((entity) => {\n if (seen.has(entity.name)) {\n return false;\n }\n seen.add(entity.name);\n return true;\n });\n}\n\nconst DIMENSION_TYPE = \"dimension\";\nconst MEASURE_TYPE = \"measure\";\nconst deepFlattenSelect = (input) => {\n if (Array.isArray(input)) {\n return input.flatMap(deepFlattenSelect);\n }\n return [input];\n};\nconst processSelectParam = (selectParam) => {\n const result = {\n dimensions: [],\n measures: [],\n timeDimensions: [],\n };\n if (!selectParam) {\n return result;\n }\n const flat = deepFlattenSelect(selectParam).filter(Boolean);\n if (!flat.length) {\n result.error = \"select must not be empty\";\n return result;\n }\n for (const ent of flat) {\n const isValidEntity = typeof ent === \"object\" &&\n (isDimensionOrMeasure(ent) || isTimeDimension(ent));\n if (!isValidEntity) {\n result.error =\n \"select must only contain Dimension, Measure or TimeDimension objects\";\n return result;\n }\n if (isTimeDimension(ent)) {\n result.timeDimensions.push(ent);\n }\n else if (isDimension(ent)) {\n const dimension = ent;\n const granularity = dimension.inputs?.granularity;\n if (dimension.nativeType === \"time\" && granularity) {\n result.timeDimensions.push({\n dimension: dimension.name,\n granularity,\n title: dimension.title,\n });\n }\n else {\n result.dimensions.push(dimension);\n }\n }\n else if (isMeasure(ent)) {\n result.measures.push(ent);\n }\n else {\n const type = \"__type__\" in ent ? ent.__type__ : typeof ent;\n result.error = `Unknown __type__ in select: ${type}`;\n return result;\n }\n }\n return result;\n};\nfunction validateLegacyFields(request) {\n if (request.measures?.length > 0 &&\n request.measures.some((m) => m?.__type__ !== MEASURE_TYPE)) {\n return \"Unexpected type passed to `measures` in loadData function. Expected an array of type Measure.\";\n }\n if (request.dimensions?.length > 0 &&\n request.dimensions.some((m) => m?.__type__ !== DIMENSION_TYPE)) {\n return \"Unexpected type passed to `dimensions` in loadData function. Expected an array of type Dimension.\";\n }\n return null;\n}\nfunction processApiSelection(request) {\n const result = {\n dimensions: [],\n measures: [],\n timeDimensions: [],\n usingSelect: false,\n };\n if (request.select) {\n result.usingSelect = true;\n const selectResult = processSelectParam(request.select);\n if (selectResult.error) {\n result.error = selectResult.error;\n return result;\n }\n result.dimensions = selectResult.dimensions;\n result.measures = selectResult.measures;\n result.timeDimensions = selectResult.timeDimensions;\n }\n else {\n const legacyError = validateLegacyFields(request);\n if (legacyError) {\n result.error = legacyError;\n return result;\n }\n result.dimensions =\n normalizeEntities(request.dimensions, { mapFn: (x) => x }) ?? [];\n result.measures =\n normalizeEntities(request.measures, { mapFn: (x) => x }) ?? [];\n result.timeDimensions =\n normalizeEntities(request.timeDimensions, { filterFn: Boolean }) ?? [];\n }\n result.dimensions = deduplicateEntitiesByName(result.dimensions);\n result.measures = deduplicateEntitiesByName(result.measures);\n return result;\n}\nfunction validateOrderByLogic(orderBy, dimensions, measures, timeDimensions) {\n const unknownDimensionsOrMeasures = validateOrderBy(orderBy ?? [], dimensions, measures, timeDimensions);\n if (unknownDimensionsOrMeasures.length > 0) {\n return `Cannot order by ${unknownDimensionsOrMeasures.join(\", \")} as no such ${unknownDimensionsOrMeasures.length === 1 ? \"property\" : \"properties\"} has been loaded.`;\n }\n return null;\n}\nfunction validateFiltersLogic(filters) {\n if (filters) {\n const errors = filters\n .map((f, index) => ({\n index,\n message: validateFilter(f),\n }))\n .filter((e) => !!e.message);\n if (errors.length) {\n return errors\n .map((e) => `filter[${e.index}] is not valid: ${e.message}`)\n .join(\"\\n\");\n }\n }\n return null;\n}\nfunction buildQueryObject(request, dimensions, measures, timeDimensions, order) {\n return {\n inputName: request.from.inputName,\n datasetId: request.from.datasetId,\n embeddableId: request.from.embeddableId,\n dimensions: normalizeEntities(dimensions, { mapFn: getName }) ?? [],\n measures: normalizeEntities(measures, { mapFn: getName }) ?? [],\n order,\n timeDimensions: normalizeEntities(timeDimensions, { filterFn: checkTimeDimension }) ?? [],\n offset: request.offset,\n limit: request.limit,\n variableValues: request.from.variableValues,\n filters: request.filters?.map((f) => ({\n member: f.property.name,\n operator: f.operator,\n values: convertFilterValue(f.value),\n })),\n timezone: request.timezone,\n countRows: request.countRows,\n };\n}\n\nconst LOAD_DATA_EVENT = \"embeddable-event:load-data\";\nconst FilterOperator = {\n equals: \"equals\",\n notEquals: \"notEquals\",\n contains: \"contains\",\n notContains: \"notContains\",\n startsWith: \"startsWith\",\n endsWith: \"endsWith\",\n gt: \"gt\",\n gte: \"gte\",\n lt: \"lt\",\n lte: \"lte\",\n notNull: \"set\",\n isNull: \"notSet\",\n inDateRange: \"inDateRange\",\n notInDateRange: \"notInDateRange\",\n beforeDate: \"beforeDate\",\n afterDate: \"afterDate\",\n measureFilter: \"measureFilter\",\n};\nconst isLoadDataParams = (ldp) => typeof ldp === \"object\" &&\n ldp &&\n \"requestParams\" in ldp &&\n \"dataLoader\" in ldp;\nconst executeDataRequest = (triggerElement, request, componentId, propertyName) => {\n if (!request.from)\n return \"No dataset selected\";\n // Mutually exclusive API check\n if (request.select &&\n (request.dimensions || request.measures || request.timeDimensions)) {\n return \"loadData expects you to use either dimensions, timeDimensions and measures, or select. You cannot use both together.\";\n }\n // Process select or legacy fields\n const apiResult = processApiSelection(request);\n if (apiResult.error) {\n return apiResult.error;\n }\n const { dimensions, measures, timeDimensions } = apiResult;\n // Validate required fields\n const dimensionsOrMeasuresDefined = dimensions.length || measures.length || timeDimensions.length;\n if (!dimensionsOrMeasuresDefined) {\n return \"At least a dimension or a measure should be selected.\";\n }\n // Order By Validation\n const orderByError = validateOrderByLogic(request.orderBy, dimensions, measures, timeDimensions);\n if (orderByError) {\n return orderByError;\n }\n // Filter Validation\n const filterError = validateFiltersLogic(request.filters);\n if (filterError) {\n return filterError;\n }\n // Prepare OrderBy for query\n const order = normalizeEntities(request.orderBy, {\n mapFn: (o) => [o.property.name, o.direction],\n });\n // Build Query Object\n const query = buildQueryObject(request, dimensions, measures, timeDimensions, order);\n // Dispatch Event\n triggerElement.dispatchEvent(new CustomEvent(LOAD_DATA_EVENT, {\n bubbles: true,\n composed: true,\n detail: {\n query,\n componentId,\n propertyName,\n },\n }));\n};\nconst loadData = (requestParams) => ({\n requestParams,\n dataLoader: executeDataRequest,\n});\nconst isDimension = (dimensionOrMeasure) => dimensionOrMeasure?.__type__ === DIMENSION_TYPE;\nconst isMeasure = (dimensionOrMeasure) => dimensionOrMeasure?.__type__ === MEASURE_TYPE;\nconst isTimeDimension = (dimensionOrMeasure) => \"dimension\" in (dimensionOrMeasure ?? {}) &&\n !(\"__type__\" in dimensionOrMeasure);\nconst isDimensionOrMeasure = (dimensionOrMeasure) => isDimension(dimensionOrMeasure) || isMeasure(dimensionOrMeasure);\n\nconst getOperationObject = (operation, value) => ({\n operation,\n value: value ?? null,\n __embeddableVariableMeta: true,\n});\nconst Value = {\n noFilter: () => getOperationObject(\"NO_FILTER\"),\n of: (value) => getOperationObject(\"VALUE\", value),\n};\n\nconst UPDATE_VALUE_EVENT = \"embeddable:value:changed\";\nconst setValue = (triggerElement, value, componentId, eventName) => {\n const event = new CustomEvent(UPDATE_VALUE_EVENT, {\n bubbles: true,\n composed: true,\n detail: {\n componentId,\n value,\n eventName,\n },\n });\n triggerElement.dispatchEvent(event);\n};\n\n// Helper to get the bundleHash from window if available\nconst getBundleHash$1 = () => globalThis.__EMBEDDABLE_BUNDLE_HASH__ ?? null;\nconst defineType = (typeName, typeConfig) => {\n if (ALL_NATIVE_TYPES.includes(typeName)) {\n throw new Error(`Type ${typeName} is part of the nativeTypes and cannot be defined`, { cause: \"sdk\" });\n }\n const type = {\n __embeddableType: \"custom\",\n toString: () => typeName,\n typeConfig,\n };\n // Get the bundleHash from stored value or window\n const bundleHash = getBundleHash$1();\n globalThis.__EMBEDDABLE__ = globalThis.__EMBEDDABLE__ || {};\n const embeddable = bundleHash\n ? (globalThis.__EMBEDDABLE__[bundleHash] =\n globalThis.__EMBEDDABLE__[bundleHash] || {})\n : globalThis.__EMBEDDABLE__;\n embeddable.types = embeddable.types || {};\n // Preserve existing types by merging with new type\n embeddable.types = {\n ...embeddable.types,\n [typeName]: {\n name: typeName,\n ...typeConfig,\n },\n };\n return type;\n};\nconst STRING = \"string\";\nconst NUMBER = \"number\";\nconst BOOLEAN = \"boolean\";\nconst TIME = \"time\";\nconst TIME_RANGE = \"timeRange\";\nconst GRANULARITY = \"granularity\";\nconst DATASET = \"dataset\";\nconst MEASURE = \"measure\";\nconst DIMENSION = \"dimension\";\nconst DIMENSION_OR_MEASURE = \"dimensionOrMeasure\";\nconst DEFAULT_NATIVE_TYPES = [\n STRING,\n NUMBER,\n BOOLEAN,\n TIME,\n TIME_RANGE,\n GRANULARITY,\n];\nconst ALL_NATIVE_TYPES = [\n ...DEFAULT_NATIVE_TYPES,\n DATASET,\n MEASURE,\n DIMENSION,\n DIMENSION_OR_MEASURE,\n];\nconst MEASURE_TYPE_STRING = \"string\";\nconst MEASURE_TYPE_TIME = \"time\";\nconst MEASURE_TYPE_BOOLEAN = \"boolean\";\nconst MEASURE_TYPE_NUMBER = \"number\";\nconst MEASURE_TYPE_COUNT = \"count\";\nconst MEASURE_TYPE_COUNT_DISTINCT = \"count_distinct\";\nconst MEASURE_TYPE_COUNT_DISTINCT_APPROX = \"count_distinct_approx\";\nconst MEASURE_TYPE_SUM = \"sum\";\nconst MEASURE_TYPE_AVG = \"avg\";\nconst MEASURE_TYPE_MIN = \"min\";\nconst MEASURE_TYPE_MAX = \"max\";\nconst MEASURE_TYPES = [\n MEASURE_TYPE_STRING,\n MEASURE_TYPE_TIME,\n MEASURE_TYPE_BOOLEAN,\n MEASURE_TYPE_NUMBER,\n MEASURE_TYPE_COUNT,\n MEASURE_TYPE_COUNT_DISTINCT,\n MEASURE_TYPE_COUNT_DISTINCT_APPROX,\n MEASURE_TYPE_SUM,\n MEASURE_TYPE_AVG,\n MEASURE_TYPE_MIN,\n MEASURE_TYPE_MAX,\n];\nconst DIMENSION_TYPE_STRING = \"string\";\nconst DIMENSION_TYPE_NUMBER = \"number\";\nconst DIMENSION_TYPE_BOOLEAN = \"boolean\";\nconst DIMENSION_TYPE_GEO = \"geo\";\nconst DIMENSION_TYPE_TIME = \"time\";\nconst DIMENSION_TYPES = [\n DIMENSION_TYPE_STRING,\n DIMENSION_TYPE_NUMBER,\n DIMENSION_TYPE_BOOLEAN,\n DIMENSION_TYPE_GEO,\n DIMENSION_TYPE_TIME,\n];\nconst DIMENSION_OR_MEASURE_TYPES = [\n ...DIMENSION_TYPES,\n ...MEASURE_TYPES,\n];\n\n// Helper to get the bundleHash from window if available\n// Check if we have a bundleHash in the window\nconst getBundleHash = () => globalThis.__EMBEDDABLE_BUNDLE_HASH__ ?? null;\nconst defineOption = (type, option) => {\n // Get the bundleHash from stored value or window\n const bundleHash = getBundleHash();\n globalThis.__EMBEDDABLE__ ??= {};\n const embeddable = bundleHash\n ? (globalThis.__EMBEDDABLE__[bundleHash] ??= {})\n : globalThis.__EMBEDDABLE__;\n if (typeof type === \"string\") {\n // Handle native types\n embeddable.nativeTypes = embeddable.nativeTypes || {};\n embeddable.nativeTypes[type] = embeddable.nativeTypes[type] || {};\n embeddable.nativeTypes[type].options ??= [];\n embeddable.nativeTypes[type].options.push(option);\n }\n else {\n // Handle custom types\n const typeName = type.toString();\n if (!embeddable?.types?.[typeName])\n return;\n embeddable.types[typeName].options ??= [];\n embeddable.types[typeName].options.push(option);\n }\n};\n\nconst StringType = createBuiltInType(\"string\", {\n transform: (value) => value,\n optionLabel: (value) => Array.isArray(value)\n ? `[${value.map((v) => `\"${v}\"`).join(\",\")}]`\n : `\"${value}\"`,\n});\nconst NumberType = createBuiltInType(\"number\", {\n transform: (value) => Array.isArray(value) ? value : value ? Number(value) : value,\n optionLabel: (value) => Array.isArray(value)\n ? `[${value.join(\",\")}]`\n : (value?.toLocaleString(DEFAULT_LOCALE) ?? \"\"),\n});\nconst BooleanType = createBuiltInType(\"boolean\", {\n transform: (value) => value === \"true\" || value === true,\n optionLabel: (value) => (value ? \"true\" : \"false\"),\n});\nconst TimeType = createBuiltInType(\"time\", {\n transform: (value) => {\n const date = value?.date ? new Date(value.date) : undefined;\n const isValid = date && date.toString() !== \"Invalid Date\";\n return {\n date: isValid ? date : undefined,\n relativeTimeString: value?.relativeTimeString,\n };\n },\n optionLabel: (value) => {\n if (!value)\n return \"\";\n if (value?.date) {\n return (value.date?.toLocaleDateString(DEFAULT_LOCALE) ??\n value.date.toLocaleString());\n }\n return value.relativeTimeString;\n },\n});\nconst TimeRangeType = createBuiltInType(\"timeRange\", {\n transform: (value) => {\n // Return undefined instead of a null populated object\n if (!value)\n return undefined;\n const [from, to] = [value?.from, value?.to];\n const fromDate = new Date(from);\n const toDate = new Date(to);\n return {\n from: fromDate.toString() !== \"Invalid Date\" ? fromDate : undefined,\n to: toDate.toString() !== \"Invalid Date\" ? toDate : undefined,\n relativeTimeString: value?.relativeTimeString,\n };\n },\n optionLabel: (value) => {\n if (!value)\n return \"\";\n if (value?.from && value?.to) {\n return `${value.from?.toLocaleDateString(DEFAULT_LOCALE) ??\n value.from?.toLocaleString()},${value.to?.toLocaleDateString(DEFAULT_LOCALE) ??\n value.to?.toLocaleString()}`;\n }\n return value?.relativeTimeString;\n },\n});\nconst GranularityType = createBuiltInType(\"granularity\", {\n transform: (value) => value,\n optionLabel: (value) => value,\n});\nconst DatasetType = createBuiltInType(\"dataset\");\nconst MeasureType = createBuiltInType(\"measure\");\nconst DimensionType = createBuiltInType(\"dimension\");\nconst DimensionOrMeasureType = createBuiltInType(\"dimensionOrMeasure\");\n\nvar nativeTypes = /*#__PURE__*/Object.freeze({\n __proto__: null,\n BooleanType: BooleanType,\n DatasetType: DatasetType,\n DimensionOrMeasureType: DimensionOrMeasureType,\n DimensionType: DimensionType,\n GranularityType: GranularityType,\n MeasureType: MeasureType,\n NumberType: NumberType,\n StringType: StringType,\n TimeRangeType: TimeRangeType,\n TimeType: TimeType\n});\n\nconst defineTheme = (parentTheme, childTheme) => {\n return mergician(parentTheme, childTheme);\n};\n\nexport { ALL_NATIVE_TYPES, DEFAULT_NATIVE_TYPES, DIMENSION_OR_MEASURE_TYPES, DIMENSION_TYPES, FilterOperator, MEASURE_TYPES, Value, defineOption, defineTheme, defineType, isDimension, isDimensionOrMeasure, isLoadDataParams, isMeasure, isTimeDimension, loadData, nativeTypes, setValue };\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n outline: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n },\n filled: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n stroke: \"none\"\n }\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\n\nconst createReactComponent = (type, iconName, iconNamePascal, iconNode) => {\n const Component = forwardRef(\n ({ color = \"currentColor\", size = 24, stroke = 2, title, className, children, ...rest }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes[type],\n width: size,\n height: size,\n className: [`tabler-icon`, `tabler-icon-${iconName}`, className].join(\" \"),\n ...type === \"filled\" ? {\n fill: color\n } : {\n strokeWidth: stroke,\n stroke: color\n },\n ...rest\n },\n [\n title && createElement(\"title\", { key: \"svg-title\" }, title),\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n );\n Component.displayName = `${iconNamePascal}`;\n return Component;\n};\n\nexport { createReactComponent as default };\n//# sourceMappingURL=createReactComponent.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M15 6l-6 6l6 6\", \"key\": \"svg-0\" }]];\nconst IconChevronLeft = createReactComponent(\"outline\", \"chevron-left\", \"ChevronLeft\", __iconNode);\n\nexport { __iconNode, IconChevronLeft as default };\n//# sourceMappingURL=IconChevronLeft.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M9 6l6 6l-6 6\", \"key\": \"svg-0\" }]];\nconst IconChevronRight = createReactComponent(\"outline\", \"chevron-right\", \"ChevronRight\", __iconNode);\n\nexport { __iconNode, IconChevronRight as default };\n//# sourceMappingURL=IconChevronRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M11 7l-5 5l5 5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M17 7l-5 5l5 5\", \"key\": \"svg-1\" }]];\nconst IconChevronsLeft = createReactComponent(\"outline\", \"chevrons-left\", \"ChevronsLeft\", __iconNode);\n\nexport { __iconNode, IconChevronsLeft as default };\n//# sourceMappingURL=IconChevronsLeft.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 7l5 5l-5 5\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M13 7l5 5l-5 5\", \"key\": \"svg-1\" }]];\nconst IconChevronsRight = createReactComponent(\"outline\", \"chevrons-right\", \"ChevronsRight\", __iconNode);\n\nexport { __iconNode, IconChevronsRight as default };\n//# sourceMappingURL=IconChevronsRight.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1\", \"key\": \"svg-1\" }]];\nconst IconCopy = createReactComponent(\"outline\", \"copy\", \"Copy\", __iconNode);\n\nexport { __iconNode, IconCopy as default };\n//# sourceMappingURL=IconCopy.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 3a9 9 0 1 0 9 9\", \"key\": \"svg-0\" }]];\nconst IconLoader2 = createReactComponent(\"outline\", \"loader-2\", \"Loader2\", __iconNode);\n\nexport { __iconNode, IconLoader2 as default };\n//# sourceMappingURL=IconLoader2.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18 6l-12 12\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M6 6l12 12\", \"key\": \"svg-1\" }]];\nconst IconX = createReactComponent(\"outline\", \"x\", \"X\", __iconNode);\n\nexport { __iconNode, IconX as default };\n//# sourceMappingURL=IconX.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18 9c.852 0 1.297 .986 .783 1.623l-.076 .084l-6 6a1 1 0 0 1 -1.32 .083l-.094 -.083l-6 -6l-.083 -.094l-.054 -.077l-.054 -.096l-.017 -.036l-.027 -.067l-.032 -.108l-.01 -.053l-.01 -.06l-.004 -.057v-.118l.005 -.058l.009 -.06l.01 -.052l.032 -.108l.027 -.067l.07 -.132l.065 -.09l.073 -.081l.094 -.083l.077 -.054l.096 -.054l.036 -.017l.067 -.027l.108 -.032l.053 -.01l.06 -.01l.057 -.004l12.059 -.002z\", \"key\": \"svg-0\" }]];\nconst IconCaretDownFilled = createReactComponent(\"filled\", \"caret-down-filled\", \"CaretDownFilled\", __iconNode);\n\nexport { __iconNode, IconCaretDownFilled as default };\n//# sourceMappingURL=IconCaretDownFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M11.293 3.293a1 1 0 0 1 1.414 0l6 6a.95 .95 0 0 1 .073 .082l.006 .008l.016 .022l.042 .059l.009 .015l.007 .01l.014 .027l.024 .044l.007 .017l.01 .02l.012 .032l.015 .034l.007 .025l.008 .02l.005 .026l.012 .037l.004 .028l.006 .025l.003 .026l.006 .033l.002 .03l.003 .028v.026l.002 .033l-.002 .033v.026l-.003 .026l-.002 .032l-.005 .029l-.004 .03l-.006 .024l-.004 .03l-.012 .035l-.005 .027l-.008 .019l-.007 .026l-.015 .033l-.012 .034l-.01 .018l-.007 .018l-.024 .043l-.014 .028l-.007 .009l-.009 .016l-.042 .058l-.012 .019l-.004 .003l-.006 .01a1.006 1.006 0 0 1 -.155 .154l-.009 .006l-.022 .016l-.058 .042l-.016 .009l-.009 .007l-.028 .014l-.043 .024l-.018 .007l-.018 .01l-.034 .012l-.033 .015l-.024 .006l-.021 .009l-.027 .005l-.036 .012l-.029 .004l-.024 .006l-.028 .003l-.031 .006l-.032 .002l-.026 .003h-.026l-.033 .002h-12c-.89 0 -1.337 -1.077 -.707 -1.707l6 -6z\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M18 13l.033 .002h.026l.026 .003l.032 .002l.031 .006l.028 .003l.024 .006l.03 .004l.035 .012l.027 .005l.019 .008l.026 .007l.033 .015l.034 .012l.018 .01l.018 .007l.043 .024l.028 .014l.009 .007l.016 .009l.051 .037l.026 .017l.003 .004l.01 .006a.982 .982 0 0 1 .154 .155l.006 .009l.015 .02l.043 .06l.009 .016l.007 .009l.014 .028l.024 .043l.005 .013l.012 .023l.012 .034l.015 .033l.007 .026l.008 .02l.005 .026l.012 .036l.004 .029l.006 .024l.003 .028l.006 .031l.002 .032l.003 .026v.026l.002 .033l-.002 .033v.026l-.003 .026l-.002 .032l-.006 .031l-.003 .028l-.006 .024l-.004 .03l-.012 .035l-.005 .027l-.008 .019l-.007 .026l-.015 .033l-.012 .034l-.01 .018l-.007 .018l-.024 .043l-.014 .028l-.007 .009l-.009 .016l-.042 .058l-.012 .019l-.004 .003l-.006 .01l-.073 .081l-6 6a1 1 0 0 1 -1.414 0l-6 -6c-.63 -.63 -.184 -1.707 .707 -1.707h12z\", \"key\": \"svg-1\" }]];\nconst IconCaretUpDownFilled = createReactComponent(\"filled\", \"caret-up-down-filled\", \"CaretUpDownFilled\", __iconNode);\n\nexport { __iconNode, IconCaretUpDownFilled as default };\n//# sourceMappingURL=IconCaretUpDownFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M11.293 7.293a1 1 0 0 1 1.32 -.083l.094 .083l6 6l.083 .094l.054 .077l.054 .096l.017 .036l.027 .067l.032 .108l.01 .053l.01 .06l.004 .057l.002 .059l-.002 .059l-.005 .058l-.009 .06l-.01 .052l-.032 .108l-.027 .067l-.07 .132l-.065 .09l-.073 .081l-.094 .083l-.077 .054l-.096 .054l-.036 .017l-.067 .027l-.108 .032l-.053 .01l-.06 .01l-.057 .004l-.059 .002h-12c-.852 0 -1.297 -.986 -.783 -1.623l.076 -.084l6 -6z\", \"key\": \"svg-0\" }]];\nconst IconCaretUpFilled = createReactComponent(\"filled\", \"caret-up-filled\", \"CaretUpFilled\", __iconNode);\n\nexport { __iconNode, IconCaretUpFilled as default };\n//# sourceMappingURL=IconCaretUpFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18.333 6a3.667 3.667 0 0 1 3.667 3.667v8.666a3.667 3.667 0 0 1 -3.667 3.667h-8.666a3.667 3.667 0 0 1 -3.667 -3.667v-8.666a3.667 3.667 0 0 1 3.667 -3.667zm-3.333 -4c1.094 0 1.828 .533 2.374 1.514a1 1 0 1 1 -1.748 .972c-.221 -.398 -.342 -.486 -.626 -.486h-10c-.548 0 -1 .452 -1 1v9.998c0 .32 .154 .618 .407 .805l.1 .065a1 1 0 1 1 -.99 1.738a3 3 0 0 1 -1.517 -2.606v-10c0 -1.652 1.348 -3 3 -3zm1.293 9.293l-3.293 3.292l-1.293 -1.292a1 1 0 0 0 -1.414 1.414l2 2a1 1 0 0 0 1.414 0l4 -4a1 1 0 0 0 -1.414 -1.414\", \"key\": \"svg-0\" }]];\nconst IconCopyCheckFilled = createReactComponent(\"filled\", \"copy-check-filled\", \"CopyCheckFilled\", __iconNode);\n\nexport { __iconNode, IconCopyCheckFilled as default };\n//# sourceMappingURL=IconCopyCheckFilled.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React from 'react';\nimport styles from './Card.module.css';\nimport clsx from 'clsx';\n\ntype CardProps = React.HTMLAttributes<HTMLDivElement> & {\n children?: React.ReactNode;\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div className={clsx(styles.card, className)} ref={ref} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCard.displayName = 'Card';\n\ntype CardHeaderProps = {\n title?: string;\n subtitle?: string;\n rightContent?: React.ReactNode;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle, rightContent }) => {\n if (!title && !subtitle && !rightContent) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n <div className={styles.leftContent}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n {rightContent}\n </div>\n );\n};\n\ntype CardContentProps = {\n children: React.ReactNode;\n};\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ children }, ref) => {\n return (\n <div className={styles.cardContent} ref={ref}>\n {children}\n </div>\n );\n },\n);\n\nCardContent.displayName = 'CardContent';\n","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: TablerIcon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconX, TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: TablerIcon;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import clsx from 'clsx';\nimport styles from './FieldFeedback.module.css';\nimport { FC } from 'react';\n\nexport type FieldFeedbackProps = {\n message: string;\n variant?: 'error';\n className?: string;\n};\n\nexport const FieldFeedback: FC<FieldFeedbackProps> = ({ message, variant, className }) => {\n return (\n <p className={clsx(styles.fieldFeedback, variant && styles[variant], className)}>{message}</p>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldHeader.module.css';\n\nexport type FieldHeaderProps = {\n className?: string;\n label?: string;\n required?: boolean;\n requiredLabel?: string;\n};\n\nexport const FieldHeader = ({\n label,\n required,\n requiredLabel = 'Required',\n className,\n}: FieldHeaderProps) => {\n if (!label && !required) {\n return null;\n }\n\n return (\n <label className={clsx(styles.fieldHeader, className)}>\n {label}\n {required && <span>{requiredLabel}</span>}\n </label>\n );\n};\n","import { IconX, TablerIcon } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\n\nexport const TextField = forwardRef<HTMLInputElement, InputFieldProps>(\n ({ value = '', placeholder = 'Enter text', maxLength, error, errorMessage, ...props }, ref) => {\n return (\n <>\n <InputField\n value={value}\n placeholder={placeholder}\n ref={ref}\n maxLength={maxLength}\n clearable\n error={error}\n errorMessage={errorMessage}\n {...props}\n />\n {maxLength && <FieldFeedback message={`${value?.length}/${maxLength} Characters`} />}\n </>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\n\ntype NumberFieldProps = Omit<InputFieldProps, 'value' | 'onChange'> & {\n value?: number | null;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (value: number | null) => void;\n};\n\nexport const NumberField = forwardRef<HTMLInputElement, NumberFieldProps>(\n (\n {\n value = null,\n placeholder = 'Enter number',\n onChange,\n error,\n errorMessage,\n clearable,\n ...props\n },\n ref,\n ) => {\n const handleChange = (value: string) => {\n if (value === '') {\n onChange?.(null);\n return;\n }\n\n const numericValue = Number(value);\n if (!isNaN(numericValue) && isFinite(numericValue)) {\n onChange?.(numericValue);\n }\n };\n\n return (\n <InputField\n {...props}\n value={value?.toString() || ''}\n placeholder={placeholder}\n onChange={handleChange}\n type=\"number\"\n clearable={clearable}\n error={error}\n errorMessage={errorMessage}\n ref={ref}\n />\n );\n },\n);\n\nNumberField.displayName = 'NumberField';\n","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , vScale , _parsed } = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = round1(chart.height * pixelRatio);\n const deviceWidth = round1(chart.width * pixelRatio);\n chart.height = round1(chart.height);\n chart.width = round1(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nfunction getDatasetClipArea(chart, meta) {\n const clip = meta._clip;\n if (clip.disabled) {\n return false;\n }\n const area = getDatasetArea(meta, chart.chartArea);\n return {\n left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n };\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, getStyle as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, distanceBetweenPoints as aF, noop as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, Ticks as aM, log10 as aN, _longestText as aO, _filterBetween as aP, _lookup as aQ, isPatternOrGradient as aR, getHoverColor as aS, clone as aT, _merger as aU, _mergerIf as aV, _deprecated as aW, _splitKey as aX, toFontString as aY, splineCurve as aZ, splineCurveMonotone as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, getDatasetClipArea as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _normalizeAngle as al, _readValueToProps as am, _updateBezierControlPoints as an, _computeSegments as ao, _boundSegments as ap, _steppedInterpolation as aq, _bezierInterpolation as ar, _pointInLine as as, _steppedLineTo as at, _bezierCurveTo as au, drawPoint as av, addRoundedRectPath as aw, toTRBL as ax, toTRBLCorners as ay, _boundSegment as az, isArray as b, fontString as b0, toLineHeight as b1, PITAU as b2, INFINITY as b3, RAD_PER_DEG as b4, QUARTER_PI as b5, TWO_THIRDS_PI as b6, _angleDiff as b7, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.dataset.js.map\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as getDatasetClipArea, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _normalizeAngle, am as _readValueToProps, an as _updateBezierControlPoints, ao as _computeSegments, ap as _boundSegments, aq as _steppedInterpolation, ar as _bezierInterpolation, as as _pointInLine, at as _steppedLineTo, au as _bezierCurveTo, av as drawPoint, aw as addRoundedRectPath, ax as toTRBL, ay as toTRBLCorners, az as _boundSegment, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as distanceBetweenPoints, aG as noop, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as Ticks, aN as log10, aO as _longestText, aP as _filterBetween, aQ as _lookup } from './chunks/helpers.dataset.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n let found = false;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n if (!found && !options.all) {\n return 0;\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const { iScale , vScale } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getAxisCount() {\n return this._getAxis().length;\n }\n getFirstScaleIdForIndexAxis() {\n const scales = this.chart.scales;\n const indexScaleId = this.chart.options.indexAxis;\n return Object.keys(scales).filter((key)=>scales[key].axis === indexScaleId).shift();\n }\n _getAxis() {\n const axis = {};\n const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n for (const dataset of this.chart.data.datasets){\n axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;\n }\n return Object.keys(axis);\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n const axisCount = this._getAxisCount();\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n const { labels: { pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n if (data.labels.length && data.datasets.length) {\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !chart.getDataVisibility(i),\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: style.borderWidth,\n strokeStyle: style.borderColor,\n textAlign: textAlign,\n pointStyle: pointStyle,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const { vScale } = controller._cachedMeta;\n const { _parsed } = metaset;\n const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.lo -= Math.max(0, distanceToDefinedLo);\n const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = undefined;\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n if (this._init === undefined) {\n return;\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n this._init = undefined;\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.5.1\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n const clip = getDatasetClipArea(this, meta);\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (clip) {\n clipArea(ctx, clip);\n }\n meta.controller.draw();\n if (clip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipSelf(ctx, element, endAngle) {\n const { startAngle , x , y , outerRadius , innerRadius , options } = element;\n const { borderWidth , borderJoinStyle } = options;\n const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.beginPath();\n ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n if (innerRadius > 0) {\n const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n } else {\n const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n if (borderJoinStyle === 'round') {\n ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n } else if (borderJoinStyle === 'bevel') {\n const r = 2 * clipWidth * clipWidth;\n const endX = -r * Math.cos(endAngle + PI / 2) + x;\n const endY = -r * Math.sin(endAngle + PI / 2) + y;\n const startX = r * Math.cos(startAngle + PI / 2) + x;\n const startY = r * Math.sin(startAngle + PI / 2) + y;\n ctx.lineTo(endX, endY);\n ctx.lineTo(startX, startY);\n }\n }\n ctx.closePath();\n ctx.moveTo(0, 0);\n ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.clip('evenodd');\n}\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n clipSelf(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n selfJoin: false\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { chart , index , line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n const meta = chart.getDatasetMeta(index);\n const clip = getDatasetClipArea(chart, meta);\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis,\n clip\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale , clip } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n let fillColor = below;\n if (below !== above) {\n if (property === 'x') {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property,\n clip\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n } else if (property === 'y') {\n clipHorizontal(ctx, target, area.left);\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property,\n clip\n });\n ctx.restore();\n ctx.save();\n clipHorizontal(ctx, target, area.right);\n fillColor = above;\n }\n }\n fill(ctx, {\n line,\n target,\n color: fillColor,\n scale,\n property,\n clip\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction clipHorizontal(ctx, target, clipX) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(clipX, firstPoint.y);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(clipX, lastPoint.y);\n }\n }\n ctx.lineTo(clipX, target.first().y);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale , clip } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, clip, bounds) {\n const chartArea = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x' || property === 'y') {\n let left, top, right, bottom;\n if (property === 'x') {\n left = start;\n top = chartArea.top;\n right = end;\n bottom = chartArea.bottom;\n } else {\n left = chartArea.left;\n top = start;\n right = chartArea.right;\n bottom = end;\n }\n ctx.beginPath();\n if (clip) {\n left = Math.max(left, clip.left);\n right = Math.min(right, clip.right);\n top = Math.max(top, clip.top);\n bottom = Math.min(bottom, clip.bottom);\n }\n ctx.rect(left, top, right - left, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import React, { forwardRef, useRef, useEffect } from 'react';\nimport { Chart as Chart$1, LineController, BarController, RadarController, DoughnutController, PolarAreaController, BubbleController, PieController, ScatterController } from 'chart.js';\n\nconst defaultDatasetIdKey = 'label';\nfunction reforwardRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\nfunction setOptions(chart, nextOptions) {\n const options = chart.options;\n if (options && nextOptions) {\n Object.assign(options, nextOptions);\n }\n}\nfunction setLabels(currentData, nextLabels) {\n currentData.labels = nextLabels;\n}\nfunction setDatasets(currentData, nextDatasets) {\n let datasetIdKey = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : defaultDatasetIdKey;\n const addedDatasets = [];\n currentData.datasets = nextDatasets.map((nextDataset)=>{\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);\n // There is no original to update, so simply add new one\n if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n return {\n ...nextDataset\n };\n }\n addedDatasets.push(currentDataset);\n Object.assign(currentDataset, nextDataset);\n return currentDataset;\n });\n}\nfunction cloneData(data) {\n let datasetIdKey = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : defaultDatasetIdKey;\n const nextData = {\n labels: [],\n datasets: []\n };\n setLabels(nextData, data.labels);\n setDatasets(nextData, data.datasets, datasetIdKey);\n return nextData;\n}\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getDatasetAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'dataset', {\n intersect: true\n }, false);\n}\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'nearest', {\n intersect: true\n }, false);\n}\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementsAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'index', {\n intersect: true\n }, false);\n}\n\nfunction ChartComponent(props, ref) {\n const { height = 150, width = 300, redraw = false, datasetIdKey, type, data, options, plugins = [], fallbackContent, updateMode, ...canvasProps } = props;\n const canvasRef = useRef(null);\n const chartRef = useRef(null);\n const renderChart = ()=>{\n if (!canvasRef.current) return;\n chartRef.current = new Chart$1(canvasRef.current, {\n type,\n data: cloneData(data, datasetIdKey),\n options: options && {\n ...options\n },\n plugins\n });\n reforwardRef(ref, chartRef.current);\n };\n const destroyChart = ()=>{\n reforwardRef(ref, null);\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n };\n useEffect(()=>{\n if (!redraw && chartRef.current && options) {\n setOptions(chartRef.current, options);\n }\n }, [\n redraw,\n options\n ]);\n useEffect(()=>{\n if (!redraw && chartRef.current) {\n setLabels(chartRef.current.config.data, data.labels);\n }\n }, [\n redraw,\n data.labels\n ]);\n useEffect(()=>{\n if (!redraw && chartRef.current && data.datasets) {\n setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);\n }\n }, [\n redraw,\n data.datasets\n ]);\n useEffect(()=>{\n if (!chartRef.current) return;\n if (redraw) {\n destroyChart();\n setTimeout(renderChart);\n } else {\n chartRef.current.update(updateMode);\n }\n }, [\n redraw,\n options,\n data.labels,\n data.datasets,\n updateMode\n ]);\n useEffect(()=>{\n if (!chartRef.current) return;\n destroyChart();\n setTimeout(renderChart);\n }, [\n type\n ]);\n useEffect(()=>{\n renderChart();\n return ()=>destroyChart();\n }, []);\n return /*#__PURE__*/ React.createElement(\"canvas\", {\n ref: canvasRef,\n role: \"img\",\n height: height,\n width: width,\n ...canvasProps\n }, fallbackContent);\n}\nconst Chart = /*#__PURE__*/ forwardRef(ChartComponent);\n\nfunction createTypedChart(type, registerables) {\n Chart$1.register(registerables);\n return /*#__PURE__*/ forwardRef((props, ref)=>/*#__PURE__*/ React.createElement(Chart, {\n ...props,\n ref: ref,\n type: type\n }));\n}\nconst Line = /* #__PURE__ */ createTypedChart('line', LineController);\nconst Bar = /* #__PURE__ */ createTypedChart('bar', BarController);\nconst Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);\nconst Doughnut = /* #__PURE__ */ createTypedChart('doughnut', DoughnutController);\nconst PolarArea = /* #__PURE__ */ createTypedChart('polarArea', PolarAreaController);\nconst Bubble = /* #__PURE__ */ createTypedChart('bubble', BubbleController);\nconst Pie = /* #__PURE__ */ createTypedChart('pie', PieController);\nconst Scatter = /* #__PURE__ */ createTypedChart('scatter', ScatterController);\n\nexport { Bar, Bubble, Chart, Doughnut, Line, Pie, PolarArea, Radar, Scatter, getDatasetAtEvent, getElementAtEvent, getElementsAtEvent };\n//# sourceMappingURL=index.js.map\n","import { ChartJSOrUndefined } from 'react-chartjs-2/dist/types';\n\nexport const getSegmentIndexClicked = (\n event: React.MouseEvent<HTMLCanvasElement>,\n chartRef: React.RefObject<ChartJSOrUndefined | null>,\n): number | undefined => {\n const chart = chartRef.current;\n\n if (!chart) return undefined;\n\n const points = chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false,\n );\n\n return points[0]?.index;\n};\n","import { StylesKeys } from './styles.constants';\n\n/**\n * Attempts to interpret a CSS variable as a number (for lengths)\n * or a string (for colors, etc.).\n *\n * Examples:\n * --var: 2rem -> returns number (px)\n * --var: 16px -> returns number\n * --var: 3 -> returns number (parsed float)\n * --var: #3498db -> returns string\n * --var: rgba(52, 152, 219, 0.8) -> returns string\n */\nconst numericRegex = /^-?\\d+(\\.\\d+)?$/;\n\nconst getStyleValue = (variableName: StylesKeys): string => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n const computedStyle = getComputedStyle(document.documentElement);\n return computedStyle.getPropertyValue(variableName).trim();\n};\n\nexport const getStyle = (variableName: StylesKeys, fallbackValue?: string): string => {\n const rawValue = getStyleValue(variableName);\n if (!rawValue) return fallbackValue ?? rawValue;\n\n // Colors\n const firstChar = rawValue.charAt(0);\n if (firstChar === '#' || rawValue.startsWith('rgb(') || rawValue.startsWith('rgba(')) {\n return rawValue;\n }\n\n // Others like font-family\n return rawValue;\n};\n\nexport const getStyleNumber = (\n variableName: StylesKeys,\n fallbackValue?: string,\n): number | undefined => {\n const rawValue = getStyleValue(variableName) || fallbackValue;\n\n if (!rawValue) return undefined;\n\n const numericValue = parseFloat(rawValue);\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n // Px\n if (rawValue.slice(-2) === 'px') {\n return numericValue;\n }\n\n // Rem/Em\n const unit3 = rawValue.slice(-3);\n if (unit3 === 'rem') {\n return numericValue * rootFontSize;\n }\n\n // Pure number\n if (numericRegex.test(rawValue)) {\n return numericValue;\n }\n return undefined;\n};\n","import { getStyle } from '../../styles/styles.utils';\n\nexport const chartColors: string[] = [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--2'),\n getStyle('--em-sem-chart-color--3'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--5'),\n getStyle('--em-sem-chart-color--6'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--8'),\n getStyle('--em-sem-chart-color--9'),\n getStyle('--em-sem-chart-color--10'),\n];\n\nexport const chartContrastColors: string[] = [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--10'),\n];\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.25rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.125rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const chartjsOptions: Partial<ChartOptions> = {\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n};\n","import { CartesianTickOptions, ChartOptions, GridLineOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { chartjsOptions } from './chartjs.constants';\n\nexport const chartjsAxisOptionsPlugins: Partial<ChartOptions['plugins']> = {\n datalabels: {\n labels: {\n total: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n value: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n};\n\nexport const getChartjsAxisOptionsScalesTicksDefault = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksMuted = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color--muted', '#5C5C66'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesTitle = (): any => ({\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-grid-title-font-weight', '700'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesGrid = (): Partial<GridLineOptions> => ({\n color: getStyle('--em-chart-grid-line-color--light', '#EDEDF1'),\n lineWidth: getStyleNumber('--em-chart-grid-line-width--thin', '0.0625rem'),\n});\n\nexport const chartjsAxisOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n },\n y: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n },\n};\n\nexport const chartjsAxisOptions: Partial<ChartOptions> = mergician(chartjsOptions, {\n plugins: chartjsAxisOptionsPlugins,\n scales: chartjsAxisOptionsScales,\n});\n\nexport const chartjsAxisOptionsLayoutPadding: number = 30;\n\nfunction isMixedValues(values: number[]): boolean {\n const hasPos = values.some((v) => v > 0);\n const hasNeg = values.some((v) => v < 0);\n return hasPos && hasNeg;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesGridColor = (ctx: any) => {\n if (ctx.tick.value === 0) {\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartData, ChartOptions } from 'chart.js';\nimport { chartContrastColors } from '../charts.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n grid: {\n display: true,\n color: getChartjsAxisOptionsScalesGridColor,\n },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: { display: false },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-barchart-border-raidus', '0.375rem'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(chartjsAxisOptions, baseBarChartOptions, verticalHorizontalOptions);\n};\n","/*!\n * chartjs-plugin-datalabels v2.2.0\n * https://chartjs-plugin-datalabels.netlify.app\n * (c) 2017-2022 chartjs-plugin-datalabels contributors\n * Released under the MIT license\n */\nimport { isNullOrUndef, merge, toFont, resolve, toPadding, valueOrDefault, callback, isObject, each } from 'chart.js/helpers';\nimport { defaults as defaults$1, ArcElement, PointElement, BarElement } from 'chart.js';\n\nvar devicePixelRatio = (function() {\n if (typeof window !== 'undefined') {\n if (window.devicePixelRatio) {\n return window.devicePixelRatio;\n }\n\n // devicePixelRatio is undefined on IE10\n // https://stackoverflow.com/a/20204180/8837887\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/85\n var screen = window.screen;\n if (screen) {\n return (screen.deviceXDPI || 1) / (screen.logicalXDPI || 1);\n }\n }\n\n return 1;\n}());\n\nvar utils = {\n // @todo move this in Chart.helpers.toTextLines\n toTextLines: function(inputs) {\n var lines = [];\n var input;\n\n inputs = [].concat(inputs);\n while (inputs.length) {\n input = inputs.pop();\n if (typeof input === 'string') {\n lines.unshift.apply(lines, input.split('\\n'));\n } else if (Array.isArray(input)) {\n inputs.push.apply(inputs, input);\n } else if (!isNullOrUndef(inputs)) {\n lines.unshift('' + input);\n }\n }\n\n return lines;\n },\n\n // @todo move this in Chart.helpers.canvas.textSize\n // @todo cache calls of measureText if font doesn't change?!\n textSize: function(ctx, lines, font) {\n var items = [].concat(lines);\n var ilen = items.length;\n var prev = ctx.font;\n var width = 0;\n var i;\n\n ctx.font = font.string;\n\n for (i = 0; i < ilen; ++i) {\n width = Math.max(ctx.measureText(items[i]).width, width);\n }\n\n ctx.font = prev;\n\n return {\n height: ilen * font.lineHeight,\n width: width\n };\n },\n\n /**\n * Returns value bounded by min and max. This is equivalent to max(min, min(value, max)).\n * @todo move this method in Chart.helpers.bound\n * https://doc.qt.io/qt-5/qtglobal.html#qBound\n */\n bound: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Returns an array of pair [value, state] where state is:\n * * -1: value is only in a0 (removed)\n * * 1: value is only in a1 (added)\n */\n arrayDiff: function(a0, a1) {\n var prev = a0.slice();\n var updates = [];\n var i, j, ilen, v;\n\n for (i = 0, ilen = a1.length; i < ilen; ++i) {\n v = a1[i];\n j = prev.indexOf(v);\n\n if (j === -1) {\n updates.push([v, 1]);\n } else {\n prev.splice(j, 1);\n }\n }\n\n for (i = 0, ilen = prev.length; i < ilen; ++i) {\n updates.push([prev[i], -1]);\n }\n\n return updates;\n },\n\n /**\n * https://github.com/chartjs/chartjs-plugin-datalabels/issues/70\n */\n rasterize: function(v) {\n return Math.round(v * devicePixelRatio) / devicePixelRatio;\n }\n};\n\nfunction orient(point, origin) {\n var x0 = origin.x;\n var y0 = origin.y;\n\n if (x0 === null) {\n return {x: 0, y: -1};\n }\n if (y0 === null) {\n return {x: 1, y: 0};\n }\n\n var dx = point.x - x0;\n var dy = point.y - y0;\n var ln = Math.sqrt(dx * dx + dy * dy);\n\n return {\n x: ln ? dx / ln : 0,\n y: ln ? dy / ln : -1\n };\n}\n\nfunction aligned(x, y, vx, vy, align) {\n switch (align) {\n case 'center':\n vx = vy = 0;\n break;\n case 'bottom':\n vx = 0;\n vy = 1;\n break;\n case 'right':\n vx = 1;\n vy = 0;\n break;\n case 'left':\n vx = -1;\n vy = 0;\n break;\n case 'top':\n vx = 0;\n vy = -1;\n break;\n case 'start':\n vx = -vx;\n vy = -vy;\n break;\n case 'end':\n // keep natural orientation\n break;\n default:\n // clockwise rotation (in degree)\n align *= (Math.PI / 180);\n vx = Math.cos(align);\n vy = Math.sin(align);\n break;\n }\n\n return {\n x: x,\n y: y,\n vx: vx,\n vy: vy\n };\n}\n\n// Line clipping (Cohen–Sutherland algorithm)\n// https://en.wikipedia.org/wiki/Cohen–Sutherland_algorithm\n\nvar R_INSIDE = 0;\nvar R_LEFT = 1;\nvar R_RIGHT = 2;\nvar R_BOTTOM = 4;\nvar R_TOP = 8;\n\nfunction region(x, y, rect) {\n var res = R_INSIDE;\n\n if (x < rect.left) {\n res |= R_LEFT;\n } else if (x > rect.right) {\n res |= R_RIGHT;\n }\n if (y < rect.top) {\n res |= R_TOP;\n } else if (y > rect.bottom) {\n res |= R_BOTTOM;\n }\n\n return res;\n}\n\nfunction clipped(segment, area) {\n var x0 = segment.x0;\n var y0 = segment.y0;\n var x1 = segment.x1;\n var y1 = segment.y1;\n var r0 = region(x0, y0, area);\n var r1 = region(x1, y1, area);\n var r, x, y;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!(r0 | r1) || (r0 & r1)) {\n // both points inside or on the same side: no clipping\n break;\n }\n\n // at least one point is outside\n r = r0 || r1;\n\n if (r & R_TOP) {\n x = x0 + (x1 - x0) * (area.top - y0) / (y1 - y0);\n y = area.top;\n } else if (r & R_BOTTOM) {\n x = x0 + (x1 - x0) * (area.bottom - y0) / (y1 - y0);\n y = area.bottom;\n } else if (r & R_RIGHT) {\n y = y0 + (y1 - y0) * (area.right - x0) / (x1 - x0);\n x = area.right;\n } else if (r & R_LEFT) {\n y = y0 + (y1 - y0) * (area.left - x0) / (x1 - x0);\n x = area.left;\n }\n\n if (r === r0) {\n x0 = x;\n y0 = y;\n r0 = region(x0, y0, area);\n } else {\n x1 = x;\n y1 = y;\n r1 = region(x1, y1, area);\n }\n }\n\n return {\n x0: x0,\n x1: x1,\n y0: y0,\n y1: y1\n };\n}\n\nfunction compute$1(range, config) {\n var anchor = config.anchor;\n var segment = range;\n var x, y;\n\n if (config.clamp) {\n segment = clipped(segment, config.area);\n }\n\n if (anchor === 'start') {\n x = segment.x0;\n y = segment.y0;\n } else if (anchor === 'end') {\n x = segment.x1;\n y = segment.y1;\n } else {\n x = (segment.x0 + segment.x1) / 2;\n y = (segment.y0 + segment.y1) / 2;\n }\n\n return aligned(x, y, range.vx, range.vy, config.align);\n}\n\nvar positioners = {\n arc: function(el, config) {\n var angle = (el.startAngle + el.endAngle) / 2;\n var vx = Math.cos(angle);\n var vy = Math.sin(angle);\n var r0 = el.innerRadius;\n var r1 = el.outerRadius;\n\n return compute$1({\n x0: el.x + vx * r0,\n y0: el.y + vy * r0,\n x1: el.x + vx * r1,\n y1: el.y + vy * r1,\n vx: vx,\n vy: vy\n }, config);\n },\n\n point: function(el, config) {\n var v = orient(el, config.origin);\n var rx = v.x * el.options.radius;\n var ry = v.y * el.options.radius;\n\n return compute$1({\n x0: el.x - rx,\n y0: el.y - ry,\n x1: el.x + rx,\n y1: el.y + ry,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n bar: function(el, config) {\n var v = orient(el, config.origin);\n var x = el.x;\n var y = el.y;\n var sx = 0;\n var sy = 0;\n\n if (el.horizontal) {\n x = Math.min(el.x, el.base);\n sx = Math.abs(el.base - el.x);\n } else {\n y = Math.min(el.y, el.base);\n sy = Math.abs(el.base - el.y);\n }\n\n return compute$1({\n x0: x,\n y0: y + sy,\n x1: x + sx,\n y1: y,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n fallback: function(el, config) {\n var v = orient(el, config.origin);\n\n return compute$1({\n x0: el.x,\n y0: el.y,\n x1: el.x + (el.width || 0),\n y1: el.y + (el.height || 0),\n vx: v.x,\n vy: v.y\n }, config);\n }\n};\n\nvar rasterize = utils.rasterize;\n\nfunction boundingRects(model) {\n var borderWidth = model.borderWidth || 0;\n var padding = model.padding;\n var th = model.size.height;\n var tw = model.size.width;\n var tx = -tw / 2;\n var ty = -th / 2;\n\n return {\n frame: {\n x: tx - padding.left - borderWidth,\n y: ty - padding.top - borderWidth,\n w: tw + padding.width + borderWidth * 2,\n h: th + padding.height + borderWidth * 2\n },\n text: {\n x: tx,\n y: ty,\n w: tw,\n h: th\n }\n };\n}\n\nfunction getScaleOrigin(el, context) {\n var scale = context.chart.getDatasetMeta(context.datasetIndex).vScale;\n\n if (!scale) {\n return null;\n }\n\n if (scale.xCenter !== undefined && scale.yCenter !== undefined) {\n return {x: scale.xCenter, y: scale.yCenter};\n }\n\n var pixel = scale.getBasePixel();\n return el.horizontal ?\n {x: pixel, y: null} :\n {x: null, y: pixel};\n}\n\nfunction getPositioner(el) {\n if (el instanceof ArcElement) {\n return positioners.arc;\n }\n if (el instanceof PointElement) {\n return positioners.point;\n }\n if (el instanceof BarElement) {\n return positioners.bar;\n }\n return positioners.fallback;\n}\n\nfunction drawRoundedRect(ctx, x, y, w, h, radius) {\n var HALF_PI = Math.PI / 2;\n\n if (radius) {\n var r = Math.min(radius, h / 2, w / 2);\n var left = x + r;\n var top = y + r;\n var right = x + w - r;\n var bottom = y + h - r;\n\n ctx.moveTo(x, top);\n if (left < right && top < bottom) {\n ctx.arc(left, top, r, -Math.PI, -HALF_PI);\n ctx.arc(right, top, r, -HALF_PI, 0);\n ctx.arc(right, bottom, r, 0, HALF_PI);\n ctx.arc(left, bottom, r, HALF_PI, Math.PI);\n } else if (left < right) {\n ctx.moveTo(left, y);\n ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n ctx.arc(left, top, r, HALF_PI, Math.PI + HALF_PI);\n } else if (top < bottom) {\n ctx.arc(left, top, r, -Math.PI, 0);\n ctx.arc(left, bottom, r, 0, Math.PI);\n } else {\n ctx.arc(left, top, r, -Math.PI, Math.PI);\n }\n ctx.closePath();\n ctx.moveTo(x, y);\n } else {\n ctx.rect(x, y, w, h);\n }\n}\n\nfunction drawFrame(ctx, rect, model) {\n var bgColor = model.backgroundColor;\n var borderColor = model.borderColor;\n var borderWidth = model.borderWidth;\n\n if (!bgColor && (!borderColor || !borderWidth)) {\n return;\n }\n\n ctx.beginPath();\n\n drawRoundedRect(\n ctx,\n rasterize(rect.x) + borderWidth / 2,\n rasterize(rect.y) + borderWidth / 2,\n rasterize(rect.w) - borderWidth,\n rasterize(rect.h) - borderWidth,\n model.borderRadius);\n\n ctx.closePath();\n\n if (bgColor) {\n ctx.fillStyle = bgColor;\n ctx.fill();\n }\n\n if (borderColor && borderWidth) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = 'miter';\n ctx.stroke();\n }\n}\n\nfunction textGeometry(rect, align, font) {\n var h = font.lineHeight;\n var w = rect.w;\n var x = rect.x;\n var y = rect.y + h / 2;\n\n if (align === 'center') {\n x += w / 2;\n } else if (align === 'end' || align === 'right') {\n x += w;\n }\n\n return {\n h: h,\n w: w,\n x: x,\n y: y\n };\n}\n\nfunction drawTextLine(ctx, text, cfg) {\n var shadow = ctx.shadowBlur;\n var stroked = cfg.stroked;\n var x = rasterize(cfg.x);\n var y = rasterize(cfg.y);\n var w = rasterize(cfg.w);\n\n if (stroked) {\n ctx.strokeText(text, x, y, w);\n }\n\n if (cfg.filled) {\n if (shadow && stroked) {\n // Prevent drawing shadow on both the text stroke and fill, so\n // if the text is stroked, remove the shadow for the text fill.\n ctx.shadowBlur = 0;\n }\n\n ctx.fillText(text, x, y, w);\n\n if (shadow && stroked) {\n ctx.shadowBlur = shadow;\n }\n }\n}\n\nfunction drawText(ctx, lines, rect, model) {\n var align = model.textAlign;\n var color = model.color;\n var filled = !!color;\n var font = model.font;\n var ilen = lines.length;\n var strokeColor = model.textStrokeColor;\n var strokeWidth = model.textStrokeWidth;\n var stroked = strokeColor && strokeWidth;\n var i;\n\n if (!ilen || (!filled && !stroked)) {\n return;\n }\n\n // Adjust coordinates based on text alignment and line height\n rect = textGeometry(rect, align, font);\n\n ctx.font = font.string;\n ctx.textAlign = align;\n ctx.textBaseline = 'middle';\n ctx.shadowBlur = model.textShadowBlur;\n ctx.shadowColor = model.textShadowColor;\n\n if (filled) {\n ctx.fillStyle = color;\n }\n if (stroked) {\n ctx.lineJoin = 'round';\n ctx.lineWidth = strokeWidth;\n ctx.strokeStyle = strokeColor;\n }\n\n for (i = 0, ilen = lines.length; i < ilen; ++i) {\n drawTextLine(ctx, lines[i], {\n stroked: stroked,\n filled: filled,\n w: rect.w,\n x: rect.x,\n y: rect.y + rect.h * i\n });\n }\n}\n\nvar Label = function(config, ctx, el, index) {\n var me = this;\n\n me._config = config;\n me._index = index;\n me._model = null;\n me._rects = null;\n me._ctx = ctx;\n me._el = el;\n};\n\nmerge(Label.prototype, {\n /**\n * @private\n */\n _modelize: function(display, lines, config, context) {\n var me = this;\n var index = me._index;\n var font = toFont(resolve([config.font, {}], context, index));\n var color = resolve([config.color, defaults$1.color], context, index);\n\n return {\n align: resolve([config.align, 'center'], context, index),\n anchor: resolve([config.anchor, 'center'], context, index),\n area: context.chart.chartArea,\n backgroundColor: resolve([config.backgroundColor, null], context, index),\n borderColor: resolve([config.borderColor, null], context, index),\n borderRadius: resolve([config.borderRadius, 0], context, index),\n borderWidth: resolve([config.borderWidth, 0], context, index),\n clamp: resolve([config.clamp, false], context, index),\n clip: resolve([config.clip, false], context, index),\n color: color,\n display: display,\n font: font,\n lines: lines,\n offset: resolve([config.offset, 4], context, index),\n opacity: resolve([config.opacity, 1], context, index),\n origin: getScaleOrigin(me._el, context),\n padding: toPadding(resolve([config.padding, 4], context, index)),\n positioner: getPositioner(me._el),\n rotation: resolve([config.rotation, 0], context, index) * (Math.PI / 180),\n size: utils.textSize(me._ctx, lines, font),\n textAlign: resolve([config.textAlign, 'start'], context, index),\n textShadowBlur: resolve([config.textShadowBlur, 0], context, index),\n textShadowColor: resolve([config.textShadowColor, color], context, index),\n textStrokeColor: resolve([config.textStrokeColor, color], context, index),\n textStrokeWidth: resolve([config.textStrokeWidth, 0], context, index)\n };\n },\n\n update: function(context) {\n var me = this;\n var model = null;\n var rects = null;\n var index = me._index;\n var config = me._config;\n var value, label, lines;\n\n // We first resolve the display option (separately) to avoid computing\n // other options in case the label is hidden (i.e. display: false).\n var display = resolve([config.display, true], context, index);\n\n if (display) {\n value = context.dataset.data[index];\n label = valueOrDefault(callback(config.formatter, [value, context]), value);\n lines = isNullOrUndef(label) ? [] : utils.toTextLines(label);\n\n if (lines.length) {\n model = me._modelize(display, lines, config, context);\n rects = boundingRects(model);\n }\n }\n\n me._model = model;\n me._rects = rects;\n },\n\n geometry: function() {\n return this._rects ? this._rects.frame : {};\n },\n\n rotation: function() {\n return this._model ? this._model.rotation : 0;\n },\n\n visible: function() {\n return this._model && this._model.opacity;\n },\n\n model: function() {\n return this._model;\n },\n\n draw: function(chart, center) {\n var me = this;\n var ctx = chart.ctx;\n var model = me._model;\n var rects = me._rects;\n var area;\n\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n if (model.clip) {\n area = model.area;\n ctx.beginPath();\n ctx.rect(\n area.left,\n area.top,\n area.right - area.left,\n area.bottom - area.top);\n ctx.clip();\n }\n\n ctx.globalAlpha = utils.bound(0, model.opacity, 1);\n ctx.translate(rasterize(center.x), rasterize(center.y));\n ctx.rotate(model.rotation);\n\n drawFrame(ctx, rects.frame, model);\n drawText(ctx, model.lines, rects.text, model);\n\n ctx.restore();\n }\n});\n\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; // eslint-disable-line es/no-number-minsafeinteger\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; // eslint-disable-line es/no-number-maxsafeinteger\n\nfunction rotated(point, center, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var cx = center.x;\n var cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nfunction projected(points, axis) {\n var min = MAX_INTEGER;\n var max = MIN_INTEGER;\n var origin = axis.origin;\n var i, pt, vx, vy, dp;\n\n for (i = 0; i < points.length; ++i) {\n pt = points[i];\n vx = pt.x - origin.x;\n vy = pt.y - origin.y;\n dp = axis.vx * vx + axis.vy * vy;\n min = Math.min(min, dp);\n max = Math.max(max, dp);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nfunction toAxis(p0, p1) {\n var vx = p1.x - p0.x;\n var vy = p1.y - p0.y;\n var ln = Math.sqrt(vx * vx + vy * vy);\n\n return {\n vx: (p1.x - p0.x) / ln,\n vy: (p1.y - p0.y) / ln,\n origin: p0,\n ln: ln\n };\n}\n\nvar HitBox = function() {\n this._rotation = 0;\n this._rect = {\n x: 0,\n y: 0,\n w: 0,\n h: 0\n };\n};\n\nmerge(HitBox.prototype, {\n center: function() {\n var r = this._rect;\n return {\n x: r.x + r.w / 2,\n y: r.y + r.h / 2\n };\n },\n\n update: function(center, rect, rotation) {\n this._rotation = rotation;\n this._rect = {\n x: rect.x + center.x,\n y: rect.y + center.y,\n w: rect.w,\n h: rect.h\n };\n },\n\n contains: function(point) {\n var me = this;\n var margin = 1;\n var rect = me._rect;\n\n point = rotated(point, me.center(), -me._rotation);\n\n return !(point.x < rect.x - margin\n || point.y < rect.y - margin\n || point.x > rect.x + rect.w + margin * 2\n || point.y > rect.y + rect.h + margin * 2);\n },\n\n // Separating Axis Theorem\n // https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169\n intersects: function(other) {\n var r0 = this._points();\n var r1 = other._points();\n var axes = [\n toAxis(r0[0], r0[1]),\n toAxis(r0[0], r0[3])\n ];\n var i, pr0, pr1;\n\n if (this._rotation !== other._rotation) {\n // Only separate with r1 axis if the rotation is different,\n // else it's enough to separate r0 and r1 with r0 axis only!\n axes.push(\n toAxis(r1[0], r1[1]),\n toAxis(r1[0], r1[3])\n );\n }\n\n for (i = 0; i < axes.length; ++i) {\n pr0 = projected(r0, axes[i]);\n pr1 = projected(r1, axes[i]);\n\n if (pr0.max < pr1.min || pr1.max < pr0.min) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * @private\n */\n _points: function() {\n var me = this;\n var rect = me._rect;\n var angle = me._rotation;\n var center = me.center();\n\n return [\n rotated({x: rect.x, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y + rect.h}, center, angle),\n rotated({x: rect.x, y: rect.y + rect.h}, center, angle)\n ];\n }\n});\n\nfunction coordinates(el, model, geometry) {\n var point = model.positioner(el, model);\n var vx = point.vx;\n var vy = point.vy;\n\n if (!vx && !vy) {\n // if aligned center, we don't want to offset the center point\n return {x: point.x, y: point.y};\n }\n\n var w = geometry.w;\n var h = geometry.h;\n\n // take in account the label rotation\n var rotation = model.rotation;\n var dx = Math.abs(w / 2 * Math.cos(rotation)) + Math.abs(h / 2 * Math.sin(rotation));\n var dy = Math.abs(w / 2 * Math.sin(rotation)) + Math.abs(h / 2 * Math.cos(rotation));\n\n // scale the unit vector (vx, vy) to get at least dx or dy equal to\n // w or h respectively (else we would calculate the distance to the\n // ellipse inscribed in the bounding rect)\n var vs = 1 / Math.max(Math.abs(vx), Math.abs(vy));\n dx *= vx * vs;\n dy *= vy * vs;\n\n // finally, include the explicit offset\n dx += model.offset * vx;\n dy += model.offset * vy;\n\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n}\n\nfunction collide(labels, collider) {\n var i, j, s0, s1;\n\n // IMPORTANT Iterate in the reverse order since items at the end of the\n // list have an higher weight/priority and thus should be less impacted\n // by the overlapping strategy.\n\n for (i = labels.length - 1; i >= 0; --i) {\n s0 = labels[i].$layout;\n\n for (j = i - 1; j >= 0 && s0._visible; --j) {\n s1 = labels[j].$layout;\n\n if (s1._visible && s0._box.intersects(s1._box)) {\n collider(s0, s1);\n }\n }\n }\n\n return labels;\n}\n\nfunction compute(labels) {\n var i, ilen, label, state, geometry, center, proxy;\n\n // Initialize labels for overlap detection\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n // Chart.js 3 removed el._model in favor of getProps(), making harder to\n // abstract reading values in positioners. Also, using string arrays to\n // read values (i.e. var {a,b,c} = el.getProps([\"a\",\"b\",\"c\"])) would make\n // positioners inefficient in the normal case (i.e. not the final values)\n // and the code a bit ugly, so let's use a Proxy instead.\n proxy = new Proxy(label._el, {get: (el, p) => el.getProps([p], true)[p]});\n\n geometry = label.geometry();\n center = coordinates(proxy, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n }\n }\n\n // Auto hide overlapping labels\n return collide(labels, function(s0, s1) {\n var h0 = s0._hidable;\n var h1 = s1._hidable;\n\n if ((h0 && h1) || h1) {\n s1._visible = false;\n } else if (h0) {\n s0._visible = false;\n }\n });\n}\n\nvar layout = {\n prepare: function(datasets) {\n var labels = [];\n var i, j, ilen, jlen, label;\n\n for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n for (j = 0, jlen = datasets[i].length; j < jlen; ++j) {\n label = datasets[i][j];\n labels.push(label);\n label.$layout = {\n _box: new HitBox(),\n _hidable: false,\n _visible: true,\n _set: i,\n _idx: label._index\n };\n }\n }\n\n // TODO New `z` option: labels with a higher z-index are drawn\n // of top of the ones with a lower index. Lowest z-index labels\n // are also discarded first when hiding overlapping labels.\n labels.sort(function(a, b) {\n var sa = a.$layout;\n var sb = b.$layout;\n\n return sa._idx === sb._idx\n ? sb._set - sa._set\n : sb._idx - sa._idx;\n });\n\n this.update(labels);\n\n return labels;\n },\n\n update: function(labels) {\n var dirty = false;\n var i, ilen, label, model, state;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n model = label.model();\n state = label.$layout;\n state._hidable = model && model.display === 'auto';\n state._visible = label.visible();\n dirty |= state._hidable;\n }\n\n if (dirty) {\n compute(labels);\n }\n },\n\n lookup: function(labels, point) {\n var i, state;\n\n // IMPORTANT Iterate in the reverse order since items at the end of\n // the list have an higher z-index, thus should be picked first.\n\n for (i = labels.length - 1; i >= 0; --i) {\n state = labels[i].$layout;\n\n if (state && state._visible && state._box.contains(point)) {\n return labels[i];\n }\n }\n\n return null;\n },\n\n draw: function(chart, labels) {\n var i, ilen, label, state, geometry, center;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n geometry = label.geometry();\n center = coordinates(label._el, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n label.draw(chart, center);\n }\n }\n }\n};\n\nvar formatter = function(value) {\n if (isNullOrUndef(value)) {\n return null;\n }\n\n var label = value;\n var keys, klen, k;\n if (isObject(value)) {\n if (!isNullOrUndef(value.label)) {\n label = value.label;\n } else if (!isNullOrUndef(value.r)) {\n label = value.r;\n } else {\n label = '';\n keys = Object.keys(value);\n for (k = 0, klen = keys.length; k < klen; ++k) {\n label += (k !== 0 ? ', ' : '') + keys[k] + ': ' + value[keys[k]];\n }\n }\n }\n\n return '' + label;\n};\n\n/**\n * IMPORTANT: make sure to also update tests and TypeScript definition\n * files (`/test/specs/defaults.spec.js` and `/types/options.d.ts`)\n */\n\nvar defaults = {\n align: 'center',\n anchor: 'center',\n backgroundColor: null,\n borderColor: null,\n borderRadius: 0,\n borderWidth: 0,\n clamp: false,\n clip: false,\n color: undefined,\n display: true,\n font: {\n family: undefined,\n lineHeight: 1.2,\n size: undefined,\n style: undefined,\n weight: null\n },\n formatter: formatter,\n labels: undefined,\n listeners: {},\n offset: 4,\n opacity: 1,\n padding: {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4\n },\n rotation: 0,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n textShadowBlur: 0,\n textShadowColor: undefined\n};\n\n/**\n * @see https://github.com/chartjs/Chart.js/issues/4176\n */\n\nvar EXPANDO_KEY = '$datalabels';\nvar DEFAULT_KEY = '$default';\n\nfunction configure(dataset, options) {\n var override = dataset.datalabels;\n var listeners = {};\n var configs = [];\n var labels, keys;\n\n if (override === false) {\n return null;\n }\n if (override === true) {\n override = {};\n }\n\n options = merge({}, [options, override]);\n labels = options.labels || {};\n keys = Object.keys(labels);\n delete options.labels;\n\n if (keys.length) {\n keys.forEach(function(key) {\n if (labels[key]) {\n configs.push(merge({}, [\n options,\n labels[key],\n {_key: key}\n ]));\n }\n });\n } else {\n // Default label if no \"named\" label defined.\n configs.push(options);\n }\n\n // listeners: {<event-type>: {<label-key>: <fn>}}\n listeners = configs.reduce(function(target, config) {\n each(config.listeners || {}, function(fn, event) {\n target[event] = target[event] || {};\n target[event][config._key || DEFAULT_KEY] = fn;\n });\n\n delete config.listeners;\n return target;\n }, {});\n\n return {\n labels: configs,\n listeners: listeners\n };\n}\n\nfunction dispatchEvent(chart, listeners, label, event) {\n if (!listeners) {\n return;\n }\n\n var context = label.$context;\n var groups = label.$groups;\n var callback$1;\n\n if (!listeners[groups._set]) {\n return;\n }\n\n callback$1 = listeners[groups._set][groups._key];\n if (!callback$1) {\n return;\n }\n\n if (callback(callback$1, [context, event]) === true) {\n // Users are allowed to tweak the given context by injecting values that can be\n // used in scriptable options to display labels differently based on the current\n // event (e.g. highlight an hovered label). That's why we update the label with\n // the output context and schedule a new chart render by setting it dirty.\n chart[EXPANDO_KEY]._dirty = true;\n label.update(context);\n }\n}\n\nfunction dispatchMoveEvents(chart, listeners, previous, label, event) {\n var enter, leave;\n\n if (!previous && !label) {\n return;\n }\n\n if (!previous) {\n enter = true;\n } else if (!label) {\n leave = true;\n } else if (previous !== label) {\n leave = enter = true;\n }\n\n if (leave) {\n dispatchEvent(chart, listeners.leave, previous, event);\n }\n if (enter) {\n dispatchEvent(chart, listeners.enter, label, event);\n }\n}\n\nfunction handleMoveEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var listeners = expando._listeners;\n var previous, label;\n\n if (!listeners.enter && !listeners.leave) {\n return;\n }\n\n if (event.type === 'mousemove') {\n label = layout.lookup(expando._labels, event);\n } else if (event.type !== 'mouseout') {\n return;\n }\n\n previous = expando._hovered;\n expando._hovered = label;\n dispatchMoveEvents(chart, listeners, previous, label, event);\n}\n\nfunction handleClickEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var handlers = expando._listeners.click;\n var label = handlers && layout.lookup(expando._labels, event);\n if (label) {\n dispatchEvent(chart, handlers, label, event);\n }\n}\n\nvar plugin = {\n id: 'datalabels',\n\n defaults: defaults,\n\n beforeInit: function(chart) {\n chart[EXPANDO_KEY] = {\n _actives: []\n };\n },\n\n beforeUpdate: function(chart) {\n var expando = chart[EXPANDO_KEY];\n expando._listened = false;\n expando._listeners = {}; // {<event-type>: {<dataset-index>: {<label-key>: <fn>}}}\n expando._datasets = []; // per dataset labels: [Label[]]\n expando._labels = []; // layouted labels: Label[]\n },\n\n afterDatasetUpdate: function(chart, args, options) {\n var datasetIndex = args.index;\n var expando = chart[EXPANDO_KEY];\n var labels = expando._datasets[datasetIndex] = [];\n var visible = chart.isDatasetVisible(datasetIndex);\n var dataset = chart.data.datasets[datasetIndex];\n var config = configure(dataset, options);\n var elements = args.meta.data || [];\n var ctx = chart.ctx;\n var i, j, ilen, jlen, cfg, key, el, label;\n\n ctx.save();\n\n for (i = 0, ilen = elements.length; i < ilen; ++i) {\n el = elements[i];\n el[EXPANDO_KEY] = [];\n\n if (visible && el && chart.getDataVisibility(i) && !el.skip) {\n for (j = 0, jlen = config.labels.length; j < jlen; ++j) {\n cfg = config.labels[j];\n key = cfg._key;\n\n label = new Label(cfg, ctx, el, i);\n label.$groups = {\n _set: datasetIndex,\n _key: key || DEFAULT_KEY\n };\n label.$context = {\n active: false,\n chart: chart,\n dataIndex: i,\n dataset: dataset,\n datasetIndex: datasetIndex\n };\n\n label.update(label.$context);\n el[EXPANDO_KEY].push(label);\n labels.push(label);\n }\n }\n }\n\n ctx.restore();\n\n // Store listeners at the chart level and per event type to optimize\n // cases where no listeners are registered for a specific event.\n merge(expando._listeners, config.listeners, {\n merger: function(event, target, source) {\n target[event] = target[event] || {};\n target[event][args.index] = source[event];\n expando._listened = true;\n }\n });\n },\n\n afterUpdate: function(chart) {\n chart[EXPANDO_KEY]._labels = layout.prepare(chart[EXPANDO_KEY]._datasets);\n },\n\n // Draw labels on top of all dataset elements\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/29\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/32\n afterDatasetsDraw: function(chart) {\n layout.draw(chart, chart[EXPANDO_KEY]._labels);\n },\n\n beforeEvent: function(chart, args) {\n // If there is no listener registered for this chart, `listened` will be false,\n // meaning we can immediately ignore the incoming event and avoid useless extra\n // computation for users who don't implement label interactions.\n if (chart[EXPANDO_KEY]._listened) {\n var event = args.event;\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n handleMoveEvents(chart, event);\n break;\n case 'click':\n handleClickEvents(chart, event);\n break;\n }\n }\n },\n\n afterEvent: function(chart) {\n var expando = chart[EXPANDO_KEY];\n var previous = expando._actives;\n var actives = expando._actives = chart.getActiveElements();\n var updates = utils.arrayDiff(previous, actives);\n var i, ilen, j, jlen, update, label, labels;\n\n for (i = 0, ilen = updates.length; i < ilen; ++i) {\n update = updates[i];\n if (update[1]) {\n labels = update[0].element[EXPANDO_KEY] || [];\n for (j = 0, jlen = labels.length; j < jlen; ++j) {\n label = labels[j];\n label.$context.active = (update[1] === 1);\n label.update(label.$context);\n }\n }\n }\n\n if (expando._dirty || updates.length) {\n layout.update(expando._labels);\n chart.render();\n }\n\n delete expando._dirty;\n }\n};\n\nexport { plugin as default };\n","import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { chartContrastColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n chartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(chartjsAxisOptions, newOptions);\n};\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","/*!\n* chartjs-plugin-annotation v3.1.0\n* https://www.chartjs.org/chartjs-plugin-annotation/index\n * (c) 2024 chartjs-plugin-annotation Contributors\n * Released under the MIT License\n */\nimport { Element, DoughnutController, defaults, Animations, Chart } from 'chart.js';\nimport { distanceBetweenPoints, toRadians, isObject, valueOrDefault, defined, isFunction, callback, isArray, toFont, addRoundedRectPath, toTRBLCorners, QUARTER_PI, PI, HALF_PI, TWO_THIRDS_PI, TAU, isNumber, RAD_PER_DEG, toPadding, isFinite, getAngleFromPoint, toDegrees, clipArea, unclipArea } from 'chart.js/helpers';\n\n/**\n * @typedef { import(\"chart.js\").ChartEvent } ChartEvent\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst interaction = {\n modes: {\n /**\n * Point mode returns all elements that hit test based on the event position\n * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n * @param {ChartEvent} event - the event we are find things at\n * @return {AnnotationElement[]} - elements that are found\n */\n point(visibleElements, event) {\n return filterElements(visibleElements, event, {intersect: true});\n },\n\n /**\n * Nearest mode returns the element closest to the event position\n * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found (only 1 element)\n */\n nearest(visibleElements, event, options) {\n return getNearestItem(visibleElements, event, options);\n },\n /**\n * x mode returns the elements that hit-test at the current x coordinate\n * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n x(visibleElements, event, options) {\n return filterElements(visibleElements, event, {intersect: options.intersect, axis: 'x'});\n },\n\n /**\n * y mode returns the elements that hit-test at the current y coordinate\n * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n y(visibleElements, event, options) {\n return filterElements(visibleElements, event, {intersect: options.intersect, axis: 'y'});\n }\n }\n};\n\n/**\n * Returns all elements that hit test based on the event position\n * @param {AnnotationElement[]} visibleElements - annotation elements which are visible\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\nfunction getElements(visibleElements, event, options) {\n const mode = interaction.modes[options.mode] || interaction.modes.nearest;\n return mode(visibleElements, event, options);\n}\n\nfunction inRangeByAxis(element, event, axis) {\n if (axis !== 'x' && axis !== 'y') {\n return element.inRange(event.x, event.y, 'x', true) || element.inRange(event.x, event.y, 'y', true);\n }\n return element.inRange(event.x, event.y, axis, true);\n}\n\nfunction getPointByAxis(event, center, axis) {\n if (axis === 'x') {\n return {x: event.x, y: center.y};\n } else if (axis === 'y') {\n return {x: center.x, y: event.y};\n }\n return center;\n}\n\nfunction filterElements(visibleElements, event, options) {\n return visibleElements.filter((element) => options.intersect ? element.inRange(event.x, event.y) : inRangeByAxis(element, event, options.axis));\n}\n\nfunction getNearestItem(visibleElements, event, options) {\n let minDistance = Number.POSITIVE_INFINITY;\n\n return filterElements(visibleElements, event, options)\n .reduce((nearestItems, element) => {\n const center = element.getCenterPoint();\n const evenPoint = getPointByAxis(event, center, options.axis);\n const distance = distanceBetweenPoints(event, evenPoint);\n if (distance < minDistance) {\n nearestItems = [element];\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 nearestItems.push(element);\n }\n\n return nearestItems;\n }, [])\n .sort((a, b) => a._index - b._index)\n .slice(0, 1); // return only the top item;\n}\n\n/**\n * @typedef {import('chart.js').Point} Point\n */\n\n/**\n * Rotate a `point` relative to `center` point by `angle`\n * @param {Point} point - the point to rotate\n * @param {Point} center - center point for rotation\n * @param {number} angle - angle for rotation, in radians\n * @returns {Point} rotated point\n */\nfunction rotated(point, center, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = center.x;\n const cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nconst isOlderPart = (act, req) => req > act || (act.length > req.length && act.slice(0, req.length) === req);\n\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('chart.js').InteractionAxis } InteractionAxis\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst EPSILON = 0.001;\nconst clamp = (x, from, to) => Math.min(to, Math.max(from, x));\n\n/**\n * @param {{value: number, start: number, end: number}} limit\n * @param {number} hitSize\n * @returns {boolean}\n */\nconst inLimit = (limit, hitSize) => limit.value >= limit.start - hitSize && limit.value <= limit.end + hitSize;\n\n/**\n * @param {Object} obj\n * @param {number} from\n * @param {number} to\n * @returns {Object}\n */\nfunction clampAll(obj, from, to) {\n for (const key of Object.keys(obj)) {\n obj[key] = clamp(obj[key], from, to);\n }\n return obj;\n}\n\n/**\n * @param {Point} point\n * @param {Point} center\n * @param {number} radius\n * @param {number} hitSize\n * @returns {boolean}\n */\nfunction inPointRange(point, center, radius, hitSize) {\n if (!point || !center || radius <= 0) {\n return false;\n }\n return (Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2)) <= Math.pow(radius + hitSize, 2);\n}\n\n/**\n * @param {Point} point\n * @param {{x: number, y: number, x2: number, y2: number}} rect\n * @param {InteractionAxis} axis\n * @param {{borderWidth: number, hitTolerance: number}} hitsize\n * @returns {boolean}\n */\nfunction inBoxRange(point, {x, y, x2, y2}, axis, {borderWidth, hitTolerance}) {\n const hitSize = (borderWidth + hitTolerance) / 2;\n const inRangeX = point.x >= x - hitSize - EPSILON && point.x <= x2 + hitSize + EPSILON;\n const inRangeY = point.y >= y - hitSize - EPSILON && point.y <= y2 + hitSize + EPSILON;\n if (axis === 'x') {\n return inRangeX;\n } else if (axis === 'y') {\n return inRangeY;\n }\n return inRangeX && inRangeY;\n}\n\n/**\n * @param {Point} point\n * @param {rect: {x: number, y: number, x2: number, y2: number}, center: {x: number, y: number}} element\n * @param {InteractionAxis} axis\n * @param {{rotation: number, borderWidth: number, hitTolerance: number}}\n * @returns {boolean}\n */\nfunction inLabelRange(point, {rect, center}, axis, {rotation, borderWidth, hitTolerance}) {\n const rotPoint = rotated(point, center, toRadians(-rotation));\n return inBoxRange(rotPoint, rect, axis, {borderWidth, hitTolerance});\n}\n\n/**\n * @param {AnnotationElement} element\n * @param {boolean} useFinalPosition\n * @returns {Point}\n */\nfunction getElementCenterPoint(element, useFinalPosition) {\n const {centerX, centerY} = element.getProps(['centerX', 'centerY'], useFinalPosition);\n return {x: centerX, y: centerY};\n}\n\n/**\n * @param {string} pkg\n * @param {string} min\n * @param {string} ver\n * @param {boolean} [strict=true]\n * @returns {boolean}\n */\nfunction requireVersion(pkg, min, ver, strict = true) {\n const parts = ver.split('.');\n let i = 0;\n for (const req of min.split('.')) {\n const act = parts[i++];\n if (parseInt(req, 10) < parseInt(act, 10)) {\n break;\n }\n if (isOlderPart(act, req)) {\n if (strict) {\n throw new Error(`${pkg} v${ver} is not supported. v${min} or newer is required.`);\n } else {\n return false;\n }\n }\n }\n return true;\n}\n\nconst isPercentString = (s) => typeof s === 'string' && s.endsWith('%');\nconst toPercent = (s) => parseFloat(s) / 100;\nconst toPositivePercent = (s) => clamp(toPercent(s), 0, 1);\n\nconst boxAppering = (x, y) => ({x, y, x2: x, y2: y, width: 0, height: 0});\nconst defaultInitAnimation = {\n box: (properties) => boxAppering(properties.centerX, properties.centerY),\n doughnutLabel: (properties) => boxAppering(properties.centerX, properties.centerY),\n ellipse: (properties) => ({centerX: properties.centerX, centerY: properties.centerX, radius: 0, width: 0, height: 0}),\n label: (properties) => boxAppering(properties.centerX, properties.centerY),\n line: (properties) => boxAppering(properties.x, properties.y),\n point: (properties) => ({centerX: properties.centerX, centerY: properties.centerY, radius: 0, width: 0, height: 0}),\n polygon: (properties) => boxAppering(properties.centerX, properties.centerY)\n};\n\n/**\n * @typedef { import('chart.js').FontSpec } FontSpec\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('chart.js').Padding } Padding\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n * @typedef { import('../../types/options').AnnotationPointCoordinates } AnnotationPointCoordinates\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/label').LabelPositionObject } LabelPositionObject\n */\n\n/**\n * @param {number} size\n * @param {number|string} position\n * @returns {number}\n */\nfunction getRelativePosition(size, position) {\n if (position === 'start') {\n return 0;\n }\n if (position === 'end') {\n return size;\n }\n if (isPercentString(position)) {\n return toPositivePercent(position) * size;\n }\n return size / 2;\n}\n\n/**\n * @param {number} size\n * @param {number|string} value\n * @param {boolean} [positivePercent=true]\n * @returns {number}\n */\nfunction getSize(size, value, positivePercent = true) {\n if (typeof value === 'number') {\n return value;\n } else if (isPercentString(value)) {\n return (positivePercent ? toPositivePercent(value) : toPercent(value)) * size;\n }\n return size;\n}\n\n/**\n * @param {{x: number, width: number}} size\n * @param {CoreLabelOptions} options\n * @returns {number}\n */\nfunction calculateTextAlignment(size, options) {\n const {x, width} = size;\n const textAlign = options.textAlign;\n if (textAlign === 'center') {\n return x + width / 2;\n } else if (textAlign === 'end' || textAlign === 'right') {\n return x + width;\n }\n return x;\n}\n\n/**\n * @param {Point} point\n * @param {{height: number, width: number}} labelSize\n * @param {{borderWidth: number, position: {LabelPositionObject|string}, xAdjust: number, yAdjust: number}} options\n * @param {Padding|undefined} padding\n * @returns {{x: number, y: number, x2: number, y2: number, height: number, width: number, centerX: number, centerY: number}}\n */\nfunction measureLabelRectangle(point, labelSize, {borderWidth, position, xAdjust, yAdjust}, padding) {\n const hasPadding = isObject(padding);\n const width = labelSize.width + (hasPadding ? padding.width : 0) + borderWidth;\n const height = labelSize.height + (hasPadding ? padding.height : 0) + borderWidth;\n const positionObj = toPosition(position);\n const x = calculateLabelPosition$1(point.x, width, xAdjust, positionObj.x);\n const y = calculateLabelPosition$1(point.y, height, yAdjust, positionObj.y);\n\n return {\n x,\n y,\n x2: x + width,\n y2: y + height,\n width,\n height,\n centerX: x + width / 2,\n centerY: y + height / 2\n };\n}\n\n/**\n * @param {LabelPositionObject|string} value\n * @param {string|number} defaultValue\n * @returns {LabelPositionObject}\n */\nfunction toPosition(value, defaultValue = 'center') {\n if (isObject(value)) {\n return {\n x: valueOrDefault(value.x, defaultValue),\n y: valueOrDefault(value.y, defaultValue),\n };\n }\n value = valueOrDefault(value, defaultValue);\n return {\n x: value,\n y: value\n };\n}\n\n/**\n * @param {CoreLabelOptions} options\n * @param {number} fitRatio\n * @returns {boolean}\n */\nconst shouldFit = (options, fitRatio) => options && options.autoFit && fitRatio < 1;\n\n/**\n * @param {CoreLabelOptions} options\n * @param {number} fitRatio\n * @returns {FontSpec[]}\n */\nfunction toFonts(options, fitRatio) {\n const optFont = options.font;\n const fonts = isArray(optFont) ? optFont : [optFont];\n if (shouldFit(options, fitRatio)) {\n return fonts.map(function(f) {\n const font = toFont(f);\n font.size = Math.floor(f.size * fitRatio);\n font.lineHeight = f.lineHeight;\n return toFont(font);\n });\n }\n return fonts.map(f => toFont(f));\n}\n\n/**\n * @param {AnnotationPointCoordinates} options\n * @returns {boolean}\n */\nfunction isBoundToPoint(options) {\n return options && (defined(options.xValue) || defined(options.yValue));\n}\n\nfunction calculateLabelPosition$1(start, size, adjust = 0, position) {\n return start - getRelativePosition(size, position) + adjust;\n}\n\n/**\n * @param {Chart} chart\n * @param {AnnotationBoxModel} properties\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationElement}\n */\nfunction initAnimationProperties(chart, properties, options) {\n const initAnim = options.init;\n if (!initAnim) {\n return;\n } else if (initAnim === true) {\n return applyDefault(properties, options);\n }\n return execCallback(chart, properties, options);\n}\n\n/**\n * @param {Object} options\n * @param {Array} hooks\n * @param {Object} hooksContainer\n * @returns {boolean}\n */\nfunction loadHooks(options, hooks, hooksContainer) {\n let activated = false;\n hooks.forEach(hook => {\n if (isFunction(options[hook])) {\n activated = true;\n hooksContainer[hook] = options[hook];\n } else if (defined(hooksContainer[hook])) {\n delete hooksContainer[hook];\n }\n });\n return activated;\n}\n\nfunction applyDefault(properties, options) {\n const type = options.type || 'line';\n return defaultInitAnimation[type](properties);\n}\n\nfunction execCallback(chart, properties, options) {\n const result = callback(options.init, [{chart, properties, options}]);\n if (result === true) {\n return applyDefault(properties, options);\n } else if (isObject(result)) {\n return result;\n }\n}\n\nconst widthCache = new Map();\nconst notRadius = (radius) => isNaN(radius) || radius <= 0;\nconst fontsKey = (fonts) => fonts.reduce(function(prev, item) {\n prev += item.string;\n return prev;\n}, '');\n\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n */\n\n/**\n * Determine if content is an image or a canvas.\n * @param {*} content\n * @returns boolean|undefined\n * @todo move this function to chart.js helpers\n */\nfunction isImageOrCanvas(content) {\n if (content && typeof content === 'object') {\n const type = content.toString();\n return (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]');\n }\n}\n\n/**\n * Set the translation on the canvas if the rotation must be applied.\n * @param {CanvasRenderingContext2D} ctx - chart canvas context\n * @param {Point} point - the point of translation\n * @param {number} rotation - rotation (in degrees) to apply\n */\nfunction translate(ctx, {x, y}, rotation) {\n if (rotation) {\n ctx.translate(x, y);\n ctx.rotate(toRadians(rotation));\n ctx.translate(-x, -y);\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n * @returns {boolean|undefined}\n */\nfunction setBorderStyle(ctx, options) {\n if (options && options.borderWidth) {\n ctx.lineCap = options.borderCapStyle || 'butt';\n ctx.setLineDash(options.borderDash);\n ctx.lineDashOffset = options.borderDashOffset;\n ctx.lineJoin = options.borderJoinStyle || 'miter';\n ctx.lineWidth = options.borderWidth;\n ctx.strokeStyle = options.borderColor;\n return true;\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n */\nfunction setShadowStyle(ctx, options) {\n ctx.shadowColor = options.backgroundShadowColor;\n ctx.shadowBlur = options.shadowBlur;\n ctx.shadowOffsetX = options.shadowOffsetX;\n ctx.shadowOffsetY = options.shadowOffsetY;\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {CoreLabelOptions} options\n * @returns {{width: number, height: number}}\n */\nfunction measureLabelSize(ctx, options) {\n const content = options.content;\n if (isImageOrCanvas(content)) {\n const size = {\n width: getSize(content.width, options.width),\n height: getSize(content.height, options.height)\n };\n return size;\n }\n const fonts = toFonts(options);\n const strokeWidth = options.textStrokeWidth;\n const lines = isArray(content) ? content : [content];\n const mapKey = lines.join() + fontsKey(fonts) + strokeWidth + (ctx._measureText ? '-spriting' : '');\n if (!widthCache.has(mapKey)) {\n widthCache.set(mapKey, calculateLabelSize(ctx, lines, fonts, strokeWidth));\n }\n return widthCache.get(mapKey);\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {Object} options\n */\nfunction drawBox(ctx, rect, options) {\n const {x, y, width, height} = rect;\n ctx.save();\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n ctx.fillStyle = options.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x, y, w: width, h: height,\n radius: clampAll(toTRBLCorners(options.borderRadius), 0, Math.min(width, height) / 2)\n });\n ctx.closePath();\n ctx.fill();\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {CoreLabelOptions} options\n * @param {number} fitRatio\n */\nfunction drawLabel(ctx, rect, options, fitRatio) {\n const content = options.content;\n if (isImageOrCanvas(content)) {\n ctx.save();\n ctx.globalAlpha = getOpacity(options.opacity, content.style.opacity);\n ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height);\n ctx.restore();\n return;\n }\n const labels = isArray(content) ? content : [content];\n const fonts = toFonts(options, fitRatio);\n const optColor = options.color;\n const colors = isArray(optColor) ? optColor : [optColor];\n const x = calculateTextAlignment(rect, options);\n const y = rect.y + options.textStrokeWidth / 2;\n ctx.save();\n ctx.textBaseline = 'middle';\n ctx.textAlign = options.textAlign;\n if (setTextStrokeStyle(ctx, options)) {\n applyLabelDecoration(ctx, {x, y}, labels, fonts);\n }\n applyLabelContent(ctx, {x, y}, labels, {fonts, colors});\n ctx.restore();\n}\n\nfunction setTextStrokeStyle(ctx, options) {\n if (options.textStrokeWidth > 0) {\n // https://stackoverflow.com/questions/13627111/drawing-text-with-an-outer-stroke-with-html5s-canvas\n ctx.lineJoin = 'round';\n ctx.miterLimit = 2;\n ctx.lineWidth = options.textStrokeWidth;\n ctx.strokeStyle = options.textStrokeColor;\n return true;\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{radius: number, options: PointAnnotationOptions}} element\n * @param {number} x\n * @param {number} y\n */\nfunction drawPoint(ctx, element, x, y) {\n const {radius, options} = element;\n const style = options.pointStyle;\n const rotation = options.rotation;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (isImageOrCanvas(style)) {\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 if (notRadius(radius)) {\n return;\n }\n drawPointStyle(ctx, {x, y, radius, rotation, style, rad});\n}\n\nfunction drawPointStyle(ctx, {x, y, radius, rotation, style, rad}) {\n let xOffset, yOffset, size, cornerRadius;\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, 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 yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, 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 ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffset = 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 ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = 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 ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = 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 ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = 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) * radius, y + Math.sin(rad) * radius);\n break;\n }\n\n ctx.fill();\n}\n\nfunction calculateLabelSize(ctx, lines, fonts, strokeWidth) {\n ctx.save();\n const count = lines.length;\n let width = 0;\n let height = strokeWidth;\n for (let i = 0; i < count; i++) {\n const font = fonts[Math.min(i, fonts.length - 1)];\n ctx.font = font.string;\n const text = lines[i];\n width = Math.max(width, ctx.measureText(text).width + strokeWidth);\n height += font.lineHeight;\n }\n ctx.restore();\n return {width, height};\n}\n\nfunction applyLabelDecoration(ctx, {x, y}, labels, fonts) {\n ctx.beginPath();\n let lhs = 0;\n labels.forEach(function(l, i) {\n const f = fonts[Math.min(i, fonts.length - 1)];\n const lh = f.lineHeight;\n ctx.font = f.string;\n ctx.strokeText(l, x, y + lh / 2 + lhs);\n lhs += lh;\n });\n ctx.stroke();\n}\n\nfunction applyLabelContent(ctx, {x, y}, labels, {fonts, colors}) {\n let lhs = 0;\n labels.forEach(function(l, i) {\n const c = colors[Math.min(i, colors.length - 1)];\n const f = fonts[Math.min(i, fonts.length - 1)];\n const lh = f.lineHeight;\n ctx.beginPath();\n ctx.font = f.string;\n ctx.fillStyle = c;\n ctx.fillText(l, x, y + lh / 2 + lhs);\n lhs += lh;\n ctx.fill();\n });\n}\n\nfunction getOpacity(value, elementValue) {\n const opacity = isNumber(value) ? value : elementValue;\n return isNumber(opacity) ? clamp(opacity, 0, 1) : 1;\n}\n\nconst positions = ['left', 'bottom', 'top', 'right'];\n\n/**\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\n/**\n * Drawa the callout component for labels.\n * @param {CanvasRenderingContext2D} ctx - chart canvas context\n * @param {AnnotationElement} element - the label element\n */\nfunction drawCallout(ctx, element) {\n const {pointX, pointY, options} = element;\n const callout = options.callout;\n const calloutPosition = callout && callout.display && resolveCalloutPosition(element, callout);\n if (!calloutPosition || isPointInRange(element, callout, calloutPosition)) {\n return;\n }\n\n ctx.save();\n ctx.beginPath();\n const stroke = setBorderStyle(ctx, callout);\n if (!stroke) {\n return ctx.restore();\n }\n const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition);\n const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart);\n if (callout.margin > 0 || options.borderWidth === 0) {\n ctx.moveTo(separatorStart.x, separatorStart.y);\n ctx.lineTo(separatorEnd.x, separatorEnd.y);\n }\n ctx.moveTo(sideStart.x, sideStart.y);\n ctx.lineTo(sideEnd.x, sideEnd.y);\n const rotatedPoint = rotated({x: pointX, y: pointY}, element.getCenterPoint(), toRadians(-element.rotation));\n ctx.lineTo(rotatedPoint.x, rotatedPoint.y);\n ctx.stroke();\n ctx.restore();\n}\n\nfunction getCalloutSeparatorCoord(element, position) {\n const {x, y, x2, y2} = element;\n const adjust = getCalloutSeparatorAdjust(element, position);\n let separatorStart, separatorEnd;\n if (position === 'left' || position === 'right') {\n separatorStart = {x: x + adjust, y};\n separatorEnd = {x: separatorStart.x, y: y2};\n } else {\n // position 'top' or 'bottom'\n separatorStart = {x, y: y + adjust};\n separatorEnd = {x: x2, y: separatorStart.y};\n }\n return {separatorStart, separatorEnd};\n}\n\nfunction getCalloutSeparatorAdjust(element, position) {\n const {width, height, options} = element;\n const adjust = options.callout.margin + options.borderWidth / 2;\n if (position === 'right') {\n return width + adjust;\n } else if (position === 'bottom') {\n return height + adjust;\n }\n return -adjust;\n}\n\nfunction getCalloutSideCoord(element, position, separatorStart) {\n const {y, width, height, options} = element;\n const start = options.callout.start;\n const side = getCalloutSideAdjust(position, options.callout);\n let sideStart, sideEnd;\n if (position === 'left' || position === 'right') {\n sideStart = {x: separatorStart.x, y: y + getSize(height, start)};\n sideEnd = {x: sideStart.x + side, y: sideStart.y};\n } else {\n // position 'top' or 'bottom'\n sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y};\n sideEnd = {x: sideStart.x, y: sideStart.y + side};\n }\n return {sideStart, sideEnd};\n}\n\nfunction getCalloutSideAdjust(position, options) {\n const side = options.side;\n if (position === 'left' || position === 'top') {\n return -side;\n }\n return side;\n}\n\nfunction resolveCalloutPosition(element, options) {\n const position = options.position;\n if (positions.includes(position)) {\n return position;\n }\n return resolveCalloutAutoPosition(element, options);\n}\n\nfunction resolveCalloutAutoPosition(element, options) {\n const {x, y, x2, y2, width, height, pointX, pointY, centerX, centerY, rotation} = element;\n const center = {x: centerX, y: centerY};\n const start = options.start;\n const xAdjust = getSize(width, start);\n const yAdjust = getSize(height, start);\n const xPoints = [x, x + xAdjust, x + xAdjust, x2];\n const yPoints = [y + yAdjust, y2, y, y2];\n const result = [];\n for (let index = 0; index < 4; index++) {\n const rotatedPoint = rotated({x: xPoints[index], y: yPoints[index]}, center, toRadians(rotation));\n result.push({\n position: positions[index],\n distance: distanceBetweenPoints(rotatedPoint, {x: pointX, y: pointY})\n });\n }\n return result.sort((a, b) => a.distance - b.distance)[0].position;\n}\n\nfunction isPointInRange(element, callout, position) {\n const {pointX, pointY} = element;\n const margin = callout.margin;\n let x = pointX;\n let y = pointY;\n if (position === 'left') {\n x += margin;\n } else if (position === 'right') {\n x -= margin;\n } else if (position === 'top') {\n y += margin;\n } else if (position === 'bottom') {\n y -= margin;\n }\n return element.inRange(x, y);\n}\n\nconst limitedLineScale = {\n xScaleID: {min: 'xMin', max: 'xMax', start: 'left', end: 'right', startProp: 'x', endProp: 'x2'},\n yScaleID: {min: 'yMin', max: 'yMax', start: 'bottom', end: 'top', startProp: 'y', endProp: 'y2'}\n};\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import(\"chart.js\").Point } Point\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n * @typedef { import('../../types/options').LineAnnotationOptions } LineAnnotationOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n * @typedef { import('../../types/options').PolygonAnnotationOptions } PolygonAnnotationOptions\n */\n\n/**\n * @param {Scale} scale\n * @param {number|string} value\n * @param {number} fallback\n * @returns {number}\n */\nfunction scaleValue(scale, value, fallback) {\n value = typeof value === 'number' ? value : scale.parse(value);\n return isFinite(value) ? scale.getPixelForValue(value) : fallback;\n}\n\n/**\n * Search the scale defined in chartjs by the axis related to the annotation options key.\n * @param {{ [key: string]: Scale }} scales\n * @param {CoreAnnotationOptions} options\n * @param {string} key\n * @returns {string}\n */\nfunction retrieveScaleID(scales, options, key) {\n const scaleID = options[key];\n if (scaleID || key === 'scaleID') {\n return scaleID;\n }\n const axis = key.charAt(0);\n const axes = Object.values(scales).filter((scale) => scale.axis && scale.axis === axis);\n if (axes.length) {\n return axes[0].id;\n }\n return axis;\n}\n\n/**\n * @param {Scale} scale\n * @param {{min: number, max: number, start: number, end: number}} options\n * @returns {{start: number, end: number}|undefined}\n */\nfunction getDimensionByScale(scale, options) {\n if (scale) {\n const reverse = scale.options.reverse;\n const start = scaleValue(scale, options.min, reverse ? options.end : options.start);\n const end = scaleValue(scale, options.max, reverse ? options.start : options.end);\n return {\n start,\n end\n };\n }\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {Point}\n */\nfunction getChartPoint(chart, options) {\n const {chartArea, scales} = chart;\n const xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n const yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n let x = chartArea.width / 2;\n let y = chartArea.height / 2;\n\n if (xScale) {\n x = scaleValue(xScale, options.xValue, xScale.left + xScale.width / 2);\n }\n\n if (yScale) {\n y = scaleValue(yScale, options.yValue, yScale.top + yScale.height / 2);\n }\n return {x, y};\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolveBoxProperties(chart, options) {\n const scales = chart.scales;\n const xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n const yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n\n if (!xScale && !yScale) {\n return {};\n }\n\n let {left: x, right: x2} = xScale || chart.chartArea;\n let {top: y, bottom: y2} = yScale || chart.chartArea;\n const xDim = getChartDimensionByScale(xScale, {min: options.xMin, max: options.xMax, start: x, end: x2});\n x = xDim.start;\n x2 = xDim.end;\n const yDim = getChartDimensionByScale(yScale, {min: options.yMin, max: options.yMax, start: y2, end: y});\n y = yDim.start;\n y2 = yDim.end;\n\n return {\n x,\n y,\n x2,\n y2,\n width: x2 - x,\n height: y2 - y,\n centerX: x + (x2 - x) / 2,\n centerY: y + (y2 - y) / 2\n };\n}\n\n/**\n * @param {Chart} chart\n * @param {PointAnnotationOptions|PolygonAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolvePointProperties(chart, options) {\n if (!isBoundToPoint(options)) {\n const box = resolveBoxProperties(chart, options);\n let radius = options.radius;\n if (!radius || isNaN(radius)) {\n radius = Math.min(box.width, box.height) / 2;\n options.radius = radius;\n }\n const size = radius * 2;\n const adjustCenterX = box.centerX + options.xAdjust;\n const adjustCenterY = box.centerY + options.yAdjust;\n return {\n x: adjustCenterX - radius,\n y: adjustCenterY - radius,\n x2: adjustCenterX + radius,\n y2: adjustCenterY + radius,\n centerX: adjustCenterX,\n centerY: adjustCenterY,\n width: size,\n height: size,\n radius\n };\n }\n return getChartCircle(chart, options);\n}\n/**\n * @param {Chart} chart\n * @param {LineAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolveLineProperties(chart, options) {\n const {scales, chartArea} = chart;\n const scale = scales[options.scaleID];\n const area = {x: chartArea.left, y: chartArea.top, x2: chartArea.right, y2: chartArea.bottom};\n\n if (scale) {\n resolveFullLineProperties(scale, area, options);\n } else {\n resolveLimitedLineProperties(scales, area, options);\n }\n return area;\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @param {boolean} [centerBased=false]\n * @returns {AnnotationBoxModel}\n */\nfunction resolveBoxAndLabelProperties(chart, options) {\n const properties = resolveBoxProperties(chart, options);\n properties.initProperties = initAnimationProperties(chart, properties, options);\n properties.elements = [{\n type: 'label',\n optionScope: 'label',\n properties: resolveLabelElementProperties$1(chart, properties, options),\n initProperties: properties.initProperties\n }];\n return properties;\n}\n\nfunction getChartCircle(chart, options) {\n const point = getChartPoint(chart, options);\n const size = options.radius * 2;\n return {\n x: point.x - options.radius + options.xAdjust,\n y: point.y - options.radius + options.yAdjust,\n x2: point.x + options.radius + options.xAdjust,\n y2: point.y + options.radius + options.yAdjust,\n centerX: point.x + options.xAdjust,\n centerY: point.y + options.yAdjust,\n radius: options.radius,\n width: size,\n height: size\n };\n}\n\nfunction getChartDimensionByScale(scale, options) {\n const result = getDimensionByScale(scale, options) || options;\n return {\n start: Math.min(result.start, result.end),\n end: Math.max(result.start, result.end)\n };\n}\n\nfunction resolveFullLineProperties(scale, area, options) {\n const min = scaleValue(scale, options.value, NaN);\n const max = scaleValue(scale, options.endValue, min);\n if (scale.isHorizontal()) {\n area.x = min;\n area.x2 = max;\n } else {\n area.y = min;\n area.y2 = max;\n }\n}\n\nfunction resolveLimitedLineProperties(scales, area, options) {\n for (const scaleId of Object.keys(limitedLineScale)) {\n const scale = scales[retrieveScaleID(scales, options, scaleId)];\n if (scale) {\n const {min, max, start, end, startProp, endProp} = limitedLineScale[scaleId];\n const dim = getDimensionByScale(scale, {min: options[min], max: options[max], start: scale[start], end: scale[end]});\n area[startProp] = dim.start;\n area[endProp] = dim.end;\n }\n }\n}\n\nfunction calculateX({properties, options}, labelSize, position, padding) {\n const {x: start, x2: end, width: size} = properties;\n return calculatePosition({start, end, size, borderWidth: options.borderWidth}, {\n position: position.x,\n padding: {start: padding.left, end: padding.right},\n adjust: options.label.xAdjust,\n size: labelSize.width\n });\n}\n\nfunction calculateY({properties, options}, labelSize, position, padding) {\n const {y: start, y2: end, height: size} = properties;\n return calculatePosition({start, end, size, borderWidth: options.borderWidth}, {\n position: position.y,\n padding: {start: padding.top, end: padding.bottom},\n adjust: options.label.yAdjust,\n size: labelSize.height\n });\n}\n\nfunction calculatePosition(boxOpts, labelOpts) {\n const {start, end, borderWidth} = boxOpts;\n const {position, padding: {start: padStart, end: padEnd}, adjust} = labelOpts;\n const availableSize = end - borderWidth - start - padStart - padEnd - labelOpts.size;\n return start + borderWidth / 2 + adjust + getRelativePosition(availableSize, position);\n}\n\nfunction resolveLabelElementProperties$1(chart, properties, options) {\n const label = options.label;\n label.backgroundColor = 'transparent';\n label.callout.display = false;\n const position = toPosition(label.position);\n const padding = toPadding(label.padding);\n const labelSize = measureLabelSize(chart.ctx, label);\n const x = calculateX({properties, options}, labelSize, position, padding);\n const y = calculateY({properties, options}, labelSize, position, padding);\n const width = labelSize.width + padding.width;\n const height = labelSize.height + padding.height;\n return {\n x,\n y,\n x2: x + width,\n y2: y + height,\n width,\n height,\n centerX: x + width / 2,\n centerY: y + height / 2,\n rotation: label.rotation\n };\n\n}\n\nconst moveHooks = ['enter', 'leave'];\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\nconst eventHooks = moveHooks.concat('click');\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\nfunction updateListeners(chart, state, options) {\n state.listened = loadHooks(options, eventHooks, state.listeners);\n state.moveListened = false;\n\n moveHooks.forEach(hook => {\n if (isFunction(options[hook])) {\n state.moveListened = true;\n }\n });\n\n if (!state.listened || !state.moveListened) {\n state.annotations.forEach(scope => {\n if (!state.listened && isFunction(scope.click)) {\n state.listened = true;\n }\n if (!state.moveListened) {\n moveHooks.forEach(hook => {\n if (isFunction(scope[hook])) {\n state.listened = true;\n state.moveListened = true;\n }\n });\n }\n });\n }\n}\n\n/**\n * @param {Object} state\n * @param {ChartEvent} event\n * @param {AnnotationPluginOptions} options\n * @return {boolean|undefined}\n */\nfunction handleEvent(state, event, options) {\n if (state.listened) {\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n return handleMoveEvents(state, event, options);\n case 'click':\n return handleClickEvents(state, event, options);\n }\n }\n}\n\nfunction handleMoveEvents(state, event, options) {\n if (!state.moveListened) {\n return;\n }\n\n let elements;\n\n if (event.type === 'mousemove') {\n elements = getElements(state.visibleElements, event, options.interaction);\n } else {\n elements = [];\n }\n\n const previous = state.hovered;\n state.hovered = elements;\n\n const context = {state, event};\n let changed = dispatchMoveEvents(context, 'leave', previous, elements);\n return dispatchMoveEvents(context, 'enter', elements, previous) || changed;\n}\n\nfunction dispatchMoveEvents({state, event}, hook, elements, checkElements) {\n let changed;\n for (const element of elements) {\n if (checkElements.indexOf(element) < 0) {\n changed = dispatchEvent(element.options[hook] || state.listeners[hook], element, event) || changed;\n }\n }\n return changed;\n}\n\nfunction handleClickEvents(state, event, options) {\n const listeners = state.listeners;\n const elements = getElements(state.visibleElements, event, options.interaction);\n let changed;\n for (const element of elements) {\n changed = dispatchEvent(element.options.click || listeners.click, element, event) || changed;\n }\n return changed;\n}\n\nfunction dispatchEvent(handler, element, event) {\n return callback(handler, [element.$context, event]) === true;\n}\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst elementHooks = ['afterDraw', 'beforeDraw'];\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\nfunction updateHooks(chart, state, options) {\n const visibleElements = state.visibleElements;\n state.hooked = loadHooks(options, elementHooks, state.hooks);\n\n if (!state.hooked) {\n visibleElements.forEach(scope => {\n if (!state.hooked) {\n elementHooks.forEach(hook => {\n if (isFunction(scope.options[hook])) {\n state.hooked = true;\n }\n });\n }\n });\n }\n}\n\n/**\n * @param {Object} state\n * @param {AnnotationElement} element\n * @param {string} hook\n */\nfunction invokeHook(state, element, hook) {\n if (state.hooked) {\n const callbackHook = element.options[hook] || state.hooks[hook];\n return callback(callbackHook, [element.$context]);\n }\n}\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n */\n\n/**\n * @param {Chart} chart\n * @param {Scale} scale\n * @param {CoreAnnotationOptions[]} annotations\n */\nfunction adjustScaleRange(chart, scale, annotations) {\n const range = getScaleLimits(chart.scales, scale, annotations);\n let changed = changeScaleLimit(scale, range, 'min', 'suggestedMin');\n changed = changeScaleLimit(scale, range, 'max', 'suggestedMax') || changed;\n if (changed && isFunction(scale.handleTickRangeOptions)) {\n scale.handleTickRangeOptions();\n }\n}\n\n/**\n * @param {CoreAnnotationOptions[]} annotations\n * @param {{ [key: string]: Scale }} scales\n */\nfunction verifyScaleOptions(annotations, scales) {\n for (const annotation of annotations) {\n verifyScaleIDs(annotation, scales);\n }\n}\n\nfunction changeScaleLimit(scale, range, limit, suggestedLimit) {\n if (isFinite(range[limit]) && !scaleLimitDefined(scale.options, limit, suggestedLimit)) {\n const changed = scale[limit] !== range[limit];\n scale[limit] = range[limit];\n return changed;\n }\n}\n\nfunction scaleLimitDefined(scaleOptions, limit, suggestedLimit) {\n return defined(scaleOptions[limit]) || defined(scaleOptions[suggestedLimit]);\n}\n\nfunction verifyScaleIDs(annotation, scales) {\n for (const key of ['scaleID', 'xScaleID', 'yScaleID']) {\n const scaleID = retrieveScaleID(scales, annotation, key);\n if (scaleID && !scales[scaleID] && verifyProperties(annotation, key)) {\n console.warn(`No scale found with id '${scaleID}' for annotation '${annotation.id}'`);\n }\n }\n}\n\nfunction verifyProperties(annotation, key) {\n if (key === 'scaleID') {\n return true;\n }\n const axis = key.charAt(0);\n for (const prop of ['Min', 'Max', 'Value']) {\n if (defined(annotation[axis + prop])) {\n return true;\n }\n }\n return false;\n}\n\nfunction getScaleLimits(scales, scale, annotations) {\n const axis = scale.axis;\n const scaleID = scale.id;\n const scaleIDOption = axis + 'ScaleID';\n const limits = {\n min: valueOrDefault(scale.min, Number.NEGATIVE_INFINITY),\n max: valueOrDefault(scale.max, Number.POSITIVE_INFINITY)\n };\n for (const annotation of annotations) {\n if (annotation.scaleID === scaleID) {\n updateLimits(annotation, scale, ['value', 'endValue'], limits);\n } else if (retrieveScaleID(scales, annotation, scaleIDOption) === scaleID) {\n updateLimits(annotation, scale, [axis + 'Min', axis + 'Max', axis + 'Value'], limits);\n }\n }\n return limits;\n}\n\nfunction updateLimits(annotation, scale, props, limits) {\n for (const prop of props) {\n const raw = annotation[prop];\n if (defined(raw)) {\n const value = scale.parse(raw);\n limits.min = Math.min(limits.min, value);\n limits.max = Math.max(limits.max, value);\n }\n }\n}\n\nclass BoxAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options);\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.options.rotation);\n drawBox(ctx, this, this.options);\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n return resolveBoxAndLabelProperties(chart, options);\n }\n}\n\nBoxAnnotation.id = 'boxAnnotation';\n\nBoxAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n hitTolerance: 0,\n label: {\n backgroundColor: 'transparent',\n borderWidth: 0,\n callout: {\n display: false\n },\n color: 'black',\n content: null,\n display: false,\n drawTime: undefined,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: 'bold'\n },\n height: undefined,\n hitTolerance: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: undefined,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0,\n z: undefined\n },\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nBoxAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nBoxAnnotation.descriptors = {\n label: {\n _fallback: true\n }\n};\n\nclass DoughnutLabelAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n return inLabelRange(\n {x: mouseX, y: mouseY},\n {rect: this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), center: this.getCenterPoint(useFinalPosition)},\n axis,\n {rotation: this.rotation, borderWidth: 0, hitTolerance: this.options.hitTolerance}\n );\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n if (!options.display || !options.content) {\n return;\n }\n drawBackground(ctx, this);\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.rotation);\n drawLabel(ctx, this, options, this._fitRatio);\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n const meta = getDatasetMeta(chart, options);\n if (!meta) {\n return {};\n }\n const {controllerMeta, point, radius} = getControllerMeta(chart, options, meta);\n let labelSize = measureLabelSize(chart.ctx, options);\n const _fitRatio = getFitRatio(labelSize, radius);\n if (shouldFit(options, _fitRatio)) {\n labelSize = {width: labelSize.width * _fitRatio, height: labelSize.height * _fitRatio};\n }\n const {position, xAdjust, yAdjust} = options;\n const boxSize = measureLabelRectangle(point, labelSize, {borderWidth: 0, position, xAdjust, yAdjust});\n return {\n initProperties: initAnimationProperties(chart, boxSize, options),\n ...boxSize,\n ...controllerMeta,\n rotation: options.rotation,\n _fitRatio\n };\n }\n}\n\nDoughnutLabelAnnotation.id = 'doughnutLabelAnnotation';\n\nDoughnutLabelAnnotation.defaults = {\n autoFit: true,\n autoHide: true,\n backgroundColor: 'transparent',\n backgroundShadowColor: 'transparent',\n borderColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderShadowColor: 'transparent',\n borderWidth: 0,\n color: 'black',\n content: null,\n display: true,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: undefined\n },\n height: undefined,\n hitTolerance: 0,\n init: undefined,\n opacity: undefined,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n spacing: 1,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0\n};\n\nDoughnutLabelAnnotation.defaultRoutes = {\n};\n\nfunction getDatasetMeta(chart, options) {\n return chart.getSortedVisibleDatasetMetas().reduce(function(result, value) {\n const controller = value.controller;\n if (controller instanceof DoughnutController &&\n isControllerVisible(chart, options, value.data) &&\n (!result || controller.innerRadius < result.controller.innerRadius) &&\n controller.options.circumference >= 90) {\n return value;\n }\n return result;\n }, undefined);\n}\n\nfunction isControllerVisible(chart, options, elements) {\n if (!options.autoHide) {\n return true;\n }\n for (let i = 0; i < elements.length; i++) {\n if (!elements[i].hidden && chart.getDataVisibility(i)) {\n return true;\n }\n }\n}\n\nfunction getControllerMeta({chartArea}, options, meta) {\n const {left, top, right, bottom} = chartArea;\n const {innerRadius, offsetX, offsetY} = meta.controller;\n const x = (left + right) / 2 + offsetX;\n const y = (top + bottom) / 2 + offsetY;\n const square = {\n left: Math.max(x - innerRadius, left),\n right: Math.min(x + innerRadius, right),\n top: Math.max(y - innerRadius, top),\n bottom: Math.min(y + innerRadius, bottom)\n };\n const point = {\n x: (square.left + square.right) / 2,\n y: (square.top + square.bottom) / 2\n };\n const space = options.spacing + options.borderWidth / 2;\n const _radius = innerRadius - space;\n const _counterclockwise = point.y > y;\n const side = _counterclockwise ? top + space : bottom - space;\n const angles = getAngles(side, x, y, _radius);\n const controllerMeta = {\n _centerX: x,\n _centerY: y,\n _radius,\n _counterclockwise,\n ...angles\n };\n return {\n controllerMeta,\n point,\n radius: Math.min(innerRadius, Math.min(square.right - square.left, square.bottom - square.top) / 2)\n };\n}\n\nfunction getFitRatio({width, height}, radius) {\n const hypo = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));\n return (radius * 2) / hypo;\n}\n\nfunction getAngles(y, centerX, centerY, radius) {\n const yk2 = Math.pow(centerY - y, 2);\n const r2 = Math.pow(radius, 2);\n const b = centerX * -2;\n const c = Math.pow(centerX, 2) + yk2 - r2;\n const delta = Math.pow(b, 2) - (4 * c);\n if (delta <= 0) {\n return {\n _startAngle: 0,\n _endAngle: TAU\n };\n }\n const start = (-b - Math.sqrt(delta)) / 2;\n const end = (-b + Math.sqrt(delta)) / 2;\n return {\n _startAngle: getAngleFromPoint({x: centerX, y: centerY}, {x: start, y}).angle,\n _endAngle: getAngleFromPoint({x: centerX, y: centerY}, {x: end, y}).angle\n };\n}\n\nfunction drawBackground(ctx, element) {\n const {_centerX, _centerY, _radius, _startAngle, _endAngle, _counterclockwise, options} = element;\n ctx.save();\n const stroke = setBorderStyle(ctx, options);\n ctx.fillStyle = options.backgroundColor;\n ctx.beginPath();\n ctx.arc(_centerX, _centerY, _radius, _startAngle, _endAngle, _counterclockwise);\n ctx.closePath();\n ctx.fill();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n}\n\nclass LabelAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n return inLabelRange(\n {x: mouseX, y: mouseY},\n {rect: this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), center: this.getCenterPoint(useFinalPosition)},\n axis,\n {rotation: this.rotation, borderWidth: this.options.borderWidth, hitTolerance: this.options.hitTolerance}\n );\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n const visible = !defined(this._visible) || this._visible;\n if (!options.display || !options.content || !visible) {\n return;\n }\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.rotation);\n drawCallout(ctx, this);\n drawBox(ctx, this, options);\n drawLabel(ctx, getLabelSize(this), options);\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n let point;\n if (!isBoundToPoint(options)) {\n const {centerX, centerY} = resolveBoxProperties(chart, options);\n point = {x: centerX, y: centerY};\n } else {\n point = getChartPoint(chart, options);\n }\n const padding = toPadding(options.padding);\n const labelSize = measureLabelSize(chart.ctx, options);\n const boxSize = measureLabelRectangle(point, labelSize, options, padding);\n return {\n initProperties: initAnimationProperties(chart, boxSize, options),\n pointX: point.x,\n pointY: point.y,\n ...boxSize,\n rotation: options.rotation\n };\n }\n}\n\nLabelAnnotation.id = 'labelAnnotation';\n\nLabelAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundColor: 'transparent',\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 0,\n borderShadowColor: 'transparent',\n borderWidth: 0,\n callout: {\n borderCapStyle: 'butt',\n borderColor: undefined,\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 1,\n display: false,\n margin: 5,\n position: 'auto',\n side: 5,\n start: '50%',\n },\n color: 'black',\n content: null,\n display: true,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: undefined\n },\n height: undefined,\n hitTolerance: 0,\n init: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nLabelAnnotation.defaultRoutes = {\n borderColor: 'color'\n};\n\nfunction getLabelSize({x, y, width, height, options}) {\n const hBorderWidth = options.borderWidth / 2;\n const padding = toPadding(options.padding);\n return {\n x: x + padding.left + hBorderWidth,\n y: y + padding.top + hBorderWidth,\n width: width - padding.left - padding.right - options.borderWidth,\n height: height - padding.top - padding.bottom - options.borderWidth\n };\n}\n\nconst pointInLine = (p1, p2, t) => ({x: p1.x + t * (p2.x - p1.x), y: p1.y + t * (p2.y - p1.y)});\nconst interpolateX = (y, p1, p2) => pointInLine(p1, p2, Math.abs((y - p1.y) / (p2.y - p1.y))).x;\nconst interpolateY = (x, p1, p2) => pointInLine(p1, p2, Math.abs((x - p1.x) / (p2.x - p1.x))).y;\nconst sqr = v => v * v;\nconst rangeLimit = (mouseX, mouseY, {x, y, x2, y2}, axis) => axis === 'y' ? {start: Math.min(y, y2), end: Math.max(y, y2), value: mouseY} : {start: Math.min(x, x2), end: Math.max(x, x2), value: mouseX};\n// http://www.independent-software.com/determining-coordinates-on-a-html-canvas-bezier-curve.html\nconst coordInCurve = (start, cp, end, t) => (1 - t) * (1 - t) * start + 2 * (1 - t) * t * cp + t * t * end;\nconst pointInCurve = (start, cp, end, t) => ({x: coordInCurve(start.x, cp.x, end.x, t), y: coordInCurve(start.y, cp.y, end.y, t)});\nconst coordAngleInCurve = (start, cp, end, t) => 2 * (1 - t) * (cp - start) + 2 * t * (end - cp);\nconst angleInCurve = (start, cp, end, t) => -Math.atan2(coordAngleInCurve(start.x, cp.x, end.x, t), coordAngleInCurve(start.y, cp.y, end.y, t)) + 0.5 * PI;\n\nclass LineAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const hitSize = (this.options.borderWidth + this.options.hitTolerance) / 2;\n if (axis !== 'x' && axis !== 'y') {\n const point = {mouseX, mouseY};\n const {path, ctx} = this;\n if (path) {\n setBorderStyle(ctx, this.options);\n ctx.lineWidth += this.options.hitTolerance;\n const {chart} = this.$context;\n const mx = mouseX * chart.currentDevicePixelRatio;\n const my = mouseY * chart.currentDevicePixelRatio;\n const result = ctx.isPointInStroke(path, mx, my) || isOnLabel(this, point, useFinalPosition);\n ctx.restore();\n return result;\n }\n const epsilon = sqr(hitSize);\n return intersects(this, point, epsilon, useFinalPosition) || isOnLabel(this, point, useFinalPosition);\n }\n return inAxisRange(this, {mouseX, mouseY}, axis, {hitSize, useFinalPosition});\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {x, y, x2, y2, cp, options} = this;\n\n ctx.save();\n if (!setBorderStyle(ctx, options)) {\n // no border width, then line is not drawn\n return ctx.restore();\n }\n setShadowStyle(ctx, options);\n\n const length = Math.sqrt(Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2));\n if (options.curve && cp) {\n drawCurve(ctx, this, cp, length);\n return ctx.restore();\n }\n const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(this);\n const angle = Math.atan2(y2 - y, x2 - x);\n ctx.translate(x, y);\n ctx.rotate(angle);\n ctx.beginPath();\n ctx.moveTo(0 + startAdjust, 0);\n ctx.lineTo(length - endAdjust, 0);\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n drawArrowHead(ctx, 0, startAdjust, startOpts);\n drawArrowHead(ctx, length, -endAdjust, endOpts);\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n const area = resolveLineProperties(chart, options);\n const {x, y, x2, y2} = area;\n const inside = isLineInArea(area, chart.chartArea);\n const properties = inside\n ? limitLineToArea({x, y}, {x: x2, y: y2}, chart.chartArea)\n : {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)};\n properties.centerX = (x2 + x) / 2;\n properties.centerY = (y2 + y) / 2;\n properties.initProperties = initAnimationProperties(chart, properties, options);\n if (options.curve) {\n const p1 = {x: properties.x, y: properties.y};\n const p2 = {x: properties.x2, y: properties.y2};\n properties.cp = getControlPoint(properties, options, distanceBetweenPoints(p1, p2));\n }\n const labelProperties = resolveLabelElementProperties(chart, properties, options.label);\n // additonal prop to manage zoom/pan\n labelProperties._visible = inside;\n\n properties.elements = [{\n type: 'label',\n optionScope: 'label',\n properties: labelProperties,\n initProperties: properties.initProperties\n }];\n return properties;\n }\n}\n\nLineAnnotation.id = 'lineAnnotation';\n\nconst arrowHeadsDefaults = {\n backgroundColor: undefined,\n backgroundShadowColor: undefined,\n borderColor: undefined,\n borderDash: undefined,\n borderDashOffset: undefined,\n borderShadowColor: undefined,\n borderWidth: undefined,\n display: undefined,\n fill: undefined,\n length: undefined,\n shadowBlur: undefined,\n shadowOffsetX: undefined,\n shadowOffsetY: undefined,\n width: undefined\n};\n\nLineAnnotation.defaults = {\n adjustScaleRange: true,\n arrowHeads: {\n display: false,\n end: Object.assign({}, arrowHeadsDefaults),\n fill: false,\n length: 12,\n start: Object.assign({}, arrowHeadsDefaults),\n width: 6\n },\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 2,\n curve: false,\n controlPoint: {\n y: '-50%'\n },\n display: true,\n endValue: undefined,\n init: undefined,\n hitTolerance: 0,\n label: {\n backgroundColor: 'rgba(0,0,0,0.8)',\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderColor: 'black',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 6,\n borderShadowColor: 'transparent',\n borderWidth: 0,\n callout: Object.assign({}, LabelAnnotation.defaults.callout),\n color: '#fff',\n content: null,\n display: false,\n drawTime: undefined,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: 'bold'\n },\n height: undefined,\n hitTolerance: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0,\n z: undefined\n },\n scaleID: undefined,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n value: undefined,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nLineAnnotation.descriptors = {\n arrowHeads: {\n start: {\n _fallback: true\n },\n end: {\n _fallback: true\n },\n _fallback: true\n }\n};\n\nLineAnnotation.defaultRoutes = {\n borderColor: 'color'\n};\n\nfunction inAxisRange(element, {mouseX, mouseY}, axis, {hitSize, useFinalPosition}) {\n const limit = rangeLimit(mouseX, mouseY, element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis);\n return inLimit(limit, hitSize) || isOnLabel(element, {mouseX, mouseY}, useFinalPosition, axis);\n}\n\nfunction isLineInArea({x, y, x2, y2}, {top, right, bottom, left}) {\n return !(\n (x < left && x2 < left) ||\n (x > right && x2 > right) ||\n (y < top && y2 < top) ||\n (y > bottom && y2 > bottom)\n );\n}\n\nfunction limitPointToArea({x, y}, p2, {top, right, bottom, left}) {\n if (x < left) {\n y = interpolateY(left, {x, y}, p2);\n x = left;\n }\n if (x > right) {\n y = interpolateY(right, {x, y}, p2);\n x = right;\n }\n if (y < top) {\n x = interpolateX(top, {x, y}, p2);\n y = top;\n }\n if (y > bottom) {\n x = interpolateX(bottom, {x, y}, p2);\n y = bottom;\n }\n return {x, y};\n}\n\nfunction limitLineToArea(p1, p2, area) {\n const {x, y} = limitPointToArea(p1, p2, area);\n const {x: x2, y: y2} = limitPointToArea(p2, p1, area);\n return {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)};\n}\n\nfunction intersects(element, {mouseX, mouseY}, epsilon = EPSILON, useFinalPosition) {\n // Adapted from https://stackoverflow.com/a/6853926/25507\n const {x: x1, y: y1, x2, y2} = element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition);\n const dx = x2 - x1;\n const dy = y2 - y1;\n const lenSq = sqr(dx) + sqr(dy);\n const t = lenSq === 0 ? -1 : ((mouseX - x1) * dx + (mouseY - y1) * dy) / lenSq;\n\n let xx, yy;\n if (t < 0) {\n xx = x1;\n yy = y1;\n } else if (t > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + t * dx;\n yy = y1 + t * dy;\n }\n return (sqr(mouseX - xx) + sqr(mouseY - yy)) <= epsilon;\n}\n\nfunction isOnLabel(element, {mouseX, mouseY}, useFinalPosition, axis) {\n const label = element.label;\n return label.options.display && label.inRange(mouseX, mouseY, axis, useFinalPosition);\n}\n\nfunction resolveLabelElementProperties(chart, properties, options) {\n const borderWidth = options.borderWidth;\n const padding = toPadding(options.padding);\n const textSize = measureLabelSize(chart.ctx, options);\n const width = textSize.width + padding.width + borderWidth;\n const height = textSize.height + padding.height + borderWidth;\n return calculateLabelPosition(properties, options, {width, height, padding}, chart.chartArea);\n}\n\nfunction calculateAutoRotation(properties) {\n const {x, y, x2, y2} = properties;\n const rotation = Math.atan2(y2 - y, x2 - x);\n // Flip the rotation if it goes > PI/2 or < -PI/2, so label stays upright\n return rotation > PI / 2 ? rotation - PI : rotation < PI / -2 ? rotation + PI : rotation;\n}\n\nfunction calculateLabelPosition(properties, label, sizes, chartArea) {\n const {width, height, padding} = sizes;\n const {xAdjust, yAdjust} = label;\n const p1 = {x: properties.x, y: properties.y};\n const p2 = {x: properties.x2, y: properties.y2};\n const rotation = label.rotation === 'auto' ? calculateAutoRotation(properties) : toRadians(label.rotation);\n const size = rotatedSize(width, height, rotation);\n const t = calculateT(properties, label, {labelSize: size, padding}, chartArea);\n const pt = properties.cp ? pointInCurve(p1, properties.cp, p2, t) : pointInLine(p1, p2, t);\n const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: padding.left};\n const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: padding.top};\n const centerX = adjustLabelCoordinate(pt.x, xCoordinateSizes) + xAdjust;\n const centerY = adjustLabelCoordinate(pt.y, yCoordinateSizes) + yAdjust;\n return {\n x: centerX - (width / 2),\n y: centerY - (height / 2),\n x2: centerX + (width / 2),\n y2: centerY + (height / 2),\n centerX,\n centerY,\n pointX: pt.x,\n pointY: pt.y,\n width,\n height,\n rotation: toDegrees(rotation)\n };\n}\n\nfunction rotatedSize(width, height, rotation) {\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n return {\n w: Math.abs(width * cos) + Math.abs(height * sin),\n h: Math.abs(width * sin) + Math.abs(height * cos)\n };\n}\n\nfunction calculateT(properties, label, sizes, chartArea) {\n let t;\n const space = spaceAround(properties, chartArea);\n if (label.position === 'start') {\n t = calculateTAdjust({w: properties.x2 - properties.x, h: properties.y2 - properties.y}, sizes, label, space);\n } else if (label.position === 'end') {\n t = 1 - calculateTAdjust({w: properties.x - properties.x2, h: properties.y - properties.y2}, sizes, label, space);\n } else {\n t = getRelativePosition(1, label.position);\n }\n return t;\n}\n\nfunction calculateTAdjust(lineSize, sizes, label, space) {\n const {labelSize, padding} = sizes;\n const lineW = lineSize.w * space.dx;\n const lineH = lineSize.h * space.dy;\n const x = (lineW > 0) && ((labelSize.w / 2 + padding.left - space.x) / lineW);\n const y = (lineH > 0) && ((labelSize.h / 2 + padding.top - space.y) / lineH);\n return clamp(Math.max(x, y), 0, 0.25);\n}\n\nfunction spaceAround(properties, chartArea) {\n const {x, x2, y, y2} = properties;\n const t = Math.min(y, y2) - chartArea.top;\n const l = Math.min(x, x2) - chartArea.left;\n const b = chartArea.bottom - Math.max(y, y2);\n const r = chartArea.right - Math.max(x, x2);\n return {\n x: Math.min(l, r),\n y: Math.min(t, b),\n dx: l <= r ? 1 : -1,\n dy: t <= b ? 1 : -1\n };\n}\n\nfunction adjustLabelCoordinate(coordinate, labelSizes) {\n const {size, min, max, padding} = labelSizes;\n const halfSize = size / 2;\n if (size > max - min) {\n // if it does not fit, display as much as possible\n return (max + min) / 2;\n }\n if (min >= (coordinate - padding - halfSize)) {\n coordinate = min + padding + halfSize;\n }\n if (max <= (coordinate + padding + halfSize)) {\n coordinate = max - padding - halfSize;\n }\n return coordinate;\n}\n\nfunction getArrowHeads(line) {\n const options = line.options;\n const arrowStartOpts = options.arrowHeads && options.arrowHeads.start;\n const arrowEndOpts = options.arrowHeads && options.arrowHeads.end;\n return {\n startOpts: arrowStartOpts,\n endOpts: arrowEndOpts,\n startAdjust: getLineAdjust(line, arrowStartOpts),\n endAdjust: getLineAdjust(line, arrowEndOpts)\n };\n}\n\nfunction getLineAdjust(line, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return 0;\n }\n const {length, width} = arrowOpts;\n const adjust = line.options.borderWidth / 2;\n const p1 = {x: length, y: width + adjust};\n const p2 = {x: 0, y: adjust};\n return Math.abs(interpolateX(0, p1, p2));\n}\n\nfunction drawArrowHead(ctx, offset, adjust, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return;\n }\n const {length, width, fill, backgroundColor, borderColor} = arrowOpts;\n const arrowOffsetX = Math.abs(offset - length) + adjust;\n ctx.beginPath();\n setShadowStyle(ctx, arrowOpts);\n setBorderStyle(ctx, arrowOpts);\n ctx.moveTo(arrowOffsetX, -width);\n ctx.lineTo(offset + adjust, 0);\n ctx.lineTo(arrowOffsetX, width);\n if (fill === true) {\n ctx.fillStyle = backgroundColor || borderColor;\n ctx.closePath();\n ctx.fill();\n ctx.shadowColor = 'transparent';\n } else {\n ctx.shadowColor = arrowOpts.borderShadowColor;\n }\n ctx.stroke();\n}\n\nfunction getControlPoint(properties, options, distance) {\n const {x, y, x2, y2, centerX, centerY} = properties;\n const angle = Math.atan2(y2 - y, x2 - x);\n const cp = toPosition(options.controlPoint, 0);\n const point = {\n x: centerX + getSize(distance, cp.x, false),\n y: centerY + getSize(distance, cp.y, false)\n };\n return rotated(point, {x: centerX, y: centerY}, angle);\n}\n\nfunction drawArrowHeadOnCurve(ctx, {x, y}, {angle, adjust}, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return;\n }\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(angle);\n drawArrowHead(ctx, 0, -adjust, arrowOpts);\n ctx.restore();\n}\n\nfunction drawCurve(ctx, element, cp, length) {\n const {x, y, x2, y2, options} = element;\n const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(element);\n const p1 = {x, y};\n const p2 = {x: x2, y: y2};\n const startAngle = angleInCurve(p1, cp, p2, 0);\n const endAngle = angleInCurve(p1, cp, p2, 1) - PI;\n const ps = pointInCurve(p1, cp, p2, startAdjust / length);\n const pe = pointInCurve(p1, cp, p2, 1 - endAdjust / length);\n\n const path = new Path2D();\n ctx.beginPath();\n path.moveTo(ps.x, ps.y);\n path.quadraticCurveTo(cp.x, cp.y, pe.x, pe.y);\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke(path);\n element.path = path;\n element.ctx = ctx;\n drawArrowHeadOnCurve(ctx, ps, {angle: startAngle, adjust: startAdjust}, startOpts);\n drawArrowHeadOnCurve(ctx, pe, {angle: endAngle, adjust: endAdjust}, endOpts);\n}\n\nclass EllipseAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const rotation = this.options.rotation;\n const hitSize = (this.options.borderWidth + this.options.hitTolerance) / 2;\n if (axis !== 'x' && axis !== 'y') {\n return pointInEllipse({x: mouseX, y: mouseY}, this.getProps(['width', 'height', 'centerX', 'centerY'], useFinalPosition), rotation, hitSize);\n }\n const {x, y, x2, y2} = this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition);\n const limit = axis === 'y' ? {start: y, end: y2} : {start: x, end: x2};\n const rotatedPoint = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-rotation));\n return rotatedPoint[axis] >= limit.start - hitSize - EPSILON && rotatedPoint[axis] <= limit.end + hitSize + EPSILON;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {width, height, centerX, centerY, options} = this;\n ctx.save();\n translate(ctx, this.getCenterPoint(), options.rotation);\n setShadowStyle(ctx, this.options);\n ctx.beginPath();\n ctx.fillStyle = options.backgroundColor;\n const stroke = setBorderStyle(ctx, options);\n ctx.ellipse(centerX, centerY, height / 2, width / 2, PI / 2, 0, 2 * PI);\n ctx.fill();\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n return resolveBoxAndLabelProperties(chart, options);\n }\n\n}\n\nEllipseAnnotation.id = 'ellipseAnnotation';\n\nEllipseAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n hitTolerance: 0,\n init: undefined,\n label: Object.assign({}, BoxAnnotation.defaults.label),\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nEllipseAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nEllipseAnnotation.descriptors = {\n label: {\n _fallback: true\n }\n};\n\nfunction pointInEllipse(p, ellipse, rotation, hitSize) {\n const {width, height, centerX, centerY} = ellipse;\n const xRadius = width / 2;\n const yRadius = height / 2;\n\n if (xRadius <= 0 || yRadius <= 0) {\n return false;\n }\n // https://stackoverflow.com/questions/7946187/point-and-ellipse-rotated-position-test-algorithm\n const angle = toRadians(rotation || 0);\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const a = Math.pow(cosAngle * (p.x - centerX) + sinAngle * (p.y - centerY), 2);\n const b = Math.pow(sinAngle * (p.x - centerX) - cosAngle * (p.y - centerY), 2);\n return (a / Math.pow(xRadius + hitSize, 2)) + (b / Math.pow(yRadius + hitSize, 2)) <= 1.0001;\n}\n\nclass PointAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y, x2, y2, width} = this.getProps(['x', 'y', 'x2', 'y2', 'width'], useFinalPosition);\n const hitSize = (this.options.borderWidth + this.options.hitTolerance) / 2;\n if (axis !== 'x' && axis !== 'y') {\n return inPointRange({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), width / 2, hitSize);\n }\n const limit = axis === 'y' ? {start: y, end: y2, value: mouseY} : {start: x, end: x2, value: mouseX};\n return inLimit(limit, hitSize);\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n const borderWidth = options.borderWidth;\n if (options.radius < 0.1) {\n return;\n }\n ctx.save();\n ctx.fillStyle = options.backgroundColor;\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n drawPoint(ctx, this, this.centerX, this.centerY);\n if (stroke && !isImageOrCanvas(options.pointStyle)) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n options.borderWidth = borderWidth;\n }\n\n resolveElementProperties(chart, options) {\n const properties = resolvePointProperties(chart, options);\n properties.initProperties = initAnimationProperties(chart, properties, options);\n return properties;\n }\n}\n\nPointAnnotation.id = 'pointAnnotation';\n\nPointAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n hitTolerance: 0,\n init: undefined,\n pointStyle: 'circle',\n radius: 10,\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nPointAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nclass PolygonAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n if (axis !== 'x' && axis !== 'y') {\n return this.options.radius >= 0.1 && this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition);\n }\n const rotatedPoint = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n const axisPoints = this.elements.map((point) => axis === 'y' ? point.bY : point.bX);\n const start = Math.min(...axisPoints);\n const end = Math.max(...axisPoints);\n return rotatedPoint[axis] >= start && rotatedPoint[axis] <= end;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {elements, options} = this;\n ctx.save();\n ctx.beginPath();\n ctx.fillStyle = options.backgroundColor;\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n let first = true;\n for (const el of elements) {\n if (first) {\n ctx.moveTo(el.x, el.y);\n first = false;\n } else {\n ctx.lineTo(el.x, el.y);\n }\n }\n ctx.closePath();\n ctx.fill();\n // If no border, don't draw it\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n const properties = resolvePointProperties(chart, options);\n const {sides, rotation} = options;\n const elements = [];\n const angle = (2 * PI) / sides;\n let rad = rotation * RAD_PER_DEG;\n for (let i = 0; i < sides; i++, rad += angle) {\n const elProps = buildPointElement(properties, options, rad);\n elProps.initProperties = initAnimationProperties(chart, properties, options);\n elements.push(elProps);\n }\n properties.elements = elements;\n return properties;\n }\n}\n\nPolygonAnnotation.id = 'polygonAnnotation';\n\nPolygonAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n hitTolerance: 0,\n init: undefined,\n point: {\n radius: 0\n },\n radius: 10,\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n sides: 3,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nPolygonAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nfunction buildPointElement({centerX, centerY}, {radius, borderWidth, hitTolerance}, rad) {\n const hitSize = (borderWidth + hitTolerance) / 2;\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n const point = {x: centerX + sin * radius, y: centerY - cos * radius};\n return {\n type: 'point',\n optionScope: 'point',\n properties: {\n x: point.x,\n y: point.y,\n centerX: point.x,\n centerY: point.y,\n bX: centerX + sin * (radius + hitSize),\n bY: centerY - cos * (radius + hitSize)\n }\n };\n}\n\nfunction pointIsInPolygon(points, x, y, useFinalPosition) {\n let isInside = false;\n let A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition);\n for (const point of points) {\n const B = point.getProps(['bX', 'bY'], useFinalPosition);\n if ((B.bY > y) !== (A.bY > y) && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) {\n isInside = !isInside;\n }\n A = B;\n }\n return isInside;\n}\n\nconst annotationTypes = {\n box: BoxAnnotation,\n doughnutLabel: DoughnutLabelAnnotation,\n ellipse: EllipseAnnotation,\n label: LabelAnnotation,\n line: LineAnnotation,\n point: PointAnnotation,\n polygon: PolygonAnnotation\n};\n\n/**\n * Register fallback for annotation elements\n * For example lineAnnotation options would be looked through:\n * - the annotation object (options.plugins.annotation.annotations[id])\n * - element options (options.elements.lineAnnotation)\n * - element defaults (defaults.elements.lineAnnotation)\n * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here)\n */\nObject.keys(annotationTypes).forEach(key => {\n defaults.describe(`elements.${annotationTypes[key].id}`, {\n _fallback: 'plugins.annotation.common'\n });\n});\n\nconst directUpdater = {\n update: Object.assign\n};\n\nconst hooks$1 = eventHooks.concat(elementHooks);\nconst resolve = (value, optDefs) => isObject(optDefs) ? resolveObj(value, optDefs) : value;\n\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").UpdateMode } UpdateMode\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\n/**\n * @param {string} prop\n * @returns {boolean}\n */\nconst isIndexable = (prop) => prop === 'color' || prop === 'font';\n\n/**\n * Resolve the annotation type, checking if is supported.\n * @param {string} [type=line] - annotation type\n * @returns {string} resolved annotation type\n */\nfunction resolveType(type = 'line') {\n if (annotationTypes[type]) {\n return type;\n }\n console.warn(`Unknown annotation type: '${type}', defaulting to 'line'`);\n return 'line';\n}\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n * @param {UpdateMode} mode\n */\nfunction updateElements(chart, state, options, mode) {\n const animations = resolveAnimations(chart, options.animations, mode);\n\n const annotations = state.annotations;\n const elements = resyncElements(state.elements, annotations);\n\n for (let i = 0; i < annotations.length; i++) {\n const annotationOptions = annotations[i];\n const element = getOrCreateElement(elements, i, annotationOptions.type);\n const resolver = annotationOptions.setContext(getContext(chart, element, elements, annotationOptions));\n const properties = element.resolveElementProperties(chart, resolver);\n\n properties.skip = toSkip(properties);\n\n if ('elements' in properties) {\n updateSubElements(element, properties.elements, resolver, animations);\n // Remove the sub-element definitions from properties, so the actual elements\n // are not overwritten by their definitions\n delete properties.elements;\n }\n\n if (!defined(element.x)) {\n // If the element is newly created, assing the properties directly - to\n // make them readily awailable to any scriptable options. If we do not do this,\n // the properties retruned by `resolveElementProperties` are available only\n // after options resolution.\n Object.assign(element, properties);\n }\n\n Object.assign(element, properties.initProperties);\n properties.options = resolveAnnotationOptions(resolver);\n\n animations.update(element, properties);\n }\n}\n\nfunction toSkip(properties) {\n return isNaN(properties.x) || isNaN(properties.y);\n}\n\nfunction resolveAnimations(chart, animOpts, mode) {\n if (mode === 'reset' || mode === 'none' || mode === 'resize') {\n return directUpdater;\n }\n return new Animations(chart, animOpts);\n}\n\nfunction updateSubElements(mainElement, elements, resolver, animations) {\n const subElements = mainElement.elements || (mainElement.elements = []);\n subElements.length = elements.length;\n for (let i = 0; i < elements.length; i++) {\n const definition = elements[i];\n const properties = definition.properties;\n const subElement = getOrCreateElement(subElements, i, definition.type, definition.initProperties);\n const subResolver = resolver[definition.optionScope].override(definition);\n properties.options = resolveAnnotationOptions(subResolver);\n animations.update(subElement, properties);\n }\n}\n\nfunction getOrCreateElement(elements, index, type, initProperties) {\n const elementClass = annotationTypes[resolveType(type)];\n let element = elements[index];\n if (!element || !(element instanceof elementClass)) {\n element = elements[index] = new elementClass();\n Object.assign(element, initProperties);\n }\n return element;\n}\n\nfunction resolveAnnotationOptions(resolver) {\n const elementClass = annotationTypes[resolveType(resolver.type)];\n const result = {};\n result.id = resolver.id;\n result.type = resolver.type;\n result.drawTime = resolver.drawTime;\n Object.assign(result,\n resolveObj(resolver, elementClass.defaults),\n resolveObj(resolver, elementClass.defaultRoutes));\n for (const hook of hooks$1) {\n result[hook] = resolver[hook];\n }\n return result;\n}\n\nfunction resolveObj(resolver, defs) {\n const result = {};\n for (const prop of Object.keys(defs)) {\n const optDefs = defs[prop];\n const value = resolver[prop];\n if (isIndexable(prop) && isArray(value)) {\n result[prop] = value.map((item) => resolve(item, optDefs));\n } else {\n result[prop] = resolve(value, optDefs);\n }\n }\n return result;\n}\n\nfunction getContext(chart, element, elements, annotation) {\n return element.$context || (element.$context = Object.assign(Object.create(chart.getContext()), {\n element,\n get elements() {\n return elements.filter((el) => el && el.options);\n },\n id: annotation.id,\n type: 'annotation'\n }));\n}\n\nfunction resyncElements(elements, annotations) {\n const count = annotations.length;\n const start = elements.length;\n\n if (start < count) {\n const add = count - start;\n elements.splice(start, 0, ...new Array(add));\n } else if (start > count) {\n elements.splice(count, start - count);\n }\n return elements;\n}\n\nvar version = \"3.1.0\";\n\nconst chartStates = new Map();\nconst isNotDoughnutLabel = annotation => annotation.type !== 'doughnutLabel';\nconst hooks = eventHooks.concat(elementHooks);\n\nvar annotation = {\n id: 'annotation',\n\n version,\n\n beforeRegister() {\n requireVersion('chart.js', '4.0', Chart.version);\n },\n\n afterRegister() {\n Chart.register(annotationTypes);\n },\n\n afterUnregister() {\n Chart.unregister(annotationTypes);\n },\n\n beforeInit(chart) {\n chartStates.set(chart, {\n annotations: [],\n elements: [],\n visibleElements: [],\n listeners: {},\n listened: false,\n moveListened: false,\n hooks: {},\n hooked: false,\n hovered: []\n });\n },\n\n beforeUpdate(chart, args, options) {\n const state = chartStates.get(chart);\n const annotations = state.annotations = [];\n\n let annotationOptions = options.annotations;\n if (isObject(annotationOptions)) {\n Object.keys(annotationOptions).forEach(key => {\n const value = annotationOptions[key];\n if (isObject(value)) {\n value.id = key;\n annotations.push(value);\n }\n });\n } else if (isArray(annotationOptions)) {\n annotations.push(...annotationOptions);\n }\n verifyScaleOptions(annotations.filter(isNotDoughnutLabel), chart.scales);\n },\n\n afterDataLimits(chart, args) {\n const state = chartStates.get(chart);\n adjustScaleRange(chart, args.scale, state.annotations.filter(isNotDoughnutLabel).filter(a => a.display && a.adjustScaleRange));\n },\n\n afterUpdate(chart, args, options) {\n const state = chartStates.get(chart);\n updateListeners(chart, state, options);\n updateElements(chart, state, options, args.mode);\n state.visibleElements = state.elements.filter(el => !el.skip && el.options.display);\n updateHooks(chart, state, options);\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n draw(chart, 'beforeDatasetsDraw', options.clip);\n },\n\n afterDatasetsDraw(chart, _args, options) {\n draw(chart, 'afterDatasetsDraw', options.clip);\n },\n\n beforeDatasetDraw(chart, _args, options) {\n draw(chart, _args.index, options.clip);\n },\n\n beforeDraw(chart, _args, options) {\n draw(chart, 'beforeDraw', options.clip);\n },\n\n afterDraw(chart, _args, options) {\n draw(chart, 'afterDraw', options.clip);\n },\n\n beforeEvent(chart, args, options) {\n const state = chartStates.get(chart);\n if (handleEvent(state, args.event, options)) {\n args.changed = true;\n }\n },\n\n afterDestroy(chart) {\n chartStates.delete(chart);\n },\n\n getAnnotations(chart) {\n const state = chartStates.get(chart);\n return state ? state.elements : [];\n },\n\n // only for testing\n _getAnnotationElementsAtEventForMode(visibleElements, event, options) {\n return getElements(visibleElements, event, options);\n },\n\n defaults: {\n animations: {\n numbers: {\n properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'],\n type: 'number'\n },\n colors: {\n properties: ['backgroundColor', 'borderColor'],\n type: 'color'\n }\n },\n clip: true,\n interaction: {\n mode: undefined,\n axis: undefined,\n intersect: undefined\n },\n common: {\n drawTime: 'afterDatasetsDraw',\n init: false,\n label: {\n }\n }\n },\n\n descriptors: {\n _indexable: false,\n _scriptable: (prop) => !hooks.includes(prop) && prop !== 'init',\n annotations: {\n _allKeys: false,\n _fallback: (prop, opts) => `elements.${annotationTypes[resolveType(opts.type)].id}`\n },\n interaction: {\n _fallback: true\n },\n common: {\n label: {\n _indexable: isIndexable,\n _fallback: true\n },\n _indexable: isIndexable\n }\n },\n\n additionalOptionScopes: ['']\n};\n\nfunction draw(chart, caller, clip) {\n const {ctx, chartArea} = chart;\n const state = chartStates.get(chart);\n\n if (clip) {\n clipArea(ctx, chartArea);\n }\n\n const drawableElements = getDrawableElements(state.visibleElements, caller).sort((a, b) => a.element.options.z - b.element.options.z);\n for (const item of drawableElements) {\n drawElement(ctx, chartArea, state, item);\n }\n\n if (clip) {\n unclipArea(ctx);\n }\n}\n\nfunction getDrawableElements(elements, caller) {\n const drawableElements = [];\n for (const el of elements) {\n if (el.options.drawTime === caller) {\n drawableElements.push({element: el, main: true});\n }\n if (el.elements && el.elements.length) {\n for (const sub of el.elements) {\n if (sub.options.display && sub.options.drawTime === caller) {\n drawableElements.push({element: sub});\n }\n }\n }\n }\n return drawableElements;\n}\n\nfunction drawElement(ctx, chartArea, state, item) {\n const el = item.element;\n if (item.main) {\n invokeHook(state, el, 'beforeDraw');\n el.draw(ctx, chartArea);\n invokeHook(state, el, 'afterDraw');\n } else {\n el.draw(ctx, chartArea);\n }\n}\n\nexport { annotation as default };\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { chartColors } from '../charts.constants';\nimport { chartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(chartjsOptions, pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label ?? '', options.subLabel ?? ''],\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n} from '@tabler/icons-react';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport styles from './TablePagination.module.css';\nimport { FC, useEffect } from 'react';\nimport { TablePaginatedProps } from '../../table.types';\n\nexport type TablePaginationProps = Pick<\n TablePaginatedProps<unknown>,\n 'page' | 'pageSize' | 'paginationLabel' | 'total' | 'onPageChange'\n>;\n\nexport const getTableTotalPages = (\n total: number | undefined,\n pageSize: number,\n): number | undefined => {\n return total ? Math.ceil(total / pageSize) : undefined;\n};\n\nexport const TablePagination: FC<TablePaginationProps> = ({\n page,\n pageSize,\n paginationLabel,\n total,\n onPageChange,\n}) => {\n const totalPages = getTableTotalPages(total, pageSize);\n\n const disabledPrev = page <= 0;\n const disabledNext = !totalPages || page >= totalPages - 1;\n\n useEffect(() => {\n if (totalPages && page >= totalPages) {\n onPageChange(0);\n }\n }, [totalPages, page]);\n\n return (\n <div className={styles.tablePagination} aria-label=\"Table pagination controls\">\n <div className={styles.tablePaginationCentral}>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronsLeft}\n onClick={() => {\n onPageChange(0);\n }}\n disabled={disabledPrev}\n aria-label=\"First page\"\n />\n <ActionIcon\n icon={IconChevronLeft}\n onClick={() => {\n onPageChange(page - 1);\n }}\n disabled={disabledPrev}\n aria-label=\"Previous page\"\n />\n </div>\n <span>{paginationLabel ?? `Page ${page + 1} of ${totalPages ?? '?'}`}</span>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronRight}\n onClick={() => {\n onPageChange(page + 1);\n }}\n disabled={disabledNext}\n aria-label=\"Next page\"\n />\n <ActionIcon\n icon={IconChevronsRight}\n onClick={() => totalPages && onPageChange(totalPages - 1)}\n disabled={disabledNext}\n aria-label=\"Last page\"\n />\n </div>\n </div>\n </div>\n );\n};\n","import { CssSize } from '../../../../types/css.types';\n\nexport const TableSortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\nexport type TableSort<T> = {\n id: keyof T;\n direction: (typeof TableSortDirection)[keyof typeof TableSortDirection];\n};\nexport const TableHeaderAlign = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\n\nexport type TableHeaderItemAlign = (typeof TableHeaderAlign)[keyof typeof TableHeaderAlign];\n\nexport type TableHeaderCell = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => React.ReactElement<HTMLTableCellElement>;\n\nexport type TableHeaderItem<T> = {\n id: keyof T;\n title: React.ReactNode;\n align?: TableHeaderItemAlign;\n field?: keyof T;\n minWidth?: CssSize;\n sort?: TableSort<T>;\n accessor?: (row: T) => React.ReactNode;\n cell?: TableHeaderCell;\n};\n\nexport type TablePaginatedProps<T> = {\n showIndex?: boolean;\n className?: string;\n headers: TableHeaderItem<T>[];\n rows: T[];\n page: number;\n pageSize: number;\n paginationLabel?: string;\n total?: number;\n sort?: TableSort<T>;\n onRowIndexClick?: (rowIndex: number) => void;\n onPageChange: (page: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n","import { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TablePaginatedProps, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\n\nexport type TableHeaderProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'sort' | 'onSortChange'\n>;\n\nconst getHeaderAriaSort = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id ? (sort.direction === 'asc' ? 'ascending' : 'descending') : 'none';\n};\n\nconst getHeaderAriaLabel = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id\n ? sort.direction === 'asc'\n ? `Sort by ${header.title}, currently ascending. Activate to sort descending.`\n : `Sort by ${header.title}, currently descending. Activate to sort ascending.`\n : `Sort by ${header.title}. Activate to sort ascending.`;\n};\nexport const TableHeader = <T,>({\n headers,\n sort,\n showIndex,\n onSortChange,\n}: TableHeaderProps<T>) => {\n const getSortIcon = (header: TableHeaderItem<T>) => {\n if (!sort) return <IconCaretUpDownFilled />;\n\n if (sort.id === header.id) {\n if (sort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (sort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleSort = (id: keyof T) => {\n if (!onSortChange) return;\n\n if (!sort) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n if (sort) {\n // New sort\n if (sort.id !== id) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n // Toggle sort direction\n if (sort.direction === TableSortDirection.ASC) {\n return onSortChange({ id, direction: TableSortDirection.DESC });\n } else if (sort.direction === TableSortDirection.DESC) {\n return onSortChange(undefined); // Remove sort after DESC\n }\n }\n };\n\n return (\n <thead className={styles.tableHeader}>\n <tr>\n {showIndex && (\n <th className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>#</th>\n )}\n {headers.map((header) => (\n <th\n className={styles.tableHeaderCell}\n key={header.id as string}\n style={{ minWidth: header.minWidth }}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(sort, header)}\n >\n <button\n onClick={() => handleSort(header.id)}\n aria-label={getHeaderAriaLabel(sort, header)}\n >\n {header.title}\n {getSortIcon(header)}\n </button>\n </th>\n ))}\n </tr>\n </thead>\n );\n};\n","import styles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TablePaginatedProps } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'pageSize' | 'page' | 'onRowIndexClick'\n>;\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n}: TableBodyProps<T>) => {\n return (\n <tbody className={styles.tableBody}>\n {rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n onClick={() => onRowIndexClick?.(rowIndex)}\n className={clsx(rowIndex === rows.length - 1 && tableStyles.tableLastRow)}\n >\n {showIndex && (\n <td className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>\n {pageSize * page + rowIndex + 1}\n </td>\n )}\n {headers.map((header, cellIndex) => (\n <TableBodyCell\n key={cellIndex}\n header={header}\n row={row}\n rowIndex={rowIndex}\n cellIndex={cellIndex}\n />\n ))}\n </tr>\n ))}\n </tbody>\n );\n};\n\ntype TableBodyCellProps<T> = {\n header: TableHeaderItem<T>;\n row: T;\n rowIndex: number;\n cellIndex: number;\n};\n\nconst TableBodyCell = <T,>({ header, row, rowIndex, cellIndex }: TableBodyCellProps<T>) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const value =\n header.accessor !== undefined\n ? header.accessor(row)\n : header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: styles.tableBodyCell });\n }\n\n const handleCopy = () => {\n setIsPressedCopy(true);\n if (value !== undefined) {\n navigator.clipboard.writeText(String(value));\n }\n };\n\n return (\n <td\n key={`${rowIndex}-${cellIndex}`}\n title={value}\n style={{ textAlign: header.align }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n styles.copyButton,\n header.align === TableHeaderAlign.RIGHT && styles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {value}\n </td>\n );\n};\n","import * as React from 'react';\nimport styles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { TablePagination } from './components/TablePagination/TablePagination';\nimport { TableHeader } from './components/TableHeader/TableHeader';\nimport { TableBody } from './components/TableBody/TableBody';\nimport { TablePaginatedProps } from './table.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TablePaginated = React.forwardRef<HTMLDivElement, TablePaginatedProps<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <T extends Record<string, any>>(\n props: TablePaginatedProps<T>,\n ref: React.Ref<HTMLDivElement>,\n ): React.JSX.Element => {\n const {\n headers,\n rows,\n className,\n total,\n page,\n pageSize,\n paginationLabel,\n sort,\n showIndex = false,\n onRowIndexClick,\n onPageChange,\n onSortChange,\n } = props;\n\n return (\n <div ref={ref} className={clsx(styles.tableContainer, className)}>\n <div className={styles.tableContainerScroll}>\n <table className={styles.table}>\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n <TableBody\n onRowIndexClick={onRowIndexClick}\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n page={page}\n pageSize={pageSize}\n />\n </table>\n </div>\n <TablePagination\n page={page}\n pageSize={pageSize}\n paginationLabel={paginationLabel}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n },\n);\n\nTablePaginated.displayName = 'TablePaginated';\n"],"names":["countOccurrences","arrays","countObj","array","v","getInAll","acc","curr","getInMultiple","getNotInAll","getNotInMultiple","getObjectKeys","obj","hoistEnumerable","keys","key","isObject","value","isPropDescriptor","hasFlagKey","hasMethod","hasMethodKeys","isDescriptor","validKeys","defaults","mergician","optionsOrObject","objects","options","settings","dedupArrayMap","sortArrayMap","sortArrayFn","circularRefs","mergeDepth","_getObjectKeys","_mergician","objects2","mergeKeyList","newObjProps","targetObj","srcObj","i","targetVal","mergeDescriptor","isReturnVal","mergeVal","srcDescriptor","returnVal","keyArray","returnDescriptor","configurable","enumerable","get","set","writable","propDescriptor","newObj","customProtos","protosArr","proto","newObjProto","DEFAULT_LOCALE","normalizeEntities","entities","mapFn","x","filterFn","filtered","getName","checkTimeDimension","timeDimension","validateOrderBy","orderByParam","dimensions","measures","timeDimensions","unknownDimensionsOrMeasures","dimensionAndMeasureNames","orderBy","name","createBuiltInType","typeConfig","validateFilter","filter","convertFilterValue","timeRange","deduplicateEntitiesByName","seen","entity","DIMENSION_TYPE","MEASURE_TYPE","deepFlattenSelect","input","processSelectParam","selectParam","result","flat","ent","isDimensionOrMeasure","isTimeDimension","isDimension","dimension","granularity","_a","isMeasure","type","validateLegacyFields","request","m","_b","processApiSelection","selectResult","legacyError","validateOrderByLogic","validateFiltersLogic","filters","errors","f","index","e","buildQueryObject","order","LOAD_DATA_EVENT","executeDataRequest","triggerElement","componentId","propertyName","apiResult","orderByError","filterError","o","query","loadData","requestParams","dimensionOrMeasure","getOperationObject","operation","Value","getBundleHash$1","defineType","typeName","ALL_NATIVE_TYPES","bundleHash","embeddable","STRING","NUMBER","BOOLEAN","TIME","TIME_RANGE","GRANULARITY","DATASET","MEASURE","DIMENSION","DIMENSION_OR_MEASURE","DEFAULT_NATIVE_TYPES","getBundleHash","defineOption","option","_c","_d","date","from","to","fromDate","toDate","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","config","maybeKey","propName","reactJsxRuntime_production","jsxRuntimeModule","require$$0","defaultAttributes","createReactComponent","iconName","iconNamePascal","iconNode","Component","forwardRef","color","size","stroke","title","className","children","rest","ref","createElement","tag","attrs","__iconNode","IconChevronLeft","IconChevronRight","IconChevronsLeft","IconChevronsRight","IconCopy","IconLoader2","IconX","IconCaretDownFilled","IconCaretUpDownFilled","IconCaretUpFilled","IconCopyCheckFilled","r","n","clsx","Card","React","props","jsx","styles","CardHeader","subtitle","rightContent","jsxs","CardContent","ActionIcon","Icon","SelectFieldTrigger","StartIcon","valueLabel","placeholder","isClearable","isLoading","onClear","error","displayValue","showClearButton","handleClear","FieldFeedback","message","variant","FieldHeader","label","required","requiredLabel","InputField","disabled","role","EndIcon","onChange","clearable","errorMessage","hasError","TextField","maxLength","Fragment","NumberField","handleChange","numericValue","round","lim","l","h","p2b","n2b","b2n","n2p","map$1","hex","h1","b","h2","eq","isShort","hexParse","str","len","ret","alpha","a","hexString","HUE_RE","hsl2rgbn","s","k","hsv2rgbn","hwb2rgbn","w","rgb","hueValue","g","d","max","rgb2hsl","min","calln","c","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","p1","p2","rotate","deg","hslString","map","names$1","unpack","unpacked","tkeys","j","ok","nk","names","nameParse","RGB_RE","rgbParse","rgbString","interpolate","rgb1","rgb2","t","modHSL","ratio","tmp","clone","fromObject","functionParse","Color","weight","c1","c2","w2","p","w1","val","noop","uid","id","isNullOrUndef","isArray","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","toDimension","callback","fn","args","thisArg","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","source","target","klen","isValidKey","_merger","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","keyResolvers","_splitKey","parts","part","_getKeyResolver","resolveObjectKey","_capitalize","defined","isFunction","setsEqual","item","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","y","epsilon","niceNum","range","roundedRange","niceRange","fraction","_factorize","sqrt","isNonPrimitive","isNumber","almostWhole","rounded","_setMinAndMaxByKey","property","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","hi","lo","mid","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","method","base","res","object","unlistenArrayEvents","stub","listeners","_arrayUnique","items","requestAnimFrame","throttled","argsToUse","ticking","debounce","delay","timeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","iScale","vScale","_parsed","spanGaps","axis","minDefined","maxDefined","distanceToDefinedLo","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","changed","atEdge","elasticIn","elasticOut","effects","isPatternOrGradient","getHoverColor","numbers","colors","applyAnimationsDefaults","applyLayoutsDefaults","intlCache","getNumberFormat","locale","cacheKey","formatter","formatNumber","num","formatters","tickValue","ticks","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","remain","Ticks","applyScaleDefaults","_ctx","overrides","descriptors","getScope$1","node","root","scope","Defaults","_descriptors","_appliers","context","ctx","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","appliers","apply","toFontString","font","_measureText","data","gc","longest","string","textWidth","_alignPixel","chart","pixel","width","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","style","rotation","radius","rad","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","mode","midpoint","_bezierCurveTo","setRenderOpts","opts","decorateText","line","metrics","top","bottom","yDecoration","drawBackdrop","oldColor","renderText","text","lines","addRoundedRectPath","rect","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","resolve","inputs","info","_addGrace","minmax","grace","beginAtZero","change","keepZero","add","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","cache","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","proxy","subProxy","descriptorDefaults","receiver","_resolveWithContext","_scriptable","_indexable","_allKeys","readKey","prefix","needsSubResolver","_proxy","_context","_subProxy","_resolveScriptable","_resolveArray","getValue","_stack","createSubResolver","isIndexable","arr","resolver","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","prev","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","getStyle","el","positions","getPositionedStyle","suffix","pos","useOffsetPos","getCanvasPosition","touches","offsetX","offsetY","box","getRelativePosition","event","currentDevicePixelRatio","borderBox","paddings","borders","height","getContainerSize","maxWidth","maxHeight","container","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","restoreTextDirection","propertyFn","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","normalize","_boundSegment","compare","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","st","dir","styleChanged","replacer","getSizeForArea","scale","chartArea","field","getDatasetArea","getDatasetClipArea","clip","Animator","anims","callbacks","numSteps","remaining","draw","charts","cb","animator","transparent","interpolators","factor","c0","Animation","cfg","currentValue","elapsed","duration","promises","rej","resolved","Animations","animationOptions","animatedProps","newOptions","resolveTargetOptions","animations","awaitAll","running","animation","properties","anim","scaleClip","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","stack","dsIndex","singleMode","otherValue","found","convertObjectDataToArray","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","updateStacks","controller","parsed","iAxis","vAxis","itemStacks","visualValues","getFirstScaleId","scales","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","yid","rid","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","sorted","isNotInOrderComparedToPrev","labels","singleScale","xAxisKey","yAxisKey","parsedValue","otherScale","otherMin","otherMax","_skip","elements","active","drawActiveElementsOnTop","elementType","sharing","transition","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","arg1","arg2","numMeta","numData","move","removed","newCount","__publicField","getAllScaleValues","visibleMetas","computeMinSampleSize","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","computeFlexCategoryTraits","pixels","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","borderProps","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","BarController","bars","reset","horizontal","vpixels","ipixels","dataIndex","currentParsed","iScaleValue","skipNull","indexScaleId","firstScaleAxisId","barThickness","baseValue","minBarLength","floating","length","head","startPixel","endPixel","halfGrid","maxBarThickness","center","axisCount","axisID","axisNumber","stackIndex","rects","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","getter","arcs","spacing","maxSize","chartWeight","maxRadius","outerRadius","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","total","ringWeightOffset","pointStyle","textAlign","useBorderRadius","borderRadius","legendItem","legend","LineController","_dataset","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","border","lastPoint","PieController","abstract","DateAdapterBase","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","evaluateInteractionItems","position","handler","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","includeInvisible","getNearestRadialItems","evaluationFunc","getNearestCartesianItems","distanceMetric","minDistance","inRange","distance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","same","other","setBoxDims","placeBoxes","userPadding","layoutItem","minPadding","padding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","observer","entries","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","resize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","initial","proxies","_detectPlatform","Element","final","autoSkip","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","skip","offset","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","diff","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","garbageCollect","caches","gcLen","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","tick","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","raw","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","minSize","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","jlen","tickFont","fontString","lineHeight","nestedLabel","valueAt","idx","decimal","optionTicks","rot","grid","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","backgroundColor","drawLine","lastLineWidth","renderTextOptions","tz","gz","bz","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","typedRegistry","arg","reg","itemReg","registry","component","camelMethod","PluginService","hook","descriptor","plugin","all","plugins","allPlugins","createDescriptors","previousDescriptors","localIds","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","version","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart$1","invalidatePlugins","userConfig","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","visible","platform","_add","_remove","detached","attached","enabled","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","Chart","clipSelf","borderWidth","borderJoinStyle","outerAngleClip","innerAngleClip","clipWidth","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","circular","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawBorder","inner","ArcElement","chartX","chartY","rAdjust","_circumference","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineTo","getLineMethod","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","strokePathWithCache","path","strokePathDirect","segmentMethod","usePath2D","LineElement","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","amount","refRect","BarElement","borderColor","outer","addRectPath","_segments","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_loop","_shouldApplyFill","_resolveTarget","propagate","fill","visited","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","_args","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","row","_itemHeight","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","rtlHelper","hitbox","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","yBoxTop","xBoxLeft","fillText","realX","fontLineHeight","calculateLegendItemHeight","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","ci","usePointStyle","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","positioners","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","labelCount","tooltipItem","invokeCallbackWithFallback","Tooltip","beforeTitle","afterTitle","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","titleSpacing","labelColor","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","opacity","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","addIfString","addedLabels","findOrAddLabel","_getLabelForValue","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","setMin","setMax","minSign","maxSign","stepSize","numericGeneratorOptions","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","significand","lastTick","LogarithmicScale","INTERVALS","UNITS","sorter","parse","adapter","parser","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","timestamp","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","minor","weekday","hasWeekday","format","formats","fmt","minorFormat","majorFormat","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","defaultDatasetIdKey","reforwardRef","setOptions","nextOptions","setLabels","currentData","nextLabels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","nextDataset","currentDataset","cloneData","nextData","ChartComponent","redraw","fallbackContent","updateMode","canvasProps","canvasRef","useRef","chartRef","renderChart","destroyChart","useEffect","createTypedChart","registerables","Line","Bar","Pie","getSegmentIndexClicked","numericRegex","getStyleValue","variableName","fallbackValue","rawValue","getStyleNumber","rootFontSize","chartColors","chartContrastColors","getChartjsOptionsPlugins","chartjsOptions","chartjsAxisOptionsPlugins","getChartjsAxisOptionsScalesTicksDefault","getChartjsAxisOptionsScalesTicksMuted","getChartjsAxisOptionsScalesTitle","getChartjsAxisOptionsScalesGrid","chartjsAxisOptionsScales","chartjsAxisOptions","chartjsAxisOptionsLayoutPadding","isMixedValues","hasPos","hasNeg","getChartjsAxisOptionsScalesGridColor","getBarChartData","defaultDataset","getDatalabelTotalDisplay","showTotalLabels","getDatalabelTotalFormatter","_value","sum","ds","getBarVerticalChartOptions","getBarHorizontalChartOptions","getBarChartOptions","baseBarChartOptions","verticalHorizontalOptions","screen","utils","updates","orient","origin","x0","y0","dx","dy","ln","aligned","vx","vy","R_INSIDE","R_LEFT","R_RIGHT","R_BOTTOM","R_TOP","region","clipped","r0","r1","compute$1","anchor","rx","ry","sx","sy","rasterize","model","th","tw","tx","ty","getScaleOrigin","getPositioner","drawRoundedRect","drawFrame","bgColor","textGeometry","drawTextLine","shadow","stroked","drawText","filled","Label","me","defaults$1","MIN_INTEGER","MAX_INTEGER","rotated","cx","cy","projected","dp","toAxis","p0","HitBox","axes","pr0","pr1","coordinates","geometry","vs","collide","collider","s0","s1","compute","state","h0","sa","sb","dirty","DEFAULT_KEY","configure","configs","dispatchEvent","groups","callback$1","dispatchMoveEvents","enter","leave","handleMoveEvents","expando","handleClickEvents","handlers","actives","update","ChartJS","ChartDataLabels","BarChart","onSegmentClick","barChartOptions","handleSegmentClick","indexClicked","getLineChartData","getLineChartOptions","Filler","LineChart","pieOptions","interaction","visibleElements","filterElements","getNearestItem","getElements","inRangeByAxis","getPointByAxis","nearestItems","evenPoint","isOlderPart","act","req","clamp","inLimit","hitSize","clampAll","inPointRange","inBoxRange","hitTolerance","inRangeX","inRangeY","inLabelRange","rotPoint","getElementCenterPoint","requireVersion","pkg","ver","strict","isPercentString","toPercent","toPositivePercent","boxAppering","defaultInitAnimation","getSize","positivePercent","calculateTextAlignment","measureLabelRectangle","labelSize","xAdjust","yAdjust","hasPadding","positionObj","toPosition","calculateLabelPosition$1","shouldFit","fitRatio","toFonts","optFont","fonts","isBoundToPoint","adjust","initAnimationProperties","initAnim","applyDefault","execCallback","loadHooks","hooks","hooksContainer","widthCache","notRadius","fontsKey","isImageOrCanvas","content","translate","setBorderStyle","setShadowStyle","measureLabelSize","mapKey","calculateLabelSize","drawBox","drawLabel","getOpacity","optColor","setTextStrokeStyle","applyLabelDecoration","applyLabelContent","drawPointStyle","lhs","elementValue","drawCallout","pointX","pointY","callout","calloutPosition","resolveCalloutPosition","isPointInRange","separatorStart","separatorEnd","getCalloutSeparatorCoord","sideStart","sideEnd","getCalloutSideCoord","rotatedPoint","getCalloutSeparatorAdjust","side","getCalloutSideAdjust","resolveCalloutAutoPosition","xPoints","yPoints","limitedLineScale","scaleValue","isFinite","retrieveScaleID","getDimensionByScale","getChartPoint","resolveBoxProperties","xDim","getChartDimensionByScale","yDim","resolvePointProperties","adjustCenterX","adjustCenterY","getChartCircle","resolveLineProperties","resolveFullLineProperties","resolveLimitedLineProperties","resolveBoxAndLabelProperties","resolveLabelElementProperties$1","scaleId","startProp","endProp","dim","calculateX","calculatePosition","calculateY","boxOpts","padStart","padEnd","availableSize","moveHooks","eventHooks","updateListeners","handleEvent","checkElements","elementHooks","updateHooks","invokeHook","callbackHook","adjustScaleRange","annotations","getScaleLimits","changeScaleLimit","verifyScaleOptions","annotation","verifyScaleIDs","suggestedLimit","scaleLimitDefined","verifyProperties","scaleIDOption","limits","updateLimits","BoxAnnotation","DoughnutLabelAnnotation","drawBackground","getDatasetMeta","controllerMeta","getControllerMeta","_fitRatio","getFitRatio","boxSize","isControllerVisible","square","space","_radius","_counterclockwise","angles","getAngles","hypo","yk2","r2","_centerX","_centerY","_startAngle","_endAngle","LabelAnnotation","getLabelSize","hBorderWidth","pointInLine","interpolateX","interpolateY","sqr","rangeLimit","coordInCurve","cp","pointInCurve","coordAngleInCurve","angleInCurve","LineAnnotation","mx","my","isOnLabel","intersects","inAxisRange","drawCurve","startOpts","endOpts","startAdjust","endAdjust","getArrowHeads","drawArrowHead","isLineInArea","limitLineToArea","getControlPoint","labelProperties","resolveLabelElementProperties","arrowHeadsDefaults","limitPointToArea","lenSq","xx","yy","calculateLabelPosition","calculateAutoRotation","sizes","rotatedSize","calculateT","xCoordinateSizes","yCoordinateSizes","adjustLabelCoordinate","spaceAround","calculateTAdjust","lineSize","lineW","lineH","coordinate","halfSize","arrowStartOpts","arrowEndOpts","getLineAdjust","arrowOpts","arrowOffsetX","drawArrowHeadOnCurve","ps","pe","EllipseAnnotation","pointInEllipse","ellipse","xRadius","yRadius","cosAngle","sinAngle","PointAnnotation","PolygonAnnotation","pointIsInPolygon","axisPoints","sides","elProps","buildPointElement","isInside","A","B","annotationTypes","directUpdater","hooks$1","optDefs","resolveObj","resolveType","updateElements","resolveAnimations","resyncElements","annotationOptions","getOrCreateElement","getContext","toSkip","updateSubElements","resolveAnnotationOptions","animOpts","mainElement","subElements","definition","subElement","initProperties","elementClass","defs","chartStates","isNotDoughnutLabel","caller","drawableElements","getDrawableElements","drawElement","getPieChartData","getPieChartOptions","pieChartOptions","getDonutChartOptions","donutChartOptions","AnnotationPlugin","DonutChart","subLabel","showLegend","showTooltips","showValueLabels","donutLabelOptions","PieChart","getTableTotalPages","pageSize","TablePagination","page","paginationLabel","onPageChange","totalPages","disabledPrev","disabledNext","TableSortDirection","TableHeaderAlign","getHeaderAriaSort","sort","header","getHeaderAriaLabel","TableHeader","headers","showIndex","onSortChange","getSortIcon","handleSort","tableStyles","TableBody","rows","onRowIndexClick","rowIndex","cellIndex","TableBodyCell","isPressedCopy","setIsPressedCopy","useState","handleCopy","TablePaginated"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,26,27,28,29,36,40]}