@watermarkinsights/ripple 3.24.0 → 3.24.1

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 (554) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/{chartFunctions-5309f8ed.js → chartFunctions-da36e4cb.js} +591 -586
  3. package/dist/cjs/chartFunctions-da36e4cb.js.map +1 -0
  4. package/dist/cjs/{functions-6d2a5824.js → functions-9ddaeb33.js} +468 -468
  5. package/dist/cjs/{functions-6d2a5824.js.map → functions-9ddaeb33.js.map} +1 -1
  6. package/dist/cjs/{global-d20d5267.js → global-a563c2d1.js} +63 -63
  7. package/dist/cjs/global-a563c2d1.js.map +1 -0
  8. package/dist/cjs/{http-service-9e8c4dd5.js → http-service-494d81de.js} +50 -50
  9. package/dist/cjs/http-service-494d81de.js.map +1 -0
  10. package/dist/cjs/{interfaces-30a74c1f.js → interfaces-a3338581.js} +30 -30
  11. package/dist/cjs/interfaces-a3338581.js.map +1 -0
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/cjs/priv-chart-popover.cjs.entry.js +91 -91
  14. package/dist/cjs/priv-chart-popover.cjs.entry.js.map +1 -1
  15. package/dist/cjs/priv-datepicker.cjs.entry.js +657 -657
  16. package/dist/cjs/priv-datepicker.cjs.entry.js.map +1 -1
  17. package/dist/cjs/priv-navigator-button.cjs.entry.js +19 -19
  18. package/dist/cjs/priv-navigator-button.cjs.entry.js.map +1 -1
  19. package/dist/cjs/priv-navigator-item.cjs.entry.js +23 -23
  20. package/dist/cjs/priv-navigator-item.cjs.entry.js.map +1 -1
  21. package/dist/cjs/ripple.cjs.js +1 -1
  22. package/dist/cjs/wm-action-menu_2.cjs.entry.js +334 -334
  23. package/dist/cjs/wm-action-menu_2.cjs.entry.js.map +1 -1
  24. package/dist/cjs/wm-button.cjs.entry.js +260 -260
  25. package/dist/cjs/wm-button.cjs.entry.js.map +1 -1
  26. package/dist/cjs/wm-chart-slice.cjs.entry.js +18 -18
  27. package/dist/cjs/wm-chart-slice.cjs.entry.js.map +1 -1
  28. package/dist/cjs/wm-chart.cjs.entry.js +179 -179
  29. package/dist/cjs/wm-chart.cjs.entry.js.map +1 -1
  30. package/dist/cjs/wm-datepicker.cjs.entry.js +263 -263
  31. package/dist/cjs/wm-datepicker.cjs.entry.js.map +1 -1
  32. package/dist/cjs/wm-file-list.cjs.entry.js +35 -35
  33. package/dist/cjs/wm-file-list.cjs.entry.js.map +1 -1
  34. package/dist/cjs/wm-file.cjs.entry.js +201 -201
  35. package/dist/cjs/wm-file.cjs.entry.js.map +1 -1
  36. package/dist/cjs/wm-input.cjs.entry.js +139 -139
  37. package/dist/cjs/wm-input.cjs.entry.js.map +1 -1
  38. package/dist/cjs/wm-modal-footer.cjs.entry.js +33 -33
  39. package/dist/cjs/wm-modal-footer.cjs.entry.js.map +1 -1
  40. package/dist/cjs/wm-modal-header.cjs.entry.js +36 -36
  41. package/dist/cjs/wm-modal-header.cjs.entry.js.map +1 -1
  42. package/dist/cjs/wm-modal.cjs.entry.js +152 -152
  43. package/dist/cjs/wm-modal.cjs.entry.js.map +1 -1
  44. package/dist/cjs/wm-navigation_3.cjs.entry.js +234 -234
  45. package/dist/cjs/wm-navigation_3.cjs.entry.js.map +1 -1
  46. package/dist/cjs/wm-navigator.cjs.entry.js +264 -264
  47. package/dist/cjs/wm-navigator.cjs.entry.js.map +1 -1
  48. package/dist/cjs/wm-network-uploader.cjs.entry.js +467 -467
  49. package/dist/cjs/wm-network-uploader.cjs.entry.js.map +1 -1
  50. package/dist/cjs/wm-option_2.cjs.entry.js +771 -771
  51. package/dist/cjs/wm-option_2.cjs.entry.js.map +1 -1
  52. package/dist/cjs/wm-pagination.cjs.entry.js +179 -179
  53. package/dist/cjs/wm-pagination.cjs.entry.js.map +1 -1
  54. package/dist/cjs/wm-progress-indicator_3.cjs.entry.js +155 -155
  55. package/dist/cjs/wm-progress-indicator_3.cjs.entry.js.map +1 -1
  56. package/dist/cjs/wm-search.cjs.entry.js +191 -191
  57. package/dist/cjs/wm-search.cjs.entry.js.map +1 -1
  58. package/dist/cjs/wm-snackbar.cjs.entry.js +169 -169
  59. package/dist/cjs/wm-snackbar.cjs.entry.js.map +1 -1
  60. package/dist/cjs/wm-tab-item_3.cjs.entry.js +264 -264
  61. package/dist/cjs/wm-tab-item_3.cjs.entry.js.map +1 -1
  62. package/dist/cjs/wm-tag-input-row.cjs.entry.js +14 -14
  63. package/dist/cjs/wm-tag-input-row.cjs.entry.js.map +1 -1
  64. package/dist/cjs/wm-tag-input.cjs.entry.js +908 -908
  65. package/dist/cjs/wm-tag-input.cjs.entry.js.map +1 -1
  66. package/dist/cjs/wm-timepicker.cjs.entry.js +385 -385
  67. package/dist/cjs/wm-timepicker.cjs.entry.js.map +1 -1
  68. package/dist/cjs/wm-toggletip.cjs.entry.js +130 -130
  69. package/dist/cjs/wm-toggletip.cjs.entry.js.map +1 -1
  70. package/dist/cjs/wm-uploader.cjs.entry.js +510 -510
  71. package/dist/cjs/wm-uploader.cjs.entry.js.map +1 -1
  72. package/dist/cjs/wm-wrapper.cjs.entry.js +12 -12
  73. package/dist/cjs/wm-wrapper.cjs.entry.js.map +1 -1
  74. package/dist/collection/components/charts/chartFunctions.js +557 -552
  75. package/dist/collection/components/charts/chartFunctions.js.map +1 -1
  76. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js +268 -268
  77. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js.map +1 -1
  78. package/dist/collection/components/charts/wm-chart/wm-chart-slice.js +126 -126
  79. package/dist/collection/components/charts/wm-chart/wm-chart-slice.js.map +1 -1
  80. package/dist/collection/components/charts/wm-chart/wm-chart.js +447 -447
  81. package/dist/collection/components/charts/wm-chart/wm-chart.js.map +1 -1
  82. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js +208 -208
  83. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js.map +1 -1
  84. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js +144 -144
  85. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js.map +1 -1
  86. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-slice.js +122 -122
  87. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-slice.js.map +1 -1
  88. package/dist/collection/components/wm-action-menu/wm-action-menu.js +473 -473
  89. package/dist/collection/components/wm-action-menu/wm-action-menu.js.map +1 -1
  90. package/dist/collection/components/wm-button/wm-button.js +576 -576
  91. package/dist/collection/components/wm-button/wm-button.js.map +1 -1
  92. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js +984 -984
  93. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js.map +1 -1
  94. package/dist/collection/components/wm-datepicker/wm-datepicker.js +492 -492
  95. package/dist/collection/components/wm-datepicker/wm-datepicker.js.map +1 -1
  96. package/dist/collection/components/wm-file/wm-file.js +334 -334
  97. package/dist/collection/components/wm-file/wm-file.js.map +1 -1
  98. package/dist/collection/components/wm-file-list/wm-file-list.js +153 -153
  99. package/dist/collection/components/wm-file-list/wm-file-list.js.map +1 -1
  100. package/dist/collection/components/wm-input/wm-input.js +444 -444
  101. package/dist/collection/components/wm-input/wm-input.js.map +1 -1
  102. package/dist/collection/components/wm-menuitem/wm-menuitem.js +455 -455
  103. package/dist/collection/components/wm-menuitem/wm-menuitem.js.map +1 -1
  104. package/dist/collection/components/wm-modal/wm-modal-footer.js +139 -139
  105. package/dist/collection/components/wm-modal/wm-modal-footer.js.map +1 -1
  106. package/dist/collection/components/wm-modal/wm-modal-header.js +88 -88
  107. package/dist/collection/components/wm-modal/wm-modal-header.js.map +1 -1
  108. package/dist/collection/components/wm-modal/wm-modal.js +463 -463
  109. package/dist/collection/components/wm-modal/wm-modal.js.map +1 -1
  110. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +177 -177
  111. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js.map +1 -1
  112. package/dist/collection/components/wm-navigation/wm-navigation-item.js +131 -131
  113. package/dist/collection/components/wm-navigation/wm-navigation-item.js.map +1 -1
  114. package/dist/collection/components/wm-navigation/wm-navigation.js +227 -227
  115. package/dist/collection/components/wm-navigation/wm-navigation.js.map +1 -1
  116. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +107 -107
  117. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js.map +1 -1
  118. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +124 -124
  119. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js.map +1 -1
  120. package/dist/collection/components/wm-navigator/wm-navigator.js +468 -468
  121. package/dist/collection/components/wm-navigator/wm-navigator.js.map +1 -1
  122. package/dist/collection/components/wm-option/wm-option.js +436 -436
  123. package/dist/collection/components/wm-option/wm-option.js.map +1 -1
  124. package/dist/collection/components/wm-pagination/wm-pagination.js +371 -371
  125. package/dist/collection/components/wm-pagination/wm-pagination.js.map +1 -1
  126. package/dist/collection/components/wm-search/wm-search.js +447 -447
  127. package/dist/collection/components/wm-search/wm-search.js.map +1 -1
  128. package/dist/collection/components/wm-select/wm-select.js +1058 -1058
  129. package/dist/collection/components/wm-select/wm-select.js.map +1 -1
  130. package/dist/collection/components/wm-snackbar/wm-snackbar.js +297 -297
  131. package/dist/collection/components/wm-snackbar/wm-snackbar.js.map +1 -1
  132. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +212 -212
  133. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js.map +1 -1
  134. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +328 -328
  135. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js.map +1 -1
  136. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +109 -109
  137. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js.map +1 -1
  138. package/dist/collection/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.js +123 -123
  139. package/dist/collection/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.js.map +1 -1
  140. package/dist/collection/components/wm-tag-input/wm-tag-input.js +1209 -1209
  141. package/dist/collection/components/wm-tag-input/wm-tag-input.js.map +1 -1
  142. package/dist/collection/components/wm-timepicker/wm-timepicker.js +606 -606
  143. package/dist/collection/components/wm-timepicker/wm-timepicker.js.map +1 -1
  144. package/dist/collection/components/wm-toggletip/wm-toggletip.js +254 -254
  145. package/dist/collection/components/wm-toggletip/wm-toggletip.js.map +1 -1
  146. package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js +775 -775
  147. package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js.map +1 -1
  148. package/dist/collection/components/wm-uploader/wm-uploader.js +1034 -1034
  149. package/dist/collection/components/wm-uploader/wm-uploader.js.map +1 -1
  150. package/dist/collection/components/wm-wrapper/wm-wrapper.js +29 -29
  151. package/dist/collection/components/wm-wrapper/wm-wrapper.js.map +1 -1
  152. package/dist/collection/dev/scripts.js +20 -20
  153. package/dist/collection/global/__mocks__/functions.js +7 -7
  154. package/dist/collection/global/__mocks__/functions.js.map +1 -1
  155. package/dist/collection/global/functions.js +511 -511
  156. package/dist/collection/global/functions.js.map +1 -1
  157. package/dist/collection/global/global.js +70 -70
  158. package/dist/collection/global/global.js.map +1 -1
  159. package/dist/collection/global/interfaces.js +50 -50
  160. package/dist/collection/global/interfaces.js.map +1 -1
  161. package/dist/collection/global/services/__mocks__/http-service.js +131 -131
  162. package/dist/collection/global/services/__mocks__/http-service.js.map +1 -1
  163. package/dist/collection/global/services/http-service.js +51 -51
  164. package/dist/collection/global/services/http-service.js.map +1 -1
  165. package/dist/collection/lang/lang.js +6 -6
  166. package/dist/collection/lang/lang.js.map +1 -1
  167. package/dist/collection/lang/missing.js +43 -43
  168. package/dist/collection/lang/piglatin.js +93 -93
  169. package/dist/esm/{chartFunctions-e22110b8.js → chartFunctions-b0a9e440.js} +591 -586
  170. package/dist/esm/chartFunctions-b0a9e440.js.map +1 -0
  171. package/dist/esm/{functions-c58046f2.js → functions-1c41e984.js} +468 -468
  172. package/dist/esm/{functions-c58046f2.js.map → functions-1c41e984.js.map} +1 -1
  173. package/dist/esm/{global-fee3549b.js → global-65156bcf.js} +63 -63
  174. package/dist/esm/global-65156bcf.js.map +1 -0
  175. package/dist/esm/{http-service-5d037e16.js → http-service-3dc3b3e7.js} +50 -50
  176. package/dist/esm/http-service-3dc3b3e7.js.map +1 -0
  177. package/dist/esm/{interfaces-61c6305b.js → interfaces-2b97fab2.js} +30 -30
  178. package/dist/esm/interfaces-2b97fab2.js.map +1 -0
  179. package/dist/esm/loader.js +1 -1
  180. package/dist/esm/polyfills/core-js.js +0 -0
  181. package/dist/esm/polyfills/dom.js +0 -0
  182. package/dist/esm/polyfills/es5-html-element.js +0 -0
  183. package/dist/esm/polyfills/index.js +0 -0
  184. package/dist/esm/polyfills/system.js +0 -0
  185. package/dist/esm/priv-chart-popover.entry.js +91 -91
  186. package/dist/esm/priv-chart-popover.entry.js.map +1 -1
  187. package/dist/esm/priv-datepicker.entry.js +657 -657
  188. package/dist/esm/priv-datepicker.entry.js.map +1 -1
  189. package/dist/esm/priv-navigator-button.entry.js +19 -19
  190. package/dist/esm/priv-navigator-button.entry.js.map +1 -1
  191. package/dist/esm/priv-navigator-item.entry.js +23 -23
  192. package/dist/esm/priv-navigator-item.entry.js.map +1 -1
  193. package/dist/esm/ripple.js +1 -1
  194. package/dist/esm/wm-action-menu_2.entry.js +334 -334
  195. package/dist/esm/wm-action-menu_2.entry.js.map +1 -1
  196. package/dist/esm/wm-button.entry.js +260 -260
  197. package/dist/esm/wm-button.entry.js.map +1 -1
  198. package/dist/esm/wm-chart-slice.entry.js +18 -18
  199. package/dist/esm/wm-chart-slice.entry.js.map +1 -1
  200. package/dist/esm/wm-chart.entry.js +179 -179
  201. package/dist/esm/wm-chart.entry.js.map +1 -1
  202. package/dist/esm/wm-datepicker.entry.js +263 -263
  203. package/dist/esm/wm-datepicker.entry.js.map +1 -1
  204. package/dist/esm/wm-file-list.entry.js +35 -35
  205. package/dist/esm/wm-file-list.entry.js.map +1 -1
  206. package/dist/esm/wm-file.entry.js +201 -201
  207. package/dist/esm/wm-file.entry.js.map +1 -1
  208. package/dist/esm/wm-input.entry.js +139 -139
  209. package/dist/esm/wm-input.entry.js.map +1 -1
  210. package/dist/esm/wm-modal-footer.entry.js +33 -33
  211. package/dist/esm/wm-modal-footer.entry.js.map +1 -1
  212. package/dist/esm/wm-modal-header.entry.js +36 -36
  213. package/dist/esm/wm-modal-header.entry.js.map +1 -1
  214. package/dist/esm/wm-modal.entry.js +152 -152
  215. package/dist/esm/wm-modal.entry.js.map +1 -1
  216. package/dist/esm/wm-navigation_3.entry.js +234 -234
  217. package/dist/esm/wm-navigation_3.entry.js.map +1 -1
  218. package/dist/esm/wm-navigator.entry.js +264 -264
  219. package/dist/esm/wm-navigator.entry.js.map +1 -1
  220. package/dist/esm/wm-network-uploader.entry.js +467 -467
  221. package/dist/esm/wm-network-uploader.entry.js.map +1 -1
  222. package/dist/esm/wm-option_2.entry.js +771 -771
  223. package/dist/esm/wm-option_2.entry.js.map +1 -1
  224. package/dist/esm/wm-pagination.entry.js +179 -179
  225. package/dist/esm/wm-pagination.entry.js.map +1 -1
  226. package/dist/esm/wm-progress-indicator_3.entry.js +155 -155
  227. package/dist/esm/wm-progress-indicator_3.entry.js.map +1 -1
  228. package/dist/esm/wm-search.entry.js +191 -191
  229. package/dist/esm/wm-search.entry.js.map +1 -1
  230. package/dist/esm/wm-snackbar.entry.js +169 -169
  231. package/dist/esm/wm-snackbar.entry.js.map +1 -1
  232. package/dist/esm/wm-tab-item_3.entry.js +264 -264
  233. package/dist/esm/wm-tab-item_3.entry.js.map +1 -1
  234. package/dist/esm/wm-tag-input-row.entry.js +14 -14
  235. package/dist/esm/wm-tag-input-row.entry.js.map +1 -1
  236. package/dist/esm/wm-tag-input.entry.js +908 -908
  237. package/dist/esm/wm-tag-input.entry.js.map +1 -1
  238. package/dist/esm/wm-timepicker.entry.js +385 -385
  239. package/dist/esm/wm-timepicker.entry.js.map +1 -1
  240. package/dist/esm/wm-toggletip.entry.js +130 -130
  241. package/dist/esm/wm-toggletip.entry.js.map +1 -1
  242. package/dist/esm/wm-uploader.entry.js +510 -510
  243. package/dist/esm/wm-uploader.entry.js.map +1 -1
  244. package/dist/esm/wm-wrapper.entry.js +12 -12
  245. package/dist/esm/wm-wrapper.entry.js.map +1 -1
  246. package/dist/esm-es5/{chartFunctions-e22110b8.js → chartFunctions-b0a9e440.js} +2 -2
  247. package/dist/esm-es5/chartFunctions-b0a9e440.js.map +1 -0
  248. package/dist/esm-es5/{functions-c58046f2.js → functions-1c41e984.js} +1 -1
  249. package/dist/esm-es5/{functions-c58046f2.js.map → functions-1c41e984.js.map} +1 -1
  250. package/dist/esm-es5/{global-fee3549b.js → global-65156bcf.js} +2 -2
  251. package/dist/esm-es5/global-65156bcf.js.map +1 -0
  252. package/dist/esm-es5/{http-service-5d037e16.js → http-service-3dc3b3e7.js} +1 -1
  253. package/dist/esm-es5/http-service-3dc3b3e7.js.map +1 -0
  254. package/dist/esm-es5/{interfaces-61c6305b.js → interfaces-2b97fab2.js} +1 -1
  255. package/dist/esm-es5/interfaces-2b97fab2.js.map +1 -0
  256. package/dist/esm-es5/loader.js +1 -1
  257. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  258. package/dist/esm-es5/priv-chart-popover.entry.js.map +1 -1
  259. package/dist/esm-es5/priv-datepicker.entry.js +1 -1
  260. package/dist/esm-es5/priv-datepicker.entry.js.map +1 -1
  261. package/dist/esm-es5/priv-navigator-button.entry.js.map +1 -1
  262. package/dist/esm-es5/priv-navigator-item.entry.js.map +1 -1
  263. package/dist/esm-es5/ripple.js +1 -1
  264. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  265. package/dist/esm-es5/wm-action-menu_2.entry.js.map +1 -1
  266. package/dist/esm-es5/wm-button.entry.js +1 -1
  267. package/dist/esm-es5/wm-button.entry.js.map +1 -1
  268. package/dist/esm-es5/wm-chart-slice.entry.js.map +1 -1
  269. package/dist/esm-es5/wm-chart.entry.js +1 -1
  270. package/dist/esm-es5/wm-chart.entry.js.map +1 -1
  271. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  272. package/dist/esm-es5/wm-datepicker.entry.js.map +1 -1
  273. package/dist/esm-es5/wm-file-list.entry.js.map +1 -1
  274. package/dist/esm-es5/wm-file.entry.js +1 -1
  275. package/dist/esm-es5/wm-file.entry.js.map +1 -1
  276. package/dist/esm-es5/wm-input.entry.js +1 -1
  277. package/dist/esm-es5/wm-input.entry.js.map +1 -1
  278. package/dist/esm-es5/wm-modal-footer.entry.js.map +1 -1
  279. package/dist/esm-es5/wm-modal-header.entry.js +1 -1
  280. package/dist/esm-es5/wm-modal-header.entry.js.map +1 -1
  281. package/dist/esm-es5/wm-modal.entry.js +1 -1
  282. package/dist/esm-es5/wm-modal.entry.js.map +1 -1
  283. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  284. package/dist/esm-es5/wm-navigation_3.entry.js.map +1 -1
  285. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  286. package/dist/esm-es5/wm-navigator.entry.js.map +1 -1
  287. package/dist/esm-es5/wm-network-uploader.entry.js +1 -1
  288. package/dist/esm-es5/wm-network-uploader.entry.js.map +1 -1
  289. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  290. package/dist/esm-es5/wm-option_2.entry.js.map +1 -1
  291. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  292. package/dist/esm-es5/wm-pagination.entry.js.map +1 -1
  293. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  294. package/dist/esm-es5/wm-progress-indicator_3.entry.js.map +1 -1
  295. package/dist/esm-es5/wm-search.entry.js +1 -1
  296. package/dist/esm-es5/wm-search.entry.js.map +1 -1
  297. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  298. package/dist/esm-es5/wm-snackbar.entry.js.map +1 -1
  299. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  300. package/dist/esm-es5/wm-tab-item_3.entry.js.map +1 -1
  301. package/dist/esm-es5/wm-tag-input-row.entry.js.map +1 -1
  302. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  303. package/dist/esm-es5/wm-tag-input.entry.js.map +1 -1
  304. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  305. package/dist/esm-es5/wm-timepicker.entry.js.map +1 -1
  306. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  307. package/dist/esm-es5/wm-toggletip.entry.js.map +1 -1
  308. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  309. package/dist/esm-es5/wm-uploader.entry.js.map +1 -1
  310. package/dist/esm-es5/wm-wrapper.entry.js.map +1 -1
  311. package/dist/ripple/{p-8e6bd600.system.entry.js → p-010b2cac.system.entry.js} +2 -2
  312. package/dist/ripple/p-010b2cac.system.entry.js.map +1 -0
  313. package/dist/ripple/{p-b22ba3a2.system.js → p-08950379.system.js} +2 -2
  314. package/dist/ripple/{p-c25abcc5.system.js → p-0b21e936.system.js} +2 -2
  315. package/dist/ripple/p-0b21e936.system.js.map +1 -0
  316. package/dist/ripple/p-0d7bccf7.entry.js.map +1 -1
  317. package/dist/ripple/{p-98a9eb8c.entry.js → p-136460c0.entry.js} +2 -2
  318. package/dist/ripple/p-136460c0.entry.js.map +1 -0
  319. package/dist/ripple/{p-695286e7.entry.js → p-1da75922.entry.js} +2 -2
  320. package/dist/ripple/p-1da75922.entry.js.map +1 -0
  321. package/dist/ripple/{p-0a23f0fa.entry.js → p-22d9c36e.entry.js} +2 -2
  322. package/dist/ripple/p-22d9c36e.entry.js.map +1 -0
  323. package/dist/ripple/p-24a4cb11.system.entry.js.map +1 -1
  324. package/dist/ripple/{p-c5a50724.entry.js → p-24f7d6eb.entry.js} +2 -2
  325. package/dist/ripple/p-24f7d6eb.entry.js.map +1 -0
  326. package/dist/ripple/{p-4c383e9e.system.entry.js → p-27d3e1ab.system.entry.js} +2 -2
  327. package/dist/ripple/p-27d3e1ab.system.entry.js.map +1 -0
  328. package/dist/ripple/p-2c2a7092.system.entry.js.map +1 -1
  329. package/dist/ripple/{p-fe63519a.system.entry.js → p-2f4b4e3a.system.entry.js} +2 -2
  330. package/dist/ripple/p-2f4b4e3a.system.entry.js.map +1 -0
  331. package/dist/ripple/{p-e8fd25c8.js → p-3303b568.js} +2 -2
  332. package/dist/ripple/p-3303b568.js.map +1 -0
  333. package/dist/ripple/p-33558ec4.system.entry.js.map +1 -1
  334. package/dist/ripple/{p-1a2d8112.system.entry.js → p-337f2c82.system.entry.js} +2 -2
  335. package/dist/ripple/p-337f2c82.system.entry.js.map +1 -0
  336. package/dist/ripple/{p-bfc8d2bb.entry.js → p-34567f7e.entry.js} +2 -2
  337. package/dist/ripple/p-34567f7e.entry.js.map +1 -0
  338. package/dist/ripple/{p-67373e6f.system.entry.js → p-3655a421.system.entry.js} +2 -2
  339. package/dist/ripple/p-3655a421.system.entry.js.map +1 -0
  340. package/dist/ripple/p-3759b7af.system.entry.js.map +1 -1
  341. package/dist/ripple/{p-0b31c210.entry.js → p-40cc5375.entry.js} +2 -2
  342. package/dist/ripple/p-40cc5375.entry.js.map +1 -0
  343. package/dist/ripple/{p-76830e28.entry.js → p-4370bb17.entry.js} +2 -2
  344. package/dist/ripple/p-4370bb17.entry.js.map +1 -0
  345. package/dist/ripple/p-4391166c.entry.js.map +1 -1
  346. package/dist/ripple/{p-888bec42.js → p-43f1298b.js} +1 -1
  347. package/dist/ripple/p-43f1298b.js.map +1 -0
  348. package/dist/ripple/{p-18e58141.system.entry.js → p-48c8619f.system.entry.js} +2 -2
  349. package/dist/ripple/p-48c8619f.system.entry.js.map +1 -0
  350. package/dist/ripple/p-4a014591.entry.js.map +1 -1
  351. package/dist/ripple/{p-ccd0d43b.system.entry.js → p-4acc9e8d.system.entry.js} +2 -2
  352. package/dist/ripple/p-4acc9e8d.system.entry.js.map +1 -0
  353. package/dist/ripple/{p-a3b9c87d.system.entry.js → p-52655351.system.entry.js} +2 -2
  354. package/dist/ripple/p-52655351.system.entry.js.map +1 -0
  355. package/dist/ripple/{p-2a9fa9b5.entry.js → p-54df11c8.entry.js} +2 -2
  356. package/dist/ripple/p-54df11c8.entry.js.map +1 -0
  357. package/dist/ripple/p-59654f8e.entry.js.map +1 -1
  358. package/dist/ripple/{p-535e33d7.entry.js → p-5bf24119.entry.js} +2 -2
  359. package/dist/ripple/p-5bf24119.entry.js.map +1 -0
  360. package/dist/ripple/{p-e746fe88.system.entry.js → p-60e941cc.system.entry.js} +2 -2
  361. package/dist/ripple/p-60e941cc.system.entry.js.map +1 -0
  362. package/dist/ripple/{p-f38332ed.system.entry.js → p-684f2c1e.system.entry.js} +2 -2
  363. package/dist/ripple/p-684f2c1e.system.entry.js.map +1 -0
  364. package/dist/ripple/{p-e61d2c52.entry.js → p-75c9cad6.entry.js} +2 -2
  365. package/dist/ripple/p-75c9cad6.entry.js.map +1 -0
  366. package/dist/ripple/{p-e252738e.entry.js → p-78a7278d.entry.js} +2 -2
  367. package/dist/ripple/p-78a7278d.entry.js.map +1 -0
  368. package/dist/ripple/{p-45e7b944.entry.js → p-81c698e2.entry.js} +2 -2
  369. package/dist/ripple/p-81c698e2.entry.js.map +1 -0
  370. package/dist/ripple/{p-87da5d8e.entry.js → p-82323561.entry.js} +2 -2
  371. package/dist/ripple/p-82323561.entry.js.map +1 -0
  372. package/dist/ripple/{p-2b577e99.entry.js → p-873a5f0f.entry.js} +2 -2
  373. package/dist/ripple/p-873a5f0f.entry.js.map +1 -0
  374. package/dist/ripple/p-8c51e9f8.system.entry.js.map +1 -1
  375. package/dist/ripple/{p-be954fba.system.entry.js → p-8e11777d.system.entry.js} +2 -2
  376. package/dist/ripple/p-8e11777d.system.entry.js.map +1 -0
  377. package/dist/ripple/{p-63166c83.system.entry.js → p-90d67afa.system.entry.js} +2 -2
  378. package/dist/ripple/p-90d67afa.system.entry.js.map +1 -0
  379. package/dist/ripple/p-976b2789.system.entry.js.map +1 -1
  380. package/dist/ripple/{p-3e9da0fb.system.entry.js → p-97f0722e.system.entry.js} +2 -2
  381. package/dist/ripple/p-97f0722e.system.entry.js.map +1 -0
  382. package/dist/ripple/p-9b9eb944.entry.js.map +1 -1
  383. package/dist/ripple/{p-4a45a473.entry.js → p-9c9cf5e7.entry.js} +2 -2
  384. package/dist/ripple/p-9c9cf5e7.entry.js.map +1 -0
  385. package/dist/ripple/{p-313b6073.system.js → p-9d02957d.system.js} +1 -1
  386. package/dist/ripple/p-9d02957d.system.js.map +1 -0
  387. package/dist/ripple/{p-7b85f5a8.entry.js → p-a1c4d1d2.entry.js} +2 -2
  388. package/dist/ripple/p-a1c4d1d2.entry.js.map +1 -0
  389. package/dist/ripple/{p-9727c8f5.entry.js → p-a6cd8eb1.entry.js} +2 -2
  390. package/dist/ripple/p-a6cd8eb1.entry.js.map +1 -0
  391. package/dist/ripple/{p-dfeb2a0f.system.entry.js → p-ab792e0d.system.entry.js} +2 -2
  392. package/dist/ripple/p-ab792e0d.system.entry.js.map +1 -0
  393. package/dist/ripple/{p-5e2be836.entry.js → p-ab996399.entry.js} +2 -2
  394. package/dist/ripple/p-ab996399.entry.js.map +1 -0
  395. package/dist/ripple/{p-85b47217.system.entry.js → p-ac27d425.system.entry.js} +2 -2
  396. package/dist/ripple/p-ac27d425.system.entry.js.map +1 -0
  397. package/dist/ripple/{p-4091aa36.system.js → p-b8783b39.system.js} +2 -2
  398. package/dist/ripple/p-b8783b39.system.js.map +1 -0
  399. package/dist/ripple/{p-525fbd6b.system.entry.js → p-be2aab24.system.entry.js} +2 -2
  400. package/dist/ripple/p-be2aab24.system.entry.js.map +1 -0
  401. package/dist/ripple/p-bf569af0.entry.js.map +1 -1
  402. package/dist/ripple/{p-d6478e67.system.entry.js → p-c63b63ee.system.entry.js} +2 -2
  403. package/dist/ripple/p-c63b63ee.system.entry.js.map +1 -0
  404. package/dist/ripple/{p-90f42d65.system.entry.js → p-ce0002d4.system.entry.js} +2 -2
  405. package/dist/ripple/p-ce0002d4.system.entry.js.map +1 -0
  406. package/dist/ripple/{p-54f29e18.entry.js → p-d23db6e2.entry.js} +2 -2
  407. package/dist/ripple/p-d23db6e2.entry.js.map +1 -0
  408. package/dist/ripple/p-d939cb54.entry.js.map +1 -1
  409. package/dist/ripple/p-dbfd1640.system.entry.js.map +1 -1
  410. package/dist/ripple/{p-bc883afc.entry.js → p-e29c4789.entry.js} +2 -2
  411. package/dist/ripple/p-e29c4789.entry.js.map +1 -0
  412. package/dist/ripple/{p-0cd88c74.entry.js → p-e6b9766e.entry.js} +2 -2
  413. package/dist/ripple/p-e6b9766e.entry.js.map +1 -0
  414. package/dist/ripple/{p-2abe8404.system.entry.js → p-e8dab7c0.system.entry.js} +2 -2
  415. package/dist/ripple/p-e8dab7c0.system.entry.js.map +1 -0
  416. package/dist/ripple/{p-dcd38073.system.entry.js → p-eb64d16a.system.entry.js} +2 -2
  417. package/dist/ripple/p-eb64d16a.system.entry.js.map +1 -0
  418. package/dist/ripple/{p-a31a30ac.system.entry.js → p-eccbad16.system.entry.js} +2 -2
  419. package/dist/ripple/p-eccbad16.system.entry.js.map +1 -0
  420. package/dist/ripple/{p-054e206a.entry.js → p-edae6ef2.entry.js} +2 -2
  421. package/dist/ripple/p-edae6ef2.entry.js.map +1 -0
  422. package/dist/ripple/{p-9fd3badc.js → p-edfba0e1.js} +1 -1
  423. package/dist/ripple/{p-9fd3badc.js.map → p-edfba0e1.js.map} +1 -1
  424. package/dist/ripple/{p-d0c3d25a.entry.js → p-efc36352.entry.js} +2 -2
  425. package/dist/ripple/p-efc36352.entry.js.map +1 -0
  426. package/dist/ripple/{p-e782194d.system.js → p-f08e6a5a.system.js} +1 -1
  427. package/dist/ripple/{p-e782194d.system.js.map → p-f08e6a5a.system.js.map} +1 -1
  428. package/dist/ripple/{p-29cd07d5.system.entry.js → p-f09541fc.system.entry.js} +2 -2
  429. package/dist/ripple/p-f09541fc.system.entry.js.map +1 -0
  430. package/dist/ripple/{p-4aa0ee75.system.entry.js → p-f4487f66.system.entry.js} +2 -2
  431. package/dist/ripple/p-f4487f66.system.entry.js.map +1 -0
  432. package/dist/ripple/{p-08b7ec08.system.js → p-f5df5903.system.js} +1 -1
  433. package/dist/ripple/p-f5df5903.system.js.map +1 -0
  434. package/dist/ripple/{p-23e54ad4.js → p-f8d1e5a0.js} +2 -2
  435. package/dist/ripple/p-f8d1e5a0.js.map +1 -0
  436. package/dist/ripple/{p-a6d6eae7.js → p-fd8070fb.js} +1 -1
  437. package/dist/ripple/p-fd8070fb.js.map +1 -0
  438. package/dist/ripple/ripple.esm.js +1 -1
  439. package/dist/ripple/ripple.js +1 -1
  440. package/dist/types/components/charts/chartFunctions.d.ts +37 -37
  441. package/dist/types/components/charts/priv-chart-popover/priv-chart-popover.d.ts +27 -27
  442. package/dist/types/components/charts/wm-chart/wm-chart-slice.d.ts +11 -11
  443. package/dist/types/components/charts/wm-chart/wm-chart.d.ts +47 -47
  444. package/dist/types/components/charts/wm-progress-monitor/wm-progress-indicator.d.ts +29 -29
  445. package/dist/types/components/charts/wm-progress-monitor/wm-progress-monitor.d.ts +20 -20
  446. package/dist/types/components/charts/wm-progress-monitor/wm-progress-slice.d.ts +10 -10
  447. package/dist/types/components/wm-action-menu/wm-action-menu.d.ts +49 -49
  448. package/dist/types/components/wm-button/wm-button.d.ts +49 -49
  449. package/dist/types/components/wm-datepicker/priv-datepicker/priv-datepicker.d.ts +80 -80
  450. package/dist/types/components/wm-datepicker/wm-datepicker.d.ts +42 -42
  451. package/dist/types/components/wm-file/wm-file.d.ts +42 -42
  452. package/dist/types/components/wm-file-list/wm-file-list.d.ts +16 -16
  453. package/dist/types/components/wm-input/wm-input.d.ts +46 -46
  454. package/dist/types/components/wm-menuitem/wm-menuitem.d.ts +34 -34
  455. package/dist/types/components/wm-modal/wm-modal-footer.d.ts +14 -14
  456. package/dist/types/components/wm-modal/wm-modal-header.d.ts +11 -11
  457. package/dist/types/components/wm-modal/wm-modal.d.ts +40 -40
  458. package/dist/types/components/wm-navigation/wm-navigation-hamburger.d.ts +21 -21
  459. package/dist/types/components/wm-navigation/wm-navigation-item.d.ts +13 -13
  460. package/dist/types/components/wm-navigation/wm-navigation.d.ts +28 -28
  461. package/dist/types/components/wm-navigator/priv-navigator-button/priv-navigator-button.d.ts +10 -10
  462. package/dist/types/components/wm-navigator/priv-navigator-item/priv-navigator-item.d.ts +13 -13
  463. package/dist/types/components/wm-navigator/wm-navigator.d.ts +61 -61
  464. package/dist/types/components/wm-option/wm-option.d.ts +34 -34
  465. package/dist/types/components/wm-pagination/wm-pagination.d.ts +32 -32
  466. package/dist/types/components/wm-search/wm-search.d.ts +77 -77
  467. package/dist/types/components/wm-select/wm-select.d.ts +102 -102
  468. package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +35 -35
  469. package/dist/types/components/wm-tabs/wm-tab-item/wm-tab-item.d.ts +37 -37
  470. package/dist/types/components/wm-tabs/wm-tab-list/wm-tab-list.d.ts +52 -52
  471. package/dist/types/components/wm-tabs/wm-tab-panel/wm-tab-panel.d.ts +20 -20
  472. package/dist/types/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.d.ts +11 -11
  473. package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +127 -127
  474. package/dist/types/components/wm-timepicker/wm-timepicker.d.ts +62 -62
  475. package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +28 -28
  476. package/dist/types/components/wm-uploader/wm-network-uploader/wm-network-uploader.d.ts +85 -85
  477. package/dist/types/components/wm-uploader/wm-uploader.d.ts +104 -104
  478. package/dist/types/components/wm-wrapper/wm-wrapper.d.ts +7 -7
  479. package/dist/types/components.d.ts +27 -27
  480. package/dist/types/global/__mocks__/functions.d.ts +6 -6
  481. package/dist/types/global/functions.d.ts +47 -47
  482. package/dist/types/global/global.d.ts +1 -1
  483. package/dist/types/global/interfaces.d.ts +74 -74
  484. package/dist/types/global/services/__mocks__/http-service.d.ts +6 -6
  485. package/dist/types/global/services/http-service.d.ts +4 -4
  486. package/dist/types/lang/lang.d.ts +5 -5
  487. package/package.json +46 -46
  488. package/dist/cjs/chartFunctions-5309f8ed.js.map +0 -1
  489. package/dist/cjs/global-d20d5267.js.map +0 -1
  490. package/dist/cjs/http-service-9e8c4dd5.js.map +0 -1
  491. package/dist/cjs/interfaces-30a74c1f.js.map +0 -1
  492. package/dist/esm/chartFunctions-e22110b8.js.map +0 -1
  493. package/dist/esm/global-fee3549b.js.map +0 -1
  494. package/dist/esm/http-service-5d037e16.js.map +0 -1
  495. package/dist/esm/interfaces-61c6305b.js.map +0 -1
  496. package/dist/esm-es5/chartFunctions-e22110b8.js.map +0 -1
  497. package/dist/esm-es5/global-fee3549b.js.map +0 -1
  498. package/dist/esm-es5/http-service-5d037e16.js.map +0 -1
  499. package/dist/esm-es5/interfaces-61c6305b.js.map +0 -1
  500. package/dist/ripple/p-054e206a.entry.js.map +0 -1
  501. package/dist/ripple/p-08b7ec08.system.js.map +0 -1
  502. package/dist/ripple/p-0a23f0fa.entry.js.map +0 -1
  503. package/dist/ripple/p-0b31c210.entry.js.map +0 -1
  504. package/dist/ripple/p-0cd88c74.entry.js.map +0 -1
  505. package/dist/ripple/p-18e58141.system.entry.js.map +0 -1
  506. package/dist/ripple/p-1a2d8112.system.entry.js.map +0 -1
  507. package/dist/ripple/p-23e54ad4.js.map +0 -1
  508. package/dist/ripple/p-29cd07d5.system.entry.js.map +0 -1
  509. package/dist/ripple/p-2a9fa9b5.entry.js.map +0 -1
  510. package/dist/ripple/p-2abe8404.system.entry.js.map +0 -1
  511. package/dist/ripple/p-2b577e99.entry.js.map +0 -1
  512. package/dist/ripple/p-313b6073.system.js.map +0 -1
  513. package/dist/ripple/p-3e9da0fb.system.entry.js.map +0 -1
  514. package/dist/ripple/p-4091aa36.system.js.map +0 -1
  515. package/dist/ripple/p-45e7b944.entry.js.map +0 -1
  516. package/dist/ripple/p-4a45a473.entry.js.map +0 -1
  517. package/dist/ripple/p-4aa0ee75.system.entry.js.map +0 -1
  518. package/dist/ripple/p-4c383e9e.system.entry.js.map +0 -1
  519. package/dist/ripple/p-525fbd6b.system.entry.js.map +0 -1
  520. package/dist/ripple/p-535e33d7.entry.js.map +0 -1
  521. package/dist/ripple/p-54f29e18.entry.js.map +0 -1
  522. package/dist/ripple/p-5e2be836.entry.js.map +0 -1
  523. package/dist/ripple/p-63166c83.system.entry.js.map +0 -1
  524. package/dist/ripple/p-67373e6f.system.entry.js.map +0 -1
  525. package/dist/ripple/p-695286e7.entry.js.map +0 -1
  526. package/dist/ripple/p-76830e28.entry.js.map +0 -1
  527. package/dist/ripple/p-7b85f5a8.entry.js.map +0 -1
  528. package/dist/ripple/p-85b47217.system.entry.js.map +0 -1
  529. package/dist/ripple/p-87da5d8e.entry.js.map +0 -1
  530. package/dist/ripple/p-888bec42.js.map +0 -1
  531. package/dist/ripple/p-8e6bd600.system.entry.js.map +0 -1
  532. package/dist/ripple/p-90f42d65.system.entry.js.map +0 -1
  533. package/dist/ripple/p-9727c8f5.entry.js.map +0 -1
  534. package/dist/ripple/p-98a9eb8c.entry.js.map +0 -1
  535. package/dist/ripple/p-a31a30ac.system.entry.js.map +0 -1
  536. package/dist/ripple/p-a3b9c87d.system.entry.js.map +0 -1
  537. package/dist/ripple/p-a6d6eae7.js.map +0 -1
  538. package/dist/ripple/p-bc883afc.entry.js.map +0 -1
  539. package/dist/ripple/p-be954fba.system.entry.js.map +0 -1
  540. package/dist/ripple/p-bfc8d2bb.entry.js.map +0 -1
  541. package/dist/ripple/p-c25abcc5.system.js.map +0 -1
  542. package/dist/ripple/p-c5a50724.entry.js.map +0 -1
  543. package/dist/ripple/p-ccd0d43b.system.entry.js.map +0 -1
  544. package/dist/ripple/p-d0c3d25a.entry.js.map +0 -1
  545. package/dist/ripple/p-d6478e67.system.entry.js.map +0 -1
  546. package/dist/ripple/p-dcd38073.system.entry.js.map +0 -1
  547. package/dist/ripple/p-dfeb2a0f.system.entry.js.map +0 -1
  548. package/dist/ripple/p-e252738e.entry.js.map +0 -1
  549. package/dist/ripple/p-e61d2c52.entry.js.map +0 -1
  550. package/dist/ripple/p-e746fe88.system.entry.js.map +0 -1
  551. package/dist/ripple/p-e8fd25c8.js.map +0 -1
  552. package/dist/ripple/p-f38332ed.system.entry.js.map +0 -1
  553. package/dist/ripple/p-fe63519a.system.entry.js.map +0 -1
  554. /package/dist/ripple/{p-b22ba3a2.system.js.map → p-08950379.system.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["wmOptionCss","Option","exports","undefined","Object","defineProperty","class_1","prototype","classes","this","subinfo","push","parentSelectEl","multiple","el","textContent","toLowerCase","includes","searchTerm","join","_a","parentElement","nodeName","getRootNode","host","handleKeydown","ev","key","preventDefault","wmKeyUpPressed","emit","wmKeyDownPressed","disabled","click","wmEnterKeyPressed","stopPropagation","wmEscKeyPressed","wmHomeKeyPressed","wmEndKeyPressed","length","wmLetterPressed","handleSelection","wmOptionSelected","handleBlur","wmOptionBlurred","relatedTarget","syncAriaSelected","selected","setAttribute","removeAttribute","syncAriaDisabled","updateDisabledOnClick","onclick","onClickFunc","handleSearch","detail","regexp","RegExp","concat","boldedText","replace","match","textEl","innerHTML","componentWillLoad","_this","addEventListener","render","h","Host","role","tabindex","focused","class","hostClasses","ref","wmSelectCss","Select","requiredMessage","intl","formatMessage","id","defaultMessage","selectAllMessage","deselectAllMessage","allOptionsSelectedMessage","allOptionsDeselectedMessage","keysSoFar","searchIndex","openUp","overflowCount","displayedOptions","debouncedClearKeysSoFar","debounce","debouncedSearch","wmSelectSearchChanged","filteredOptions","announce","resultsFoundMessage","noResultsFoundMessage","description","class_2","Array","from","querySelectorAll","shadowRoot","duplicateOptions","childOptions","allOptionEls","filter","option","classList","contains","searchFieldEl","value","x","every","numResults","toggleTabbingOn","isTabbing","toggleTabbingOff","handleOptionSelection","focusOption","selectOption","changedOption","selectedOptions","wmSelectChanged","event","CustomEvent","dispatchEvent","close","isDuplicate","originalOption","findCorrespondingOption","o","handleChildEnter","handleChildUp","moveUp","handleChildDown","moveDown","moveToFirstOption","visibleOptionEls","moveToLastOption","closePopupOnEscape","handleOptionBlur","isElOrChild","handleClick","target","handleSelectAllClick","allSelected","deselectAllOptions","selectAllOptions","forEach","setSelectAllButton","setButtonText","handleButtonBlur","handleSearchFieldBlur","searchFieldWrapperEl","remove","handleKey","isExpanded","open","label","console","error","uid","generateId","document","body","componentDidLoad","wmSelectDidLoad","dropdownEl","add","forceUpdate","maxHeight","listboxEl","style","updateOptionVisibility","componentWillUpdate","visibleDuplicateOptions_1","idx","focusableEls","selectAllEl","unshift","prevEl","indexOf","nextEl","optionToSelect","elHeight","clientHeight","buttonHeight","buttonEl","shouldOpenUp","window","requestAnimationFrame","search","focus","scrollTop","slice","returnFocus","map","i","setTimeout","duplicateOption","scrollIntoView","block","correspondingOption","findAndFocusOption","character","nextMatch","findMatchInRange","list","startIndex","endIndex","optionsInRange","startsWith","exposeErrors","newId","errorContainer","renderErrorContainer","errorMessage","handleComponentBlur","wmSelectBlurred","wmComponentBlurred","handleKeyDown","y","overflowCounterWidth","computedStyle","getComputedStyle","paddingLeft","parseInt","getPropertyValue","paddingRight","availableSpace","clientWidth","optionsWidths","querySelector","optionsTotalWidth","reduce","acc","pop","message","liveRegionEl","announcement","renderButtonText","placeholder","allSelectedMessage","renderSubinfo","renderOverflowCount","renderSearchField","onKeyDown","onFocus","onBlur","onInput","searchPlaceholder","renderSearchFailedMessage","renderSelectAllButton","selectAll","onClick","renderDuplicateOptions","children","buttonProps","_b","getTextDir","labelPosition","invalid","htmlFor","requiredField","assign"],"sources":["src/components/wm-option/wm-option.scss?tag=wm-option&encapsulation=shadow","src/components/wm-option/wm-option.tsx","src/components/wm-select/wm-select.scss?tag=wm-select&encapsulation=shadow","src/components/wm-select/wm-select.tsx"],"sourcesContent":[":host(:not(:last-child)),\nwm-option:not(:last-child) {\n border-bottom: 2px solid $list-border-bottom-color;\n}\n\n:host,\nwm-option {\n display: block;\n cursor: pointer;\n position: relative;\n padding: rem-calc(20);\n background: $light-background;\n font-family: inherit;\n list-style: none;\n color: $body-text-color;\n user-select: none;\n\n &:focus,\n &.focus {\n outline: none;\n background: $background;\n }\n\n &.icon {\n color: $button-default-text;\n }\n\n .sr-only {\n @include srOnly;\n }\n}\n\n.checkbox {\n &:before {\n @include mdi-icon;\n content: \"\\f131\";\n display: inline;\n margin-right: rem-calc(4);\n color: $periwinkle;\n }\n}\n\n:host([aria-selected=\"true\"]),\nwm-option[aria-selected=\"true\"] {\n background: $list-selected-background-color;\n font-weight: 500;\n\n .checkbox {\n &:before {\n content: \"\\f132\";\n }\n }\n}\n\n:host([aria-disabled=\"true\"]),\nwm-option[aria-disabled=\"true\"] {\n font-style: italic;\n color: $gray;\n cursor: default;\n\n .checkbox {\n &:before {\n color: $gray;\n }\n }\n}\n\n:host(.multi-option),\nwm-option.multi-option {\n background: unset;\n}\n\n:host(.hidden),\nwm-option.hidden,\n:host(.filtered-out),\nwm-option.filtered-out {\n display: none;\n}\n\n:host(.duplicate.last),\nwm-option.duplicate.last {\n border-bottom: 12px solid $list-border-bottom-color;\n}\n\n:host(.hassubinfo),\nwm-option.hassubinfo {\n display: flex;\n\n .option-wrapper {\n flex: 1;\n }\n .subinfo {\n flex: none;\n }\n}\n\n.subinfo {\n font-style: italic;\n}\n\n.option-wrapper {\n // necessary for multiselect overflow measurement\n display: inline-block;\n}\n\n::slotted {\n font-family: inherit;\n}\n\n::slotted(i) {\n font-size: rem-calc(14);\n\n &:before {\n @include mdi-icon;\n display: inline-block;\n margin-right: rem-calc(10);\n pointer-events: none;\n }\n}\n\n:host(:focus),\nwm-option:focus {\n outline: none;\n background: $background;\n}\n\n:host(:hover) {\n background: $background;\n outline: none;\n}\n","import { h, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch } from \"@stencil/core\";\n\n@Component({\n tag: \"wm-option\",\n styleUrl: \"wm-option.scss\",\n shadow: true,\n})\nexport class Option {\n @Element() el!: HTMLElement;\n\n @Prop() value?: string | null; // if devs pass a value as attribute they should be able to retrieve it by querying the property. This is untouched by the component.\n @Prop({ mutable: true }) subinfo?: string = undefined;\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) selected: boolean = false;\n @Prop() focused: boolean = false;\n\n @Event() wmOptionSelected!: EventEmitter<HTMLWmOptionElement>;\n @Event() wmKeyUpPressed!: EventEmitter<HTMLWmOptionElement>;\n @Event() wmKeyDownPressed!: EventEmitter<HTMLWmOptionElement>;\n @Event() wmEscKeyPressed!: EventEmitter<HTMLWmOptionElement>;\n @Event() wmHomeKeyPressed!: EventEmitter<HTMLWmOptionElement>;\n @Event() wmEndKeyPressed!: EventEmitter<HTMLWmOptionElement>;\n @Event() wmEnterKeyPressed!: EventEmitter<HTMLWmOptionElement>;\n @Event() wmLetterPressed!: EventEmitter<string>;\n @Event() wmOptionBlurred!: EventEmitter<{ relatedTarget: EventTarget | null }>;\n\n private onClickFunc!: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n @State() searchTerm: string = \"\";\n private textEl!: HTMLDivElement;\n\n get hostClasses() {\n let classes = [];\n if (this.subinfo) {\n classes.push(\"hassubinfo\");\n }\n if (this.parentSelectEl.multiple) {\n classes.push(\"multi-option\");\n }\n if (!this.el.textContent!.toLowerCase().includes(this.searchTerm)) {\n classes.push(\"filtered-out\");\n }\n return classes.join(\" \");\n }\n\n get parentSelectEl() {\n return this.el.parentElement?.nodeName !== \"WM-SELECT\"\n ? ((this.el.getRootNode() as ShadowRoot).host as HTMLWmSelectElement)\n : (this.el.parentElement as HTMLWmSelectElement);\n }\n\n @Listen(\"keydown\")\n handleKeydown(ev: KeyboardEvent) {\n switch (ev.key) {\n case \"ArrowUp\":\n ev.preventDefault();\n this.wmKeyUpPressed.emit(this.el as HTMLWmOptionElement);\n break;\n\n case \"ArrowDown\":\n ev.preventDefault();\n this.wmKeyDownPressed.emit(this.el as HTMLWmOptionElement);\n break;\n\n case \"Enter\":\n ev.preventDefault();\n if (!this.disabled) {\n this.el.click();\n this.wmEnterKeyPressed.emit(this.el as HTMLWmOptionElement);\n }\n break;\n\n case \" \":\n ev.preventDefault();\n this.el.click();\n break;\n\n case \"Escape\":\n ev.preventDefault();\n ev.stopPropagation(); // for instance if select is in a modal, esc should close the select but not the modal\n this.wmEscKeyPressed.emit();\n break;\n\n case \"Home\":\n ev.preventDefault();\n this.wmHomeKeyPressed.emit();\n break;\n\n case \"End\":\n ev.preventDefault();\n this.wmEndKeyPressed.emit();\n break;\n\n default:\n if (ev.key.length === 1) {\n // emit for single characters (\"a\",\"l\",\"5\", etc), avoid others (\"shift\", \"control\", etc)\n this.wmLetterPressed.emit(ev.key);\n }\n }\n }\n\n @Listen(\"click\")\n handleSelection() {\n if (!this.disabled) {\n // the parent wm-select is in charge of the actual selection\n // using ev.detail because ev.target returns the wm-select for duplicate options\n this.wmOptionSelected.emit(this.el as HTMLWmOptionElement);\n }\n }\n\n @Listen(\"blur\")\n handleBlur(ev: FocusEvent) {\n this.wmOptionBlurred.emit({ relatedTarget: ev.relatedTarget });\n }\n\n @Watch(\"selected\")\n syncAriaSelected() {\n // this function only keeps the aria-selected attr in sync with the selected prop\n // all the logic for selecting / deselecting happens in the parent wm-select\n this.selected ? this.el.setAttribute(\"aria-selected\", \"true\") : this.el.removeAttribute(\"aria-selected\");\n }\n\n @Watch(\"disabled\")\n syncAriaDisabled() {\n this.disabled ? this.el.setAttribute(\"aria-disabled\", \"true\") : this.el.removeAttribute(\"aria-disabled\");\n }\n\n @Watch(\"disabled\")\n updateDisabledOnClick() {\n if (this.disabled && this.el.onclick) {\n this.onClickFunc = this.el.onclick;\n this.el.onclick = null;\n } else if (!this.disabled && this.onClickFunc) {\n this.el.onclick = this.onClickFunc;\n }\n }\n\n handleSearch(ev: CustomEvent) {\n // filter is case-insensitive, so\n this.searchTerm = ev.detail.searchTerm.toLowerCase();\n\n if (this.searchTerm) {\n const regexp = new RegExp(`${this.searchTerm}`, \"gi\");\n const boldedText = this.el.textContent!.replace(regexp, (match) => `<strong>${match}</strong>`);\n // for voiceover, text splitting is read as separate phrases. i.e. hel<b>lo</b> will be read as \"hel lo\"\n // aria-hidden and sr-only is used to circumvent this\n this.textEl.innerHTML = boldedText;\n } else {\n this.textEl.innerHTML = this.el.textContent!;\n }\n }\n\n componentWillLoad() {\n this.syncAriaSelected();\n this.syncAriaDisabled();\n this.updateDisabledOnClick();\n\n this.parentSelectEl.addEventListener(\"wmSelectSearchChanged\", (ev) => this.handleSearch(ev as CustomEvent));\n }\n\n render() {\n return (\n <Host role=\"option\" tabindex={this.focused ? 0 : -1} class={this.hostClasses}>\n <div class={`option-wrapper ${this.parentSelectEl.multiple ? \"checkbox\" : \"\"}`}>\n <span aria-hidden=\"true\" ref={(el) => (this.textEl = el as HTMLDivElement)}>\n {this.el.textContent}\n </span>\n <span class=\"sr-only\">{this.el.textContent}</span>\n </div>\n <div class=\"subinfo\">{this.subinfo}</div>\n </Host>\n );\n }\n}\n",":host {\n position: relative;\n display: block;\n box-sizing: border-box;\n font-family: inherit;\n\n .sr-only {\n @include srOnly;\n }\n}\n\n@include label;\n\n.wrapper {\n & .button-wrapper {\n position: relative;\n flex: 1;\n font-size: rem-calc(18);\n color: $button-default-text;\n min-width: rem-calc(140);\n\n .displayedoption {\n @include border-radius(3px);\n @include box-shadow(none);\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n background: transparent;\n width: 100%;\n border: solid 1px rgba(35, 35, 35, 0.6);\n padding: rem-calc(0 30 0 15);\n cursor: pointer;\n height: rem-calc(40);\n line-height: normal;\n font-family: inherit;\n color: $button-default-text;\n font-weight: 400;\n font-size: rem-calc(14);\n text-transform: none;\n text-align: left;\n\n @media only screen and (max-width: 768px) {\n height: rem-calc(44);\n }\n\n &:before {\n @include mdi-icon;\n content: \"\\f140\";\n position: absolute;\n right: rem-calc(9);\n pointer-events: none;\n }\n\n &:hover:not(:disabled):not(.-disabled):not(.-raised) {\n background: transparent;\n text-decoration: none;\n }\n\n &:active {\n // fix style bleed in Edge\n -ms-transform: scale(1, 1) !important;\n transform: scale(1, 1) !important;\n }\n\n &:focus {\n outline: none;\n }\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &.user-is-tabbing:focus {\n @include focus-style;\n }\n\n .overflowcontrol {\n display: block;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n\n &.hassubinfo {\n display: flex;\n\n .button-text {\n flex: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n min-width: 0;\n }\n .subinfo {\n flex: none;\n font-style: italic;\n }\n }\n }\n\n .overflow-counter {\n font-weight: bold;\n margin-left: rem-calc(8);\n }\n }\n\n > .displayedoption[disabled] {\n color: #6b6b6b;\n border-color: #8a8a8a;\n background: #f0f0f0;\n cursor: default;\n }\n\n > .dropdown {\n -webkit-overflow-scrolling: touch;\n\n @include box-shadow(0 4px 15px 0 rgba(0, 0, 0, 0.2));\n @include transition(transform 0.25s ease);\n @include scale($xVal: 1, $yVal: 0);\n @include transformOrigin(center top);\n @include border-radius(3px);\n position: absolute;\n top: 0;\n right: 0;\n background: #fff;\n z-index: 100;\n width: 100%;\n font-size: rem-calc(14);\n\n &.upwards {\n top: unset;\n bottom: calc(100% - 2.5rem);\n @include transformOrigin(center bottom);\n }\n\n &.hidden {\n visibility: hidden;\n }\n }\n\n > .dropdown.open {\n @include scale($xVal: 1, $yVal: 1);\n }\n }\n\n &.invalid {\n & .button-wrapper {\n & .displayedoption {\n @include invalid;\n }\n }\n }\n\n & .error-message {\n color: $error-color;\n font-size: rem-calc(14);\n margin-top: rem-calc(4);\n margin-bottom: rem-calc(4);\n display: block;\n top: 100%;\n left: 0;\n font-style: italic;\n }\n}\n\n.options-wrapper {\n max-height: rem-calc(200);\n overflow: auto;\n}\n\n.select-all {\n //display: inline-block;\n width: 100%;\n cursor: pointer;\n padding: rem-calc(20);\n border: none;\n margin: 0;\n border-bottom: 2px solid $list-border-bottom-color;\n background: $light-background;\n font-family: inherit;\n font-size: inherit;\n text-align: left; // fallback for browsers not supporting logical properties\n text-align: start;\n font-weight: 500;\n color: $interactive-element;\n user-select: none;\n\n &:hover,\n &:focus {\n outline: none;\n background: #f4f4f4;\n }\n}\n\n.search {\n box-sizing: border-box;\n border-bottom: 2px solid $list-border-bottom-color;\n padding: rem-calc(20);\n\n .searchfield-wrapper {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n height: rem-calc(44);\n width: 100%;\n padding: 0 rem-calc(12);\n @include border-radius(3px);\n border: 1px solid $input-border-color;\n &:focus,\n &.focus {\n @include field-focus;\n }\n }\n .searchfield {\n width: 100%;\n border: none;\n outline: none;\n font-family: inherit;\n font-size: rem-calc(14);\n margin-left: rem-calc(4);\n }\n .icon:before {\n @include mdi-icon;\n content: \"\\f349\";\n color: $gray;\n font-size: rem-calc(14);\n }\n}\n\n.search-results-message {\n padding: rem-calc(20);\n color: $body-text-color;\n font-size: rem-calc(14);\n font-style: italic;\n}\n\n.rtl {\n > .dropdown {\n @include transformOrigin(left top);\n left: 0;\n right: auto;\n\n .option {\n padding-left: rem-calc(48);\n padding-right: rem-calc(20);\n }\n }\n\n > .displayedoption {\n padding: rem-calc(0 15 0 30);\n text-align: right;\n\n &:before {\n right: auto;\n left: rem-calc(9);\n }\n }\n}\n","import { h, Component, Element, Event, EventEmitter, Listen, Prop, State, Watch, Host } from \"@stencil/core\";\nimport { forceUpdate } from \"@stencil/core\";\nimport { generateId, getTextDir, shouldOpenUp, intl, debounce } from \"../../global/functions\";\n\n@Component({\n tag: \"wm-select\",\n styleUrl: \"wm-select.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class Select {\n @Element() el!: HTMLWmSelectElement;\n\n private uid!: string;\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ mutable: true }) invalid: boolean = false;\n @Prop() maxHeight?: string;\n @Prop({ mutable: true }) label?: string;\n @Prop() labelPosition: \"top\" | \"left\" | \"none\" = \"top\";\n @Prop() requiredField: boolean = false;\n @Prop({ mutable: true }) errorMessage: string = \"\";\n @Prop() multiple: boolean = false;\n @Prop() search: boolean = false;\n @Prop() selectAll: boolean = false;\n @Prop() placeholder: string = intl.formatMessage({\n id: \"select.multiPlaceholder\",\n defaultMessage: \"Make a selection\",\n description: \"Placeholder text. Use imperative\",\n });\n @Prop() searchPlaceholder: string = intl.formatMessage({\n id: \"select.searchPlaceholder\",\n defaultMessage: \"Search\",\n description: \"Placeholder text. Use imperative\",\n });\n @Prop() allSelectedMessage: string = intl.formatMessage({\n id: \"select.allSelected\",\n defaultMessage: \"All selected\",\n description: \"Text displayed when all options are selected\",\n });\n\n requiredMessage = intl.formatMessage({\n id: \"global.requiredField\",\n defaultMessage: \"required field\",\n });\n\n selectAllMessage = intl.formatMessage({\n id: \"select.selectAll\",\n defaultMessage: \"Select All\",\n });\n\n deselectAllMessage = intl.formatMessage({\n id: \"select.deselectAll\",\n defaultMessage: \"Deselect All\",\n });\n\n allOptionsSelectedMessage = intl.formatMessage({\n id: \"select.allOptionsSelected\",\n defaultMessage: \"All options selected\",\n });\n\n allOptionsDeselectedMessage = intl.formatMessage({\n id: \"select.allOptionsDeselected\",\n defaultMessage: \"All options deselected\",\n });\n\n @State() isTabbing: boolean = false;\n @State() isExpanded: boolean = false;\n @State() announcement: string = \"\";\n @Event() wmSelectDidLoad!: EventEmitter<void>;\n @Event() wmSelectBlurred!: EventEmitter<void>;\n @Event() wmSelectChanged!: EventEmitter<Object>;\n @Event() wmComponentBlurred!: EventEmitter<void>; // deprecated in favor of wmSelectBlurred\n @Event() wmSelectSearchChanged!: EventEmitter<Object>;\n\n private buttonEl!: HTMLButtonElement;\n private dropdownEl!: HTMLDivElement;\n private selectAllEl!: HTMLButtonElement;\n private listboxEl!: HTMLDivElement;\n private liveRegionEl!: HTMLDivElement;\n private searchFieldWrapperEl!: HTMLDivElement;\n private searchFieldEl!: HTMLInputElement;\n private errorContainer!: HTMLDivElement;\n private keysSoFar: string = \"\";\n private searchIndex: number = 0;\n private openUp: boolean = false;\n get childOptions() {\n return Array.from(this.el.querySelectorAll(\"wm-option\"));\n }\n get duplicateOptions(): HTMLWmOptionElement[] {\n return Array.from(this.el.shadowRoot!.querySelectorAll(\"wm-option\"));\n }\n get allOptionEls(): HTMLWmOptionElement[] {\n // this includes both slotted wm-options and internally created wm-options\n return this.duplicateOptions.concat(this.childOptions);\n }\n get visibleOptionEls(): HTMLWmOptionElement[] {\n return this.allOptionEls.filter(\n (option) => !option.classList.contains(\"hidden\") && !option.classList.contains(\"filtered-out\")\n );\n }\n\n //////////////////////////////////////\n // for search variants\n get searchTerm(): string {\n return this.searchFieldEl ? this.searchFieldEl.value : \"\";\n }\n get filteredOptions(): HTMLWmOptionElement[] {\n return this.childOptions.filter((option) =>\n option.textContent?.toLowerCase().includes(this.searchTerm.toLowerCase())\n );\n }\n //////////////////////////////////////\n\n //////////////////////////////////////\n // for multiselect button text\n private overflowCount: number = 0;\n get selectedOptions(): HTMLWmOptionElement[] {\n return Array.from(this.el.querySelectorAll(\"wm-option\")).filter((x) => x.selected);\n }\n private displayedOptions: HTMLWmOptionElement[] = [];\n get allSelected() {\n return this.childOptions.every((option) => option.selected);\n }\n //////////////////////////////////////\n\n get resultsFoundMessage() {\n return intl.formatMessage(\n {\n id: \"select.searchResultsFound\",\n defaultMessage: \"{numResults, plural, one {1 option found} other {# options found}}\",\n description: \"The message read by the screen reader, indicating how many results a search returned\",\n },\n { numResults: this.filteredOptions.length }\n );\n }\n\n get noResultsFoundMessage() {\n return intl.formatMessage({\n id: \"select.noSearchResults\",\n defaultMessage: \"No results found. Please try your search again.\",\n description: \"The message displayed when no options pass the search filter\",\n });\n }\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n }\n\n @Listen(\"wmOptionSelected\")\n handleOptionSelection(ev: CustomEvent): void {\n const option: HTMLWmOptionElement = ev.detail;\n this.focusOption(option);\n if (!this.multiple) {\n // if the option was already selected, leave selected states untouched and don't fire the event\n if (!option.selected) {\n this.selectOption(option);\n const detail = { changedOption: option, selectedOptions: [option] };\n this.wmSelectChanged.emit(detail);\n // change is deprecated in favor of wmSelectChanged\n // because of issues with React wrappers when using native events name\n const event = new CustomEvent(\"change\", { detail: detail });\n // @ts-ignore\n this.el.dispatchEvent(event);\n }\n this.close();\n } else {\n this.selectOption(option);\n // we pass the original option with the event, as it's the only one the devs know or care about\n // devs will typically set a `value` on the option, which is not copied over\n // we could have taken the value and put it on the duplicate option,\n // but this approach is more flexible (what if they want to have a data attribute?)\n const isDuplicate: boolean = option.classList.contains(\"duplicate\");\n const originalOption: HTMLWmOptionElement = isDuplicate ? this.findCorrespondingOption(option) : option;\n const selectedOptions = this.childOptions.filter((o) => o.selected);\n const detail = { changedOption: originalOption, selectedOptions: selectedOptions };\n this.wmSelectChanged.emit(detail);\n // change is deprecated in favor of wmSelectChanged\n // because of issues with React wrappers when using native events name\n const event = new CustomEvent(\"change\", { detail: detail });\n // @ts-ignore\n this.el.dispatchEvent(event);\n }\n }\n\n @Listen(\"wmEnterKeyPressed\")\n handleChildEnter(): void {\n // only occurs for multiselects. handle the click, then close\n this.close();\n }\n\n @Listen(\"wmKeyUpPressed\")\n handleChildUp(ev: CustomEvent): void {\n this.moveUp(ev.detail as HTMLWmOptionElement);\n }\n\n @Listen(\"wmKeyDownPressed\")\n handleChildDown(ev: CustomEvent): void {\n this.moveDown(ev.detail as HTMLWmOptionElement);\n }\n\n @Listen(\"wmHomeKeyPressed\")\n moveToFirstOption(): void {\n this.focusOption(this.visibleOptionEls[0]);\n }\n\n @Listen(\"wmEndKeyPressed\")\n moveToLastOption(): void {\n this.focusOption(this.visibleOptionEls[this.visibleOptionEls.length - 1]);\n }\n\n @Listen(\"wmEscKeyPressed\")\n closePopupOnEscape(): void {\n this.close();\n }\n\n @Listen(\"wmOptionBlurred\")\n handleOptionBlur(ev: CustomEvent): void {\n // if the Option is blurred to something other than the component emit a blur event with the appropriate relatedTarget\n // keeps our component's blur events accurate, and closes when focusing browser address bar\n if (!this.isElOrChild(ev.detail.relatedTarget)) {\n const event = new CustomEvent(\"blur\");\n // @ts-ignore\n event.relatedTarget = ev.detail.relatedTarget;\n this.el.dispatchEvent(event);\n }\n }\n\n @Listen(\"click\", { target: \"document\", capture: true })\n handleClick(ev: MouseEvent): void {\n if (!this.isElOrChild(ev.target as HTMLElement)) {\n this.close();\n }\n }\n\n handleSelectAllClick() {\n this.allSelected ? this.deselectAllOptions() : this.selectAllOptions();\n }\n\n selectAllOptions() {\n this.allOptionEls.forEach((o) => (o.selected = true));\n this.setSelectAllButton();\n this.setButtonText();\n const detail = { changedOption: null, selectedOptions: this.childOptions };\n this.wmSelectChanged.emit(detail);\n }\n\n deselectAllOptions() {\n this.allOptionEls.forEach((o) => (o.selected = false));\n this.setSelectAllButton();\n this.setButtonText();\n const detail = { changedOption: null, selectedOptions: [] };\n this.wmSelectChanged.emit(detail);\n }\n\n handleButtonBlur(ev: FocusEvent) {\n if (this.isElOrChild(ev.relatedTarget as HTMLElement)) {\n // do not emit a blur event when opening the dropdown and focusing the Options\n ev.stopPropagation();\n }\n }\n\n handleSearchFieldBlur(ev: FocusEvent) {\n this.searchFieldWrapperEl.classList.remove(\"focus\");\n if (this.isElOrChild(ev.relatedTarget as HTMLElement)) {\n // do not emit a blur event when moving from searchfield to options\n ev.stopPropagation();\n }\n }\n\n @Listen(\"keydown\")\n handleKey(ev: KeyboardEvent): void {\n switch (ev.key) {\n case \"ArrowDown\":\n if (this.isExpanded === false) {\n ev.preventDefault();\n this.open(\"next\");\n }\n break;\n\n case \"ArrowUp\":\n if (this.isExpanded === false) {\n ev.preventDefault();\n this.open(\"previous\");\n }\n break;\n }\n }\n\n componentWillLoad() {\n if (!this.label) {\n console.error(\n \"For accessibility purposes, this component requires a label (even if `label-position` is set to `none`).\"\n );\n }\n\n this.uid = this.el.id ? this.el.id : generateId();\n\n if (document.body.classList.contains(\"wmcl-user-is-tabbing\")) {\n this.toggleTabbingOn();\n }\n\n // set initial selections\n if (this.selectedOptions.length > 0) {\n this.selectedOptions.forEach((x) => {\n this.displayedOptions.push(x);\n });\n // single Select only, pre-select if no default option from dev\n } else if (!this.multiple) {\n this.selectOption(this.allOptionEls[0]);\n }\n }\n\n componentDidLoad() {\n this.wmSelectDidLoad.emit();\n this.dropdownEl.classList.add(\"hidden\");\n forceUpdate(this.el);\n\n // Dev can overwrite the max-height rule set in the Sass file\n if (this.maxHeight) {\n this.listboxEl.style.maxHeight = this.maxHeight;\n }\n\n if (this.multiple) {\n this.updateOptionVisibility();\n }\n this.setButtonText();\n }\n\n componentWillUpdate() {\n if (this.multiple) {\n // find last visible duplicate option and apply .last class\n const visibleDuplicateOptions = this.visibleOptionEls.filter((option) => option.classList.contains(\"duplicate\"));\n visibleDuplicateOptions.forEach((option, idx) => {\n if (idx === visibleDuplicateOptions.length - 1) {\n option.classList.add(\"last\");\n } else {\n option.classList.remove(\"last\");\n }\n });\n }\n }\n\n moveUp(el: HTMLElement) {\n const focusableEls: HTMLElement[] = this.visibleOptionEls;\n if (this.selectAllEl) {\n focusableEls.unshift(this.selectAllEl);\n }\n if (this.searchFieldEl) {\n focusableEls.unshift(this.searchFieldEl);\n }\n\n const prevEl = focusableEls[focusableEls.indexOf(el) - 1] || focusableEls[focusableEls.length - 1];\n\n if (prevEl) {\n this.focusOption(prevEl);\n }\n }\n\n moveDown(el: HTMLElement) {\n const focusableEls: HTMLElement[] = this.visibleOptionEls;\n if (this.selectAllEl) {\n focusableEls.unshift(this.selectAllEl);\n }\n if (this.searchFieldEl) {\n focusableEls.unshift(this.searchFieldEl);\n }\n\n const nextEl = focusableEls[focusableEls.indexOf(el) + 1] || focusableEls[0];\n\n if (nextEl) {\n this.focusOption(nextEl);\n }\n }\n\n open(optionToSelect?: \"next\" | \"previous\"): void {\n if (!this.disabled) {\n const elHeight = this.el.clientHeight;\n const buttonHeight = this.buttonEl.clientHeight;\n this.openUp = shouldOpenUp(\n this.el,\n this.dropdownEl,\n // when opening up, dropdown covers both label and button\n elHeight,\n // when opening down, dropdown covers only the button\n buttonHeight\n );\n this.isExpanded = true;\n this.dropdownEl.classList.remove(\"hidden\");\n\n window.requestAnimationFrame(() => {\n switch (optionToSelect) {\n case \"next\":\n // search variant focuses search field\n // all others focus option \"after\" last selected option (this can be the first option)\n if (this.search) {\n this.searchFieldEl.focus();\n this.listboxEl.scrollTop = 0;\n } else {\n this.moveDown(this.visibleOptionEls.filter((x) => x.selected).slice(-1)[0]);\n }\n break;\n case \"previous\":\n // search variant focuses last option\n // all others focus option \"above\" first selected option (this can be the last option)\n if (this.search) {\n this.focusOption(this.visibleOptionEls[this.visibleOptionEls.length - 1]);\n } else {\n this.moveUp(this.visibleOptionEls.filter((x) => x.selected)[0]);\n }\n break;\n default:\n // search variant focuses search field\n // all others focus the selected option\n // if no option is selected (empty multiselect), focuses first option\n if (this.search) {\n this.searchFieldEl.focus();\n this.listboxEl.scrollTop = 0;\n } else if (this.selectedOptions.length > 0) {\n this.focusOption(this.visibleOptionEls.filter((x) => x.selected)[0]);\n } else {\n this.focusOption(this.visibleOptionEls[0]);\n }\n break;\n }\n });\n }\n }\n\n close(returnFocus: boolean = true): void {\n if (this.isExpanded) {\n this.isExpanded = false;\n this.allOptionEls.map((i) => (i.focused = false));\n\n window.setTimeout(() => {\n this.dropdownEl.classList.add(\"hidden\");\n if (this.multiple) {\n this.updateOptionVisibility();\n }\n // clear search field, reset filtered / bolded state of wm-options\n if (this.search) {\n this.searchFieldEl.value = \"\";\n this.wmSelectSearchChanged.emit({ searchTerm: this.searchTerm });\n }\n // Returns focus to button after popup closes (no need if user is tabbing)\n // Delay is necessary for screenreader to get new expanded state before focus\n // window.requestAnimationFrame is probably enough, but since we are already using setTimeout it may as well be here\n // also UX wise, it makes sense for the button to only be focused after the animation is complete\n if (returnFocus) {\n this.buttonEl.focus();\n }\n }, 150);\n }\n }\n\n updateOptionVisibility() {\n // this runs for search multiselects, where selected options are rendered at the top of the dropdown list\n // slotted wm-options are hidden if selected, and duplicate wm-options are made visible if selected\n this.childOptions.forEach((option, idx) => {\n const duplicateOption = this.duplicateOptions[idx];\n if (option.selected) {\n option.classList.add(\"hidden\");\n duplicateOption.classList.remove(\"hidden\");\n } else {\n option.classList.remove(\"hidden\");\n duplicateOption.classList.add(\"hidden\");\n }\n });\n }\n\n focusOption(option: HTMLElement): void {\n this.allOptionEls.forEach((i) => (i.focused = i === option));\n\n // option must be scrolledIntoView before focused\n // if focus is called first the option might be positioned incorrectly (in the center of the dropdown) and scrollIntoView will do nothing as the option will already be in view\n option.scrollIntoView({ block: \"nearest\" });\n\n // scrollIntoView does not work when the container of the element it's called on is not rendered to the page (in our case the dropdown is still closed and has transform: scaleY(0))\n // when opening the dropdown, scrollIntoView must be delayed to a point where the browser recognizes content within it as able to be scrolled to\n // in Safari in particular, the soonest this seems to happen is 20ms. The longest we can wait before any jumping in the open dropdown is noticeable is 60ms\n window.setTimeout(() => option.scrollIntoView({ block: \"nearest\" }), 60);\n\n option.focus();\n }\n\n selectOption(option: HTMLWmOptionElement): void {\n // beware of this function's name. For multiselect it actually toggles the selected state, so it can also deselect the option\n if (option.classList.contains(\"duplicate\")) {\n // if clicking on a duplicate option, toggle selected property of real one, then rerender\n const correspondingOption = this.findCorrespondingOption(option);\n correspondingOption.selected = !correspondingOption.selected;\n forceUpdate(this.el);\n } else if (this.multiple) {\n option.selected = !option.selected;\n } else {\n this.childOptions.forEach((x) => (x.selected = x === option));\n }\n // update the selectAll checkbox when an option is de/selected\n // checking is the el is present, implies that this.multiple and this.selectAll are true\n if (this.selectAllEl) {\n this.setSelectAllButton();\n }\n this.setButtonText();\n }\n\n @Listen(\"wmLetterPressed\")\n findAndFocusOption(ev: CustomEvent): void {\n const character = ev.detail.toLowerCase();\n\n if (!this.keysSoFar) {\n // if first character entered, set currently focused option as the starting index for the search\n this.visibleOptionEls.forEach((option, idx) => {\n if (option.focused) {\n this.searchIndex = idx;\n }\n });\n }\n\n this.keysSoFar += character;\n\n let nextMatch = this.findMatchInRange(this.visibleOptionEls, this.searchIndex + 1, this.visibleOptionEls.length);\n if (!nextMatch) {\n // if match can't be found from starting option downwards, search from top\n nextMatch = this.findMatchInRange(this.visibleOptionEls, 0, this.searchIndex);\n }\n\n if (nextMatch) {\n // findMatchInRange still might have returned null, only focus if match found\n this.focusOption(nextMatch as HTMLWmOptionElement);\n }\n this.debouncedClearKeysSoFar();\n }\n\n debouncedClearKeysSoFar = debounce(() => {\n this.keysSoFar = \"\";\n }, 500);\n\n findMatchInRange(list: HTMLWmOptionElement[], startIndex: number, endIndex: number): HTMLWmOptionElement | null {\n let match: HTMLWmOptionElement | null = null;\n let optionsInRange = list.slice(startIndex, endIndex);\n\n // Find the first option starting with the keysSoFar substring, searching in\n // the specified range of options\n optionsInRange.forEach((option) => {\n const label = option.textContent;\n if (!match && label && label.toLowerCase().startsWith(this.keysSoFar)) {\n match = option;\n }\n });\n\n return match;\n }\n\n findCorrespondingOption(el: HTMLWmOptionElement): HTMLWmOptionElement {\n // if duplicate, returns the child wm-option\n // if child wm-option, returns duplicate\n const isDuplicate = el.classList.contains(\"duplicate\");\n return isDuplicate\n ? this.childOptions[this.duplicateOptions.indexOf(el)]\n : this.duplicateOptions[this.childOptions.indexOf(el)];\n }\n\n isElOrChild(el: HTMLElement) {\n // determines whether or not the element is the component, a child of the component, or exists within the component's shadowroot\n return el === this.el || this.el.contains(el) || this.el.shadowRoot?.contains(el);\n }\n\n @Watch(\"errorMessage\")\n exposeErrors() {\n // When the error changes, a new id is set for the error container and the button's aria-describedby attribute is updated accordingly. This is to make sure the screen reader announces teh updated errors in Firefox. See this longstanding bug: https://bugzilla.mozilla.org/show_bug.cgi?id=493683\n const newId = generateId();\n this.errorContainer.id = `wm-errors-${newId}`;\n this.buttonEl.setAttribute(\"aria-describedby\", `wm-errors-${newId}`);\n }\n\n renderErrorContainer() {\n return (\n <div\n id=\"wm-errors\"\n class={this.errorMessage ? \"error-message\" : \"\"}\n ref={(el) => (this.errorContainer = el as HTMLDivElement)}\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n >\n {this.errorMessage}\n </div>\n );\n }\n\n handleComponentBlur(ev: FocusEvent): void {\n // Do not close or emit custom blur event when blurring to an element inside (wm-option)\n if (!this.el.contains(ev.relatedTarget as Node)) {\n this.close(false);\n this.wmSelectBlurred.emit();\n this.wmComponentBlurred.emit(); // deprecated\n }\n }\n\n // on search field or select all. keydown on options is handled via events.\n handleKeyDown(ev: KeyboardEvent) {\n const el = ev.target as HTMLElement;\n switch (ev.key) {\n case \"ArrowDown\":\n ev.preventDefault();\n this.moveDown(ev.target as HTMLElement);\n break;\n case \"ArrowUp\":\n ev.preventDefault();\n this.moveUp(ev.target as HTMLElement);\n break;\n case \"Escape\":\n ev.preventDefault();\n this.close();\n break;\n case \"Enter\":\n if (el === this.selectAllEl) {\n ev.preventDefault();\n this.handleSelectAllClick();\n this.close();\n }\n break;\n case \" \":\n if (el === this.selectAllEl) {\n ev.preventDefault();\n this.handleSelectAllClick();\n }\n break;\n }\n }\n\n debouncedSearch = debounce(() => {\n this.wmSelectSearchChanged.emit({ searchTerm: this.searchTerm });\n\n if (this.filteredOptions.length) {\n this.announce(this.resultsFoundMessage);\n } else {\n this.announce(this.noResultsFoundMessage);\n }\n }, 150);\n\n setButtonText() {\n this.displayedOptions = this.childOptions\n .filter((x) => x.selected)\n .map((y) => (!y.classList.contains(\"hidden\") ? y : this.findCorrespondingOption(y)));\n\n // handle overflow + counter for multiselect\n if (this.multiple) {\n // this is a fixed measurement accounting for the max width of a 3 character overflow counter\n const overflowCounterWidth = 38;\n const computedStyle = window.getComputedStyle(this.buttonEl);\n\n // there seems to be no quick way to get an elements width without padding, except for subtracting padding manually\n const paddingLeft = parseInt(computedStyle.getPropertyValue(\"padding-left\").slice(0, -2));\n const paddingRight = parseInt(computedStyle.getPropertyValue(\"padding-right\").slice(0, -2));\n\n const availableSpace = this.buttonEl.clientWidth - paddingLeft - paddingRight - overflowCounterWidth;\n\n let optionsWidths = this.displayedOptions.map((x) => x.shadowRoot!.querySelector(\".option-wrapper\")!.clientWidth);\n\n let optionsTotalWidth = optionsWidths.reduce((acc, x) => acc + x, 0);\n this.overflowCount = 0;\n\n while (optionsTotalWidth > availableSpace && this.displayedOptions.length > 1) {\n this.overflowCount++;\n optionsTotalWidth -= optionsWidths[optionsWidths.length - 1];\n optionsWidths.pop();\n this.displayedOptions.pop();\n }\n }\n }\n\n setSelectAllButton() {\n if (this.allSelected) {\n this.selectAllEl.textContent = this.deselectAllMessage;\n this.announce(this.allOptionsSelectedMessage);\n } else {\n this.selectAllEl.textContent = this.selectAllMessage;\n if (this.selectedOptions.length === 0) {\n this.announce(this.allOptionsDeselectedMessage);\n }\n }\n }\n\n announce(message: string) {\n // \\u00A0 is a non-breaking space character, which causes the message to be read as a new one\n if (this.liveRegionEl.textContent === message) {\n message += \"\\u00A0\";\n }\n this.announcement = message;\n }\n\n renderButtonText() {\n if (this.multiple && this.displayedOptions.length < 1) {\n return <span>{this.placeholder}</span>;\n } else if (this.multiple && this.allSelected && this.overflowCount > 0) {\n return this.allSelectedMessage;\n } else {\n return this.displayedOptions.map((x, idx) => (\n <span>\n {idx > 0 ? \", \" : \"\"}\n {x.textContent}\n </span>\n ));\n }\n }\n\n renderSubinfo() {\n // multiselects cannot have subinfo for options\n if (!this.multiple && this.selectedOptions.length > 0 && this.selectedOptions[0].subinfo) {\n return <span class=\"subinfo\">{this.selectedOptions[0].subinfo}</span>;\n }\n }\n\n renderOverflowCount() {\n if (this.overflowCount > 0 && !this.allSelected) {\n return (\n <span>\n <span class=\"overflow-counter\">+{this.overflowCount}</span>\n </span>\n );\n }\n }\n\n renderSearchField() {\n return (\n <div class=\"search\">\n <div class=\"searchfield-wrapper\" ref={(el) => (this.searchFieldWrapperEl = el as HTMLInputElement)}>\n <div class=\"icon\"></div>\n <input\n ref={(el) => (this.searchFieldEl = el as HTMLInputElement)}\n class=\"searchfield\"\n role=\"combobox\"\n aria-controls={`list-${this.uid}`}\n aria-expanded={this.isExpanded ? \"true\" : \"false\"}\n onKeyDown={(ev) => this.handleKeyDown(ev)}\n onFocus={() => this.searchFieldWrapperEl.classList.add(\"focus\")}\n onBlur={(ev) => this.handleSearchFieldBlur(ev)}\n onInput={() => this.debouncedSearch()}\n placeholder={this.searchPlaceholder}\n ></input>\n </div>\n </div>\n );\n }\n\n renderSearchFailedMessage() {\n return <div class=\"search-results-message\">{this.noResultsFoundMessage}</div>;\n }\n\n renderSelectAllButton() {\n if (this.selectAll && this.multiple && this.searchTerm == \"\") {\n return (\n <button\n ref={(el) => (this.selectAllEl = el as HTMLButtonElement)}\n class=\"select-all\"\n onClick={() => this.handleSelectAllClick()}\n onKeyDown={(ev) => this.handleKeyDown(ev)}\n tabindex=\"-1\"\n >\n {this.allSelected ? this.deselectAllMessage : this.selectAllMessage}\n </button>\n );\n }\n }\n\n renderDuplicateOptions() {\n return Array.from(this.el.children).map((option) => {\n return (\n <wm-option class=\"duplicate\" selected={(option as HTMLWmOptionElement).selected}>\n {option.textContent}\n </wm-option>\n );\n });\n }\n\n render() {\n const buttonProps = {\n id: `selectbtn-${this.uid}`,\n [\"disabled\"]: this.disabled,\n [\"aria-controls\"]: `list-${this.uid}`,\n [\"aria-labelledby\"]: `label-${this.uid} selectbtn-${this.uid}`,\n [\"aria-describedby\"]: \"wm-errors\",\n [\"aria-expanded\"]: this.isExpanded ? \"true\" : \"false\",\n onClick: () => (this.isExpanded ? this.close() : this.open()),\n };\n\n return (\n <Host onBlur={(ev: FocusEvent) => this.handleComponentBlur(ev)}>\n <div\n class={`wrapper ${getTextDir()} label-${this.labelPosition} ${\n this.invalid || this.errorMessage ? \"invalid\" : \"\"\n }`}\n >\n <div class=\"label-wrapper\">\n <label class=\"label\" id={`label-${this.uid}`} htmlFor={`selectbtn-${this.uid}`}>\n {this.label}\n {\n // we can't use aria-required or required attributes because it's invalid on the elements we're using (button controlling a listbox)\n this.requiredField ? (\n <span class=\"required\">\n <span class=\"sr-only\">{this.requiredMessage}</span>\n <span aria-hidden=\"true\">*</span>\n </span>\n ) : (\n \"\"\n )\n }\n </label>\n </div>\n <div class=\"button-wrapper\">\n <button\n {...buttonProps}\n class={`displayedoption ${this.isTabbing ? \"user-is-tabbing\" : \"\"}`}\n ref={(el) => (this.buttonEl = el as HTMLButtonElement)}\n onBlur={(ev) => this.handleButtonBlur(ev)}\n onFocus={() => this.close()}\n >\n <span\n class={\n this.selectedOptions.length > 0 && this.selectedOptions.filter((x) => x.subinfo).length > 0\n ? \"overflowcontrol hassubinfo\"\n : \"overflowcontrol\"\n }\n >\n <span class=\"button-text\">{this.renderButtonText()}</span>\n {this.renderSubinfo()}\n </span>\n {this.renderOverflowCount()}\n </button>\n <div\n class={`dropdown ${this.isExpanded ? \"open\" : \"\"} ${this.openUp ? \"upwards\" : \"\"}`}\n ref={(el) => (this.dropdownEl = el as HTMLDivElement)}\n >\n {this.search && this.renderSearchField()}\n <div\n id={`list-${this.uid}`}\n class=\"options-wrapper\"\n tabindex={-1}\n role=\"listbox\"\n aria-multiselectable={this.multiple ? \"true\" : null}\n aria-labelledby={`label-${this.uid}`}\n ref={(el) => (this.listboxEl = el as HTMLDivElement)}\n >\n {this.search && this.filteredOptions.length === 0 && this.renderSearchFailedMessage()}\n {this.renderSelectAllButton()}\n {this.multiple && this.renderDuplicateOptions()}\n <slot />\n </div>\n </div>\n {this.renderErrorContainer()}\n <div\n id=\"announcement\"\n aria-live=\"polite\"\n class=\"sr-only\"\n ref={(el) => (this.liveRegionEl = el as HTMLDivElement)}\n >\n {this.announcement}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"wPAAA,IAAMA,EAAc,09E,ICOPC,EAAMC,EAAA,uB,2fAI2BC,U,cACC,M,cACA,M,aAClB,M,gBAaG,E,CAG9BC,OAAAC,eAAIC,EAAAC,UAAA,cAAW,C,IAAf,WACE,IAAIC,EAAU,GACd,GAAIC,KAAKC,QAAS,CAChBF,EAAQG,KAAK,a,CAEf,GAAIF,KAAKG,eAAeC,SAAU,CAChCL,EAAQG,KAAK,e,CAEf,IAAKF,KAAKK,GAAGC,YAAaC,cAAcC,SAASR,KAAKS,YAAa,CACjEV,EAAQG,KAAK,e,CAEf,OAAOH,EAAQW,KAAK,I,uCAGtBf,OAAAC,eAAIC,EAAAC,UAAA,iBAAc,C,IAAlB,W,MACE,QAAOa,EAAAX,KAAKK,GAAGO,iBAAa,MAAAD,SAAA,SAAAA,EAAEE,YAAa,YACrCb,KAAKK,GAAGS,cAA6BC,KACtCf,KAAKK,GAAGO,a,uCAIff,EAAAC,UAAAkB,cAAA,SAAcC,GACZ,OAAQA,EAAGC,KACT,IAAK,UACHD,EAAGE,iBACHnB,KAAKoB,eAAeC,KAAKrB,KAAKK,IAC9B,MAEF,IAAK,YACHY,EAAGE,iBACHnB,KAAKsB,iBAAiBD,KAAKrB,KAAKK,IAChC,MAEF,IAAK,QACHY,EAAGE,iBACH,IAAKnB,KAAKuB,SAAU,CAClBvB,KAAKK,GAAGmB,QACRxB,KAAKyB,kBAAkBJ,KAAKrB,KAAKK,G,CAEnC,MAEF,IAAK,IACHY,EAAGE,iBACHnB,KAAKK,GAAGmB,QACR,MAEF,IAAK,SACHP,EAAGE,iBACHF,EAAGS,kBACH1B,KAAK2B,gBAAgBN,OACrB,MAEF,IAAK,OACHJ,EAAGE,iBACHnB,KAAK4B,iBAAiBP,OACtB,MAEF,IAAK,MACHJ,EAAGE,iBACHnB,KAAK6B,gBAAgBR,OACrB,MAEF,QACE,GAAIJ,EAAGC,IAAIY,SAAW,EAAG,CAEvB9B,KAAK+B,gBAAgBV,KAAKJ,EAAGC,I,IAMrCrB,EAAAC,UAAAkC,gBAAA,WACE,IAAKhC,KAAKuB,SAAU,CAGlBvB,KAAKiC,iBAAiBZ,KAAKrB,KAAKK,G,GAKpCR,EAAAC,UAAAoC,WAAA,SAAWjB,GACTjB,KAAKmC,gBAAgBd,KAAK,CAAEe,cAAenB,EAAGmB,e,EAIhDvC,EAAAC,UAAAuC,iBAAA,WAGErC,KAAKsC,SAAWtC,KAAKK,GAAGkC,aAAa,gBAAiB,QAAUvC,KAAKK,GAAGmC,gBAAgB,gB,EAI1F3C,EAAAC,UAAA2C,iBAAA,WACEzC,KAAKuB,SAAWvB,KAAKK,GAAGkC,aAAa,gBAAiB,QAAUvC,KAAKK,GAAGmC,gBAAgB,gB,EAI1F3C,EAAAC,UAAA4C,sBAAA,WACE,GAAI1C,KAAKuB,UAAYvB,KAAKK,GAAGsC,QAAS,CACpC3C,KAAK4C,YAAc5C,KAAKK,GAAGsC,QAC3B3C,KAAKK,GAAGsC,QAAU,I,MACb,IAAK3C,KAAKuB,UAAYvB,KAAK4C,YAAa,CAC7C5C,KAAKK,GAAGsC,QAAU3C,KAAK4C,W,GAI3B/C,EAAAC,UAAA+C,aAAA,SAAa5B,GAEXjB,KAAKS,WAAaQ,EAAG6B,OAAOrC,WAAWF,cAEvC,GAAIP,KAAKS,WAAY,CACnB,IAAMsC,EAAS,IAAIC,OAAO,GAAAC,OAAGjD,KAAKS,YAAc,MAChD,IAAMyC,EAAalD,KAAKK,GAAGC,YAAa6C,QAAQJ,GAAQ,SAACK,GAAU,iBAAAH,OAAWG,EAAK,YAAhB,IAGnEpD,KAAKqD,OAAOC,UAAYJ,C,KACnB,CACLlD,KAAKqD,OAAOC,UAAYtD,KAAKK,GAAGC,W,GAIpCT,EAAAC,UAAAyD,kBAAA,eAAAC,EAAAxD,KACEA,KAAKqC,mBACLrC,KAAKyC,mBACLzC,KAAK0C,wBAEL1C,KAAKG,eAAesD,iBAAiB,yBAAyB,SAACxC,GAAO,OAAAuC,EAAKX,aAAa5B,EAAlB,G,EAGxEpB,EAAAC,UAAA4D,OAAA,eAAAF,EAAAxD,KACE,OACE2D,EAACC,EAAI,CAACC,KAAK,SAASC,SAAU9D,KAAK+D,QAAU,GAAK,EAAGC,MAAOhE,KAAKiE,aAC/DN,EAAA,OAAKK,MAAO,kBAAAf,OAAkBjD,KAAKG,eAAeC,SAAW,WAAa,KACxEuD,EAAA,sBAAkB,OAAOO,IAAK,SAAC7D,GAAE,OAAMmD,EAAKH,OAAShD,CAApB,GAC9BL,KAAKK,GAAGC,aAEXqD,EAAA,QAAMK,MAAM,WAAWhE,KAAKK,GAAGC,cAEjCqD,EAAA,OAAKK,MAAM,WAAWhE,KAAKC,S,4SAjKhB,I,UCPnB,IAAMkE,EAAc,i7P,ICSPC,EAAM3E,EAAA,uB,0SA8BjBO,KAAAqE,gBAAkBC,EAAKC,cAAc,CACnCC,GAAI,uBACJC,eAAgB,mBAGlBzE,KAAA0E,iBAAmBJ,EAAKC,cAAc,CACpCC,GAAI,mBACJC,eAAgB,eAGlBzE,KAAA2E,mBAAqBL,EAAKC,cAAc,CACtCC,GAAI,qBACJC,eAAgB,iBAGlBzE,KAAA4E,0BAA4BN,EAAKC,cAAc,CAC7CC,GAAI,4BACJC,eAAgB,yBAGlBzE,KAAA6E,4BAA8BP,EAAKC,cAAc,CAC/CC,GAAI,8BACJC,eAAgB,2BAoBVzE,KAAA8E,UAAoB,GACpB9E,KAAA+E,YAAsB,EACtB/E,KAAAgF,OAAkB,MA+BlBhF,KAAAiF,cAAwB,EAIxBjF,KAAAkF,iBAA0C,GAmalDlF,KAAAmF,wBAA0BC,GAAS,WACjC5B,EAAKsB,UAAY,E,GAChB,KA+FH9E,KAAAqF,gBAAkBD,GAAS,WACzB5B,EAAK8B,sBAAsBjE,KAAK,CAAEZ,WAAY+C,EAAK/C,aAEnD,GAAI+C,EAAK+B,gBAAgBzD,OAAQ,CAC/B0B,EAAKgC,SAAShC,EAAKiC,oB,KACd,CACLjC,EAAKgC,SAAShC,EAAKkC,sB,IAEpB,K,cArnB0C,M,aACD,M,iEAGK,M,mBAChB,M,kBACe,G,cACpB,M,YACF,M,eACG,M,iBACCpB,EAAKC,cAAc,CAC/CC,GAAI,0BACJC,eAAgB,mBAChBkB,YAAa,qC,uBAEqBrB,EAAKC,cAAc,CACrDC,GAAI,2BACJC,eAAgB,SAChBkB,YAAa,qC,wBAEsBrB,EAAKC,cAAc,CACtDC,GAAI,qBACJC,eAAgB,eAChBkB,YAAa,iD,eA4Be,M,gBACC,M,kBACC,E,CAkBhChG,OAAAC,eAAIgG,EAAA9F,UAAA,eAAY,C,IAAhB,WACE,OAAO+F,MAAMC,KAAK9F,KAAKK,GAAG0F,iBAAiB,a,uCAE7CpG,OAAAC,eAAIgG,EAAA9F,UAAA,mBAAgB,C,IAApB,WACE,OAAO+F,MAAMC,KAAK9F,KAAKK,GAAG2F,WAAYD,iBAAiB,a,uCAEzDpG,OAAAC,eAAIgG,EAAA9F,UAAA,eAAY,C,IAAhB,WAEE,OAAOE,KAAKiG,iBAAiBhD,OAAOjD,KAAKkG,a,uCAE3CvG,OAAAC,eAAIgG,EAAA9F,UAAA,mBAAgB,C,IAApB,WACE,OAAOE,KAAKmG,aAAaC,QACvB,SAACC,GAAW,OAACA,EAAOC,UAAUC,SAAS,YAAcF,EAAOC,UAAUC,SAAS,eAAnE,G,uCAMhB5G,OAAAC,eAAIgG,EAAA9F,UAAA,aAAU,C,IAAd,WACE,OAAOE,KAAKwG,cAAgBxG,KAAKwG,cAAcC,MAAQ,E,uCAEzD9G,OAAAC,eAAIgG,EAAA9F,UAAA,kBAAe,C,IAAnB,eAAA0D,EAAAxD,KACE,OAAOA,KAAKkG,aAAaE,QAAO,SAACC,GAAM,IAAA1F,EACrC,OAAAA,EAAA0F,EAAO/F,eAAW,MAAAK,SAAA,SAAAA,EAAEJ,cAAcC,SAASgD,EAAK/C,WAAWF,cAAc,G,uCAQ7EZ,OAAAC,eAAIgG,EAAA9F,UAAA,kBAAe,C,IAAnB,WACE,OAAO+F,MAAMC,KAAK9F,KAAKK,GAAG0F,iBAAiB,cAAcK,QAAO,SAACM,GAAM,OAAAA,EAAEpE,QAAF,G,uCAGzE3C,OAAAC,eAAIgG,EAAA9F,UAAA,cAAW,C,IAAf,WACE,OAAOE,KAAKkG,aAAaS,OAAM,SAACN,GAAW,OAAAA,EAAO/D,QAAP,G,uCAI7C3C,OAAAC,eAAIgG,EAAA9F,UAAA,sBAAmB,C,IAAvB,WACE,OAAOwE,EAAKC,cACV,CACEC,GAAI,4BACJC,eAAgB,qEAChBkB,YAAa,wFAEf,CAAEiB,WAAY5G,KAAKuF,gBAAgBzD,Q,uCAIvCnC,OAAAC,eAAIgG,EAAA9F,UAAA,wBAAqB,C,IAAzB,WACE,OAAOwE,EAAKC,cAAc,CACxBC,GAAI,yBACJC,eAAgB,kDAChBkB,YAAa,gE,uCAKjBC,EAAA9F,UAAA+G,gBAAA,WACE7G,KAAK8G,UAAY,I,EAInBlB,EAAA9F,UAAAiH,iBAAA,WACE/G,KAAK8G,UAAY,K,EAInBlB,EAAA9F,UAAAkH,sBAAA,SAAsB/F,GACpB,IAAMoF,EAA8BpF,EAAG6B,OACvC9C,KAAKiH,YAAYZ,GACjB,IAAKrG,KAAKI,SAAU,CAElB,IAAKiG,EAAO/D,SAAU,CACpBtC,KAAKkH,aAAab,GAClB,IAAMvD,EAAS,CAAEqE,cAAed,EAAQe,gBAAiB,CAACf,IAC1DrG,KAAKqH,gBAAgBhG,KAAKyB,GAG1B,IAAMwE,EAAQ,IAAIC,YAAY,SAAU,CAAEzE,OAAQA,IAElD9C,KAAKK,GAAGmH,cAAcF,E,CAExBtH,KAAKyH,O,KACA,CACLzH,KAAKkH,aAAab,GAKlB,IAAMqB,EAAuBrB,EAAOC,UAAUC,SAAS,aACvD,IAAMoB,EAAsCD,EAAc1H,KAAK4H,wBAAwBvB,GAAUA,EACjG,IAAMe,EAAkBpH,KAAKkG,aAAaE,QAAO,SAACyB,GAAM,OAAAA,EAAEvF,QAAF,IACxD,IAAMQ,EAAS,CAAEqE,cAAeQ,EAAgBP,gBAAiBA,GACjEpH,KAAKqH,gBAAgBhG,KAAKyB,GAG1B,IAAMwE,EAAQ,IAAIC,YAAY,SAAU,CAAEzE,OAAQA,IAElD9C,KAAKK,GAAGmH,cAAcF,E,GAK1B1B,EAAA9F,UAAAgI,iBAAA,WAEE9H,KAAKyH,O,EAIP7B,EAAA9F,UAAAiI,cAAA,SAAc9G,GACZjB,KAAKgI,OAAO/G,EAAG6B,O,EAIjB8C,EAAA9F,UAAAmI,gBAAA,SAAgBhH,GACdjB,KAAKkI,SAASjH,EAAG6B,O,EAInB8C,EAAA9F,UAAAqI,kBAAA,WACEnI,KAAKiH,YAAYjH,KAAKoI,iBAAiB,G,EAIzCxC,EAAA9F,UAAAuI,iBAAA,WACErI,KAAKiH,YAAYjH,KAAKoI,iBAAiBpI,KAAKoI,iBAAiBtG,OAAS,G,EAIxE8D,EAAA9F,UAAAwI,mBAAA,WACEtI,KAAKyH,O,EAIP7B,EAAA9F,UAAAyI,iBAAA,SAAiBtH,GAGf,IAAKjB,KAAKwI,YAAYvH,EAAG6B,OAAOV,eAAgB,CAC9C,IAAMkF,EAAQ,IAAIC,YAAY,QAE9BD,EAAMlF,cAAgBnB,EAAG6B,OAAOV,cAChCpC,KAAKK,GAAGmH,cAAcF,E,GAK1B1B,EAAA9F,UAAA2I,YAAA,SAAYxH,GACV,IAAKjB,KAAKwI,YAAYvH,EAAGyH,QAAwB,CAC/C1I,KAAKyH,O,GAIT7B,EAAA9F,UAAA6I,qBAAA,WACE3I,KAAK4I,YAAc5I,KAAK6I,qBAAuB7I,KAAK8I,kB,EAGtDlD,EAAA9F,UAAAgJ,iBAAA,WACE9I,KAAKmG,aAAa4C,SAAQ,SAAClB,GAAC,OAAMA,EAAEvF,SAAW,IAAnB,IAC5BtC,KAAKgJ,qBACLhJ,KAAKiJ,gBACL,IAAMnG,EAAS,CAAEqE,cAAe,KAAMC,gBAAiBpH,KAAKkG,cAC5DlG,KAAKqH,gBAAgBhG,KAAKyB,E,EAG5B8C,EAAA9F,UAAA+I,mBAAA,WACE7I,KAAKmG,aAAa4C,SAAQ,SAAClB,GAAC,OAAMA,EAAEvF,SAAW,KAAnB,IAC5BtC,KAAKgJ,qBACLhJ,KAAKiJ,gBACL,IAAMnG,EAAS,CAAEqE,cAAe,KAAMC,gBAAiB,IACvDpH,KAAKqH,gBAAgBhG,KAAKyB,E,EAG5B8C,EAAA9F,UAAAoJ,iBAAA,SAAiBjI,GACf,GAAIjB,KAAKwI,YAAYvH,EAAGmB,eAA+B,CAErDnB,EAAGS,iB,GAIPkE,EAAA9F,UAAAqJ,sBAAA,SAAsBlI,GACpBjB,KAAKoJ,qBAAqB9C,UAAU+C,OAAO,SAC3C,GAAIrJ,KAAKwI,YAAYvH,EAAGmB,eAA+B,CAErDnB,EAAGS,iB,GAKPkE,EAAA9F,UAAAwJ,UAAA,SAAUrI,GACR,OAAQA,EAAGC,KACT,IAAK,YACH,GAAIlB,KAAKuJ,aAAe,MAAO,CAC7BtI,EAAGE,iBACHnB,KAAKwJ,KAAK,O,CAEZ,MAEF,IAAK,UACH,GAAIxJ,KAAKuJ,aAAe,MAAO,CAC7BtI,EAAGE,iBACHnB,KAAKwJ,KAAK,W,CAEZ,M,EAIN5D,EAAA9F,UAAAyD,kBAAA,eAAAC,EAAAxD,KACE,IAAKA,KAAKyJ,MAAO,CACfC,QAAQC,MACN,2G,CAIJ3J,KAAK4J,IAAM5J,KAAKK,GAAGmE,GAAKxE,KAAKK,GAAGmE,GAAKqF,IAErC,GAAIC,SAASC,KAAKzD,UAAUC,SAAS,wBAAyB,CAC5DvG,KAAK6G,iB,CAIP,GAAI7G,KAAKoH,gBAAgBtF,OAAS,EAAG,CACnC9B,KAAKoH,gBAAgB2B,SAAQ,SAACrC,GAC5BlD,EAAK0B,iBAAiBhF,KAAKwG,E,SAGxB,IAAK1G,KAAKI,SAAU,CACzBJ,KAAKkH,aAAalH,KAAKmG,aAAa,G,GAIxCP,EAAA9F,UAAAkK,iBAAA,WACEhK,KAAKiK,gBAAgB5I,OACrBrB,KAAKkK,WAAW5D,UAAU6D,IAAI,UAC9BC,EAAYpK,KAAKK,IAGjB,GAAIL,KAAKqK,UAAW,CAClBrK,KAAKsK,UAAUC,MAAMF,UAAYrK,KAAKqK,S,CAGxC,GAAIrK,KAAKI,SAAU,CACjBJ,KAAKwK,wB,CAEPxK,KAAKiJ,e,EAGPrD,EAAA9F,UAAA2K,oBAAA,WACE,GAAIzK,KAAKI,SAAU,CAEjB,IAAMsK,EAA0B1K,KAAKoI,iBAAiBhC,QAAO,SAACC,GAAW,OAAAA,EAAOC,UAAUC,SAAS,YAA1B,IACzEmE,EAAwB3B,SAAQ,SAAC1C,EAAQsE,GACvC,GAAIA,IAAQD,EAAwB5I,OAAS,EAAG,CAC9CuE,EAAOC,UAAU6D,IAAI,O,KAChB,CACL9D,EAAOC,UAAU+C,OAAO,O,OAMhCzD,EAAA9F,UAAAkI,OAAA,SAAO3H,GACL,IAAMuK,EAA8B5K,KAAKoI,iBACzC,GAAIpI,KAAK6K,YAAa,CACpBD,EAAaE,QAAQ9K,KAAK6K,Y,CAE5B,GAAI7K,KAAKwG,cAAe,CACtBoE,EAAaE,QAAQ9K,KAAKwG,c,CAG5B,IAAMuE,EAASH,EAAaA,EAAaI,QAAQ3K,GAAM,IAAMuK,EAAaA,EAAa9I,OAAS,GAEhG,GAAIiJ,EAAQ,CACV/K,KAAKiH,YAAY8D,E,GAIrBnF,EAAA9F,UAAAoI,SAAA,SAAS7H,GACP,IAAMuK,EAA8B5K,KAAKoI,iBACzC,GAAIpI,KAAK6K,YAAa,CACpBD,EAAaE,QAAQ9K,KAAK6K,Y,CAE5B,GAAI7K,KAAKwG,cAAe,CACtBoE,EAAaE,QAAQ9K,KAAKwG,c,CAG5B,IAAMyE,EAASL,EAAaA,EAAaI,QAAQ3K,GAAM,IAAMuK,EAAa,GAE1E,GAAIK,EAAQ,CACVjL,KAAKiH,YAAYgE,E,GAIrBrF,EAAA9F,UAAA0J,KAAA,SAAK0B,GAAL,IAAA1H,EAAAxD,KACE,IAAKA,KAAKuB,SAAU,CAClB,IAAM4J,EAAWnL,KAAKK,GAAG+K,aACzB,IAAMC,EAAerL,KAAKsL,SAASF,aACnCpL,KAAKgF,OAASuG,EACZvL,KAAKK,GACLL,KAAKkK,WAELiB,EAEAE,GAEFrL,KAAKuJ,WAAa,KAClBvJ,KAAKkK,WAAW5D,UAAU+C,OAAO,UAEjCmC,OAAOC,uBAAsB,WAC3B,OAAQP,GACN,IAAK,OAGH,GAAI1H,EAAKkI,OAAQ,CACflI,EAAKgD,cAAcmF,QACnBnI,EAAK8G,UAAUsB,UAAY,C,KACtB,CACLpI,EAAK0E,SAAS1E,EAAK4E,iBAAiBhC,QAAO,SAACM,GAAM,OAAAA,EAAEpE,QAAF,IAAYuJ,OAAO,GAAG,G,CAE1E,MACF,IAAK,WAGH,GAAIrI,EAAKkI,OAAQ,CACflI,EAAKyD,YAAYzD,EAAK4E,iBAAiB5E,EAAK4E,iBAAiBtG,OAAS,G,KACjE,CACL0B,EAAKwE,OAAOxE,EAAK4E,iBAAiBhC,QAAO,SAACM,GAAM,OAAAA,EAAEpE,QAAF,IAAY,G,CAE9D,MACF,QAIE,GAAIkB,EAAKkI,OAAQ,CACflI,EAAKgD,cAAcmF,QACnBnI,EAAK8G,UAAUsB,UAAY,C,MACtB,GAAIpI,EAAK4D,gBAAgBtF,OAAS,EAAG,CAC1C0B,EAAKyD,YAAYzD,EAAK4E,iBAAiBhC,QAAO,SAACM,GAAM,OAAAA,EAAEpE,QAAF,IAAY,G,KAC5D,CACLkB,EAAKyD,YAAYzD,EAAK4E,iBAAiB,G,CAEzC,M,MAMVxC,EAAA9F,UAAA2H,MAAA,SAAMqE,GAAN,IAAAtI,EAAAxD,KAAM,GAAA8L,SAAA,GAAAA,EAAA,IAA2B,CAC/B,GAAI9L,KAAKuJ,WAAY,CACnBvJ,KAAKuJ,WAAa,MAClBvJ,KAAKmG,aAAa4F,KAAI,SAACC,GAAC,OAAMA,EAAEjI,QAAU,KAAlB,IAExByH,OAAOS,YAAW,WAChBzI,EAAK0G,WAAW5D,UAAU6D,IAAI,UAC9B,GAAI3G,EAAKpD,SAAU,CACjBoD,EAAKgH,wB,CAGP,GAAIhH,EAAKkI,OAAQ,CACflI,EAAKgD,cAAcC,MAAQ,GAC3BjD,EAAK8B,sBAAsBjE,KAAK,CAAEZ,WAAY+C,EAAK/C,Y,CAMrD,GAAIqL,EAAa,CACftI,EAAK8H,SAASK,O,IAEf,I,GAIP/F,EAAA9F,UAAA0K,uBAAA,eAAAhH,EAAAxD,KAGEA,KAAKkG,aAAa6C,SAAQ,SAAC1C,EAAQsE,GACjC,IAAMuB,EAAkB1I,EAAKyC,iBAAiB0E,GAC9C,GAAItE,EAAO/D,SAAU,CACnB+D,EAAOC,UAAU6D,IAAI,UACrB+B,EAAgB5F,UAAU+C,OAAO,S,KAC5B,CACLhD,EAAOC,UAAU+C,OAAO,UACxB6C,EAAgB5F,UAAU6D,IAAI,S,MAKpCvE,EAAA9F,UAAAmH,YAAA,SAAYZ,GACVrG,KAAKmG,aAAa4C,SAAQ,SAACiD,GAAC,OAAMA,EAAEjI,QAAUiI,IAAM3F,CAAxB,IAI5BA,EAAO8F,eAAe,CAAEC,MAAO,YAK/BZ,OAAOS,YAAW,WAAM,OAAA5F,EAAO8F,eAAe,CAAEC,MAAO,WAA/B,GAA6C,IAErE/F,EAAOsF,O,EAGT/F,EAAA9F,UAAAoH,aAAA,SAAab,GAEX,GAAIA,EAAOC,UAAUC,SAAS,aAAc,CAE1C,IAAM8F,EAAsBrM,KAAK4H,wBAAwBvB,GACzDgG,EAAoB/J,UAAY+J,EAAoB/J,SACpD8H,EAAYpK,KAAKK,G,MACZ,GAAIL,KAAKI,SAAU,CACxBiG,EAAO/D,UAAY+D,EAAO/D,Q,KACrB,CACLtC,KAAKkG,aAAa6C,SAAQ,SAACrC,GAAC,OAAMA,EAAEpE,SAAWoE,IAAML,CAAzB,G,CAI9B,GAAIrG,KAAK6K,YAAa,CACpB7K,KAAKgJ,oB,CAEPhJ,KAAKiJ,e,EAIPrD,EAAA9F,UAAAwM,mBAAA,SAAmBrL,GAAnB,IAAAuC,EAAAxD,KACE,IAAMuM,EAAYtL,EAAG6B,OAAOvC,cAE5B,IAAKP,KAAK8E,UAAW,CAEnB9E,KAAKoI,iBAAiBW,SAAQ,SAAC1C,EAAQsE,GACrC,GAAItE,EAAOtC,QAAS,CAClBP,EAAKuB,YAAc4F,C,KAKzB3K,KAAK8E,WAAayH,EAElB,IAAIC,EAAYxM,KAAKyM,iBAAiBzM,KAAKoI,iBAAkBpI,KAAK+E,YAAc,EAAG/E,KAAKoI,iBAAiBtG,QACzG,IAAK0K,EAAW,CAEdA,EAAYxM,KAAKyM,iBAAiBzM,KAAKoI,iBAAkB,EAAGpI,KAAK+E,Y,CAGnE,GAAIyH,EAAW,CAEbxM,KAAKiH,YAAYuF,E,CAEnBxM,KAAKmF,yB,EAOPS,EAAA9F,UAAA2M,iBAAA,SAAiBC,EAA6BC,EAAoBC,GAAlE,IAAApJ,EAAAxD,KACE,IAAIoD,EAAoC,KACxC,IAAIyJ,EAAiBH,EAAKb,MAAMc,EAAYC,GAI5CC,EAAe9D,SAAQ,SAAC1C,GACtB,IAAMoD,EAAQpD,EAAO/F,YACrB,IAAK8C,GAASqG,GAASA,EAAMlJ,cAAcuM,WAAWtJ,EAAKsB,WAAY,CACrE1B,EAAQiD,C,KAIZ,OAAOjD,C,EAGTwC,EAAA9F,UAAA8H,wBAAA,SAAwBvH,GAGtB,IAAMqH,EAAcrH,EAAGiG,UAAUC,SAAS,aAC1C,OAAOmB,EACH1H,KAAKkG,aAAalG,KAAKiG,iBAAiB+E,QAAQ3K,IAChDL,KAAKiG,iBAAiBjG,KAAKkG,aAAa8E,QAAQ3K,G,EAGtDuF,EAAA9F,UAAA0I,YAAA,SAAYnI,G,MAEV,OAAOA,IAAOL,KAAKK,IAAML,KAAKK,GAAGkG,SAASlG,MAAOM,EAAAX,KAAKK,GAAG2F,cAAU,MAAArF,SAAA,SAAAA,EAAE4F,SAASlG,G,EAIhFuF,EAAA9F,UAAAiN,aAAA,WAEE,IAAMC,EAAQnD,IACd7J,KAAKiN,eAAezI,GAAK,aAAAvB,OAAa+J,GACtChN,KAAKsL,SAAS/I,aAAa,mBAAoB,aAAAU,OAAa+J,G,EAG9DpH,EAAA9F,UAAAoN,qBAAA,eAAA1J,EAAAxD,KACE,OACE2D,EAAA,OACEa,GAAG,YACHR,MAAOhE,KAAKmN,aAAe,gBAAkB,GAC7CjJ,IAAK,SAAC7D,GAAE,OAAMmD,EAAKyJ,eAAiB5M,CAA5B,EAAiD,YAC/C,YAAW,cACT,QAEXL,KAAKmN,a,EAKZvH,EAAA9F,UAAAsN,oBAAA,SAAoBnM,GAElB,IAAKjB,KAAKK,GAAGkG,SAAStF,EAAGmB,eAAwB,CAC/CpC,KAAKyH,MAAM,OACXzH,KAAKqN,gBAAgBhM,OACrBrB,KAAKsN,mBAAmBjM,M,GAK5BuE,EAAA9F,UAAAyN,cAAA,SAActM,GACZ,IAAMZ,EAAKY,EAAGyH,OACd,OAAQzH,EAAGC,KACT,IAAK,YACHD,EAAGE,iBACHnB,KAAKkI,SAASjH,EAAGyH,QACjB,MACF,IAAK,UACHzH,EAAGE,iBACHnB,KAAKgI,OAAO/G,EAAGyH,QACf,MACF,IAAK,SACHzH,EAAGE,iBACHnB,KAAKyH,QACL,MACF,IAAK,QACH,GAAIpH,IAAOL,KAAK6K,YAAa,CAC3B5J,EAAGE,iBACHnB,KAAK2I,uBACL3I,KAAKyH,O,CAEP,MACF,IAAK,IACH,GAAIpH,IAAOL,KAAK6K,YAAa,CAC3B5J,EAAGE,iBACHnB,KAAK2I,sB,CAEP,M,EAcN/C,EAAA9F,UAAAmJ,cAAA,eAAAzF,EAAAxD,KACEA,KAAKkF,iBAAmBlF,KAAKkG,aAC1BE,QAAO,SAACM,GAAM,OAAAA,EAAEpE,QAAF,IACdyJ,KAAI,SAACyB,GAAC,OAAOA,EAAElH,UAAUC,SAAS,UAAYiH,EAAIhK,EAAKoE,wBAAwB4F,EAAzE,IAGT,GAAIxN,KAAKI,SAAU,CAEjB,IAAMqN,EAAuB,GAC7B,IAAMC,EAAgBlC,OAAOmC,iBAAiB3N,KAAKsL,UAGnD,IAAMsC,EAAcC,SAASH,EAAcI,iBAAiB,gBAAgBjC,MAAM,GAAI,IACtF,IAAMkC,EAAeF,SAASH,EAAcI,iBAAiB,iBAAiBjC,MAAM,GAAI,IAExF,IAAMmC,EAAiBhO,KAAKsL,SAAS2C,YAAcL,EAAcG,EAAeN,EAEhF,IAAIS,EAAgBlO,KAAKkF,iBAAiB6G,KAAI,SAACrF,GAAM,OAAAA,EAAEV,WAAYmI,cAAc,mBAAoBF,WAAhD,IAErD,IAAIG,EAAoBF,EAAcG,QAAO,SAACC,EAAK5H,GAAM,OAAA4H,EAAM5H,CAAN,GAAS,GAClE1G,KAAKiF,cAAgB,EAErB,MAAOmJ,EAAoBJ,GAAkBhO,KAAKkF,iBAAiBpD,OAAS,EAAG,CAC7E9B,KAAKiF,gBACLmJ,GAAqBF,EAAcA,EAAcpM,OAAS,GAC1DoM,EAAcK,MACdvO,KAAKkF,iBAAiBqJ,K,IAK5B3I,EAAA9F,UAAAkJ,mBAAA,WACE,GAAIhJ,KAAK4I,YAAa,CACpB5I,KAAK6K,YAAYvK,YAAcN,KAAK2E,mBACpC3E,KAAKwF,SAASxF,KAAK4E,0B,KACd,CACL5E,KAAK6K,YAAYvK,YAAcN,KAAK0E,iBACpC,GAAI1E,KAAKoH,gBAAgBtF,SAAW,EAAG,CACrC9B,KAAKwF,SAASxF,KAAK6E,4B,IAKzBe,EAAA9F,UAAA0F,SAAA,SAASgJ,GAEP,GAAIxO,KAAKyO,aAAanO,cAAgBkO,EAAS,CAC7CA,GAAW,G,CAEbxO,KAAK0O,aAAeF,C,EAGtB5I,EAAA9F,UAAA6O,iBAAA,WACE,GAAI3O,KAAKI,UAAYJ,KAAKkF,iBAAiBpD,OAAS,EAAG,CACrD,OAAO6B,EAAA,YAAO3D,KAAK4O,Y,MACd,GAAI5O,KAAKI,UAAYJ,KAAK4I,aAAe5I,KAAKiF,cAAgB,EAAG,CACtE,OAAOjF,KAAK6O,kB,KACP,CACL,OAAO7O,KAAKkF,iBAAiB6G,KAAI,SAACrF,EAAGiE,GAAG,OACtChH,EAAA,YACGgH,EAAM,EAAI,KAAO,GACjBjE,EAAEpG,YAHiC,G,GAS5CsF,EAAA9F,UAAAgP,cAAA,WAEE,IAAK9O,KAAKI,UAAYJ,KAAKoH,gBAAgBtF,OAAS,GAAK9B,KAAKoH,gBAAgB,GAAGnH,QAAS,CACxF,OAAO0D,EAAA,QAAMK,MAAM,WAAWhE,KAAKoH,gBAAgB,GAAGnH,Q,GAI1D2F,EAAA9F,UAAAiP,oBAAA,WACE,GAAI/O,KAAKiF,cAAgB,IAAMjF,KAAK4I,YAAa,CAC/C,OACEjF,EAAA,YACEA,EAAA,QAAMK,MAAM,oBAAkB,IAAGhE,KAAKiF,e,GAM9CW,EAAA9F,UAAAkP,kBAAA,eAAAxL,EAAAxD,KACE,OACE2D,EAAA,OAAKK,MAAM,UACTL,EAAA,OAAKK,MAAM,sBAAsBE,IAAK,SAAC7D,GAAE,OAAMmD,EAAK4F,qBAAuB/I,CAAlC,GACvCsD,EAAA,OAAKK,MAAM,SACXL,EAAA,SACEO,IAAK,SAAC7D,GAAE,OAAMmD,EAAKgD,cAAgBnG,CAA3B,EACR2D,MAAM,cACNH,KAAK,WAAU,gBACA,QAAAZ,OAAQjD,KAAK4J,KAAK,gBAClB5J,KAAKuJ,WAAa,OAAS,QAC1C0F,UAAW,SAAChO,GAAO,OAAAuC,EAAK+J,cAActM,EAAnB,EACnBiO,QAAS,WAAM,OAAA1L,EAAK4F,qBAAqB9C,UAAU6D,IAAI,QAAxC,EACfgF,OAAQ,SAAClO,GAAO,OAAAuC,EAAK2F,sBAAsBlI,EAA3B,EAChBmO,QAAS,WAAM,OAAA5L,EAAK6B,iBAAL,EACfuJ,YAAa5O,KAAKqP,qB,EAO5BzJ,EAAA9F,UAAAwP,0BAAA,WACE,OAAO3L,EAAA,OAAKK,MAAM,0BAA0BhE,KAAK0F,sB,EAGnDE,EAAA9F,UAAAyP,sBAAA,eAAA/L,EAAAxD,KACE,GAAIA,KAAKwP,WAAaxP,KAAKI,UAAYJ,KAAKS,YAAc,GAAI,CAC5D,OACEkD,EAAA,UACEO,IAAK,SAAC7D,GAAE,OAAMmD,EAAKqH,YAAcxK,CAAzB,EACR2D,MAAM,aACNyL,QAAS,WAAM,OAAAjM,EAAKmF,sBAAL,EACfsG,UAAW,SAAChO,GAAO,OAAAuC,EAAK+J,cAActM,EAAnB,EACnB6C,SAAS,MAER9D,KAAK4I,YAAc5I,KAAK2E,mBAAqB3E,KAAK0E,iB,GAM3DkB,EAAA9F,UAAA4P,uBAAA,WACE,OAAO7J,MAAMC,KAAK9F,KAAKK,GAAGsP,UAAU5D,KAAI,SAAC1F,GACvC,OACE1C,EAAA,aAAWK,MAAM,YAAY1B,SAAW+D,EAA+B/D,UACpE+D,EAAO/F,Y,KAMhBsF,EAAA9F,UAAA4D,OAAA,W,MAAA,IAAAF,EAAAxD,KACE,IAAM4P,GAAWC,EAAA,CACfrL,GAAI,aAAAvB,OAAajD,KAAK4J,MACtBiG,EAAC,YAAa7P,KAAKuB,SACnBsO,EAAC,iBAAkB,QAAA5M,OAAQjD,KAAK4J,KAChCiG,EAAC,mBAAoB,SAAA5M,OAASjD,KAAK4J,IAAG,eAAA3G,OAAcjD,KAAK4J,KACzDiG,EAAC,oBAAqB,YACtBA,EAAC,iBAAkB7P,KAAKuJ,WAAa,OAAS,QAC9CsG,EAAAJ,QAAS,kBAAOjM,EAAK+F,WAAa/F,EAAKiE,QAAUjE,EAAKgG,MAA7C,E,GAGX,OACE7F,EAACC,EAAI,CAACuL,OAAQ,SAAClO,GAAmB,OAAAuC,EAAK4J,oBAAoBnM,EAAzB,GAChC0C,EAAA,OACEK,MAAO,WAAAf,OAAW6M,IAAY,WAAA7M,OAAUjD,KAAK+P,cAAa,KAAA9M,OACxDjD,KAAKgQ,SAAWhQ,KAAKmN,aAAe,UAAY,KAGlDxJ,EAAA,OAAKK,MAAM,iBACTL,EAAA,SAAOK,MAAM,QAAQQ,GAAI,SAAAvB,OAASjD,KAAK4J,KAAOqG,QAAS,aAAAhN,OAAajD,KAAK4J,MACtE5J,KAAKyJ,MAGJzJ,KAAKkQ,cACHvM,EAAA,QAAMK,MAAM,YACVL,EAAA,QAAMK,MAAM,WAAWhE,KAAKqE,iBAC5BV,EAAA,sBAAkB,QAAM,MACnB,KAOfA,EAAA,OAAKK,MAAM,kBACTL,EAAA,SAAAhE,OAAAwQ,OAAA,GACMP,EAAW,CACf5L,MAAO,mBAAAf,OAAmBjD,KAAK8G,UAAY,kBAAoB,IAC/D5C,IAAK,SAAC7D,GAAE,OAAMmD,EAAK8H,SAAWjL,CAAtB,EACR8O,OAAQ,SAAClO,GAAO,OAAAuC,EAAK0F,iBAAiBjI,EAAtB,EAChBiO,QAAS,WAAM,OAAA1L,EAAKiE,OAAL,IAEf9D,EAAA,QACEK,MACEhE,KAAKoH,gBAAgBtF,OAAS,GAAK9B,KAAKoH,gBAAgBhB,QAAO,SAACM,GAAM,OAAAA,EAAEzG,OAAF,IAAW6B,OAAS,EACtF,6BACA,mBAGN6B,EAAA,QAAMK,MAAM,eAAehE,KAAK2O,oBAC/B3O,KAAK8O,iBAEP9O,KAAK+O,uBAERpL,EAAA,OACEK,MAAO,YAAAf,OAAYjD,KAAKuJ,WAAa,OAAS,GAAE,KAAAtG,OAAIjD,KAAKgF,OAAS,UAAY,IAC9Ed,IAAK,SAAC7D,GAAE,OAAMmD,EAAK0G,WAAa7J,CAAxB,GAEPL,KAAK0L,QAAU1L,KAAKgP,oBACrBrL,EAAA,OACEa,GAAI,QAAAvB,OAAQjD,KAAK4J,KACjB5F,MAAM,kBACNF,UAAW,EACXD,KAAK,UAAS,uBACQ7D,KAAKI,SAAW,OAAS,KAAI,kBAClC,SAAA6C,OAASjD,KAAK4J,KAC/B1F,IAAK,SAAC7D,GAAE,OAAMmD,EAAK8G,UAAYjK,CAAvB,GAEPL,KAAK0L,QAAU1L,KAAKuF,gBAAgBzD,SAAW,GAAK9B,KAAKsP,4BACzDtP,KAAKuP,wBACLvP,KAAKI,UAAYJ,KAAK0P,yBACvB/L,EAAA,eAGH3D,KAAKkN,uBACNvJ,EAAA,OACEa,GAAG,eAAc,YACP,SACVR,MAAM,UACNE,IAAK,SAAC7D,GAAE,OAAMmD,EAAKiL,aAAepO,CAA1B,GAEPL,KAAK0O,gB,iWAn1BD,I"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["wmNavigationCss","Navigation","this","mainNavigationMessage","intl","formatMessage","id","defaultMessage","description","openTooltipMessage","closeTooltipMessage","throttledRerender","throttle","forceUpdate","el","isCollapsible","window","innerWidth","ariaExpanded","open","toString","undefined","toggleTabbingOn","isTabbing","toggleTabbingOff","closeOnEscape","ev","key","handleWindowResize","handleHamburgerClicked","handleClickOnItem","handleStateChange","wmNavigationStateChanged","emit","expand","collapse","componentWillLoad","document","body","classList","contains","focus","btn","shadowRoot","querySelector","firstItem","redirectFocusFromBody","activeElement","tagName","relatedTarget","tabIndex","addEventListener","bind","setTimeout","toggleEl","removeEventListener","hamburgerBtn","focusLastItem","items","querySelectorAll","lastItem","Array","from","pop","renderOverlay","h","class","onClick","render","Host","role","tabindex","onFocus","ref","icon","tooltip","wmNavigationHamburgerCss","NavigationHamburger","showNavMessage","tooltipEl","getElementById","handleNavigationStateChanged","target","navId","console","error","showTooltip","tooltipText","textContent","style","setProperty","transitionDelay","opacity","hasNoWhitespace","match","add","remove","removeProperty","tooltipVisible","hideTooltip","showTooltipForKeyboardUsers","handleClick","wmNavigationHamburgerClicked","onMouseEnter","onMouseLeave","onBlur","wmNavigationItemCss","NavigationItem","active","href","wmNavigationItemClicked","text"],"sources":["./src/components/wm-navigation/wm-navigation.scss?tag=wm-navigation&encapsulation=shadow","./src/components/wm-navigation/wm-navigation.tsx","./src/components/wm-navigation/wm-navigation-hamburger.scss?tag=wm-navigation-hamburger&encapsulation=shadow","./src/components/wm-navigation/wm-navigation-hamburger.tsx","./src/components/wm-navigation/wm-navigation-item.scss?tag=wm-navigation-item&encapsulation=shadow","./src/components/wm-navigation/wm-navigation-item.tsx"],"sourcesContent":[":host {\n z-index: 10;\n}\n\n:host([aria-expanded=\"true\"]) {\n z-index: 5000;\n}\n\n.tray {\n @include box-shadow(0 0 14px 0 rgba(0, 0, 0, 0.14));\n display: flex;\n flex-direction: column;\n width: rem-calc(121);\n background-color: $light-background;\n overflow-x: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n font-size: rem-calc(14);\n height: 100%;\n}\n\n.navlist {\n margin: 0;\n padding: 0;\n}\n\n.toggle-wrapper {\n display: none;\n}\n\n/* COLLAPSIBLE STYLES */\n@media screen and (max-width: 1023px) {\n .tray {\n @include transition(transform 0.33s ease);\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n transform: translateX(-100%);\n\n ul {\n visibility: hidden;\n }\n\n .toggle-wrapper {\n display: inline-block;\n min-height: 5rem;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n }\n\n :host([aria-expanded=\"true\"]) {\n .tray {\n transform: translateX(0);\n\n ul {\n visibility: visible;\n }\n }\n }\n\n .overlay {\n width: 100vw;\n height: 100vh;\n max-width: none;\n max-height: none;\n position: fixed !important;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n transform: translate(0%, 0%);\n background-color: rgba(25, 25, 25, 0.4);\n @include transition(opacity 0.5s ease-out);\n }\n}\n","import {\n h,\n Component,\n Element,\n Prop,\n State,\n Listen,\n Host,\n Watch,\n Event,\n EventEmitter,\n forceUpdate,\n} from \"@stencil/core\";\nimport { intl, throttle } from \"../../global/functions\";\n\n@Component({\n tag: \"wm-navigation\",\n styleUrl: \"wm-navigation.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class Navigation {\n @Element() el!: HTMLWmNavigationElement;\n toggleEl!: HTMLWmButtonElement;\n @Prop({ reflect: true, mutable: true }) open: boolean = false;\n\n @State() isTabbing: boolean = false;\n @Event() wmNavigationStateChanged!: EventEmitter;\n\n private mainNavigationMessage: string = intl.formatMessage({\n id: \"navigation.mainNavigation\",\n defaultMessage: \"Main\",\n description: \"Label describing the site navigation, for screen reader users\",\n });\n\n private openTooltipMessage: string = intl.formatMessage({\n id: \"global.openVerb\",\n defaultMessage: \"Open\",\n description: \"For a button, to open a user interface element\",\n });\n\n private closeTooltipMessage: string = intl.formatMessage({\n id: \"global.closeVerb\",\n defaultMessage: \"Close\",\n description: \"For a button, to close a user interface element\",\n });\n\n get isCollapsible() {\n return window.innerWidth < 1024;\n }\n\n get ariaExpanded() {\n return this.isCollapsible\n ? // if component is in collapsible mode, set aria-expanded according to expanded state\n this.open.toString()\n : // otherwise, do not render attr at all\n undefined;\n }\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n }\n\n @Listen(\"keydown\")\n closeOnEscape(ev: KeyboardEvent) {\n if (ev.key === \"Escape\") {\n this.open = false;\n }\n }\n\n throttledRerender = throttle(() => forceUpdate(this.el), 50);\n\n @Listen(\"resize\", { target: \"window\" })\n handleWindowResize() {\n // for component to react when breakpoint is crossed\n // (doesn't rerender on window resize)\n this.throttledRerender();\n }\n\n @Listen(\"wmNavigationHamburgerClicked\", { target: \"window\" })\n handleHamburgerClicked() {\n this.open = !this.open;\n }\n\n @Listen(\"wmNavigationItemClicked\")\n handleClickOnItem() {\n this.open = false;\n }\n\n @Watch(\"open\")\n handleStateChange() {\n if (this.isCollapsible) {\n this.wmNavigationStateChanged.emit();\n this.open ? this.expand() : this.collapse();\n }\n }\n\n componentWillLoad() {\n if (document.body.classList.contains(\"wmcl-user-is-tabbing\")) {\n this.toggleTabbingOn();\n }\n\n this.el.focus = () => {\n // in addition to delegatesFocus, we need to highjack the focus method to send focus to the appropriate element based on the navigation's state\n const btn = this.open\n ? (this.el.shadowRoot!.querySelector(\".toggle\")! as HTMLWmButtonElement)\n : (document.querySelector(\"wm-navigation-hamburger\") as HTMLWmNavigationHamburgerElement);\n const firstItem = this.el.querySelector(\"wm-navigation-item\")! as HTMLWmNavigationItemElement;\n this.isCollapsible ? btn.focus() : firstItem.focus();\n };\n\n if (this.isCollapsible && this.open) {\n // hamburger needs to know if open was initially set to true\n this.wmNavigationStateChanged.emit();\n this.expand();\n }\n }\n\n redirectFocusFromBody(ev: FocusEvent) {\n // the 2nd check excludes the case when user clicks on the page when the nav is open,\n // which should not redirect focus\n if ((document.activeElement as HTMLElement).tagName === \"BODY\" && !ev.relatedTarget) {\n this.el.focus();\n }\n }\n\n expand() {\n // listen to focus on body and redirect to the component\n // this is to handle trap focus when user has left the page (e.g. went to the address bar)\n // and is tabbing back in\n document.body.tabIndex = 0;\n document.body.addEventListener(\"focus\", this.redirectFocusFromBody.bind(this), true);\n\n // wait for nav to be expanded otherwise tooltip will be misplaced.\n setTimeout(() => this.toggleEl.focus(), 250);\n //document.querySelector(\"wm-navigation\")!.shadowRoot!.querySelector(\".toggle\")!.focus()\n }\n\n collapse() {\n // rm event listener on body\n document.body.tabIndex = -1;\n document.body.removeEventListener(\"focus\", this.redirectFocusFromBody.bind(this));\n\n const hamburgerBtn = document.querySelector(\"wm-navigation-hamburger\");\n // should fail silently if el doesn't exist\n // (dev may have chosen not to use the hamburger component)\n if (hamburgerBtn) hamburgerBtn.focus();\n }\n\n focusLastItem() {\n const items = this.el.querySelectorAll(\"wm-navigation-item\");\n const lastItem = Array.from(items).pop() as HTMLWmNavigationItemElement;\n lastItem.focus();\n }\n\n renderOverlay() {\n return (\n <div\n class=\"overlay\"\n onClick={() => {\n this.open = false;\n }}\n ></div>\n );\n }\n\n render() {\n return (\n <Host role=\"navigation\" aria-expanded={this.ariaExpanded} aria-label={this.mainNavigationMessage}>\n {this.open ? this.renderOverlay() : \"\"}\n {this.isCollapsible && (\n <div class=\"trapfocus\" tabindex={this.open ? 0 : undefined} onFocus={() => this.focusLastItem()}></div>\n )}\n <div class=\"tray\">\n <div class=\"toggle-wrapper\">\n <wm-button\n ref={(el) => (this.toggleEl = el as HTMLWmButtonElement)}\n class={`toggle ${this.isTabbing ? \"user-is-tabbing\" : \"\"}`}\n button-type=\"navigational\"\n icon={this.open ? \"f156\" : \"f35c\"}\n icon-size=\"2rem\"\n tooltip={this.open ? this.closeTooltipMessage : this.openTooltipMessage}\n tooltip-position=\"left\"\n tabIndex={this.open ? undefined : -1}\n onClick={() => {\n this.open = !this.open;\n }}\n />\n </div>\n <ul class=\"navlist\">\n <slot />\n </ul>\n </div>\n {this.isCollapsible && (\n <div class=\"trapfocus\" tabindex={this.open ? 0 : undefined} onFocus={() => this.toggleEl.focus()}></div>\n )}\n </Host>\n );\n }\n}\n","button {\n display: none;\n width: 100%;\n height: 100%;\n border: none;\n box-shadow: none;\n transition: background-color 500ms cubic-bezier(0.4, 0, 0.2, 1);\n background-color: transparent;\n outline: none;\n padding: 0;\n\n &.user-is-tabbing:focus {\n @include focus-style;\n }\n\n &:hover {\n background-color: $button-default-hover;\n }\n}\n\n.icon {\n &:before {\n @include mdi-icon;\n content: \"\\f35c\";\n font-size: rem-calc(24);\n color: $button-default-text;\n }\n}\n\n@media screen and (max-width: 1023px) {\n :host {\n width: rem-calc(60);\n height: rem-calc(60);\n }\n\n button {\n display: initial;\n }\n}\n","import { h, Component, Element, Host, Prop, Listen, Event, EventEmitter, State } from \"@stencil/core\";\nimport { intl } from \"../../global/functions\";\n\n@Component({\n tag: \"wm-navigation-hamburger\",\n styleUrl: \"wm-navigation-hamburger.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class NavigationHamburger {\n @Element() el!: HTMLWmNavigationHamburgerElement;\n nav!: HTMLWmNavigationElement;\n\n @Prop() navId?: string;\n @Prop({ mutable: true }) tooltipVisible = false; // this is not part of the documented API but we need to expose as prop in order to change it from the focus method defined in WillLoad()\n\n @State() isTabbing?: boolean = false;\n @State() open: boolean = false;\n\n @Event() wmNavigationHamburgerClicked!: EventEmitter;\n\n showNavMessage = intl.formatMessage({\n id: \"navigation.showNavigation\",\n defaultMessage: \"Show navigation\",\n description: \"For user interface element opening a navigation menu\",\n });\n\n get tooltipEl(): HTMLElement {\n return document.getElementById(\"wm-tooltip\")!;\n }\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n }\n\n // this also works on initial load because event is fired then\n @Listen(\"wmNavigationStateChanged\", { target: \"document\" })\n handleNavigationStateChanged(ev: CustomEvent) {\n this.open = (ev.target! as HTMLWmNavigationElement).open;\n }\n\n componentWillLoad() {\n if (document.body.classList.contains(\"wmcl-user-is-tabbing\")) {\n this.toggleTabbingOn();\n }\n if (!this.navId) {\n console.error(\"wm-navigation-hamburger: nav-id is a required prop\");\n }\n }\n\n showTooltip() {\n const tooltipText = this.showNavMessage;\n this.tooltipEl.textContent = tooltipText;\n this.tooltipEl.style.setProperty(\"--wmTooltipTop\", \"1.125rem\");\n this.tooltipEl.style.setProperty(\"--wmTooltipLeft\", \"2.75rem\");\n this.tooltipEl.style.transitionDelay = \"500ms\";\n this.tooltipEl.style.opacity = \"1\";\n\n // tooltip only has a maxWidth if it contains whitespace and can break\n const hasNoWhitespace = tooltipText!.match(/^[^\\s]+$/);\n if (hasNoWhitespace) {\n this.tooltipEl.classList.add(\"single-word\");\n this.tooltipEl.style.setProperty(\"--wmTooltipMaxWidth\", \"none\");\n } else {\n this.tooltipEl.classList.remove(\"single-word\");\n this.tooltipEl.style.removeProperty(\"--wmTooltipMaxWidth\");\n }\n\n // tooltip is only visible after the transition delay.\n // This also fixes an issue for keyboard users:\n // if they tab to a button out of screen bounds, the page scrolls\n // and hideTooltip() would be triggered before the tooltip would show\n setTimeout(() => {\n this.tooltipVisible = true;\n }, 500);\n }\n\n hideTooltip() {\n this.tooltipEl.style.transitionDelay = \"0s\";\n this.tooltipEl.style.opacity = \"0\";\n this.tooltipVisible = false;\n }\n\n showTooltipForKeyboardUsers() {\n if (this.isTabbing) {\n this.showTooltip();\n }\n }\n\n handleClick() {\n this.hideTooltip();\n this.wmNavigationHamburgerClicked.emit();\n }\n\n render() {\n return (\n <Host class={`hamburger ${this.open ? \"nav-open\" : \"nav-closed\"}`}>\n <button\n class={this.isTabbing ? \"user-is-tabbing\" : undefined}\n aria-expanded={this.open}\n aria-controls={this.navId}\n aria-label={this.showNavMessage}\n onMouseEnter={() => this.showTooltip()}\n onMouseLeave={() => this.hideTooltip()}\n onFocus={() => this.showTooltipForKeyboardUsers()}\n onBlur={() => this.hideTooltip()}\n onClick={() => this.handleClick()}\n >\n <span class=\"icon\"></span>\n </button>\n </Host>\n );\n }\n}\n",".link {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: inherit;\n text-decoration: none;\n min-height: rem-calc(72);\n text-align: center;\n padding: 1.25rem 0.5rem;\n font-weight: 500;\n outline: none;\n position: relative;\n\n &:hover {\n background-color: $light-background-hover;\n }\n\n .icon {\n font-size: rem-calc(22);\n color: $sidenav-icon;\n }\n\n .text {\n font-size: rem-calc(14);\n }\n\n &.user-is-tabbing:focus {\n // from P&SS\n box-shadow: inset 0 2px 2px 0 rgb(244 243 246 / 20%), inset 0 2px 2px 0 rgb(0 0 0 / 10%), inset 0 0 4px 3px #61279e;\n }\n}\n\n.link.active {\n background-color: $pale-lilac-gray;\n &:before {\n content: \"\";\n // link to or create semantic name\n background-color: $periwinkle;\n position: absolute;\n height: 100%;\n width: 5px;\n left: 0;\n }\n\n .text {\n // link to or create semantic name\n color: $periwinkle;\n }\n\n .icon {\n // link to or create semantic name\n color: $periwinkle;\n }\n}\n","import { h, Component, Prop, Element, Host, State, Listen, Event, EventEmitter } from \"@stencil/core\";\n\n@Component({\n tag: \"wm-navigation-item\",\n styleUrl: \"wm-navigation-item.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class NavigationItem {\n @Element() el!: HTMLWmNavigationItemElement;\n @Prop() href?: string;\n @Prop() text?: string;\n @Prop() active?: boolean;\n\n @State() isTabbing?: boolean = false;\n @Event() wmNavigationItemClicked!: EventEmitter;\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n }\n\n componentWillLoad() {\n if (document.body.classList.contains(\"wmcl-user-is-tabbing\")) {\n this.toggleTabbingOn();\n }\n }\n\n render() {\n return (\n <Host role=\"listitem\">\n <a\n class={`link ${this.active ? \"active\" : \"\"} ${this.isTabbing ? \"user-is-tabbing\" : \"\"}`}\n href={this.href}\n onClick={() => this.wmNavigationItemClicked.emit()}\n >\n <div class=\"icon\" aria-hidden=\"true\">\n <slot />\n </div>\n <div class=\"text\">{this.text}</div>\n </a>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["wmToggletipCss","Toggletip","this","tooltipMessage","intl","formatMessage","id","defaultMessage","tempTooltip","tooltip","tooltipText","componentWillLoad","validTooltipPlacement","label","console","error","includes","tooltipPosition","warn","handleKeydown","ev","key","preventDefault","isOpen","stopPropagation","close","toggleTabbingOn","isTabbing","toggleTabbingOff","handleClick","target","el","contains","announceToggletip","open","hideTooltip","handleBlur","liveRegionEl","innerHTML","showTooltip","setToggletipPosition","tooltipEl","classList","add","remove","setTimeout","shouldOpenUp","toggletipEl","replace","shouldOpenDown","shouldShiftRight","shouldShiftLeft","render","h","Host","class","type","onClick","onMouseEnter","onMouseLeave","onFocus","onBlur","ref","role"],"sources":["./src/components/wm-toggletip/wm-toggletip.scss?tag=wm-toggletip&encapsulation=shadow","./src/components/wm-toggletip/wm-toggletip.tsx"],"sourcesContent":["@mixin toggletipTriangleBase() {\n content: \"\";\n position: absolute;\n border: solid transparent;\n height: 0;\n width: 0;\n pointer-events: none;\n}\n@mixin toggletipTriangleTop() {\n @include toggletipTriangleBase();\n bottom: 100%;\n border-bottom-color: $charcoal;\n border-bottom-width: rem-calc(4);\n border-left-width: rem-calc(6);\n border-right-width: rem-calc(6);\n margin-left: rem-calc(-6);\n left: 50%;\n}\n@mixin toggletipTriangleBottom() {\n @include toggletipTriangleBase();\n top: 100%;\n border-top-color: $charcoal;\n border-top-width: rem-calc(4);\n border-left-width: rem-calc(6);\n border-right-width: rem-calc(6);\n margin-left: rem-calc(-6);\n left: 50%;\n}\n@mixin toggletipTriangleLeft() {\n @include toggletipTriangleBase();\n bottom: 100%;\n border-right-color: $charcoal;\n border-right-width: rem-calc(4);\n border-top-width: rem-calc(6);\n border-bottom-width: rem-calc(6);\n border-left-width: 0px;\n top: calc(50% - 6px);\n left: rem-calc(-3);\n}\n@mixin toggletipTriangleRight() {\n @include toggletipTriangleBase();\n bottom: 100%;\n border-left-color: $charcoal;\n border-left-width: rem-calc(4);\n border-top-width: rem-calc(6);\n border-bottom-width: rem-calc(6);\n border-right-width: 0px;\n top: calc(50% - 6px);\n right: rem-calc(-3);\n}\n@mixin toggletipTriangleTopLeft() {\n @include toggletipTriangleTop();\n margin-left: unset;\n left: rem-calc(14);\n}\n@mixin toggletipTriangleTopRight() {\n @include toggletipTriangleTop();\n left: unset;\n margin-left: unset;\n right: rem-calc(14);\n}\n@mixin toggletipTriangleBottomLeft() {\n @include toggletipTriangleBottom();\n margin-left: unset;\n left: rem-calc(14);\n}\n@mixin toggletipTriangleBottomRight() {\n @include toggletipTriangleBottom();\n left: unset;\n margin-left: unset;\n right: rem-calc(14);\n}\n\n:host,\nwm-toggletip {\n display: inline-block;\n position: relative;\n height: 40px;\n width: 40px;\n\n .button {\n display: flex;\n background: none;\n border: none;\n padding: 0;\n width: inherit;\n height: inherit;\n border-radius: 50%;\n justify-content: center;\n align-items: center;\n position: relative;\n cursor: pointer;\n &:before {\n @include mdi-icon;\n content: \"\\f2fc\";\n font-size: 16px;\n color: $charcoal;\n background: radial-gradient(white 40%, transparent 0%); // adds white \"font-color\" to icon\n }\n &:focus {\n outline: none;\n &.user-is-tabbing {\n @include focus-style;\n }\n }\n }\n\n .tooltip {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n font-family: inherit;\n font-size: rem-calc(14);\n text-transform: none;\n font-weight: normal;\n background: black;\n color: #fff;\n padding: rem-calc(6);\n line-height: normal;\n z-index: 30;\n white-space: nowrap;\n\n &.hover {\n clip: auto;\n width: auto;\n height: auto;\n opacity: 1;\n transition: opacity 500ms 500ms;\n padding: rem-calc(6);\n white-space: nowrap;\n }\n }\n\n .toggletip {\n position: absolute;\n max-width: rem-calc(220);\n width: max-content;\n padding: rem-calc(8) rem-calc(12);\n border-radius: rem-calc(3);\n background: $charcoal;\n color: white;\n font-size: 14px;\n z-index: 30;\n\n &.top {\n &:before {\n @include toggletipTriangleBottom();\n }\n }\n\n &.bottom {\n &:before {\n @include toggletipTriangleTop();\n }\n }\n\n &.right {\n &:before {\n @include toggletipTriangleLeft();\n }\n }\n\n &.left {\n &:before {\n @include toggletipTriangleRight();\n }\n }\n\n &.bottom-right {\n &:before {\n @include toggletipTriangleTopLeft();\n }\n }\n\n &.bottom-left {\n &:before {\n @include toggletipTriangleTopRight();\n }\n }\n\n &.top-right {\n &:before {\n @include toggletipTriangleBottomLeft();\n }\n }\n\n &.top-left {\n &:before {\n @include toggletipTriangleBottomRight();\n }\n }\n\n &.hidden {\n transform: scale(0, 0) !important; // ensure el doesn't take space on screen when hidden\n visibility: hidden;\n }\n }\n\n .toggletip,\n .tooltip {\n &.top {\n transform: translate(-50%, 0%);\n bottom: 40px;\n left: 20px;\n }\n\n &.bottom {\n transform: translate(-50%, 0%);\n top: 40px;\n left: 20px;\n }\n\n &.right {\n transform: translate(100%, calc(-50% - 20px));\n right: 0px;\n }\n\n &.left {\n transform: translate(-100%, calc(-50% - 20px));\n left: 0px;\n }\n\n &.bottom-right {\n top: 40px;\n left: 0px;\n }\n\n &.bottom-left {\n top: 40px;\n right: 0px;\n }\n\n &.top-right {\n bottom: 40px;\n left: 0px;\n }\n\n &.top-left {\n bottom: 40px;\n right: 0px;\n }\n }\n\n .sr-only {\n @include srOnly;\n }\n}\n","import { Component, Host, h, Element, Prop, State, Listen } from \"@stencil/core\";\n\nimport { shouldOpenUp, shouldOpenDown, shouldShiftLeft, shouldShiftRight, intl } from \"../../global/functions\";\nimport { TooltipPlacement } from \"../../global/interfaces\";\n@Component({\n tag: \"wm-toggletip\",\n styleUrl: \"wm-toggletip.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class Toggletip {\n @Element() el!: HTMLWmToggletipElement;\n\n @Prop() label?: string;\n @Prop({ mutable: true }) tooltip?: string; // mutable for deprecation transition\n @Prop() tooltipText?: string; // DEPRECATED\n get tempTooltip() {\n // instances of this.tempTooltip should be replaced with this.tooltip once tooltipText is fully phased out\n return this.tooltip || this.tooltipText;\n }\n @Prop({ mutable: true, reflect: true }) tooltipPosition: TooltipPlacement = \"bottom-right\";\n @State() isOpen: boolean = false;\n @State() isTabbing: boolean = false;\n\n private toggletipEl!: HTMLDivElement;\n private tooltipEl!: HTMLDivElement;\n private liveRegionEl!: HTMLDivElement;\n private tooltipMessage = intl.formatMessage({\n id: \"toggletip.moreInformation\",\n defaultMessage: \"More information\",\n });\n\n componentWillLoad() {\n const validTooltipPlacement = [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"top-right\",\n \"top-left\",\n \"bottom-right\",\n \"bottom-left\",\n ];\n\n if (!this.label) {\n console.error(\"wm-toggletip must have a label property\");\n }\n if (!this.tempTooltip) {\n console.error(\"wm-toggletip must have a tooltip property\");\n }\n if (!validTooltipPlacement.includes(this.tooltipPosition)) {\n console.error(\n `wm-toggletip: tooltip-position has an invalid value of \"${this.tooltipPosition}\", make sure to use one of the following values: ${validTooltipPlacement}`\n );\n }\n if (this.tooltipText) {\n console.warn(\"wm-toggletip: tooltip-text has been deprecated as of v3.1.0. Please use tooltip instead.\");\n }\n }\n\n @Listen(\"keydown\")\n handleKeydown(ev: KeyboardEvent) {\n switch (ev.key) {\n case \"Escape\":\n ev.preventDefault();\n if (this.isOpen) {\n ev.stopPropagation(); // prevent closing modal if within one\n this.close();\n }\n break;\n case \"Tab\":\n if (this.isOpen) {\n this.close();\n }\n }\n }\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n }\n\n @Listen(\"click\", { target: \"document\" })\n handleClick(ev: MouseEvent) {\n if (this.isOpen) {\n if (ev.target === this.el || this.el.contains(ev.target as HTMLElement)) {\n // Re-announce if clicking any part of the component while open\n this.announceToggletip();\n } else {\n this.close();\n }\n }\n }\n\n open() {\n this.isOpen = true;\n this.announceToggletip();\n }\n\n close() {\n this.isOpen = false;\n this.hideTooltip();\n }\n\n handleBlur() {\n this.hideTooltip();\n // clear liveregion on blur to prevent old announcement text from being picked up by screen readers\n this.liveRegionEl.innerHTML = \"\";\n }\n\n showTooltip() {\n // Because a :hover pseudoclass would apply before the tooltip is repositioned, hover styles must be applied through a class\n // Otherwise, the tooltip will flash on-screen and possibly create scrollbars\n this.setToggletipPosition();\n this.tooltipEl.classList.add(\"hover\");\n }\n\n hideTooltip() {\n this.tooltipEl.classList.remove(\"hover\");\n }\n\n announceToggletip() {\n this.liveRegionEl.innerHTML = \"\";\n setTimeout(() => {\n this.liveRegionEl.innerHTML = this.tempTooltip!;\n }, 10);\n }\n\n setToggletipPosition() {\n // Vertical\n if (this.tooltipPosition.includes(\"bottom\") && shouldOpenUp(this.el, this.toggletipEl)) {\n this.tooltipPosition = this.tooltipPosition.replace(\"bottom\", \"top\") as TooltipPlacement;\n } else if (this.tooltipPosition.includes(\"top\") && shouldOpenDown(this.el, this.toggletipEl)) {\n this.tooltipPosition = this.tooltipPosition.replace(\"top\", \"bottom\") as TooltipPlacement;\n }\n\n // Horizontal\n if (this.tooltipPosition.includes(\"left\") && shouldShiftRight(this.el, this.toggletipEl)) {\n this.tooltipPosition = this.tooltipPosition.replace(\"left\", \"right\") as TooltipPlacement;\n } else if (this.tooltipPosition.includes(\"right\") && shouldShiftLeft(this.el, this.toggletipEl)) {\n this.tooltipPosition = this.tooltipPosition.replace(\"right\", \"left\") as TooltipPlacement;\n }\n }\n\n render() {\n return (\n <Host>\n <button\n class={`button ${this.isTabbing ? \"user-is-tabbing\" : \"\"}`}\n type=\"button\"\n aria-label={this.label}\n onClick={() => {\n this.setToggletipPosition();\n this.open();\n }}\n // In order to position the tooltip identically to the toggletip, it's presence is determined by these four events\n onMouseEnter={() => this.showTooltip()}\n onMouseLeave={() => this.hideTooltip()}\n onFocus={() => this.showTooltip()}\n onBlur={() => this.handleBlur()}\n ></button>\n <div\n ref={(el) => (this.tooltipEl = el as HTMLDivElement)}\n class={`tooltip ${this.tooltipPosition} ${this.isOpen ? \"hidden\" : \"\"}`}\n aria-hidden=\"true\"\n >\n {this.tooltipMessage}\n </div>\n <div\n ref={(el) => (this.toggletipEl = el as HTMLDivElement)}\n class={`toggletip ${this.isOpen ? \"\" : \"hidden\"} ${this.tooltipPosition}`}\n >\n {this.tempTooltip}\n </div>\n <div\n ref={(el) => (this.liveRegionEl = el as HTMLDivElement)}\n class=\"live-region sr-only\"\n role=\"status\"\n // Aria-live is implicit with role=\"status\", however this is not registered by Apple VoiceOver\n aria-live=\"polite\"\n aria-atomic=\"true\"\n ></div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["wmButtonCss","Button","exports","this","btnPos","old","new","id","generateId","ariaPopup","Object","defineProperty","class_1","prototype","toBool","disabled","buttonType","buttonStyle","buttonEl","tempButtonType","offsetWidth","scrollWidth","isTruncated","document","getElementById","classes","permanentlyDelete","textWrap","isTabbing","customBackground","transformStyle","iconRotate","concat","iconFlip","assign","iconSize","fontSize","transform","toggleTabbingOn","toggleTabbingOff","handleScroll","tooltipVisible","hideTooltip","validateType","newValue","valid","includes","validateIcon","validateDeprecatedType","updateIcon","icon","getIconCodeFromName","console","error","tooltip","handleKeydown","ev","key","preventDefault","isDisabled","el","click","componentWillLoad","warn","componentDidLoad","body","classList","contains","getAttribute","getBoundingClientRect","showTooltip","_this","hasTooltip","tooltipText","textContent","tooltipEl","hasNoWhitespace","match","add","style","setProperty","remove","removeProperty","adjustedTooltipPlacement_1","adjustTooltipPlacement","tooltipPosition","tooltipRect_1","transitionDelay","opacity","setTimeout","positionTooltip","tPos","tooltipRect","window","requestAnimationFrame","top","left","vDiff","height","hDiff","width","vPos","hPos","bottom","right","Math","max","showTooltipForKeyboardUsers","getAriaLabel","labelForIdenticalButtons","render","h","Host","class","buttonClasses","ref","onMouseEnter","onMouseLeave","onFocus","onBlur","onClick","iconStyles","String","fromCodePoint","parseInt"],"sources":["src/components/wm-button/wm-button.scss?tag=wm-button&encapsulation=shadow","src/components/wm-button/wm-button.tsx"],"sourcesContent":[":host([disabled]),\n:host(.button-disabled) {\n pointer-events: none;\n}\n\n:host([disabled=\"false\"]) {\n // override disabled behavior from occuring when the string is \"false\", which would evaluate as truthy\n pointer-events: initial;\n}\n\n:host,\nwm-button {\n display: inline-block;\n width: fit-content;\n position: relative; // for tooltip\n @include box-shadow(none);\n\n .sr-only {\n @include srOnly;\n }\n\n @extend %wm-button;\n}\n","import { h, Component, Prop, Element, Listen, Watch, Host, State } from \"@stencil/core\";\nimport { getIconCodeFromName, TooltipPlacement, validButtonTypes } from \"../../global/interfaces\";\nimport { generateId, adjustTooltipPlacement, toBool } from \"../../global/functions\";\n\n@Component({\n tag: \"wm-button\",\n styleUrl: \"wm-button.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class Button {\n @Element() el!: HTMLWmButtonElement;\n private buttonEl!: HTMLButtonElement;\n\n // icon and tooltip have reflect set to true. Without reflect, the react wrappers don't expose the attribute\n // and the component throws errors when they are required (when buttonType is icononly or navigational)\n @Prop({ reflect: true }) disabled: boolean = false;\n get isDisabled(): boolean {\n // string \"false\" needs to be treated as bool False because react wrappers convert bool to string.\n return toBool(this.disabled);\n }\n @Prop({ mutable: true }) buttonType: validButtonTypes | null = null;\n @Prop({ mutable: true }) buttonStyle: validButtonTypes | null = null; // DEPRECATED in favor of button-type\n get tempButtonType(): validButtonTypes {\n // uses of this getter should be replaced with this.buttonType when buttonStyle is fully phased out\n // don't forget to reset this.buttonType's default value to secondary\n return this.buttonType || this.buttonStyle || \"secondary\";\n }\n @Prop({ reflect: true, mutable: true }) icon?: string;\n @Prop() iconSize?: string;\n @Prop() iconRotate?: number;\n @Prop() iconFlip?: \"horizontal\" | \"vertical\";\n @Prop({ reflect: true, mutable: true }) tooltip?: string;\n @Prop() labelForIdenticalButtons?: string;\n @Prop() tooltipPosition: TooltipPlacement = \"bottom-right\";\n @Prop() permanentlyDelete?: boolean = false;\n @Prop() textWrap: boolean = true;\n @Prop() customBackground?: string;\n @Prop({ mutable: true }) tooltipVisible = false; // this is not part of the documented API but we need to expose as prop in order to change it from the focus method defined in WillLoad()\n\n @State() isTabbing: boolean = false;\n\n private btnPos: any = { old: {}, new: {} }; // for tooltip position. old and new are DOMRect\n private id = generateId();\n private ariaPopup: boolean = false;\n\n get isTruncated(): boolean {\n return (\n !!this.buttonEl && this.tempButtonType === \"textonly\" && this.buttonEl.offsetWidth < this.buttonEl.scrollWidth\n );\n }\n\n get hasTooltip(): boolean {\n // tooltip is only rendered for icononly and navigational types, or if the button text is truncated\n return this.tempButtonType === \"icononly\" || this.tempButtonType === \"navigational\" || this.isTruncated;\n }\n\n get tooltipEl(): HTMLElement {\n return document.getElementById(\"wm-tooltip\")!;\n }\n\n get buttonClasses() {\n let classes = \"wm-button\";\n classes += this.permanentlyDelete ? \" -permanentlydelete\" : \"\";\n classes += this.tempButtonType ? \" -\" + this.tempButtonType : \" -secondary\";\n classes += this.textWrap ? \"\" : \" nowrap\";\n classes += this.isTabbing ? \" user-is-tabbing\" : \"\";\n classes += this.isTruncated ? \" -truncated\" : \"\";\n classes += this.customBackground === \"dark\" ? \" dark\" : \"\";\n return classes;\n }\n\n get iconStyles() {\n let transformStyle = \"\";\n transformStyle += this.iconRotate ? `rotate(${this.iconRotate}deg)` : \"\";\n transformStyle += this.iconFlip === \"horizontal\" ? `scaleX(-1)` : \"\";\n transformStyle += this.iconFlip === \"vertical\" ? `scaleY(-1)` : \"\";\n\n return {\n ...(this.iconSize && { fontSize: this.iconSize }),\n ...((this.iconRotate || this.iconFlip) && { transform: transformStyle }),\n };\n }\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n }\n\n // we need to listen for scroll events during the capture phase because they do not bubble up\n // there can be layouts where the main content has 100vh and overflows\n // in these cases window will register no scroll events unless we catch on they way down\n @Listen(\"scroll\", { target: \"window\", capture: true })\n handleScroll() {\n if (this.tooltipVisible) {\n this.hideTooltip();\n }\n }\n\n @Watch(\"buttonType\")\n validateType(newValue: string) {\n const valid = [\n \"primary\",\n \"secondary\",\n \"textonly\",\n \"icononly\",\n \"navigational\",\n \"selector\",\n \"selector-primary\",\n \"pairpositive\",\n \"pairnegative\",\n ].includes(newValue);\n\n if (!valid) {\n this.buttonType = \"secondary\";\n }\n\n this.validateIcon();\n }\n\n // remove entire watcher after buttonStyle has been fully removed\n @Watch(\"buttonStyle\")\n validateDeprecatedType(newValue: string) {\n const valid = [\"primary\", \"secondary\", \"textonly\", \"icononly\", \"navigational\", \"selector\"].includes(newValue);\n\n if (!valid) {\n this.buttonStyle = \"secondary\";\n }\n\n this.validateIcon();\n }\n\n @Watch(\"icon\")\n updateIcon() {\n this.icon = getIconCodeFromName(this.icon!);\n }\n\n validateIcon() {\n switch (this.tempButtonType) {\n case \"icononly\":\n case \"navigational\":\n // if the style is icononly or navigational...\n // - an icon must be provided\n if (!this.icon) {\n console.error(\n \"wm-button should have a valid 'icon' property when button-type is set to 'icononly' or 'navigational'.\"\n );\n }\n // - if no tooltip text was passed and we couldn't generate one, throw an error\n if (!this.tooltip) {\n console.error(\n \"wm-button should have a valid 'tooltip' property when button-type is set to 'icononly' or 'navigational'.\"\n );\n }\n break;\n case \"pairpositive\":\n this.icon = \"f12c\";\n break;\n case \"pairnegative\":\n this.icon = \"f739\";\n break;\n }\n }\n\n @Listen(\"keydown\")\n handleKeydown(ev: KeyboardEvent) {\n switch (ev.key) {\n case \"Enter\":\n ev.preventDefault();\n if (!this.isDisabled) {\n this.el.click();\n }\n break;\n }\n }\n\n componentWillLoad() {\n if (this.buttonStyle) {\n console.warn(\"wm-button: button-style has been deprecated as of v3.1.0. Please use button-type instead.\");\n }\n\n this.validateType(this.tempButtonType);\n\n if (this.icon) {\n this.icon = this.icon = getIconCodeFromName(this.icon);\n }\n }\n\n componentDidLoad() {\n if (document.body.classList.contains(\"wmcl-user-is-tabbing\")) {\n this.toggleTabbingOn();\n }\n\n this.ariaPopup = !!this.el.getAttribute(\"aria-haspopup\");\n\n this.btnPos.new = this.buttonEl.getBoundingClientRect();\n }\n\n showTooltip() {\n if (this.hasTooltip) {\n // set tooltip text\n let tooltipText = \"\";\n if (this.isTruncated && this.el.textContent) {\n // when truncated, tooltip text is the button's content\n tooltipText = this.el.textContent;\n } else if (this.tooltip) {\n // otherwise it is the tooltip property if present\n tooltipText = this.tooltip;\n }\n this.tooltipEl.textContent = tooltipText;\n\n // tooltip only has a maxWidth if it contains whitespace and can break\n const hasNoWhitespace = tooltipText.match(/^[^\\s]+$/);\n if (hasNoWhitespace) {\n this.tooltipEl.classList.add(\"single-word\");\n this.tooltipEl.style.setProperty(\"--wmTooltipMaxWidth\", \"none\");\n } else {\n this.tooltipEl.classList.remove(\"single-word\");\n this.tooltipEl.style.removeProperty(\"--wmTooltipMaxWidth\");\n }\n\n // adjust placement in case there is no space to place the tooltip where specified via prop\n // calculation outside of the function to keep it pure\n const adjustedTooltipPlacement = adjustTooltipPlacement(this.tooltipPosition, this.buttonEl, this.tooltipEl);\n\n this.btnPos.old = {};\n const tooltipRect = this.tooltipEl.getBoundingClientRect();\n this.tooltipEl.style.transitionDelay = \"500ms\";\n this.tooltipEl.style.opacity = \"1\";\n // This slight delay fixes an issue for keyboard users:\n // if they tab to a button out of screen bounds, the page scrolls\n // and hideTooltip() would be triggered before the tooltip would show\n setTimeout(() => {\n this.tooltipVisible = true;\n this.positionTooltip(adjustedTooltipPlacement, tooltipRect);\n }, 50);\n }\n }\n\n positionTooltip(tPos: string, tooltipRect: DOMRect) {\n if (this.tooltipVisible) {\n window.requestAnimationFrame(() => this.positionTooltip(tPos, tooltipRect));\n }\n this.btnPos.new = this.buttonEl.getBoundingClientRect();\n if (this.btnPos.new.top != this.btnPos.old.top || this.btnPos.new.left != this.btnPos.old.left) {\n // this is to figure out how to offset, given the size of the button and of the tooltip\n // to get the center positions, calculate the difference between the button width and the tooltip width\n const vDiff = (this.btnPos.new.height - tooltipRect.height) / 2;\n const hDiff = (this.btnPos.new.width - tooltipRect.width) / 2;\n // the naming convention defaults to center in the absence of a value\n // Values \"top\" and \"bottom\" imply horizontal centering; Values \"right\" and \"left\" imply vertical centering\n // therefore we first set to center first, then adjust accordingly\n let vPos = this.btnPos.new.top + vDiff;\n let hPos = this.btnPos.new.left + hDiff;\n\n if (tPos.includes(\"top\")) {\n vPos = this.btnPos.new.top - tooltipRect.height - 8;\n }\n if (tPos.includes(\"bottom\")) {\n vPos = this.btnPos.new.bottom + 8;\n }\n if (tPos.includes(\"left\")) {\n hPos = this.btnPos.new.left - tooltipRect.width - 8;\n }\n if (tPos.includes(\"right\")) {\n hPos = this.btnPos.new.right + 8;\n }\n\n // after all positioning has been calculated, if tooltip is off-screen or closer than 24px it is readjusted\n // this only occurs when the tooltip is overflowing to the left and is positioned top or bottom\n // (button placed too far left, or screen size under 268px)\n hPos = Math.max(hPos, 24);\n this.tooltipEl.style.setProperty(\"--wmTooltipTop\", vPos + \"px\");\n this.tooltipEl.style.setProperty(\"--wmTooltipLeft\", hPos + \"px\");\n // this.tooltipEl.style.top = vPos + \"px\";\n // this.tooltipEl.style.left = hPos + \"px\";\n // this.tooltipEl.style.top = (vPos / 16).toString() + \"rem\";\n // this.tooltipEl.style.left = (hPos / 16).toString() + \"rem\";\n\n this.btnPos.old = this.btnPos.new;\n }\n }\n\n hideTooltip() {\n if (this.hasTooltip) {\n this.tooltipEl.style.transitionDelay = \"0s\";\n this.tooltipEl.style.opacity = \"0\";\n this.tooltipVisible = false;\n }\n }\n\n showTooltipForKeyboardUsers() {\n if (this.isTabbing) {\n this.showTooltip();\n }\n }\n\n getAriaLabel() {\n if (this.tempButtonType === \"icononly\" || this.tempButtonType === \"navigational\") {\n return this.labelForIdenticalButtons || this.tooltip;\n }\n\n if (this.labelForIdenticalButtons) {\n return this.labelForIdenticalButtons;\n }\n }\n\n render() {\n return (\n <Host class={this.isDisabled ? \"button-disabled\" : \"\"}>\n <button\n id={this.id}\n class={`${this.buttonClasses}`}\n disabled={this.isDisabled}\n ref={(el) => (this.buttonEl = el as HTMLButtonElement)}\n aria-label={this.getAriaLabel()}\n aria-hasPopup={this.ariaPopup ? \"menu\" : null}\n onMouseEnter={() => this.showTooltip()}\n onMouseLeave={() => this.hideTooltip()}\n onFocus={() => this.showTooltipForKeyboardUsers()}\n onBlur={() => this.hideTooltip()}\n onClick={() => this.hideTooltip()}\n >\n {this.icon && (\n <span class=\"mdi\" style={this.iconStyles}>\n {String.fromCodePoint(parseInt(`0x${this.icon}`))}\n </span>\n )}\n <span class=\"button-text\">\n <slot />\n </span>\n </button>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["window","navigator","plugins","length","console","log","version","wmComponentKeys","ev","key","event","Event","dispatchEvent","document","querySelector","classList","add","wmComponentMouseDownOnce","remove","addEventListener","tooltipContainer","createElement","id","tooltipEl","setAttribute","style","position","overflow","pointerEvents","lineHeight","fontFamily","fontSize","textTransform","fontWeight","background","color","zIndex","maxWidth","marginRight","padding","transitionProperty","transitionDelay","opacity","top","left","transform","willChange","appendChild","body"],"sources":["./src/global/global.ts"],"sourcesContent":["import { setMode } from \"@stencil/core\";\nimport { version } from \"../../package.json\";\n\n// PRINT RIPPLE VERSION IN CONSOLE\n// test envs return 0 for plugin.length\n// do not print version number there as it causes issues\nif (window.navigator.plugins.length > 0) {\n console.log(\"Ripple component library\", version);\n}\n\n// USER-IS-TABBING CLASSES (FOR FOCUS INDICATORS)\n// Dispatching events to track whether user is navigating with keyboard or mouse\nfunction wmComponentKeys(ev: KeyboardEvent) {\n if (ev.key == \"Tab\") {\n var event: Event = new Event(\"wmUserIsTabbing\");\n window.dispatchEvent(event);\n document.querySelector(\"body\")!.classList.add(\"wmcl-user-is-tabbing\");\n }\n if (ev.key == \"ArrowLeft\" || ev.key == \"ArrowUp\" || ev.key == \"ArrowRight\" || ev.key == \"ArrowDown\") {\n var event: Event = new Event(\"wmUserIsKeying\");\n window.dispatchEvent(event);\n document.querySelector(\"body\")!.classList.add(\"wmcl-user-is-keying\");\n }\n}\n\nfunction wmComponentMouseDownOnce() {\n var event = new Event(\"wmUserIsNotTabbing\");\n window.dispatchEvent(event);\n document.querySelector(\"body\")!.classList.remove(\"wmcl-user-is-tabbing\");\n document.querySelector(\"body\")!.classList.remove(\"wmcl-user-is-keying\");\n}\n\nwindow.addEventListener(\"keydown\", wmComponentKeys);\nwindow.addEventListener(\"mousedown\", wmComponentMouseDownOnce);\n\n// MODES (FOR PRODUCT-SPECIFIC STYLING)\n//Checks for mode attribute explicitly set on the document. If \"mode\" is set on component, it will override the global mode. Falls back to default (Planning styles)\nsetMode((elm) => {\n return elm.getAttribute(\"mode\") || document.documentElement.getAttribute(\"mode\") || \"planning\";\n});\n\n// TOOLTIP\n// Add a tooltip element\n// This allows tooltips to be always at the highest stacking context (always on top)\n// Element is added withing a container to avoid performance impact\nconst tooltipContainer = document.createElement(\"div\");\ntooltipContainer.id = \"wm-tooltip-container\";\nconst tooltipEl = document.createElement(\"div\");\ntooltipEl.id = \"wm-tooltip\";\ntooltipEl.setAttribute(\"aria-hidden\", \"true\");\ntooltipEl.style.position = \"fixed\";\ntooltipEl.style.overflow = \"hidden\";\ntooltipEl.style.pointerEvents = \"none\";\ntooltipEl.style.lineHeight = \"normal\";\ntooltipEl.style.fontFamily = \"inherit\";\ntooltipEl.style.fontSize = \"0.875rem\";\ntooltipEl.style.textTransform = \"none\";\ntooltipEl.style.fontWeight = \"normal\";\ntooltipEl.style.background = \"black\";\ntooltipEl.style.color = \"#fff\";\ntooltipEl.style.zIndex = \"999999\";\ntooltipEl.style.maxWidth = \"var(--wmTooltipMaxWidth, 13.75rem)\";\ntooltipEl.style.marginRight = \"1.5rem\";\ntooltipEl.style.padding = \"0.375rem\";\ntooltipEl.style.transitionProperty = \"opacity\";\ntooltipEl.style.transitionDelay = \"opacity\";\ntooltipEl.style.opacity = \"0\";\ntooltipEl.style.top = \"0\";\ntooltipEl.style.left = \"0\";\ntooltipEl.style.transform = \"translateZ(0)\";\ntooltipEl.style.willChange = \"transform\";\ntooltipEl.style.transform = \"translate(var(--wmTooltipLeft), var(--wmTooltipTop))\";\n\ntooltipContainer.appendChild(tooltipEl);\nconst body = document.querySelector(\"body\");\nbody!.appendChild(tooltipContainer);\n"],"mappings":"iBAMA,GAAIA,OAAOC,UAAUC,QAAQC,OAAS,EAAG,CACvCC,QAAQC,IAAI,2BAA4BC,E,CAK1C,SAASC,EAAgBC,GACvB,GAAIA,EAAGC,KAAO,MAAO,CACnB,IAAIC,EAAe,IAAIC,MAAA,mBACvBX,OAAOY,cAAcF,GACrBG,SAASC,cAAc,QAAAC,UAAAC,IAAA,uB,CAEzB,GAAAR,EAAAC,KAAA,aAAAD,EAAAC,KAAA,WAAAD,EAAAC,KAAA,cAAAD,EAAAC,KAAA,aACE,IAAIC,EAAe,IAAIC,MAAM,kBAC7BX,OAAOY,cAAcF,GACrBG,SAASC,cAAc,QAAAC,UAAAC,IAAA,sB,CAE3B,CAEA,SAAAC,IACE,IAAIP,EAAQ,IAAIC,MAAM,sBACtBX,OAAOY,cAAcF,GACrBG,SAASC,cAAc,QAAAC,UAAAG,OAAA,wBACvBL,SAASC,cAAc,QAASC,UAAUG,OAAO,sBACnD,CAEAlB,OAAAmB,iBAAA,UAAAZ,GACAP,OAAOmB,iBAAiB,YAAaF,GAYrC,MAAMG,EAAmBP,SAASQ,cAAc,OAChDD,EAAiBE,GAAK,uBACtB,MAAMC,EAAYV,SAASQ,cAAc,OACzCE,EAAUD,GAAK,aACfC,EAAUC,aAAa,sBACvBD,EAAUE,MAAMC,SAAW,QAC3BH,EAAUE,MAAME,SAAW,SAC3BJ,EAAUE,MAAMG,cAAgB,OAChCL,EAAUE,MAAMI,WAAa,SAC7BN,EAAUE,MAAMK,WAAa,UAC7BP,EAAUE,MAAMM,SAAW,WAC3BR,EAAUE,MAAMO,cAAgB,OAChCT,EAAUE,MAAMQ,WAAa,SAC7BV,EAAUE,MAAMS,WAAa,QAC7BX,EAAUE,MAAMU,MAAQ,OACxBZ,EAAUE,MAAMW,OAAS,SACzBb,EAAUE,MAAMY,SAAW,qCAC3Bd,EAAUE,MAAMa,YAAc,SAC9Bf,EAAUE,MAAMc,QAAU,WAC1BhB,EAAUE,MAAMe,mBAAqB,UACrCjB,EAAUE,MAAMgB,gBAAkB,UAClClB,EAAUE,MAAMiB,QAAU,IAC1BnB,EAAUE,MAAMkB,IAAM,IACtBpB,EAAUE,MAAMmB,KAAO,IACvBrB,EAAUE,MAAMoB,UAAS,gBACzBtB,EAAUE,MAAMqB,WAAa,YAC7BvB,EAAUE,MAAMoB,UAAY,uDAE5BzB,EAAiB2B,YAAYxB,GAC7B,MAAMyB,EAAOnC,SAASC,cAAc,QACpCkC,EAAMD,YAAY3B"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["wmModalHeaderCss","ModalHeader","exports","this","closeTooltipMessage","intl","formatMessage","id","defaultMessage","description","class_1","prototype","componentWillLoad","_this","uid","el","parentElement","addEventListener","closeButtonEl","focus","emitParentCloseEvent","parentModal","emitCloseEvent","render","h","Host","class","concat","heading","subheading","icon","tooltip","ref","onClick"],"sources":["src/components/wm-modal/wm-modal-header.scss?tag=wm-modal-header","src/components/wm-modal/wm-modal-header.tsx"],"sourcesContent":["wm-modal-header {\n @include border-radius(5px 5px 0 0px);\n //Fix for Chrome sometimes leaving space between header and content, making the overlay show through\n margin-bottom: -1px;\n\n .wm-wrapper {\n @include displayFlex();\n @include justifyContent(space-between);\n @include alignItems(center);\n\n .title {\n margin: 0;\n font-weight: 600;\n font-size: rem-calc(18);\n color: rgb(74, 74, 74);\n line-height: normal;\n\n .subtitle {\n display: block;\n font-size: rem-calc(14);\n font-weight: normal;\n }\n\n &:focus {\n outline: none;\n }\n }\n }\n}\n","import { h, Component, Element, Prop, Host } from \"@stencil/core\";\nimport { intl } from \"../../global/functions\";\n\n@Component({\n tag: \"wm-modal-header\",\n styleUrl: \"wm-modal-header.scss\",\n})\nexport class ModalHeader {\n @Element() el!: HTMLElement;\n private closeButtonEl!: HTMLElement;\n\n @Prop() heading?: string = \"\";\n @Prop() subheading?: string = \"\";\n private uid!: string;\n\n private closeTooltipMessage: string = intl.formatMessage({\n id: \"global.closeVerb\",\n defaultMessage: \"Close\",\n description: \"For a button, to close a user interface element\",\n });\n\n componentWillLoad() {\n this.uid = (this.el.parentElement as HTMLWmModalElement).uid;\n\n // Trap focus when user tabs past last element in modal\n // NB @Listen doesn't allow to listen on a specific element (the parent modal)\n // if we listen to the whole doc each modal on the page reacts to every event\n this.el.parentElement!.addEventListener(\"focusFirstElement\", () => {\n this.closeButtonEl.focus();\n });\n }\n\n emitParentCloseEvent() {\n const parentModal = this.el.parentElement;\n //@ts-ignore\n parentModal.emitCloseEvent();\n }\n\n // @Listen(\"click\")\n // directFocusOnClick() {\n // this.headingElement.tabIndex = 0;\n // this.headingElement.focus();\n // }\n\n render() {\n return (\n <Host>\n <div class=\"wm-wrapper\">\n <div>\n <h2\n class=\"title\"\n id={`wm-modal-heading-text-${this.uid}`}\n // ref={el => (this.headingElement = el as HTMLElement)}\n // onBlur={() => (this.headingElement.tabIndex = -1)}\n >\n {this.heading}\n <span class=\"subtitle\">{this.subheading}</span>\n </h2>\n </div>\n <wm-button\n button-type=\"navigational\"\n icon=\"f156\"\n tooltip={this.closeTooltipMessage}\n tooltip-position=\"left\"\n id={`wm-modal-close-${this.uid}`}\n ref={(el) => (this.closeButtonEl = el as HTMLElement)}\n onClick={() => this.emitParentCloseEvent()}\n />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"wMAAA,IAAMA,EAAmB,ouB,ICOZC,EAAWC,EAAA,6B,wBAQdC,KAAAC,oBAA8BC,EAAKC,cAAc,CACvDC,GAAI,mBACJC,eAAgB,QAChBC,YAAa,oD,aAPY,G,gBACG,E,CAS9BC,EAAAC,UAAAC,kBAAA,eAAAC,EAAAV,KACEA,KAAKW,IAAOX,KAAKY,GAAGC,cAAqCF,IAKzDX,KAAKY,GAAGC,cAAeC,iBAAiB,qBAAqB,WAC3DJ,EAAKK,cAAcC,O,KAIvBT,EAAAC,UAAAS,qBAAA,WACE,IAAMC,EAAclB,KAAKY,GAAGC,cAE5BK,EAAYC,gB,EASdZ,EAAAC,UAAAY,OAAA,eAAAV,EAAAV,KACE,OACEqB,EAACC,EAAI,KACHD,EAAA,OAAKE,MAAM,cACTF,EAAA,WACEA,EAAA,MACEE,MAAM,QACNnB,GAAI,yBAAAoB,OAAyBxB,KAAKW,MAIjCX,KAAKyB,QACNJ,EAAA,QAAME,MAAM,YAAYvB,KAAK0B,cAGjCL,EAAA,2BACc,eACZM,KAAK,OACLC,QAAS5B,KAAKC,oBAAmB,mBAChB,OACjBG,GAAI,kBAAAoB,OAAkBxB,KAAKW,KAC3BkB,IAAK,SAACjB,GAAE,OAAMF,EAAKK,cAAgBH,CAA3B,EACRkB,QAAS,WAAM,OAAApB,EAAKO,sBAAL,K,uHA3DH,I"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["wmFileCss","File","exports","this","isWithinLegacyUploader","debouncedResize","debounce","_this","isCondensed","el","clientWidth","forceUpdate","Object","defineProperty","class_1","prototype","data","file","JSON","parse","progress","match","parseInt","toString","fileData","hasOwnProperty","shadowRoot","querySelector","intl","formatMessage","id","defaultMessage","description","generateClearButtonLabel","filename","fileName","componentWillLoad","shadowRootHost","getRootNode","host","nodeName","type","uploaderType","resizeObserver","ResizeObserver","observe","componentDidRender","truncateFileName","previewFile","wmIntFilePreviewed","emit","downloadFile","wmIntFileDownloaded","deleteFile","wmIntFileDeleted","leftGroup","leftBoundary","getBoundingClientRect","left","rightGroup","rightBoundary","right","filenameEl","availableSpace","dataset","canFitText","length","singleCharacterWidth","extension","slice","lastIndexOf","numFittingCharacters","Math","floor","postEllipsesLength","preEllipsesLength","max","preEllipsesText","postEllipsesText","indexOf","concat","trim","textContent","handleFilenameMouseEnter","ev","target","includes","showTooltip","renderFileName","isUploading","h","class","onMouseEnter","onMouseLeave","hideTooltip","renderFileInfo","item","showInfo","displayedInfo","lastUpdated","size","renderActionMenu","defaultFileActions","availableActions","fileActions","previewItem","icon","onClick","previewActionMessage","downloadItem","downloadActionMessage","deleteItem","deleteActionMessage","tooltip","actionMenuLabel","name","renderFileActionButtons","previewButton","previewButtonTooltip","downloadButton","downloadButtonTooltip","deleteButton","deleteButtonTooltip","renderFileInProgress","style","background","renderFileControls","hasSingleFileAction","split","showActionMenu","renderFile","showCheckmark","errorMessage","wmFileClearErrorClicked","clearButtonText","render","Host","role"],"sources":["src/components/wm-file/wm-file.scss?tag=wm-file&encapsulation=shadow","src/components/wm-file/wm-file.tsx"],"sourcesContent":[":host,\nwm-file {\n display: block;\n width: 100%;\n}\n.file-wrapper {\n font-size: rem-calc(14);\n position: relative;\n list-style: none;\n\n .file {\n min-width: 300px;\n @include border-radius(3px);\n height: rem-calc(56);\n padding: 0 rem-calc(20);\n position: relative; // for progress bar\n background: $background;\n border: 1px solid rgb(107, 107, 107);\n\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .filename {\n white-space: nowrap;\n }\n\n .left-group {\n overflow: hidden;\n }\n\n .right-group {\n display: flex;\n align-items: center;\n padding-left: rem-calc(80);\n gap: rem-calc(16);\n\n &.condensed {\n padding-left: rem-calc(40);\n }\n\n .file-controls {\n display: flex;\n gap: rem-calc(16);\n }\n .file-info {\n white-space: nowrap;\n }\n }\n\n &.--error {\n border: 1px solid $error-color;\n background-color: #f5ebea;\n height: rem-calc(60);\n }\n }\n\n &.checked {\n .file:after {\n @include mdi-icon;\n content: \"\\f133\";\n position: absolute;\n right: calc(-16px + -28px);\n color: $uploader-checkmark-background;\n font-size: 28px;\n line-height: 1;\n }\n }\n}\n\n.name-wrapper {\n overflow: hidden;\n}\n\n.progress {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n height: 8px;\n}\n\n.error-message {\n color: $error-color;\n padding-top: rem-calc(4);\n font-style: italic;\n}\n\n.sr-only {\n @include srOnly;\n}\n\n.ch-measure {\n // used to get the measurement of a single character, for truncation calculations\n width: 1ch !important;\n visibility: hidden;\n}\n","import { h, Component, Element, Event, EventEmitter, Prop, State, Host, forceUpdate } from \"@stencil/core\";\nimport { debounce, hideTooltip, intl, showTooltip } from \"../../global/functions\";\nimport { UploadedFile } from \"../../global/interfaces\";\n\n@Component({\n tag: \"wm-file\",\n styleUrl: \"wm-file.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class File {\n @Element() el!: HTMLWmFileElement;\n @Prop() file?: string;\n @Prop() showInfo: \"time\" | \"size\" | \"none\" = \"time\";\n @Prop() errorMessage?: string;\n @State() isCondensed: boolean = false;\n @Event() wmIntFilePreviewed!: EventEmitter<string>;\n @Event() wmIntFileDownloaded!: EventEmitter<string>;\n @Event() wmIntFileDeleted!: EventEmitter<string>;\n @Event() wmFileClearErrorClicked!: EventEmitter; // undocumented event, for communication with wm-uploader\n // the file component is used within wm-uploader, which still includes legacy types 1 and 2\n // some new features are not included in these legacy types, and must use the below in conditions\n private isWithinLegacyUploader: boolean = false;\n\n get fileData(): UploadedFile {\n let data = this.file ? JSON.parse(this.file) : null;\n\n // sometimes JSON numbers can be received as strings, make sure progress is always a number\n if (data && data.progress && typeof data.progress === \"string\" && data.progress.match(/^[0-9]+$/)) {\n data.progress = parseInt(data.progress.toString());\n }\n return data;\n }\n\n get isUploading(): boolean {\n return this.fileData && this.fileData.hasOwnProperty(\"progress\") && this.fileData.progress! < 100;\n }\n\n get singleCharacterWidth() {\n return this.el.shadowRoot!.querySelector(\".ch-measure\")!.clientWidth;\n }\n\n get previewButtonTooltip() {\n return intl.formatMessage({\n id: \"file.previewButtonTooltip\",\n defaultMessage: \"Preview\",\n description: \"Tooltip of a button that triggers a file to be previewed\",\n });\n }\n\n get downloadButtonTooltip() {\n return intl.formatMessage({\n id: \"file.downloadButtonTooltip\",\n defaultMessage: \"Download\",\n description: \"Tooltip of a button that triggers a file to be downloaded\",\n });\n }\n\n get deleteButtonTooltip() {\n return intl.formatMessage({\n id: \"file.deleteButtonTooltip\",\n defaultMessage: \"Delete\",\n description: \"Tooltip of a button that triggers a file to be deleted\",\n });\n }\n\n get previewActionMessage() {\n return intl.formatMessage({\n id: \"file.previewAction\",\n defaultMessage: \"Preview File\",\n description: \"Label of a button that triggers a file to be previewed\",\n });\n }\n\n get downloadActionMessage() {\n return intl.formatMessage({\n id: \"file.downloadAction\",\n defaultMessage: \"Download File\",\n description: \"Label of a button that triggers a file to be downloaded\",\n });\n }\n\n get deleteActionMessage() {\n return intl.formatMessage({\n id: \"file.deleteAction\",\n defaultMessage: \"Delete File\",\n description: \"Label of a button that triggers a file to be delete\",\n });\n }\n\n get actionMenuLabel() {\n return intl.formatMessage({\n id: \"file.actionMenuLabel\",\n defaultMessage: \"Actions\",\n description: \"Label of a button that opens a menu of file actions\",\n });\n }\n\n get clearButtonText() {\n return intl.formatMessage({\n id: \"file.clearErrorText\",\n defaultMessage: \"Clear\",\n description: \"Text for a button used to clear an error\",\n });\n }\n\n generateClearButtonLabel(filename: string) {\n return intl.formatMessage(\n {\n id: \"file.clearErrorLabel\",\n defaultMessage: \"Clear {fileName} error\",\n description: \"Label for a button used to clear an error, including filename\",\n },\n { fileName: filename }\n );\n }\n\n componentWillLoad() {\n const shadowRootHost = (this.el.getRootNode() as ShadowRoot).host;\n\n if (shadowRootHost && shadowRootHost.nodeName === \"WM-UPLOADER\") {\n if ((shadowRootHost as HTMLWmUploaderElement).type || (shadowRootHost as HTMLWmUploaderElement).uploaderType) {\n this.isWithinLegacyUploader = true;\n }\n }\n\n // rerender on resize in case layout needs to change\n const resizeObserver = new ResizeObserver(() => this.debouncedResize());\n resizeObserver.observe(this.el);\n }\n\n componentDidRender() {\n this.truncateFileName(this.el.shadowRoot!.querySelector(\".file\")!);\n }\n\n debouncedResize = debounce(() => {\n this.isCondensed = this.el.clientWidth < 500;\n // rerender to show filename truncation changes\n forceUpdate(this.el);\n }, 50);\n\n previewFile(file: UploadedFile) {\n this.wmIntFilePreviewed.emit(file.id);\n }\n\n downloadFile(file: UploadedFile) {\n this.wmIntFileDownloaded.emit(file.id);\n }\n\n deleteFile(file: UploadedFile) {\n this.wmIntFileDeleted.emit(file.id);\n }\n\n truncateFileName(file: Element) {\n const leftGroup = file.querySelector(\".left-group\");\n const leftBoundary = leftGroup!.getBoundingClientRect().left;\n const rightGroup = file.querySelector(\".right-group\");\n const rightBoundary = rightGroup\n ? rightGroup.getBoundingClientRect().left\n : file.getBoundingClientRect().right - 20;\n const filenameEl = file.querySelector(\".filename\") as HTMLElement;\n const availableSpace = rightBoundary - leftBoundary;\n\n let filename = filenameEl.dataset.filename!;\n const canFitText = availableSpace > filename.length * this.singleCharacterWidth;\n\n if (!canFitText) {\n const extension = filename.slice(filename.lastIndexOf(\".\"));\n const numFittingCharacters = Math.floor(availableSpace / this.singleCharacterWidth);\n\n // three ellipses, three constant characters, extension\n const postEllipsesLength = 3 + 3 + extension.length;\n let preEllipsesLength = Math.max(2, numFittingCharacters - postEllipsesLength);\n const preEllipsesText = filename.slice(0, preEllipsesLength);\n const postEllipsesText = filename.slice(filename.indexOf(extension) - 3, filename.length);\n filename = `${preEllipsesText.trim()}...${postEllipsesText.trim()}`;\n }\n\n filenameEl.textContent = filename;\n }\n\n handleFilenameMouseEnter(ev: MouseEvent, filename: string) {\n // only show tooltip if file name is being truncated (has ellipses)\n if ((ev.target as HTMLElement).textContent!.includes(\"...\")) {\n showTooltip(\"bottom\", ev.target as HTMLElement, filename);\n }\n }\n\n renderFileName(filename: string, isUploading: boolean) {\n return (\n <div class=\"left-group\">\n <div class=\"name-wrapper\">\n <span class=\"sr-only\">{filename}</span>\n <span\n aria-hidden=\"true\"\n class=\"filename\"\n data-filename={filename}\n onMouseEnter={(ev) => this.handleFilenameMouseEnter(ev, filename)}\n onMouseLeave={() => hideTooltip()}\n ></span>\n {isUploading && <span class=\"sr-only\">uploading</span>}\n <div class=\"ch-measure\"></div>\n </div>\n </div>\n );\n }\n\n renderFileInfo(item: UploadedFile, showInfo: string) {\n let displayedInfo = \"\";\n if (showInfo === \"time\" && item.lastUpdated) {\n displayedInfo = item.lastUpdated;\n } else if (showInfo === \"size\" && item.size) {\n displayedInfo = item.size;\n }\n\n return <div class=\"file-info\">{displayedInfo}</div>;\n }\n\n renderActionMenu(item: UploadedFile) {\n const defaultFileActions = \"download delete\";\n const availableActions = item.fileActions || defaultFileActions;\n const previewItem = (\n <wm-menuitem icon=\"f208\" onClick={() => this.previewFile(item)}>\n {this.previewActionMessage}\n </wm-menuitem>\n );\n const downloadItem = (\n <wm-menuitem icon=\"f1da\" onClick={() => this.downloadFile(item)}>\n {this.downloadActionMessage}\n </wm-menuitem>\n );\n const deleteItem = (\n <wm-menuitem icon=\"f1c0\" onClick={() => this.deleteFile(item)}>\n {this.deleteActionMessage}\n </wm-menuitem>\n );\n return (\n <wm-action-menu\n action-menu-type=\"icon\"\n tooltip={this.actionMenuLabel}\n tooltip-position=\"bottom\"\n label-for-identical-buttons={`${item.name} ${this.actionMenuLabel}`}\n >\n {availableActions.includes(\"preview\") && previewItem}\n {availableActions.includes(\"download\") && downloadItem}\n {availableActions.includes(\"delete\") && deleteItem}\n </wm-action-menu>\n );\n }\n\n renderFileActionButtons(item: UploadedFile) {\n const defaultFileActions = \"download delete\";\n const availableActions = item.fileActions || defaultFileActions;\n\n const previewButton = (\n <wm-button\n class=\"preview-button\"\n button-type=\"icononly\"\n tooltip={this.previewButtonTooltip}\n tooltip-position=\"bottom\"\n label-for-identical-buttons={`preview ${item.name}`}\n icon=\"f208\"\n onClick={() => this.previewFile(item)}\n ></wm-button>\n );\n const downloadButton = (\n <wm-button\n class=\"download-button\"\n button-type=\"icononly\"\n tooltip={this.downloadButtonTooltip}\n tooltip-position=\"bottom\"\n label-for-identical-buttons={`download ${item.name}`}\n icon=\"f1da\"\n onClick={() => this.downloadFile(item)}\n ></wm-button>\n );\n const deleteButton = (\n <wm-button\n class=\"delete-button\"\n button-type=\"icononly\"\n tooltip={this.deleteButtonTooltip}\n tooltip-position=\"bottom\"\n label-for-identical-buttons={`delete ${item.name}`}\n icon=\"f1c0\"\n onClick={() => this.deleteFile(item)}\n ></wm-button>\n );\n\n return (\n <div class=\"file-controls\">\n {availableActions.includes(\"preview\") && previewButton}\n {availableActions.includes(\"download\") && downloadButton}\n {availableActions.includes(\"delete\") && deleteButton}\n </div>\n );\n }\n\n renderFileInProgress(item: UploadedFile) {\n const filename = item.type ? `${item.name}.${item.type}` : item.name;\n return (\n <div class=\"file-wrapper\">\n <div class=\"file --progress\">\n <div\n class=\"progress\"\n style={{\n background: `linear-gradient(to right, rgba(67, 126, 142, 1) ${item.progress}%, transparent ${item.progress}%)`,\n }}\n ></div>\n {this.renderFileName(filename, this.isUploading)}\n </div>\n </div>\n );\n }\n\n renderFileControls(item: UploadedFile) {\n const hasSingleFileAction = item.fileActions && item.fileActions.split(\" \").length === 1;\n const showActionMenu = this.isCondensed && !hasSingleFileAction;\n\n return showActionMenu ? this.renderActionMenu(item) : this.renderFileActionButtons(item);\n }\n\n renderFile(item: UploadedFile) {\n const filename = item.type ? `${item.name}.${item.type}` : item.name;\n const showCheckmark = !this.isWithinLegacyUploader && item.progress === 100;\n\n return (\n <div class={`file-wrapper ${showCheckmark ? \"checked\" : \"\"}`}>\n <div class={`file ${this.errorMessage ? \"--error\" : \"\"}`}>\n {this.renderFileName(filename, this.isUploading)}\n {!this.errorMessage && (\n <div class={`right-group ${this.isCondensed ? \"condensed\" : \"\"}`}>\n {this.showInfo !== \"none\" && this.renderFileInfo(item, this.showInfo)}\n {item.fileActions !== \"\" && this.renderFileControls(item)}\n </div>\n )}\n {this.errorMessage && (\n <wm-button\n permanently-delete\n button-type=\"textonly\"\n label-for-identical-buttons={this.generateClearButtonLabel(item.name)}\n onClick={() => this.wmFileClearErrorClicked.emit({ name: item.name })}\n >\n {this.clearButtonText}\n </wm-button>\n )}\n </div>\n {this.errorMessage && <div class=\"error-message\">{this.errorMessage}</div>}\n </div>\n );\n }\n\n render() {\n return (\n <Host role=\"listitem\">\n {this.isUploading ? this.renderFileInProgress(this.fileData) : this.renderFile(this.fileData)}\n </Host>\n );\n }\n}\n"],"mappings":"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"}