@watermarkinsights/ripple 3.25.0-2 → 3.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/{chartFunctions-9dce0ea3.js → chartFunctions-2f04ab6a.js} +591 -591
  3. package/dist/cjs/chartFunctions-2f04ab6a.js.map +1 -0
  4. package/dist/cjs/{functions-53aff314.js → functions-d2d99997.js} +478 -478
  5. package/dist/cjs/{functions-53aff314.js.map → functions-d2d99997.js.map} +1 -1
  6. package/dist/cjs/{global-c22b1249.js → global-d0584d18.js} +63 -63
  7. package/dist/cjs/global-d0584d18.js.map +1 -0
  8. package/dist/cjs/{http-service-494d81de.js → http-service-9e8c4dd5.js} +50 -50
  9. package/dist/cjs/http-service-9e8c4dd5.js.map +1 -0
  10. package/dist/cjs/{interfaces-a3338581.js → interfaces-30a74c1f.js} +30 -30
  11. package/dist/cjs/interfaces-30a74c1f.js.map +1 -0
  12. package/dist/cjs/intl-a1ccf587.js +140 -0
  13. package/dist/cjs/intl-a1ccf587.js.map +1 -0
  14. package/dist/cjs/loader.cjs.js +2 -2
  15. package/dist/cjs/priv-chart-popover.cjs.entry.js +91 -91
  16. package/dist/cjs/priv-chart-popover.cjs.entry.js.map +1 -1
  17. package/dist/cjs/priv-datepicker.cjs.entry.js +657 -657
  18. package/dist/cjs/priv-datepicker.cjs.entry.js.map +1 -1
  19. package/dist/cjs/priv-navigator-button.cjs.entry.js +19 -19
  20. package/dist/cjs/priv-navigator-button.cjs.entry.js.map +1 -1
  21. package/dist/cjs/priv-navigator-item.cjs.entry.js +23 -23
  22. package/dist/cjs/priv-navigator-item.cjs.entry.js.map +1 -1
  23. package/dist/cjs/ripple.cjs.js +2 -2
  24. package/dist/cjs/wm-action-menu_2.cjs.entry.js +334 -334
  25. package/dist/cjs/wm-action-menu_2.cjs.entry.js.map +1 -1
  26. package/dist/cjs/wm-button.cjs.entry.js +260 -260
  27. package/dist/cjs/wm-button.cjs.entry.js.map +1 -1
  28. package/dist/cjs/wm-chart-slice.cjs.entry.js +18 -18
  29. package/dist/cjs/wm-chart-slice.cjs.entry.js.map +1 -1
  30. package/dist/cjs/wm-chart.cjs.entry.js +179 -179
  31. package/dist/cjs/wm-chart.cjs.entry.js.map +1 -1
  32. package/dist/cjs/wm-datepicker.cjs.entry.js +264 -264
  33. package/dist/cjs/wm-datepicker.cjs.entry.js.map +1 -1
  34. package/dist/cjs/wm-file-list.cjs.entry.js +35 -35
  35. package/dist/cjs/wm-file-list.cjs.entry.js.map +1 -1
  36. package/dist/cjs/wm-file.cjs.entry.js +201 -201
  37. package/dist/cjs/wm-file.cjs.entry.js.map +1 -1
  38. package/dist/cjs/wm-input.cjs.entry.js +124 -140
  39. package/dist/cjs/wm-input.cjs.entry.js.map +1 -1
  40. package/dist/cjs/wm-modal-footer.cjs.entry.js +33 -33
  41. package/dist/cjs/wm-modal-footer.cjs.entry.js.map +1 -1
  42. package/dist/cjs/wm-modal-header.cjs.entry.js +32 -32
  43. package/dist/cjs/wm-modal-header.cjs.entry.js.map +1 -1
  44. package/dist/cjs/wm-modal.cjs.entry.js +152 -152
  45. package/dist/cjs/wm-modal.cjs.entry.js.map +1 -1
  46. package/dist/cjs/wm-navigation_3.cjs.entry.js +225 -230
  47. package/dist/cjs/wm-navigation_3.cjs.entry.js.map +1 -1
  48. package/dist/cjs/wm-navigator.cjs.entry.js +264 -264
  49. package/dist/cjs/wm-navigator.cjs.entry.js.map +1 -1
  50. package/dist/cjs/wm-network-uploader.cjs.entry.js +465 -467
  51. package/dist/cjs/wm-network-uploader.cjs.entry.js.map +1 -1
  52. package/dist/cjs/wm-option_2.cjs.entry.js +769 -772
  53. package/dist/cjs/wm-option_2.cjs.entry.js.map +1 -1
  54. package/dist/cjs/wm-pagination.cjs.entry.js +179 -179
  55. package/dist/cjs/wm-pagination.cjs.entry.js.map +1 -1
  56. package/dist/cjs/wm-progress-indicator_3.cjs.entry.js +155 -155
  57. package/dist/cjs/wm-progress-indicator_3.cjs.entry.js.map +1 -1
  58. package/dist/cjs/wm-search.cjs.entry.js +185 -192
  59. package/dist/cjs/wm-search.cjs.entry.js.map +1 -1
  60. package/dist/cjs/wm-snackbar.cjs.entry.js +155 -159
  61. package/dist/cjs/wm-snackbar.cjs.entry.js.map +1 -1
  62. package/dist/cjs/wm-tab-item_3.cjs.entry.js +264 -264
  63. package/dist/cjs/wm-tab-item_3.cjs.entry.js.map +1 -1
  64. package/dist/cjs/wm-tag-input-row.cjs.entry.js +14 -14
  65. package/dist/cjs/wm-tag-input-row.cjs.entry.js.map +1 -1
  66. package/dist/cjs/wm-tag-input.cjs.entry.js +912 -924
  67. package/dist/cjs/wm-tag-input.cjs.entry.js.map +1 -1
  68. package/dist/cjs/wm-timepicker.cjs.entry.js +386 -386
  69. package/dist/cjs/wm-timepicker.cjs.entry.js.map +1 -1
  70. package/dist/cjs/wm-toggletip.cjs.entry.js +130 -130
  71. package/dist/cjs/wm-toggletip.cjs.entry.js.map +1 -1
  72. package/dist/cjs/wm-uploader.cjs.entry.js +441 -510
  73. package/dist/cjs/wm-uploader.cjs.entry.js.map +1 -1
  74. package/dist/cjs/wm-wrapper.cjs.entry.js +12 -12
  75. package/dist/cjs/wm-wrapper.cjs.entry.js.map +1 -1
  76. package/dist/collection/components/charts/chartFunctions.js +557 -557
  77. package/dist/collection/components/charts/chartFunctions.js.map +1 -1
  78. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js +268 -270
  79. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js.map +1 -1
  80. package/dist/collection/components/charts/wm-chart/wm-chart-slice.js +126 -126
  81. package/dist/collection/components/charts/wm-chart/wm-chart-slice.js.map +1 -1
  82. package/dist/collection/components/charts/wm-chart/wm-chart.js +447 -447
  83. package/dist/collection/components/charts/wm-chart/wm-chart.js.map +1 -1
  84. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js +208 -208
  85. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js.map +1 -1
  86. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js +144 -144
  87. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js.map +1 -1
  88. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-slice.js +122 -122
  89. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-slice.js.map +1 -1
  90. package/dist/collection/components/wm-action-menu/wm-action-menu.js +473 -473
  91. package/dist/collection/components/wm-action-menu/wm-action-menu.js.map +1 -1
  92. package/dist/collection/components/wm-button/wm-button.js +576 -576
  93. package/dist/collection/components/wm-button/wm-button.js.map +1 -1
  94. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js +984 -984
  95. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js.map +1 -1
  96. package/dist/collection/components/wm-datepicker/wm-datepicker.css +4 -4
  97. package/dist/collection/components/wm-datepicker/wm-datepicker.js +492 -492
  98. package/dist/collection/components/wm-datepicker/wm-datepicker.js.map +1 -1
  99. package/dist/collection/components/wm-file/wm-file.js +334 -334
  100. package/dist/collection/components/wm-file/wm-file.js.map +1 -1
  101. package/dist/collection/components/wm-file-list/wm-file-list.js +153 -153
  102. package/dist/collection/components/wm-file-list/wm-file-list.js.map +1 -1
  103. package/dist/collection/components/wm-input/wm-input.css +4 -4
  104. package/dist/collection/components/wm-input/wm-input.js +428 -444
  105. package/dist/collection/components/wm-input/wm-input.js.map +1 -1
  106. package/dist/collection/components/wm-menuitem/wm-menuitem.js +455 -455
  107. package/dist/collection/components/wm-menuitem/wm-menuitem.js.map +1 -1
  108. package/dist/collection/components/wm-modal/wm-modal-footer.js +139 -139
  109. package/dist/collection/components/wm-modal/wm-modal-footer.js.map +1 -1
  110. package/dist/collection/components/wm-modal/wm-modal-header.js +83 -83
  111. package/dist/collection/components/wm-modal/wm-modal-header.js.map +1 -1
  112. package/dist/collection/components/wm-modal/wm-modal.js +463 -463
  113. package/dist/collection/components/wm-modal/wm-modal.js.map +1 -1
  114. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +177 -177
  115. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js.map +1 -1
  116. package/dist/collection/components/wm-navigation/wm-navigation-item.js +131 -131
  117. package/dist/collection/components/wm-navigation/wm-navigation-item.js.map +1 -1
  118. package/dist/collection/components/wm-navigation/wm-navigation.js +218 -223
  119. package/dist/collection/components/wm-navigation/wm-navigation.js.map +1 -1
  120. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +107 -107
  121. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js.map +1 -1
  122. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +124 -124
  123. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js.map +1 -1
  124. package/dist/collection/components/wm-navigator/wm-navigator.js +468 -468
  125. package/dist/collection/components/wm-navigator/wm-navigator.js.map +1 -1
  126. package/dist/collection/components/wm-option/wm-option.js +436 -436
  127. package/dist/collection/components/wm-option/wm-option.js.map +1 -1
  128. package/dist/collection/components/wm-pagination/wm-pagination.js +371 -371
  129. package/dist/collection/components/wm-pagination/wm-pagination.js.map +1 -1
  130. package/dist/collection/components/wm-search/wm-search.css +5 -3
  131. package/dist/collection/components/wm-search/wm-search.js +440 -447
  132. package/dist/collection/components/wm-search/wm-search.js.map +1 -1
  133. package/dist/collection/components/wm-select/wm-select.css +4 -4
  134. package/dist/collection/components/wm-select/wm-select.js +1055 -1058
  135. package/dist/collection/components/wm-select/wm-select.js.map +1 -1
  136. package/dist/collection/components/wm-snackbar/wm-snackbar.js +283 -287
  137. package/dist/collection/components/wm-snackbar/wm-snackbar.js.map +1 -1
  138. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +212 -212
  139. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js.map +1 -1
  140. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +328 -328
  141. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js.map +1 -1
  142. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +109 -109
  143. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js.map +1 -1
  144. package/dist/collection/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.js +123 -123
  145. package/dist/collection/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.js.map +1 -1
  146. package/dist/collection/components/wm-tag-input/wm-tag-input.css +4 -4
  147. package/dist/collection/components/wm-tag-input/wm-tag-input.js +1267 -1279
  148. package/dist/collection/components/wm-tag-input/wm-tag-input.js.map +1 -1
  149. package/dist/collection/components/wm-timepicker/wm-timepicker.css +4 -4
  150. package/dist/collection/components/wm-timepicker/wm-timepicker.js +606 -606
  151. package/dist/collection/components/wm-timepicker/wm-timepicker.js.map +1 -1
  152. package/dist/collection/components/wm-toggletip/wm-toggletip.js +254 -254
  153. package/dist/collection/components/wm-toggletip/wm-toggletip.js.map +1 -1
  154. package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js +773 -775
  155. package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js.map +1 -1
  156. package/dist/collection/components/wm-uploader/wm-uploader.js +965 -1034
  157. package/dist/collection/components/wm-uploader/wm-uploader.js.map +1 -1
  158. package/dist/collection/components/wm-wrapper/wm-wrapper.js +29 -29
  159. package/dist/collection/components/wm-wrapper/wm-wrapper.js.map +1 -1
  160. package/dist/collection/dev/scripts.js +20 -20
  161. package/dist/collection/global/__mocks__/functions.js +7 -7
  162. package/dist/collection/global/__mocks__/functions.js.map +1 -1
  163. package/dist/collection/global/functions.js +521 -521
  164. package/dist/collection/global/functions.js.map +1 -1
  165. package/dist/collection/global/global.js +70 -70
  166. package/dist/collection/global/global.js.map +1 -1
  167. package/dist/collection/global/interfaces.js +50 -50
  168. package/dist/collection/global/interfaces.js.map +1 -1
  169. package/dist/collection/global/intl.js +133 -7
  170. package/dist/collection/global/intl.js.map +1 -1
  171. package/dist/collection/global/services/__mocks__/http-service.js +131 -131
  172. package/dist/collection/global/services/__mocks__/http-service.js.map +1 -1
  173. package/dist/collection/global/services/http-service.js +51 -51
  174. package/dist/collection/global/services/http-service.js.map +1 -1
  175. package/dist/collection/lang/lang.js +6 -6
  176. package/dist/collection/lang/lang.js.map +1 -1
  177. package/dist/collection/lang/missing.js +43 -43
  178. package/dist/collection/lang/piglatin.js +93 -93
  179. package/dist/esm/{chartFunctions-1df8043a.js → chartFunctions-a72f5835.js} +591 -591
  180. package/dist/esm/chartFunctions-a72f5835.js.map +1 -0
  181. package/dist/esm/{functions-bb1309d0.js → functions-dc9964aa.js} +478 -478
  182. package/dist/esm/{functions-bb1309d0.js.map → functions-dc9964aa.js.map} +1 -1
  183. package/dist/esm/{global-2c5c2727.js → global-3d0ef32b.js} +63 -63
  184. package/dist/esm/global-3d0ef32b.js.map +1 -0
  185. package/dist/esm/{http-service-3dc3b3e7.js → http-service-5d037e16.js} +50 -50
  186. package/dist/esm/http-service-5d037e16.js.map +1 -0
  187. package/dist/esm/{interfaces-2b97fab2.js → interfaces-61c6305b.js} +30 -30
  188. package/dist/esm/interfaces-61c6305b.js.map +1 -0
  189. package/dist/esm/intl-4d4826dd.js +137 -0
  190. package/dist/esm/intl-4d4826dd.js.map +1 -0
  191. package/dist/esm/loader.js +2 -2
  192. package/dist/esm/polyfills/core-js.js +0 -0
  193. package/dist/esm/polyfills/dom.js +0 -0
  194. package/dist/esm/polyfills/es5-html-element.js +0 -0
  195. package/dist/esm/polyfills/index.js +0 -0
  196. package/dist/esm/polyfills/system.js +0 -0
  197. package/dist/esm/priv-chart-popover.entry.js +91 -91
  198. package/dist/esm/priv-chart-popover.entry.js.map +1 -1
  199. package/dist/esm/priv-datepicker.entry.js +657 -657
  200. package/dist/esm/priv-datepicker.entry.js.map +1 -1
  201. package/dist/esm/priv-navigator-button.entry.js +19 -19
  202. package/dist/esm/priv-navigator-button.entry.js.map +1 -1
  203. package/dist/esm/priv-navigator-item.entry.js +23 -23
  204. package/dist/esm/priv-navigator-item.entry.js.map +1 -1
  205. package/dist/esm/ripple.js +2 -2
  206. package/dist/esm/wm-action-menu_2.entry.js +334 -334
  207. package/dist/esm/wm-action-menu_2.entry.js.map +1 -1
  208. package/dist/esm/wm-button.entry.js +260 -260
  209. package/dist/esm/wm-button.entry.js.map +1 -1
  210. package/dist/esm/wm-chart-slice.entry.js +18 -18
  211. package/dist/esm/wm-chart-slice.entry.js.map +1 -1
  212. package/dist/esm/wm-chart.entry.js +179 -179
  213. package/dist/esm/wm-chart.entry.js.map +1 -1
  214. package/dist/esm/wm-datepicker.entry.js +264 -264
  215. package/dist/esm/wm-datepicker.entry.js.map +1 -1
  216. package/dist/esm/wm-file-list.entry.js +35 -35
  217. package/dist/esm/wm-file-list.entry.js.map +1 -1
  218. package/dist/esm/wm-file.entry.js +201 -201
  219. package/dist/esm/wm-file.entry.js.map +1 -1
  220. package/dist/esm/wm-input.entry.js +124 -140
  221. package/dist/esm/wm-input.entry.js.map +1 -1
  222. package/dist/esm/wm-modal-footer.entry.js +33 -33
  223. package/dist/esm/wm-modal-footer.entry.js.map +1 -1
  224. package/dist/esm/wm-modal-header.entry.js +32 -32
  225. package/dist/esm/wm-modal-header.entry.js.map +1 -1
  226. package/dist/esm/wm-modal.entry.js +152 -152
  227. package/dist/esm/wm-modal.entry.js.map +1 -1
  228. package/dist/esm/wm-navigation_3.entry.js +225 -230
  229. package/dist/esm/wm-navigation_3.entry.js.map +1 -1
  230. package/dist/esm/wm-navigator.entry.js +264 -264
  231. package/dist/esm/wm-navigator.entry.js.map +1 -1
  232. package/dist/esm/wm-network-uploader.entry.js +465 -467
  233. package/dist/esm/wm-network-uploader.entry.js.map +1 -1
  234. package/dist/esm/wm-option_2.entry.js +769 -772
  235. package/dist/esm/wm-option_2.entry.js.map +1 -1
  236. package/dist/esm/wm-pagination.entry.js +179 -179
  237. package/dist/esm/wm-pagination.entry.js.map +1 -1
  238. package/dist/esm/wm-progress-indicator_3.entry.js +155 -155
  239. package/dist/esm/wm-progress-indicator_3.entry.js.map +1 -1
  240. package/dist/esm/wm-search.entry.js +185 -192
  241. package/dist/esm/wm-search.entry.js.map +1 -1
  242. package/dist/esm/wm-snackbar.entry.js +155 -159
  243. package/dist/esm/wm-snackbar.entry.js.map +1 -1
  244. package/dist/esm/wm-tab-item_3.entry.js +264 -264
  245. package/dist/esm/wm-tab-item_3.entry.js.map +1 -1
  246. package/dist/esm/wm-tag-input-row.entry.js +14 -14
  247. package/dist/esm/wm-tag-input-row.entry.js.map +1 -1
  248. package/dist/esm/wm-tag-input.entry.js +912 -924
  249. package/dist/esm/wm-tag-input.entry.js.map +1 -1
  250. package/dist/esm/wm-timepicker.entry.js +386 -386
  251. package/dist/esm/wm-timepicker.entry.js.map +1 -1
  252. package/dist/esm/wm-toggletip.entry.js +130 -130
  253. package/dist/esm/wm-toggletip.entry.js.map +1 -1
  254. package/dist/esm/wm-uploader.entry.js +441 -510
  255. package/dist/esm/wm-uploader.entry.js.map +1 -1
  256. package/dist/esm/wm-wrapper.entry.js +12 -12
  257. package/dist/esm/wm-wrapper.entry.js.map +1 -1
  258. package/dist/esm-es5/{chartFunctions-1df8043a.js → chartFunctions-a72f5835.js} +2 -2
  259. package/dist/esm-es5/chartFunctions-a72f5835.js.map +1 -0
  260. package/dist/esm-es5/{functions-bb1309d0.js → functions-dc9964aa.js} +1 -1
  261. package/dist/esm-es5/{functions-bb1309d0.js.map → functions-dc9964aa.js.map} +1 -1
  262. package/dist/esm-es5/global-3d0ef32b.js +2 -0
  263. package/dist/esm-es5/global-3d0ef32b.js.map +1 -0
  264. package/dist/esm-es5/{http-service-3dc3b3e7.js → http-service-5d037e16.js} +1 -1
  265. package/dist/esm-es5/http-service-5d037e16.js.map +1 -0
  266. package/dist/esm-es5/{interfaces-2b97fab2.js → interfaces-61c6305b.js} +1 -1
  267. package/dist/esm-es5/interfaces-61c6305b.js.map +1 -0
  268. package/dist/esm-es5/intl-4d4826dd.js +2 -0
  269. package/dist/esm-es5/intl-4d4826dd.js.map +1 -0
  270. package/dist/esm-es5/loader.js +1 -1
  271. package/dist/esm-es5/loader.js.map +1 -1
  272. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  273. package/dist/esm-es5/priv-chart-popover.entry.js.map +1 -1
  274. package/dist/esm-es5/priv-datepicker.entry.js +1 -1
  275. package/dist/esm-es5/priv-datepicker.entry.js.map +1 -1
  276. package/dist/esm-es5/priv-navigator-button.entry.js.map +1 -1
  277. package/dist/esm-es5/priv-navigator-item.entry.js.map +1 -1
  278. package/dist/esm-es5/ripple.js +1 -1
  279. package/dist/esm-es5/ripple.js.map +1 -1
  280. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  281. package/dist/esm-es5/wm-action-menu_2.entry.js.map +1 -1
  282. package/dist/esm-es5/wm-button.entry.js +1 -1
  283. package/dist/esm-es5/wm-button.entry.js.map +1 -1
  284. package/dist/esm-es5/wm-chart-slice.entry.js.map +1 -1
  285. package/dist/esm-es5/wm-chart.entry.js +1 -1
  286. package/dist/esm-es5/wm-chart.entry.js.map +1 -1
  287. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  288. package/dist/esm-es5/wm-datepicker.entry.js.map +1 -1
  289. package/dist/esm-es5/wm-file-list.entry.js.map +1 -1
  290. package/dist/esm-es5/wm-file.entry.js +1 -1
  291. package/dist/esm-es5/wm-file.entry.js.map +1 -1
  292. package/dist/esm-es5/wm-input.entry.js +1 -1
  293. package/dist/esm-es5/wm-input.entry.js.map +1 -1
  294. package/dist/esm-es5/wm-modal-footer.entry.js.map +1 -1
  295. package/dist/esm-es5/wm-modal-header.entry.js +1 -1
  296. package/dist/esm-es5/wm-modal-header.entry.js.map +1 -1
  297. package/dist/esm-es5/wm-modal.entry.js +1 -1
  298. package/dist/esm-es5/wm-modal.entry.js.map +1 -1
  299. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  300. package/dist/esm-es5/wm-navigation_3.entry.js.map +1 -1
  301. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  302. package/dist/esm-es5/wm-navigator.entry.js.map +1 -1
  303. package/dist/esm-es5/wm-network-uploader.entry.js +1 -1
  304. package/dist/esm-es5/wm-network-uploader.entry.js.map +1 -1
  305. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  306. package/dist/esm-es5/wm-option_2.entry.js.map +1 -1
  307. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  308. package/dist/esm-es5/wm-pagination.entry.js.map +1 -1
  309. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  310. package/dist/esm-es5/wm-progress-indicator_3.entry.js.map +1 -1
  311. package/dist/esm-es5/wm-search.entry.js +1 -1
  312. package/dist/esm-es5/wm-search.entry.js.map +1 -1
  313. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  314. package/dist/esm-es5/wm-snackbar.entry.js.map +1 -1
  315. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  316. package/dist/esm-es5/wm-tab-item_3.entry.js.map +1 -1
  317. package/dist/esm-es5/wm-tag-input-row.entry.js.map +1 -1
  318. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  319. package/dist/esm-es5/wm-tag-input.entry.js.map +1 -1
  320. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  321. package/dist/esm-es5/wm-timepicker.entry.js.map +1 -1
  322. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  323. package/dist/esm-es5/wm-toggletip.entry.js.map +1 -1
  324. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  325. package/dist/esm-es5/wm-uploader.entry.js.map +1 -1
  326. package/dist/esm-es5/wm-wrapper.entry.js.map +1 -1
  327. package/dist/ripple/{p-3f6c7e6c.entry.js → p-002d067e.entry.js} +2 -2
  328. package/dist/ripple/p-002d067e.entry.js.map +1 -0
  329. package/dist/ripple/p-02a1000a.entry.js +2 -0
  330. package/dist/ripple/p-02a1000a.entry.js.map +1 -0
  331. package/dist/ripple/{p-21bb563a.system.entry.js → p-04ae66fd.system.entry.js} +2 -2
  332. package/dist/ripple/p-04ae66fd.system.entry.js.map +1 -0
  333. package/dist/ripple/{p-c38f6103.system.js → p-0826dc64.system.js} +2 -2
  334. package/dist/ripple/{p-c38f6103.system.js.map → p-0826dc64.system.js.map} +1 -1
  335. package/dist/ripple/{p-f5df5903.system.js → p-08b7ec08.system.js} +1 -1
  336. package/dist/ripple/p-08b7ec08.system.js.map +1 -0
  337. package/dist/ripple/{p-d5b0809e.entry.js → p-0ad3a708.entry.js} +2 -2
  338. package/dist/ripple/p-0ad3a708.entry.js.map +1 -0
  339. package/dist/ripple/p-0cd13c7d.system.entry.js +2 -0
  340. package/dist/ripple/p-0cd13c7d.system.entry.js.map +1 -0
  341. package/dist/ripple/p-0d7bccf7.entry.js.map +1 -1
  342. package/dist/ripple/p-0eb7b1b7.system.entry.js +2 -0
  343. package/dist/ripple/p-0eb7b1b7.system.entry.js.map +1 -0
  344. package/dist/ripple/{p-70768add.entry.js → p-11124a23.entry.js} +2 -2
  345. package/dist/ripple/p-11124a23.entry.js.map +1 -0
  346. package/dist/ripple/p-1808b90a.entry.js +2 -0
  347. package/dist/ripple/p-1808b90a.entry.js.map +1 -0
  348. package/dist/ripple/p-1fd20e05.system.entry.js +2 -0
  349. package/dist/ripple/p-1fd20e05.system.entry.js.map +1 -0
  350. package/dist/ripple/{p-f36b1c58.system.entry.js → p-23fa1ff6.system.entry.js} +2 -2
  351. package/dist/ripple/p-23fa1ff6.system.entry.js.map +1 -0
  352. package/dist/ripple/p-24a4cb11.system.entry.js.map +1 -1
  353. package/dist/ripple/p-2c2a7092.system.entry.js.map +1 -1
  354. package/dist/ripple/{p-9d02957d.system.js → p-313b6073.system.js} +1 -1
  355. package/dist/ripple/p-313b6073.system.js.map +1 -0
  356. package/dist/ripple/p-33558ec4.system.entry.js.map +1 -1
  357. package/dist/ripple/{p-28c12986.system.entry.js → p-33ec18d4.system.entry.js} +2 -2
  358. package/dist/ripple/p-33ec18d4.system.entry.js.map +1 -0
  359. package/dist/ripple/{p-7d0f3abe.entry.js → p-341aa131.entry.js} +2 -2
  360. package/dist/ripple/p-341aa131.entry.js.map +1 -0
  361. package/dist/ripple/p-3759b7af.system.entry.js.map +1 -1
  362. package/dist/ripple/p-38449dff.system.entry.js +2 -0
  363. package/dist/ripple/p-38449dff.system.entry.js.map +1 -0
  364. package/dist/ripple/{p-ee97c3f6.entry.js → p-384c4981.entry.js} +2 -2
  365. package/dist/ripple/p-384c4981.entry.js.map +1 -0
  366. package/dist/ripple/{p-b81ce905.system.entry.js → p-3869a69e.system.entry.js} +2 -2
  367. package/dist/ripple/p-3869a69e.system.entry.js.map +1 -0
  368. package/dist/ripple/p-4391166c.entry.js.map +1 -1
  369. package/dist/ripple/{p-e6e7cb2d.entry.js → p-43be123d.entry.js} +2 -2
  370. package/dist/ripple/p-43be123d.entry.js.map +1 -0
  371. package/dist/ripple/p-4a014591.entry.js.map +1 -1
  372. package/dist/ripple/p-4a06d0a9.system.entry.js +2 -0
  373. package/dist/ripple/p-4a06d0a9.system.entry.js.map +1 -0
  374. package/dist/ripple/p-4e02e2ae.entry.js +2 -0
  375. package/dist/ripple/p-4e02e2ae.entry.js.map +1 -0
  376. package/dist/ripple/p-56cd4d5e.entry.js +2 -0
  377. package/dist/ripple/p-56cd4d5e.entry.js.map +1 -0
  378. package/dist/ripple/p-59654f8e.entry.js.map +1 -1
  379. package/dist/ripple/p-5cc287d2.entry.js +2 -0
  380. package/dist/ripple/p-5cc287d2.entry.js.map +1 -0
  381. package/dist/ripple/{p-8eebf787.entry.js → p-7e0e6b00.entry.js} +2 -2
  382. package/dist/ripple/p-7e0e6b00.entry.js.map +1 -0
  383. package/dist/ripple/{p-0400599e.system.entry.js → p-833c622f.system.entry.js} +2 -2
  384. package/dist/ripple/p-833c622f.system.entry.js.map +1 -0
  385. package/dist/ripple/{p-b00991d9.system.entry.js → p-8613600d.system.entry.js} +2 -2
  386. package/dist/ripple/p-8613600d.system.entry.js.map +1 -0
  387. package/dist/ripple/{p-43f1298b.js → p-888bec42.js} +1 -1
  388. package/dist/ripple/p-888bec42.js.map +1 -0
  389. package/dist/ripple/p-889579fc.entry.js +2 -0
  390. package/dist/ripple/p-889579fc.entry.js.map +1 -0
  391. package/dist/ripple/p-8c51e9f8.system.entry.js.map +1 -1
  392. package/dist/ripple/{p-42158d44.entry.js → p-8db604d2.entry.js} +2 -2
  393. package/dist/ripple/p-8db604d2.entry.js.map +1 -0
  394. package/dist/ripple/{p-24ef6556.system.entry.js → p-91deb45f.system.entry.js} +2 -2
  395. package/dist/ripple/p-91deb45f.system.entry.js.map +1 -0
  396. package/dist/ripple/p-9338011f.system.entry.js +2 -0
  397. package/dist/ripple/p-9338011f.system.entry.js.map +1 -0
  398. package/dist/ripple/p-976b2789.system.entry.js.map +1 -1
  399. package/dist/ripple/{p-1aa16d42.js → p-994303f2.js} +2 -2
  400. package/dist/ripple/p-994303f2.js.map +1 -0
  401. package/dist/ripple/p-9b2dfb54.js +2 -0
  402. package/dist/ripple/p-9b2dfb54.js.map +1 -0
  403. package/dist/ripple/p-9b9eb944.entry.js.map +1 -1
  404. package/dist/ripple/{p-980afed1.system.entry.js → p-a6d64d8a.system.entry.js} +2 -2
  405. package/dist/ripple/p-a6d64d8a.system.entry.js.map +1 -0
  406. package/dist/ripple/{p-fd8070fb.js → p-a6d6eae7.js} +1 -1
  407. package/dist/ripple/p-a6d6eae7.js.map +1 -0
  408. package/dist/ripple/{p-219fbe2b.system.entry.js → p-a73cf968.system.entry.js} +2 -2
  409. package/dist/ripple/p-a73cf968.system.entry.js.map +1 -0
  410. package/dist/ripple/{p-76aafb99.system.entry.js → p-aed625c1.system.entry.js} +2 -2
  411. package/dist/ripple/p-aed625c1.system.entry.js.map +1 -0
  412. package/dist/ripple/{p-0d36ceba.system.entry.js → p-b5b521e4.system.entry.js} +2 -2
  413. package/dist/ripple/p-b5b521e4.system.entry.js.map +1 -0
  414. package/dist/ripple/{p-47d223f1.system.entry.js → p-b7451e73.system.entry.js} +2 -2
  415. package/dist/ripple/p-b7451e73.system.entry.js.map +1 -0
  416. package/dist/ripple/p-bafdcb4e.system.entry.js +2 -0
  417. package/dist/ripple/p-bafdcb4e.system.entry.js.map +1 -0
  418. package/dist/ripple/{p-262713b9.entry.js → p-bb45e122.entry.js} +2 -2
  419. package/dist/ripple/p-bb45e122.entry.js.map +1 -0
  420. package/dist/ripple/p-bd84628c.system.entry.js +2 -0
  421. package/dist/ripple/p-bd84628c.system.entry.js.map +1 -0
  422. package/dist/ripple/p-bf569af0.entry.js.map +1 -1
  423. package/dist/ripple/p-c094f6a8.entry.js +2 -0
  424. package/dist/ripple/p-c094f6a8.entry.js.map +1 -0
  425. package/dist/ripple/p-c36002b6.system.js +2 -0
  426. package/dist/ripple/p-c36002b6.system.js.map +1 -0
  427. package/dist/ripple/p-c5bf7db8.entry.js +2 -0
  428. package/dist/ripple/p-c5bf7db8.entry.js.map +1 -0
  429. package/dist/ripple/p-c68b3798.system.js +2 -0
  430. package/dist/ripple/p-c68b3798.system.js.map +1 -0
  431. package/dist/ripple/{p-05e0f901.js → p-c6a0f7e5.js} +1 -1
  432. package/dist/ripple/{p-05e0f901.js.map → p-c6a0f7e5.js.map} +1 -1
  433. package/dist/ripple/{p-bcba3ce8.entry.js → p-d46f5794.entry.js} +2 -2
  434. package/dist/ripple/p-d46f5794.entry.js.map +1 -0
  435. package/dist/ripple/{p-d7ffac2f.entry.js → p-d48313e0.entry.js} +2 -2
  436. package/dist/ripple/p-d48313e0.entry.js.map +1 -0
  437. package/dist/ripple/p-d939cb54.entry.js.map +1 -1
  438. package/dist/ripple/p-dbfd1640.system.entry.js.map +1 -1
  439. package/dist/ripple/{p-d7c55ce1.entry.js → p-e22854c1.entry.js} +2 -2
  440. package/dist/ripple/p-e22854c1.entry.js.map +1 -0
  441. package/dist/ripple/p-e70bb79f.js +2 -0
  442. package/dist/ripple/p-e70bb79f.js.map +1 -0
  443. package/dist/ripple/{p-e99a7f36.entry.js → p-ed82573a.entry.js} +2 -2
  444. package/dist/ripple/p-ed82573a.entry.js.map +1 -0
  445. package/dist/ripple/{p-bc28c815.system.js → p-f0fd8695.system.js} +1 -1
  446. package/dist/ripple/{p-bc28c815.system.js.map → p-f0fd8695.system.js.map} +1 -1
  447. package/dist/ripple/{p-e5f84104.system.entry.js → p-f312d59a.system.entry.js} +2 -2
  448. package/dist/ripple/p-f312d59a.system.entry.js.map +1 -0
  449. package/dist/ripple/{p-c19ddc00.system.entry.js → p-f59a495a.system.entry.js} +2 -2
  450. package/dist/ripple/p-f59a495a.system.entry.js.map +1 -0
  451. package/dist/ripple/{p-cc8ca6bd.system.js → p-f80eb8a5.system.js} +2 -2
  452. package/dist/ripple/p-f80eb8a5.system.js.map +1 -0
  453. package/dist/ripple/{p-1be55579.system.entry.js → p-fb67c39e.system.entry.js} +2 -2
  454. package/dist/ripple/p-fb67c39e.system.entry.js.map +1 -0
  455. package/dist/ripple/{p-20d0d019.entry.js → p-fc08d5e1.entry.js} +2 -2
  456. package/dist/ripple/p-fc08d5e1.entry.js.map +1 -0
  457. package/dist/ripple/{p-d7b946ed.entry.js → p-fe7da854.entry.js} +2 -2
  458. package/dist/ripple/p-fe7da854.entry.js.map +1 -0
  459. package/dist/ripple/ripple.esm.js +1 -1
  460. package/dist/ripple/ripple.esm.js.map +1 -1
  461. package/dist/ripple/ripple.js +1 -1
  462. package/dist/types/components/charts/chartFunctions.d.ts +37 -37
  463. package/dist/types/components/charts/priv-chart-popover/priv-chart-popover.d.ts +27 -0
  464. package/dist/types/components/charts/wm-chart/wm-chart-slice.d.ts +11 -11
  465. package/dist/types/components/charts/wm-chart/wm-chart.d.ts +47 -0
  466. package/dist/types/components/charts/wm-progress-monitor/wm-progress-indicator.d.ts +29 -0
  467. package/dist/types/components/charts/wm-progress-monitor/wm-progress-monitor.d.ts +20 -0
  468. package/dist/types/components/charts/wm-progress-monitor/wm-progress-slice.d.ts +10 -10
  469. package/dist/types/components/wm-action-menu/wm-action-menu.d.ts +49 -0
  470. package/dist/types/components/wm-button/wm-button.d.ts +49 -0
  471. package/dist/types/components/wm-datepicker/priv-datepicker/priv-datepicker.d.ts +80 -0
  472. package/dist/types/components/wm-datepicker/wm-datepicker.d.ts +42 -0
  473. package/dist/types/components/wm-file/wm-file.d.ts +42 -0
  474. package/dist/types/components/wm-file-list/wm-file-list.d.ts +16 -0
  475. package/dist/types/components/wm-input/wm-input.d.ts +45 -0
  476. package/dist/types/components/wm-menuitem/wm-menuitem.d.ts +34 -0
  477. package/dist/types/components/wm-modal/wm-modal-footer.d.ts +14 -14
  478. package/dist/types/components/wm-modal/wm-modal-header.d.ts +10 -10
  479. package/dist/types/components/wm-modal/wm-modal.d.ts +40 -0
  480. package/dist/types/components/wm-navigation/wm-navigation-hamburger.d.ts +21 -0
  481. package/dist/types/components/wm-navigation/wm-navigation-item.d.ts +13 -0
  482. package/dist/types/components/wm-navigation/wm-navigation.d.ts +26 -0
  483. package/dist/types/components/wm-navigator/priv-navigator-button/priv-navigator-button.d.ts +10 -10
  484. package/dist/types/components/wm-navigator/priv-navigator-item/priv-navigator-item.d.ts +13 -0
  485. package/dist/types/components/wm-navigator/wm-navigator.d.ts +61 -0
  486. package/dist/types/components/wm-option/wm-option.d.ts +34 -0
  487. package/dist/types/components/wm-pagination/wm-pagination.d.ts +32 -32
  488. package/dist/types/components/wm-search/wm-search.d.ts +77 -0
  489. package/dist/types/components/wm-select/wm-select.d.ts +101 -0
  490. package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +31 -32
  491. package/dist/types/components/wm-tabs/wm-tab-item/wm-tab-item.d.ts +37 -0
  492. package/dist/types/components/wm-tabs/wm-tab-list/wm-tab-list.d.ts +52 -0
  493. package/dist/types/components/wm-tabs/wm-tab-panel/wm-tab-panel.d.ts +20 -0
  494. package/dist/types/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.d.ts +11 -0
  495. package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +135 -0
  496. package/dist/types/components/wm-timepicker/wm-timepicker.d.ts +62 -0
  497. package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +28 -0
  498. package/dist/types/components/wm-uploader/wm-network-uploader/wm-network-uploader.d.ts +85 -0
  499. package/dist/types/components/wm-uploader/wm-uploader.d.ts +99 -0
  500. package/dist/types/components/wm-wrapper/wm-wrapper.d.ts +7 -7
  501. package/dist/types/components.d.ts +27 -27
  502. package/dist/types/global/__mocks__/functions.d.ts +6 -6
  503. package/dist/types/global/functions.d.ts +48 -48
  504. package/dist/types/global/global.d.ts +1 -1
  505. package/dist/types/global/interfaces.d.ts +74 -74
  506. package/dist/types/global/intl.d.ts +29 -1
  507. package/dist/types/global/services/__mocks__/http-service.d.ts +6 -6
  508. package/dist/types/global/services/http-service.d.ts +4 -4
  509. package/dist/types/lang/lang.d.ts +5 -5
  510. package/package.json +46 -46
  511. package/dist/cjs/chartFunctions-9dce0ea3.js.map +0 -1
  512. package/dist/cjs/global-c22b1249.js.map +0 -1
  513. package/dist/cjs/http-service-494d81de.js.map +0 -1
  514. package/dist/cjs/interfaces-a3338581.js.map +0 -1
  515. package/dist/cjs/intl-e14dc0a1.js +0 -13
  516. package/dist/cjs/intl-e14dc0a1.js.map +0 -1
  517. package/dist/esm/chartFunctions-1df8043a.js.map +0 -1
  518. package/dist/esm/global-2c5c2727.js.map +0 -1
  519. package/dist/esm/http-service-3dc3b3e7.js.map +0 -1
  520. package/dist/esm/interfaces-2b97fab2.js.map +0 -1
  521. package/dist/esm/intl-4153b9ef.js +0 -11
  522. package/dist/esm/intl-4153b9ef.js.map +0 -1
  523. package/dist/esm-es5/chartFunctions-1df8043a.js.map +0 -1
  524. package/dist/esm-es5/global-2c5c2727.js +0 -2
  525. package/dist/esm-es5/global-2c5c2727.js.map +0 -1
  526. package/dist/esm-es5/http-service-3dc3b3e7.js.map +0 -1
  527. package/dist/esm-es5/interfaces-2b97fab2.js.map +0 -1
  528. package/dist/esm-es5/intl-4153b9ef.js +0 -2
  529. package/dist/esm-es5/intl-4153b9ef.js.map +0 -1
  530. package/dist/ripple/p-0400599e.system.entry.js.map +0 -1
  531. package/dist/ripple/p-075607ac.entry.js +0 -2
  532. package/dist/ripple/p-075607ac.entry.js.map +0 -1
  533. package/dist/ripple/p-08d17d5a.entry.js +0 -2
  534. package/dist/ripple/p-08d17d5a.entry.js.map +0 -1
  535. package/dist/ripple/p-0d36ceba.system.entry.js.map +0 -1
  536. package/dist/ripple/p-124da634.entry.js +0 -2
  537. package/dist/ripple/p-124da634.entry.js.map +0 -1
  538. package/dist/ripple/p-1aa16d42.js.map +0 -1
  539. package/dist/ripple/p-1be55579.system.entry.js.map +0 -1
  540. package/dist/ripple/p-20d0d019.entry.js.map +0 -1
  541. package/dist/ripple/p-219fbe2b.system.entry.js.map +0 -1
  542. package/dist/ripple/p-21bb563a.system.entry.js.map +0 -1
  543. package/dist/ripple/p-241d4d41.system.entry.js +0 -2
  544. package/dist/ripple/p-241d4d41.system.entry.js.map +0 -1
  545. package/dist/ripple/p-24ef6556.system.entry.js.map +0 -1
  546. package/dist/ripple/p-262713b9.entry.js.map +0 -1
  547. package/dist/ripple/p-28c12986.system.entry.js.map +0 -1
  548. package/dist/ripple/p-3f6c7e6c.entry.js.map +0 -1
  549. package/dist/ripple/p-42158d44.entry.js.map +0 -1
  550. package/dist/ripple/p-43f1298b.js.map +0 -1
  551. package/dist/ripple/p-47d223f1.system.entry.js.map +0 -1
  552. package/dist/ripple/p-4d30004f.entry.js +0 -2
  553. package/dist/ripple/p-4d30004f.entry.js.map +0 -1
  554. package/dist/ripple/p-58b1415e.system.js +0 -2
  555. package/dist/ripple/p-58b1415e.system.js.map +0 -1
  556. package/dist/ripple/p-5cda4e9c.system.entry.js +0 -2
  557. package/dist/ripple/p-5cda4e9c.system.entry.js.map +0 -1
  558. package/dist/ripple/p-64f15a9e.system.entry.js +0 -2
  559. package/dist/ripple/p-64f15a9e.system.entry.js.map +0 -1
  560. package/dist/ripple/p-6e6b5b2c.system.entry.js +0 -2
  561. package/dist/ripple/p-6e6b5b2c.system.entry.js.map +0 -1
  562. package/dist/ripple/p-70768add.entry.js.map +0 -1
  563. package/dist/ripple/p-76aafb99.system.entry.js.map +0 -1
  564. package/dist/ripple/p-7d0f3abe.entry.js.map +0 -1
  565. package/dist/ripple/p-8aa85021.system.entry.js +0 -2
  566. package/dist/ripple/p-8aa85021.system.entry.js.map +0 -1
  567. package/dist/ripple/p-8eebf787.entry.js.map +0 -1
  568. package/dist/ripple/p-96b0ca93.system.js +0 -2
  569. package/dist/ripple/p-96b0ca93.system.js.map +0 -1
  570. package/dist/ripple/p-980afed1.system.entry.js.map +0 -1
  571. package/dist/ripple/p-9d02957d.system.js.map +0 -1
  572. package/dist/ripple/p-adbeb6a8.system.entry.js +0 -2
  573. package/dist/ripple/p-adbeb6a8.system.entry.js.map +0 -1
  574. package/dist/ripple/p-b00991d9.system.entry.js.map +0 -1
  575. package/dist/ripple/p-b81ce905.system.entry.js.map +0 -1
  576. package/dist/ripple/p-bcba3ce8.entry.js.map +0 -1
  577. package/dist/ripple/p-bf808ec4.entry.js +0 -2
  578. package/dist/ripple/p-bf808ec4.entry.js.map +0 -1
  579. package/dist/ripple/p-c19ddc00.system.entry.js.map +0 -1
  580. package/dist/ripple/p-cc8ca6bd.system.js.map +0 -1
  581. package/dist/ripple/p-ce52357e.js +0 -2
  582. package/dist/ripple/p-ce52357e.js.map +0 -1
  583. package/dist/ripple/p-d0f5773a.entry.js +0 -2
  584. package/dist/ripple/p-d0f5773a.entry.js.map +0 -1
  585. package/dist/ripple/p-d5b0809e.entry.js.map +0 -1
  586. package/dist/ripple/p-d7b946ed.entry.js.map +0 -1
  587. package/dist/ripple/p-d7c55ce1.entry.js.map +0 -1
  588. package/dist/ripple/p-d7ffac2f.entry.js.map +0 -1
  589. package/dist/ripple/p-dbf657c5.js +0 -2
  590. package/dist/ripple/p-dbf657c5.js.map +0 -1
  591. package/dist/ripple/p-e1b812ed.entry.js +0 -2
  592. package/dist/ripple/p-e1b812ed.entry.js.map +0 -1
  593. package/dist/ripple/p-e5f84104.system.entry.js.map +0 -1
  594. package/dist/ripple/p-e6e7cb2d.entry.js.map +0 -1
  595. package/dist/ripple/p-e99a7f36.entry.js.map +0 -1
  596. package/dist/ripple/p-ed14d37c.system.entry.js +0 -2
  597. package/dist/ripple/p-ed14d37c.system.entry.js.map +0 -1
  598. package/dist/ripple/p-ee97c3f6.entry.js.map +0 -1
  599. package/dist/ripple/p-f3130941.entry.js +0 -2
  600. package/dist/ripple/p-f3130941.entry.js.map +0 -1
  601. package/dist/ripple/p-f36b1c58.system.entry.js.map +0 -1
  602. package/dist/ripple/p-f4a622a9.system.entry.js +0 -2
  603. package/dist/ripple/p-f4a622a9.system.entry.js.map +0 -1
  604. package/dist/ripple/p-f5df5903.system.js.map +0 -1
  605. package/dist/ripple/p-fd8070fb.js.map +0 -1
