@watermarkinsights/ripple 3.4.0 → 3.5.0-3

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 (203) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/functions-653e695c.js +6164 -0
  3. package/dist/cjs/{global-caec45e5.js → global-ee710089.js} +65 -65
  4. package/dist/cjs/{http-service-9e8c4dd5.js → http-service-494d81de.js} +49 -49
  5. package/dist/cjs/{index-921ef454.js → index-cd179539.js} +157 -103
  6. package/dist/cjs/{interfaces-30a74c1f.js → interfaces-a3338581.js} +29 -29
  7. package/dist/cjs/loader.cjs.js +3 -3
  8. package/dist/cjs/priv-chart-popover.cjs.entry.js +79 -79
  9. package/dist/cjs/priv-datepicker.cjs.entry.js +668 -668
  10. package/dist/cjs/priv-navigator-button.cjs.entry.js +19 -19
  11. package/dist/cjs/priv-navigator-item.cjs.entry.js +24 -24
  12. package/dist/cjs/ripple.cjs.js +5 -5
  13. package/dist/cjs/wm-action-menu_2.cjs.entry.js +342 -342
  14. package/dist/cjs/wm-button.cjs.entry.js +219 -219
  15. package/dist/cjs/wm-chart-slice.cjs.entry.js +14 -14
  16. package/dist/cjs/wm-chart.cjs.entry.js +475 -517
  17. package/dist/cjs/wm-datepicker.cjs.entry.js +257 -257
  18. package/dist/cjs/wm-input.cjs.entry.js +134 -134
  19. package/dist/cjs/wm-modal-footer.cjs.entry.js +32 -32
  20. package/dist/cjs/wm-modal-header.cjs.entry.js +35 -35
  21. package/dist/cjs/wm-modal.cjs.entry.js +162 -162
  22. package/dist/cjs/wm-navigator.cjs.entry.js +269 -269
  23. package/dist/cjs/wm-network-uploader.cjs.entry.js +421 -421
  24. package/dist/cjs/wm-option_2.cjs.entry.js +492 -492
  25. package/dist/cjs/wm-pagination.cjs.entry.js +168 -168
  26. package/dist/cjs/wm-search.cjs.entry.js +232 -232
  27. package/dist/cjs/wm-snackbar.cjs.entry.js +171 -171
  28. package/dist/cjs/wm-tab-item_3.cjs.entry.js +301 -301
  29. package/dist/cjs/wm-tag-input.cjs.entry.js +557 -557
  30. package/dist/cjs/wm-timepicker.cjs.entry.js +384 -384
  31. package/dist/cjs/wm-toggletip.cjs.entry.js +125 -125
  32. package/dist/cjs/wm-uploader.cjs.entry.js +347 -347
  33. package/dist/cjs/wm-wrapper.cjs.entry.js +13 -13
  34. package/dist/collection/collection-manifest.json +2 -2
  35. package/dist/collection/components/wm-action-menu/wm-action-menu.js +460 -460
  36. package/dist/collection/components/wm-button/wm-button.js +485 -485
  37. package/dist/collection/components/wm-chart/priv-chart-popover/priv-chart-popover.js +232 -232
  38. package/dist/collection/components/wm-chart/wm-chart-slice.js +64 -64
  39. package/dist/collection/components/wm-chart/wm-chart.css +71 -84
  40. package/dist/collection/components/wm-chart/wm-chart.js +718 -765
  41. package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js +1015 -1015
  42. package/dist/collection/components/wm-datepicker/wm-datepicker.js +462 -462
  43. package/dist/collection/components/wm-input/wm-input.js +423 -423
  44. package/dist/collection/components/wm-menuitem/wm-menuitem.js +444 -444
  45. package/dist/collection/components/wm-modal/wm-modal-footer.js +141 -141
  46. package/dist/collection/components/wm-modal/wm-modal-header.js +92 -92
  47. package/dist/collection/components/wm-modal/wm-modal.js +459 -459
  48. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +97 -97
  49. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +114 -114
  50. package/dist/collection/components/wm-navigator/wm-navigator.js +468 -468
  51. package/dist/collection/components/wm-option/wm-option.js +422 -422
  52. package/dist/collection/components/wm-pagination/wm-pagination.js +368 -368
  53. package/dist/collection/components/wm-search/wm-search.js +479 -479
  54. package/dist/collection/components/wm-select/wm-select.js +717 -717
  55. package/dist/collection/components/wm-snackbar/wm-snackbar.js +297 -297
  56. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +219 -219
  57. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +331 -331
  58. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +104 -104
  59. package/dist/collection/components/wm-tag-input/wm-tag-input.js +787 -787
  60. package/dist/collection/components/wm-timepicker/wm-timepicker.js +589 -589
  61. package/dist/collection/components/wm-toggletip/wm-toggletip.js +241 -241
  62. package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js +753 -753
  63. package/dist/collection/components/wm-uploader/wm-uploader.js +748 -748
  64. package/dist/collection/components/wm-wrapper/wm-wrapper.js +27 -27
  65. package/dist/collection/dev/scripts.js +20 -20
  66. package/dist/collection/global/__mocks__/functions.js +6 -6
  67. package/dist/collection/global/functions.js +445 -445
  68. package/dist/collection/global/global.js +72 -72
  69. package/dist/collection/global/interfaces.js +49 -49
  70. package/dist/collection/global/services/__mocks__/http-service.js +130 -130
  71. package/dist/collection/global/services/http-service.js +50 -50
  72. package/dist/collection/lang/lang.js +5 -5
  73. package/dist/collection/lang/piglatin.js +93 -93
  74. package/dist/esm/functions-e528c934.js +6144 -0
  75. package/dist/esm/{global-08ca269c.js → global-b94f59e6.js} +65 -65
  76. package/dist/esm/{http-service-5d037e16.js → http-service-3dc3b3e7.js} +49 -49
  77. package/dist/esm/{index-f8b130b6.js → index-66f8130e.js} +157 -103
  78. package/dist/esm/{interfaces-61c6305b.js → interfaces-2b97fab2.js} +29 -29
  79. package/dist/esm/loader.js +3 -3
  80. package/dist/esm/polyfills/core-js.js +0 -0
  81. package/dist/esm/polyfills/dom.js +0 -0
  82. package/dist/esm/polyfills/es5-html-element.js +0 -0
  83. package/dist/esm/polyfills/index.js +2 -2
  84. package/dist/esm/polyfills/system.js +0 -0
  85. package/dist/esm/priv-chart-popover.entry.js +79 -79
  86. package/dist/esm/priv-datepicker.entry.js +668 -668
  87. package/dist/esm/priv-navigator-button.entry.js +19 -19
  88. package/dist/esm/priv-navigator-item.entry.js +24 -24
  89. package/dist/esm/ripple.js +5 -5
  90. package/dist/esm/wm-action-menu_2.entry.js +342 -342
  91. package/dist/esm/wm-button.entry.js +219 -219
  92. package/dist/esm/wm-chart-slice.entry.js +14 -14
  93. package/dist/esm/wm-chart.entry.js +475 -517
  94. package/dist/esm/wm-datepicker.entry.js +257 -257
  95. package/dist/esm/wm-input.entry.js +134 -134
  96. package/dist/esm/wm-modal-footer.entry.js +32 -32
  97. package/dist/esm/wm-modal-header.entry.js +35 -35
  98. package/dist/esm/wm-modal.entry.js +162 -162
  99. package/dist/esm/wm-navigator.entry.js +269 -269
  100. package/dist/esm/wm-network-uploader.entry.js +421 -421
  101. package/dist/esm/wm-option_2.entry.js +492 -492
  102. package/dist/esm/wm-pagination.entry.js +168 -168
  103. package/dist/esm/wm-search.entry.js +232 -232
  104. package/dist/esm/wm-snackbar.entry.js +171 -171
  105. package/dist/esm/wm-tab-item_3.entry.js +301 -301
  106. package/dist/esm/wm-tag-input.entry.js +557 -557
  107. package/dist/esm/wm-timepicker.entry.js +384 -384
  108. package/dist/esm/wm-toggletip.entry.js +125 -125
  109. package/dist/esm/wm-uploader.entry.js +347 -347
  110. package/dist/esm/wm-wrapper.entry.js +13 -13
  111. package/dist/ripple/p-092b01f3.entry.js +1 -0
  112. package/dist/ripple/{p-c995acbc.entry.js → p-0c58f50d.entry.js} +1 -1
  113. package/dist/ripple/p-11c09317.entry.js +1 -0
  114. package/dist/ripple/p-1e0c41a9.entry.js +1 -0
  115. package/dist/ripple/p-3003d26d.entry.js +1 -0
  116. package/dist/ripple/p-33524565.entry.js +1 -0
  117. package/dist/ripple/{p-888bec42.js → p-43f1298b.js} +0 -0
  118. package/dist/ripple/{p-5e49aba7.entry.js → p-4cc71463.entry.js} +1 -1
  119. package/dist/ripple/p-588b4475.js +16 -0
  120. package/dist/ripple/p-65e3a656.entry.js +1 -0
  121. package/dist/ripple/p-7a96bb97.js +1 -0
  122. package/dist/ripple/p-83b8aaaf.entry.js +1 -0
  123. package/dist/ripple/p-8923b7d0.entry.js +1 -0
  124. package/dist/ripple/{p-d52033d5.entry.js → p-8b0eb05e.entry.js} +1 -1
  125. package/dist/ripple/p-8cd1396e.entry.js +1 -0
  126. package/dist/ripple/{p-22a1a636.entry.js → p-99db8501.entry.js} +1 -1
  127. package/dist/ripple/p-9baa3039.js +1 -0
  128. package/dist/ripple/p-aa973691.entry.js +1 -0
  129. package/dist/ripple/{p-a61977b2.entry.js → p-b3d5ea85.entry.js} +1 -1
  130. package/dist/ripple/{p-7d009793.entry.js → p-b5189f72.entry.js} +1 -1
  131. package/dist/ripple/p-bc27b604.entry.js +1 -0
  132. package/dist/ripple/p-bc9ca97b.entry.js +1 -0
  133. package/dist/ripple/{p-bba99fcd.entry.js → p-cd58a15c.entry.js} +1 -1
  134. package/dist/ripple/p-dc9c9fda.entry.js +1 -0
  135. package/dist/ripple/p-e7616311.entry.js +1 -0
  136. package/dist/ripple/p-e9e8334e.entry.js +1 -0
  137. package/dist/ripple/p-ec9697db.entry.js +1 -0
  138. package/dist/ripple/p-efdaf3b6.entry.js +1 -0
  139. package/dist/ripple/p-fcdc6395.entry.js +1 -0
  140. package/dist/ripple/{p-a6d6eae7.js → p-fd8070fb.js} +0 -0
  141. package/dist/ripple/ripple.esm.js +1 -1
  142. package/dist/types/components/wm-action-menu/wm-action-menu.d.ts +48 -48
  143. package/dist/types/components/wm-button/wm-button.d.ts +44 -44
  144. package/dist/types/components/wm-chart/priv-chart-popover/priv-chart-popover.d.ts +23 -23
  145. package/dist/types/components/wm-chart/wm-chart-slice.d.ts +8 -8
  146. package/dist/types/components/wm-chart/wm-chart.d.ts +81 -80
  147. package/dist/types/components/wm-datepicker/priv-datepicker/priv-datepicker.d.ts +76 -76
  148. package/dist/types/components/wm-datepicker/wm-datepicker.d.ts +41 -41
  149. package/dist/types/components/wm-input/wm-input.d.ts +46 -46
  150. package/dist/types/components/wm-menuitem/wm-menuitem.d.ts +34 -34
  151. package/dist/types/components/wm-modal/wm-modal-footer.d.ts +15 -15
  152. package/dist/types/components/wm-modal/wm-modal-header.d.ts +12 -12
  153. package/dist/types/components/wm-modal/wm-modal.d.ts +41 -41
  154. package/dist/types/components/wm-navigator/priv-navigator-button/priv-navigator-button.d.ts +10 -10
  155. package/dist/types/components/wm-navigator/priv-navigator-item/priv-navigator-item.d.ts +13 -13
  156. package/dist/types/components/wm-navigator/wm-navigator.d.ts +61 -61
  157. package/dist/types/components/wm-option/wm-option.d.ts +32 -32
  158. package/dist/types/components/wm-pagination/wm-pagination.d.ts +32 -32
  159. package/dist/types/components/wm-search/wm-search.d.ts +86 -86
  160. package/dist/types/components/wm-select/wm-select.d.ts +66 -66
  161. package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +35 -35
  162. package/dist/types/components/wm-tabs/wm-tab-item/wm-tab-item.d.ts +38 -38
  163. package/dist/types/components/wm-tabs/wm-tab-list/wm-tab-list.d.ts +53 -53
  164. package/dist/types/components/wm-tabs/wm-tab-panel/wm-tab-panel.d.ts +20 -20
  165. package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +91 -91
  166. package/dist/types/components/wm-timepicker/wm-timepicker.d.ts +62 -62
  167. package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +27 -27
  168. package/dist/types/components/wm-uploader/wm-network-uploader/wm-network-uploader.d.ts +85 -85
  169. package/dist/types/components/wm-uploader/wm-uploader.d.ts +80 -80
  170. package/dist/types/components/wm-wrapper/wm-wrapper.d.ts +7 -7
  171. package/dist/types/components.d.ts +24 -24
  172. package/dist/types/global/__mocks__/functions.d.ts +6 -6
  173. package/dist/types/global/functions.d.ts +40 -0
  174. package/dist/types/global/global.d.ts +1 -1
  175. package/dist/types/global/interfaces.d.ts +34 -34
  176. package/dist/types/global/services/__mocks__/http-service.d.ts +6 -6
  177. package/dist/types/global/services/http-service.d.ts +4 -4
  178. package/dist/types/lang/lang.d.ts +5 -5
  179. package/dist/types/stencil-public-runtime.d.ts +194 -186
  180. package/package.json +46 -46
  181. package/dist/cjs/functions-a6491ba8.js +0 -7943
  182. package/dist/esm/functions-5aebd578.js +0 -7923
  183. package/dist/ripple/p-0865e7cf.js +0 -16
  184. package/dist/ripple/p-0f663e59.entry.js +0 -1
  185. package/dist/ripple/p-1b790a7d.entry.js +0 -1
  186. package/dist/ripple/p-3b4c01b8.entry.js +0 -1
  187. package/dist/ripple/p-54c1f704.entry.js +0 -1
  188. package/dist/ripple/p-76c615e9.entry.js +0 -1
  189. package/dist/ripple/p-7d993d52.js +0 -1
  190. package/dist/ripple/p-8198cc9c.entry.js +0 -1
  191. package/dist/ripple/p-839d35bd.entry.js +0 -1
  192. package/dist/ripple/p-8708b8cb.entry.js +0 -1
  193. package/dist/ripple/p-8bd66955.entry.js +0 -1
  194. package/dist/ripple/p-957e3a05.entry.js +0 -1
  195. package/dist/ripple/p-af6eb4d5.entry.js +0 -1
  196. package/dist/ripple/p-b3f9f575.entry.js +0 -1
  197. package/dist/ripple/p-cd30198d.entry.js +0 -1
  198. package/dist/ripple/p-d9d6bf11.js +0 -1
  199. package/dist/ripple/p-e097c562.entry.js +0 -1
  200. package/dist/ripple/p-e9db6122.entry.js +0 -1
  201. package/dist/ripple/p-eabbd1e9.entry.js +0 -1
  202. package/dist/ripple/p-ec496b8b.entry.js +0 -1
  203. package/dist/ripple/p-fc8ec142.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.previousBlurredValue = "";
