@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
@@ -2,478 +2,478 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-fae02cd7.js');
6
- const functions = require('./functions-91da05e9.js');
7
- const chartFunctions = require('./chartFunctions-2c3e010e.js');
8
- const intl = require('./intl-fa3bb4ae.js');
5
+ const index = require('./index-f8ef86de.js');
6
+ const functions = require('./functions-4208c444.js');
7
+ const chartFunctions = require('./chartFunctions-cecf8134.js');
8
+ const intl = require('./intl-3fafc6d1.js');
9
9
 
10
10
  const wmLineChartCss = ":host{--wmcolor-linechart-currentposition:var(--wmcolor-lavender);--wmcolor-linechart-delta-text-negative:var(--wmcolor-text-negative);--wmcolor-linechart-delta-text-positive:var(--wmcolor-text-positive);--wmcolor-linechart-gridline:var(--wmcolor-chart-gridline);--wmcolor-linechart-highlight-background:var(--wmcolor-background-highlight);--wmcolor-linechart-popover-background:var(--wmcolor-chart-popover-background);display:block;height:500px;width:100%;font-size:14px;overflow-y:visible;overflow-x:auto}:host .component-wrapper{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:562px;width:100%;height:100%;outline:none}:host .icon{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;position:relative;color:var(--iconColor);-webkit-transform:var(--translation, unset);transform:var(--translation, unset)}:host .icon:before{display:inline-block;font:normal normal normal 24px/1 \"Material Design Icons\";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:var(--icon);padding:0 3px;z-index:1}:host .icon:after{color:white;position:absolute;left:3px;-webkit-transform:scale(180%);transform:scale(180%);display:inline-block;font:normal normal normal 24px/1 \"Material Design Icons\";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:var(--icon);z-index:0}:host .legend{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:8px 16px;margin-top:4px;margin-bottom:16px}:host .legend .legend-label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;cursor:default;font-weight:600}:host .legend .legend-label.faded{opacity:0.3}:host .legend .legend-label .icon{margin-right:4px}:host .legend .visibility-toggle{margin-left:4px}:host .chart-wrapper{position:relative;-ms-flex-positive:1;flex-grow:1;display:grid;grid-template-columns:auto auto 1fr;grid-template-rows:1fr auto auto;margin-right:16px}:host .chart-label{font-size:14px;font-weight:600}:host .chart-label.--y-axis{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:var(--labelWidth);align-self:center;margin-right:16px;grid-area:1/1/2/2;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}:host .chart-label.--x-axis{margin-top:16px;text-align:center;grid-area:3/3/4/4}:host .y-intervals{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;grid-area:1/2/2/3;margin-right:4px}:host .y-intervals .y-interval{text-align:right}:host .x-intervals{display:grid;grid-template-columns:var(--columns);grid-area:2/3/3/4;line-height:1;margin-top:4px}:host .x-intervals .x-interval{text-align:center}:host .x-intervals .x-interval:first-child{text-align:left}:host .x-intervals .x-interval:last-child{text-align:right}:host .x-intervals .x-interval.hidden{visibility:hidden}:host .plot-area{position:relative;grid-area:1/3/2/4;background-image:linear-gradient(90deg, var(--wmcolor-linechart-gridline) 1px, transparent 1px);border-bottom:1px solid var(--wmcolor-linechart-gridline);background-size:var(--backgroundSize)}:host .plot-area.right-border{border-right:1px solid var(--wmcolor-linechart-gridline)}:host .line{position:absolute;width:100%;height:100%}:host .line .icon{position:absolute;-webkit-transform:var(--translation);transform:var(--translation);left:var(--xPosition);top:var(--yPosition);z-index:1}:host .line .icon:focus{z-index:2;outline:none}:host .line .icon:focus:before{-webkit-box-shadow:0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px var(--wmcolor-interactive-focus);-moz-box-shadow:0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px var(--wmcolor-interactive-focus);box-shadow:0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px var(--wmcolor-interactive-focus);border-radius:3px}:host .line .icon:focus:before::-moz-focus-inner{border:0}:host .line .line-svg{height:100%;width:100%}:host .line.faded{opacity:0.3}:host .line.focused{z-index:1}:host .line.hidden{visibility:hidden}:host .hover-area-wrapper{position:absolute;width:100%;height:100%;top:0;left:0;display:grid;grid-template-rows:1fr;grid-template-columns:var(--columns)}:host .hover-indicator{-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;height:100%;width:2px;border:1px solid var(--wmcolor-linechart-currentposition);-webkit-transform:translateX(-50%);transform:translateX(-50%);left:var(--xPosition);grid-column:3/4;grid-row:1/2;pointer-events:none}:host .popover{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:400px;background-color:var(--wmcolor-linechart-popover-background);position:absolute;top:var(--topPosition, 0);left:var(--leftPosition, unset);right:var(--rightPosition, unset);padding:16px;border-radius:5px;-webkit-box-shadow:0px 2px 10px 0px rgba(0, 0, 0, 0.09);box-shadow:0px 2px 10px 0px rgba(0, 0, 0, 0.09);-webkit-transform:translateY(-50%);transform:translateY(-50%);line-height:1;z-index:3;grid-column:3/4;grid-row:1/2;pointer-events:none;-webkit-box-sizing:border-box;box-sizing:border-box}:host .popover .title{font-size:16px;font-weight:600}:host .popover .comparison-title{font-style:italic;margin-top:4px}:host .popover .unit{font-size:12px;font-weight:600}:host .popover .unit.--x{margin-left:4px}:host .popover .popover-table{margin-top:16px}:host .popover .popover-table .popover-row{line-height:1}:host .popover .popover-table .popover-row:not(:last-child) td{padding-bottom:8px}:host .popover .popover-table .popover-row .row-label{font-weight:600;padding-right:16px;overflow-wrap:anywhere}:host .popover .popover-table .popover-row .row-label .icon{margin-right:4px}:host .popover .popover-table .popover-row .row-value,:host .popover .popover-table .popover-row .delta{text-align:right;white-space:nowrap}:host .popover .popover-table .popover-row .delta{padding-left:12px;font-weight:600}:host .popover .popover-table .popover-row .delta.--positive{color:var(--wmcolor-linechart-delta-text-positive)}:host .popover .popover-table .popover-row .delta.--negative{color:var(--wmcolor-linechart-delta-text-negative)}:host .highlight{position:absolute;height:100%;background-color:color-mix(in srgb, var(--wmcolor-linechart-highlight-background) 60%, transparent);left:var(--startPercentage);right:var(--endPercentage)}:host .sr-only{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;border:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;white-space:nowrap !important;margin:-1px !important}";
11
11
 
