@watermarkinsights/ripple 3.7.0 → 3.8.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/{functions-13b0e88e.js → functions-f0693632.js} +442 -442
  3. package/dist/cjs/{global-c802d13c.js → global-0d9945cb.js} +65 -65
  4. package/dist/cjs/{http-service-9e8c4dd5.js → http-service-494d81de.js} +49 -49
  5. package/dist/cjs/{interfaces-30a74c1f.js → interfaces-a3338581.js} +29 -29
  6. package/dist/cjs/loader.cjs.js +2 -2
  7. package/dist/cjs/priv-chart-popover.cjs.entry.js +79 -79
  8. package/dist/cjs/priv-datepicker.cjs.entry.js +673 -668
  9. package/dist/cjs/priv-navigator-button.cjs.entry.js +19 -19
  10. package/dist/cjs/priv-navigator-item.cjs.entry.js +23 -23
  11. package/dist/cjs/ripple.cjs.js +2 -2
  12. package/dist/cjs/wm-action-menu_2.cjs.entry.js +342 -342
  13. package/dist/cjs/wm-button.cjs.entry.js +237 -237
  14. package/dist/cjs/wm-chart-slice.cjs.entry.js +13 -13
  15. package/dist/cjs/wm-chart.cjs.entry.js +475 -475
  16. package/dist/cjs/wm-datepicker.cjs.entry.js +272 -263
  17. package/dist/cjs/wm-input.cjs.entry.js +135 -135
  18. package/dist/cjs/wm-modal-footer.cjs.entry.js +32 -32
  19. package/dist/cjs/wm-modal-header.cjs.entry.js +34 -34
  20. package/dist/cjs/wm-modal.cjs.entry.js +162 -162
  21. package/dist/cjs/wm-navigator.cjs.entry.js +269 -269
  22. package/dist/cjs/wm-network-uploader.cjs.entry.js +421 -421
  23. package/dist/cjs/wm-option_2.cjs.entry.js +496 -496
  24. package/dist/cjs/wm-pagination.cjs.entry.js +168 -168
  25. package/dist/cjs/wm-search.cjs.entry.js +233 -233
  26. package/dist/cjs/wm-snackbar.cjs.entry.js +171 -171
  27. package/dist/cjs/wm-tab-item_3.cjs.entry.js +298 -298
  28. package/dist/cjs/wm-tag-input.cjs.entry.js +580 -571
  29. package/dist/cjs/wm-timepicker.cjs.entry.js +384 -381
  30. package/dist/cjs/wm-toggletip.cjs.entry.js +125 -125
  31. package/dist/cjs/wm-uploader.cjs.entry.js +347 -347
  32. package/dist/cjs/wm-wrapper.cjs.entry.js +12 -12
  33. package/dist/collection/components/wm-action-menu/wm-action-menu.js +460 -460
  34. package/dist/collection/components/wm-button/wm-button.js +503 -503
  35. package/dist/collection/components/wm-chart/priv-chart-popover/priv-chart-popover.js +232 -232
  36. package/dist/collection/components/wm-chart/wm-chart-slice.js +64 -64
  37. package/dist/collection/components/wm-chart/wm-chart.css +3 -0
  38. package/dist/collection/components/wm-chart/wm-chart.js +718 -718
  39. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js +1039 -1015
  40. package/dist/collection/components/wm-datepicker/wm-datepicker.js +483 -468
  41. package/dist/collection/components/wm-input/wm-input.js +423 -423
  42. package/dist/collection/components/wm-menuitem/wm-menuitem.js +444 -444
  43. package/dist/collection/components/wm-modal/wm-modal-footer.js +141 -141
  44. package/dist/collection/components/wm-modal/wm-modal-header.js +92 -92
  45. package/dist/collection/components/wm-modal/wm-modal.js +459 -459
  46. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +97 -97
  47. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +114 -114
  48. package/dist/collection/components/wm-navigator/wm-navigator.js +468 -468
  49. package/dist/collection/components/wm-option/wm-option.js +422 -422
  50. package/dist/collection/components/wm-pagination/wm-pagination.js +368 -368
  51. package/dist/collection/components/wm-search/wm-search.js +480 -480
  52. package/dist/collection/components/wm-select/wm-select.js +720 -720
  53. package/dist/collection/components/wm-snackbar/wm-snackbar.js +297 -297
  54. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +216 -216
  55. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +330 -330
  56. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +104 -104
  57. package/dist/collection/components/wm-tag-input/wm-tag-input.js +810 -801
  58. package/dist/collection/components/wm-timepicker/wm-timepicker.js +583 -580
  59. package/dist/collection/components/wm-toggletip/wm-toggletip.js +241 -241
  60. package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js +753 -753
  61. package/dist/collection/components/wm-uploader/wm-uploader.js +748 -748
  62. package/dist/collection/components/wm-wrapper/wm-wrapper.js +27 -27
  63. package/dist/collection/dev/scripts.js +20 -20
  64. package/dist/collection/global/__mocks__/functions.js +6 -6
  65. package/dist/collection/global/functions.js +445 -445
  66. package/dist/collection/global/global.js +72 -72
  67. package/dist/collection/global/interfaces.js +49 -49
  68. package/dist/collection/global/services/__mocks__/http-service.js +130 -130
  69. package/dist/collection/global/services/http-service.js +50 -50
  70. package/dist/collection/lang/lang.js +5 -5
  71. package/dist/collection/lang/missing.js +39 -39
  72. package/dist/collection/lang/piglatin.js +93 -93
  73. package/dist/esm/{functions-6ddad20e.js → functions-cbfc81d1.js} +442 -442
  74. package/dist/esm/{global-a4da88c7.js → global-6f2aeeeb.js} +65 -65
  75. package/dist/esm/{http-service-5d037e16.js → http-service-3dc3b3e7.js} +49 -49
  76. package/dist/esm/{interfaces-61c6305b.js → interfaces-2b97fab2.js} +29 -29
  77. package/dist/esm/loader.js +2 -2
  78. package/dist/esm/polyfills/core-js.js +0 -0
  79. package/dist/esm/polyfills/dom.js +0 -0
  80. package/dist/esm/polyfills/es5-html-element.js +0 -0
  81. package/dist/esm/polyfills/index.js +0 -0
  82. package/dist/esm/polyfills/system.js +0 -0
  83. package/dist/esm/priv-chart-popover.entry.js +79 -79
  84. package/dist/esm/priv-datepicker.entry.js +673 -668
  85. package/dist/esm/priv-navigator-button.entry.js +19 -19
  86. package/dist/esm/priv-navigator-item.entry.js +23 -23
  87. package/dist/esm/ripple.js +2 -2
  88. package/dist/esm/wm-action-menu_2.entry.js +342 -342
  89. package/dist/esm/wm-button.entry.js +237 -237
  90. package/dist/esm/wm-chart-slice.entry.js +13 -13
  91. package/dist/esm/wm-chart.entry.js +475 -475
  92. package/dist/esm/wm-datepicker.entry.js +272 -263
  93. package/dist/esm/wm-input.entry.js +135 -135
  94. package/dist/esm/wm-modal-footer.entry.js +32 -32
  95. package/dist/esm/wm-modal-header.entry.js +34 -34
  96. package/dist/esm/wm-modal.entry.js +162 -162
  97. package/dist/esm/wm-navigator.entry.js +269 -269
  98. package/dist/esm/wm-network-uploader.entry.js +421 -421
  99. package/dist/esm/wm-option_2.entry.js +496 -496
  100. package/dist/esm/wm-pagination.entry.js +168 -168
  101. package/dist/esm/wm-search.entry.js +233 -233
  102. package/dist/esm/wm-snackbar.entry.js +171 -171
  103. package/dist/esm/wm-tab-item_3.entry.js +298 -298
  104. package/dist/esm/wm-tag-input.entry.js +580 -571
  105. package/dist/esm/wm-timepicker.entry.js +384 -381
  106. package/dist/esm/wm-toggletip.entry.js +125 -125
  107. package/dist/esm/wm-uploader.entry.js +347 -347
  108. package/dist/esm/wm-wrapper.entry.js +12 -12
  109. package/dist/esm-es5/functions-cbfc81d1.js +15 -0
  110. package/dist/esm-es5/global-6f2aeeeb.js +1 -0
  111. package/dist/esm-es5/http-service-3dc3b3e7.js +1 -0
  112. package/dist/esm-es5/index-66f8130e.js +1 -0
  113. package/dist/esm-es5/index.js +0 -0
  114. package/dist/esm-es5/interfaces-2b97fab2.js +1 -0
  115. package/dist/esm-es5/loader.js +1 -0
  116. package/dist/esm-es5/priv-chart-popover.entry.js +1 -0
  117. package/dist/esm-es5/priv-datepicker.entry.js +1 -0
  118. package/dist/esm-es5/priv-navigator-button.entry.js +1 -0
  119. package/dist/esm-es5/priv-navigator-item.entry.js +1 -0
  120. package/dist/esm-es5/ripple.js +1 -0
  121. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -0
  122. package/dist/esm-es5/wm-button.entry.js +1 -0
  123. package/dist/esm-es5/wm-chart-slice.entry.js +1 -0
  124. package/dist/esm-es5/wm-chart.entry.js +1 -0
  125. package/dist/esm-es5/wm-datepicker.entry.js +1 -0
  126. package/dist/esm-es5/wm-input.entry.js +1 -0
  127. package/dist/esm-es5/wm-modal-footer.entry.js +1 -0
  128. package/dist/esm-es5/wm-modal-header.entry.js +1 -0
  129. package/dist/esm-es5/wm-modal.entry.js +1 -0
  130. package/dist/esm-es5/wm-navigator.entry.js +1 -0
  131. package/dist/esm-es5/wm-network-uploader.entry.js +1 -0
  132. package/dist/esm-es5/wm-option_2.entry.js +1 -0
  133. package/dist/esm-es5/wm-pagination.entry.js +1 -0
  134. package/dist/esm-es5/wm-search.entry.js +1 -0
  135. package/dist/esm-es5/wm-snackbar.entry.js +1 -0
  136. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -0
  137. package/dist/esm-es5/wm-tag-input.entry.js +1 -0
  138. package/dist/esm-es5/wm-timepicker.entry.js +1 -0
  139. package/dist/esm-es5/wm-toggletip.entry.js +1 -0
  140. package/dist/esm-es5/wm-uploader.entry.js +1 -0
  141. package/dist/esm-es5/wm-wrapper.entry.js +1 -0
  142. package/dist/index.js +1 -1
  143. package/dist/loader/index.js +1 -1
  144. package/dist/ripple/p-0418abd7.system.js +15 -0
  145. package/dist/ripple/p-065e2ca1.entry.js +1 -0
  146. package/dist/ripple/p-06627dcf.entry.js +1 -0
  147. package/dist/ripple/p-08b2262e.system.entry.js +1 -0
  148. package/dist/ripple/p-09432004.system.entry.js +1 -0
  149. package/dist/ripple/{p-bc9ca97b.entry.js → p-0d8bd4ee.entry.js} +1 -1
  150. package/dist/ripple/{p-cfdf1a79.entry.js → p-111f705a.entry.js} +1 -1
  151. package/dist/ripple/p-1d899a2d.system.entry.js +1 -0
  152. package/dist/ripple/p-252e91de.entry.js +1 -0
  153. package/dist/ripple/p-261ea633.system.entry.js +1 -0
  154. package/dist/ripple/p-2cdfb4cc.entry.js +1 -0
  155. package/dist/ripple/p-2d49a016.system.entry.js +1 -0
  156. package/dist/ripple/{p-e43b4eda.entry.js → p-2f91e2a6.entry.js} +1 -1
  157. package/dist/ripple/p-366a3db1.system.entry.js +1 -0
  158. package/dist/ripple/p-3e1dd662.entry.js +1 -0
  159. package/dist/ripple/p-3fb41fe3.system.entry.js +1 -0
  160. package/dist/ripple/{p-888bec42.js → p-43f1298b.js} +0 -0
  161. package/dist/ripple/p-50ea2036.system.js +1 -0
  162. package/dist/ripple/{p-d22c957d.entry.js → p-51d2b9a0.entry.js} +1 -1
  163. package/dist/ripple/p-5a528af7.entry.js +1 -0
  164. package/dist/ripple/{p-66513af1.entry.js → p-5ad7afc0.entry.js} +1 -1
  165. package/dist/ripple/p-5bd3aa5a.system.entry.js +1 -0
  166. package/dist/ripple/p-656f8dad.system.js +1 -0
  167. package/dist/ripple/p-67fcdd5d.entry.js +1 -0
  168. package/dist/ripple/p-6b4374e3.system.entry.js +1 -0
  169. package/dist/ripple/p-6bc37009.system.entry.js +1 -0
  170. package/dist/ripple/p-7a9aac92.system.entry.js +1 -0
  171. package/dist/ripple/p-7bc744bf.system.entry.js +1 -0
  172. package/dist/ripple/p-85d12cf2.system.entry.js +1 -0
  173. package/dist/ripple/{p-08b273ba.entry.js → p-8afdc986.entry.js} +1 -1
  174. package/dist/ripple/p-8d97d1d5.system.entry.js +1 -0
  175. package/dist/ripple/p-8f05bc58.system.entry.js +1 -0
  176. package/dist/ripple/p-90aebfd6.system.entry.js +1 -0
  177. package/dist/ripple/p-9276c5e4.entry.js +1 -0
  178. package/dist/ripple/p-92b6bc97.system.entry.js +1 -0
  179. package/dist/ripple/p-99548d58.system.js +1 -0
  180. package/dist/ripple/p-9d02957d.system.js +1 -0
  181. package/dist/ripple/p-ae4e95ce.system.entry.js +1 -0
  182. package/dist/ripple/p-b3ce2033.system.entry.js +1 -0
  183. package/dist/ripple/p-b4e9a8e3.entry.js +1 -0
  184. package/dist/ripple/{p-857a0bc0.js → p-b5edcf38.js} +0 -0
  185. package/dist/ripple/p-b626f3b9.system.entry.js +1 -0
  186. package/dist/ripple/p-b840acea.system.entry.js +1 -0
  187. package/dist/ripple/p-ba30bf08.js +1 -0
  188. package/dist/ripple/p-c10dee71.system.js +1 -0
  189. package/dist/ripple/p-c3a9a5da.system.entry.js +1 -0
  190. package/dist/ripple/p-c730ce74.entry.js +1 -0
  191. package/dist/ripple/p-d0643c9b.entry.js +1 -0
  192. package/dist/ripple/p-da78496a.entry.js +1 -0
  193. package/dist/ripple/{p-b8aa478f.entry.js → p-dc196bc2.entry.js} +1 -1
  194. package/dist/ripple/p-deae1a7a.entry.js +1 -0
  195. package/dist/ripple/p-e06b8ab3.system.entry.js +1 -0
  196. package/dist/ripple/{p-b495e06c.entry.js → p-e3bab713.entry.js} +1 -1
  197. package/dist/ripple/p-e8acac87.system.entry.js +1 -0
  198. package/dist/ripple/p-eed76888.system.entry.js +1 -0
  199. package/dist/ripple/p-f5df5903.system.js +1 -0
  200. package/dist/ripple/{p-a6d6eae7.js → p-fd8070fb.js} +0 -0
  201. package/dist/ripple/p-ff5ec153.entry.js +1 -0
  202. package/dist/ripple/ripple.esm.js +1 -1
  203. package/dist/ripple/ripple.js +130 -0
  204. package/dist/types/components/wm-action-menu/wm-action-menu.d.ts +48 -48
  205. package/dist/types/components/wm-button/wm-button.d.ts +44 -44
  206. package/dist/types/components/wm-chart/priv-chart-popover/priv-chart-popover.d.ts +23 -23
  207. package/dist/types/components/wm-chart/wm-chart-slice.d.ts +8 -8
  208. package/dist/types/components/wm-chart/wm-chart.d.ts +82 -82
  209. package/dist/types/components/wm-datepicker/priv-datepicker/priv-datepicker.d.ts +80 -76
  210. package/dist/types/components/wm-datepicker/wm-datepicker.d.ts +42 -41
  211. package/dist/types/components/wm-input/wm-input.d.ts +46 -46
  212. package/dist/types/components/wm-menuitem/wm-menuitem.d.ts +34 -34
  213. package/dist/types/components/wm-modal/wm-modal-footer.d.ts +15 -15
  214. package/dist/types/components/wm-modal/wm-modal-header.d.ts +12 -12
  215. package/dist/types/components/wm-modal/wm-modal.d.ts +41 -41
  216. package/dist/types/components/wm-navigator/priv-navigator-button/priv-navigator-button.d.ts +10 -10
  217. package/dist/types/components/wm-navigator/priv-navigator-item/priv-navigator-item.d.ts +13 -13
  218. package/dist/types/components/wm-navigator/wm-navigator.d.ts +61 -61
  219. package/dist/types/components/wm-option/wm-option.d.ts +32 -32
  220. package/dist/types/components/wm-pagination/wm-pagination.d.ts +32 -32
  221. package/dist/types/components/wm-search/wm-search.d.ts +86 -86
  222. package/dist/types/components/wm-select/wm-select.d.ts +66 -66
  223. package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +35 -35
  224. package/dist/types/components/wm-tabs/wm-tab-item/wm-tab-item.d.ts +38 -38
  225. package/dist/types/components/wm-tabs/wm-tab-list/wm-tab-list.d.ts +53 -53
  226. package/dist/types/components/wm-tabs/wm-tab-panel/wm-tab-panel.d.ts +20 -20
  227. package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +92 -92
  228. package/dist/types/components/wm-timepicker/wm-timepicker.d.ts +61 -61
  229. package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +27 -27
  230. package/dist/types/components/wm-uploader/wm-network-uploader/wm-network-uploader.d.ts +85 -85
  231. package/dist/types/components/wm-uploader/wm-uploader.d.ts +80 -80
  232. package/dist/types/components/wm-wrapper/wm-wrapper.d.ts +7 -7
  233. package/dist/types/components.d.ts +25 -24
  234. package/dist/types/global/__mocks__/functions.d.ts +6 -6
  235. package/dist/types/global/functions.d.ts +40 -40
  236. package/dist/types/global/global.d.ts +1 -1
  237. package/dist/types/global/interfaces.d.ts +34 -34
  238. package/dist/types/global/services/__mocks__/http-service.d.ts +6 -6
  239. package/dist/types/global/services/http-service.d.ts +4 -4
  240. package/dist/types/lang/lang.d.ts +5 -5
  241. package/package.json +47 -47
  242. package/dist/ripple/p-0068e871.entry.js +0 -1
  243. package/dist/ripple/p-00999aeb.entry.js +0 -1
  244. package/dist/ripple/p-11c09317.entry.js +0 -1
  245. package/dist/ripple/p-196b4c55.entry.js +0 -1
  246. package/dist/ripple/p-1a3df227.entry.js +0 -1
  247. package/dist/ripple/p-3590a57f.entry.js +0 -1
  248. package/dist/ripple/p-3a178ac8.entry.js +0 -1
  249. package/dist/ripple/p-46371fad.entry.js +0 -1
  250. package/dist/ripple/p-5548fc7c.js +0 -1
  251. package/dist/ripple/p-5c73fd59.entry.js +0 -1
  252. package/dist/ripple/p-828316d6.entry.js +0 -1
  253. package/dist/ripple/p-9624967f.entry.js +0 -1
  254. package/dist/ripple/p-99e2c5f6.entry.js +0 -1
  255. package/dist/ripple/p-bf985c5d.entry.js +0 -1
  256. package/dist/ripple/p-cd6de442.entry.js +0 -1