14
- this.displayedErrorMessage = "";
15
- this.uid = "";
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() {
46
- this.displayedErrorMessage = this.validate();
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: "input.charactersEntered",
106
- defaultMessage: "{x, number} of {y, number} characters entered.",
107
- }, { x: charCount, y: charLimit });
108
- const characterLimitReachedMessage = intl.formatMessage({
109
- id: "input.characterLimitReached",
110
- defaultMessage: "No additional characters will be entered.",
111
- });
112
- return `${charactersEnteredMessage}${charCount >= charLimit ? " " + characterLimitReachedMessage : ""}`;
113
- }
114
- generateCharacterLimitLabel(characterLimit) {
115
- return intl.formatMessage({
116
- id: "input.characterLimit",
117
- defaultMessage: "{limit, number} characters allowed.",
118
- }, {
119
- limit: characterLimit,
120
- });
121
- }
122
- renderErrorMessage() {
123
- return this.errorMessage || this.displayedErrorMessage;
124
- }
125
- render() {
126
- return (h(Host, { id: this.uid },
127
- h("div", { class: `wrapper label-${this.labelPosition} ${this.errorMessage || this.displayedErrorMessage ? "invalid" : ""}`, ref: (el) => (this.inputWrapperEl = el) },
128
- h("div", { class: "label-wrapper" }, this.labelPosition !== "none" && (h("label", { htmlFor: `inputfield-${this.uid}`, class: "label" },
129
- this.label,
130
- this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*"))))),
131
- h("div", { class: "inner-wrapper" },
132
- h("div", { class: "inputfield-wrapper" },
133
- 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 }),
134
- this.characterLimit && typeof this.characterLimit === "number" ? (h("div", { class: "character-count" },
135
- this.charCount,
136
- "/",
137
- this.characterLimit)) : ("")),
138
- this.info && (h("div", { id: `info-${this.uid}`, class: "info" }, this.info)),
139
- h("div", { id: `error-${this.uid}`, "aria-live": "assertive", class: "error-message", "aria-atomic": "true" }, this.renderErrorMessage()),
140
- h("div", { class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }, this.announcement)))));
141
- }
142
- static get is() { return "wm-input"; }
143
- static get encapsulation() { return "shadow"; }
144
- static get originalStyleUrls() { return {
145
- "$": ["wm-input.scss"]
146
- }; }
147
- static get styleUrls() { return {
148
- "$": ["wm-input.css"]
149
- }; }
150
- static get properties() { return {
151
- "label": {
152
- "type": "string",
153
- "mutable": false,
154
- "complexType": {
155
- "original": "string",
156
- "resolved": "string",
157
- "references": {}
158
- },
159
- "required": true,
160
- "optional": false,
161
- "docs": {
162
- "tags": [],
163
- "text": ""
164
- },
165
- "attribute": "label",
166
- "reflect": false
167
- },
168
- "labelPosition": {
169
- "type": "string",
170
- "mutable": false,
171
- "complexType": {
172
- "original": "\"top\" | \"left\" | \"none\"",
173
- "resolved": "\"left\" | \"none\" | \"top\"",
174
- "references": {}
175
- },
176
- "required": false,
177
- "optional": false,
178
- "docs": {
179
- "tags": [],
180
- "text": ""
181
- },
182
- "attribute": "label-position",
183
- "reflect": false,
184
- "defaultValue": "\"top\""
185
- },
186
- "value": {
187
- "type": "string",
188
- "mutable": true,
189
- "complexType": {
190
- "original": "string",
191
- "resolved": "string",
192
- "references": {}
193
- },
194
- "required": false,
195
- "optional": false,
196
- "docs": {
197
- "tags": [],
198
- "text": ""
199
- },
200
- "attribute": "value",
201
- "reflect": true,
202
- "defaultValue": "\"\""
203
- },
204
- "disabled": {
205
- "type": "boolean",
206
- "mutable": false,
207
- "complexType": {
208
- "original": "boolean",
209
- "resolved": "boolean",
210
- "references": {}
211
- },
212
- "required": false,
213
- "optional": false,
214
- "docs": {
215
- "tags": [],
216
- "text": ""
217
- },
218
- "attribute": "disabled",
219
- "reflect": true,
220
- "defaultValue": "false"
221
- },
222
- "info": {
223
- "type": "string",
224
- "mutable": false,
225
- "complexType": {
226
- "original": "string",
227
- "resolved": "string | undefined",
228
- "references": {}
229
- },
230
- "required": false,
231
- "optional": true,
232
- "docs": {
233
- "tags": [],
234
- "text": ""
235
- },
236
- "attribute": "info",
237
- "reflect": false
238
- },
239
- "placeholder": {
240
- "type": "string",
241
- "mutable": false,
242
- "complexType": {
243
- "original": "string",
244
- "resolved": "string",
245
- "references": {}
246
- },
247
- "required": false,
248
- "optional": false,
249
- "docs": {
250
- "tags": [],
251
- "text": ""
252
- },
253
- "attribute": "placeholder",
254
- "reflect": false,
255
- "defaultValue": "\"\""
256
- },
257
- "requiredField": {
258
- "type": "boolean",
259
- "mutable": false,
260
- "complexType": {
261
- "original": "boolean",
262
- "resolved": "boolean",
263
- "references": {}
264
- },
265
- "required": false,
266
- "optional": false,
267
- "docs": {
268
- "tags": [],
269
- "text": ""
270
- },
271
- "attribute": "required-field",
272
- "reflect": false,
273
- "defaultValue": "false"
274
- },
275
- "errorMessage": {
276
- "type": "string",
277
- "mutable": false,
278
- "complexType": {
279
- "original": "string",
280
- "resolved": "string | undefined",
281
- "references": {}
282
- },
283
- "required": false,
284
- "optional": true,
285
- "docs": {
286
- "tags": [],
287
- "text": ""
288
- },
289
- "attribute": "error-message",
290
- "reflect": false
291
- },
292
- "characterLimit": {
293
- "type": "number",
294
- "mutable": false,
295
- "complexType": {
296
- "original": "number",
297
- "resolved": "number | undefined",
298
- "references": {}
299
- },
300
- "required": false,
301
- "optional": true,
302
- "docs": {
303
- "tags": [],
304
- "text": ""
305
- },
306
- "attribute": "character-limit",
307
- "reflect": false
308
- },
309
- "preventValidation": {
310
- "type": "string",
311
- "mutable": false,
312
- "complexType": {
313
- "original": "string",
314
- "resolved": "string | undefined",
315
- "references": {}
316
- },
317
- "required": false,
318
- "optional": true,
319
- "docs": {
320
- "tags": [],
321
- "text": ""
322
- },
323
- "attribute": "prevent-validation",
324
- "reflect": false
325
- },
326
- "type": {
327
- "type": "string",
328
- "mutable": false,
329
- "complexType": {
330
- "original": "\"number\" | \"text\"",
331
- "resolved": "\"number\" | \"text\"",
332
- "references": {}
333
- },
334
- "required": false,
335
- "optional": false,
336
- "docs": {
337
- "tags": [],
338
- "text": ""
339
- },
340
- "attribute": "type",
341
- "reflect": false,
342
- "defaultValue": "\"text\""
343
- },
344
- "step": {
345
- "type": "number",
346
- "mutable": false,
347
- "complexType": {
348
- "original": "number",
349
- "resolved": "number | undefined",
350
- "references": {}
351
- },
352
- "required": false,
353
- "optional": true,
354
- "docs": {
355
- "tags": [],
356
- "text": ""
357
- },
358
- "attribute": "step",
359
- "reflect": false,
360
- "defaultValue": "1"
361
- },
362
- "min": {
363
- "type": "number",
364
- "mutable": false,
365
- "complexType": {
366
- "original": "number",
367
- "resolved": "number | undefined",
368
- "references": {}
369
- },
370
- "required": false,
371
- "optional": true,
372
- "docs": {
373
- "tags": [],
374
- "text": ""
375
- },
376
- "attribute": "min",
377
- "reflect": false
378
- },
379
- "max": {
380
- "type": "number",
381
- "mutable": false,
382
- "complexType": {
383
- "original": "number",
384
- "resolved": "number | undefined",
385
- "references": {}
386
- },
387
- "required": false,
388
- "optional": true,
389
- "docs": {
390
- "tags": [],
391
- "text": ""
392
- },
393
- "attribute": "max",
394
- "reflect": false
395
- }
396
- }; }
397
- static get states() { return {
398
- "announcement": {},
399
- "previousBlurredValue": {},
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.previousBlurredValue = "";
14
+ this.displayedErrorMessage = "";
15
+ this.uid = "";
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() {
46
+ this.displayedErrorMessage = this.validate();
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: "input.charactersEntered",
106
+ defaultMessage: "{x, number} of {y, number} characters entered.",
107
+ }, { x: charCount, y: charLimit });
108
+ const characterLimitReachedMessage = intl.formatMessage({
109
+ id: "input.characterLimitReached",
110
+ defaultMessage: "No additional characters will be entered.",
111
+ });
112
+ return `${charactersEnteredMessage}${charCount >= charLimit ? " " + characterLimitReachedMessage : ""}`;
113
+ }
114
+ generateCharacterLimitLabel(characterLimit) {
115
+ return intl.formatMessage({
116
+ id: "input.characterLimit",
117
+ defaultMessage: "{limit, number} characters allowed.",
118
+ }, {
119
+ limit: characterLimit,
120
+ });
121
+ }
122
+ renderErrorMessage() {
123
+ return this.errorMessage || this.displayedErrorMessage;
124
+ }
125
+ render() {
126
+ return (h(Host, { id: this.uid },
127
+ h("div", { class: `wrapper label-${this.labelPosition} ${this.errorMessage || this.displayedErrorMessage ? "invalid" : ""}`, ref: (el) => (this.inputWrapperEl = el) },
128
+ h("div", { class: "label-wrapper" }, this.labelPosition !== "none" && (h("label", { htmlFor: `inputfield-${this.uid}`, class: "label" },
129
+ this.label,
130
+ this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*"))))),
131
+ h("div", { class: "inner-wrapper" },
132
+ h("div", { class: "inputfield-wrapper" },
133
+ 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 }),
134
+ this.characterLimit && typeof this.characterLimit === "number" ? (h("div", { class: "character-count" },
135
+ this.charCount,
136
+ "/",
137
+ this.characterLimit)) : ("")),
138
+ this.info && (h("div", { id: `info-${this.uid}`, class: "info" }, this.info)),
139
+ h("div", { id: `error-${this.uid}`, "aria-live": "assertive", class: "error-message", "aria-atomic": "true" }, this.renderErrorMessage()),
140
+ h("div", { class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }, this.announcement)))));
141
+ }
142
+ static get is() { return "wm-input"; }
143
+ static get encapsulation() { return "shadow"; }
144
+ static get originalStyleUrls() { return {
145
+ "$": ["wm-input.scss"]
146
+ }; }
147
+ static get styleUrls() { return {
148
+ "$": ["wm-input.css"]
149
+ }; }
150
+ static get properties() { return {
151
+ "label": {
152
+ "type": "string",
153
+ "mutable": false,
154
+ "complexType": {
155
+ "original": "string",
156
+ "resolved": "string",
157
+ "references": {}
158
+ },
159
+ "required": true,
160
+ "optional": false,
161
+ "docs": {
162
+ "tags": [],
163
+ "text": ""
164
+ },
165
+ "attribute": "label",
166
+ "reflect": false
167
+ },
168
+ "labelPosition": {
169
+ "type": "string",
170
+ "mutable": false,
171
+ "complexType": {
172
+ "original": "\"top\" | \"left\" | \"none\"",
173
+ "resolved": "\"left\" | \"none\" | \"top\"",
174
+ "references": {}
175
+ },
176
+ "required": false,
177
+ "optional": false,
178
+ "docs": {
179
+ "tags": [],
180
+ "text": ""
181
+ },
182
+ "attribute": "label-position",
183
+ "reflect": false,
184
+ "defaultValue": "\"top\""
185
+ },
186
+ "value": {
187
+ "type": "string",
188
+ "mutable": true,
189
+ "complexType": {
190
+ "original": "string",
191
+ "resolved": "string",
192
+ "references": {}
193
+ },
194
+ "required": false,
195
+ "optional": false,
196
+ "docs": {
197
+ "tags": [],
198
+ "text": ""
199
+ },
200
+ "attribute": "value",
201
+ "reflect": true,
202
+ "defaultValue": "\"\""
203
+ },
204
+ "disabled": {
205
+ "type": "boolean",
206
+ "mutable": false,
207
+ "complexType": {
208
+ "original": "boolean",
209
+ "resolved": "boolean",
210
+ "references": {}
211
+ },
212
+ "required": false,
213
+ "optional": false,
214
+ "docs": {
215
+ "tags": [],
216
+ "text": ""
217
+ },
218
+ "attribute": "disabled",
219
+ "reflect": true,
220
+ "defaultValue": "false"
221
+ },
222
+ "info": {
223
+ "type": "string",
224
+ "mutable": false,
225
+ "complexType": {
226
+ "original": "string",
227
+ "resolved": "string | undefined",
228
+ "references": {}
229
+ },
230
+ "required": false,
231
+ "optional": true,
232
+ "docs": {
233
+ "tags": [],
234
+ "text": ""
235
+ },
236
+ "attribute": "info",
237
+ "reflect": false
238
+ },
239
+ "placeholder": {
240
+ "type": "string",
241
+ "mutable": false,
242
+ "complexType": {
243
+ "original": "string",
244
+ "resolved": "string",
245
+ "references": {}
246
+ },
247
+ "required": false,
248
+ "optional": false,
249
+ "docs": {
250
+ "tags": [],
251
+ "text": ""
252
+ },
253
+ "attribute": "placeholder",
254
+ "reflect": false,
255
+ "defaultValue": "\"\""
256
+ },
257
+ "requiredField": {
258
+ "type": "boolean",
259
+ "mutable": false,
260
+ "complexType": {
261
+ "original": "boolean",
262
+ "resolved": "boolean",
263
+ "references": {}
264
+ },
265
+ "required": false,
266
+ "optional": false,
267
+ "docs": {
268
+ "tags": [],
269
+ "text": ""
270
+ },
271
+ "attribute": "required-field",
272
+ "reflect": false,
273
+ "defaultValue": "false"
274
+ },
275
+ "errorMessage": {
276
+ "type": "string",
277
+ "mutable": false,
278
+ "complexType": {
279
+ "original": "string",
280
+ "resolved": "string | undefined",
281
+ "references": {}
282
+ },
283
+ "required": false,
284
+ "optional": true,
285
+ "docs": {
286
+ "tags": [],
287
+ "text": ""
288
+ },
289
+ "attribute": "error-message",
290
+ "reflect": false
291
+ },
292
+ "characterLimit": {
293
+ "type": "number",
294
+ "mutable": false,
295
+ "complexType": {
296
+ "original": "number",
297
+ "resolved": "number | undefined",
298
+ "references": {}
299
+ },
300
+ "required": false,
301
+ "optional": true,
302
+ "docs": {
303
+ "tags": [],
304
+ "text": ""
305
+ },
306
+ "attribute": "character-limit",
307
+ "reflect": false
308
+ },
309
+ "preventValidation": {
310
+ "type": "string",
311
+ "mutable": false,
312
+ "complexType": {
313
+ "original": "string",
314
+ "resolved": "string | undefined",
315
+ "references": {}
316
+ },
317
+ "required": false,
318
+ "optional": true,
319
+ "docs": {
320
+ "tags": [],
321
+ "text": ""
322
+ },
323
+ "attribute": "prevent-validation",
324
+ "reflect": false
325
+ },
326
+ "type": {
327
+ "type": "string",
328
+ "mutable": false,
329
+ "complexType": {
330
+ "original": "\"number\" | \"text\"",
331
+ "resolved": "\"number\" | \"text\"",
332
+ "references": {}
333
+ },
334
+ "required": false,
335
+ "optional": false,
336
+ "docs": {
337
+ "tags": [],
338
+ "text": ""
339
+ },
340
+ "attribute": "type",
341
+ "reflect": false,
342
+ "defaultValue": "\"text\""
343
+ },
344
+ "step": {
345
+ "type": "number",
346
+ "mutable": false,
347
+ "complexType": {
348
+ "original": "number",
349
+ "resolved": "number | undefined",
350
+ "references": {}
351
+ },
352
+ "required": false,
353
+ "optional": true,
354
+ "docs": {
355
+ "tags": [],
356
+ "text": ""
357
+ },
358
+ "attribute": "step",
359
+ "reflect": false,
360
+ "defaultValue": "1"
361
+ },
362
+ "min": {
363
+ "type": "number",
364
+ "mutable": false,
365
+ "complexType": {
366
+ "original": "number",
367
+ "resolved": "number | undefined",
368
+ "references": {}
369
+ },
370
+ "required": false,
371
+ "optional": true,
372
+ "docs": {
373
+ "tags": [],
374
+ "text": ""
375
+ },
376
+ "attribute": "min",
377
+ "reflect": false
378
+ },
379
+ "max": {
380
+ "type": "number",
381
+ "mutable": false,
382
+ "complexType": {
383
+ "original": "number",
384
+ "resolved": "number | undefined",
385
+ "references": {}
386
+ },
387
+ "required": false,
388
+ "optional": true,
389
+ "docs": {
390
+ "tags": [],
391
+ "text": ""
392
+ },
393
+ "attribute": "max",
394
+ "reflect": false
395
+ }
396
+ }; }
397
+ static get states() { return {
398
+ "announcement": {},
399
+ "previousBlurredValue": {},
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
+ }