12
12
  const LineChart = class {
13
- constructor(hostRef) {
14
- index.registerInstance(this, hostRef);
15
- this.minTickWidth = 120;
16
- this.popoverData = [];
17
- this.focusedDataPoint = [0, 0];
18
- this.dataPointMatrix = [];
19
- this.xIntervals = [];
20
- this.displayedXIntervals = [];
21
- this.yIntervals = [];
22
- this.lineStyles = [
23
- { color: "#8b86ca", icon: "f536" },
24
- { color: "#2e1b46", icon: "f12f" },
25
- { color: "#0089e4", icon: "f763" },
26
- { color: "#088000", icon: "f4ce" },
27
- { color: "#ea8500", icon: "f70a" },
28
- { color: "#d54f41", icon: "f536" },
29
- { color: "#146ca9", icon: "f6ff" }, // blue, upside down triangle
30
- ];
31
- this.debouncedResize = functions.debounce(async () => {
32
- this.displayedXIntervals = this.determineDisplayedXIntervals();
33
- }, 100);
34
- this.label = undefined;
35
- this.description = "";
36
- this.xAxisLabel = undefined;
37
- this.yAxisLabel = undefined;
38
- this.lineData = undefined;
39
- this.units = "null,null";
40
- this.labelWidth = "120px";
41
- this.highlightQualifier = "highlighted";
42
- this.highlightStart = undefined;
43
- this.highlightEnd = undefined;
44
- this.visibilityToggles = false;
45
- this.showDeltas = false;
46
- this.yRange = undefined;
47
- this.parsedLineData = {};
48
- this.popoverIndex = -1;
49
- this.focusedLine = -1;
50
- this.hiddenLines = [];
51
- this.isTabbing = false;
52
- this.intervalSkip = 0;
53
- this.announcement = "";
54
- }
55
- parseData() {
56
- this.parsedLineData = JSON.parse(this.lineData);
57
- this.yIntervals = this.calcYIntervals().reverse(); // needed before building dataPointMatrix
58
- this.xIntervals = Object.keys(Object.values(this.parsedLineData)[0]);
59
- this.displayedXIntervals = this.determineDisplayedXIntervals();
60
- this.dataPointMatrix = Object.entries(this.parsedLineData).map((entry) => this.buildLineDataPointDetails(entry[0], entry[1]));
61
- this.popoverData = functions.transposeMatrix(this.dataPointMatrix);
62
- }
63
- handleIntervalSkip() {
64
- // if intervalSkip ever changes, dataPointMatrix must be regenerated to account for chart spacers
65
- this.parseData();
66
- }
67
- get hasPartialInterval() {
68
- // 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
69
- // 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)
70
- // in these cases, show a partial interval must be shown in order to still provide space to plot the 8th data point
71
- // e.g intervals will be 1-3, 3-5, 5-7, 7-8
72
- return this.intervalSkip > 0 && this.xIntervals.length % 2 === 0;
73
- }
74
- get parsedUnits() {
75
- return functions.csvToArray(this.units).map((unit) => (unit === "null" ? null : unit));
76
- }
77
- get visibilityToggleEls() {
78
- return this.legendEl.querySelectorAll("wm-button");
79
- }
80
- get lineEls() {
81
- return this.plotAreaEl.querySelectorAll(".line");
82
- }
83
- get firstVisibleLineIdx() {
84
- let firstVisibleLineIdx = 0;
85
- while (this.hiddenLines.includes(firstVisibleLineIdx)) {
86
- firstVisibleLineIdx++;
87
- }
88
- return firstVisibleLineIdx < this.dataPointMatrix.length ? firstVisibleLineIdx : -1;
89
- }
90
- get pointEls() {
91
- return this.plotAreaEl.querySelectorAll(".point");
92
- }
93
- toggleTabbingOn() {
94
- this.isTabbing = true;
95
- }
96
- toggleTabbingOff() {
97
- this.isTabbing = false;
98
- }
99
- componentWillLoad() {
100
- this.parseData();
101
- }
102
- componentDidLoad() {
103
- const resizeObserver = new ResizeObserver(() => this.debouncedResize());
104
- resizeObserver.observe(this.el);
105
- }
106
- handleVisibilityToggleKeydown(ev, toggleIdx) {
107
- switch (ev.key) {
108
- case "Tab":
109
- if (!ev.shiftKey && this.firstVisibleLineIdx !== -1) {
110
- ev.preventDefault();
111
- this.announce(this.lineFocusMessage(this.firstVisibleLineIdx));
112
- this.focusDataPoint(this.firstVisibleLineIdx, 0);
13
+ constructor(hostRef) {
14
+ index.registerInstance(this, hostRef);
15
+ this.minTickWidth = 120;
16
+ this.popoverData = [];
17
+ this.focusedDataPoint = [0, 0];
18
+ this.dataPointMatrix = [];
19
+ this.xIntervals = [];
20
+ this.displayedXIntervals = [];
21
+ this.yIntervals = [];
22
+ this.lineStyles = [
23
+ { color: "#8b86ca", icon: "f536" },
24
+ { color: "#2e1b46", icon: "f12f" },
25
+ { color: "#0089e4", icon: "f763" },
26
+ { color: "#088000", icon: "f4ce" },
27
+ { color: "#ea8500", icon: "f70a" },
28
+ { color: "#d54f41", icon: "f536" },
29
+ { color: "#146ca9", icon: "f6ff" }, // blue, upside down triangle
30
+ ];
31
+ this.debouncedResize = functions.debounce(async () => {
32
+ this.displayedXIntervals = this.determineDisplayedXIntervals();
33
+ }, 100);
34
+ this.label = undefined;
35
+ this.description = "";
36
+ this.xAxisLabel = undefined;
37
+ this.yAxisLabel = undefined;
38
+ this.lineData = undefined;
39
+ this.units = "null,null";
40
+ this.labelWidth = "120px";
41
+ this.highlightQualifier = "highlighted";
42
+ this.highlightStart = undefined;
43
+ this.highlightEnd = undefined;
44
+ this.visibilityToggles = false;
45
+ this.showDeltas = false;
46
+ this.yRange = undefined;
47
+ this.parsedLineData = {};
48
+ this.popoverIndex = -1;
49
+ this.focusedLine = -1;
50
+ this.hiddenLines = [];
51
+ this.isTabbing = false;
52
+ this.intervalSkip = 0;
53
+ this.announcement = "";
54
+ }
55
+ parseData() {
56
+ this.parsedLineData = JSON.parse(this.lineData);
57
+ this.yIntervals = this.calcYIntervals().reverse(); // needed before building dataPointMatrix
58
+ this.xIntervals = Object.keys(Object.values(this.parsedLineData)[0]);
59
+ this.displayedXIntervals = this.determineDisplayedXIntervals();
60
+ this.dataPointMatrix = Object.entries(this.parsedLineData).map((entry) => this.buildLineDataPointDetails(entry[0], entry[1]));
61
+ this.popoverData = functions.transposeMatrix(this.dataPointMatrix);
62
+ }
63
+ handleIntervalSkip() {
64
+ // if intervalSkip ever changes, dataPointMatrix must be regenerated to account for chart spacers
65
+ this.parseData();
66
+ }
67
+ get hasPartialInterval() {
68
+ // 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
69
+ // 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)
70
+ // in these cases, show a partial interval must be shown in order to still provide space to plot the 8th data point
71
+ // e.g intervals will be 1-3, 3-5, 5-7, 7-8
72
+ return this.intervalSkip > 0 && this.xIntervals.length % 2 === 0;
73
+ }
74
+ get parsedUnits() {
75
+ return functions.csvToArray(this.units).map((unit) => (unit === "null" ? null : unit));
76
+ }
77
+ get visibilityToggleEls() {
78
+ return this.legendEl.querySelectorAll("wm-button");
79
+ }
80
+ get lineEls() {
81
+ return this.plotAreaEl.querySelectorAll(".line");
82
+ }
83
+ get firstVisibleLineIdx() {
84
+ let firstVisibleLineIdx = 0;
85
+ while (this.hiddenLines.includes(firstVisibleLineIdx)) {
86
+ firstVisibleLineIdx++;
87
+ }
88
+ return firstVisibleLineIdx < this.dataPointMatrix.length ? firstVisibleLineIdx : -1;
89
+ }
90
+ get pointEls() {
91
+ return this.plotAreaEl.querySelectorAll(".point");
92
+ }
93
+ toggleTabbingOn() {
94
+ this.isTabbing = true;
95
+ }
96
+ toggleTabbingOff() {
97
+ this.isTabbing = false;
98
+ }
99
+ componentWillLoad() {
100
+ this.parseData();
101
+ }
102
+ componentDidLoad() {
103
+ const resizeObserver = new ResizeObserver(() => this.debouncedResize());
104
+ resizeObserver.observe(this.el);
105
+ }
106
+ handleVisibilityToggleKeydown(ev, toggleIdx) {
107
+ switch (ev.key) {
108
+ case "Tab":
109
+ if (!ev.shiftKey && this.firstVisibleLineIdx !== -1) {
110
+ ev.preventDefault();
111
+ this.announce(this.lineFocusMessage(this.firstVisibleLineIdx));
112
+ this.focusDataPoint(this.firstVisibleLineIdx, 0);
113
+ }
114
+ break;
115
+ case "ArrowUp":
116
+ case "ArrowLeft":
117
+ ev.preventDefault();
118
+ const prevToggleIdx = functions.wrapAround(toggleIdx, -1, this.dataPointMatrix.length - 1);
119
+ this.visibilityToggleEls[prevToggleIdx].focus();
120
+ break;
121
+ case "ArrowDown":
122
+ case "ArrowRight":
123
+ ev.preventDefault();
124
+ const nextToggleIdx = functions.wrapAround(toggleIdx, 1, this.dataPointMatrix.length - 1);
125
+ this.visibilityToggleEls[nextToggleIdx].focus();
126
+ break;
127
+ }
128
+ }
129
+ handleDataPointKeydown(ev) {
130
+ const [lineIdx, pointIdx] = this.focusedDataPoint;
131
+ const lineLength = this.lineEls[lineIdx].querySelectorAll(".point").length;
132
+ const numLines = this.dataPointMatrix.length;
133
+ switch (ev.key) {
134
+ case "Tab":
135
+ if (ev.shiftKey && this.visibilityToggles) {
136
+ ev.preventDefault();
137
+ this.visibilityToggleEls[0].focus();
138
+ }
139
+ break;
140
+ case "ArrowUp":
141
+ ev.preventDefault();
142
+ let prevLineIdx = lineIdx;
143
+ do
144
+ prevLineIdx = functions.wrapAround(prevLineIdx, -1, numLines - 1);
145
+ while (this.hiddenLines.includes(prevLineIdx));
146
+ this.announce(this.lineFocusMessage(prevLineIdx));
147
+ this.focusDataPoint(prevLineIdx, pointIdx);
148
+ break;
149
+ case "ArrowDown":
150
+ ev.preventDefault();
151
+ let nextLineIdx = lineIdx;
152
+ do
153
+ nextLineIdx = functions.wrapAround(nextLineIdx, 1, numLines - 1);
154
+ while (this.hiddenLines.includes(nextLineIdx));
155
+ this.announce(this.lineFocusMessage(nextLineIdx));
156
+ this.focusDataPoint(nextLineIdx, pointIdx);
157
+ break;
158
+ case "ArrowLeft":
159
+ ev.preventDefault();
160
+ const prevPointIdx = functions.wrapAround(pointIdx, -1, lineLength - 1);
161
+ this.focusDataPoint(lineIdx, prevPointIdx);
162
+ break;
163
+ case "ArrowRight":
164
+ ev.preventDefault();
165
+ const nextPointIdx = functions.wrapAround(pointIdx, 1, lineLength - 1);
166
+ this.focusDataPoint(lineIdx, nextPointIdx);
167
+ break;
168
+ }
169
+ }
170
+ announce(message) {
171
+ // \u00A0 is a non-breaking space character, which causes the message to be read as a new one
172
+ if (this.liveRegionEl.textContent === message) {
173
+ message += "\u00A0";
174
+ }
175
+ this.announcement = message;
176
+ }
177
+ lineFocusMessage(lineIdx) {
178
+ const label = this.dataPointMatrix[lineIdx][0].lineLabel;
179
+ const numDataPoints = this.dataPointMatrix[lineIdx].filter((datapoint) => datapoint.yValue !== null).length;
180
+ return `${label}, line ${lineIdx + 1} of ${this.dataPointMatrix.length} with ${numDataPoints} data points`;
181
+ }
182
+ focusDataPoint(lineIdx, pointIdx) {
183
+ this.pointEls.forEach((point, i) => {
184
+ if (point.dataset.lineIdx === lineIdx.toString() && i === pointIdx) {
185
+ point.tabIndex = 0;
186
+ point.focus();
187
+ }
188
+ else {
189
+ point.tabIndex = -1;
190
+ }
191
+ });
192
+ this.focusedDataPoint = [lineIdx, pointIdx];
193
+ }
194
+ focusDataPointByEl(pointEl) {
195
+ const lineIdx = parseInt(pointEl.dataset.lineidx);
196
+ const pointIdx = Array.from(pointEl.parentElement.querySelectorAll(".point")).indexOf(pointEl);
197
+ this.pointEls.forEach((point) => (point.tabIndex = -1));
198
+ pointEl.tabIndex = 0;
199
+ pointEl.focus();
200
+ this.focusedDataPoint = [lineIdx, pointIdx];
201
+ }
202
+ calcYIntervals() {
203
+ let yIntervals = [];
204
+ if (this.yRange) {
205
+ yIntervals = functions.csvToArray(this.yRange).map((val) => parseInt(val));
206
+ }
207
+ else {
208
+ // gather all yValues
209
+ let allYValues = [];
210
+ const lines = Object.values(this.parsedLineData).flat();
211
+ lines.forEach((line) => allYValues.push(...Object.values(line)));
212
+ const filteredYValues = allYValues.filter((val) => val !== null);
213
+ // get max and min yValues in data
214
+ let minYValue = Math.min(...filteredYValues);
215
+ const maxYValue = Math.max(...filteredYValues);
216
+ // calculate neat yInterval
217
+ let interval = chartFunctions.getInterval(maxYValue - minYValue, 4);
218
+ // find new min below smallest yValue that divides cleanly by interval
219
+ let counter = interval;
220
+ while (minYValue % interval !== 0 && counter > 0) {
221
+ minYValue--;
222
+ counter--;
223
+ }
224
+ // calculate new interval using new min
225
+ interval = chartFunctions.getInterval(maxYValue - minYValue, 4);
226
+ let current = minYValue;
227
+ // determine top interval, no more than one tick above max yValue
228
+ while (current <= maxYValue + interval) {
229
+ yIntervals.push(current);
230
+ current += interval;
231
+ }
232
+ }
233
+ return yIntervals;
234
+ }
235
+ determineDisplayedXIntervals() {
236
+ // 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
237
+ const maxTicks = this.plotAreaEl && this.plotAreaEl.clientWidth > 0
238
+ ? Math.round(this.plotAreaEl.clientWidth / this.minTickWidth)
239
+ : this.xIntervals.length;
240
+ const { skipInterval, skippedList } = functions.getSmallestSkipInterval(this.xIntervals, maxTicks);
241
+ this.intervalSkip = skipInterval;
242
+ return skippedList;
243
+ }
244
+ buildLineDataPointDetails(lineLabel, line) {
245
+ let dataPointDetailsList = [];
246
+ const lineDataPoints = Object.entries(line);
247
+ let isHighlighted;
248
+ lineDataPoints.forEach((entry, pointIdx) => {
249
+ const [xValue, yValue] = entry;
250
+ let xPositionPercent = (100 / (lineDataPoints.length - 1)) * pointIdx;
251
+ const yPositionPercent = yValue === null
252
+ ? null
253
+ : 100 - functions.calcPercentageInRange(yValue, this.yIntervals[this.yIntervals.length - 1], this.yIntervals[0]);
254
+ // add space between first points and y-axis
255
+ if (pointIdx === 0) {
256
+ xPositionPercent +=
257
+ this.plotAreaEl && this.plotAreaEl.clientWidth > 0 ? (8 / this.plotAreaEl.clientWidth) * 100 : 1;
258
+ }
259
+ if (xValue === this.highlightStart && !isHighlighted) {
260
+ isHighlighted = true;
261
+ }
262
+ dataPointDetailsList.push({
263
+ lineLabel: lineLabel,
264
+ xValue: xValue,
265
+ yValue: yValue,
266
+ xPositionPercent: xPositionPercent,
267
+ yPositionPercent: yPositionPercent,
268
+ highlighted: isHighlighted,
269
+ });
270
+ // because highlight range is inclusive, disable after pushing details
271
+ if (xValue === this.highlightEnd && isHighlighted) {
272
+ isHighlighted = false;
273
+ }
274
+ });
275
+ return dataPointDetailsList;
276
+ }
277
+ toggleLineVisibility(lineIdx) {
278
+ if (this.hiddenLines.includes(lineIdx)) {
279
+ this.hiddenLines = this.hiddenLines.filter((num) => num !== lineIdx);
113
280
  }
114
- break;
115
- case "ArrowUp":
116
- case "ArrowLeft":
117
- ev.preventDefault();
118
- const prevToggleIdx = functions.wrapAround(toggleIdx, -1, this.dataPointMatrix.length - 1);
119
- this.visibilityToggleEls[prevToggleIdx].focus();
120
- break;
121
- case "ArrowDown":
122
- case "ArrowRight":
123
- ev.preventDefault();
124
- const nextToggleIdx = functions.wrapAround(toggleIdx, 1, this.dataPointMatrix.length - 1);
125
- this.visibilityToggleEls[nextToggleIdx].focus();
126
- break;
127
- }
128
- }
129
- handleDataPointKeydown(ev) {
130
- const [lineIdx, pointIdx] = this.focusedDataPoint;
131
- const lineLength = this.lineEls[lineIdx].querySelectorAll(".point").length;
132
- const numLines = this.dataPointMatrix.length;
133
- switch (ev.key) {
134
- case "Tab":
135
- if (ev.shiftKey && this.visibilityToggles) {
136
- ev.preventDefault();
137
- this.visibilityToggleEls[0].focus();
281
+ else {
282
+ this.hiddenLines.push(lineIdx);
138
283
  }
139
- break;
140
- case "ArrowUp":
141
- ev.preventDefault();
142
- let prevLineIdx = lineIdx;
143
- do
144
- prevLineIdx = functions.wrapAround(prevLineIdx, -1, numLines - 1);
145
- while (this.hiddenLines.includes(prevLineIdx));
146
- this.announce(this.lineFocusMessage(prevLineIdx));
147
- this.focusDataPoint(prevLineIdx, pointIdx);
148
- break;
149
- case "ArrowDown":
150
- ev.preventDefault();
151
- let nextLineIdx = lineIdx;
152
- do
153
- nextLineIdx = functions.wrapAround(nextLineIdx, 1, numLines - 1);
154
- while (this.hiddenLines.includes(nextLineIdx));
155
- this.announce(this.lineFocusMessage(nextLineIdx));
156
- this.focusDataPoint(nextLineIdx, pointIdx);
157
- break;
158
- case "ArrowLeft":
159
- ev.preventDefault();
160
- const prevPointIdx = functions.wrapAround(pointIdx, -1, lineLength - 1);
161
- this.focusDataPoint(lineIdx, prevPointIdx);
162
- break;
163
- case "ArrowRight":
164
- ev.preventDefault();
165
- const nextPointIdx = functions.wrapAround(pointIdx, 1, lineLength - 1);
166
- this.focusDataPoint(lineIdx, nextPointIdx);
167
- break;
168
- }
169
- }
170
- announce(message) {
171
- // \u00A0 is a non-breaking space character, which causes the message to be read as a new one
172
- if (this.liveRegionEl.textContent === message) {
173
- message += "\u00A0";
174
- }
175
- this.announcement = message;
176
- }
177
- lineFocusMessage(lineIdx) {
178
- const label = this.dataPointMatrix[lineIdx][0].lineLabel;
179
- const numDataPoints = this.dataPointMatrix[lineIdx].filter((datapoint) => datapoint.yValue !== null).length;
180
- return `${label}, line ${lineIdx + 1} of ${this.dataPointMatrix.length} with ${numDataPoints} data points`;
181
- }
182
- focusDataPoint(lineIdx, pointIdx) {
183
- this.pointEls.forEach((point, i) => {
184
- if (point.dataset.lineIdx === lineIdx.toString() && i === pointIdx) {
185
- point.tabIndex = 0;
186
- point.focus();
187
- }
188
- else {
189
- point.tabIndex = -1;
190
- }
191
- });
192
- this.focusedDataPoint = [lineIdx, pointIdx];
193
- }
194
- focusDataPointByEl(pointEl) {
195
- const lineIdx = parseInt(pointEl.dataset.lineidx);
196
- const pointIdx = Array.from(pointEl.parentElement.querySelectorAll(".point")).indexOf(pointEl);
197
- this.pointEls.forEach((point) => (point.tabIndex = -1));
198
- pointEl.tabIndex = 0;
199
- pointEl.focus();
200
- this.focusedDataPoint = [lineIdx, pointIdx];
201
- }
202
- calcYIntervals() {
203
- let yIntervals = [];
204
- if (this.yRange) {
205
- yIntervals = functions.csvToArray(this.yRange).map((val) => parseInt(val));
206
- }
207
- else {
208
- // gather all yValues
209
- let allYValues = [];
210
- const lines = Object.values(this.parsedLineData).flat();
211
- lines.forEach((line) => allYValues.push(...Object.values(line)));
212
- const filteredYValues = allYValues.filter((val) => val !== null);
213
- // get max and min yValues in data
214
- let minYValue = Math.min(...filteredYValues);
215
- const maxYValue = Math.max(...filteredYValues);
216
- // calculate neat yInterval
217
- let interval = chartFunctions.getInterval(maxYValue - minYValue, 4);
218
- // find new min below smallest yValue that divides cleanly by interval
219
- let counter = interval;
220
- while (minYValue % interval !== 0 && counter > 0) {
221
- minYValue--;
222
- counter--;
223
- }
224
- // calculate new interval using new min
225
- interval = chartFunctions.getInterval(maxYValue - minYValue, 4);
226
- let current = minYValue;
227
- // determine top interval, no more than one tick above max yValue
228
- while (current <= maxYValue + interval) {
229
- yIntervals.push(current);
230
- current += interval;
231
- }
232
- }
233
- return yIntervals;
234
- }
235
- determineDisplayedXIntervals() {
236
- // 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
237
- const maxTicks = this.plotAreaEl && this.plotAreaEl.clientWidth > 0
238
- ? Math.round(this.plotAreaEl.clientWidth / this.minTickWidth)
239
- : this.xIntervals.length;
240
- const { skipInterval, skippedList } = functions.getSmallestSkipInterval(this.xIntervals, maxTicks);
241
- this.intervalSkip = skipInterval;
242
- return skippedList;
243
- }
244
- buildLineDataPointDetails(lineLabel, line) {
245
- let dataPointDetailsList = [];
246
- const lineDataPoints = Object.entries(line);
247
- let isHighlighted;
248
- lineDataPoints.forEach((entry, pointIdx) => {
249
- const [xValue, yValue] = entry;
250
- let xPositionPercent = (100 / (lineDataPoints.length - 1)) * pointIdx;
251
- const yPositionPercent = yValue === null
252
- ? null
253
- : 100 - functions.calcPercentageInRange(yValue, this.yIntervals[this.yIntervals.length - 1], this.yIntervals[0]);
254
- // add space between first points and y-axis
255
- if (pointIdx === 0) {
256
- xPositionPercent +=
257
- this.plotAreaEl && this.plotAreaEl.clientWidth > 0 ? (8 / this.plotAreaEl.clientWidth) * 100 : 1;
258
- }
259
- if (xValue === this.highlightStart && !isHighlighted) {
260
- isHighlighted = true;
261
- }
262
- dataPointDetailsList.push({
263
- lineLabel: lineLabel,
264
- xValue: xValue,
265
- yValue: yValue,
266
- xPositionPercent: xPositionPercent,
267
- yPositionPercent: yPositionPercent,
268
- highlighted: isHighlighted,
269
- });
270
- // because highlight range is inclusive, disable after pushing details
271
- if (xValue === this.highlightEnd && isHighlighted) {
272
- isHighlighted = false;
273
- }
274
- });
275
- return dataPointDetailsList;
276
- }
277
- toggleLineVisibility(lineIdx) {
278
- if (this.hiddenLines.includes(lineIdx)) {
279
- this.hiddenLines = this.hiddenLines.filter((num) => num !== lineIdx);
280
- }
281
- else {
282
- this.hiddenLines.push(lineIdx);
283
- }
284
- index.forceUpdate(this.el);
285
- }
286
- resetDataPointFocus() {
287
- this.popoverIndex = -1;
288
- this.pointEls.forEach((point) => (point.tabIndex = -1));
289
- if (this.firstVisibleLineIdx !== -1) {
290
- const lineEl = this.lineEls[this.firstVisibleLineIdx];
291
- const linePointEl = lineEl.querySelectorAll(".point")[0];
292
- linePointEl.tabIndex = 0;
293
- this.focusedDataPoint = [this.firstVisibleLineIdx, 0];
294
- }
295
- }
296
- calcDelta(dataPoint, prevDataPoint) {
297
- let delta;
298
- if (dataPoint.yValue === null || prevDataPoint.yValue === null) {
299
- // display "No data" when either of the datapoints is missing
300
- delta = intl.lineChartMessages.noData;
301
- }
302
- else if (dataPoint.yValue == prevDataPoint.yValue) {
303
- // display "0%" if datapoints are equal
304
- delta = "0%";
305
- }
306
- else if (prevDataPoint.yValue == 0) {
307
- // display "-" for % increase if prev data point is 0, as the technical number would be infinity
308
- delta = "-";
309
- }
310
- else {
311
- const changePercent = ((dataPoint.yValue - prevDataPoint.yValue) / prevDataPoint.yValue) * 100;
312
- const roundedPercent = Math.round(changePercent * 100) / 100;
313
- delta = `${roundedPercent > 0 ? "+" : ""}${roundedPercent}%`;
314
- }
315
- return delta;
316
- }
317
- renderLegend() {
318
- const lineLabels = Object.keys(this.parsedLineData);
319
- return (index.h("div", { ref: (el) => (this.legendEl = el), class: "legend" }, lineLabels.map((lineLabel, lineIdx) => {
320
- const isHidden = this.hiddenLines.includes(lineIdx);
321
- const isFaded = this.focusedLine !== -1 && this.focusedLine !== lineIdx;
322
- return (index.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)));
323
- })));
324
- }
325
- renderVisibilityToggle(lineLabel, lineIdx, isHidden) {
326
- return (index.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 ? intl.globalMessages.show : intl.globalMessages.hide} ${lineLabel} toggle ${isHidden ? "pressed" : ""}`, "button-type": "navigational", tooltip: isHidden ? intl.globalMessages.show : intl.globalMessages.hide, tooltipPosition: "bottom", icon: isHidden ? "f209" : "f208", onClick: () => this.toggleLineVisibility(lineIdx), onKeyDown: (ev) => this.handleVisibilityToggleKeydown(ev, lineIdx), onFocus: () => (this.popoverIndex = -1) }));
327
- }
328
- renderIcon(lineIdx) {
329
- const { color, icon } = this.lineStyles[lineIdx];
330
- const iconStyle = {
331
- "--iconColor": color,
332
- "--icon": `"\\${icon}"`,
333
- "--translation": lineIdx === 5 ? "rotate(180deg)" : "unset",
334
- };
335
- return index.h("span", { class: "icon", style: iconStyle });
336
- }
337
- renderXIntervals() {
338
- const gridStyle = {
339
- "--columns": `.5fr repeat(${this.xIntervals.length - 2}, 1fr) .5fr`,
340
- };
341
- return (index.h("div", { class: "x-intervals", style: gridStyle }, this.xIntervals.map((interval) => (index.h("span", { class: `x-interval ${this.displayedXIntervals.includes(interval) ? "" : "hidden"}` }, interval)))));
342
- }
343
- renderYIntervals() {
344
- return (index.h("div", { ref: (el) => (this.yIntervalsEl = el), class: "y-intervals" }, this.yIntervals.map((yInterval) => (index.h("span", { class: "y-interval" }, chartFunctions.abbrNumber(yInterval))))));
345
- }
346
- renderData() {
347
- return this.dataPointMatrix.map((_, lineIdx) => {
348
- let focusState = this.focusedLine === lineIdx ? "focused" : "faded";
349
- const isHidden = this.hiddenLines.includes(lineIdx);
350
- return (index.h("div", { class: `line ${this.focusedLine !== -1 ? focusState : ""} ${isHidden ? "hidden" : ""}` }, this.renderLines(lineIdx), this.renderPoints(lineIdx)));
351
- });
352
- }
353
- renderPoints(lineIdx) {
354
- const lineDataPoints = this.dataPointMatrix[lineIdx];
355
- return (index.h("div", { class: "line-icons" }, lineDataPoints.map((dataPoint, pointIdx) => {
356
- const { lineLabel, xValue, yValue, xPositionPercent, yPositionPercent, highlighted } = dataPoint;
357
- if (yValue !== null) {
284
+ index.forceUpdate(this.el);
285
+ }
286
+ resetDataPointFocus() {
287
+ this.popoverIndex = -1;
288
+ this.pointEls.forEach((point) => (point.tabIndex = -1));
289
+ if (this.firstVisibleLineIdx !== -1) {
290
+ const lineEl = this.lineEls[this.firstVisibleLineIdx];
291
+ const linePointEl = lineEl.querySelectorAll(".point")[0];
292
+ linePointEl.tabIndex = 0;
293
+ this.focusedDataPoint = [this.firstVisibleLineIdx, 0];
294
+ }
295
+ }
296
+ calcDelta(dataPoint, prevDataPoint) {
297
+ let delta;
298
+ if (dataPoint.yValue === null || prevDataPoint.yValue === null) {
299
+ // display "No data" when either of the datapoints is missing
300
+ delta = intl.lineChartMessages.noData;
301
+ }
302
+ else if (dataPoint.yValue == prevDataPoint.yValue) {
303
+ // display "0%" if datapoints are equal
304
+ delta = "0%";
305
+ }
306
+ else if (prevDataPoint.yValue == 0) {
307
+ // display "-" for % increase if prev data point is 0, as the technical number would be infinity
308
+ delta = "-";
309
+ }
310
+ else {
311
+ const changePercent = ((dataPoint.yValue - prevDataPoint.yValue) / prevDataPoint.yValue) * 100;
312
+ const roundedPercent = Math.round(changePercent * 100) / 100;
313
+ delta = `${roundedPercent > 0 ? "+" : ""}${roundedPercent}%`;
314
+ }
315
+ return delta;
316
+ }
317
+ renderLegend() {
318
+ const lineLabels = Object.keys(this.parsedLineData);
319
+ return (index.h("div", { ref: (el) => (this.legendEl = el), class: "legend" }, lineLabels.map((lineLabel, lineIdx) => {
320
+ const isHidden = this.hiddenLines.includes(lineIdx);
321
+ const isFaded = this.focusedLine !== -1 && this.focusedLine !== lineIdx;
322
+ return (index.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)));
323
+ })));
324
+ }
325
+ renderVisibilityToggle(lineLabel, lineIdx, isHidden) {
326
+ return (index.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 ? intl.globalMessages.show : intl.globalMessages.hide} ${lineLabel} toggle ${isHidden ? "pressed" : ""}`, "button-type": "navigational", tooltip: isHidden ? intl.globalMessages.show : intl.globalMessages.hide, tooltipPosition: "bottom", icon: isHidden ? "f209" : "f208", onClick: () => this.toggleLineVisibility(lineIdx), onKeyDown: (ev) => this.handleVisibilityToggleKeydown(ev, lineIdx), onFocus: () => (this.popoverIndex = -1) }));
327
+ }
328
+ renderIcon(lineIdx) {
358
329
  const { color, icon } = this.lineStyles[lineIdx];
359
- const firstPointTabIndex = lineIdx === 0 && pointIdx === 0 ? 0 : undefined;
360
330
  const iconStyle = {
361
- "--icon": `"\\${icon}"`,
362
- "--iconColor": color,
363
- "--xPosition": xPositionPercent + "%",
364
- "--yPosition": yPositionPercent + "%",
365
- "--translation": lineIdx === 5 ? "translate(-50%, -50%) rotate(180deg)" : "translate(-50%, -50%)",
331
+ "--iconColor": color,
332
+ "--icon": `"\\${icon}"`,
333
+ "--translation": lineIdx === 5 ? "rotate(180deg)" : "unset",
366
334
  };
367
- let ariaLabel = `${lineLabel} ${highlighted ? this.highlightQualifier : ""} ${this.xAxisLabel} ${xValue + (this.parsedUnits[0] ? this.parsedUnits[0] : "")}, ${this.yAxisLabel}: ${yValue + (this.parsedUnits[1] ? this.parsedUnits[1] : "")}`;
368
- if (this.showDeltas && pointIdx > 0) {
369
- const prevDataPoint = lineDataPoints[pointIdx - 1];
370
- const changeSinceMessage = intl.lineChartMessages.getChangeSince(prevDataPoint.xValue);
371
- ariaLabel += `, ${changeSinceMessage} ${this.calcDelta(dataPoint, prevDataPoint)}`;
335
+ return index.h("span", { class: "icon", style: iconStyle });
336
+ }
337
+ renderXIntervals() {
338
+ const gridStyle = {
339
+ "--columns": `.5fr repeat(${this.xIntervals.length - 2}, 1fr) .5fr`,
340
+ };
341
+ return (index.h("div", { class: "x-intervals", style: gridStyle }, this.xIntervals.map((interval) => (index.h("span", { class: `x-interval ${this.displayedXIntervals.includes(interval) ? "" : "hidden"}` }, interval)))));
342
+ }
343
+ renderYIntervals() {
344
+ return (index.h("div", { ref: (el) => (this.yIntervalsEl = el), class: "y-intervals" }, this.yIntervals.map((yInterval) => (index.h("span", { class: "y-interval" }, chartFunctions.abbrNumber(yInterval))))));
345
+ }
346
+ renderData() {
347
+ return this.dataPointMatrix.map((_, lineIdx) => {
348
+ let focusState = this.focusedLine === lineIdx ? "focused" : "faded";
349
+ const isHidden = this.hiddenLines.includes(lineIdx);
350
+ return (index.h("div", { class: `line ${this.focusedLine !== -1 ? focusState : ""} ${isHidden ? "hidden" : ""}` }, this.renderLines(lineIdx), this.renderPoints(lineIdx)));
351
+ });
352
+ }
353
+ renderPoints(lineIdx) {
354
+ const lineDataPoints = this.dataPointMatrix[lineIdx];
355
+ return (index.h("div", { class: "line-icons" }, lineDataPoints.map((dataPoint, pointIdx) => {
356
+ const { lineLabel, xValue, yValue, xPositionPercent, yPositionPercent, highlighted } = dataPoint;
357
+ if (yValue !== null) {
358
+ const { color, icon } = this.lineStyles[lineIdx];
359
+ const firstPointTabIndex = lineIdx === 0 && pointIdx === 0 ? 0 : undefined;
360
+ const iconStyle = {
361
+ "--icon": `"\\${icon}"`,
362
+ "--iconColor": color,
363
+ "--xPosition": xPositionPercent + "%",
364
+ "--yPosition": yPositionPercent + "%",
365
+ "--translation": lineIdx === 5 ? "translate(-50%, -50%) rotate(180deg)" : "translate(-50%, -50%)",
366
+ };
367
+ let ariaLabel = `${lineLabel} ${highlighted ? this.highlightQualifier : ""} ${this.xAxisLabel} ${xValue + (this.parsedUnits[0] ? this.parsedUnits[0] : "")}, ${this.yAxisLabel}: ${yValue + (this.parsedUnits[1] ? this.parsedUnits[1] : "")}`;
368
+ if (this.showDeltas && pointIdx > 0) {
369
+ const prevDataPoint = lineDataPoints[pointIdx - 1];
370
+ const changeSinceMessage = intl.lineChartMessages.getChangeSince(prevDataPoint.xValue);
371
+ ariaLabel += `, ${changeSinceMessage} ${this.calcDelta(dataPoint, prevDataPoint)}`;
372
+ }
373
+ return (index.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) }));
374
+ }
375
+ })));
376
+ }
377
+ renderLines(lineIdx) {
378
+ const lineDataPoints = this.dataPointMatrix[lineIdx];
379
+ return (index.h("svg", { class: "line-svg" }, lineDataPoints.map((dataPoint, pointIdx) => {
380
+ const shouldDraw = dataPoint.yValue !== null &&
381
+ pointIdx !== lineDataPoints.length - 1 &&
382
+ lineDataPoints[pointIdx + 1].yValue !== null;
383
+ if (shouldDraw) {
384
+ const { color } = this.lineStyles[lineIdx];
385
+ const { xPositionPercent: xStart, yPositionPercent: yStart } = dataPoint;
386
+ const { xPositionPercent: xEnd, yPositionPercent: yEnd } = lineDataPoints[pointIdx + 1];
387
+ return (index.h("line", { x1: xStart + "%", y1: yStart + "%", x2: xEnd + "%", y2: yEnd + "%", stroke: color, "stroke-width": "2px" }));
388
+ }
389
+ })));
390
+ }
391
+ renderHoverAreas() {
392
+ const hoverAreaStyle = { "--columns": `.5fr repeat(${this.xIntervals.length - 2}, 1fr) .5fr` };
393
+ return (index.h("div", { class: "hover-area-wrapper", style: hoverAreaStyle, onMouseLeave: () => (this.popoverIndex = -1) }, this.xIntervals.map((_, idx) => (index.h("div", { onMouseEnter: () => (this.popoverIndex = idx) })))));
394
+ }
395
+ renderPopover() {
396
+ const hasPopoverData = this.popoverData &&
397
+ this.popoverData[this.popoverIndex] &&
398
+ this.plotAreaEl.querySelector(`.point[data-xvalue="${this.dataPointMatrix[0][this.popoverIndex].xValue}"]`);
399
+ if (!hasPopoverData) {
400
+ return "";
372
401
  }
373
- return (index.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) }));
374
- }
375
- })));
376
- }
377
- renderLines(lineIdx) {
378
- const lineDataPoints = this.dataPointMatrix[lineIdx];
379
- return (index.h("svg", { class: "line-svg" }, lineDataPoints.map((dataPoint, pointIdx) => {
380
- const shouldDraw = dataPoint.yValue !== null &&
381
- pointIdx !== lineDataPoints.length - 1 &&
382
- lineDataPoints[pointIdx + 1].yValue !== null;
383
- if (shouldDraw) {
384
- const { color } = this.lineStyles[lineIdx];
385
- const { xPositionPercent: xStart, yPositionPercent: yStart } = dataPoint;
386
- const { xPositionPercent: xEnd, yPositionPercent: yEnd } = lineDataPoints[pointIdx + 1];
387
- return (index.h("line", { x1: xStart + "%", y1: yStart + "%", x2: xEnd + "%", y2: yEnd + "%", stroke: color, "stroke-width": "2px" }));
388
- }
389
- })));
390
- }
391
- renderHoverAreas() {
392
- const hoverAreaStyle = { "--columns": `.5fr repeat(${this.xIntervals.length - 2}, 1fr) .5fr` };
393
- return (index.h("div", { class: "hover-area-wrapper", style: hoverAreaStyle, onMouseLeave: () => (this.popoverIndex = -1) }, this.xIntervals.map((_, idx) => (index.h("div", { onMouseEnter: () => (this.popoverIndex = idx) })))));
394
- }
395
- renderPopover() {
396
- const hasPopoverData = this.popoverData &&
397
- this.popoverData[this.popoverIndex] &&
398
- this.plotAreaEl.querySelector(`.point[data-xvalue="${this.dataPointMatrix[0][this.popoverIndex].xValue}"]`);
399
- if (!hasPopoverData) {
400
- return "";
401
- }
402
- const displayedPopoverData = this.popoverData[this.popoverIndex];
403
- const xPosition = displayedPopoverData[0].xPositionPercent;
404
- const yPositions = displayedPopoverData
405
- .map((point) => point.yPositionPercent)
406
- .filter((yPosition) => yPosition !== null);
407
- const averageYPosition = yPositions.reduce((acc, cur) => acc + cur, 0) / yPositions.length;
408
- const referencePointEl = this.plotAreaEl.querySelector(`.point[data-xvalue="${this.dataPointMatrix[0][this.popoverIndex].xValue}"]`);
409
- const componentBoundingClientRect = this.el.getBoundingClientRect();
410
- const referencePointBoundingClientRect = referencePointEl.getBoundingClientRect();
411
- const rightSpaceAvailable = componentBoundingClientRect.right - referencePointBoundingClientRect.right;
412
- const leftSpaceAvailable = referencePointBoundingClientRect.left - componentBoundingClientRect.left;
413
- const hasRoomRight = rightSpaceAvailable >= (this.popoverEl ? Math.min(this.popoverEl.clientWidth, 400) : 400);
414
- const hasRoomLeft = leftSpaceAvailable >= (this.popoverEl ? Math.min(this.popoverEl.clientWidth, 400) : 400);
415
- const percentMargin = (8 / this.plotAreaEl.clientWidth) * 100;
416
- let popoverStyle = {
417
- "--leftPosition": hasRoomRight ? xPosition + percentMargin + "%" : "unset",
418
- "--rightPosition": hasRoomLeft ? 100 - xPosition + percentMargin + "%" : "unset",
419
- "--topPosition": averageYPosition + "%",
420
- transform: "translateY(-50%)", // vertically center for averageYPosition
421
- };
422
- if (!hasRoomLeft && !hasRoomRight) {
423
- // if there's not enough room to the left and right, position "detached" from the data points towards the top of the chart
424
- const displaceLeft = `0px - ${this.labelWidth} - 20px - ${this.yIntervalsEl.clientWidth + "px"} + ${this.el.scrollLeft + "px"} + 2px`;
425
- popoverStyle = {
426
- "--leftPosition": `0%`,
427
- "--topPosition": "0%",
428
- maxWidth: Math.min(this.el.clientWidth - 2, 400) + "px",
429
- transform: `translateX(calc(${displaceLeft}))`, // align with left edge of component
430
- };
431
- }
432
- return (index.h("div", { ref: (el) => (this.popoverEl = el), class: "popover", style: popoverStyle }, index.h("div", { class: "title" }, displayedPopoverData[0].xValue, this.parsedUnits[0] && index.h("span", { class: "unit --x" }, "(", this.parsedUnits[0], ")")), this.showDeltas && this.popoverIndex > 0 && (index.h("div", { class: "comparison-title" }, intl.lineChartMessages.getChangeSince(this.popoverData[this.popoverIndex - 1][0].xValue))), this.renderPopoverTable()));
433
- }
434
- renderPopoverTable() {
435
- const displayedPopoverData = this.popoverData[this.popoverIndex];
436
- return (index.h("table", { class: "popover-table" }, displayedPopoverData.map((dataPoint, lineIdx) => {
437
- if (!this.hiddenLines.includes(lineIdx)) {
438
- const { lineLabel, yValue } = dataPoint;
439
- const prevDataPoint = this.popoverIndex > 0 ? this.popoverData[this.popoverIndex - 1][lineIdx] : null;
440
- const localizedYValue = yValue !== null ? new Intl.NumberFormat().format(yValue) : null;
441
- return (index.h("tr", { class: "popover-row" }, index.h("td", null, this.renderIcon(lineIdx)), index.h("td", { class: "row-label" }, lineLabel), index.h("td", { class: "row-value" }, yValue === null ? intl.lineChartMessages.noData : localizedYValue, yValue !== null && this.parsedUnits[1] && index.h("span", { class: "unit --y" }, this.parsedUnits[1])), this.showDeltas && prevDataPoint && this.renderDeltas(dataPoint, prevDataPoint)));
442
- }
443
- })));
444
- }
445
- renderDeltas(dataPoint, prevDataPoint) {
446
- const delta = this.calcDelta(dataPoint, prevDataPoint);
447
- const deltaColor = delta.toString()[0] == "+" || delta == "-" ? "positive" : delta.toString()[0] == "-" ? "negative" : "";
448
- return prevDataPoint && index.h("td", { class: `delta --${deltaColor}` }, delta);
449
- }
450
- renderHoverIndicator() {
451
- const hasIndicatorData = this.dataPointMatrix.length > 0 && this.dataPointMatrix[0][this.popoverIndex];
452
- if (!hasIndicatorData) {
453
- return "";
454
- }
455
- const xPosition = this.dataPointMatrix[0][this.popoverIndex].xPositionPercent;
456
- const indicatorStyle = { "--xPosition": xPosition + "%" };
457
- return index.h("div", { class: "hover-indicator", style: indicatorStyle });
458
- }
459
- renderHighlight() {
460
- const startPercentage = this.dataPointMatrix[0][this.xIntervals.indexOf(this.highlightStart)].xPositionPercent;
461
- const endPercentage = this.highlightEnd
462
- ? 100 - this.dataPointMatrix[0][this.xIntervals.indexOf(this.highlightEnd)].xPositionPercent
463
- : 0;
464
- const highlightStyle = { "--startPercentage": startPercentage + "%", "--endPercentage": endPercentage + "%" };
465
- return index.h("div", { class: "highlight", style: highlightStyle });
466
- }
467
- render() {
468
- return (index.h(index.Host, { onBlur: () => this.resetDataPointFocus(), onMouseLeave: () => (this.popoverIndex = -1) }, index.h("div", { class: "component-wrapper", role: "application", "aria-roledescription": intl.chartMessages.interactiveChart, "aria-label": this.label, "aria-describedby": "chart-description" }, this.renderLegend(), index.h("div", { class: "chart-wrapper" }, index.h("div", { class: "chart-label --y-axis", style: { "--labelWidth": this.labelWidth } }, this.yAxisLabel, this.parsedUnits[1] && ` (${this.parsedUnits[1]})`), this.renderYIntervals(), index.h("div", { ref: (el) => (this.plotAreaEl = el), class: `plot-area ${this.hasPartialInterval ? "" : "right-border"}`, style: {
469
- "--backgroundSize": `${this.dataPointMatrix[0][this.xIntervals.indexOf(this.displayedXIntervals[1])].xPositionPercent}%`,
470
- } }, this.highlightStart && this.renderHighlight(), this.renderData(), this.renderHoverAreas()), this.popoverIndex !== -1 && this.renderHoverIndicator(), this.popoverIndex !== -1 && this.renderPopover(), this.renderXIntervals(), index.h("div", { class: "chart-label --x-axis" }, this.xAxisLabel, this.parsedUnits[0] && ` (${this.parsedUnits[0]})`)), index.h("div", { id: "chart-description", class: "sr-only" }, `${intl.lineChartMessages.instructions} ${this.description}`), index.h("div", { ref: (el) => (this.liveRegionEl = el), "aria-live": "polite", class: "sr-only" }, this.announcement))));
471
- }
472
- get el() { return index.getElement(this); }
473
- static get watchers() { return {
474
- "lineData": ["parseData"],
475
- "intervalSkip": ["handleIntervalSkip"]
476
- }; }
402
+ const displayedPopoverData = this.popoverData[this.popoverIndex];
403
+ const xPosition = displayedPopoverData[0].xPositionPercent;
404
+ const yPositions = displayedPopoverData
405
+ .map((point) => point.yPositionPercent)
406
+ .filter((yPosition) => yPosition !== null);
407
+ const averageYPosition = yPositions.reduce((acc, cur) => acc + cur, 0) / yPositions.length;
408
+ const referencePointEl = this.plotAreaEl.querySelector(`.point[data-xvalue="${this.dataPointMatrix[0][this.popoverIndex].xValue}"]`);
409
+ const componentBoundingClientRect = this.el.getBoundingClientRect();
410
+ const referencePointBoundingClientRect = referencePointEl.getBoundingClientRect();
411
+ const rightSpaceAvailable = componentBoundingClientRect.right - referencePointBoundingClientRect.right;
412
+ const leftSpaceAvailable = referencePointBoundingClientRect.left - componentBoundingClientRect.left;
413
+ const hasRoomRight = rightSpaceAvailable >= (this.popoverEl ? Math.min(this.popoverEl.clientWidth, 400) : 400);
414
+ const hasRoomLeft = leftSpaceAvailable >= (this.popoverEl ? Math.min(this.popoverEl.clientWidth, 400) : 400);
415
+ const percentMargin = (8 / this.plotAreaEl.clientWidth) * 100;
416
+ let popoverStyle = {
417
+ "--leftPosition": hasRoomRight ? xPosition + percentMargin + "%" : "unset",
418
+ "--rightPosition": hasRoomLeft ? 100 - xPosition + percentMargin + "%" : "unset",
419
+ "--topPosition": averageYPosition + "%",
420
+ transform: "translateY(-50%)", // vertically center for averageYPosition
421
+ };
422
+ if (!hasRoomLeft && !hasRoomRight) {
423
+ // if there's not enough room to the left and right, position "detached" from the data points towards the top of the chart
424
+ const displaceLeft = `0px - ${this.labelWidth} - 20px - ${this.yIntervalsEl.clientWidth + "px"} + ${this.el.scrollLeft + "px"} + 2px`;
425
+ popoverStyle = {
426
+ "--leftPosition": `0%`,
427
+ "--topPosition": "0%",
428
+ maxWidth: Math.min(this.el.clientWidth - 2, 400) + "px",
429
+ transform: `translateX(calc(${displaceLeft}))`, // align with left edge of component
430
+ };
431
+ }
432
+ return (index.h("div", { ref: (el) => (this.popoverEl = el), class: "popover", style: popoverStyle }, index.h("div", { class: "title" }, displayedPopoverData[0].xValue, this.parsedUnits[0] && index.h("span", { class: "unit --x" }, "(", this.parsedUnits[0], ")")), this.showDeltas && this.popoverIndex > 0 && (index.h("div", { class: "comparison-title" }, intl.lineChartMessages.getChangeSince(this.popoverData[this.popoverIndex - 1][0].xValue))), this.renderPopoverTable()));
433
+ }
434
+ renderPopoverTable() {
435
+ const displayedPopoverData = this.popoverData[this.popoverIndex];
436
+ return (index.h("table", { class: "popover-table" }, displayedPopoverData.map((dataPoint, lineIdx) => {
437
+ if (!this.hiddenLines.includes(lineIdx)) {
438
+ const { lineLabel, yValue } = dataPoint;
439
+ const prevDataPoint = this.popoverIndex > 0 ? this.popoverData[this.popoverIndex - 1][lineIdx] : null;
440
+ const localizedYValue = yValue !== null ? new Intl.NumberFormat().format(yValue) : null;
441
+ return (index.h("tr", { class: "popover-row" }, index.h("td", null, this.renderIcon(lineIdx)), index.h("td", { class: "row-label" }, lineLabel), index.h("td", { class: "row-value" }, yValue === null ? intl.lineChartMessages.noData : localizedYValue, yValue !== null && this.parsedUnits[1] && index.h("span", { class: "unit --y" }, this.parsedUnits[1])), this.showDeltas && prevDataPoint && this.renderDeltas(dataPoint, prevDataPoint)));
442
+ }
443
+ })));
444
+ }
445
+ renderDeltas(dataPoint, prevDataPoint) {
446
+ const delta = this.calcDelta(dataPoint, prevDataPoint);
447
+ const deltaColor = delta.toString()[0] == "+" || delta == "-" ? "positive" : delta.toString()[0] == "-" ? "negative" : "";
448
+ return prevDataPoint && index.h("td", { class: `delta --${deltaColor}` }, delta);
449
+ }
450
+ renderHoverIndicator() {
451
+ const hasIndicatorData = this.dataPointMatrix.length > 0 && this.dataPointMatrix[0][this.popoverIndex];
452
+ if (!hasIndicatorData) {
453
+ return "";
454
+ }
455
+ const xPosition = this.dataPointMatrix[0][this.popoverIndex].xPositionPercent;
456
+ const indicatorStyle = { "--xPosition": xPosition + "%" };
457
+ return index.h("div", { class: "hover-indicator", style: indicatorStyle });
458
+ }
459
+ renderHighlight() {
460
+ const startPercentage = this.dataPointMatrix[0][this.xIntervals.indexOf(this.highlightStart)].xPositionPercent;
461
+ const endPercentage = this.highlightEnd
462
+ ? 100 - this.dataPointMatrix[0][this.xIntervals.indexOf(this.highlightEnd)].xPositionPercent
463
+ : 0;
464
+ const highlightStyle = { "--startPercentage": startPercentage + "%", "--endPercentage": endPercentage + "%" };
465
+ return index.h("div", { class: "highlight", style: highlightStyle });
466
+ }
467
+ render() {
468
+ return (index.h(index.Host, { onBlur: () => this.resetDataPointFocus(), onMouseLeave: () => (this.popoverIndex = -1) }, index.h("div", { class: "component-wrapper", role: "application", "aria-roledescription": intl.chartMessages.interactiveChart, "aria-label": this.label, "aria-describedby": "chart-description" }, this.renderLegend(), index.h("div", { class: "chart-wrapper" }, index.h("div", { class: "chart-label --y-axis", style: { "--labelWidth": this.labelWidth } }, this.yAxisLabel, this.parsedUnits[1] && ` (${this.parsedUnits[1]})`), this.renderYIntervals(), index.h("div", { ref: (el) => (this.plotAreaEl = el), class: `plot-area ${this.hasPartialInterval ? "" : "right-border"}`, style: {
469
+ "--backgroundSize": `${this.dataPointMatrix[0][this.xIntervals.indexOf(this.displayedXIntervals[1])].xPositionPercent}%`,
470
+ } }, this.highlightStart && this.renderHighlight(), this.renderData(), this.renderHoverAreas()), this.popoverIndex !== -1 && this.renderHoverIndicator(), this.popoverIndex !== -1 && this.renderPopover(), this.renderXIntervals(), index.h("div", { class: "chart-label --x-axis" }, this.xAxisLabel, this.parsedUnits[0] && ` (${this.parsedUnits[0]})`)), index.h("div", { id: "chart-description", class: "sr-only" }, `${intl.lineChartMessages.instructions} ${this.description}`), index.h("div", { ref: (el) => (this.liveRegionEl = el), "aria-live": "polite", class: "sr-only" }, this.announcement))));
471
+ }
472
+ get el() { return index.getElement(this); }
473
+ static get watchers() { return {
474
+ "lineData": ["parseData"],
475
+ "intervalSkip": ["handleIntervalSkip"]
476
+ }; }
477
477
  };
478
478
  LineChart.style = wmLineChartCss;
479
479