@@ -1,423 +1,423 @@
1
- import { h, Component, Element, Event, Host, Prop, State, Watch } from "@stencil/core";
2
- import { intl, generateId, isRelatedTarget } from "../../global/functions";
3
- export class Input {
4
- constructor() {
5
- this.labelPosition = "top";
6
- this.value = "";
7
- this.disabled = false;
8
- this.placeholder = "";
9
- this.requiredField = false;
10
- this.type = "text";
11
- this.step = 1;
12
- this.announcement = "";
13
- this.displayedErrorMessage = "";
14
- this.uid = "";
15
- this.previousBlurredValue = "";
16
- this.requiredErrorMessage = intl.formatMessage({
17
- id: "global.requiredError",
18
- defaultMessage: "This field is required.",
19
- });
20
- this.numberErrorMessage = intl.formatMessage({
21
- id: "input.numberError",
22
- defaultMessage: "Please enter a valid number.",
23
- });
24
- }
25
- get charCount() {
26
- return this.value.length;
27
- }
28
- componentWillLoad() {
29
- this.uid = this.el.id ? this.el.id : generateId();
30
- this.el.focus = function () {
31
- if (!this.disabled) {
32
- this.shadowRoot.querySelector("input").focus();
33
- }
34
- };
35
- if (!this.label) {
36
- console.error("wm-input requires the label property");
37
- }
38
- }
39
- componentDidLoad() {
40
- if (this.value) {
41
- this.inputEl.value = this.value;
42
- this.previousBlurredValue = this.inputEl.value;
43
- }
44
- }
45
- handleErrorMessage(newValue) {
46
- this.displayedErrorMessage = newValue;
47
- }
48
- handleKeyDown(ev) {
49
- // in most browsers, onInput doesn't fire if the input's maxLength is reached
50
- // to handle the case where a user continues to type after reaching the character limit, the keyDown event must be used
51
- const isModifierKey = ev.ctrlKey || ev.metaKey || ev.altKey;
52
- const isCharacter = /^.$/.test(ev.key) && !isModifierKey;
53
- const hasReachedCharacterLimit = isCharacter && this.characterLimit && this.inputEl.value.length >= this.characterLimit;
54
- if (hasReachedCharacterLimit) {
55
- this.announce(this.generateCharacterLimitWarning(this.charCount, this.characterLimit));
56
- }
57
- }
58
- handleBlur(ev) {
59
- if (this.value !== this.previousBlurredValue) {
60
- this.wmInputValueChanged.emit({ value: this.value });
61
- }
62
- this.previousBlurredValue = this.value;
63
- // do not validate if clicking to an element that should prevent validation (e.g. close button on modal)
64
- const shouldPreventValidation = this.preventValidation && isRelatedTarget(ev, this.preventValidation);
65
- if (!shouldPreventValidation) {
66
- this.displayedErrorMessage = this.validate();
67
- }
68
- this.inputWrapperEl.classList.remove("focus");
69
- }
70
- handleInput(ev) {
71
- this.value = ev.target.value;
72
- if (this.characterLimit && this.charCount >= this.characterLimit - 5) {
73
- this.announce(this.generateCharacterLimitWarning(this.charCount, this.characterLimit));
74
- }
75
- }
76
- handleFocus() {
77
- this.inputWrapperEl.classList.add("focus");
78
- }
79
- validate() {
80
- // These rules are in priority order
81
- // i.e. an input that is triggering both required and number errors will only show the number one but it's first
82
- const validationRules = [this.validateNumber.bind(this), this.validateRequired.bind(this)];
83
- if (this.errorMessage) {
84
- return this.errorMessage;
85
- }
86
- else {
87
- // sets newError to first rule that returns an error
88
- return validationRules.reduce((prev, current) => (prev ? prev : current()), "");
89
- }
90
- }
91
- validateRequired() {
92
- return this.requiredField && this.value === "" ? this.requiredErrorMessage : "";
93
- }
94
- validateNumber() {
95
- return this.type === "number" && this.inputEl.validity.badInput ? this.numberErrorMessage : "";
96
- }
97
- announce(message) {
98
- if (this.liveRegionEl.textContent === message) {
99
- message += "\u00A0";
100
- }
101
- this.announcement = message;
102
- }
103
- generateCharacterLimitWarning(charCount, charLimit) {
104
- const charactersEnteredMessage = intl.formatMessage({
105
- id: "global.charactersEntered",
106
- defaultMessage: "{x, number} of {y, number} characters entered.",
107
- description: "for screen readers",
108
- }, { x: charCount, y: charLimit });
109
- const characterLimitReachedMessage = intl.formatMessage({
110
- id: "global.characterLimitReached",
111
- defaultMessage: "No additional characters will be entered.",
112
- description: "for screen readers",
113
- });
114
- return `${charactersEnteredMessage}${charCount >= charLimit ? " " + characterLimitReachedMessage : ""}`;
115
- }
116
- generateCharacterLimitLabel(characterLimit) {
117
- return intl.formatMessage({
118
- id: "global.characterLimit",
119
- defaultMessage: "{limit, number} characters allowed.",
120
- description: "for screen readers",
121
- }, { limit: characterLimit });
122
- }
123
- renderErrorMessage() {
124
- return this.errorMessage || this.displayedErrorMessage;
125
- }
126
- render() {
127
- return (h(Host, { id: this.uid },
128
- h("div", { class: `wrapper label-${this.labelPosition} ${this.errorMessage || this.displayedErrorMessage ? "invalid" : ""}`, ref: (el) => (this.inputWrapperEl = el) },
129
- h("div", { class: "label-wrapper" }, this.labelPosition !== "none" && (h("label", { htmlFor: `inputfield-${this.uid}`, class: "label" },
130
- this.label,
131
- this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*"))))),
132
- h("div", { class: "inner-wrapper" },
133
- h("div", { class: "inputfield-wrapper" },
134
- h("input", { ref: (el) => (this.inputEl = el), id: `inputfield-${this.uid}`, disabled: this.disabled, "aria-label": `${this.label}${this.characterLimit ? " " + this.generateCharacterLimitLabel(this.characterLimit) : ""}`, "aria-describedby": `info-${this.uid} error-${this.uid}`, onInput: (ev) => this.handleInput(ev), onKeyDown: (ev) => this.handleKeyDown(ev), onBlur: (ev) => this.handleBlur(ev), onFocus: this.handleFocus.bind(this), placeholder: this.placeholder, autocomplete: "off", required: this.requiredField, maxLength: this.characterLimit || undefined, type: this.type, step: this.step, max: this.max, min: this.min }),
135
- this.characterLimit && typeof this.characterLimit === "number" ? (h("div", { class: "character-count" },
136
- this.charCount,
137
- "/",
138
- this.characterLimit)) : ("")),
139
- this.info && (h("div", { id: `info-${this.uid}`, class: "info" }, this.info)),
140
- h("div", { id: `error-${this.uid}`, "aria-live": "assertive", class: "error-message", "aria-atomic": "true" }, this.renderErrorMessage()),
141
- h("div", { class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }, this.announcement)))));
142
- }
143
- static get is() { return "wm-input"; }
144
- static get encapsulation() { return "shadow"; }
145
- static get originalStyleUrls() { return {
146
- "$": ["wm-input.scss"]
147
- }; }
148
- static get styleUrls() { return {
149
- "$": ["wm-input.css"]
150
- }; }
151
- static get properties() { return {
152
- "label": {
153
- "type": "string",
154
- "mutable": false,
155
- "complexType": {
156
- "original": "string",
157
- "resolved": "string",
158
- "references": {}
159
- },
160
- "required": true,
161
- "optional": false,
162
- "docs": {
163
- "tags": [],
164
- "text": ""
165
- },
166
- "attribute": "label",
167
- "reflect": false
168
- },
169
- "labelPosition": {
170
- "type": "string",
171
- "mutable": false,
172
- "complexType": {
173
- "original": "\"top\" | \"left\" | \"none\"",
174
- "resolved": "\"left\" | \"none\" | \"top\"",
175
- "references": {}
176
- },
177
- "required": false,
178
- "optional": false,
179
- "docs": {
180
- "tags": [],
181
- "text": ""
182
- },
183
- "attribute": "label-position",
184
- "reflect": false,
185
- "defaultValue": "\"top\""
186
- },
187
- "value": {
188
- "type": "string",
189
- "mutable": true,
190
- "complexType": {
191
- "original": "string",
192
- "resolved": "string",
193
- "references": {}
194
- },
195
- "required": false,
196
- "optional": false,
197
- "docs": {
198
- "tags": [],
199
- "text": ""
200
- },
201
- "attribute": "value",
202
- "reflect": true,
203
- "defaultValue": "\"\""
204
- },
205
- "disabled": {
206
- "type": "boolean",
207
- "mutable": false,
208
- "complexType": {
209
- "original": "boolean",
210
- "resolved": "boolean",
211
- "references": {}
212
- },
213
- "required": false,
214
- "optional": false,
215
- "docs": {
216
- "tags": [],
217
- "text": ""
218
- },
219
- "attribute": "disabled",
220
- "reflect": true,
221
- "defaultValue": "false"
222
- },
223
- "info": {
224
- "type": "string",
225
- "mutable": false,
226
- "complexType": {
227
- "original": "string",
228
- "resolved": "string | undefined",
229
- "references": {}
230
- },
231
- "required": false,
232
- "optional": true,
233
- "docs": {
234
- "tags": [],
235
- "text": ""
236
- },
237
- "attribute": "info",
238
- "reflect": false
239
- },
240
- "placeholder": {
241
- "type": "string",
242
- "mutable": false,
243
- "complexType": {
244
- "original": "string",
245
- "resolved": "string",
246
- "references": {}
247
- },
248
- "required": false,
249
- "optional": false,
250
- "docs": {
251
- "tags": [],
252
- "text": ""
253
- },
254
- "attribute": "placeholder",
255
- "reflect": false,
256
- "defaultValue": "\"\""
257
- },
258
- "requiredField": {
259
- "type": "boolean",
260
- "mutable": false,
261
- "complexType": {
262
- "original": "boolean",
263
- "resolved": "boolean",
264
- "references": {}
265
- },
266
- "required": false,
267
- "optional": false,
268
- "docs": {
269
- "tags": [],
270
- "text": ""
271
- },
272
- "attribute": "required-field",
273
- "reflect": false,
274
- "defaultValue": "false"
275
- },
276
- "errorMessage": {
277
- "type": "string",
278
- "mutable": false,
279
- "complexType": {
280
- "original": "string",
281
- "resolved": "string | undefined",
282
- "references": {}
283
- },
284
- "required": false,
285
- "optional": true,
286
- "docs": {
287
- "tags": [],
288
- "text": ""
289
- },
290
- "attribute": "error-message",
291
- "reflect": false
292
- },
293
- "characterLimit": {
294
- "type": "number",
295
- "mutable": false,
296
- "complexType": {
297
- "original": "number",
298
- "resolved": "number | undefined",
299
- "references": {}
300
- },
301
- "required": false,
302
- "optional": true,
303
- "docs": {
304
- "tags": [],
305
- "text": ""
306
- },
307
- "attribute": "character-limit",
308
- "reflect": false
309
- },
310
- "preventValidation": {
311
- "type": "string",
312
- "mutable": false,
313
- "complexType": {
314
- "original": "string",
315
- "resolved": "string | undefined",
316
- "references": {}
317
- },
318
- "required": false,
319
- "optional": true,
320
- "docs": {
321
- "tags": [],
322
- "text": ""
323
- },
324
- "attribute": "prevent-validation",
325
- "reflect": false
326
- },
327
- "type": {
328
- "type": "string",
329
- "mutable": false,
330
- "complexType": {
331
- "original": "\"number\" | \"text\"",
332
- "resolved": "\"number\" | \"text\"",
333
- "references": {}
334
- },
335
- "required": false,
336
- "optional": false,
337
- "docs": {
338
- "tags": [],
339
- "text": ""
340
- },
341
- "attribute": "type",
342
- "reflect": false,
343
- "defaultValue": "\"text\""
344
- },
345
- "step": {
346
- "type": "number",
347
- "mutable": false,
348
- "complexType": {
349
- "original": "number",
350
- "resolved": "number | undefined",
351
- "references": {}
352
- },
353
- "required": false,
354
- "optional": true,
355
- "docs": {
356
- "tags": [],
357
- "text": ""
358
- },
359
- "attribute": "step",
360
- "reflect": false,
361
- "defaultValue": "1"
362
- },
363
- "min": {
364
- "type": "number",
365
- "mutable": false,
366
- "complexType": {
367
- "original": "number",
368
- "resolved": "number | undefined",
369
- "references": {}
370
- },
371
- "required": false,
372
- "optional": true,
373
- "docs": {
374
- "tags": [],
375
- "text": ""
376
- },
377
- "attribute": "min",
378
- "reflect": false
379
- },
380
- "max": {
381
- "type": "number",
382
- "mutable": false,
383
- "complexType": {
384
- "original": "number",
385
- "resolved": "number | undefined",
386
- "references": {}
387
- },
388
- "required": false,
389
- "optional": true,
390
- "docs": {
391
- "tags": [],
392
- "text": ""
393
- },
394
- "attribute": "max",
395
- "reflect": false
396
- }
397
- }; }
398
- static get states() { return {
399
- "announcement": {},
400
- "displayedErrorMessage": {}
401
- }; }
402
- static get events() { return [{
403
- "method": "wmInputValueChanged",
404
- "name": "wmInputValueChanged",
405
- "bubbles": true,
406
- "cancelable": true,
407
- "composed": true,
408
- "docs": {
409
- "tags": [],
410
- "text": ""
411
- },
412
- "complexType": {
413
- "original": "{ value: string }",
414
- "resolved": "{ value: string; }",
415
- "references": {}
416
- }
417
- }]; }
418
- static get elementRef() { return "el"; }
419
- static get watchers() { return [{
420
- "propName": "errorMessage",
421
- "methodName": "handleErrorMessage"
422
- }]; }
423
- }
1
+ import { h, Component, Element, Event, Host, Prop, State, Watch } from "@stencil/core";
2
+ import { intl, generateId, isRelatedTarget } from "../../global/functions";
3
+ export class Input {
4
+ constructor() {
5
+ this.labelPosition = "top";
6
+ this.value = "";
7
+ this.disabled = false;
8
+ this.placeholder = "";
9
+ this.requiredField = false;
10
+ this.type = "text";
11
+ this.step = 1;
12
+ this.announcement = "";
13
+ this.displayedErrorMessage = "";
14
+ this.uid = "";
15
+ this.previousBlurredValue = "";
16
+ this.requiredErrorMessage = intl.formatMessage({
17
+ id: "global.requiredError",
18
+ defaultMessage: "This field is required.",
19
+ });
20
+ this.numberErrorMessage = intl.formatMessage({
21
+ id: "input.numberError",
22
+ defaultMessage: "Please enter a valid number.",
23
+ });
24
+ }
25
+ get charCount() {
26
+ return this.value.length;
27
+ }
28
+ componentWillLoad() {
29
+ this.uid = this.el.id ? this.el.id : generateId();
30
+ this.el.focus = function () {
31
+ if (!this.disabled) {
32
+ this.shadowRoot.querySelector("input").focus();
33
+ }
34
+ };
35
+ if (!this.label) {
36
+ console.error("wm-input requires the label property");
37
+ }
38
+ }
39
+ componentDidLoad() {
40
+ if (this.value) {
41
+ this.inputEl.value = this.value;
42
+ this.previousBlurredValue = this.inputEl.value;
43
+ }
44
+ }
45
+ handleErrorMessage(newValue) {
46
+ this.displayedErrorMessage = newValue;
47
+ }
48
+ handleKeyDown(ev) {
49
+ // in most browsers, onInput doesn't fire if the input's maxLength is reached
50
+ // to handle the case where a user continues to type after reaching the character limit, the keyDown event must be used
51
+ const isModifierKey = ev.ctrlKey || ev.metaKey || ev.altKey;
52
+ const isCharacter = /^.$/.test(ev.key) && !isModifierKey;
53
+ const hasReachedCharacterLimit = isCharacter && this.characterLimit && this.inputEl.value.length >= this.characterLimit;
54
+ if (hasReachedCharacterLimit) {
55
+ this.announce(this.generateCharacterLimitWarning(this.charCount, this.characterLimit));
56
+ }
57
+ }
58
+ handleBlur(ev) {
59
+ if (this.value !== this.previousBlurredValue) {
60
+ this.wmInputValueChanged.emit({ value: this.value });
61
+ }
62
+ this.previousBlurredValue = this.value;
63
+ // do not validate if clicking to an element that should prevent validation (e.g. close button on modal)
64
+ const shouldPreventValidation = this.preventValidation && isRelatedTarget(ev, this.preventValidation);
65
+ if (!shouldPreventValidation) {
66
+ this.displayedErrorMessage = this.validate();
67
+ }
68
+ this.inputWrapperEl.classList.remove("focus");
69
+ }
70
+ handleInput(ev) {
71
+ this.value = ev.target.value;
72
+ if (this.characterLimit && this.charCount >= this.characterLimit - 5) {
73
+ this.announce(this.generateCharacterLimitWarning(this.charCount, this.characterLimit));
74
+ }
75
+ }
76
+ handleFocus() {
77
+ this.inputWrapperEl.classList.add("focus");
78
+ }
79
+ validate() {
80
+ // These rules are in priority order
81
+ // i.e. an input that is triggering both required and number errors will only show the number one but it's first
82
+ const validationRules = [this.validateNumber.bind(this), this.validateRequired.bind(this)];
83
+ if (this.errorMessage) {
84
+ return this.errorMessage;
85
+ }
86
+ else {
87
+ // sets newError to first rule that returns an error
88
+ return validationRules.reduce((prev, current) => (prev ? prev : current()), "");
89
+ }
90
+ }
91
+ validateRequired() {
92
+ return this.requiredField && this.value === "" ? this.requiredErrorMessage : "";
93
+ }
94
+ validateNumber() {
95
+ return this.type === "number" && this.inputEl.validity.badInput ? this.numberErrorMessage : "";
96
+ }
97
+ announce(message) {
98
+ if (this.liveRegionEl.textContent === message) {
99
+ message += "\u00A0";
100
+ }
101
+ this.announcement = message;
102
+ }
103
+ generateCharacterLimitWarning(charCount, charLimit) {
104
+ const charactersEnteredMessage = intl.formatMessage({
105
+ id: "global.charactersEntered",
106
+ defaultMessage: "{x, number} of {y, number} characters entered.",
107
+ description: "for screen readers",
108
+ }, { x: charCount, y: charLimit });
109
+ const characterLimitReachedMessage = intl.formatMessage({
110
+ id: "global.characterLimitReached",
111
+ defaultMessage: "No additional characters will be entered.",
112
+ description: "for screen readers",
113
+ });
114
+ return `${charactersEnteredMessage}${charCount >= charLimit ? " " + characterLimitReachedMessage : ""}`;
115
+ }
116
+ generateCharacterLimitLabel(characterLimit) {
117
+ return intl.formatMessage({
118
+ id: "global.characterLimit",
119
+ defaultMessage: "{limit, number} characters allowed.",
120
+ description: "for screen readers",
121
+ }, { limit: characterLimit });
122
+ }
123
+ renderErrorMessage() {
124
+ return this.errorMessage || this.displayedErrorMessage;
125
+ }
126
+ render() {
127
+ return (h(Host, { id: this.uid },
128
+ h("div", { class: `wrapper label-${this.labelPosition} ${this.errorMessage || this.displayedErrorMessage ? "invalid" : ""}`, ref: (el) => (this.inputWrapperEl = el) },
129
+ h("div", { class: "label-wrapper" }, this.labelPosition !== "none" && (h("label", { htmlFor: `inputfield-${this.uid}`, class: "label" },
130
+ this.label,
131
+ this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*"))))),
132
+ h("div", { class: "inner-wrapper" },
133
+ h("div", { class: "inputfield-wrapper" },
134
+ h("input", { ref: (el) => (this.inputEl = el), id: `inputfield-${this.uid}`, disabled: this.disabled, "aria-label": `${this.label}${this.characterLimit ? " " + this.generateCharacterLimitLabel(this.characterLimit) : ""}`, "aria-describedby": `info-${this.uid} error-${this.uid}`, onInput: (ev) => this.handleInput(ev), onKeyDown: (ev) => this.handleKeyDown(ev), onBlur: (ev) => this.handleBlur(ev), onFocus: this.handleFocus.bind(this), placeholder: this.placeholder, autocomplete: "off", required: this.requiredField, maxLength: this.characterLimit || undefined, type: this.type, step: this.step, max: this.max, min: this.min }),
135
+ this.characterLimit && typeof this.characterLimit === "number" ? (h("div", { class: "character-count" },
136
+ this.charCount,
137
+ "/",
138
+ this.characterLimit)) : ("")),
139
+ this.info && (h("div", { id: `info-${this.uid}`, class: "info" }, this.info)),
140
+ h("div", { id: `error-${this.uid}`, "aria-live": "assertive", class: "error-message", "aria-atomic": "true" }, this.renderErrorMessage()),
141
+ h("div", { class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }, this.announcement)))));
142
+ }
143
+ static get is() { return "wm-input"; }
144
+ static get encapsulation() { return "shadow"; }
145
+ static get originalStyleUrls() { return {
146
+ "$": ["wm-input.scss"]
147
+ }; }
148
+ static get styleUrls() { return {
149
+ "$": ["wm-input.css"]
150
+ }; }
151
+ static get properties() { return {
152
+ "label": {
153
+ "type": "string",
154
+ "mutable": false,
155
+ "complexType": {
156
+ "original": "string",
157
+ "resolved": "string",
158
+ "references": {}
159
+ },
160
+ "required": true,
161
+ "optional": false,
162
+ "docs": {
163
+ "tags": [],
164
+ "text": ""
165
+ },
166
+ "attribute": "label",
167
+ "reflect": false
168
+ },
169
+ "labelPosition": {
170
+ "type": "string",
171
+ "mutable": false,
172
+ "complexType": {
173
+ "original": "\"top\" | \"left\" | \"none\"",
174
+ "resolved": "\"left\" | \"none\" | \"top\"",
175
+ "references": {}
176
+ },
177
+ "required": false,
178
+ "optional": false,
179
+ "docs": {
180
+ "tags": [],
181
+ "text": ""
182
+ },
183
+ "attribute": "label-position",
184
+ "reflect": false,
185
+ "defaultValue": "\"top\""
186
+ },
187
+ "value": {
188
+ "type": "string",
189
+ "mutable": true,
190
+ "complexType": {
191
+ "original": "string",
192
+ "resolved": "string",
193
+ "references": {}
194
+ },
195
+ "required": false,
196
+ "optional": false,
197
+ "docs": {
198
+ "tags": [],
199
+ "text": ""
200
+ },
201
+ "attribute": "value",
202
+ "reflect": true,
203
+ "defaultValue": "\"\""
204
+ },
205
+ "disabled": {
206
+ "type": "boolean",
207
+ "mutable": false,
208
+ "complexType": {
209
+ "original": "boolean",
210
+ "resolved": "boolean",
211
+ "references": {}
212
+ },
213
+ "required": false,
214
+ "optional": false,
215
+ "docs": {
216
+ "tags": [],
217
+ "text": ""
218
+ },
219
+ "attribute": "disabled",
220
+ "reflect": true,
221
+ "defaultValue": "false"
222
+ },
223
+ "info": {
224
+ "type": "string",
225
+ "mutable": false,
226
+ "complexType": {
227
+ "original": "string",
228
+ "resolved": "string | undefined",
229
+ "references": {}
230
+ },
231
+ "required": false,
232
+ "optional": true,
233
+ "docs": {
234
+ "tags": [],
235
+ "text": ""
236
+ },
237
+ "attribute": "info",
238
+ "reflect": false
239
+ },
240
+ "placeholder": {
241
+ "type": "string",
242
+ "mutable": false,
243
+ "complexType": {
244
+ "original": "string",
245
+ "resolved": "string",
246
+ "references": {}
247
+ },
248
+ "required": false,
249
+ "optional": false,
250
+ "docs": {
251
+ "tags": [],
252
+ "text": ""
253
+ },
254
+ "attribute": "placeholder",
255
+ "reflect": false,
256
+ "defaultValue": "\"\""
257
+ },
258
+ "requiredField": {
259
+ "type": "boolean",
260
+ "mutable": false,
261
+ "complexType": {
262
+ "original": "boolean",
263
+ "resolved": "boolean",
264
+ "references": {}
265
+ },
266
+ "required": false,
267
+ "optional": false,
268
+ "docs": {
269
+ "tags": [],
270
+ "text": ""
271
+ },
272
+ "attribute": "required-field",
273
+ "reflect": false,
274
+ "defaultValue": "false"
275
+ },
276
+ "errorMessage": {
277
+ "type": "string",
278
+ "mutable": false,
279
+ "complexType": {
280
+ "original": "string",
281
+ "resolved": "string | undefined",
282
+ "references": {}
283
+ },
284
+ "required": false,
285
+ "optional": true,
286
+ "docs": {
287
+ "tags": [],
288
+ "text": ""
289
+ },
290
+ "attribute": "error-message",
291
+ "reflect": false
292
+ },
293
+ "characterLimit": {
294
+ "type": "number",
295
+ "mutable": false,
296
+ "complexType": {
297
+ "original": "number",
298
+ "resolved": "number | undefined",
299
+ "references": {}
300
+ },
301
+ "required": false,
302
+ "optional": true,
303
+ "docs": {
304
+ "tags": [],
305
+ "text": ""
306
+ },
307
+ "attribute": "character-limit",
308
+ "reflect": false
309
+ },
310
+ "preventValidation": {
311
+ "type": "string",
312
+ "mutable": false,
313
+ "complexType": {
314
+ "original": "string",
315
+ "resolved": "string | undefined",
316
+ "references": {}
317
+ },
318
+ "required": false,
319
+ "optional": true,
320
+ "docs": {
321
+ "tags": [],
322
+ "text": ""
323
+ },
324
+ "attribute": "prevent-validation",
325
+ "reflect": false
326
+ },
327
+ "type": {
328
+ "type": "string",
329
+ "mutable": false,
330
+ "complexType": {
331
+ "original": "\"number\" | \"text\"",
332
+ "resolved": "\"number\" | \"text\"",
333
+ "references": {}
334
+ },
335
+ "required": false,
336
+ "optional": false,
337
+ "docs": {
338
+ "tags": [],
339
+ "text": ""
340
+ },
341
+ "attribute": "type",
342
+ "reflect": false,
343
+ "defaultValue": "\"text\""
344
+ },
345
+ "step": {
346
+ "type": "number",
347
+ "mutable": false,
348
+ "complexType": {
349
+ "original": "number",
350
+ "resolved": "number | undefined",
351
+ "references": {}
352
+ },
353
+ "required": false,
354
+ "optional": true,
355
+ "docs": {
356
+ "tags": [],
357
+ "text": ""
358
+ },
359
+ "attribute": "step",
360
+ "reflect": false,
361
+ "defaultValue": "1"
362
+ },
363
+ "min": {
364
+ "type": "number",
365
+ "mutable": false,
366
+ "complexType": {
367
+ "original": "number",
368
+ "resolved": "number | undefined",
369
+ "references": {}
370
+ },
371
+ "required": false,
372
+ "optional": true,
373
+ "docs": {
374
+ "tags": [],
375
+ "text": ""
376
+ },
377
+ "attribute": "min",
378
+ "reflect": false
379
+ },
380
+ "max": {
381
+ "type": "number",
382
+ "mutable": false,
383
+ "complexType": {
384
+ "original": "number",
385
+ "resolved": "number | undefined",
386
+ "references": {}
387
+ },
388
+ "required": false,
389
+ "optional": true,
390
+ "docs": {
391
+ "tags": [],
392
+ "text": ""
393
+ },
394
+ "attribute": "max",
395
+ "reflect": false
396
+ }
397
+ }; }
398
+ static get states() { return {
399
+ "announcement": {},
400
+ "displayedErrorMessage": {}
401
+ }; }
402
+ static get events() { return [{
403
+ "method": "wmInputValueChanged",
404
+ "name": "wmInputValueChanged",
405
+ "bubbles": true,
406
+ "cancelable": true,
407
+ "composed": true,
408
+ "docs": {
409
+ "tags": [],
410
+ "text": ""
411
+ },
412
+ "complexType": {
413
+ "original": "{ value: string }",
414
+ "resolved": "{ value: string; }",
415
+ "references": {}
416
+ }
417
+ }]; }
418
+ static get elementRef() { return "el"; }
419
+ static get watchers() { return [{
420
+ "propName": "errorMessage",
421
+ "methodName": "handleErrorMessage"
422
+ }]; }
423
+ }