@@ -1,1279 +1,1267 @@
1
- import { h, Host, forceUpdate, } from "@stencil/core";
2
- import { csvToArray, debounce, generateId, hideTooltip, intl, measureText, safeParseJSON, shouldOpenUp, showTooltip, } from "../../global/functions";
3
- export class TagInput {
4
- constructor() {
5
- this.uid = this.el.id ? this.el.id : generateId();
6
- this.openUp = false;
7
- this.tooltipVisible = false;
8
- this.debouncedUpdate = debounce(() => forceUpdate(this.el), 30);
9
- this.label = undefined;
10
- this.labelPosition = "top";
11
- this.options = "";
12
- this.selectedTags = "";
13
- this.info = undefined;
14
- this.errorMessage = undefined;
15
- this.addNew = true;
16
- this.placeholder = undefined;
17
- this.requiredField = false;
18
- this.characterLimit = 50;
19
- this.maxTags = undefined;
20
- this.tagInputType = "dropdown";
21
- this.colHeaders = undefined;
22
- this.colWidths = undefined;
23
- this.colWrap = undefined;
24
- this.messageConfig = "";
25
- this.focusedListItem = undefined;
26
- this.focusedTag = null;
27
- this.tablePosition = { row: 0, column: 1 };
28
- this.isExpanded = false;
29
- this.tagsList = csvToArray(this.selectedTags);
30
- this.optionsList = csvToArray(this.options);
31
- this.charCount = 0;
32
- this.liveRegionMessage = "";
33
- }
34
- get focusedElement() {
35
- return this.el.shadowRoot.activeElement;
36
- }
37
- get listItemEls() {
38
- return Array.from(this.dropdownEl.querySelectorAll("li"));
39
- }
40
- get tagEls() {
41
- return this.tagAreaEl ? Array.from(this.tagAreaEl.querySelectorAll(".tag")) : [];
42
- }
43
- get nonLockedTagEls() {
44
- return this.tagEls.filter((tag) => !tag.classList.contains("locked"));
45
- }
46
- get optionEls() {
47
- return Array.from(this.dropdownEl.querySelectorAll(".option"));
48
- }
49
- get wmRowEls() {
50
- return Array.from(this.el.querySelectorAll("wm-tag-input-row"));
51
- }
52
- get localRowEls() {
53
- return Array.from(this.el.shadowRoot.querySelectorAll("tr"));
54
- }
55
- get filteredRows() {
56
- return this.wmRowEls.filter((row) => {
57
- const colValues = [row.col1, row.col2, row.col3, row.col4].join("").toLowerCase();
58
- return this.inputEl && this.inputEl.value ? colValues.includes(this.inputEl.value.toLowerCase()) : true;
59
- });
60
- }
61
- get nonLockedTagsList() {
62
- let list = [];
63
- if (this.tagInputType === "table") {
64
- this.tagsList.forEach((id) => {
65
- const correspondingRowEl = this.wmRowEls.filter((row) => id === row.id)[0];
66
- if (!correspondingRowEl.locked) {
67
- list.push(id);
68
- }
69
- });
70
- }
71
- else if (this.tagInputType === "dropdown") {
72
- list = this.tagsList;
73
- }
74
- return list;
75
- }
76
- get tagLimitReached() {
77
- return !!(this.maxTags && this.tagsList.length >= this.maxTags);
78
- }
79
- get noResultsMessage() {
80
- return intl.formatMessage({
81
- id: "tagInput.noResults",
82
- defaultMessage: "No results match your search.",
83
- description: "Message displayed when a user's search returns empty.",
84
- });
85
- }
86
- get componentMessages() {
87
- const addNewHelpText = intl.formatMessage({
88
- id: "tagInput.addNewHelpText",
89
- defaultMessage: "Press the Enter or Comma key to add a new tag.",
90
- description: "Help text appearing in a dropdown. Use imperative",
91
- });
92
- const selectionHelpText = intl.formatMessage({
93
- id: "tagInput.selectionHelpText",
94
- defaultMessage: "Search and select a tag.",
95
- description: "Help text appearing in a dropdown. Use imperative",
96
- });
97
- const maxTagsReachedMessage = intl.formatMessage({
98
- id: "tagInput.maxTagsReached",
99
- defaultMessage: "No more tags can be added because the limit has been reached.",
100
- });
101
- const tagAreaInstructions = intl.formatMessage({
102
- id: "tagInput.tagAreaInstructions",
103
- defaultMessage: "tag selection. Press Backspace or Delete to remove a tag.",
104
- });
105
- const tagsAddedMessage = intl.formatMessage({
106
- id: "tagInput.tagsAdded",
107
- defaultMessage: "Tags added",
108
- description: "For the user to understand how close they are to the tag limit, followed by x/y count",
109
- });
110
- const defaultConfig = {
111
- addNewHelpText: addNewHelpText,
112
- selectionHelpText: selectionHelpText,
113
- maxTagsReached: maxTagsReachedMessage,
114
- tagAreaInstructions: tagAreaInstructions,
115
- tagsAdded: tagsAddedMessage,
116
- };
117
- const userProvidedConfig = safeParseJSON(this.messageConfig);
118
- return userProvidedConfig ? Object.assign(Object.assign({}, defaultConfig), userProvidedConfig) : defaultConfig;
119
- }
120
- get inputMinimumWidth() {
121
- // 150px is the minimum width of the input field, or the length of the placeholder text
122
- const inputElStyles = getComputedStyle(this.inputEl);
123
- const tagElStyles = getComputedStyle(this.tagEls[this.tagEls.length - 1]);
124
- const inputElBuffer = [
125
- inputElStyles.paddingLeft,
126
- inputElStyles.paddingRight,
127
- inputElStyles.marginLeft,
128
- inputElStyles.marginRight,
129
- tagElStyles.marginRight,
130
- ].reduce((prev, curr) => prev + parseInt(curr.replace("px", "")), 0);
131
- const minimumWidth = Math.max(150, measureText(this.inputEl, this.placeholder).width + inputElBuffer);
132
- return minimumWidth;
133
- }
134
- generateTagAddedMessage(tag) {
135
- return intl.formatMessage({
136
- id: "tagInput.tagAdded",
137
- defaultMessage: "{tagName} added.",
138
- description: "A confirmation for adding a tag.",
139
- }, { tagName: tag });
140
- }
141
- generateTagAlreadyAddedMessage(tag) {
142
- return intl.formatMessage({
143
- id: "tagInput.tagAlreadyAdded",
144
- defaultMessage: "{tagName} has already been added.",
145
- description: "An alert for adding a tag that is already present.",
146
- }, { tagName: tag });
147
- }
148
- generateCharacterLimitLabel(characterLimit) {
149
- return intl.formatMessage({
150
- id: "global.characterLimit",
151
- defaultMessage: "{limit, number} characters allowed.",
152
- description: "for screen readers",
153
- }, { limit: characterLimit });
154
- }
155
- componentWillLoad() {
156
- if (!this.placeholder) {
157
- this.placeholder = this.createPlaceholderDefault(this.addNew, !!this.options);
158
- }
159
- if (!this.label) {
160
- console.error("wm-tag-input must have a label property");
161
- }
162
- this.consolidateSelectedTags();
163
- this.el.focus = () => {
164
- const firstFocusableTag = this.nonLockedTagEls[0];
165
- if (firstFocusableTag) {
166
- this.tagAreaEl.focus();
167
- this.focusTag(firstFocusableTag);
168
- }
169
- else {
170
- this.inputEl.focus();
171
- }
172
- };
173
- // on resize of component, trigger componentDidRender -> positionInput
174
- const resizeObserver = new ResizeObserver(() => this.debouncedUpdate());
175
- resizeObserver.observe(this.el);
176
- }
177
- componentDidLoad() {
178
- // prevent highlighting of pre-selected tags
179
- this.tagEls.forEach((el) => el.classList.remove("highlight"));
180
- }
181
- componentDidRender() {
182
- this.positionInput();
183
- }
184
- consolidateSelectedTags() {
185
- this.tagsList.forEach((tag) => {
186
- if (!this.includesCaseInsensitive(this.optionsList, tag)) {
187
- this.options += `${this.options.length > 0 ? "," : ""}${tag}`;
188
- }
189
- });
190
- this.optionsList = csvToArray(this.options);
191
- }
192
- createPlaceholderDefault(addNew, hasOptions) {
193
- const addAndSearchPlaceholder = intl.formatMessage({
194
- id: "tagInput.placeholderAddAndSearch",
195
- defaultMessage: "Add or search for a tag",
196
- description: "Placeholder text. Use imperative",
197
- });
198
- const searchPlaceholder = intl.formatMessage({
199
- id: "tagInput.placeholderSearch",
200
- defaultMessage: "Search and select a tag",
201
- description: "Placeholder text. Use imperative",
202
- });
203
- const addPlaceholder = intl.formatMessage({
204
- id: "tagInput.placeholderAdd",
205
- defaultMessage: "Add a new tag",
206
- description: "Placeholder text. Use imperative",
207
- });
208
- let placeholder = "";
209
- if (addNew && hasOptions) {
210
- placeholder = addAndSearchPlaceholder;
211
- }
212
- else if (!addNew && hasOptions) {
213
- placeholder = searchPlaceholder;
214
- }
215
- else if (addNew) {
216
- placeholder = addPlaceholder;
217
- }
218
- return placeholder;
219
- }
220
- reflectSelectedTags(newValue, oldValue) {
221
- const isAddition = newValue.length > oldValue.length;
222
- let changedTag = "";
223
- let selectedTags = this.tagsList;
224
- if (isAddition) {
225
- changedTag = newValue.filter((val) => !oldValue.includes(val))[0];
226
- }
227
- else {
228
- changedTag = oldValue.filter((val) => !newValue.includes(val))[0];
229
- }
230
- // event emitted by type table uses element references instead of strings
231
- if (this.tagInputType === "table") {
232
- changedTag = this.wmRowEls.filter((row) => row.id === changedTag)[0];
233
- selectedTags = this.tagsList.map((id) => this.el.querySelector(`#${id}`));
234
- }
235
- this.selectedTags = this.listToCSV(this.tagsList);
236
- let detail = { value: selectedTags, tagChanged: changedTag };
237
- this.wmTagInputChanged.emit(detail);
238
- }
239
- handleErrorMessageChange() {
240
- if (this.errorMessage) {
241
- this.announce(this.errorMessage);
242
- }
243
- }
244
- handleRowUpdate() {
245
- forceUpdate(this.el);
246
- }
247
- closeIfNotElOrChild(ev) {
248
- const isntElOrChild = ev.target !== this.el && !this.el.shadowRoot.contains(ev.target);
249
- if (this.tagInputType === "dropdown" && isntElOrChild && this.isExpanded) {
250
- this.closeDropdown();
251
- }
252
- }
253
- // From wm-button
254
- // we need to listen for scroll events during the capture phase because they do not bubble up
255
- // there can be layouts where the main content has 100vh and overflows
256
- // in these cases window will register no scroll events unless we catch on they way down
257
- dismissTooltip() {
258
- if (this.tooltipVisible) {
259
- hideTooltip();
260
- this.tooltipVisible = false;
261
- }
262
- }
263
- handleInputKeyDown(ev) {
264
- if (/^.$/.test(ev.key) && this.inputEl.value.length >= this.characterLimit) {
265
- this.announceCharacterLimitWarning(this.inputEl.value.length, this.characterLimit);
266
- }
267
- // prevent keydown triggering on tag area
268
- ev.stopPropagation();
269
- switch (ev.key) {
270
- case "Enter":
271
- case ",":
272
- ev.preventDefault();
273
- this.handleInputEnter();
274
- break;
275
- case "ArrowDown":
276
- ev.preventDefault();
277
- this.handleInputArrowDown();
278
- break;
279
- case "ArrowUp":
280
- ev.preventDefault();
281
- this.handleInputArrowUp();
282
- break;
283
- case "ArrowLeft":
284
- ev.preventDefault();
285
- if (this.tagInputType === "table" && this.tablePosition.row) {
286
- this.moveLeftCell();
287
- }
288
- break;
289
- case "ArrowRight":
290
- ev.preventDefault();
291
- if (this.tagInputType === "table" && this.tablePosition.row) {
292
- this.moveRightCell();
293
- }
294
- break;
295
- case "Escape":
296
- if (this.tagInputType === "dropdown" && this.isExpanded) {
297
- this.closeDropdown();
298
- }
299
- break;
300
- case "ArrowLeft":
301
- case "Backspace":
302
- this.handleInputBackspace();
303
- break;
304
- }
305
- }
306
- handleInputFocus() {
307
- if (this.tagInputType === "dropdown") {
308
- this.openDropdown();
309
- this.clearListItemFocus();
310
- }
311
- // force update needed to apply styled state of field-wrapper el
312
- forceUpdate(this.el);
313
- }
314
- handleInputChanged(value) {
315
- this.charCount = value.length;
316
- if (this.tagInputType === "dropdown") {
317
- this.clearListItemFocus();
318
- if (this.charCount >= this.characterLimit - 5) {
319
- this.announceCharacterLimitWarning(this.charCount, this.characterLimit);
320
- }
321
- if (!this.isExpanded) {
322
- this.openDropdown();
323
- }
324
- }
325
- else if (this.tagInputType === "table") {
326
- this.clearCellFocus();
327
- }
328
- this.announceExistingOptions();
329
- }
330
- handleInputEnter() {
331
- if (this.tagInputType === "dropdown") {
332
- if (this.focusedListItem) {
333
- this.handleListItemClick(this.focusedListItem);
334
- }
335
- else {
336
- this.submitInput(this.addNew, this.inputEl.value.trim());
337
- }
338
- }
339
- else if (this.tagInputType === "table" && this.tablePosition.row > 0) {
340
- this.handleTableRowClick(this.localRowEls[this.tablePosition.row].id);
341
- }
342
- }
343
- submitInput(canAddNew, value) {
344
- const hasNonWhiteSpaceCharacters = value.match(/\S/);
345
- if (canAddNew && hasNonWhiteSpaceCharacters) {
346
- this.addTag(value);
347
- this.optionsList = this.addOption(value);
348
- this.resetInput();
349
- }
350
- }
351
- handleInputArrowDown() {
352
- if (this.tagInputType === "table") {
353
- this.moveDownRow();
354
- }
355
- else if (this.tagInputType === "dropdown" && this.isExpanded) {
356
- this.moveDownListItem();
357
- }
358
- else if (this.tagInputType === "dropdown") {
359
- this.openDropdown();
360
- }
361
- }
362
- handleInputArrowUp() {
363
- if (this.tagInputType === "table") {
364
- this.moveUpRow();
365
- }
366
- else if (this.tagInputType === "dropdown" && this.isExpanded) {
367
- this.moveUpListItem();
368
- }
369
- else if (this.tagInputType === "dropdown") {
370
- this.openDropdown();
371
- }
372
- }
373
- handleInputBackspace() {
374
- if (this.inputEl.value === "" && this.tagsList.length > 0) {
375
- // wait for events to finish firing before redirecting focus
376
- // prevents double input in input area and tag area
377
- window.requestAnimationFrame(() => {
378
- if (this.nonLockedTagsList.length > 0) {
379
- this.tagAreaEl.focus();
380
- this.focusTag(this.tagEls[this.tagEls.length - 1]);
381
- }
382
- });
383
- }
384
- }
385
- handleListItemKeyDown(ev) {
386
- const typedEvTarget = ev.target;
387
- switch (ev.key) {
388
- case "Enter":
389
- case " ":
390
- ev.preventDefault();
391
- typedEvTarget.click();
392
- break;
393
- case "ArrowDown":
394
- ev.preventDefault();
395
- this.moveDownListItem();
396
- break;
397
- case "ArrowUp":
398
- ev.preventDefault();
399
- this.moveUpListItem();
400
- break;
401
- case "Escape":
402
- if (this.focusedElement !== this.inputEl) {
403
- this.inputEl.focus();
404
- }
405
- else if (this.tagInputType === "dropdown") {
406
- this.closeDropdown();
407
- }
408
- break;
409
- }
410
- }
411
- handleListItemClick(item) {
412
- const tag = item.dataset.option.trim() || "";
413
- if (this.includesCaseInsensitive(this.tagsList, tag)) {
414
- this.announce(this.generateTagAlreadyAddedMessage(tag));
415
- }
416
- else {
417
- this.resetInput();
418
- this.addTag(tag);
419
- this.optionsList = this.addOption(tag);
420
- this.focusedListItem = null;
421
- }
422
- }
423
- handleTableRowClick(rowId) {
424
- const referencedRow = this.el.querySelector(`#${rowId}`);
425
- const isLocked = referencedRow.locked;
426
- if (!isLocked) {
427
- if (this.includesCaseInsensitive(this.tagsList, rowId)) {
428
- this.removeTag(rowId);
429
- }
430
- else if (!this.tagLimitReached) {
431
- this.addTag(rowId);
432
- this.resetInput();
433
- }
434
- }
435
- }
436
- handleTagAreaKeyDown(ev) {
437
- switch (ev.key) {
438
- case "ArrowLeft":
439
- case "ArrowUp":
440
- ev.preventDefault();
441
- this.moveLeftTag();
442
- break;
443
- case "ArrowRight":
444
- case "ArrowDown":
445
- ev.preventDefault();
446
- this.moveRightTag();
447
- break;
448
- case "Backspace":
449
- case "Delete":
450
- this.handleTagAreaDelete();
451
- break;
452
- }
453
- }
454
- handleTagAreaDelete() {
455
- const isLocked = this.focusedTag && this.focusedTag.classList.contains("locked");
456
- if (this.focusedTag && this.focusedTag.dataset.tag && !isLocked) {
457
- this.removeTag(this.focusedTag.dataset.tag);
458
- if (this.nonLockedTagsList.length === 0) {
459
- // focus input if no tags are left
460
- this.inputEl.focus();
461
- }
462
- else if (this.focusedTag === this.tagEls[this.tagEls.length - 1]) {
463
- // reassign focus if removing the last tag but there are still tags remaining
464
- this.focusedTag = this.tagEls[this.tagEls.length - 2];
465
- this.focusTag(this.focusedTag);
466
- }
467
- }
468
- }
469
- handleBlur(ev, component) {
470
- const isntElOrChild = ev.relatedTarget !== component && !this.el.shadowRoot.contains(ev.relatedTarget);
471
- this.dismissTooltip();
472
- this.clearCellFocus();
473
- if (isntElOrChild) {
474
- this.fieldWrapperEl.classList.remove("focused");
475
- if (this.tagInputType === "dropdown") {
476
- this.closeDropdown();
477
- }
478
- }
479
- }
480
- handleCellMouseEnter(ev) {
481
- const cell = ev.target;
482
- const contentWrapper = cell.querySelector(".cell-content-wrapper");
483
- const isTruncated = contentWrapper.scrollWidth > contentWrapper.clientWidth;
484
- if (isTruncated) {
485
- // innerText is necessary vs textContent, as innerText ignores sr-only / display: none text
486
- showTooltip("bottom", cell, cell.innerText);
487
- this.tooltipVisible = true;
488
- }
489
- }
490
- handleTagAreaFocus() {
491
- if (this.tagInputType === "dropdown") {
492
- this.closeDropdown();
493
- }
494
- const firstFocusableTag = this.nonLockedTagEls[0];
495
- firstFocusableTag && this.focusTag(firstFocusableTag);
496
- }
497
- handleRemoveButtonClick(tag) {
498
- this.moveLeftTag();
499
- this.removeTag(tag);
500
- }
501
- moveDownListItem() {
502
- if (this.listItemEls.length > 0) {
503
- const firstListItem = this.listItemEls[0];
504
- if (!this.focusedListItem) {
505
- this.focusListItem(firstListItem);
506
- }
507
- else if (this.focusedListItem.nextElementSibling) {
508
- this.focusListItem(this.focusedListItem.nextElementSibling);
509
- }
510
- else {
511
- this.focusListItem(firstListItem);
512
- }
513
- }
514
- }
515
- moveUpListItem() {
516
- if (this.listItemEls.length > 0) {
517
- const lastListItem = this.listItemEls[this.listItemEls.length - 1];
518
- if (!this.focusedListItem) {
519
- this.focusListItem(lastListItem);
520
- }
521
- else if (this.focusedListItem.previousElementSibling) {
522
- this.focusListItem(this.focusedListItem.previousElementSibling);
523
- }
524
- else {
525
- this.clearListItemFocus();
526
- }
527
- }
528
- }
529
- moveDownRow() {
530
- if (this.filteredRows.length > 0) {
531
- if (this.tablePosition.row === 0) {
532
- this.tablePosition.row = 1;
533
- }
534
- else if (this.tablePosition.row === this.filteredRows.length) {
535
- this.tablePosition.row = 1;
536
- }
537
- else {
538
- this.tablePosition.row++;
539
- }
540
- // skip locked rows
541
- const rowToFocus = this.wmRowEls[this.tablePosition.row - 1];
542
- if (rowToFocus.locked) {
543
- this.moveDownRow();
544
- }
545
- else {
546
- this.focusCell(this.tablePosition);
547
- }
548
- }
549
- }
550
- moveUpRow() {
551
- if (this.filteredRows.length > 0) {
552
- if (this.tablePosition.row === 0) {
553
- this.tablePosition.row = this.filteredRows.length;
554
- }
555
- else if (this.tablePosition.row === 1) {
556
- this.tablePosition.row = 0;
557
- }
558
- else {
559
- this.tablePosition.row--;
560
- }
561
- // skip locked rows
562
- const rowToFocus = this.wmRowEls[this.tablePosition.row - 1];
563
- if (rowToFocus && rowToFocus.locked) {
564
- this.moveUpRow();
565
- }
566
- else if (rowToFocus) {
567
- this.focusCell(this.tablePosition);
568
- }
569
- else {
570
- this.clearCellFocus();
571
- }
572
- }
573
- }
574
- moveLeftCell() {
575
- if (this.tablePosition.column != 1) {
576
- this.tablePosition.column--;
577
- this.focusCell(this.tablePosition);
578
- }
579
- }
580
- moveRightCell() {
581
- const numCols = csvToArray(this.colHeaders).length;
582
- if (this.tablePosition.column < numCols) {
583
- this.tablePosition.column++;
584
- this.focusCell(this.tablePosition);
585
- }
586
- }
587
- moveLeftTag() {
588
- const lastTag = this.tagEls[this.tagEls.length - 1];
589
- if (this.focusedTag && this.tagEls.includes(this.focusedTag.previousElementSibling)) {
590
- this.focusedTag = this.focusedTag.previousElementSibling;
591
- }
592
- else {
593
- this.focusedTag = lastTag;
594
- }
595
- // skip locked tags
596
- if (this.focusedTag.classList.contains("locked") && this.nonLockedTagEls.length > 0) {
597
- this.moveLeftTag();
598
- }
599
- else {
600
- this.focusTag(this.focusedTag);
601
- }
602
- }
603
- moveRightTag() {
604
- const firstTag = this.tagEls[0];
605
- if (this.focusedTag && this.tagEls.includes(this.focusedTag.nextElementSibling)) {
606
- this.focusedTag = this.focusedTag.nextElementSibling;
607
- }
608
- else {
609
- this.focusedTag = firstTag;
610
- }
611
- // skip locked tags
612
- if (this.focusedTag.classList.contains("locked")) {
613
- this.moveRightTag();
614
- }
615
- else {
616
- this.focusTag(this.focusedTag);
617
- }
618
- }
619
- addOption(option) {
620
- let newOptionsList = this.optionsList;
621
- const optionAlreadyExists = this.includesCaseInsensitive(this.optionsList, option);
622
- if (!optionAlreadyExists) {
623
- newOptionsList = newOptionsList.concat(option);
624
- }
625
- return newOptionsList;
626
- }
627
- removeOption(option) {
628
- this.optionsList = this.filterCaseInsensitive(this.optionsList, option);
629
- }
630
- addTag(tag) {
631
- let newTagsList = this.tagsList;
632
- const tagAlreadyAdded = this.includesCaseInsensitive(this.tagsList, tag);
633
- const tagExistsAsOption = this.optionsList.filter((x) => x.toLowerCase() === tag.toLowerCase())[0];
634
- if (!tagAlreadyAdded) {
635
- let textToAnnounce = tag;
636
- if (this.tagInputType === "table") {
637
- const referencedRow = this.el.querySelector(`#${tag}`);
638
- textToAnnounce = referencedRow.col1;
639
- }
640
- this.announce(this.generateTagAddedMessage(textToAnnounce));
641
- this.tagsList = newTagsList.concat(tagExistsAsOption || tag);
642
- // if maxTags has been reached, focus should go to the tagArea
643
- if (this.tagLimitReached) {
644
- this.tagAreaEl.focus();
645
- }
646
- }
647
- }
648
- removeTag(tag) {
649
- let textToAnnounce = tag;
650
- if (this.tagInputType === "table") {
651
- const referencedRow = this.el.querySelector(`#${tag}`);
652
- textToAnnounce = referencedRow.col1;
653
- }
654
- const tagRemovedMessage = intl.formatMessage({ id: "tagInput.tagRemoved", defaultMessage: "{tag} removed" }, { tag: textToAnnounce });
655
- this.announce(tagRemovedMessage);
656
- this.tagsList = this.filterCaseInsensitive(this.tagsList, tag);
657
- if (this.tagInputType === "dropdown") {
658
- // if a tag was introduced by the user, also remove it from the dropdown options
659
- const devOptionsList = csvToArray(this.options);
660
- if (this.includesCaseInsensitive(this.optionsList, tag) && !this.includesCaseInsensitive(devOptionsList, tag)) {
661
- this.removeOption(tag);
662
- }
663
- }
664
- }
665
- focusListItem(item) {
666
- this.focusedListItem = item;
667
- this.inputEl.setAttribute("aria-activedescendant", this.focusedListItem.id);
668
- item.scrollIntoView({ block: "nearest" });
669
- }
670
- focusTag(element) {
671
- if (element.classList.contains("locked")) {
672
- this.focusedTag = null;
673
- this.tagAreaEl.setAttribute("aria-activedescendant", "");
674
- }
675
- else {
676
- this.focusedTag = element;
677
- this.tagAreaEl.setAttribute("aria-activedescendant", this.focusedTag.id);
678
- }
679
- }
680
- focusCell(position) {
681
- this.clearCellFocus(false);
682
- if (position.row) {
683
- const rowToFocus = this.localRowEls[position.row];
684
- const rowCells = rowToFocus.querySelectorAll("td");
685
- const cellToFocus = rowCells[position.column - 1];
686
- const contentWrapper = cellToFocus.querySelector(".cell-content-wrapper");
687
- const isTruncated = contentWrapper.scrollWidth > contentWrapper.clientWidth;
688
- rowToFocus.classList.add("focused");
689
- cellToFocus.classList.add("focused");
690
- cellToFocus.scrollIntoView({ block: "nearest" });
691
- this.inputEl.setAttribute("aria-activedescendant", cellToFocus.id);
692
- this.dismissTooltip();
693
- if (isTruncated) {
694
- // innerText is necessary vs textContent, as innerText ignores sr-only / display: none text
695
- showTooltip("bottom", cellToFocus, cellToFocus.innerText);
696
- this.tooltipVisible = true;
697
- }
698
- }
699
- }
700
- clearTagFocus() {
701
- this.tagAreaEl.setAttribute("aria-activedescendant", "");
702
- this.focusedTag = null;
703
- }
704
- clearCellFocus(resetPosition = true) {
705
- this.inputEl.setAttribute("aria-activedescendant", "");
706
- if (resetPosition) {
707
- this.tablePosition = { row: 0, column: 1 };
708
- }
709
- this.localRowEls.forEach((row) => {
710
- row.classList.remove("focused");
711
- row.querySelectorAll("td").forEach((cell) => {
712
- cell.classList.remove("focused");
713
- });
714
- });
715
- }
716
- openDropdown() {
717
- // given an offset of -2px because the dropdown is transformed downwards to avoid overlapping the focus border
718
- this.openUp = shouldOpenUp(this.el, this.dropdownEl, this.el.clientHeight, -2);
719
- this.isExpanded = true;
720
- }
721
- closeDropdown() {
722
- this.clearListItemFocus();
723
- this.isExpanded = false;
724
- }
725
- clearListItemFocus() {
726
- this.focusedListItem = null;
727
- this.inputEl.setAttribute("aria-activedescendant", "");
728
- this.listItemEls.forEach((el) => {
729
- el.classList.remove("focused");
730
- });
731
- }
732
- resetInput() {
733
- this.charCount = 0;
734
- this.inputEl.value = "";
735
- }
736
- announce(message) {
737
- // \u00A0 is a non-breaking space character, which causes the message to be read as a new one
738
- if (this.liveRegionEl.textContent === message) {
739
- message += "\u00A0";
740
- }
741
- this.liveRegionMessage = message;
742
- }
743
- announceExistingOptions() {
744
- // request animation frame to wait for re-rendering of filtered options
745
- window.requestAnimationFrame(() => {
746
- let numResults = 0;
747
- if (this.tagInputType === "dropdown") {
748
- numResults = this.optionEls.length;
749
- }
750
- else if (this.tagInputType === "table") {
751
- numResults = this.filteredRows.length;
752
- }
753
- const existingOptionsMessage = intl.formatMessage({
754
- id: "tagInput.existingOptions",
755
- defaultMessage: "{num, plural, one {1 existing option.} other {# existing options.}}",
756
- }, { num: numResults });
757
- this.announce(existingOptionsMessage);
758
- });
759
- }
760
- announceCharacterLimitWarning(charCount, charLimit) {
761
- const charactersEnteredMessage = intl.formatMessage({
762
- id: "global.charactersEntered",
763
- defaultMessage: "{x, number} of {y, number} characters entered.",
764
- description: "for screen readers",
765
- }, { x: charCount, y: charLimit });
766
- const characterLimitReachedMessage = intl.formatMessage({
767
- id: "global.characterLimitReached",
768
- defaultMessage: "No additional characters will be entered.",
769
- description: "for screen readers",
770
- });
771
- this.announce(`${charactersEnteredMessage}${charCount >= charLimit ? " " + characterLimitReachedMessage : ""}`);
772
- }
773
- positionInput() {
774
- const lastTag = this.tagEls[this.tagEls.length - 1];
775
- // default placement to fall back to when no tags are present, or not enough space is available
776
- this.inputEl.style.position = "static";
777
- this.inputEl.style.width = "100%";
778
- if (lastTag) {
779
- const spaceAvailable = this.tagAreaEl.getBoundingClientRect().right - lastTag.getBoundingClientRect().right;
780
- if (spaceAvailable >= this.inputMinimumWidth) {
781
- // because the input has right: 0px
782
- // all thats needed to properly place it is setting position: absolute, top, and width
783
- this.inputEl.style.position = "absolute";
784
- this.inputEl.style.top = lastTag.offsetTop.toString() + "px";
785
- this.inputEl.style.width =
786
- (this.tagAreaEl.getBoundingClientRect().right - lastTag.getBoundingClientRect().right - 8).toString() + "px";
787
- }
788
- }
789
- }
790
- /// Helpers
791
- listToCSV(list) {
792
- return list.join(",");
793
- }
794
- includesCaseInsensitive(list, element) {
795
- const lowercaseList = list.map((str) => str.toLowerCase());
796
- return lowercaseList.includes(element.toLowerCase());
797
- }
798
- filterCaseInsensitive(list, element) {
799
- return list.filter((x) => x.toLowerCase() !== element.toLowerCase());
800
- }
801
- sortCaseInsensitive(list) {
802
- // The vanilla .sort method places words that start with capital letters above others (ASCII order)
803
- // so we need to pass in our own compare function to sort case-insensitive
804
- return list.sort((a, b) => {
805
- a = a.toLowerCase();
806
- b = b.toLowerCase();
807
- return a > b ? 1 : a < b ? -1 : 0;
808
- });
809
- }
810
- /// Renders
811
- renderTags() {
812
- let lockedTags = [];
813
- let unlockedTags = [];
814
- this.tagsList.forEach((tag, idx) => {
815
- const id = `tag${idx + 1}`;
816
- let tagText = "";
817
- let isLocked = false;
818
- if (this.tagInputType === "dropdown") {
819
- tagText = tag;
820
- }
821
- else if (this.tagInputType === "table") {
822
- // display table tags using col1 of the row with the same id
823
- // if one can't be found, display as empty
824
- const referencedRow = this.el.querySelector(`#${tag}`);
825
- tagText = referencedRow ? referencedRow.col1 : "";
826
- isLocked = referencedRow ? referencedRow.locked : false;
827
- }
828
- // make sure locked tags always appear in front of list
829
- const targetList = isLocked ? lockedTags : unlockedTags;
830
- targetList.push(h("li", { id: id, class: `tag highlight ${this.focusedTag && this.focusedTag.id === id ? "focused" : ""} ${isLocked ? "locked" : ""}`, "data-tag": tag, role: "option" }, tagText, isLocked ? (h("div", { class: "icon lock" })) : (h("button", { class: "icon remove-btn", tabIndex: -1, onClick: () => this.handleRemoveButtonClick(tag) }))));
831
- });
832
- return [...lockedTags, ...unlockedTags];
833
- }
834
- renderDropdown() {
835
- return (h("div", { class: `dropdown-wrapper ${this.isExpanded ? "open" : ""} ${this.openUp ? "upwards" : ""}`, ref: (el) => (this.dropdownEl = el) }, h("div", { id: "help-text", class: "help-text" }, this.renderHelpText()), h("ul", { class: "dropdown", id: "dropdown", role: "listbox", "aria-multiselectable": "true", "aria-expanded": this.isExpanded ? "true" : false, "aria-label": this.label, tabindex: -1 }, this.inputEl && this.renderAddNewButton(), this.renderListItems(this.optionsList))));
836
- }
837
- renderListItems(optionsList) {
838
- optionsList = this.sortCaseInsensitive(optionsList);
839
- // filter by input
840
- if (this.inputEl && this.inputEl.value) {
841
- optionsList = this.optionsList.filter((option) => option.toLowerCase().includes(this.inputEl.value.toLowerCase()));
842
- }
843
- return optionsList.map((option, idx) => {
844
- const id = `option${idx + 1}`;
845
- const isFocused = this.focusedListItem && this.focusedListItem.id === id;
846
- const isSelected = this.includesCaseInsensitive(this.tagsList, option);
847
- return (h("li", { class: `option ${isFocused ? "focused" : ""}`, role: "option", id: id, "data-option": option, "aria-selected": isSelected ? "true" : "false", "aria-disabled": isSelected ? "true" : "false", onKeyDown: (ev) => this.handleListItemKeyDown(ev), onBlur: (ev) => this.handleBlur(ev, this.el), onClick: (ev) => this.handleListItemClick(ev.target) }, option));
848
- });
849
- }
850
- renderAddNewButton() {
851
- const hasNonWhiteSpaceCharacters = this.inputEl.value.match(/\S/);
852
- const optionAlreadyExists = this.includesCaseInsensitive(this.optionsList, this.inputEl.value.trim());
853
- if (this.addNew && hasNonWhiteSpaceCharacters && !optionAlreadyExists) {
854
- const id = `add-new-btn`;
855
- const isFocused = this.focusedListItem && this.focusedListItem.id === id;
856
- return (h("li", { role: "option", class: `add-new-btn ${isFocused ? "focused" : ""}`, id: id, "data-option": this.inputEl.value, onKeyDown: (ev) => this.handleListItemKeyDown(ev), onBlur: (ev) => this.handleBlur(ev, this.el), onClick: (ev) => this.handleListItemClick(ev.target), tabIndex: isFocused ? 0 : -1 }, `Add "${this.inputEl.value.trim()}"`));
857
- }
858
- else
859
- return "";
860
- }
861
- renderHelpText() {
862
- let helpText = "";
863
- if (this.optionsList.length > 0) {
864
- helpText += this.componentMessages.selectionHelpText;
865
- }
866
- if (this.addNew) {
867
- helpText += " " + this.componentMessages.addNewHelpText;
868
- }
869
- return helpText;
870
- }
871
- renderTagCounter() {
872
- if (this.maxTags) {
873
- return (h("div", { class: "lower-row" }, h("div", { id: "max-tags" }, `${this.componentMessages.tagsAdded}: ${this.tagsList.length}/${this.maxTags}`, this.tagLimitReached && ` - ${this.componentMessages.maxTagsReached}`)));
874
- }
875
- }
876
- renderTable() {
877
- return (h("div", { class: "table-wrapper", onScroll: () => this.dismissTooltip() }, h("table", { id: "table", role: "grid", class: `${this.colWidths ? "fixed-widths" : ""}`, "aria-label": this.label, "aria-multiselectable": "true" }, this.renderTableHeaders(), this.filteredRows.length ? this.renderTableRows() : h("div", { class: "no-results" }, this.noResultsMessage))));
878
- }
879
- renderTableHeaders() {
880
- return (h("tr", { class: "headers", role: "row" }, csvToArray(this.colHeaders).map((header, idx) => {
881
- let overflowRule = "wrap";
882
- if (this.colWrap && csvToArray(this.colWrap)[idx]) {
883
- overflowRule = csvToArray(this.colWrap)[idx];
884
- }
885
- return (h("th", { class: `header-cell ${overflowRule}`, role: "columnheader",
886
- // @ts-ignore
887
- width: this.colWidths ? csvToArray(this.colWidths)[idx] : "" }, header));
888
- })));
889
- }
890
- renderTableRows() {
891
- return this.filteredRows.map((row) => {
892
- const isSelected = this.includesCaseInsensitive(this.tagsList, row.id);
893
- return (h("tr", { id: row.id, class: `${row.locked ? "locked" : ""} ${isSelected ? "selected" : ""}`, role: "row", onClick: () => this.handleTableRowClick(row.id) }, this.renderTableCells(row)));
894
- });
895
- }
896
- renderTableCells(row) {
897
- const colValues = [row.col1, row.col2, row.col3, row.col4].filter((val) => !!val);
898
- const isSelected = this.includesCaseInsensitive(this.tagsList, row.id);
899
- return colValues.map((val, idx) => {
900
- const localId = `${row.id}-col${idx + 1}`;
901
- let overflowRule = "wrap";
902
- if (this.colWrap && csvToArray(this.colWrap)[idx]) {
903
- overflowRule = csvToArray(this.colWrap)[idx];
904
- }
905
- return (h("td", { id: localId, role: "gridcell", "aria-describedby": `${localId}-description`, "aria-selected": isSelected.toString(), onMouseEnter: (ev) => this.handleCellMouseEnter(ev), onMouseLeave: () => this.dismissTooltip() }, h("div", { class: `cell-content-wrapper ${overflowRule}` }, val), h("div", { class: "description", id: `${localId}-description` }, row.locked ? "locked" : "")));
906
- });
907
- }
908
- render() {
909
- return (h(Host, { id: this.uid }, h("div", { class: `wrapper label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}` }, h("div", { class: "label-wrapper" }, h("label", { class: "label", htmlFor: `input${this.uid}` }, this.label, this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*")))), h("div", { class: `field-wrapper ${this.focusedElement ? "focused" : ""} ${this.errorMessage ? "invalid" : ""}`, ref: (el) => (this.fieldWrapperEl = el) }, h("div", { class: "upper-row" }, h("div", { class: "tags-and-input-wrapper" }, this.tagsList.length > 0 && (h("ul", { ref: (el) => (this.tagAreaEl = el), class: "tag-area", role: "listbox", "aria-activedescendant": "", "aria-orientation": "horizontal", "aria-label": `${this.label} ${this.tagsList.length > 0 ? this.componentMessages.tagAreaInstructions : ""}`, tabindex: this.nonLockedTagsList.length > 0 ? 0 : -1, "aria-describedby": `info max-tags`, onFocus: () => this.handleTagAreaFocus(), onBlur: (ev) => {
910
- this.clearTagFocus();
911
- this.handleBlur(ev, this.el);
912
- }, onKeyDown: (ev) => this.handleTagAreaKeyDown(ev) }, this.renderTags())), h("input", { id: `input${this.uid}`, class: this.tagLimitReached ? "hidden" : "", role: "combobox", ref: (el) => (this.inputEl = el), autocomplete: "off", "aria-required": this.requiredField ? "true" : null, "aria-controls": this.tagInputType, "aria-describedby": `help-text${this.errorMessage ? " error " : ""}`, "aria-label": `${this.label} ${this.tagInputType === "dropdown" ? this.generateCharacterLimitLabel(this.characterLimit) : ""}`, "aria-expanded": this.tagInputType === "dropdown" ? this.isExpanded.toString() : null, placeholder: this.placeholder, maxLength: this.tagInputType === "dropdown" ? this.characterLimit : undefined, onInput: () => this.handleInputChanged(this.inputEl.value), onBlur: (ev) => {
913
- this.handleBlur(ev, this.el);
914
- }, onFocus: () => this.handleInputFocus(), onKeyDown: (ev) => this.handleInputKeyDown(ev) })), this.tagInputType === "dropdown" && (h("div", { class: "character-count" }, this.charCount, "/", this.characterLimit))), this.renderTagCounter(), this.tagInputType === "dropdown" && this.renderDropdown()), this.info && (h("div", { id: "info", class: "info-text" }, this.info)), this.errorMessage && h("div", { id: "error" }, this.errorMessage), h("div", { class: "sr-only", "aria-live": "assertive", ref: (el) => (this.liveRegionEl = el), "aria-atomic": "true" }, this.liveRegionMessage), this.tagInputType === "table" && this.renderTable())));
915
- }
916
- static get is() { return "wm-tag-input"; }
917
- static get encapsulation() { return "shadow"; }
918
- static get delegatesFocus() { return true; }
919
- static get originalStyleUrls() {
920
- return {
921
- "$": ["wm-tag-input.scss"]
922
- };
923
- }
924
- static get styleUrls() {
925
- return {
926
- "$": ["wm-tag-input.css"]
927
- };
928
- }
929
- static get properties() {
930
- return {
931
- "label": {
932
- "type": "string",
933
- "mutable": false,
934
- "complexType": {
935
- "original": "string",
936
- "resolved": "string",
937
- "references": {}
938
- },
939
- "required": true,
940
- "optional": false,
941
- "docs": {
942
- "tags": [],
943
- "text": ""
944
- },
945
- "attribute": "label",
946
- "reflect": false
947
- },
948
- "labelPosition": {
949
- "type": "string",
950
- "mutable": false,
951
- "complexType": {
952
- "original": "\"top\" | \"left\" | \"none\"",
953
- "resolved": "\"left\" | \"none\" | \"top\"",
954
- "references": {}
955
- },
956
- "required": false,
957
- "optional": false,
958
- "docs": {
959
- "tags": [],
960
- "text": ""
961
- },
962
- "attribute": "label-position",
963
- "reflect": false,
964
- "defaultValue": "\"top\""
965
- },
966
- "options": {
967
- "type": "string",
968
- "mutable": true,
969
- "complexType": {
970
- "original": "string",
971
- "resolved": "string",
972
- "references": {}
973
- },
974
- "required": false,
975
- "optional": false,
976
- "docs": {
977
- "tags": [],
978
- "text": ""
979
- },
980
- "attribute": "options",
981
- "reflect": false,
982
- "defaultValue": "\"\""
983
- },
984
- "selectedTags": {
985
- "type": "string",
986
- "mutable": true,
987
- "complexType": {
988
- "original": "string",
989
- "resolved": "string",
990
- "references": {}
991
- },
992
- "required": false,
993
- "optional": false,
994
- "docs": {
995
- "tags": [],
996
- "text": ""
997
- },
998
- "attribute": "selected-tags",
999
- "reflect": true,
1000
- "defaultValue": "\"\""
1001
- },
1002
- "info": {
1003
- "type": "string",
1004
- "mutable": false,
1005
- "complexType": {
1006
- "original": "string",
1007
- "resolved": "string | undefined",
1008
- "references": {}
1009
- },
1010
- "required": false,
1011
- "optional": true,
1012
- "docs": {
1013
- "tags": [],
1014
- "text": ""
1015
- },
1016
- "attribute": "info",
1017
- "reflect": false
1018
- },
1019
- "errorMessage": {
1020
- "type": "string",
1021
- "mutable": false,
1022
- "complexType": {
1023
- "original": "string",
1024
- "resolved": "string | undefined",
1025
- "references": {}
1026
- },
1027
- "required": false,
1028
- "optional": true,
1029
- "docs": {
1030
- "tags": [],
1031
- "text": ""
1032
- },
1033
- "attribute": "error-message",
1034
- "reflect": false
1035
- },
1036
- "addNew": {
1037
- "type": "boolean",
1038
- "mutable": false,
1039
- "complexType": {
1040
- "original": "boolean",
1041
- "resolved": "boolean",
1042
- "references": {}
1043
- },
1044
- "required": false,
1045
- "optional": false,
1046
- "docs": {
1047
- "tags": [],
1048
- "text": ""
1049
- },
1050
- "attribute": "add-new",
1051
- "reflect": false,
1052
- "defaultValue": "true"
1053
- },
1054
- "placeholder": {
1055
- "type": "string",
1056
- "mutable": true,
1057
- "complexType": {
1058
- "original": "string",
1059
- "resolved": "string | undefined",
1060
- "references": {}
1061
- },
1062
- "required": false,
1063
- "optional": true,
1064
- "docs": {
1065
- "tags": [],
1066
- "text": ""
1067
- },
1068
- "attribute": "placeholder",
1069
- "reflect": false
1070
- },
1071
- "requiredField": {
1072
- "type": "boolean",
1073
- "mutable": false,
1074
- "complexType": {
1075
- "original": "boolean",
1076
- "resolved": "boolean",
1077
- "references": {}
1078
- },
1079
- "required": false,
1080
- "optional": false,
1081
- "docs": {
1082
- "tags": [],
1083
- "text": ""
1084
- },
1085
- "attribute": "required-field",
1086
- "reflect": false,
1087
- "defaultValue": "false"
1088
- },
1089
- "characterLimit": {
1090
- "type": "number",
1091
- "mutable": false,
1092
- "complexType": {
1093
- "original": "number",
1094
- "resolved": "number",
1095
- "references": {}
1096
- },
1097
- "required": false,
1098
- "optional": false,
1099
- "docs": {
1100
- "tags": [],
1101
- "text": ""
1102
- },
1103
- "attribute": "character-limit",
1104
- "reflect": false,
1105
- "defaultValue": "50"
1106
- },
1107
- "maxTags": {
1108
- "type": "number",
1109
- "mutable": false,
1110
- "complexType": {
1111
- "original": "number",
1112
- "resolved": "number | undefined",
1113
- "references": {}
1114
- },
1115
- "required": false,
1116
- "optional": true,
1117
- "docs": {
1118
- "tags": [],
1119
- "text": ""
1120
- },
1121
- "attribute": "max-tags",
1122
- "reflect": false
1123
- },
1124
- "tagInputType": {
1125
- "type": "string",
1126
- "mutable": false,
1127
- "complexType": {
1128
- "original": "\"dropdown\" | \"table\"",
1129
- "resolved": "\"dropdown\" | \"table\"",
1130
- "references": {}
1131
- },
1132
- "required": false,
1133
- "optional": false,
1134
- "docs": {
1135
- "tags": [],
1136
- "text": ""
1137
- },
1138
- "attribute": "tag-input-type",
1139
- "reflect": false,
1140
- "defaultValue": "\"dropdown\""
1141
- },
1142
- "colHeaders": {
1143
- "type": "string",
1144
- "mutable": false,
1145
- "complexType": {
1146
- "original": "string",
1147
- "resolved": "string",
1148
- "references": {}
1149
- },
1150
- "required": true,
1151
- "optional": false,
1152
- "docs": {
1153
- "tags": [],
1154
- "text": ""
1155
- },
1156
- "attribute": "col-headers",
1157
- "reflect": false
1158
- },
1159
- "colWidths": {
1160
- "type": "string",
1161
- "mutable": false,
1162
- "complexType": {
1163
- "original": "string",
1164
- "resolved": "string | undefined",
1165
- "references": {}
1166
- },
1167
- "required": false,
1168
- "optional": true,
1169
- "docs": {
1170
- "tags": [],
1171
- "text": ""
1172
- },
1173
- "attribute": "col-widths",
1174
- "reflect": false
1175
- },
1176
- "colWrap": {
1177
- "type": "string",
1178
- "mutable": false,
1179
- "complexType": {
1180
- "original": "string",
1181
- "resolved": "string | undefined",
1182
- "references": {}
1183
- },
1184
- "required": false,
1185
- "optional": true,
1186
- "docs": {
1187
- "tags": [],
1188
- "text": ""
1189
- },
1190
- "attribute": "col-wrap",
1191
- "reflect": false
1192
- },
1193
- "messageConfig": {
1194
- "type": "string",
1195
- "mutable": false,
1196
- "complexType": {
1197
- "original": "string",
1198
- "resolved": "string",
1199
- "references": {}
1200
- },
1201
- "required": false,
1202
- "optional": false,
1203
- "docs": {
1204
- "tags": [],
1205
- "text": ""
1206
- },
1207
- "attribute": "message-config",
1208
- "reflect": false,
1209
- "defaultValue": "\"\""
1210
- }
1211
- };
1212
- }
1213
- static get states() {
1214
- return {
1215
- "focusedListItem": {},
1216
- "focusedTag": {},
1217
- "tablePosition": {},
1218
- "isExpanded": {},
1219
- "tagsList": {},
1220
- "optionsList": {},
1221
- "charCount": {},
1222
- "liveRegionMessage": {}
1223
- };
1224
- }
1225
- static get events() {
1226
- return [{
1227
- "method": "wmTagInputChanged",
1228
- "name": "wmTagInputChanged",
1229
- "bubbles": true,
1230
- "cancelable": true,
1231
- "composed": true,
1232
- "docs": {
1233
- "tags": [],
1234
- "text": ""
1235
- },
1236
- "complexType": {
1237
- "original": "{\r\n value: string[] | HTMLWmTagInputRowElement[];\r\n tagChanged: string | HTMLWmTagInputRowElement;\r\n }",
1238
- "resolved": "{ value: string[] | HTMLWmTagInputRowElement[]; tagChanged: any; }",
1239
- "references": {
1240
- "HTMLWmTagInputRowElement": {
1241
- "location": "global"
1242
- }
1243
- }
1244
- }
1245
- }];
1246
- }
1247
- static get elementRef() { return "el"; }
1248
- static get watchers() {
1249
- return [{
1250
- "propName": "tagsList",
1251
- "methodName": "reflectSelectedTags"
1252
- }, {
1253
- "propName": "errorMessage",
1254
- "methodName": "handleErrorMessageChange"
1255
- }];
1256
- }
1257
- static get listeners() {
1258
- return [{
1259
- "name": "wmTagInputRowUpdated",
1260
- "method": "handleRowUpdate",
1261
- "target": undefined,
1262
- "capture": false,
1263
- "passive": false
1264
- }, {
1265
- "name": "click",
1266
- "method": "closeIfNotElOrChild",
1267
- "target": "document",
1268
- "capture": false,
1269
- "passive": false
1270
- }, {
1271
- "name": "scroll",
1272
- "method": "dismissTooltip",
1273
- "target": "window",
1274
- "capture": true,
1275
- "passive": true
1276
- }];
1277
- }
1278
- }
1279
- //# sourceMappingURL=wm-tag-input.js.map
1
+ import { h, Host, forceUpdate, } from "@stencil/core";
2
+ import { csvToArray, debounce, generateId, hideTooltip, intl, measureText, safeParseJSON, shouldOpenUp, showTooltip, } from "../../global/functions";
3
+ import { globalMessages } from "../../global/intl";
4
+ export class TagInput {
5
+ constructor() {
6
+ this.uid = this.el.id ? this.el.id : generateId();
7
+ this.openUp = false;
8
+ this.tooltipVisible = false;
9
+ this.debouncedUpdate = debounce(() => forceUpdate(this.el), 30);
10
+ this.label = undefined;
11
+ this.labelPosition = "top";
12
+ this.options = "";
13
+ this.selectedTags = "";
14
+ this.info = undefined;
15
+ this.errorMessage = undefined;
16
+ this.addNew = true;
17
+ this.placeholder = undefined;
18
+ this.requiredField = false;
19
+ this.characterLimit = 50;
20
+ this.maxTags = undefined;
21
+ this.tagInputType = "dropdown";
22
+ this.colHeaders = undefined;
23
+ this.colWidths = undefined;
24
+ this.colWrap = undefined;
25
+ this.messageConfig = "";
26
+ this.focusedListItem = undefined;
27
+ this.focusedTag = null;
28
+ this.tablePosition = { row: 0, column: 1 };
29
+ this.isExpanded = false;
30
+ this.tagsList = csvToArray(this.selectedTags);
31
+ this.optionsList = csvToArray(this.options);
32
+ this.charCount = 0;
33
+ this.liveRegionMessage = "";
34
+ }
35
+ get focusedElement() {
36
+ return this.el.shadowRoot.activeElement;
37
+ }
38
+ get listItemEls() {
39
+ return Array.from(this.dropdownEl.querySelectorAll("li"));
40
+ }
41
+ get tagEls() {
42
+ return this.tagAreaEl ? Array.from(this.tagAreaEl.querySelectorAll(".tag")) : [];
43
+ }
44
+ get nonLockedTagEls() {
45
+ return this.tagEls.filter((tag) => !tag.classList.contains("locked"));
46
+ }
47
+ get optionEls() {
48
+ return Array.from(this.dropdownEl.querySelectorAll(".option"));
49
+ }
50
+ get wmRowEls() {
51
+ return Array.from(this.el.querySelectorAll("wm-tag-input-row"));
52
+ }
53
+ get localRowEls() {
54
+ return Array.from(this.el.shadowRoot.querySelectorAll("tr"));
55
+ }
56
+ get filteredRows() {
57
+ return this.wmRowEls.filter((row) => {
58
+ const colValues = [row.col1, row.col2, row.col3, row.col4].join("").toLowerCase();
59
+ return this.inputEl && this.inputEl.value ? colValues.includes(this.inputEl.value.toLowerCase()) : true;
60
+ });
61
+ }
62
+ get nonLockedTagsList() {
63
+ let list = [];
64
+ if (this.tagInputType === "table") {
65
+ this.tagsList.forEach((id) => {
66
+ const correspondingRowEl = this.wmRowEls.filter((row) => id === row.id)[0];
67
+ if (!correspondingRowEl.locked) {
68
+ list.push(id);
69
+ }
70
+ });
71
+ }
72
+ else if (this.tagInputType === "dropdown") {
73
+ list = this.tagsList;
74
+ }
75
+ return list;
76
+ }
77
+ get tagLimitReached() {
78
+ return !!(this.maxTags && this.tagsList.length >= this.maxTags);
79
+ }
80
+ get noResultsMessage() {
81
+ return intl.formatMessage({
82
+ id: "tagInput.noResults",
83
+ defaultMessage: "No results match your search.",
84
+ description: "Message displayed when a user's search returns empty.",
85
+ });
86
+ }
87
+ get componentMessages() {
88
+ const addNewHelpText = intl.formatMessage({
89
+ id: "tagInput.addNewHelpText",
90
+ defaultMessage: "Press the Enter or Comma key to add a new tag.",
91
+ description: "Help text appearing in a dropdown. Use imperative",
92
+ });
93
+ const selectionHelpText = intl.formatMessage({
94
+ id: "tagInput.selectionHelpText",
95
+ defaultMessage: "Search and select a tag.",
96
+ description: "Help text appearing in a dropdown. Use imperative",
97
+ });
98
+ const maxTagsReachedMessage = intl.formatMessage({
99
+ id: "tagInput.maxTagsReached",
100
+ defaultMessage: "No more tags can be added because the limit has been reached.",
101
+ });
102
+ const tagAreaInstructions = intl.formatMessage({
103
+ id: "tagInput.tagAreaInstructions",
104
+ defaultMessage: "tag selection. Press Backspace or Delete to remove a tag.",
105
+ });
106
+ const tagsAddedMessage = intl.formatMessage({
107
+ id: "tagInput.tagsAdded",
108
+ defaultMessage: "Tags added",
109
+ description: "For the user to understand how close they are to the tag limit, followed by x/y count",
110
+ });
111
+ const defaultConfig = {
112
+ addNewHelpText: addNewHelpText,
113
+ selectionHelpText: selectionHelpText,
114
+ maxTagsReached: maxTagsReachedMessage,
115
+ tagAreaInstructions: tagAreaInstructions,
116
+ tagsAdded: tagsAddedMessage,
117
+ };
118
+ const userProvidedConfig = safeParseJSON(this.messageConfig);
119
+ return userProvidedConfig ? Object.assign(Object.assign({}, defaultConfig), userProvidedConfig) : defaultConfig;
120
+ }
121
+ get inputMinimumWidth() {
122
+ // 150px is the minimum width of the input field, or the length of the placeholder text
123
+ const inputElStyles = getComputedStyle(this.inputEl);
124
+ const tagElStyles = getComputedStyle(this.tagEls[this.tagEls.length - 1]);
125
+ const inputElBuffer = [
126
+ inputElStyles.paddingLeft,
127
+ inputElStyles.paddingRight,
128
+ inputElStyles.marginLeft,
129
+ inputElStyles.marginRight,
130
+ tagElStyles.marginRight,
131
+ ].reduce((prev, curr) => prev + parseInt(curr.replace("px", "")), 0);
132
+ const minimumWidth = Math.max(150, measureText(this.inputEl, this.placeholder).width + inputElBuffer);
133
+ return minimumWidth;
134
+ }
135
+ generateTagAddedMessage(tag) {
136
+ return intl.formatMessage({
137
+ id: "tagInput.tagAdded",
138
+ defaultMessage: "{tagName} added.",
139
+ description: "A confirmation for adding a tag.",
140
+ }, { tagName: tag });
141
+ }
142
+ generateTagAlreadyAddedMessage(tag) {
143
+ return intl.formatMessage({
144
+ id: "tagInput.tagAlreadyAdded",
145
+ defaultMessage: "{tagName} has already been added.",
146
+ description: "An alert for adding a tag that is already present.",
147
+ }, { tagName: tag });
148
+ }
149
+ componentWillLoad() {
150
+ if (!this.placeholder) {
151
+ this.placeholder = this.createPlaceholderDefault(this.addNew, !!this.options);
152
+ }
153
+ if (!this.label) {
154
+ console.error("wm-tag-input must have a label property");
155
+ }
156
+ this.consolidateSelectedTags();
157
+ this.el.focus = () => {
158
+ const firstFocusableTag = this.nonLockedTagEls[0];
159
+ if (firstFocusableTag) {
160
+ this.tagAreaEl.focus();
161
+ this.focusTag(firstFocusableTag);
162
+ }
163
+ else {
164
+ this.inputEl.focus();
165
+ }
166
+ };
167
+ // on resize of component, trigger componentDidRender -> positionInput
168
+ const resizeObserver = new ResizeObserver(() => this.debouncedUpdate());
169
+ resizeObserver.observe(this.el);
170
+ }
171
+ componentDidLoad() {
172
+ // prevent highlighting of pre-selected tags
173
+ this.tagEls.forEach((el) => el.classList.remove("highlight"));
174
+ }
175
+ componentDidRender() {
176
+ this.positionInput();
177
+ }
178
+ consolidateSelectedTags() {
179
+ this.tagsList.forEach((tag) => {
180
+ if (!this.includesCaseInsensitive(this.optionsList, tag)) {
181
+ this.options += `${this.options.length > 0 ? "," : ""}${tag}`;
182
+ }
183
+ });
184
+ this.optionsList = csvToArray(this.options);
185
+ }
186
+ createPlaceholderDefault(addNew, hasOptions) {
187
+ const addAndSearchPlaceholder = intl.formatMessage({
188
+ id: "tagInput.placeholderAddAndSearch",
189
+ defaultMessage: "Add or search for a tag",
190
+ description: "Placeholder text. Use imperative",
191
+ });
192
+ const searchPlaceholder = intl.formatMessage({
193
+ id: "tagInput.placeholderSearch",
194
+ defaultMessage: "Search and select a tag",
195
+ description: "Placeholder text. Use imperative",
196
+ });
197
+ const addPlaceholder = intl.formatMessage({
198
+ id: "tagInput.placeholderAdd",
199
+ defaultMessage: "Add a new tag",
200
+ description: "Placeholder text. Use imperative",
201
+ });
202
+ let placeholder = "";
203
+ if (addNew && hasOptions) {
204
+ placeholder = addAndSearchPlaceholder;
205
+ }
206
+ else if (!addNew && hasOptions) {
207
+ placeholder = searchPlaceholder;
208
+ }
209
+ else if (addNew) {
210
+ placeholder = addPlaceholder;
211
+ }
212
+ return placeholder;
213
+ }
214
+ reflectSelectedTags(newValue, oldValue) {
215
+ const isAddition = newValue.length > oldValue.length;
216
+ let changedTag = "";
217
+ let selectedTags = this.tagsList;
218
+ if (isAddition) {
219
+ changedTag = newValue.filter((val) => !oldValue.includes(val))[0];
220
+ }
221
+ else {
222
+ changedTag = oldValue.filter((val) => !newValue.includes(val))[0];
223
+ }
224
+ // event emitted by type table uses element references instead of strings
225
+ if (this.tagInputType === "table") {
226
+ changedTag = this.wmRowEls.filter((row) => row.id === changedTag)[0];
227
+ selectedTags = this.tagsList.map((id) => this.el.querySelector(`#${id}`));
228
+ }
229
+ this.selectedTags = this.listToCSV(this.tagsList);
230
+ let detail = { value: selectedTags, tagChanged: changedTag };
231
+ this.wmTagInputChanged.emit(detail);
232
+ }
233
+ handleErrorMessageChange() {
234
+ if (this.errorMessage) {
235
+ this.announce(this.errorMessage);
236
+ }
237
+ }
238
+ handleRowUpdate() {
239
+ forceUpdate(this.el);
240
+ }
241
+ closeIfNotElOrChild(ev) {
242
+ const isntElOrChild = ev.target !== this.el && !this.el.shadowRoot.contains(ev.target);
243
+ if (this.tagInputType === "dropdown" && isntElOrChild && this.isExpanded) {
244
+ this.closeDropdown();
245
+ }
246
+ }
247
+ // From wm-button
248
+ // we need to listen for scroll events during the capture phase because they do not bubble up
249
+ // there can be layouts where the main content has 100vh and overflows
250
+ // in these cases window will register no scroll events unless we catch on they way down
251
+ dismissTooltip() {
252
+ if (this.tooltipVisible) {
253
+ hideTooltip();
254
+ this.tooltipVisible = false;
255
+ }
256
+ }
257
+ handleInputKeyDown(ev) {
258
+ if (/^.$/.test(ev.key) && this.inputEl.value.length >= this.characterLimit) {
259
+ this.announce(this.generateCharacterLimitWarning(this.inputEl.value.length, this.characterLimit));
260
+ }
261
+ // prevent keydown triggering on tag area
262
+ ev.stopPropagation();
263
+ switch (ev.key) {
264
+ case "Enter":
265
+ case ",":
266
+ ev.preventDefault();
267
+ this.handleInputEnter();
268
+ break;
269
+ case "ArrowDown":
270
+ ev.preventDefault();
271
+ this.handleInputArrowDown();
272
+ break;
273
+ case "ArrowUp":
274
+ ev.preventDefault();
275
+ this.handleInputArrowUp();
276
+ break;
277
+ case "ArrowLeft":
278
+ ev.preventDefault();
279
+ if (this.tagInputType === "table" && this.tablePosition.row) {
280
+ this.moveLeftCell();
281
+ }
282
+ break;
283
+ case "ArrowRight":
284
+ ev.preventDefault();
285
+ if (this.tagInputType === "table" && this.tablePosition.row) {
286
+ this.moveRightCell();
287
+ }
288
+ break;
289
+ case "Escape":
290
+ if (this.tagInputType === "dropdown" && this.isExpanded) {
291
+ this.closeDropdown();
292
+ }
293
+ break;
294
+ case "ArrowLeft":
295
+ case "Backspace":
296
+ this.handleInputBackspace();
297
+ break;
298
+ }
299
+ }
300
+ handleInputFocus() {
301
+ if (this.tagInputType === "dropdown") {
302
+ this.openDropdown();
303
+ this.clearListItemFocus();
304
+ }
305
+ // force update needed to apply styled state of field-wrapper el
306
+ forceUpdate(this.el);
307
+ }
308
+ handleInputChanged(value) {
309
+ this.charCount = value.length;
310
+ if (this.tagInputType === "dropdown") {
311
+ this.clearListItemFocus();
312
+ if (this.charCount >= this.characterLimit - 5) {
313
+ this.announce(this.generateCharacterLimitWarning(this.charCount, this.characterLimit));
314
+ }
315
+ if (!this.isExpanded) {
316
+ this.openDropdown();
317
+ }
318
+ }
319
+ else if (this.tagInputType === "table") {
320
+ this.clearCellFocus();
321
+ }
322
+ this.announceExistingOptions();
323
+ }
324
+ handleInputEnter() {
325
+ if (this.tagInputType === "dropdown") {
326
+ if (this.focusedListItem) {
327
+ this.handleListItemClick(this.focusedListItem);
328
+ }
329
+ else {
330
+ this.submitInput(this.addNew, this.inputEl.value.trim());
331
+ }
332
+ }
333
+ else if (this.tagInputType === "table" && this.tablePosition.row > 0) {
334
+ this.handleTableRowClick(this.localRowEls[this.tablePosition.row].id);
335
+ }
336
+ }
337
+ submitInput(canAddNew, value) {
338
+ const hasNonWhiteSpaceCharacters = value.match(/\S/);
339
+ if (canAddNew && hasNonWhiteSpaceCharacters) {
340
+ this.addTag(value);
341
+ this.optionsList = this.addOption(value);
342
+ this.resetInput();
343
+ }
344
+ }
345
+ handleInputArrowDown() {
346
+ if (this.tagInputType === "table") {
347
+ this.moveDownRow();
348
+ }
349
+ else if (this.tagInputType === "dropdown" && this.isExpanded) {
350
+ this.moveDownListItem();
351
+ }
352
+ else if (this.tagInputType === "dropdown") {
353
+ this.openDropdown();
354
+ }
355
+ }
356
+ handleInputArrowUp() {
357
+ if (this.tagInputType === "table") {
358
+ this.moveUpRow();
359
+ }
360
+ else if (this.tagInputType === "dropdown" && this.isExpanded) {
361
+ this.moveUpListItem();
362
+ }
363
+ else if (this.tagInputType === "dropdown") {
364
+ this.openDropdown();
365
+ }
366
+ }
367
+ handleInputBackspace() {
368
+ if (this.inputEl.value === "" && this.tagsList.length > 0) {
369
+ // wait for events to finish firing before redirecting focus
370
+ // prevents double input in input area and tag area
371
+ window.requestAnimationFrame(() => {
372
+ if (this.nonLockedTagsList.length > 0) {
373
+ this.tagAreaEl.focus();
374
+ this.focusTag(this.tagEls[this.tagEls.length - 1]);
375
+ }
376
+ });
377
+ }
378
+ }
379
+ handleListItemKeyDown(ev) {
380
+ const typedEvTarget = ev.target;
381
+ switch (ev.key) {
382
+ case "Enter":
383
+ case " ":
384
+ ev.preventDefault();
385
+ typedEvTarget.click();
386
+ break;
387
+ case "ArrowDown":
388
+ ev.preventDefault();
389
+ this.moveDownListItem();
390
+ break;
391
+ case "ArrowUp":
392
+ ev.preventDefault();
393
+ this.moveUpListItem();
394
+ break;
395
+ case "Escape":
396
+ if (this.focusedElement !== this.inputEl) {
397
+ this.inputEl.focus();
398
+ }
399
+ else if (this.tagInputType === "dropdown") {
400
+ this.closeDropdown();
401
+ }
402
+ break;
403
+ }
404
+ }
405
+ handleListItemClick(item) {
406
+ const tag = item.dataset.option.trim() || "";
407
+ if (this.includesCaseInsensitive(this.tagsList, tag)) {
408
+ this.announce(this.generateTagAlreadyAddedMessage(tag));
409
+ }
410
+ else {
411
+ this.resetInput();
412
+ this.addTag(tag);
413
+ this.optionsList = this.addOption(tag);
414
+ this.focusedListItem = null;
415
+ }
416
+ }
417
+ handleTableRowClick(rowId) {
418
+ const referencedRow = this.el.querySelector(`#${rowId}`);
419
+ const isLocked = referencedRow.locked;
420
+ if (!isLocked) {
421
+ if (this.includesCaseInsensitive(this.tagsList, rowId)) {
422
+ this.removeTag(rowId);
423
+ }
424
+ else if (!this.tagLimitReached) {
425
+ this.addTag(rowId);
426
+ this.resetInput();
427
+ }
428
+ }
429
+ }
430
+ handleTagAreaKeyDown(ev) {
431
+ switch (ev.key) {
432
+ case "ArrowLeft":
433
+ case "ArrowUp":
434
+ ev.preventDefault();
435
+ this.moveLeftTag();
436
+ break;
437
+ case "ArrowRight":
438
+ case "ArrowDown":
439
+ ev.preventDefault();
440
+ this.moveRightTag();
441
+ break;
442
+ case "Backspace":
443
+ case "Delete":
444
+ this.handleTagAreaDelete();
445
+ break;
446
+ }
447
+ }
448
+ handleTagAreaDelete() {
449
+ const isLocked = this.focusedTag && this.focusedTag.classList.contains("locked");
450
+ if (this.focusedTag && this.focusedTag.dataset.tag && !isLocked) {
451
+ this.removeTag(this.focusedTag.dataset.tag);
452
+ if (this.nonLockedTagsList.length === 0) {
453
+ // focus input if no tags are left
454
+ this.inputEl.focus();
455
+ }
456
+ else if (this.focusedTag === this.tagEls[this.tagEls.length - 1]) {
457
+ // reassign focus if removing the last tag but there are still tags remaining
458
+ this.focusedTag = this.tagEls[this.tagEls.length - 2];
459
+ this.focusTag(this.focusedTag);
460
+ }
461
+ }
462
+ }
463
+ handleBlur(ev, component) {
464
+ const isntElOrChild = ev.relatedTarget !== component && !this.el.shadowRoot.contains(ev.relatedTarget);
465
+ this.dismissTooltip();
466
+ this.clearCellFocus();
467
+ if (isntElOrChild) {
468
+ this.fieldWrapperEl.classList.remove("focused");
469
+ if (this.tagInputType === "dropdown") {
470
+ this.closeDropdown();
471
+ }
472
+ }
473
+ }
474
+ handleCellMouseEnter(ev) {
475
+ const cell = ev.target;
476
+ const contentWrapper = cell.querySelector(".cell-content-wrapper");
477
+ const isTruncated = contentWrapper.scrollWidth > contentWrapper.clientWidth;
478
+ if (isTruncated) {
479
+ // innerText is necessary vs textContent, as innerText ignores sr-only / display: none text
480
+ showTooltip("bottom", cell, cell.innerText);
481
+ this.tooltipVisible = true;
482
+ }
483
+ }
484
+ handleTagAreaFocus() {
485
+ if (this.tagInputType === "dropdown") {
486
+ this.closeDropdown();
487
+ }
488
+ const firstFocusableTag = this.nonLockedTagEls[0];
489
+ firstFocusableTag && this.focusTag(firstFocusableTag);
490
+ }
491
+ handleRemoveButtonClick(tag) {
492
+ this.moveLeftTag();
493
+ this.removeTag(tag);
494
+ }
495
+ moveDownListItem() {
496
+ if (this.listItemEls.length > 0) {
497
+ const firstListItem = this.listItemEls[0];
498
+ if (!this.focusedListItem) {
499
+ this.focusListItem(firstListItem);
500
+ }
501
+ else if (this.focusedListItem.nextElementSibling) {
502
+ this.focusListItem(this.focusedListItem.nextElementSibling);
503
+ }
504
+ else {
505
+ this.focusListItem(firstListItem);
506
+ }
507
+ }
508
+ }
509
+ moveUpListItem() {
510
+ if (this.listItemEls.length > 0) {
511
+ const lastListItem = this.listItemEls[this.listItemEls.length - 1];
512
+ if (!this.focusedListItem) {
513
+ this.focusListItem(lastListItem);
514
+ }
515
+ else if (this.focusedListItem.previousElementSibling) {
516
+ this.focusListItem(this.focusedListItem.previousElementSibling);
517
+ }
518
+ else {
519
+ this.clearListItemFocus();
520
+ }
521
+ }
522
+ }
523
+ moveDownRow() {
524
+ if (this.filteredRows.length > 0) {
525
+ if (this.tablePosition.row === 0) {
526
+ this.tablePosition.row = 1;
527
+ }
528
+ else if (this.tablePosition.row === this.filteredRows.length) {
529
+ this.tablePosition.row = 1;
530
+ }
531
+ else {
532
+ this.tablePosition.row++;
533
+ }
534
+ // skip locked rows
535
+ const rowToFocus = this.wmRowEls[this.tablePosition.row - 1];
536
+ if (rowToFocus.locked) {
537
+ this.moveDownRow();
538
+ }
539
+ else {
540
+ this.focusCell(this.tablePosition);
541
+ }
542
+ }
543
+ }
544
+ moveUpRow() {
545
+ if (this.filteredRows.length > 0) {
546
+ if (this.tablePosition.row === 0) {
547
+ this.tablePosition.row = this.filteredRows.length;
548
+ }
549
+ else if (this.tablePosition.row === 1) {
550
+ this.tablePosition.row = 0;
551
+ }
552
+ else {
553
+ this.tablePosition.row--;
554
+ }
555
+ // skip locked rows
556
+ const rowToFocus = this.wmRowEls[this.tablePosition.row - 1];
557
+ if (rowToFocus && rowToFocus.locked) {
558
+ this.moveUpRow();
559
+ }
560
+ else if (rowToFocus) {
561
+ this.focusCell(this.tablePosition);
562
+ }
563
+ else {
564
+ this.clearCellFocus();
565
+ }
566
+ }
567
+ }
568
+ moveLeftCell() {
569
+ if (this.tablePosition.column != 1) {
570
+ this.tablePosition.column--;
571
+ this.focusCell(this.tablePosition);
572
+ }
573
+ }
574
+ moveRightCell() {
575
+ const numCols = csvToArray(this.colHeaders).length;
576
+ if (this.tablePosition.column < numCols) {
577
+ this.tablePosition.column++;
578
+ this.focusCell(this.tablePosition);
579
+ }
580
+ }
581
+ moveLeftTag() {
582
+ const lastTag = this.tagEls[this.tagEls.length - 1];
583
+ if (this.focusedTag && this.tagEls.includes(this.focusedTag.previousElementSibling)) {
584
+ this.focusedTag = this.focusedTag.previousElementSibling;
585
+ }
586
+ else {
587
+ this.focusedTag = lastTag;
588
+ }
589
+ // skip locked tags
590
+ if (this.focusedTag.classList.contains("locked") && this.nonLockedTagEls.length > 0) {
591
+ this.moveLeftTag();
592
+ }
593
+ else {
594
+ this.focusTag(this.focusedTag);
595
+ }
596
+ }
597
+ moveRightTag() {
598
+ const firstTag = this.tagEls[0];
599
+ if (this.focusedTag && this.tagEls.includes(this.focusedTag.nextElementSibling)) {
600
+ this.focusedTag = this.focusedTag.nextElementSibling;
601
+ }
602
+ else {
603
+ this.focusedTag = firstTag;
604
+ }
605
+ // skip locked tags
606
+ if (this.focusedTag.classList.contains("locked")) {
607
+ this.moveRightTag();
608
+ }
609
+ else {
610
+ this.focusTag(this.focusedTag);
611
+ }
612
+ }
613
+ addOption(option) {
614
+ let newOptionsList = this.optionsList;
615
+ const optionAlreadyExists = this.includesCaseInsensitive(this.optionsList, option);
616
+ if (!optionAlreadyExists) {
617
+ newOptionsList = newOptionsList.concat(option);
618
+ }
619
+ return newOptionsList;
620
+ }
621
+ removeOption(option) {
622
+ this.optionsList = this.filterCaseInsensitive(this.optionsList, option);
623
+ }
624
+ addTag(tag) {
625
+ let newTagsList = this.tagsList;
626
+ const tagAlreadyAdded = this.includesCaseInsensitive(this.tagsList, tag);
627
+ const tagExistsAsOption = this.optionsList.filter((x) => x.toLowerCase() === tag.toLowerCase())[0];
628
+ if (!tagAlreadyAdded) {
629
+ let textToAnnounce = tag;
630
+ if (this.tagInputType === "table") {
631
+ const referencedRow = this.el.querySelector(`#${tag}`);
632
+ textToAnnounce = referencedRow.col1;
633
+ }
634
+ this.announce(this.generateTagAddedMessage(textToAnnounce));
635
+ this.tagsList = newTagsList.concat(tagExistsAsOption || tag);
636
+ // if maxTags has been reached, focus should go to the tagArea
637
+ if (this.tagLimitReached) {
638
+ this.tagAreaEl.focus();
639
+ }
640
+ }
641
+ }
642
+ removeTag(tag) {
643
+ let textToAnnounce = tag;
644
+ if (this.tagInputType === "table") {
645
+ const referencedRow = this.el.querySelector(`#${tag}`);
646
+ textToAnnounce = referencedRow.col1;
647
+ }
648
+ const tagRemovedMessage = intl.formatMessage({ id: "tagInput.tagRemoved", defaultMessage: "{tag} removed" }, { tag: textToAnnounce });
649
+ this.announce(tagRemovedMessage);
650
+ this.tagsList = this.filterCaseInsensitive(this.tagsList, tag);
651
+ if (this.tagInputType === "dropdown") {
652
+ // if a tag was introduced by the user, also remove it from the dropdown options
653
+ const devOptionsList = csvToArray(this.options);
654
+ if (this.includesCaseInsensitive(this.optionsList, tag) && !this.includesCaseInsensitive(devOptionsList, tag)) {
655
+ this.removeOption(tag);
656
+ }
657
+ }
658
+ }
659
+ focusListItem(item) {
660
+ this.focusedListItem = item;
661
+ this.inputEl.setAttribute("aria-activedescendant", this.focusedListItem.id);
662
+ item.scrollIntoView({ block: "nearest" });
663
+ }
664
+ focusTag(element) {
665
+ if (element.classList.contains("locked")) {
666
+ this.focusedTag = null;
667
+ this.tagAreaEl.setAttribute("aria-activedescendant", "");
668
+ }
669
+ else {
670
+ this.focusedTag = element;
671
+ this.tagAreaEl.setAttribute("aria-activedescendant", this.focusedTag.id);
672
+ }
673
+ }
674
+ focusCell(position) {
675
+ this.clearCellFocus(false);
676
+ if (position.row) {
677
+ const rowToFocus = this.localRowEls[position.row];
678
+ const rowCells = rowToFocus.querySelectorAll("td");
679
+ const cellToFocus = rowCells[position.column - 1];
680
+ const contentWrapper = cellToFocus.querySelector(".cell-content-wrapper");
681
+ const isTruncated = contentWrapper.scrollWidth > contentWrapper.clientWidth;
682
+ rowToFocus.classList.add("focused");
683
+ cellToFocus.classList.add("focused");
684
+ cellToFocus.scrollIntoView({ block: "nearest" });
685
+ this.inputEl.setAttribute("aria-activedescendant", cellToFocus.id);
686
+ this.dismissTooltip();
687
+ if (isTruncated) {
688
+ // innerText is necessary vs textContent, as innerText ignores sr-only / display: none text
689
+ showTooltip("bottom", cellToFocus, cellToFocus.innerText);
690
+ this.tooltipVisible = true;
691
+ }
692
+ }
693
+ }
694
+ clearTagFocus() {
695
+ this.tagAreaEl.setAttribute("aria-activedescendant", "");
696
+ this.focusedTag = null;
697
+ }
698
+ clearCellFocus(resetPosition = true) {
699
+ this.inputEl.setAttribute("aria-activedescendant", "");
700
+ if (resetPosition) {
701
+ this.tablePosition = { row: 0, column: 1 };
702
+ }
703
+ this.localRowEls.forEach((row) => {
704
+ row.classList.remove("focused");
705
+ row.querySelectorAll("td").forEach((cell) => {
706
+ cell.classList.remove("focused");
707
+ });
708
+ });
709
+ }
710
+ openDropdown() {
711
+ // given an offset of -2px because the dropdown is transformed downwards to avoid overlapping the focus border
712
+ this.openUp = shouldOpenUp(this.el, this.dropdownEl, this.el.clientHeight, -2);
713
+ this.isExpanded = true;
714
+ }
715
+ closeDropdown() {
716
+ this.clearListItemFocus();
717
+ this.isExpanded = false;
718
+ }
719
+ clearListItemFocus() {
720
+ this.focusedListItem = null;
721
+ this.inputEl.setAttribute("aria-activedescendant", "");
722
+ this.listItemEls.forEach((el) => {
723
+ el.classList.remove("focused");
724
+ });
725
+ }
726
+ resetInput() {
727
+ this.charCount = 0;
728
+ this.inputEl.value = "";
729
+ }
730
+ announce(message) {
731
+ // \u00A0 is a non-breaking space character, which causes the message to be read as a new one
732
+ if (this.liveRegionEl.textContent === message) {
733
+ message += "\u00A0";
734
+ }
735
+ this.liveRegionMessage = message;
736
+ }
737
+ announceExistingOptions() {
738
+ // request animation frame to wait for re-rendering of filtered options
739
+ window.requestAnimationFrame(() => {
740
+ let numResults = 0;
741
+ if (this.tagInputType === "dropdown") {
742
+ numResults = this.optionEls.length;
743
+ }
744
+ else if (this.tagInputType === "table") {
745
+ numResults = this.filteredRows.length;
746
+ }
747
+ const existingOptionsMessage = intl.formatMessage({
748
+ id: "tagInput.existingOptions",
749
+ defaultMessage: "{num, plural, one {1 existing option.} other {# existing options.}}",
750
+ }, { num: numResults });
751
+ this.announce(existingOptionsMessage);
752
+ });
753
+ }
754
+ generateCharacterLimitWarning(charCount, charLimit) {
755
+ let message = globalMessages.getCharactersEntered(charCount, charLimit);
756
+ if (charCount >= charLimit) {
757
+ message += ` ${globalMessages.characterLimitReached}`;
758
+ }
759
+ return message;
760
+ }
761
+ positionInput() {
762
+ const lastTag = this.tagEls[this.tagEls.length - 1];
763
+ // default placement to fall back to when no tags are present, or not enough space is available
764
+ this.inputEl.style.position = "static";
765
+ this.inputEl.style.width = "100%";
766
+ if (lastTag) {
767
+ const spaceAvailable = this.tagAreaEl.getBoundingClientRect().right - lastTag.getBoundingClientRect().right;
768
+ if (spaceAvailable >= this.inputMinimumWidth) {
769
+ // because the input has right: 0px
770
+ // all thats needed to properly place it is setting position: absolute, top, and width
771
+ this.inputEl.style.position = "absolute";
772
+ this.inputEl.style.top = lastTag.offsetTop.toString() + "px";
773
+ this.inputEl.style.width =
774
+ (this.tagAreaEl.getBoundingClientRect().right - lastTag.getBoundingClientRect().right - 8).toString() + "px";
775
+ }
776
+ }
777
+ }
778
+ /// Helpers
779
+ listToCSV(list) {
780
+ return list.join(",");
781
+ }
782
+ includesCaseInsensitive(list, element) {
783
+ const lowercaseList = list.map((str) => str.toLowerCase());
784
+ return lowercaseList.includes(element.toLowerCase());
785
+ }
786
+ filterCaseInsensitive(list, element) {
787
+ return list.filter((x) => x.toLowerCase() !== element.toLowerCase());
788
+ }
789
+ sortCaseInsensitive(list) {
790
+ // The vanilla .sort method places words that start with capital letters above others (ASCII order)
791
+ // so we need to pass in our own compare function to sort case-insensitive
792
+ return list.sort((a, b) => {
793
+ a = a.toLowerCase();
794
+ b = b.toLowerCase();
795
+ return a > b ? 1 : a < b ? -1 : 0;
796
+ });
797
+ }
798
+ /// Renders
799
+ renderTags() {
800
+ let lockedTags = [];
801
+ let unlockedTags = [];
802
+ this.tagsList.forEach((tag, idx) => {
803
+ const id = `tag${idx + 1}`;
804
+ let tagText = "";
805
+ let isLocked = false;
806
+ if (this.tagInputType === "dropdown") {
807
+ tagText = tag;
808
+ }
809
+ else if (this.tagInputType === "table") {
810
+ // display table tags using col1 of the row with the same id
811
+ // if one can't be found, display as empty
812
+ const referencedRow = this.el.querySelector(`#${tag}`);
813
+ tagText = referencedRow ? referencedRow.col1 : "";
814
+ isLocked = referencedRow ? referencedRow.locked : false;
815
+ }
816
+ // make sure locked tags always appear in front of list
817
+ const targetList = isLocked ? lockedTags : unlockedTags;
818
+ targetList.push(h("li", { id: id, class: `tag highlight ${this.focusedTag && this.focusedTag.id === id ? "focused" : ""} ${isLocked ? "locked" : ""}`, "data-tag": tag, role: "option" }, tagText, isLocked ? (h("div", { class: "icon lock" })) : (h("button", { class: "icon remove-btn", tabIndex: -1, onClick: () => this.handleRemoveButtonClick(tag) }))));
819
+ });
820
+ return [...lockedTags, ...unlockedTags];
821
+ }
822
+ renderDropdown() {
823
+ return (h("div", { class: `dropdown-wrapper ${this.isExpanded ? "open" : ""} ${this.openUp ? "upwards" : ""}`, ref: (el) => (this.dropdownEl = el) }, h("div", { id: "help-text", class: "help-text" }, this.renderHelpText()), h("ul", { class: "dropdown", id: "dropdown", role: "listbox", "aria-multiselectable": "true", "aria-expanded": this.isExpanded ? "true" : false, "aria-label": this.label, tabindex: -1 }, this.inputEl && this.renderAddNewButton(), this.renderListItems(this.optionsList))));
824
+ }
825
+ renderListItems(optionsList) {
826
+ optionsList = this.sortCaseInsensitive(optionsList);
827
+ // filter by input
828
+ if (this.inputEl && this.inputEl.value) {
829
+ optionsList = this.optionsList.filter((option) => option.toLowerCase().includes(this.inputEl.value.toLowerCase()));
830
+ }
831
+ return optionsList.map((option, idx) => {
832
+ const id = `option${idx + 1}`;
833
+ const isFocused = this.focusedListItem && this.focusedListItem.id === id;
834
+ const isSelected = this.includesCaseInsensitive(this.tagsList, option);
835
+ return (h("li", { class: `option ${isFocused ? "focused" : ""}`, role: "option", id: id, "data-option": option, "aria-selected": isSelected ? "true" : "false", "aria-disabled": isSelected ? "true" : "false", onKeyDown: (ev) => this.handleListItemKeyDown(ev), onBlur: (ev) => this.handleBlur(ev, this.el), onClick: (ev) => this.handleListItemClick(ev.target) }, option));
836
+ });
837
+ }
838
+ renderAddNewButton() {
839
+ const hasNonWhiteSpaceCharacters = this.inputEl.value.match(/\S/);
840
+ const optionAlreadyExists = this.includesCaseInsensitive(this.optionsList, this.inputEl.value.trim());
841
+ if (this.addNew && hasNonWhiteSpaceCharacters && !optionAlreadyExists) {
842
+ const id = `add-new-btn`;
843
+ const isFocused = this.focusedListItem && this.focusedListItem.id === id;
844
+ return (h("li", { role: "option", class: `add-new-btn ${isFocused ? "focused" : ""}`, id: id, "data-option": this.inputEl.value, onKeyDown: (ev) => this.handleListItemKeyDown(ev), onBlur: (ev) => this.handleBlur(ev, this.el), onClick: (ev) => this.handleListItemClick(ev.target), tabIndex: isFocused ? 0 : -1 }, `Add "${this.inputEl.value.trim()}"`));
845
+ }
846
+ else
847
+ return "";
848
+ }
849
+ renderHelpText() {
850
+ let helpText = "";
851
+ if (this.optionsList.length > 0) {
852
+ helpText += this.componentMessages.selectionHelpText;
853
+ }
854
+ if (this.addNew) {
855
+ helpText += " " + this.componentMessages.addNewHelpText;
856
+ }
857
+ return helpText;
858
+ }
859
+ renderTagCounter() {
860
+ if (this.maxTags) {
861
+ return (h("div", { class: "lower-row" }, h("div", { id: "max-tags" }, `${this.componentMessages.tagsAdded}: ${this.tagsList.length}/${this.maxTags}`, this.tagLimitReached && ` - ${this.componentMessages.maxTagsReached}`)));
862
+ }
863
+ }
864
+ renderTable() {
865
+ return (h("div", { class: "table-wrapper", onScroll: () => this.dismissTooltip() }, h("table", { id: "table", role: "grid", class: `${this.colWidths ? "fixed-widths" : ""}`, "aria-label": this.label, "aria-multiselectable": "true" }, this.renderTableHeaders(), this.filteredRows.length ? this.renderTableRows() : h("div", { class: "no-results" }, this.noResultsMessage))));
866
+ }
867
+ renderTableHeaders() {
868
+ return (h("tr", { class: "headers", role: "row" }, csvToArray(this.colHeaders).map((header, idx) => {
869
+ let overflowRule = "wrap";
870
+ if (this.colWrap && csvToArray(this.colWrap)[idx]) {
871
+ overflowRule = csvToArray(this.colWrap)[idx];
872
+ }
873
+ return (h("th", { class: `header-cell ${overflowRule}`, role: "columnheader",
874
+ // @ts-ignore
875
+ width: this.colWidths ? csvToArray(this.colWidths)[idx] : "" }, header));
876
+ })));
877
+ }
878
+ renderTableRows() {
879
+ return this.filteredRows.map((row) => {
880
+ const isSelected = this.includesCaseInsensitive(this.tagsList, row.id);
881
+ return (h("tr", { id: row.id, class: `${row.locked ? "locked" : ""} ${isSelected ? "selected" : ""}`, role: "row", onClick: () => this.handleTableRowClick(row.id) }, this.renderTableCells(row)));
882
+ });
883
+ }
884
+ renderTableCells(row) {
885
+ const colValues = [row.col1, row.col2, row.col3, row.col4].filter((val) => !!val);
886
+ const isSelected = this.includesCaseInsensitive(this.tagsList, row.id);
887
+ return colValues.map((val, idx) => {
888
+ const localId = `${row.id}-col${idx + 1}`;
889
+ let overflowRule = "wrap";
890
+ if (this.colWrap && csvToArray(this.colWrap)[idx]) {
891
+ overflowRule = csvToArray(this.colWrap)[idx];
892
+ }
893
+ return (h("td", { id: localId, role: "gridcell", "aria-describedby": `${localId}-description`, "aria-selected": isSelected.toString(), onMouseEnter: (ev) => this.handleCellMouseEnter(ev), onMouseLeave: () => this.dismissTooltip() }, h("div", { class: `cell-content-wrapper ${overflowRule}` }, val), h("div", { class: "description", id: `${localId}-description` }, row.locked ? "locked" : "")));
894
+ });
895
+ }
896
+ render() {
897
+ return (h(Host, { id: this.uid }, h("div", { class: `wrapper label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}` }, h("div", { class: "label-wrapper" }, h("label", { class: "label", htmlFor: `input${this.uid}` }, this.label, this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*")))), h("div", { class: `field-wrapper ${this.focusedElement ? "focused" : ""} ${this.errorMessage ? "invalid" : ""}`, ref: (el) => (this.fieldWrapperEl = el) }, h("div", { class: "upper-row" }, h("div", { class: "tags-and-input-wrapper" }, this.tagsList.length > 0 && (h("ul", { ref: (el) => (this.tagAreaEl = el), class: "tag-area", role: "listbox", "aria-activedescendant": "", "aria-orientation": "horizontal", "aria-label": `${this.label} ${this.tagsList.length > 0 ? this.componentMessages.tagAreaInstructions : ""}`, tabindex: this.nonLockedTagsList.length > 0 ? 0 : -1, "aria-describedby": `info max-tags`, onFocus: () => this.handleTagAreaFocus(), onBlur: (ev) => {
898
+ this.clearTagFocus();
899
+ this.handleBlur(ev, this.el);
900
+ }, onKeyDown: (ev) => this.handleTagAreaKeyDown(ev) }, this.renderTags())), h("input", { id: `input${this.uid}`, class: this.tagLimitReached ? "hidden" : "", role: "combobox", ref: (el) => (this.inputEl = el), autocomplete: "off", "aria-required": this.requiredField ? "true" : null, "aria-controls": this.tagInputType, "aria-describedby": `help-text${this.errorMessage ? " error " : ""}`, "aria-label": `${this.label} ${this.tagInputType === "dropdown" ? globalMessages.getCharacterLimit(this.characterLimit) : ""}`, "aria-expanded": this.tagInputType === "dropdown" ? this.isExpanded.toString() : null, placeholder: this.placeholder, maxLength: this.tagInputType === "dropdown" ? this.characterLimit : undefined, onInput: () => this.handleInputChanged(this.inputEl.value), onBlur: (ev) => {
901
+ this.handleBlur(ev, this.el);
902
+ }, onFocus: () => this.handleInputFocus(), onKeyDown: (ev) => this.handleInputKeyDown(ev) })), this.tagInputType === "dropdown" && (h("div", { class: "character-count" }, this.charCount, "/", this.characterLimit))), this.renderTagCounter(), this.tagInputType === "dropdown" && this.renderDropdown()), this.info && (h("div", { id: "info", class: "info-text" }, this.info)), this.errorMessage && h("div", { id: "error" }, this.errorMessage), h("div", { class: "sr-only", "aria-live": "assertive", ref: (el) => (this.liveRegionEl = el), "aria-atomic": "true" }, this.liveRegionMessage), this.tagInputType === "table" && this.renderTable())));
903
+ }
904
+ static get is() { return "wm-tag-input"; }
905
+ static get encapsulation() { return "shadow"; }
906
+ static get delegatesFocus() { return true; }
907
+ static get originalStyleUrls() {
908
+ return {
909
+ "$": ["wm-tag-input.scss"]
910
+ };
911
+ }
912
+ static get styleUrls() {
913
+ return {
914
+ "$": ["wm-tag-input.css"]
915
+ };
916
+ }
917
+ static get properties() {
918
+ return {
919
+ "label": {
920
+ "type": "string",
921
+ "mutable": false,
922
+ "complexType": {
923
+ "original": "string",
924
+ "resolved": "string",
925
+ "references": {}
926
+ },
927
+ "required": true,
928
+ "optional": false,
929
+ "docs": {
930
+ "tags": [],
931
+ "text": ""
932
+ },
933
+ "attribute": "label",
934
+ "reflect": false
935
+ },
936
+ "labelPosition": {
937
+ "type": "string",
938
+ "mutable": false,
939
+ "complexType": {
940
+ "original": "\"top\" | \"left\" | \"none\"",
941
+ "resolved": "\"left\" | \"none\" | \"top\"",
942
+ "references": {}
943
+ },
944
+ "required": false,
945
+ "optional": false,
946
+ "docs": {
947
+ "tags": [],
948
+ "text": ""
949
+ },
950
+ "attribute": "label-position",
951
+ "reflect": false,
952
+ "defaultValue": "\"top\""
953
+ },
954
+ "options": {
955
+ "type": "string",
956
+ "mutable": true,
957
+ "complexType": {
958
+ "original": "string",
959
+ "resolved": "string",
960
+ "references": {}
961
+ },
962
+ "required": false,
963
+ "optional": false,
964
+ "docs": {
965
+ "tags": [],
966
+ "text": ""
967
+ },
968
+ "attribute": "options",
969
+ "reflect": false,
970
+ "defaultValue": "\"\""
971
+ },
972
+ "selectedTags": {
973
+ "type": "string",
974
+ "mutable": true,
975
+ "complexType": {
976
+ "original": "string",
977
+ "resolved": "string",
978
+ "references": {}
979
+ },
980
+ "required": false,
981
+ "optional": false,
982
+ "docs": {
983
+ "tags": [],
984
+ "text": ""
985
+ },
986
+ "attribute": "selected-tags",
987
+ "reflect": true,
988
+ "defaultValue": "\"\""
989
+ },
990
+ "info": {
991
+ "type": "string",
992
+ "mutable": false,
993
+ "complexType": {
994
+ "original": "string",
995
+ "resolved": "string | undefined",
996
+ "references": {}
997
+ },
998
+ "required": false,
999
+ "optional": true,
1000
+ "docs": {
1001
+ "tags": [],
1002
+ "text": ""
1003
+ },
1004
+ "attribute": "info",
1005
+ "reflect": false
1006
+ },
1007
+ "errorMessage": {
1008
+ "type": "string",
1009
+ "mutable": false,
1010
+ "complexType": {
1011
+ "original": "string",
1012
+ "resolved": "string | undefined",
1013
+ "references": {}
1014
+ },
1015
+ "required": false,
1016
+ "optional": true,
1017
+ "docs": {
1018
+ "tags": [],
1019
+ "text": ""
1020
+ },
1021
+ "attribute": "error-message",
1022
+ "reflect": false
1023
+ },
1024
+ "addNew": {
1025
+ "type": "boolean",
1026
+ "mutable": false,
1027
+ "complexType": {
1028
+ "original": "boolean",
1029
+ "resolved": "boolean",
1030
+ "references": {}
1031
+ },
1032
+ "required": false,
1033
+ "optional": false,
1034
+ "docs": {
1035
+ "tags": [],
1036
+ "text": ""
1037
+ },
1038
+ "attribute": "add-new",
1039
+ "reflect": false,
1040
+ "defaultValue": "true"
1041
+ },
1042
+ "placeholder": {
1043
+ "type": "string",
1044
+ "mutable": true,
1045
+ "complexType": {
1046
+ "original": "string",
1047
+ "resolved": "string | undefined",
1048
+ "references": {}
1049
+ },
1050
+ "required": false,
1051
+ "optional": true,
1052
+ "docs": {
1053
+ "tags": [],
1054
+ "text": ""
1055
+ },
1056
+ "attribute": "placeholder",
1057
+ "reflect": false
1058
+ },
1059
+ "requiredField": {
1060
+ "type": "boolean",
1061
+ "mutable": false,
1062
+ "complexType": {
1063
+ "original": "boolean",
1064
+ "resolved": "boolean",
1065
+ "references": {}
1066
+ },
1067
+ "required": false,
1068
+ "optional": false,
1069
+ "docs": {
1070
+ "tags": [],
1071
+ "text": ""
1072
+ },
1073
+ "attribute": "required-field",
1074
+ "reflect": false,
1075
+ "defaultValue": "false"
1076
+ },
1077
+ "characterLimit": {
1078
+ "type": "number",
1079
+ "mutable": false,
1080
+ "complexType": {
1081
+ "original": "number",
1082
+ "resolved": "number",
1083
+ "references": {}
1084
+ },
1085
+ "required": false,
1086
+ "optional": false,
1087
+ "docs": {
1088
+ "tags": [],
1089
+ "text": ""
1090
+ },
1091
+ "attribute": "character-limit",
1092
+ "reflect": false,
1093
+ "defaultValue": "50"
1094
+ },
1095
+ "maxTags": {
1096
+ "type": "number",
1097
+ "mutable": false,
1098
+ "complexType": {
1099
+ "original": "number",
1100
+ "resolved": "number | undefined",
1101
+ "references": {}
1102
+ },
1103
+ "required": false,
1104
+ "optional": true,
1105
+ "docs": {
1106
+ "tags": [],
1107
+ "text": ""
1108
+ },
1109
+ "attribute": "max-tags",
1110
+ "reflect": false
1111
+ },
1112
+ "tagInputType": {
1113
+ "type": "string",
1114
+ "mutable": false,
1115
+ "complexType": {
1116
+ "original": "\"dropdown\" | \"table\"",
1117
+ "resolved": "\"dropdown\" | \"table\"",
1118
+ "references": {}
1119
+ },
1120
+ "required": false,
1121
+ "optional": false,
1122
+ "docs": {
1123
+ "tags": [],
1124
+ "text": ""
1125
+ },
1126
+ "attribute": "tag-input-type",
1127
+ "reflect": false,
1128
+ "defaultValue": "\"dropdown\""
1129
+ },
1130
+ "colHeaders": {
1131
+ "type": "string",
1132
+ "mutable": false,
1133
+ "complexType": {
1134
+ "original": "string",
1135
+ "resolved": "string",
1136
+ "references": {}
1137
+ },
1138
+ "required": true,
1139
+ "optional": false,
1140
+ "docs": {
1141
+ "tags": [],
1142
+ "text": ""
1143
+ },
1144
+ "attribute": "col-headers",
1145
+ "reflect": false
1146
+ },
1147
+ "colWidths": {
1148
+ "type": "string",
1149
+ "mutable": false,
1150
+ "complexType": {
1151
+ "original": "string",
1152
+ "resolved": "string | undefined",
1153
+ "references": {}
1154
+ },
1155
+ "required": false,
1156
+ "optional": true,
1157
+ "docs": {
1158
+ "tags": [],
1159
+ "text": ""
1160
+ },
1161
+ "attribute": "col-widths",
1162
+ "reflect": false
1163
+ },
1164
+ "colWrap": {
1165
+ "type": "string",
1166
+ "mutable": false,
1167
+ "complexType": {
1168
+ "original": "string",
1169
+ "resolved": "string | undefined",
1170
+ "references": {}
1171
+ },
1172
+ "required": false,
1173
+ "optional": true,
1174
+ "docs": {
1175
+ "tags": [],
1176
+ "text": ""
1177
+ },
1178
+ "attribute": "col-wrap",
1179
+ "reflect": false
1180
+ },
1181
+ "messageConfig": {
1182
+ "type": "string",
1183
+ "mutable": false,
1184
+ "complexType": {
1185
+ "original": "string",
1186
+ "resolved": "string",
1187
+ "references": {}
1188
+ },
1189
+ "required": false,
1190
+ "optional": false,
1191
+ "docs": {
1192
+ "tags": [],
1193
+ "text": ""
1194
+ },
1195
+ "attribute": "message-config",
1196
+ "reflect": false,
1197
+ "defaultValue": "\"\""
1198
+ }
1199
+ };
1200
+ }
1201
+ static get states() {
1202
+ return {
1203
+ "focusedListItem": {},
1204
+ "focusedTag": {},
1205
+ "tablePosition": {},
1206
+ "isExpanded": {},
1207
+ "tagsList": {},
1208
+ "optionsList": {},
1209
+ "charCount": {},
1210
+ "liveRegionMessage": {}
1211
+ };
1212
+ }
1213
+ static get events() {
1214
+ return [{
1215
+ "method": "wmTagInputChanged",
1216
+ "name": "wmTagInputChanged",
1217
+ "bubbles": true,
1218
+ "cancelable": true,
1219
+ "composed": true,
1220
+ "docs": {
1221
+ "tags": [],
1222
+ "text": ""
1223
+ },
1224
+ "complexType": {
1225
+ "original": "{\n value: string[] | HTMLWmTagInputRowElement[];\n tagChanged: string | HTMLWmTagInputRowElement;\n }",
1226
+ "resolved": "{ value: string[] | HTMLWmTagInputRowElement[]; tagChanged: string | HTMLWmTagInputRowElement; }",
1227
+ "references": {
1228
+ "HTMLWmTagInputRowElement": {
1229
+ "location": "global"
1230
+ }
1231
+ }
1232
+ }
1233
+ }];
1234
+ }
1235
+ static get elementRef() { return "el"; }
1236
+ static get watchers() {
1237
+ return [{
1238
+ "propName": "tagsList",
1239
+ "methodName": "reflectSelectedTags"
1240
+ }, {
1241
+ "propName": "errorMessage",
1242
+ "methodName": "handleErrorMessageChange"
1243
+ }];
1244
+ }
1245
+ static get listeners() {
1246
+ return [{
1247
+ "name": "wmTagInputRowUpdated",
1248
+ "method": "handleRowUpdate",
1249
+ "target": undefined,
1250
+ "capture": false,
1251
+ "passive": false
1252
+ }, {
1253
+ "name": "click",
1254
+ "method": "closeIfNotElOrChild",
1255
+ "target": "document",
1256
+ "capture": false,
1257
+ "passive": false
1258
+ }, {
1259
+ "name": "scroll",
1260
+ "method": "dismissTooltip",
1261
+ "target": "window",
1262
+ "capture": true,
1263
+ "passive": true
1264
+ }];
1265
+ }
1266
+ }
1267
+ //# sourceMappingURL=wm-tag-input.js.map