@watermarkinsights/ripple 4.3.0 → 4.4.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/dist/cjs/chartFunctions-cecf8134.js +600 -0
  2. package/dist/cjs/{functions-91da05e9.js → functions-4208c444.js} +362 -362
  3. package/dist/cjs/{global-20d48c6c.js → global-bd289a67.js} +24 -24
  4. package/dist/cjs/{index-fae02cd7.js → index-f8ef86de.js} +436 -150
  5. package/dist/cjs/interfaces-ad9e80a6.js +38 -0
  6. package/dist/cjs/intl-3fafc6d1.js +179 -0
  7. package/dist/cjs/loader.cjs.js +4 -13
  8. package/dist/cjs/priv-chart-popover.cjs.entry.js +85 -85
  9. package/dist/cjs/priv-datepicker.cjs.entry.js +637 -637
  10. package/dist/cjs/priv-navigator-button.cjs.entry.js +18 -18
  11. package/dist/cjs/priv-navigator-item.cjs.entry.js +21 -21
  12. package/dist/cjs/ripple.cjs.js +4 -7
  13. package/dist/cjs/wm-action-menu_2.cjs.entry.js +314 -314
  14. package/dist/cjs/wm-button.cjs.entry.js +174 -174
  15. package/dist/cjs/wm-chart-slice.cjs.entry.js +17 -17
  16. package/dist/cjs/wm-chart.cjs.entry.js +164 -164
  17. package/dist/cjs/wm-datepicker.cjs.entry.js +160 -160
  18. package/dist/cjs/wm-file-list.cjs.entry.js +10 -10
  19. package/dist/cjs/wm-file.cjs.entry.js +178 -178
  20. package/dist/cjs/wm-input.cjs.entry.js +102 -102
  21. package/dist/cjs/wm-line-chart.cjs.entry.js +462 -462
  22. package/dist/cjs/wm-modal-footer.cjs.entry.js +27 -27
  23. package/dist/cjs/wm-modal-header.cjs.entry.js +21 -21
  24. package/dist/cjs/wm-modal.cjs.entry.js +92 -92
  25. package/dist/cjs/wm-navigation_3.cjs.entry.js +179 -179
  26. package/dist/cjs/wm-navigator.cjs.entry.js +255 -251
  27. package/dist/cjs/wm-option_2.cjs.entry.js +710 -710
  28. package/dist/cjs/wm-pagination.cjs.entry.js +169 -169
  29. package/dist/cjs/wm-progress-indicator_3.cjs.entry.js +151 -151
  30. package/dist/cjs/wm-search.cjs.entry.js +192 -192
  31. package/dist/cjs/wm-snackbar.cjs.entry.js +114 -114
  32. package/dist/cjs/wm-tab-item_3.cjs.entry.js +247 -247
  33. package/dist/cjs/wm-tag-input.cjs.entry.js +849 -849
  34. package/dist/cjs/wm-tag-option.cjs.entry.js +33 -33
  35. package/dist/cjs/wm-timepicker.cjs.entry.js +270 -270
  36. package/dist/cjs/wm-toggletip.cjs.entry.js +99 -99
  37. package/dist/cjs/wm-uploader.cjs.entry.js +198 -198
  38. package/dist/cjs/wm-wrapper.cjs.entry.js +12 -12
  39. package/dist/collection/collection-manifest.json +41 -41
  40. package/dist/collection/components/charts/chartFunctions.js +456 -456
  41. package/dist/collection/components/charts/chartFunctions.spec.js +13 -13
  42. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.e2e.js +73 -73
  43. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js +257 -254
  44. package/dist/collection/components/charts/screenshots.e2e.js +30 -30
  45. package/dist/collection/components/charts/wm-chart/wm-chart-slice.js +121 -121
  46. package/dist/collection/components/charts/wm-chart/wm-chart.e2e.js +160 -160
  47. package/dist/collection/components/charts/wm-chart/wm-chart.js +382 -381
  48. package/dist/collection/components/charts/wm-chart/wm-chart.spec.js +26 -26
  49. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.css +1 -2
  50. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.e2e.js +138 -138
  51. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.js +731 -731
  52. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.spec.js +106 -106
  53. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js +202 -202
  54. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.e2e.js +54 -54
  55. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js +136 -136
  56. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.spec.js +31 -31
  57. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-slice.js +119 -119
  58. package/dist/collection/components/wm-action-menu/wm-action-menu.e2e.js +187 -187
  59. package/dist/collection/components/wm-action-menu/wm-action-menu.js +435 -435
  60. package/dist/collection/components/wm-action-menu/wm-action-menu.spec.js +35 -35
  61. package/dist/collection/components/wm-button/wm-button.e2e.js +58 -58
  62. package/dist/collection/components/wm-button/wm-button.js +454 -452
  63. package/dist/collection/components/wm-button/wm-button.spec.js +63 -63
  64. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js +943 -939
  65. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.spec.js +71 -71
  66. package/dist/collection/components/wm-datepicker/wm-datepicker.css +1 -2
  67. package/dist/collection/components/wm-datepicker/wm-datepicker.e2e.js +359 -359
  68. package/dist/collection/components/wm-datepicker/wm-datepicker.js +415 -413
  69. package/dist/collection/components/wm-datepicker/wm-datepicker.spec.js +13 -13
  70. package/dist/collection/components/wm-file/wm-file.js +380 -380
  71. package/dist/collection/components/wm-file/wm-file.spec.js +107 -107
  72. package/dist/collection/components/wm-file-list/wm-file-list.js +42 -42
  73. package/dist/collection/components/wm-file-list/wm-file-list.spec.js +47 -47
  74. package/dist/collection/components/wm-input/wm-input.e2e.js +26 -26
  75. package/dist/collection/components/wm-input/wm-input.js +453 -453
  76. package/dist/collection/components/wm-input/wm-input.spec.js +168 -168
  77. package/dist/collection/components/wm-menuitem/wm-menuitem.e2e.js +18 -18
  78. package/dist/collection/components/wm-menuitem/wm-menuitem.js +446 -436
  79. package/dist/collection/components/wm-menuitem/wm-menuitem.spec.js +46 -46
  80. package/dist/collection/components/wm-modal/wm-modal-footer.js +130 -130
  81. package/dist/collection/components/wm-modal/wm-modal-footer.spec.js +8 -8
  82. package/dist/collection/components/wm-modal/wm-modal-header.js +68 -68
  83. package/dist/collection/components/wm-modal/wm-modal-header.spec.js +5 -5
  84. package/dist/collection/components/wm-modal/wm-modal.e2e.js +65 -65
  85. package/dist/collection/components/wm-modal/wm-modal.js +299 -296
  86. package/dist/collection/components/wm-modal/wm-modal.spec.js +22 -22
  87. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.css +0 -1
  88. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +112 -112
  89. package/dist/collection/components/wm-navigation/wm-navigation-item.js +125 -125
  90. package/dist/collection/components/wm-navigation/wm-navigation.css +0 -2
  91. package/dist/collection/components/wm-navigation/wm-navigation.e2e.js +86 -86
  92. package/dist/collection/components/wm-navigation/wm-navigation.js +209 -209
  93. package/dist/collection/components/wm-navigation/wm-navigation.spec.js +79 -79
  94. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.e2e.js +30 -30
  95. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +103 -103
  96. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +119 -118
  97. package/dist/collection/components/wm-navigator/wm-navigator.e2e.js +180 -180
  98. package/dist/collection/components/wm-navigator/wm-navigator.js +458 -454
  99. package/dist/collection/components/wm-navigator/wm-navigator.spec.js +153 -153
  100. package/dist/collection/components/wm-option/wm-option.e2e.js +19 -19
  101. package/dist/collection/components/wm-option/wm-option.js +474 -463
  102. package/dist/collection/components/wm-option/wm-option.spec.js +39 -39
  103. package/dist/collection/components/wm-pagination/wm-pagination.e2e.js +301 -301
  104. package/dist/collection/components/wm-pagination/wm-pagination.js +327 -327
  105. package/dist/collection/components/wm-search/wm-search.e2e.js +69 -69
  106. package/dist/collection/components/wm-search/wm-search.js +415 -414
  107. package/dist/collection/components/wm-search/wm-search.spec.js +64 -64
  108. package/dist/collection/components/wm-select/wm-select.e2e.js +443 -443
  109. package/dist/collection/components/wm-select/wm-select.js +967 -966
  110. package/dist/collection/components/wm-select/wm-select.spec.js +250 -250
  111. package/dist/collection/components/wm-snackbar/wm-snackbar.e2e.js +114 -114
  112. package/dist/collection/components/wm-snackbar/wm-snackbar.js +209 -207
  113. package/dist/collection/components/wm-snackbar/wm-snackbar.spec.js +4 -4
  114. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +190 -188
  115. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +261 -261
  116. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +104 -104
  117. package/dist/collection/components/wm-tabs/wm-tabs.e2e.js +79 -79
  118. package/dist/collection/components/wm-tabs/wm-tabs.spec.js +6 -6
  119. package/dist/collection/components/wm-tag-input/wm-tag-input.css +2 -4
  120. package/dist/collection/components/wm-tag-input/wm-tag-input.e2e.js +168 -168
  121. package/dist/collection/components/wm-tag-input/wm-tag-input.js +1159 -1159
  122. package/dist/collection/components/wm-tag-input/wm-tag-input.spec.js +147 -147
  123. package/dist/collection/components/wm-tag-input/wm-tag-option/wm-tag-option.js +236 -234
  124. package/dist/collection/components/wm-timepicker/wm-timepicker.css +1 -2
  125. package/dist/collection/components/wm-timepicker/wm-timepicker.e2e.js +147 -147
  126. package/dist/collection/components/wm-timepicker/wm-timepicker.js +531 -527
  127. package/dist/collection/components/wm-timepicker/wm-timepicker.spec.js +151 -151
  128. package/dist/collection/components/wm-toggletip/wm-toggletip.e2e.js +61 -61
  129. package/dist/collection/components/wm-toggletip/wm-toggletip.js +209 -208
  130. package/dist/collection/components/wm-toggletip/wm-toggletip.spec.js +16 -16
  131. package/dist/collection/components/wm-uploader/wm-uploader.e2e.js +56 -56
  132. package/dist/collection/components/wm-uploader/wm-uploader.js +423 -422
  133. package/dist/collection/components/wm-uploader/wm-uploader.spec.js +149 -149
  134. package/dist/collection/components/wm-wrapper/wm-wrapper.js +26 -26
  135. package/dist/collection/global/__mocks__/functions.js +1 -1
  136. package/dist/collection/global/functions.js +510 -510
  137. package/dist/collection/global/functions.spec.js +123 -123
  138. package/dist/collection/global/global.js +16 -16
  139. package/dist/collection/global/interfaces.js +39 -39
  140. package/dist/collection/global/intl.js +162 -162
  141. package/dist/collection/global/services/__mocks__/http-service.js +112 -112
  142. package/dist/collection/global/services/http-service.js +41 -41
  143. package/dist/collection/global/themes/default.js +4 -4
  144. package/dist/collection/global/themes/neutral.js +4 -4
  145. package/dist/collection/lang/lang.spec.js +13 -13
  146. package/dist/esm/chartFunctions-23173fce.js +584 -0
  147. package/dist/esm/{functions-5afd09f4.js → functions-d0e70094.js} +362 -362
  148. package/dist/esm/{global-d4a9e80e.js → global-4569c7b8.js} +24 -24
  149. package/dist/esm/{index-7e11ea42.js → index-f164fbca.js} +436 -150
  150. package/dist/esm/interfaces-9b75fb61.js +35 -0
  151. package/dist/esm/intl-05c9e0c9.js +174 -0
  152. package/dist/esm/loader.js +5 -14
  153. package/dist/esm/priv-chart-popover.entry.js +85 -85
  154. package/dist/esm/priv-datepicker.entry.js +637 -637
  155. package/dist/esm/priv-navigator-button.entry.js +18 -18
  156. package/dist/esm/priv-navigator-item.entry.js +21 -21
  157. package/dist/esm/ripple.js +5 -8
  158. package/dist/esm/wm-action-menu_2.entry.js +314 -314
  159. package/dist/esm/wm-button.entry.js +174 -174
  160. package/dist/esm/wm-chart-slice.entry.js +17 -17
  161. package/dist/esm/wm-chart.entry.js +164 -164
  162. package/dist/esm/wm-datepicker.entry.js +160 -160
  163. package/dist/esm/wm-file-list.entry.js +10 -10
  164. package/dist/esm/wm-file.entry.js +178 -178
  165. package/dist/esm/wm-input.entry.js +102 -102
  166. package/dist/esm/wm-line-chart.entry.js +462 -462
  167. package/dist/esm/wm-modal-footer.entry.js +27 -27
  168. package/dist/esm/wm-modal-header.entry.js +21 -21
  169. package/dist/esm/wm-modal.entry.js +92 -92
  170. package/dist/esm/wm-navigation_3.entry.js +179 -179
  171. package/dist/esm/wm-navigator.entry.js +255 -251
  172. package/dist/esm/wm-option_2.entry.js +710 -710
  173. package/dist/esm/wm-pagination.entry.js +169 -169
  174. package/dist/esm/wm-progress-indicator_3.entry.js +151 -151
  175. package/dist/esm/wm-search.entry.js +192 -192
  176. package/dist/esm/wm-snackbar.entry.js +114 -114
  177. package/dist/esm/wm-tab-item_3.entry.js +247 -247
  178. package/dist/esm/wm-tag-input.entry.js +849 -849
  179. package/dist/esm/wm-tag-option.entry.js +33 -33
  180. package/dist/esm/wm-timepicker.entry.js +270 -270
  181. package/dist/esm/wm-toggletip.entry.js +99 -99
  182. package/dist/esm/wm-uploader.entry.js +198 -198
  183. package/dist/esm/wm-wrapper.entry.js +12 -12
  184. package/dist/esm-es5/chartFunctions-23173fce.js +1 -0
  185. package/dist/esm-es5/functions-d0e70094.js +1 -0
  186. package/dist/esm-es5/global-4569c7b8.js +1 -0
  187. package/dist/esm-es5/index-f164fbca.js +2 -0
  188. package/dist/esm-es5/{intl-e2da750a.js → intl-05c9e0c9.js} +1 -1
  189. package/dist/esm-es5/loader.js +1 -1
  190. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  191. package/dist/esm-es5/priv-datepicker.entry.js +1 -1
  192. package/dist/esm-es5/priv-navigator-button.entry.js +1 -1
  193. package/dist/esm-es5/priv-navigator-item.entry.js +1 -1
  194. package/dist/esm-es5/ripple.js +1 -1
  195. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  196. package/dist/esm-es5/wm-button.entry.js +1 -1
  197. package/dist/esm-es5/wm-chart-slice.entry.js +1 -1
  198. package/dist/esm-es5/wm-chart.entry.js +1 -1
  199. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  200. package/dist/esm-es5/wm-file-list.entry.js +1 -1
  201. package/dist/esm-es5/wm-file.entry.js +1 -1
  202. package/dist/esm-es5/wm-input.entry.js +1 -1
  203. package/dist/esm-es5/wm-line-chart.entry.js +1 -1
  204. package/dist/esm-es5/wm-modal-footer.entry.js +1 -1
  205. package/dist/esm-es5/wm-modal-header.entry.js +1 -1
  206. package/dist/esm-es5/wm-modal.entry.js +1 -1
  207. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  208. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  209. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  210. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  211. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  212. package/dist/esm-es5/wm-search.entry.js +1 -1
  213. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  214. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  215. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  216. package/dist/esm-es5/wm-tag-option.entry.js +1 -1
  217. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  218. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  219. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  220. package/dist/esm-es5/wm-wrapper.entry.js +1 -1
  221. package/dist/loader/index.d.ts +1 -1
  222. package/dist/ripple/p-028ef6db.system.entry.js +1 -0
  223. package/dist/ripple/{p-863e737a.js → p-05d4e49b.js} +1 -1
  224. package/dist/ripple/{p-a1e95b05.system.entry.js → p-06776596.system.entry.js} +1 -1
  225. package/dist/ripple/{p-622a7791.system.entry.js → p-067d7922.system.entry.js} +1 -1
  226. package/dist/ripple/p-09d62ddd.entry.js +1 -0
  227. package/dist/ripple/{p-f30839a1.system.entry.js → p-0ecbf569.system.entry.js} +1 -1
  228. package/dist/ripple/p-0fe97e85.system.js +2 -0
  229. package/dist/ripple/{p-24b08e1f.js → p-13ca30d8.js} +1 -1
  230. package/dist/ripple/{p-8f3f903f.system.js → p-1402cfa2.system.js} +1 -1
  231. package/dist/ripple/p-1453ea51.system.entry.js +1 -0
  232. package/dist/ripple/{p-6abb903c.entry.js → p-153701f9.entry.js} +1 -1
  233. package/dist/ripple/p-1cc91907.system.js +1 -0
  234. package/dist/ripple/{p-ad37cdfd.entry.js → p-1d8b0039.entry.js} +1 -1
  235. package/dist/ripple/{p-d0f1b8c4.system.entry.js → p-1fa2a756.system.entry.js} +1 -1
  236. package/dist/ripple/{p-a52c5a1c.entry.js → p-25446670.entry.js} +1 -1
  237. package/dist/ripple/{p-1283e85d.entry.js → p-27f47edc.entry.js} +1 -1
  238. package/dist/ripple/{p-32b1126c.system.entry.js → p-28e4583c.system.entry.js} +1 -1
  239. package/dist/ripple/{p-a5b23781.system.entry.js → p-2c4f312d.system.entry.js} +1 -1
  240. package/dist/ripple/p-30b17818.system.entry.js +1 -0
  241. package/dist/ripple/{p-0631be01.system.entry.js → p-3446852f.system.entry.js} +1 -1
  242. package/dist/ripple/{p-ae674a54.entry.js → p-350fe5da.entry.js} +1 -1
  243. package/dist/ripple/{p-d04ba5f8.system.entry.js → p-3583d113.system.entry.js} +1 -1
  244. package/dist/ripple/{p-cbd8a60b.system.entry.js → p-361cc8fc.system.entry.js} +1 -1
  245. package/dist/ripple/{p-7529706d.entry.js → p-372faf33.entry.js} +1 -1
  246. package/dist/ripple/{p-19773c40.entry.js → p-3a070f35.entry.js} +1 -1
  247. package/dist/ripple/{p-c7b5ac39.js → p-3af72848.js} +1 -1
  248. package/dist/ripple/{p-c41603e6.entry.js → p-42ebfcfa.entry.js} +1 -1
  249. package/dist/ripple/{p-13594c2e.entry.js → p-43e2a49a.entry.js} +1 -1
  250. package/dist/ripple/{p-ed942b42.entry.js → p-49118468.entry.js} +1 -1
  251. package/dist/ripple/p-49c85d1a.system.js +1 -0
  252. package/dist/ripple/p-4de51706.js +2 -0
  253. package/dist/ripple/{p-3c80bf67.entry.js → p-58174f4e.entry.js} +1 -1
  254. package/dist/ripple/{p-c5e8f8a5.system.entry.js → p-5a4d9897.system.entry.js} +1 -1
  255. package/dist/ripple/{p-e3f0b57f.system.entry.js → p-5ac980e2.system.entry.js} +1 -1
  256. package/dist/ripple/{p-3becce62.system.entry.js → p-633cd89a.system.entry.js} +1 -1
  257. package/dist/ripple/{p-1205fdc1.entry.js → p-63f75d43.entry.js} +1 -1
  258. package/dist/ripple/{p-90ea7e3a.system.entry.js → p-67d48c33.system.entry.js} +1 -1
  259. package/dist/ripple/{p-8ef87907.entry.js → p-6caaf85f.entry.js} +1 -1
  260. package/dist/ripple/{p-935513f8.entry.js → p-6cf7a34a.entry.js} +1 -1
  261. package/dist/ripple/p-73289c2c.system.js +1 -0
  262. package/dist/ripple/{p-c76bbedf.system.entry.js → p-7a8816d9.system.entry.js} +1 -1
  263. package/dist/ripple/{p-8ea68cb3.system.entry.js → p-7e56da2e.system.entry.js} +1 -1
  264. package/dist/ripple/{p-deb4f5a2.entry.js → p-7e8daaac.entry.js} +1 -1
  265. package/dist/ripple/p-88406560.system.entry.js +1 -0
  266. package/dist/ripple/{p-84a7e757.entry.js → p-8cace32f.entry.js} +1 -1
  267. package/dist/ripple/{p-80aef387.entry.js → p-8d4734ad.entry.js} +1 -1
  268. package/dist/ripple/p-8f76a838.system.entry.js +1 -0
  269. package/dist/ripple/p-934c1b6b.js +1 -0
  270. package/dist/ripple/{p-85f744ed.system.js → p-9fecbc8a.system.js} +1 -1
  271. package/dist/ripple/{p-b71a83e3.entry.js → p-a69c37e0.entry.js} +1 -1
  272. package/dist/ripple/{p-9288659b.entry.js → p-a82a8931.entry.js} +1 -1
  273. package/dist/ripple/p-a99b05de.system.entry.js +1 -0
  274. package/dist/ripple/{p-36049d2f.entry.js → p-aadf8c59.entry.js} +1 -1
  275. package/dist/ripple/{p-676c1089.system.entry.js → p-aba5a00e.system.entry.js} +1 -1
  276. package/dist/ripple/{p-0aecac86.entry.js → p-ad6dc751.entry.js} +1 -1
  277. package/dist/ripple/{p-0f1ff645.entry.js → p-b253d2fc.entry.js} +1 -1
  278. package/dist/ripple/p-b2ff4723.system.entry.js +1 -0
  279. package/dist/ripple/{p-a0bf5eef.entry.js → p-b452d1d7.entry.js} +1 -1
  280. package/dist/ripple/{p-1cde16a7.system.entry.js → p-b4d862e1.system.entry.js} +1 -1
  281. package/dist/ripple/{p-d496bc44.system.entry.js → p-bdd4f919.system.entry.js} +1 -1
  282. package/dist/ripple/p-c18b398c.system.js +1 -0
  283. package/dist/ripple/{p-8f8c3705.entry.js → p-c249063c.entry.js} +1 -1
  284. package/dist/ripple/p-c344a69c.entry.js +1 -0
  285. package/dist/ripple/{p-0d9f70ab.entry.js → p-c717d895.entry.js} +1 -1
  286. package/dist/ripple/{p-2e773564.system.entry.js → p-c96a5c94.system.entry.js} +1 -1
  287. package/dist/ripple/{p-15497721.system.entry.js → p-ceced3d9.system.entry.js} +1 -1
  288. package/dist/ripple/{p-d428e9bb.system.entry.js → p-d16f91e9.system.entry.js} +1 -1
  289. package/dist/ripple/{p-ff14e4ec.system.entry.js → p-d3f9d028.system.entry.js} +1 -1
  290. package/dist/ripple/{p-7962f562.entry.js → p-de349bee.entry.js} +1 -1
  291. package/dist/ripple/{p-b3c73bc9.entry.js → p-e24ddae1.entry.js} +1 -1
  292. package/dist/ripple/{p-b3e08b14.system.entry.js → p-e8b58666.system.entry.js} +1 -1
  293. package/dist/ripple/{p-a9c096b5.entry.js → p-fa87bce3.entry.js} +1 -1
  294. package/dist/ripple/ripple.esm.js +1 -1
  295. package/dist/ripple/ripple.js +16 -20
  296. package/dist/types/components/charts/chartFunctions.d.ts +13 -13
  297. package/dist/types/components/charts/priv-chart-popover/priv-chart-popover.d.ts +24 -24
  298. package/dist/types/components/charts/wm-chart/wm-chart-slice.d.ts +8 -8
  299. package/dist/types/components/charts/wm-chart/wm-chart.d.ts +39 -39
  300. package/dist/types/components/charts/wm-line-chart/wm-line-chart.d.ts +74 -74
  301. package/dist/types/components/charts/wm-progress-monitor/wm-progress-indicator.d.ts +26 -26
  302. package/dist/types/components/charts/wm-progress-monitor/wm-progress-monitor.d.ts +17 -17
  303. package/dist/types/components/charts/wm-progress-monitor/wm-progress-slice.d.ts +7 -7
  304. package/dist/types/components/wm-action-menu/wm-action-menu.d.ts +43 -43
  305. package/dist/types/components/wm-button/wm-button.d.ts +40 -40
  306. package/dist/types/components/wm-datepicker/priv-datepicker/priv-datepicker.d.ts +76 -76
  307. package/dist/types/components/wm-datepicker/wm-datepicker.d.ts +31 -31
  308. package/dist/types/components/wm-file/wm-file.d.ts +40 -40
  309. package/dist/types/components/wm-file-list/wm-file-list.d.ts +3 -3
  310. package/dist/types/components/wm-input/wm-input.d.ts +46 -46
  311. package/dist/types/components/wm-menuitem/wm-menuitem.d.ts +31 -31
  312. package/dist/types/components/wm-modal/wm-modal-footer.d.ts +11 -11
  313. package/dist/types/components/wm-modal/wm-modal-header.d.ts +7 -7
  314. package/dist/types/components/wm-modal/wm-modal.d.ts +24 -24
  315. package/dist/types/components/wm-navigation/wm-navigation-hamburger.d.ts +13 -13
  316. package/dist/types/components/wm-navigation/wm-navigation-item.d.ts +10 -10
  317. package/dist/types/components/wm-navigation/wm-navigation.d.ts +23 -23
  318. package/dist/types/components/wm-navigator/priv-navigator-button/priv-navigator-button.d.ts +7 -7
  319. package/dist/types/components/wm-navigator/priv-navigator-item/priv-navigator-item.d.ts +10 -10
  320. package/dist/types/components/wm-navigator/wm-navigator.d.ts +57 -57
  321. package/dist/types/components/wm-option/wm-option.d.ts +36 -36
  322. package/dist/types/components/wm-pagination/wm-pagination.d.ts +27 -27
  323. package/dist/types/components/wm-search/wm-search.d.ts +73 -73
  324. package/dist/types/components/wm-select/wm-select.d.ts +99 -99
  325. package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +24 -24
  326. package/dist/types/components/wm-tabs/wm-tab-item/wm-tab-item.d.ts +30 -30
  327. package/dist/types/components/wm-tabs/wm-tab-list/wm-tab-list.d.ts +41 -41
  328. package/dist/types/components/wm-tabs/wm-tab-panel/wm-tab-panel.d.ts +16 -16
  329. package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +114 -114
  330. package/dist/types/components/wm-tag-input/wm-tag-option/wm-tag-option.d.ts +15 -15
  331. package/dist/types/components/wm-timepicker/wm-timepicker.d.ts +48 -48
  332. package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +20 -20
  333. package/dist/types/components/wm-uploader/wm-uploader.d.ts +47 -47
  334. package/dist/types/components/wm-wrapper/wm-wrapper.d.ts +4 -4
  335. package/dist/types/components.d.ts +382 -0
  336. package/dist/types/global/__mocks__/functions.d.ts +1 -1
  337. package/dist/types/global/functions.d.ts +4 -4
  338. package/dist/types/global/interfaces.d.ts +49 -49
  339. package/dist/types/global/intl.d.ts +31 -31
  340. package/dist/types/global/services/__mocks__/http-service.d.ts +1 -1
  341. package/dist/types/stencil-public-runtime.d.ts +46 -5
  342. package/package.json +1 -1
  343. package/dist/cjs/chartFunctions-2c3e010e.js +0 -600
  344. package/dist/cjs/interfaces-245d7bff.js +0 -38
  345. package/dist/cjs/intl-fa3bb4ae.js +0 -179
  346. package/dist/esm/chartFunctions-36634c04.js +0 -584
  347. package/dist/esm/interfaces-89cad2fc.js +0 -35
  348. package/dist/esm/intl-e2da750a.js +0 -174
  349. package/dist/esm/polyfills/css-shim.js +0 -1
  350. package/dist/esm-es5/chartFunctions-36634c04.js +0 -1
  351. package/dist/esm-es5/functions-5afd09f4.js +0 -1
  352. package/dist/esm-es5/global-d4a9e80e.js +0 -1
  353. package/dist/esm-es5/index-7e11ea42.js +0 -2
  354. package/dist/ripple/p-00acacbe.system.entry.js +0 -1
  355. package/dist/ripple/p-0f889b84.system.js +0 -1
  356. package/dist/ripple/p-13af8346.entry.js +0 -1
  357. package/dist/ripple/p-16363e1c.system.entry.js +0 -1
  358. package/dist/ripple/p-2a95b63f.system.entry.js +0 -1
  359. package/dist/ripple/p-30bf24f8.system.js +0 -2
  360. package/dist/ripple/p-3248c0fa.system.entry.js +0 -1
  361. package/dist/ripple/p-47c20b05.entry.js +0 -1
  362. package/dist/ripple/p-56d64283.system.entry.js +0 -1
  363. package/dist/ripple/p-5e85967a.system.js +0 -1
  364. package/dist/ripple/p-9b2034f6.js +0 -1
  365. package/dist/ripple/p-a3d07be5.system.js +0 -1
  366. package/dist/ripple/p-a6be3cca.system.entry.js +0 -1
  367. package/dist/ripple/p-aafa111a.system.js +0 -1
  368. package/dist/ripple/p-b5bedd63.js +0 -2
  369. package/dist/ripple/p-bd537299.system.entry.js +0 -1
  370. /package/dist/esm-es5/{interfaces-89cad2fc.js → interfaces-9b75fb61.js} +0 -0
  371. /package/dist/ripple/{p-c0c111fd.js → p-196eb2f3.js} +0 -0
@@ -3,741 +3,741 @@ import { csvToArray, debounce, transposeMatrix, getSmallestSkipInterval, wrapAro
3
3
  import { abbrNumber, getInterval } from "../chartFunctions";
4
4
  import { chartMessages, globalMessages, lineChartMessages } from "../../../global/intl";
5
5
  export class LineChart {
6
- constructor() {
7
- this.minTickWidth = 120;
8
- this.popoverData = [];
9
- this.focusedDataPoint = [0, 0];
10
- this.dataPointMatrix = [];
11
- this.xIntervals = [];
12
- this.displayedXIntervals = [];
13
- this.yIntervals = [];
14
- this.lineStyles = [
15
- { color: "#8b86ca", icon: "f536" },
16
- { color: "#2e1b46", icon: "f12f" },
17
- { color: "#0089e4", icon: "f763" },
18
- { color: "#088000", icon: "f4ce" },
19
- { color: "#ea8500", icon: "f70a" },
20
- { color: "#d54f41", icon: "f536" },
21
- { color: "#146ca9", icon: "f6ff" }, // blue, upside down triangle
22
- ];
23
- this.debouncedResize = debounce(async () => {
24
- this.displayedXIntervals = this.determineDisplayedXIntervals();
25
- }, 100);
26
- this.label = undefined;
27
- this.description = "";
28
- this.xAxisLabel = undefined;
29
- this.yAxisLabel = undefined;
30
- this.lineData = undefined;
31
- this.units = "null,null";
32
- this.labelWidth = "120px";
33
- this.highlightQualifier = "highlighted";
34
- this.highlightStart = undefined;
35
- this.highlightEnd = undefined;
36
- this.visibilityToggles = false;
37
- this.showDeltas = false;
38
- this.yRange = undefined;
39
- this.parsedLineData = {};
40
- this.popoverIndex = -1;
41
- this.focusedLine = -1;
42
- this.hiddenLines = [];
43
- this.isTabbing = false;
44
- this.intervalSkip = 0;
45
- this.announcement = "";
46
- }
47
- parseData() {
48
- this.parsedLineData = JSON.parse(this.lineData);
49
- this.yIntervals = this.calcYIntervals().reverse(); // needed before building dataPointMatrix
50
- this.xIntervals = Object.keys(Object.values(this.parsedLineData)[0]);
51
- this.displayedXIntervals = this.determineDisplayedXIntervals();
52
- this.dataPointMatrix = Object.entries(this.parsedLineData).map((entry) => this.buildLineDataPointDetails(entry[0], entry[1]));
53
- this.popoverData = transposeMatrix(this.dataPointMatrix);
54
- }
55
- handleIntervalSkip() {
56
- // if intervalSkip ever changes, dataPointMatrix must be regenerated to account for chart spacers
57
- this.parseData();
58
- }
59
- get hasPartialInterval() {
60
- // if chart width is too small, an odd # of intervals like 1,2,3,4,5,6,7 can be shortened to 1,3,5,7 or 1,4,7
61
- // but an even # like 1,2,3,4,5,6,7,8 will be shortened to 1,3,5,7 (can't show first and last interval)
62
- // in these cases, show a partial interval must be shown in order to still provide space to plot the 8th data point
63
- // e.g intervals will be 1-3, 3-5, 5-7, 7-8
64
- return this.intervalSkip > 0 && this.xIntervals.length % 2 === 0;
65
- }
66
- get parsedUnits() {
67
- return csvToArray(this.units).map((unit) => (unit === "null" ? null : unit));
68
- }
69
- get visibilityToggleEls() {
70
- return this.legendEl.querySelectorAll("wm-button");
71
- }
72
- get lineEls() {
73
- return this.plotAreaEl.querySelectorAll(".line");
74
- }
75
- get firstVisibleLineIdx() {
76
- let firstVisibleLineIdx = 0;
77
- while (this.hiddenLines.includes(firstVisibleLineIdx)) {
78
- firstVisibleLineIdx++;
79
- }
80
- return firstVisibleLineIdx < this.dataPointMatrix.length ? firstVisibleLineIdx : -1;
81
- }
82
- get pointEls() {
83
- return this.plotAreaEl.querySelectorAll(".point");
84
- }
85
- toggleTabbingOn() {
86
- this.isTabbing = true;
87
- }
88
- toggleTabbingOff() {
89
- this.isTabbing = false;
90
- }
91
- componentWillLoad() {
92
- this.parseData();
93
- }
94
- componentDidLoad() {
95
- const resizeObserver = new ResizeObserver(() => this.debouncedResize());
96
- resizeObserver.observe(this.el);
97
- }
98
- handleVisibilityToggleKeydown(ev, toggleIdx) {
99
- switch (ev.key) {
100
- case "Tab":
101
- if (!ev.shiftKey && this.firstVisibleLineIdx !== -1) {
102
- ev.preventDefault();
103
- this.announce(this.lineFocusMessage(this.firstVisibleLineIdx));
104
- this.focusDataPoint(this.firstVisibleLineIdx, 0);
6
+ constructor() {
7
+ this.minTickWidth = 120;
8
+ this.popoverData = [];
9
+ this.focusedDataPoint = [0, 0];
10
+ this.dataPointMatrix = [];
11
+ this.xIntervals = [];
12
+ this.displayedXIntervals = [];
13
+ this.yIntervals = [];
14
+ this.lineStyles = [
15
+ { color: "#8b86ca", icon: "f536" },
16
+ { color: "#2e1b46", icon: "f12f" },
17
+ { color: "#0089e4", icon: "f763" },
18
+ { color: "#088000", icon: "f4ce" },
19
+ { color: "#ea8500", icon: "f70a" },
20
+ { color: "#d54f41", icon: "f536" },
21
+ { color: "#146ca9", icon: "f6ff" }, // blue, upside down triangle
22
+ ];
23
+ this.debouncedResize = debounce(async () => {
24
+ this.displayedXIntervals = this.determineDisplayedXIntervals();
25
+ }, 100);
26
+ this.label = undefined;
27
+ this.description = "";
28
+ this.xAxisLabel = undefined;
29
+ this.yAxisLabel = undefined;
30
+ this.lineData = undefined;
31
+ this.units = "null,null";
32
+ this.labelWidth = "120px";
33
+ this.highlightQualifier = "highlighted";
34
+ this.highlightStart = undefined;
35
+ this.highlightEnd = undefined;
36
+ this.visibilityToggles = false;
37
+ this.showDeltas = false;
38
+ this.yRange = undefined;
39
+ this.parsedLineData = {};
40
+ this.popoverIndex = -1;
41
+ this.focusedLine = -1;
42
+ this.hiddenLines = [];
43
+ this.isTabbing = false;
44
+ this.intervalSkip = 0;
45
+ this.announcement = "";
46
+ }
47
+ parseData() {
48
+ this.parsedLineData = JSON.parse(this.lineData);
49
+ this.yIntervals = this.calcYIntervals().reverse(); // needed before building dataPointMatrix
50
+ this.xIntervals = Object.keys(Object.values(this.parsedLineData)[0]);
51
+ this.displayedXIntervals = this.determineDisplayedXIntervals();
52
+ this.dataPointMatrix = Object.entries(this.parsedLineData).map((entry) => this.buildLineDataPointDetails(entry[0], entry[1]));
53
+ this.popoverData = transposeMatrix(this.dataPointMatrix);
54
+ }
55
+ handleIntervalSkip() {
56
+ // if intervalSkip ever changes, dataPointMatrix must be regenerated to account for chart spacers
57
+ this.parseData();
58
+ }
59
+ get hasPartialInterval() {
60
+ // if chart width is too small, an odd # of intervals like 1,2,3,4,5,6,7 can be shortened to 1,3,5,7 or 1,4,7
61
+ // but an even # like 1,2,3,4,5,6,7,8 will be shortened to 1,3,5,7 (can't show first and last interval)
62
+ // in these cases, show a partial interval must be shown in order to still provide space to plot the 8th data point
63
+ // e.g intervals will be 1-3, 3-5, 5-7, 7-8
64
+ return this.intervalSkip > 0 && this.xIntervals.length % 2 === 0;
65
+ }
66
+ get parsedUnits() {
67
+ return csvToArray(this.units).map((unit) => (unit === "null" ? null : unit));
68
+ }
69
+ get visibilityToggleEls() {
70
+ return this.legendEl.querySelectorAll("wm-button");
71
+ }
72
+ get lineEls() {
73
+ return this.plotAreaEl.querySelectorAll(".line");
74
+ }
75
+ get firstVisibleLineIdx() {
76
+ let firstVisibleLineIdx = 0;
77
+ while (this.hiddenLines.includes(firstVisibleLineIdx)) {
78
+ firstVisibleLineIdx++;
79
+ }
80
+ return firstVisibleLineIdx < this.dataPointMatrix.length ? firstVisibleLineIdx : -1;
81
+ }
82
+ get pointEls() {
83
+ return this.plotAreaEl.querySelectorAll(".point");
84
+ }
85
+ toggleTabbingOn() {
86
+ this.isTabbing = true;
87
+ }
88
+ toggleTabbingOff() {
89
+ this.isTabbing = false;
90
+ }
91
+ componentWillLoad() {
92
+ this.parseData();
93
+ }
94
+ componentDidLoad() {
95
+ const resizeObserver = new ResizeObserver(() => this.debouncedResize());
96
+ resizeObserver.observe(this.el);
97
+ }
98
+ handleVisibilityToggleKeydown(ev, toggleIdx) {
99
+ switch (ev.key) {
100
+ case "Tab":
101
+ if (!ev.shiftKey && this.firstVisibleLineIdx !== -1) {
102
+ ev.preventDefault();
103
+ this.announce(this.lineFocusMessage(this.firstVisibleLineIdx));
104
+ this.focusDataPoint(this.firstVisibleLineIdx, 0);
105
+ }
106
+ break;
107
+ case "ArrowUp":
108
+ case "ArrowLeft":
109
+ ev.preventDefault();
110
+ const prevToggleIdx = wrapAround(toggleIdx, -1, this.dataPointMatrix.length - 1);
111
+ this.visibilityToggleEls[prevToggleIdx].focus();
112
+ break;
113
+ case "ArrowDown":
114
+ case "ArrowRight":
115
+ ev.preventDefault();
116
+ const nextToggleIdx = wrapAround(toggleIdx, 1, this.dataPointMatrix.length - 1);
117
+ this.visibilityToggleEls[nextToggleIdx].focus();
118
+ break;
119
+ }
120
+ }
121
+ handleDataPointKeydown(ev) {
122
+ const [lineIdx, pointIdx] = this.focusedDataPoint;
123
+ const lineLength = this.lineEls[lineIdx].querySelectorAll(".point").length;
124
+ const numLines = this.dataPointMatrix.length;
125
+ switch (ev.key) {
126
+ case "Tab":
127
+ if (ev.shiftKey && this.visibilityToggles) {
128
+ ev.preventDefault();
129
+ this.visibilityToggleEls[0].focus();
130
+ }
131
+ break;
132
+ case "ArrowUp":
133
+ ev.preventDefault();
134
+ let prevLineIdx = lineIdx;
135
+ do
136
+ prevLineIdx = wrapAround(prevLineIdx, -1, numLines - 1);
137
+ while (this.hiddenLines.includes(prevLineIdx));
138
+ this.announce(this.lineFocusMessage(prevLineIdx));
139
+ this.focusDataPoint(prevLineIdx, pointIdx);
140
+ break;
141
+ case "ArrowDown":
142
+ ev.preventDefault();
143
+ let nextLineIdx = lineIdx;
144
+ do
145
+ nextLineIdx = wrapAround(nextLineIdx, 1, numLines - 1);
146
+ while (this.hiddenLines.includes(nextLineIdx));
147
+ this.announce(this.lineFocusMessage(nextLineIdx));
148
+ this.focusDataPoint(nextLineIdx, pointIdx);
149
+ break;
150
+ case "ArrowLeft":
151
+ ev.preventDefault();
152
+ const prevPointIdx = wrapAround(pointIdx, -1, lineLength - 1);
153
+ this.focusDataPoint(lineIdx, prevPointIdx);
154
+ break;
155
+ case "ArrowRight":
156
+ ev.preventDefault();
157
+ const nextPointIdx = wrapAround(pointIdx, 1, lineLength - 1);
158
+ this.focusDataPoint(lineIdx, nextPointIdx);
159
+ break;
160
+ }
161
+ }
162
+ announce(message) {
163
+ // \u00A0 is a non-breaking space character, which causes the message to be read as a new one
164
+ if (this.liveRegionEl.textContent === message) {
165
+ message += "\u00A0";
166
+ }
167
+ this.announcement = message;
168
+ }
169
+ lineFocusMessage(lineIdx) {
170
+ const label = this.dataPointMatrix[lineIdx][0].lineLabel;
171
+ const numDataPoints = this.dataPointMatrix[lineIdx].filter((datapoint) => datapoint.yValue !== null).length;
172
+ return `${label}, line ${lineIdx + 1} of ${this.dataPointMatrix.length} with ${numDataPoints} data points`;
173
+ }
174
+ focusDataPoint(lineIdx, pointIdx) {
175
+ this.pointEls.forEach((point, i) => {
176
+ if (point.dataset.lineIdx === lineIdx.toString() && i === pointIdx) {
177
+ point.tabIndex = 0;
178
+ point.focus();
179
+ }
180
+ else {
181
+ point.tabIndex = -1;
182
+ }
183
+ });
184
+ this.focusedDataPoint = [lineIdx, pointIdx];
185
+ }
186
+ focusDataPointByEl(pointEl) {
187
+ const lineIdx = parseInt(pointEl.dataset.lineidx);
188
+ const pointIdx = Array.from(pointEl.parentElement.querySelectorAll(".point")).indexOf(pointEl);
189
+ this.pointEls.forEach((point) => (point.tabIndex = -1));
190
+ pointEl.tabIndex = 0;
191
+ pointEl.focus();
192
+ this.focusedDataPoint = [lineIdx, pointIdx];
193
+ }
194
+ calcYIntervals() {
195
+ let yIntervals = [];
196
+ if (this.yRange) {
197
+ yIntervals = csvToArray(this.yRange).map((val) => parseInt(val));
198
+ }
199
+ else {
200
+ // gather all yValues
201
+ let allYValues = [];
202
+ const lines = Object.values(this.parsedLineData).flat();
203
+ lines.forEach((line) => allYValues.push(...Object.values(line)));
204
+ const filteredYValues = allYValues.filter((val) => val !== null);
205
+ // get max and min yValues in data
206
+ let minYValue = Math.min(...filteredYValues);
207
+ const maxYValue = Math.max(...filteredYValues);
208
+ // calculate neat yInterval
209
+ let interval = getInterval(maxYValue - minYValue, 4);
210
+ // find new min below smallest yValue that divides cleanly by interval
211
+ let counter = interval;
212
+ while (minYValue % interval !== 0 && counter > 0) {
213
+ minYValue--;
214
+ counter--;
215
+ }
216
+ // calculate new interval using new min
217
+ interval = getInterval(maxYValue - minYValue, 4);
218
+ let current = minYValue;
219
+ // determine top interval, no more than one tick above max yValue
220
+ while (current <= maxYValue + interval) {
221
+ yIntervals.push(current);
222
+ current += interval;
223
+ }
224
+ }
225
+ return yIntervals;
226
+ }
227
+ determineDisplayedXIntervals() {
228
+ // if component has display: none, plotAreaEl is truthy, but it's clientWidth is 0. This caused a crash when component was hidden in a tab
229
+ const maxTicks = this.plotAreaEl && this.plotAreaEl.clientWidth > 0
230
+ ? Math.round(this.plotAreaEl.clientWidth / this.minTickWidth)
231
+ : this.xIntervals.length;
232
+ const { skipInterval, skippedList } = getSmallestSkipInterval(this.xIntervals, maxTicks);
233
+ this.intervalSkip = skipInterval;
234
+ return skippedList;
235
+ }
236
+ buildLineDataPointDetails(lineLabel, line) {
237
+ let dataPointDetailsList = [];
238
+ const lineDataPoints = Object.entries(line);
239
+ let isHighlighted;
240
+ lineDataPoints.forEach((entry, pointIdx) => {
241
+ const [xValue, yValue] = entry;
242
+ let xPositionPercent = (100 / (lineDataPoints.length - 1)) * pointIdx;
243
+ const yPositionPercent = yValue === null
244
+ ? null
245
+ : 100 - calcPercentageInRange(yValue, this.yIntervals[this.yIntervals.length - 1], this.yIntervals[0]);
246
+ // add space between first points and y-axis
247
+ if (pointIdx === 0) {
248
+ xPositionPercent +=
249
+ this.plotAreaEl && this.plotAreaEl.clientWidth > 0 ? (8 / this.plotAreaEl.clientWidth) * 100 : 1;
250
+ }
251
+ if (xValue === this.highlightStart && !isHighlighted) {
252
+ isHighlighted = true;
253
+ }
254
+ dataPointDetailsList.push({
255
+ lineLabel: lineLabel,
256
+ xValue: xValue,
257
+ yValue: yValue,
258
+ xPositionPercent: xPositionPercent,
259
+ yPositionPercent: yPositionPercent,
260
+ highlighted: isHighlighted,
261
+ });
262
+ // because highlight range is inclusive, disable after pushing details
263
+ if (xValue === this.highlightEnd && isHighlighted) {
264
+ isHighlighted = false;
265
+ }
266
+ });
267
+ return dataPointDetailsList;
268
+ }
269
+ toggleLineVisibility(lineIdx) {
270
+ if (this.hiddenLines.includes(lineIdx)) {
271
+ this.hiddenLines = this.hiddenLines.filter((num) => num !== lineIdx);
272
+ }
273
+ else {
274
+ this.hiddenLines.push(lineIdx);
275
+ }
276
+ forceUpdate(this.el);
277
+ }
278
+ resetDataPointFocus() {
279
+ this.popoverIndex = -1;
280
+ this.pointEls.forEach((point) => (point.tabIndex = -1));
281
+ if (this.firstVisibleLineIdx !== -1) {
282
+ const lineEl = this.lineEls[this.firstVisibleLineIdx];
283
+ const linePointEl = lineEl.querySelectorAll(".point")[0];
284
+ linePointEl.tabIndex = 0;
285
+ this.focusedDataPoint = [this.firstVisibleLineIdx, 0];
286
+ }
287
+ }
288
+ calcDelta(dataPoint, prevDataPoint) {
289
+ let delta;
290
+ if (dataPoint.yValue === null || prevDataPoint.yValue === null) {
291
+ // display "No data" when either of the datapoints is missing
292
+ delta = lineChartMessages.noData;
105
293
  }
106
- break;
107
- case "ArrowUp":
108
- case "ArrowLeft":
109
- ev.preventDefault();
110
- const prevToggleIdx = wrapAround(toggleIdx, -1, this.dataPointMatrix.length - 1);
111
- this.visibilityToggleEls[prevToggleIdx].focus();
112
- break;
113
- case "ArrowDown":
114
- case "ArrowRight":
115
- ev.preventDefault();
116
- const nextToggleIdx = wrapAround(toggleIdx, 1, this.dataPointMatrix.length - 1);
117
- this.visibilityToggleEls[nextToggleIdx].focus();
118
- break;
119
- }
120
- }
121
- handleDataPointKeydown(ev) {
122
- const [lineIdx, pointIdx] = this.focusedDataPoint;
123
- const lineLength = this.lineEls[lineIdx].querySelectorAll(".point").length;
124
- const numLines = this.dataPointMatrix.length;
125
- switch (ev.key) {
126
- case "Tab":
127
- if (ev.shiftKey && this.visibilityToggles) {
128
- ev.preventDefault();
129
- this.visibilityToggleEls[0].focus();
294
+ else if (dataPoint.yValue == prevDataPoint.yValue) {
295
+ // display "0%" if datapoints are equal
296
+ delta = "0%";
130
297
  }
131
- break;
132
- case "ArrowUp":
133
- ev.preventDefault();
134
- let prevLineIdx = lineIdx;
135
- do
136
- prevLineIdx = wrapAround(prevLineIdx, -1, numLines - 1);
137
- while (this.hiddenLines.includes(prevLineIdx));
138
- this.announce(this.lineFocusMessage(prevLineIdx));
139
- this.focusDataPoint(prevLineIdx, pointIdx);
140
- break;
141
- case "ArrowDown":
142
- ev.preventDefault();
143
- let nextLineIdx = lineIdx;
144
- do
145
- nextLineIdx = wrapAround(nextLineIdx, 1, numLines - 1);
146
- while (this.hiddenLines.includes(nextLineIdx));
147
- this.announce(this.lineFocusMessage(nextLineIdx));
148
- this.focusDataPoint(nextLineIdx, pointIdx);
149
- break;
150
- case "ArrowLeft":
151
- ev.preventDefault();
152
- const prevPointIdx = wrapAround(pointIdx, -1, lineLength - 1);
153
- this.focusDataPoint(lineIdx, prevPointIdx);
154
- break;
155
- case "ArrowRight":
156
- ev.preventDefault();
157
- const nextPointIdx = wrapAround(pointIdx, 1, lineLength - 1);
158
- this.focusDataPoint(lineIdx, nextPointIdx);
159
- break;
160
- }
161
- }
162
- announce(message) {
163
- // \u00A0 is a non-breaking space character, which causes the message to be read as a new one
164
- if (this.liveRegionEl.textContent === message) {
165
- message += "\u00A0";
166
- }
167
- this.announcement = message;
168
- }
169
- lineFocusMessage(lineIdx) {
170
- const label = this.dataPointMatrix[lineIdx][0].lineLabel;
171
- const numDataPoints = this.dataPointMatrix[lineIdx].filter((datapoint) => datapoint.yValue !== null).length;
172
- return `${label}, line ${lineIdx + 1} of ${this.dataPointMatrix.length} with ${numDataPoints} data points`;
173
- }
174
- focusDataPoint(lineIdx, pointIdx) {
175
- this.pointEls.forEach((point, i) => {
176
- if (point.dataset.lineIdx === lineIdx.toString() && i === pointIdx) {
177
- point.tabIndex = 0;
178
- point.focus();
179
- }
180
- else {
181
- point.tabIndex = -1;
182
- }
183
- });
184
- this.focusedDataPoint = [lineIdx, pointIdx];
185
- }
186
- focusDataPointByEl(pointEl) {
187
- const lineIdx = parseInt(pointEl.dataset.lineidx);
188
- const pointIdx = Array.from(pointEl.parentElement.querySelectorAll(".point")).indexOf(pointEl);
189
- this.pointEls.forEach((point) => (point.tabIndex = -1));
190
- pointEl.tabIndex = 0;
191
- pointEl.focus();
192
- this.focusedDataPoint = [lineIdx, pointIdx];
193
- }
194
- calcYIntervals() {
195
- let yIntervals = [];
196
- if (this.yRange) {
197
- yIntervals = csvToArray(this.yRange).map((val) => parseInt(val));
198
- }
199
- else {
200
- // gather all yValues
201
- let allYValues = [];
202
- const lines = Object.values(this.parsedLineData).flat();
203
- lines.forEach((line) => allYValues.push(...Object.values(line)));
204
- const filteredYValues = allYValues.filter((val) => val !== null);
205
- // get max and min yValues in data
206
- let minYValue = Math.min(...filteredYValues);
207
- const maxYValue = Math.max(...filteredYValues);
208
- // calculate neat yInterval
209
- let interval = getInterval(maxYValue - minYValue, 4);
210
- // find new min below smallest yValue that divides cleanly by interval
211
- let counter = interval;
212
- while (minYValue % interval !== 0 && counter > 0) {
213
- minYValue--;
214
- counter--;
215
- }
216
- // calculate new interval using new min
217
- interval = getInterval(maxYValue - minYValue, 4);
218
- let current = minYValue;
219
- // determine top interval, no more than one tick above max yValue
220
- while (current <= maxYValue + interval) {
221
- yIntervals.push(current);
222
- current += interval;
223
- }
224
- }
225
- return yIntervals;
226
- }
227
- determineDisplayedXIntervals() {
228
- // if component has display: none, plotAreaEl is truthy, but it's clientWidth is 0. This caused a crash when component was hidden in a tab
229
- const maxTicks = this.plotAreaEl && this.plotAreaEl.clientWidth > 0
230
- ? Math.round(this.plotAreaEl.clientWidth / this.minTickWidth)
231
- : this.xIntervals.length;
232
- const { skipInterval, skippedList } = getSmallestSkipInterval(this.xIntervals, maxTicks);
233
- this.intervalSkip = skipInterval;
234
- return skippedList;
235
- }
236
- buildLineDataPointDetails(lineLabel, line) {
237
- let dataPointDetailsList = [];
238
- const lineDataPoints = Object.entries(line);
239
- let isHighlighted;
240
- lineDataPoints.forEach((entry, pointIdx) => {
241
- const [xValue, yValue] = entry;
242
- let xPositionPercent = (100 / (lineDataPoints.length - 1)) * pointIdx;
243
- const yPositionPercent = yValue === null
244
- ? null
245
- : 100 - calcPercentageInRange(yValue, this.yIntervals[this.yIntervals.length - 1], this.yIntervals[0]);
246
- // add space between first points and y-axis
247
- if (pointIdx === 0) {
248
- xPositionPercent +=
249
- this.plotAreaEl && this.plotAreaEl.clientWidth > 0 ? (8 / this.plotAreaEl.clientWidth) * 100 : 1;
250
- }
251
- if (xValue === this.highlightStart && !isHighlighted) {
252
- isHighlighted = true;
253
- }
254
- dataPointDetailsList.push({
255
- lineLabel: lineLabel,
256
- xValue: xValue,
257
- yValue: yValue,
258
- xPositionPercent: xPositionPercent,
259
- yPositionPercent: yPositionPercent,
260
- highlighted: isHighlighted,
261
- });
262
- // because highlight range is inclusive, disable after pushing details
263
- if (xValue === this.highlightEnd && isHighlighted) {
264
- isHighlighted = false;
265
- }
266
- });
267
- return dataPointDetailsList;
268
- }
269
- toggleLineVisibility(lineIdx) {
270
- if (this.hiddenLines.includes(lineIdx)) {
271
- this.hiddenLines = this.hiddenLines.filter((num) => num !== lineIdx);
272
- }
273
- else {
274
- this.hiddenLines.push(lineIdx);
275
- }
276
- forceUpdate(this.el);
277
- }
278
- resetDataPointFocus() {
279
- this.popoverIndex = -1;
280
- this.pointEls.forEach((point) => (point.tabIndex = -1));
281
- if (this.firstVisibleLineIdx !== -1) {
282
- const lineEl = this.lineEls[this.firstVisibleLineIdx];
283
- const linePointEl = lineEl.querySelectorAll(".point")[0];
284
- linePointEl.tabIndex = 0;
285
- this.focusedDataPoint = [this.firstVisibleLineIdx, 0];
286
- }
287
- }
288
- calcDelta(dataPoint, prevDataPoint) {
289
- let delta;
290
- if (dataPoint.yValue === null || prevDataPoint.yValue === null) {
291
- // display "No data" when either of the datapoints is missing
292
- delta = lineChartMessages.noData;
293
- }
294
- else if (dataPoint.yValue == prevDataPoint.yValue) {
295
- // display "0%" if datapoints are equal
296
- delta = "0%";
297
- }
298
- else if (prevDataPoint.yValue == 0) {
299
- // display "-" for % increase if prev data point is 0, as the technical number would be infinity
300
- delta = "-";
301
- }
302
- else {
303
- const changePercent = ((dataPoint.yValue - prevDataPoint.yValue) / prevDataPoint.yValue) * 100;
304
- const roundedPercent = Math.round(changePercent * 100) / 100;
305
- delta = `${roundedPercent > 0 ? "+" : ""}${roundedPercent}%`;
306
- }
307
- return delta;
308
- }
309
- renderLegend() {
310
- const lineLabels = Object.keys(this.parsedLineData);
311
- return (h("div", { ref: (el) => (this.legendEl = el), class: "legend" }, lineLabels.map((lineLabel, lineIdx) => {
312
- const isHidden = this.hiddenLines.includes(lineIdx);
313
- const isFaded = this.focusedLine !== -1 && this.focusedLine !== lineIdx;
314
- return (h("div", { id: `legend-label-${lineIdx}`, class: `legend-label ${isFaded ? "faded" : ""}`, onMouseEnter: () => (this.focusedLine = isHidden ? -1 : lineIdx), onMouseLeave: () => (this.focusedLine = -1) }, this.renderIcon(lineIdx), lineLabel, this.visibilityToggles && this.renderVisibilityToggle(lineLabel, lineIdx, isHidden)));
315
- })));
316
- }
317
- renderVisibilityToggle(lineLabel, lineIdx, isHidden) {
318
- return (h("wm-button", { id: `visibility-button-${lineIdx}`, class: "visibility-toggle", "label-for-identical-buttons": `${lineIdx === 0 ? `Toggle line visibility list with ${this.dataPointMatrix.length} items` : ""} ${isHidden ? globalMessages.show : globalMessages.hide} ${lineLabel} toggle ${isHidden ? "pressed" : ""}`, "button-type": "navigational", tooltip: isHidden ? globalMessages.show : globalMessages.hide, tooltipPosition: "bottom", icon: isHidden ? "f209" : "f208", onClick: () => this.toggleLineVisibility(lineIdx), onKeyDown: (ev) => this.handleVisibilityToggleKeydown(ev, lineIdx), onFocus: () => (this.popoverIndex = -1) }));
319
- }
320
- renderIcon(lineIdx) {
321
- const { color, icon } = this.lineStyles[lineIdx];
322
- const iconStyle = {
323
- "--iconColor": color,
324
- "--icon": `"\\${icon}"`,
325
- "--translation": lineIdx === 5 ? "rotate(180deg)" : "unset",
326
- };
327
- return h("span", { class: "icon", style: iconStyle });
328
- }
329
- renderXIntervals() {
330
- const gridStyle = {
331
- "--columns": `.5fr repeat(${this.xIntervals.length - 2}, 1fr) .5fr`,
332
- };
333
- return (h("div", { class: "x-intervals", style: gridStyle }, this.xIntervals.map((interval) => (h("span", { class: `x-interval ${this.displayedXIntervals.includes(interval) ? "" : "hidden"}` }, interval)))));
334
- }
335
- renderYIntervals() {
336
- return (h("div", { ref: (el) => (this.yIntervalsEl = el), class: "y-intervals" }, this.yIntervals.map((yInterval) => (h("span", { class: "y-interval" }, abbrNumber(yInterval))))));
337
- }
338
- renderData() {
339
- return this.dataPointMatrix.map((_, lineIdx) => {
340
- let focusState = this.focusedLine === lineIdx ? "focused" : "faded";
341
- const isHidden = this.hiddenLines.includes(lineIdx);
342
- return (h("div", { class: `line ${this.focusedLine !== -1 ? focusState : ""} ${isHidden ? "hidden" : ""}` }, this.renderLines(lineIdx), this.renderPoints(lineIdx)));
343
- });
344
- }
345
- renderPoints(lineIdx) {
346
- const lineDataPoints = this.dataPointMatrix[lineIdx];
347
- return (h("div", { class: "line-icons" }, lineDataPoints.map((dataPoint, pointIdx) => {
348
- const { lineLabel, xValue, yValue, xPositionPercent, yPositionPercent, highlighted } = dataPoint;
349
- if (yValue !== null) {
298
+ else if (prevDataPoint.yValue == 0) {
299
+ // display "-" for % increase if prev data point is 0, as the technical number would be infinity
300
+ delta = "-";
301
+ }
302
+ else {
303
+ const changePercent = ((dataPoint.yValue - prevDataPoint.yValue) / prevDataPoint.yValue) * 100;
304
+ const roundedPercent = Math.round(changePercent * 100) / 100;
305
+ delta = `${roundedPercent > 0 ? "+" : ""}${roundedPercent}%`;
306
+ }
307
+ return delta;
308
+ }
309
+ renderLegend() {
310
+ const lineLabels = Object.keys(this.parsedLineData);
311
+ return (h("div", { ref: (el) => (this.legendEl = el), class: "legend" }, lineLabels.map((lineLabel, lineIdx) => {
312
+ const isHidden = this.hiddenLines.includes(lineIdx);
313
+ const isFaded = this.focusedLine !== -1 && this.focusedLine !== lineIdx;
314
+ return (h("div", { id: `legend-label-${lineIdx}`, class: `legend-label ${isFaded ? "faded" : ""}`, onMouseEnter: () => (this.focusedLine = isHidden ? -1 : lineIdx), onMouseLeave: () => (this.focusedLine = -1) }, this.renderIcon(lineIdx), lineLabel, this.visibilityToggles && this.renderVisibilityToggle(lineLabel, lineIdx, isHidden)));
315
+ })));
316
+ }
317
+ renderVisibilityToggle(lineLabel, lineIdx, isHidden) {
318
+ return (h("wm-button", { id: `visibility-button-${lineIdx}`, class: "visibility-toggle", "label-for-identical-buttons": `${lineIdx === 0 ? `Toggle line visibility list with ${this.dataPointMatrix.length} items` : ""} ${isHidden ? globalMessages.show : globalMessages.hide} ${lineLabel} toggle ${isHidden ? "pressed" : ""}`, "button-type": "navigational", tooltip: isHidden ? globalMessages.show : globalMessages.hide, tooltipPosition: "bottom", icon: isHidden ? "f209" : "f208", onClick: () => this.toggleLineVisibility(lineIdx), onKeyDown: (ev) => this.handleVisibilityToggleKeydown(ev, lineIdx), onFocus: () => (this.popoverIndex = -1) }));
319
+ }
320
+ renderIcon(lineIdx) {
350
321
  const { color, icon } = this.lineStyles[lineIdx];
351
- const firstPointTabIndex = lineIdx === 0 && pointIdx === 0 ? 0 : undefined;
352
322
  const iconStyle = {
353
- "--icon": `"\\${icon}"`,
354
- "--iconColor": color,
355
- "--xPosition": xPositionPercent + "%",
356
- "--yPosition": yPositionPercent + "%",
357
- "--translation": lineIdx === 5 ? "translate(-50%, -50%) rotate(180deg)" : "translate(-50%, -50%)",
323
+ "--iconColor": color,
324
+ "--icon": `"\\${icon}"`,
325
+ "--translation": lineIdx === 5 ? "rotate(180deg)" : "unset",
326
+ };
327
+ return h("span", { class: "icon", style: iconStyle });
328
+ }
329
+ renderXIntervals() {
330
+ const gridStyle = {
331
+ "--columns": `.5fr repeat(${this.xIntervals.length - 2}, 1fr) .5fr`,
332
+ };
333
+ return (h("div", { class: "x-intervals", style: gridStyle }, this.xIntervals.map((interval) => (h("span", { class: `x-interval ${this.displayedXIntervals.includes(interval) ? "" : "hidden"}` }, interval)))));
334
+ }
335
+ renderYIntervals() {
336
+ return (h("div", { ref: (el) => (this.yIntervalsEl = el), class: "y-intervals" }, this.yIntervals.map((yInterval) => (h("span", { class: "y-interval" }, abbrNumber(yInterval))))));
337
+ }
338
+ renderData() {
339
+ return this.dataPointMatrix.map((_, lineIdx) => {
340
+ let focusState = this.focusedLine === lineIdx ? "focused" : "faded";
341
+ const isHidden = this.hiddenLines.includes(lineIdx);
342
+ return (h("div", { class: `line ${this.focusedLine !== -1 ? focusState : ""} ${isHidden ? "hidden" : ""}` }, this.renderLines(lineIdx), this.renderPoints(lineIdx)));
343
+ });
344
+ }
345
+ renderPoints(lineIdx) {
346
+ const lineDataPoints = this.dataPointMatrix[lineIdx];
347
+ return (h("div", { class: "line-icons" }, lineDataPoints.map((dataPoint, pointIdx) => {
348
+ const { lineLabel, xValue, yValue, xPositionPercent, yPositionPercent, highlighted } = dataPoint;
349
+ if (yValue !== null) {
350
+ const { color, icon } = this.lineStyles[lineIdx];
351
+ const firstPointTabIndex = lineIdx === 0 && pointIdx === 0 ? 0 : undefined;
352
+ const iconStyle = {
353
+ "--icon": `"\\${icon}"`,
354
+ "--iconColor": color,
355
+ "--xPosition": xPositionPercent + "%",
356
+ "--yPosition": yPositionPercent + "%",
357
+ "--translation": lineIdx === 5 ? "translate(-50%, -50%) rotate(180deg)" : "translate(-50%, -50%)",
358
+ };
359
+ let ariaLabel = `${lineLabel} ${highlighted ? this.highlightQualifier : ""} ${this.xAxisLabel} ${xValue + (this.parsedUnits[0] ? this.parsedUnits[0] : "")}, ${this.yAxisLabel}: ${yValue + (this.parsedUnits[1] ? this.parsedUnits[1] : "")}`;
360
+ if (this.showDeltas && pointIdx > 0) {
361
+ const prevDataPoint = lineDataPoints[pointIdx - 1];
362
+ const changeSinceMessage = lineChartMessages.getChangeSince(prevDataPoint.xValue);
363
+ ariaLabel += `, ${changeSinceMessage} ${this.calcDelta(dataPoint, prevDataPoint)}`;
364
+ }
365
+ return (h("span", { id: `${lineLabel}-${pointIdx}`, role: "img", "aria-label": ariaLabel, tabIndex: firstPointTabIndex, class: "point icon", style: iconStyle, "data-lineidx": lineIdx, "data-xvalue": xValue, onKeyDown: (ev) => this.handleDataPointKeydown(ev), onFocus: () => (this.popoverIndex = pointIdx), onClick: (ev) => this.focusDataPointByEl(ev.target), onMouseEnter: () => (this.popoverIndex = pointIdx) }));
366
+ }
367
+ })));
368
+ }
369
+ renderLines(lineIdx) {
370
+ const lineDataPoints = this.dataPointMatrix[lineIdx];
371
+ return (h("svg", { class: "line-svg" }, lineDataPoints.map((dataPoint, pointIdx) => {
372
+ const shouldDraw = dataPoint.yValue !== null &&
373
+ pointIdx !== lineDataPoints.length - 1 &&
374
+ lineDataPoints[pointIdx + 1].yValue !== null;
375
+ if (shouldDraw) {
376
+ const { color } = this.lineStyles[lineIdx];
377
+ const { xPositionPercent: xStart, yPositionPercent: yStart } = dataPoint;
378
+ const { xPositionPercent: xEnd, yPositionPercent: yEnd } = lineDataPoints[pointIdx + 1];
379
+ return (h("line", { x1: xStart + "%", y1: yStart + "%", x2: xEnd + "%", y2: yEnd + "%", stroke: color, "stroke-width": "2px" }));
380
+ }
381
+ })));
382
+ }
383
+ renderHoverAreas() {
384
+ const hoverAreaStyle = { "--columns": `.5fr repeat(${this.xIntervals.length - 2}, 1fr) .5fr` };
385
+ return (h("div", { class: "hover-area-wrapper", style: hoverAreaStyle, onMouseLeave: () => (this.popoverIndex = -1) }, this.xIntervals.map((_, idx) => (h("div", { onMouseEnter: () => (this.popoverIndex = idx) })))));
386
+ }
387
+ renderPopover() {
388
+ const hasPopoverData = this.popoverData &&
389
+ this.popoverData[this.popoverIndex] &&
390
+ this.plotAreaEl.querySelector(`.point[data-xvalue="${this.dataPointMatrix[0][this.popoverIndex].xValue}"]`);
391
+ if (!hasPopoverData) {
392
+ return "";
393
+ }
394
+ const displayedPopoverData = this.popoverData[this.popoverIndex];
395
+ const xPosition = displayedPopoverData[0].xPositionPercent;
396
+ const yPositions = displayedPopoverData
397
+ .map((point) => point.yPositionPercent)
398
+ .filter((yPosition) => yPosition !== null);
399
+ const averageYPosition = yPositions.reduce((acc, cur) => acc + cur, 0) / yPositions.length;
400
+ const referencePointEl = this.plotAreaEl.querySelector(`.point[data-xvalue="${this.dataPointMatrix[0][this.popoverIndex].xValue}"]`);
401
+ const componentBoundingClientRect = this.el.getBoundingClientRect();
402
+ const referencePointBoundingClientRect = referencePointEl.getBoundingClientRect();
403
+ const rightSpaceAvailable = componentBoundingClientRect.right - referencePointBoundingClientRect.right;
404
+ const leftSpaceAvailable = referencePointBoundingClientRect.left - componentBoundingClientRect.left;
405
+ const hasRoomRight = rightSpaceAvailable >= (this.popoverEl ? Math.min(this.popoverEl.clientWidth, 400) : 400);
406
+ const hasRoomLeft = leftSpaceAvailable >= (this.popoverEl ? Math.min(this.popoverEl.clientWidth, 400) : 400);
407
+ const percentMargin = (8 / this.plotAreaEl.clientWidth) * 100;
408
+ let popoverStyle = {
409
+ "--leftPosition": hasRoomRight ? xPosition + percentMargin + "%" : "unset",
410
+ "--rightPosition": hasRoomLeft ? 100 - xPosition + percentMargin + "%" : "unset",
411
+ "--topPosition": averageYPosition + "%",
412
+ transform: "translateY(-50%)", // vertically center for averageYPosition
358
413
  };
359
- let ariaLabel = `${lineLabel} ${highlighted ? this.highlightQualifier : ""} ${this.xAxisLabel} ${xValue + (this.parsedUnits[0] ? this.parsedUnits[0] : "")}, ${this.yAxisLabel}: ${yValue + (this.parsedUnits[1] ? this.parsedUnits[1] : "")}`;
360
- if (this.showDeltas && pointIdx > 0) {
361
- const prevDataPoint = lineDataPoints[pointIdx - 1];
362
- const changeSinceMessage = lineChartMessages.getChangeSince(prevDataPoint.xValue);
363
- ariaLabel += `, ${changeSinceMessage} ${this.calcDelta(dataPoint, prevDataPoint)}`;
414
+ if (!hasRoomLeft && !hasRoomRight) {
415
+ // if there's not enough room to the left and right, position "detached" from the data points towards the top of the chart
416
+ const displaceLeft = `0px - ${this.labelWidth} - 20px - ${this.yIntervalsEl.clientWidth + "px"} + ${this.el.scrollLeft + "px"} + 2px`;
417
+ popoverStyle = {
418
+ "--leftPosition": `0%`,
419
+ "--topPosition": "0%",
420
+ maxWidth: Math.min(this.el.clientWidth - 2, 400) + "px",
421
+ transform: `translateX(calc(${displaceLeft}))`, // align with left edge of component
422
+ };
423
+ }
424
+ return (h("div", { ref: (el) => (this.popoverEl = el), class: "popover", style: popoverStyle }, h("div", { class: "title" }, displayedPopoverData[0].xValue, this.parsedUnits[0] && h("span", { class: "unit --x" }, "(", this.parsedUnits[0], ")")), this.showDeltas && this.popoverIndex > 0 && (h("div", { class: "comparison-title" }, lineChartMessages.getChangeSince(this.popoverData[this.popoverIndex - 1][0].xValue))), this.renderPopoverTable()));
425
+ }
426
+ renderPopoverTable() {
427
+ const displayedPopoverData = this.popoverData[this.popoverIndex];
428
+ return (h("table", { class: "popover-table" }, displayedPopoverData.map((dataPoint, lineIdx) => {
429
+ if (!this.hiddenLines.includes(lineIdx)) {
430
+ const { lineLabel, yValue } = dataPoint;
431
+ const prevDataPoint = this.popoverIndex > 0 ? this.popoverData[this.popoverIndex - 1][lineIdx] : null;
432
+ const localizedYValue = yValue !== null ? new Intl.NumberFormat().format(yValue) : null;
433
+ return (h("tr", { class: "popover-row" }, h("td", null, this.renderIcon(lineIdx)), h("td", { class: "row-label" }, lineLabel), h("td", { class: "row-value" }, yValue === null ? lineChartMessages.noData : localizedYValue, yValue !== null && this.parsedUnits[1] && h("span", { class: "unit --y" }, this.parsedUnits[1])), this.showDeltas && prevDataPoint && this.renderDeltas(dataPoint, prevDataPoint)));
434
+ }
435
+ })));
436
+ }
437
+ renderDeltas(dataPoint, prevDataPoint) {
438
+ const delta = this.calcDelta(dataPoint, prevDataPoint);
439
+ const deltaColor = delta.toString()[0] == "+" || delta == "-" ? "positive" : delta.toString()[0] == "-" ? "negative" : "";
440
+ return prevDataPoint && h("td", { class: `delta --${deltaColor}` }, delta);
441
+ }
442
+ renderHoverIndicator() {
443
+ const hasIndicatorData = this.dataPointMatrix.length > 0 && this.dataPointMatrix[0][this.popoverIndex];
444
+ if (!hasIndicatorData) {
445
+ return "";
364
446
  }
365
- return (h("span", { id: `${lineLabel}-${pointIdx}`, role: "img", "aria-label": ariaLabel, tabIndex: firstPointTabIndex, class: "point icon", style: iconStyle, "data-lineidx": lineIdx, "data-xvalue": xValue, onKeyDown: (ev) => this.handleDataPointKeydown(ev), onFocus: () => (this.popoverIndex = pointIdx), onClick: (ev) => this.focusDataPointByEl(ev.target), onMouseEnter: () => (this.popoverIndex = pointIdx) }));
366
- }
367
- })));
368
- }
369
- renderLines(lineIdx) {
370
- const lineDataPoints = this.dataPointMatrix[lineIdx];
371
- return (h("svg", { class: "line-svg" }, lineDataPoints.map((dataPoint, pointIdx) => {
372
- const shouldDraw = dataPoint.yValue !== null &&
373
- pointIdx !== lineDataPoints.length - 1 &&
374
- lineDataPoints[pointIdx + 1].yValue !== null;
375
- if (shouldDraw) {
376
- const { color } = this.lineStyles[lineIdx];
377
- const { xPositionPercent: xStart, yPositionPercent: yStart } = dataPoint;
378
- const { xPositionPercent: xEnd, yPositionPercent: yEnd } = lineDataPoints[pointIdx + 1];
379
- return (h("line", { x1: xStart + "%", y1: yStart + "%", x2: xEnd + "%", y2: yEnd + "%", stroke: color, "stroke-width": "2px" }));
380
- }
381
- })));
382
- }
383
- renderHoverAreas() {
384
- const hoverAreaStyle = { "--columns": `.5fr repeat(${this.xIntervals.length - 2}, 1fr) .5fr` };
385
- return (h("div", { class: "hover-area-wrapper", style: hoverAreaStyle, onMouseLeave: () => (this.popoverIndex = -1) }, this.xIntervals.map((_, idx) => (h("div", { onMouseEnter: () => (this.popoverIndex = idx) })))));
386
- }
387
- renderPopover() {
388
- const hasPopoverData = this.popoverData &&
389
- this.popoverData[this.popoverIndex] &&
390
- this.plotAreaEl.querySelector(`.point[data-xvalue="${this.dataPointMatrix[0][this.popoverIndex].xValue}"]`);
391
- if (!hasPopoverData) {
392
- return "";
393
- }
394
- const displayedPopoverData = this.popoverData[this.popoverIndex];
395
- const xPosition = displayedPopoverData[0].xPositionPercent;
396
- const yPositions = displayedPopoverData
397
- .map((point) => point.yPositionPercent)
398
- .filter((yPosition) => yPosition !== null);
399
- const averageYPosition = yPositions.reduce((acc, cur) => acc + cur, 0) / yPositions.length;
400
- const referencePointEl = this.plotAreaEl.querySelector(`.point[data-xvalue="${this.dataPointMatrix[0][this.popoverIndex].xValue}"]`);
401
- const componentBoundingClientRect = this.el.getBoundingClientRect();
402
- const referencePointBoundingClientRect = referencePointEl.getBoundingClientRect();
403
- const rightSpaceAvailable = componentBoundingClientRect.right - referencePointBoundingClientRect.right;
404
- const leftSpaceAvailable = referencePointBoundingClientRect.left - componentBoundingClientRect.left;
405
- const hasRoomRight = rightSpaceAvailable >= (this.popoverEl ? Math.min(this.popoverEl.clientWidth, 400) : 400);
406
- const hasRoomLeft = leftSpaceAvailable >= (this.popoverEl ? Math.min(this.popoverEl.clientWidth, 400) : 400);
407
- const percentMargin = (8 / this.plotAreaEl.clientWidth) * 100;
408
- let popoverStyle = {
409
- "--leftPosition": hasRoomRight ? xPosition + percentMargin + "%" : "unset",
410
- "--rightPosition": hasRoomLeft ? 100 - xPosition + percentMargin + "%" : "unset",
411
- "--topPosition": averageYPosition + "%",
412
- transform: "translateY(-50%)", // vertically center for averageYPosition
413
- };
414
- if (!hasRoomLeft && !hasRoomRight) {
415
- // if there's not enough room to the left and right, position "detached" from the data points towards the top of the chart
416
- const displaceLeft = `0px - ${this.labelWidth} - 20px - ${this.yIntervalsEl.clientWidth + "px"} + ${this.el.scrollLeft + "px"} + 2px`;
417
- popoverStyle = {
418
- "--leftPosition": `0%`,
419
- "--topPosition": "0%",
420
- maxWidth: Math.min(this.el.clientWidth - 2, 400) + "px",
421
- transform: `translateX(calc(${displaceLeft}))`, // align with left edge of component
422
- };
423
- }
424
- return (h("div", { ref: (el) => (this.popoverEl = el), class: "popover", style: popoverStyle }, h("div", { class: "title" }, displayedPopoverData[0].xValue, this.parsedUnits[0] && h("span", { class: "unit --x" }, "(", this.parsedUnits[0], ")")), this.showDeltas && this.popoverIndex > 0 && (h("div", { class: "comparison-title" }, lineChartMessages.getChangeSince(this.popoverData[this.popoverIndex - 1][0].xValue))), this.renderPopoverTable()));
425
- }
426
- renderPopoverTable() {
427
- const displayedPopoverData = this.popoverData[this.popoverIndex];
428
- return (h("table", { class: "popover-table" }, displayedPopoverData.map((dataPoint, lineIdx) => {
429
- if (!this.hiddenLines.includes(lineIdx)) {
430
- const { lineLabel, yValue } = dataPoint;
431
- const prevDataPoint = this.popoverIndex > 0 ? this.popoverData[this.popoverIndex - 1][lineIdx] : null;
432
- const localizedYValue = yValue !== null ? new Intl.NumberFormat().format(yValue) : null;
433
- return (h("tr", { class: "popover-row" }, h("td", null, this.renderIcon(lineIdx)), h("td", { class: "row-label" }, lineLabel), h("td", { class: "row-value" }, yValue === null ? lineChartMessages.noData : localizedYValue, yValue !== null && this.parsedUnits[1] && h("span", { class: "unit --y" }, this.parsedUnits[1])), this.showDeltas && prevDataPoint && this.renderDeltas(dataPoint, prevDataPoint)));
434
- }
435
- })));
436
- }
437
- renderDeltas(dataPoint, prevDataPoint) {
438
- const delta = this.calcDelta(dataPoint, prevDataPoint);
439
- const deltaColor = delta.toString()[0] == "+" || delta == "-" ? "positive" : delta.toString()[0] == "-" ? "negative" : "";
440
- return prevDataPoint && h("td", { class: `delta --${deltaColor}` }, delta);
441
- }
442
- renderHoverIndicator() {
443
- const hasIndicatorData = this.dataPointMatrix.length > 0 && this.dataPointMatrix[0][this.popoverIndex];
444
- if (!hasIndicatorData) {
445
- return "";
446
- }
447
- const xPosition = this.dataPointMatrix[0][this.popoverIndex].xPositionPercent;
448
- const indicatorStyle = { "--xPosition": xPosition + "%" };
449
- return h("div", { class: "hover-indicator", style: indicatorStyle });
450
- }
451
- renderHighlight() {
452
- const startPercentage = this.dataPointMatrix[0][this.xIntervals.indexOf(this.highlightStart)].xPositionPercent;
453
- const endPercentage = this.highlightEnd
454
- ? 100 - this.dataPointMatrix[0][this.xIntervals.indexOf(this.highlightEnd)].xPositionPercent
455
- : 0;
456
- const highlightStyle = { "--startPercentage": startPercentage + "%", "--endPercentage": endPercentage + "%" };
457
- return h("div", { class: "highlight", style: highlightStyle });
458
- }
459
- render() {
460
- return (h(Host, { onBlur: () => this.resetDataPointFocus(), onMouseLeave: () => (this.popoverIndex = -1) }, h("div", { class: "component-wrapper", role: "application", "aria-roledescription": chartMessages.interactiveChart, "aria-label": this.label, "aria-describedby": "chart-description" }, this.renderLegend(), h("div", { class: "chart-wrapper" }, h("div", { class: "chart-label --y-axis", style: { "--labelWidth": this.labelWidth } }, this.yAxisLabel, this.parsedUnits[1] && ` (${this.parsedUnits[1]})`), this.renderYIntervals(), h("div", { ref: (el) => (this.plotAreaEl = el), class: `plot-area ${this.hasPartialInterval ? "" : "right-border"}`, style: {
461
- "--backgroundSize": `${this.dataPointMatrix[0][this.xIntervals.indexOf(this.displayedXIntervals[1])].xPositionPercent}%`,
462
- } }, this.highlightStart && this.renderHighlight(), this.renderData(), this.renderHoverAreas()), this.popoverIndex !== -1 && this.renderHoverIndicator(), this.popoverIndex !== -1 && this.renderPopover(), this.renderXIntervals(), h("div", { class: "chart-label --x-axis" }, this.xAxisLabel, this.parsedUnits[0] && ` (${this.parsedUnits[0]})`)), h("div", { id: "chart-description", class: "sr-only" }, `${lineChartMessages.instructions} ${this.description}`), h("div", { ref: (el) => (this.liveRegionEl = el), "aria-live": "polite", class: "sr-only" }, this.announcement))));
463
- }
464
- static get is() { return "wm-line-chart"; }
465
- static get encapsulation() { return "shadow"; }
466
- static get originalStyleUrls() {
467
- return {
468
- "$": ["wm-line-chart.scss"]
469
- };
470
- }
471
- static get styleUrls() {
472
- return {
473
- "$": ["wm-line-chart.css"]
474
- };
475
- }
476
- static get properties() {
477
- return {
478
- "label": {
479
- "type": "string",
480
- "mutable": false,
481
- "complexType": {
482
- "original": "string",
483
- "resolved": "string",
484
- "references": {}
485
- },
486
- "required": true,
487
- "optional": false,
488
- "docs": {
489
- "tags": [],
490
- "text": ""
491
- },
492
- "attribute": "label",
493
- "reflect": false
494
- },
495
- "description": {
496
- "type": "string",
497
- "mutable": false,
498
- "complexType": {
499
- "original": "string",
500
- "resolved": "string",
501
- "references": {}
502
- },
503
- "required": false,
504
- "optional": false,
505
- "docs": {
506
- "tags": [],
507
- "text": ""
508
- },
509
- "attribute": "description",
510
- "reflect": false,
511
- "defaultValue": "\"\""
512
- },
513
- "xAxisLabel": {
514
- "type": "string",
515
- "mutable": false,
516
- "complexType": {
517
- "original": "string",
518
- "resolved": "string",
519
- "references": {}
520
- },
521
- "required": true,
522
- "optional": false,
523
- "docs": {
524
- "tags": [],
525
- "text": ""
526
- },
527
- "attribute": "x-axis-label",
528
- "reflect": false
529
- },
530
- "yAxisLabel": {
531
- "type": "string",
532
- "mutable": false,
533
- "complexType": {
534
- "original": "string",
535
- "resolved": "string",
536
- "references": {}
537
- },
538
- "required": true,
539
- "optional": false,
540
- "docs": {
541
- "tags": [],
542
- "text": ""
543
- },
544
- "attribute": "y-axis-label",
545
- "reflect": false
546
- },
547
- "lineData": {
548
- "type": "string",
549
- "mutable": false,
550
- "complexType": {
551
- "original": "string",
552
- "resolved": "string",
553
- "references": {}
554
- },
555
- "required": true,
556
- "optional": false,
557
- "docs": {
558
- "tags": [],
559
- "text": ""
560
- },
561
- "attribute": "line-data",
562
- "reflect": true
563
- },
564
- "units": {
565
- "type": "string",
566
- "mutable": false,
567
- "complexType": {
568
- "original": "string",
569
- "resolved": "string",
570
- "references": {}
571
- },
572
- "required": false,
573
- "optional": false,
574
- "docs": {
575
- "tags": [],
576
- "text": ""
577
- },
578
- "attribute": "units",
579
- "reflect": false,
580
- "defaultValue": "\"null,null\""
581
- },
582
- "labelWidth": {
583
- "type": "string",
584
- "mutable": false,
585
- "complexType": {
586
- "original": "string",
587
- "resolved": "string",
588
- "references": {}
589
- },
590
- "required": false,
591
- "optional": false,
592
- "docs": {
593
- "tags": [],
594
- "text": ""
595
- },
596
- "attribute": "label-width",
597
- "reflect": false,
598
- "defaultValue": "\"120px\""
599
- },
600
- "highlightQualifier": {
601
- "type": "string",
602
- "mutable": false,
603
- "complexType": {
604
- "original": "string",
605
- "resolved": "string",
606
- "references": {}
607
- },
608
- "required": false,
609
- "optional": false,
610
- "docs": {
611
- "tags": [],
612
- "text": ""
613
- },
614
- "attribute": "highlight-qualifier",
615
- "reflect": false,
616
- "defaultValue": "\"highlighted\""
617
- },
618
- "highlightStart": {
619
- "type": "string",
620
- "mutable": false,
621
- "complexType": {
622
- "original": "string",
623
- "resolved": "string | undefined",
624
- "references": {}
625
- },
626
- "required": false,
627
- "optional": true,
628
- "docs": {
629
- "tags": [],
630
- "text": ""
631
- },
632
- "attribute": "highlight-start",
633
- "reflect": false
634
- },
635
- "highlightEnd": {
636
- "type": "string",
637
- "mutable": false,
638
- "complexType": {
639
- "original": "string",
640
- "resolved": "string | undefined",
641
- "references": {}
642
- },
643
- "required": false,
644
- "optional": true,
645
- "docs": {
646
- "tags": [],
647
- "text": ""
648
- },
649
- "attribute": "highlight-end",
650
- "reflect": false
651
- },
652
- "visibilityToggles": {
653
- "type": "boolean",
654
- "mutable": false,
655
- "complexType": {
656
- "original": "boolean",
657
- "resolved": "boolean",
658
- "references": {}
659
- },
660
- "required": false,
661
- "optional": false,
662
- "docs": {
663
- "tags": [],
664
- "text": ""
665
- },
666
- "attribute": "visibility-toggles",
667
- "reflect": false,
668
- "defaultValue": "false"
669
- },
670
- "showDeltas": {
671
- "type": "boolean",
672
- "mutable": false,
673
- "complexType": {
674
- "original": "boolean",
675
- "resolved": "boolean",
676
- "references": {}
677
- },
678
- "required": false,
679
- "optional": false,
680
- "docs": {
681
- "tags": [],
682
- "text": ""
683
- },
684
- "attribute": "show-deltas",
685
- "reflect": false,
686
- "defaultValue": "false"
687
- },
688
- "yRange": {
689
- "type": "string",
690
- "mutable": false,
691
- "complexType": {
692
- "original": "string",
693
- "resolved": "string | undefined",
694
- "references": {}
695
- },
696
- "required": false,
697
- "optional": true,
698
- "docs": {
699
- "tags": [],
700
- "text": ""
701
- },
702
- "attribute": "y-range",
703
- "reflect": false
704
- }
705
- };
706
- }
707
- static get states() {
708
- return {
709
- "parsedLineData": {},
710
- "popoverIndex": {},
711
- "focusedLine": {},
712
- "hiddenLines": {},
713
- "isTabbing": {},
714
- "intervalSkip": {},
715
- "announcement": {}
716
- };
717
- }
718
- static get elementRef() { return "el"; }
719
- static get watchers() {
720
- return [{
721
- "propName": "lineData",
722
- "methodName": "parseData"
723
- }, {
724
- "propName": "intervalSkip",
725
- "methodName": "handleIntervalSkip"
726
- }];
727
- }
728
- static get listeners() {
729
- return [{
730
- "name": "wmUserIsTabbing",
731
- "method": "toggleTabbingOn",
732
- "target": "window",
733
- "capture": false,
734
- "passive": false
735
- }, {
736
- "name": "wmUserIsNotTabbing",
737
- "method": "toggleTabbingOff",
738
- "target": "window",
739
- "capture": false,
740
- "passive": false
741
- }];
742
- }
447
+ const xPosition = this.dataPointMatrix[0][this.popoverIndex].xPositionPercent;
448
+ const indicatorStyle = { "--xPosition": xPosition + "%" };
449
+ return h("div", { class: "hover-indicator", style: indicatorStyle });
450
+ }
451
+ renderHighlight() {
452
+ const startPercentage = this.dataPointMatrix[0][this.xIntervals.indexOf(this.highlightStart)].xPositionPercent;
453
+ const endPercentage = this.highlightEnd
454
+ ? 100 - this.dataPointMatrix[0][this.xIntervals.indexOf(this.highlightEnd)].xPositionPercent
455
+ : 0;
456
+ const highlightStyle = { "--startPercentage": startPercentage + "%", "--endPercentage": endPercentage + "%" };
457
+ return h("div", { class: "highlight", style: highlightStyle });
458
+ }
459
+ render() {
460
+ return (h(Host, { onBlur: () => this.resetDataPointFocus(), onMouseLeave: () => (this.popoverIndex = -1) }, h("div", { class: "component-wrapper", role: "application", "aria-roledescription": chartMessages.interactiveChart, "aria-label": this.label, "aria-describedby": "chart-description" }, this.renderLegend(), h("div", { class: "chart-wrapper" }, h("div", { class: "chart-label --y-axis", style: { "--labelWidth": this.labelWidth } }, this.yAxisLabel, this.parsedUnits[1] && ` (${this.parsedUnits[1]})`), this.renderYIntervals(), h("div", { ref: (el) => (this.plotAreaEl = el), class: `plot-area ${this.hasPartialInterval ? "" : "right-border"}`, style: {
461
+ "--backgroundSize": `${this.dataPointMatrix[0][this.xIntervals.indexOf(this.displayedXIntervals[1])].xPositionPercent}%`,
462
+ } }, this.highlightStart && this.renderHighlight(), this.renderData(), this.renderHoverAreas()), this.popoverIndex !== -1 && this.renderHoverIndicator(), this.popoverIndex !== -1 && this.renderPopover(), this.renderXIntervals(), h("div", { class: "chart-label --x-axis" }, this.xAxisLabel, this.parsedUnits[0] && ` (${this.parsedUnits[0]})`)), h("div", { id: "chart-description", class: "sr-only" }, `${lineChartMessages.instructions} ${this.description}`), h("div", { ref: (el) => (this.liveRegionEl = el), "aria-live": "polite", class: "sr-only" }, this.announcement))));
463
+ }
464
+ static get is() { return "wm-line-chart"; }
465
+ static get encapsulation() { return "shadow"; }
466
+ static get originalStyleUrls() {
467
+ return {
468
+ "$": ["wm-line-chart.scss"]
469
+ };
470
+ }
471
+ static get styleUrls() {
472
+ return {
473
+ "$": ["wm-line-chart.css"]
474
+ };
475
+ }
476
+ static get properties() {
477
+ return {
478
+ "label": {
479
+ "type": "string",
480
+ "mutable": false,
481
+ "complexType": {
482
+ "original": "string",
483
+ "resolved": "string",
484
+ "references": {}
485
+ },
486
+ "required": true,
487
+ "optional": false,
488
+ "docs": {
489
+ "tags": [],
490
+ "text": ""
491
+ },
492
+ "attribute": "label",
493
+ "reflect": false
494
+ },
495
+ "description": {
496
+ "type": "string",
497
+ "mutable": false,
498
+ "complexType": {
499
+ "original": "string",
500
+ "resolved": "string",
501
+ "references": {}
502
+ },
503
+ "required": false,
504
+ "optional": false,
505
+ "docs": {
506
+ "tags": [],
507
+ "text": ""
508
+ },
509
+ "attribute": "description",
510
+ "reflect": false,
511
+ "defaultValue": "\"\""
512
+ },
513
+ "xAxisLabel": {
514
+ "type": "string",
515
+ "mutable": false,
516
+ "complexType": {
517
+ "original": "string",
518
+ "resolved": "string",
519
+ "references": {}
520
+ },
521
+ "required": true,
522
+ "optional": false,
523
+ "docs": {
524
+ "tags": [],
525
+ "text": ""
526
+ },
527
+ "attribute": "x-axis-label",
528
+ "reflect": false
529
+ },
530
+ "yAxisLabel": {
531
+ "type": "string",
532
+ "mutable": false,
533
+ "complexType": {
534
+ "original": "string",
535
+ "resolved": "string",
536
+ "references": {}
537
+ },
538
+ "required": true,
539
+ "optional": false,
540
+ "docs": {
541
+ "tags": [],
542
+ "text": ""
543
+ },
544
+ "attribute": "y-axis-label",
545
+ "reflect": false
546
+ },
547
+ "lineData": {
548
+ "type": "string",
549
+ "mutable": false,
550
+ "complexType": {
551
+ "original": "string",
552
+ "resolved": "string",
553
+ "references": {}
554
+ },
555
+ "required": true,
556
+ "optional": false,
557
+ "docs": {
558
+ "tags": [],
559
+ "text": ""
560
+ },
561
+ "attribute": "line-data",
562
+ "reflect": true
563
+ },
564
+ "units": {
565
+ "type": "string",
566
+ "mutable": false,
567
+ "complexType": {
568
+ "original": "string",
569
+ "resolved": "string",
570
+ "references": {}
571
+ },
572
+ "required": false,
573
+ "optional": false,
574
+ "docs": {
575
+ "tags": [],
576
+ "text": ""
577
+ },
578
+ "attribute": "units",
579
+ "reflect": false,
580
+ "defaultValue": "\"null,null\""
581
+ },
582
+ "labelWidth": {
583
+ "type": "string",
584
+ "mutable": false,
585
+ "complexType": {
586
+ "original": "string",
587
+ "resolved": "string",
588
+ "references": {}
589
+ },
590
+ "required": false,
591
+ "optional": false,
592
+ "docs": {
593
+ "tags": [],
594
+ "text": ""
595
+ },
596
+ "attribute": "label-width",
597
+ "reflect": false,
598
+ "defaultValue": "\"120px\""
599
+ },
600
+ "highlightQualifier": {
601
+ "type": "string",
602
+ "mutable": false,
603
+ "complexType": {
604
+ "original": "string",
605
+ "resolved": "string",
606
+ "references": {}
607
+ },
608
+ "required": false,
609
+ "optional": false,
610
+ "docs": {
611
+ "tags": [],
612
+ "text": ""
613
+ },
614
+ "attribute": "highlight-qualifier",
615
+ "reflect": false,
616
+ "defaultValue": "\"highlighted\""
617
+ },
618
+ "highlightStart": {
619
+ "type": "string",
620
+ "mutable": false,
621
+ "complexType": {
622
+ "original": "string",
623
+ "resolved": "string | undefined",
624
+ "references": {}
625
+ },
626
+ "required": false,
627
+ "optional": true,
628
+ "docs": {
629
+ "tags": [],
630
+ "text": ""
631
+ },
632
+ "attribute": "highlight-start",
633
+ "reflect": false
634
+ },
635
+ "highlightEnd": {
636
+ "type": "string",
637
+ "mutable": false,
638
+ "complexType": {
639
+ "original": "string",
640
+ "resolved": "string | undefined",
641
+ "references": {}
642
+ },
643
+ "required": false,
644
+ "optional": true,
645
+ "docs": {
646
+ "tags": [],
647
+ "text": ""
648
+ },
649
+ "attribute": "highlight-end",
650
+ "reflect": false
651
+ },
652
+ "visibilityToggles": {
653
+ "type": "boolean",
654
+ "mutable": false,
655
+ "complexType": {
656
+ "original": "boolean",
657
+ "resolved": "boolean",
658
+ "references": {}
659
+ },
660
+ "required": false,
661
+ "optional": false,
662
+ "docs": {
663
+ "tags": [],
664
+ "text": ""
665
+ },
666
+ "attribute": "visibility-toggles",
667
+ "reflect": false,
668
+ "defaultValue": "false"
669
+ },
670
+ "showDeltas": {
671
+ "type": "boolean",
672
+ "mutable": false,
673
+ "complexType": {
674
+ "original": "boolean",
675
+ "resolved": "boolean",
676
+ "references": {}
677
+ },
678
+ "required": false,
679
+ "optional": false,
680
+ "docs": {
681
+ "tags": [],
682
+ "text": ""
683
+ },
684
+ "attribute": "show-deltas",
685
+ "reflect": false,
686
+ "defaultValue": "false"
687
+ },
688
+ "yRange": {
689
+ "type": "string",
690
+ "mutable": false,
691
+ "complexType": {
692
+ "original": "string",
693
+ "resolved": "string | undefined",
694
+ "references": {}
695
+ },
696
+ "required": false,
697
+ "optional": true,
698
+ "docs": {
699
+ "tags": [],
700
+ "text": ""
701
+ },
702
+ "attribute": "y-range",
703
+ "reflect": false
704
+ }
705
+ };
706
+ }
707
+ static get states() {
708
+ return {
709
+ "parsedLineData": {},
710
+ "popoverIndex": {},
711
+ "focusedLine": {},
712
+ "hiddenLines": {},
713
+ "isTabbing": {},
714
+ "intervalSkip": {},
715
+ "announcement": {}
716
+ };
717
+ }
718
+ static get elementRef() { return "el"; }
719
+ static get watchers() {
720
+ return [{
721
+ "propName": "lineData",
722
+ "methodName": "parseData"
723
+ }, {
724
+ "propName": "intervalSkip",
725
+ "methodName": "handleIntervalSkip"
726
+ }];
727
+ }
728
+ static get listeners() {
729
+ return [{
730
+ "name": "wmUserIsTabbing",
731
+ "method": "toggleTabbingOn",
732
+ "target": "window",
733
+ "capture": false,
734
+ "passive": false
735
+ }, {
736
+ "name": "wmUserIsNotTabbing",
737
+ "method": "toggleTabbingOff",
738
+ "target": "window",
739
+ "capture": false,
740
+ "passive": false
741
+ }];
742
+ }
743
743
  }