@mgdis/mg-components 3.1.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 (271) hide show
  1. package/LICENSE +29 -0
  2. package/dist/cjs/css-shim-a22512c4.js +6 -0
  3. package/dist/cjs/index-85a4a0b6.js +1674 -0
  4. package/dist/cjs/index.cjs.js +2 -0
  5. package/dist/cjs/loader.cjs.js +35 -0
  6. package/dist/cjs/mg-badge_20.cjs.entry.js +4661 -0
  7. package/dist/cjs/mg-components.cjs.js +23 -0
  8. package/dist/cjs/shadow-css-8940f82d.js +390 -0
  9. package/dist/collection/collection-manifest.json +31 -0
  10. package/dist/collection/components/atoms/mg-badge/mg-badge.conf.js +4 -0
  11. package/dist/collection/components/atoms/mg-badge/mg-badge.css +99 -0
  12. package/dist/collection/components/atoms/mg-badge/mg-badge.js +148 -0
  13. package/dist/collection/components/atoms/mg-badge/mg-badge.stories.js +27 -0
  14. package/dist/collection/components/atoms/mg-button/mg-button.conf.js +4 -0
  15. package/dist/collection/components/atoms/mg-button/mg-button.css +134 -0
  16. package/dist/collection/components/atoms/mg-button/mg-button.js +236 -0
  17. package/dist/collection/components/atoms/mg-button/mg-button.stories.js +38 -0
  18. package/dist/collection/components/atoms/mg-character-left/mg-character-left.css +3 -0
  19. package/dist/collection/components/atoms/mg-character-left/mg-character-left.js +133 -0
  20. package/dist/collection/components/atoms/mg-character-left/mg-character-left.stories.js +15 -0
  21. package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js +54 -0
  22. package/dist/collection/components/atoms/mg-icon/mg-icon.css +57 -0
  23. package/dist/collection/components/atoms/mg-icon/mg-icon.js +155 -0
  24. package/dist/collection/components/atoms/mg-icon/mg-icon.stories.js +34 -0
  25. package/dist/collection/components/atoms/mg-input-title/mg-input-title.css +12 -0
  26. package/dist/collection/components/atoms/mg-input-title/mg-input-title.js +95 -0
  27. package/dist/collection/components/atoms/mg-input-title/mg-input-title.stories.js +21 -0
  28. package/dist/collection/components/atoms/mg-tag/mg-tag.conf.js +4 -0
  29. package/dist/collection/components/atoms/mg-tag/mg-tag.css +73 -0
  30. package/dist/collection/components/atoms/mg-tag/mg-tag.js +94 -0
  31. package/dist/collection/components/atoms/mg-tag/mg-tag.stories.js +25 -0
  32. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.css +44 -0
  33. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +225 -0
  34. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.stories.js +26 -0
  35. package/dist/collection/components/molecules/inputs/MgInput.conf.js +7 -0
  36. package/dist/collection/components/molecules/inputs/MgInput.js +130 -0
  37. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.js +1 -0
  38. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.css +156 -0
  39. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +444 -0
  40. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.stories.js +57 -0
  41. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.conf.js +7 -0
  42. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.css +171 -0
  43. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +467 -0
  44. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.stories.js +46 -0
  45. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.conf.js +11 -0
  46. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.css +199 -0
  47. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +633 -0
  48. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.stories.js +68 -0
  49. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.css +195 -0
  50. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +401 -0
  51. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.stories.js +43 -0
  52. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.conf.js +1 -0
  53. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.css +156 -0
  54. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +443 -0
  55. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.stories.js +65 -0
  56. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.conf.js +1 -0
  57. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.css +201 -0
  58. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +532 -0
  59. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.stories.js +70 -0
  60. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.css +222 -0
  61. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +589 -0
  62. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.stories.js +115 -0
  63. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.css +217 -0
  64. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +553 -0
  65. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.stories.js +52 -0
  66. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.conf.js +1 -0
  67. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.css +213 -0
  68. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js +457 -0
  69. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.stories.js +73 -0
  70. package/dist/collection/components/molecules/mg-message/mg-message.conf.js +4 -0
  71. package/dist/collection/components/molecules/mg-message/mg-message.css +94 -0
  72. package/dist/collection/components/molecules/mg-message/mg-message.js +285 -0
  73. package/dist/collection/components/molecules/mg-message/mg-message.stories.js +43 -0
  74. package/dist/collection/components/molecules/mg-pagination/mg-pagination.conf.js +5 -0
  75. package/dist/collection/components/molecules/mg-pagination/mg-pagination.css +39 -0
  76. package/dist/collection/components/molecules/mg-pagination/mg-pagination.js +218 -0
  77. package/dist/collection/components/molecules/mg-pagination/mg-pagination.stories.js +23 -0
  78. package/dist/collection/components/molecules/mg-popover/mg-popover.css +59 -0
  79. package/dist/collection/components/molecules/mg-popover/mg-popover.js +249 -0
  80. package/dist/collection/components/molecules/mg-popover/mg-popover.stories.js +36 -0
  81. package/dist/collection/components/molecules/mg-tabs/mg-tabs.conf.js +1 -0
  82. package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +30 -0
  83. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +212 -0
  84. package/dist/collection/components/molecules/mg-tabs/mg-tabs.stories.js +40 -0
  85. package/dist/collection/fonts/OpenSans-Regular.ttf +0 -0
  86. package/dist/collection/fonts/OpenSans-SemiBold.ttf +0 -0
  87. package/dist/collection/fonts/Poppins-Bold.ttf +0 -0
  88. package/dist/collection/index.js +1 -0
  89. package/dist/collection/locales/index.js +4 -0
  90. package/dist/collection/stories/buttons.stories.js +43 -0
  91. package/dist/collection/stories/grids.stories.js +50 -0
  92. package/dist/collection/stories/icons.stories.js +20 -0
  93. package/dist/collection/stories/messages.stories.js +44 -0
  94. package/dist/collection/stories/tags.stories.js +13 -0
  95. package/dist/collection/stories/typography.stories.js +28 -0
  96. package/dist/collection/utils/components.utils.js +67 -0
  97. package/dist/collection/utils/locale.utils.js +32 -0
  98. package/dist/collection/utils/test.utils.js +26 -0
  99. package/dist/collection/variables.css +177 -0
  100. package/dist/collection/variables.scss +177 -0
  101. package/dist/components/MgInput.js +140 -0
  102. package/dist/components/components.utils.js +69 -0
  103. package/dist/components/index.d.ts +26 -0
  104. package/dist/components/index.js +1 -0
  105. package/dist/components/index2.js +54 -0
  106. package/dist/components/locale.utils.js +35 -0
  107. package/dist/components/mg-badge.d.ts +11 -0
  108. package/dist/components/mg-badge.js +6 -0
  109. package/dist/components/mg-badge2.js +82 -0
  110. package/dist/components/mg-button.d.ts +11 -0
  111. package/dist/components/mg-button.js +6 -0
  112. package/dist/components/mg-button2.js +148 -0
  113. package/dist/components/mg-character-left.d.ts +11 -0
  114. package/dist/components/mg-character-left.js +6 -0
  115. package/dist/components/mg-character-left2.js +77 -0
  116. package/dist/components/mg-icon.d.ts +11 -0
  117. package/dist/components/mg-icon.js +6 -0
  118. package/dist/components/mg-icon2.js +147 -0
  119. package/dist/components/mg-input-checkbox.d.ts +11 -0
  120. package/dist/components/mg-input-checkbox.js +222 -0
  121. package/dist/components/mg-input-date.d.ts +11 -0
  122. package/dist/components/mg-input-date.js +245 -0
  123. package/dist/components/mg-input-numeric.d.ts +11 -0
  124. package/dist/components/mg-input-numeric.js +324 -0
  125. package/dist/components/mg-input-password.d.ts +11 -0
  126. package/dist/components/mg-input-password.js +171 -0
  127. package/dist/components/mg-input-radio.d.ts +11 -0
  128. package/dist/components/mg-input-radio.js +211 -0
  129. package/dist/components/mg-input-select.d.ts +11 -0
  130. package/dist/components/mg-input-select.js +6 -0
  131. package/dist/components/mg-input-select2.js +243 -0
  132. package/dist/components/mg-input-text.d.ts +11 -0
  133. package/dist/components/mg-input-text.js +242 -0
  134. package/dist/components/mg-input-textarea.d.ts +11 -0
  135. package/dist/components/mg-input-textarea.js +224 -0
  136. package/dist/components/mg-input-title.d.ts +11 -0
  137. package/dist/components/mg-input-title.js +6 -0
  138. package/dist/components/mg-input-title2.js +55 -0
  139. package/dist/components/mg-input-toggle.d.ts +11 -0
  140. package/dist/components/mg-input-toggle.js +247 -0
  141. package/dist/components/mg-message.d.ts +11 -0
  142. package/dist/components/mg-message.js +183 -0
  143. package/dist/components/mg-pagination.d.ts +11 -0
  144. package/dist/components/mg-pagination.js +175 -0
  145. package/dist/components/mg-popover.d.ts +11 -0
  146. package/dist/components/mg-popover.js +183 -0
  147. package/dist/components/mg-tabs.d.ts +11 -0
  148. package/dist/components/mg-tabs.js +160 -0
  149. package/dist/components/mg-tag.d.ts +11 -0
  150. package/dist/components/mg-tag.js +76 -0
  151. package/dist/components/mg-tooltip.d.ts +11 -0
  152. package/dist/components/mg-tooltip.js +6 -0
  153. package/dist/components/mg-tooltip2.js +150 -0
  154. package/dist/components/popper.js +1784 -0
  155. package/dist/esm/css-shim-7c240feb.js +4 -0
  156. package/dist/esm/index-e3e84606.js +1643 -0
  157. package/dist/esm/index.js +1 -0
  158. package/dist/esm/loader.js +31 -0
  159. package/dist/esm/mg-badge_20.entry.js +4638 -0
  160. package/dist/esm/mg-components.js +21 -0
  161. package/dist/esm/polyfills/core-js.js +11 -0
  162. package/dist/esm/polyfills/css-shim.js +1 -0
  163. package/dist/esm/polyfills/dom.js +79 -0
  164. package/dist/esm/polyfills/es5-html-element.js +1 -0
  165. package/dist/esm/polyfills/index.js +34 -0
  166. package/dist/esm/polyfills/system.js +6 -0
  167. package/dist/esm/shadow-css-5d2d01ce.js +388 -0
  168. package/dist/esm-es5/css-shim-7c240feb.js +1 -0
  169. package/dist/esm-es5/index-e3e84606.js +1 -0
  170. package/dist/esm-es5/index.js +0 -0
  171. package/dist/esm-es5/loader.js +1 -0
  172. package/dist/esm-es5/mg-badge_20.entry.js +2 -0
  173. package/dist/esm-es5/mg-components.js +1 -0
  174. package/dist/esm-es5/shadow-css-5d2d01ce.js +12 -0
  175. package/dist/index.cjs.js +1 -0
  176. package/dist/index.js +1 -0
  177. package/dist/mg-components/fonts/OpenSans-Regular.ttf +0 -0
  178. package/dist/mg-components/fonts/OpenSans-SemiBold.ttf +0 -0
  179. package/dist/mg-components/fonts/Poppins-Bold.ttf +0 -0
  180. package/dist/mg-components/index.esm.js +0 -0
  181. package/dist/mg-components/mg-components.css +1 -0
  182. package/dist/mg-components/mg-components.esm.js +1 -0
  183. package/dist/mg-components/mg-components.js +132 -0
  184. package/dist/mg-components/p-1cd24462.system.js +1 -0
  185. package/dist/mg-components/p-2e2f6b27.system.entry.js +2 -0
  186. package/dist/mg-components/p-366a224e.js +1 -0
  187. package/dist/mg-components/p-422c429b.system.js +1 -0
  188. package/dist/mg-components/p-50ea2036.system.js +1 -0
  189. package/dist/mg-components/p-62fa3797.js +1 -0
  190. package/dist/mg-components/p-71d57b8b.system.js +13 -0
  191. package/dist/mg-components/p-9a215712.system.js +1 -0
  192. package/dist/mg-components/p-cbf0464b.entry.js +1 -0
  193. package/dist/mg-components/p-f6455ab3.js +12 -0
  194. package/dist/mg-components/variables.css +177 -0
  195. package/dist/mg-components/variables.scss +177 -0
  196. package/dist/types/components/atoms/mg-badge/mg-badge.conf.d.ts +8 -0
  197. package/dist/types/components/atoms/mg-badge/mg-badge.d.ts +36 -0
  198. package/dist/types/components/atoms/mg-badge/mg-badge.stories.d.ts +19 -0
  199. package/dist/types/components/atoms/mg-button/mg-button.conf.d.ts +4 -0
  200. package/dist/types/components/atoms/mg-button/mg-button.d.ts +67 -0
  201. package/dist/types/components/atoms/mg-button/mg-button.stories.d.ts +16 -0
  202. package/dist/types/components/atoms/mg-character-left/mg-character-left.d.ts +39 -0
  203. package/dist/types/components/atoms/mg-character-left/mg-character-left.stories.d.ts +7 -0
  204. package/dist/types/components/atoms/mg-icon/mg-icon.conf.d.ts +12 -0
  205. package/dist/types/components/atoms/mg-icon/mg-icon.d.ts +36 -0
  206. package/dist/types/components/atoms/mg-icon/mg-icon.stories.d.ts +26 -0
  207. package/dist/types/components/atoms/mg-input-title/mg-input-title.d.ts +24 -0
  208. package/dist/types/components/atoms/mg-input-title/mg-input-title.stories.d.ts +6 -0
  209. package/dist/types/components/atoms/mg-tag/mg-tag.conf.d.ts +4 -0
  210. package/dist/types/components/atoms/mg-tag/mg-tag.d.ts +25 -0
  211. package/dist/types/components/atoms/mg-tag/mg-tag.stories.d.ts +14 -0
  212. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +56 -0
  213. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.stories.d.ts +11 -0
  214. package/dist/types/components/molecules/inputs/MgInput.conf.d.ts +10 -0
  215. package/dist/types/components/molecules/inputs/MgInput.d.ts +35 -0
  216. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.d.ts +19 -0
  217. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.d.ts +120 -0
  218. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.stories.d.ts +6 -0
  219. package/dist/types/components/molecules/inputs/mg-input-date/mg-input-date.conf.d.ts +6 -0
  220. package/dist/types/components/molecules/inputs/mg-input-date/mg-input-date.d.ts +128 -0
  221. package/dist/types/components/molecules/inputs/mg-input-date/mg-input-date.stories.d.ts +7 -0
  222. package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.conf.d.ts +10 -0
  223. package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +173 -0
  224. package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.stories.d.ts +21 -0
  225. package/dist/types/components/molecules/inputs/mg-input-password/mg-input-password.d.ts +111 -0
  226. package/dist/types/components/molecules/inputs/mg-input-password/mg-input-password.stories.d.ts +9 -0
  227. package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.conf.d.ts +9 -0
  228. package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.d.ts +121 -0
  229. package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.stories.d.ts +15 -0
  230. package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.conf.d.ts +18 -0
  231. package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.d.ts +133 -0
  232. package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.stories.d.ts +14 -0
  233. package/dist/types/components/molecules/inputs/mg-input-text/mg-input-text.d.ts +160 -0
  234. package/dist/types/components/molecules/inputs/mg-input-text/mg-input-text.stories.d.ts +26 -0
  235. package/dist/types/components/molecules/inputs/mg-input-textarea/mg-input-textarea.d.ts +150 -0
  236. package/dist/types/components/molecules/inputs/mg-input-textarea/mg-input-textarea.stories.d.ts +6 -0
  237. package/dist/types/components/molecules/inputs/mg-input-toggle/mg-input-toggle.conf.d.ts +8 -0
  238. package/dist/types/components/molecules/inputs/mg-input-toggle/mg-input-toggle.d.ts +117 -0
  239. package/dist/types/components/molecules/inputs/mg-input-toggle/mg-input-toggle.stories.d.ts +7 -0
  240. package/dist/types/components/molecules/mg-message/mg-message.conf.d.ts +4 -0
  241. package/dist/types/components/molecules/mg-message/mg-message.d.ts +76 -0
  242. package/dist/types/components/molecules/mg-message/mg-message.stories.d.ts +16 -0
  243. package/dist/types/components/molecules/mg-pagination/mg-pagination.conf.d.ts +4 -0
  244. package/dist/types/components/molecules/mg-pagination/mg-pagination.d.ts +53 -0
  245. package/dist/types/components/molecules/mg-pagination/mg-pagination.stories.d.ts +6 -0
  246. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +62 -0
  247. package/dist/types/components/molecules/mg-popover/mg-popover.stories.d.ts +12 -0
  248. package/dist/types/components/molecules/mg-tabs/mg-tabs.conf.d.ts +10 -0
  249. package/dist/types/components/molecules/mg-tabs/mg-tabs.d.ts +63 -0
  250. package/dist/types/components/molecules/mg-tabs/mg-tabs.stories.d.ts +7 -0
  251. package/dist/types/components.d.ts +1987 -0
  252. package/dist/types/index.d.ts +1 -0
  253. package/dist/types/locales/index.d.ts +44 -0
  254. package/dist/types/stencil-public-runtime.d.ts +1565 -0
  255. package/dist/types/stories/buttons.stories.d.ts +13 -0
  256. package/dist/types/stories/grids.stories.d.ts +5 -0
  257. package/dist/types/stories/icons.stories.d.ts +13 -0
  258. package/dist/types/stories/messages.stories.d.ts +13 -0
  259. package/dist/types/stories/tags.stories.d.ts +5 -0
  260. package/dist/types/stories/typography.stories.d.ts +5 -0
  261. package/dist/types/utils/components.utils.d.ts +43 -0
  262. package/dist/types/utils/locale.utils.d.ts +22 -0
  263. package/dist/types/utils/test.utils.d.ts +5 -0
  264. package/loader/cdn.js +3 -0
  265. package/loader/index.cjs.js +3 -0
  266. package/loader/index.d.ts +12 -0
  267. package/loader/index.es2017.js +3 -0
  268. package/loader/index.js +4 -0
  269. package/loader/package.json +10 -0
  270. package/package.json +86 -0
  271. package/readme.md +159 -0
@@ -0,0 +1,633 @@
1
+ import { Component, Element, Event, h, Prop, State, Watch } from '@stencil/core';
2
+ import { MgInput } from '../MgInput';
3
+ import { types, InputError } from './mg-input-numeric.conf';
4
+ import { createID, ClassList } from '../../../../utils/components.utils';
5
+ import { messages } from '../../../../locales';
6
+ import { localeCurrency, localeNumber } from '../../../../utils/locale.utils';
7
+ import { InputClass } from '../MgInput.conf';
8
+ export class MgInputNumeric {
9
+ constructor() {
10
+ // Classes
11
+ this.classError = InputClass.ERROR;
12
+ /**
13
+ * Identifier is used for the element ID (id is a reserved prop in Stencil.js)
14
+ * If not set, it will be created.
15
+ */
16
+ this.identifier = createID('mg-input-numeric');
17
+ /**
18
+ * Input name
19
+ * If not set the value equals the identifier
20
+ */
21
+ this.name = this.identifier;
22
+ /**
23
+ * Define if label is visible
24
+ */
25
+ this.labelHide = false;
26
+ /**
27
+ * Define if input is required
28
+ */
29
+ this.required = false;
30
+ /**
31
+ * Define if input is readonly
32
+ */
33
+ this.readonly = false;
34
+ /**
35
+ * Define if input is disabled
36
+ */
37
+ this.disabled = false;
38
+ /**
39
+ * Define numeric type
40
+ */
41
+ this.type = types[0];
42
+ /**
43
+ * Override integer length
44
+ * integer is the number before the decimal point
45
+ */
46
+ this.integerLength = 13;
47
+ /**
48
+ * Override decimal length
49
+ * decimal is the number after the decimal point
50
+ */
51
+ this.decimalLength = 2;
52
+ /**
53
+ * Component classes
54
+ */
55
+ this.classList = new ClassList(['mg-input--numeric']);
56
+ /**
57
+ * Handle input event
58
+ */
59
+ this.handleInput = () => {
60
+ // Check validity
61
+ this.checkValidity();
62
+ this.value = this.input.value;
63
+ };
64
+ /**
65
+ * Handle focus event
66
+ */
67
+ this.handleFocus = () => {
68
+ this.displayValue = this.value;
69
+ };
70
+ /**
71
+ * Handle blur event
72
+ */
73
+ this.handleBlur = () => {
74
+ // Check validity
75
+ this.checkValidity();
76
+ this.checkError();
77
+ // Display readonly value
78
+ this.displayValue = this.readonlyValue;
79
+ };
80
+ /**
81
+ * get input error code
82
+ * @returns {null | InputError}
83
+ */
84
+ this.getInputError = () => {
85
+ let inputError = null;
86
+ if (this.input === undefined)
87
+ return inputError;
88
+ // required
89
+ if (!this.input.checkValidity() && this.input.validity.valueMissing) {
90
+ inputError = InputError.REQUIRED;
91
+ }
92
+ // Min & Max
93
+ if (this.min !== undefined && this.numericValue < this.min && this.max === undefined) {
94
+ // Only a min value is set
95
+ inputError = InputError.MIN;
96
+ }
97
+ else if (this.max !== undefined && this.numericValue > this.max && this.min === undefined) {
98
+ // Only a max value is set
99
+ inputError = InputError.MAX;
100
+ }
101
+ else if ((this.min !== undefined && this.numericValue < this.min) || (this.max !== undefined && this.numericValue > this.max)) {
102
+ // both min and max values are set
103
+ inputError = InputError.MINMAX;
104
+ }
105
+ return inputError;
106
+ };
107
+ /**
108
+ * Format value based on type
109
+ * @param value {number}
110
+ * @returns {string} formated local value
111
+ */
112
+ this.formatValue = (value) => (this.type === 'currency' ? localeCurrency(value) : localeNumber(value));
113
+ }
114
+ validateValue(newValue) {
115
+ if (newValue !== undefined && newValue !== null) {
116
+ // Split number and decimal
117
+ const [integer, decimal = ''] = newValue.replace('-', '').split(/[\.,]/);
118
+ // Regex
119
+ const regex = this.type === 'integer' ? /^[\-]?\d+$/ : /^[\-]?\d+[.,]?\d*$/;
120
+ // Filter input
121
+ if (newValue === '' || (newValue.match(regex) && integer.length <= this.integerLength && decimal.length <= (this.type === 'integer' ? 0 : this.decimalLength))) {
122
+ this.storedValue = newValue;
123
+ }
124
+ else if (this.storedValue !== undefined) {
125
+ newValue = this.storedValue;
126
+ }
127
+ else {
128
+ newValue = null;
129
+ }
130
+ // Set value and input value
131
+ this.value = newValue;
132
+ if (this.input !== undefined)
133
+ this.input.value = this.value;
134
+ // emit numeric value
135
+ this.numericValue = this.value !== '' && this.value !== null ? parseFloat(this.value.replace(',', '.')) : null;
136
+ this.valueChange.emit(this.numericValue);
137
+ // Set readOnlyValue
138
+ this.readonlyValue = this.numericValue !== null ? this.formatValue(this.numericValue) : '';
139
+ }
140
+ }
141
+ validateType(newValue) {
142
+ if (!types.includes(newValue)) {
143
+ throw new Error(`<mg-input-numeric> prop "type" must be one of : ${types.join(', ')}`);
144
+ }
145
+ this.classList.add(`mg-input--numeric--${this.type}`);
146
+ }
147
+ validateIntegerLength(newValue) {
148
+ if (newValue < 1) {
149
+ throw new Error(`<mg-input-numeric> prop "integer-length" must be a positive number.`);
150
+ }
151
+ }
152
+ validateDecimalLength(newValue) {
153
+ if (newValue < 1) {
154
+ throw new Error(`<mg-input-numeric> prop "decimal-length" must be a positive number, consider using prop "type" to "integer" instead.`);
155
+ }
156
+ }
157
+ /**
158
+ * Check if input is valid
159
+ */
160
+ checkValidity() {
161
+ if (!this.readonly) {
162
+ const validity = this.getInputError() === null;
163
+ // Set validity
164
+ this.valid = validity;
165
+ this.invalid = !validity;
166
+ }
167
+ }
168
+ /**
169
+ * Set error message
170
+ */
171
+ setErrorMessage() {
172
+ const inputError = this.getInputError();
173
+ if (inputError === InputError.REQUIRED) {
174
+ this.errorMessage = messages.errors[inputError];
175
+ }
176
+ else {
177
+ this.errorMessage = messages.errors.numeric[inputError].replace('{min}', `${this.formatValue(this.min)}`).replace('{max}', `${this.formatValue(this.max)}`);
178
+ }
179
+ }
180
+ /**
181
+ * Check input errors
182
+ */
183
+ checkError() {
184
+ // Set error message
185
+ this.errorMessage = undefined;
186
+ // Update class
187
+ if (!this.valid) {
188
+ this.setErrorMessage();
189
+ this.classList.add(this.classError);
190
+ }
191
+ else {
192
+ this.classList.delete(this.classError);
193
+ }
194
+ }
195
+ /**
196
+ * Validate append slot
197
+ */
198
+ validateAppendSlot() {
199
+ const slotAppendInput = this.element.querySelector('[slot="append-input"]');
200
+ if (slotAppendInput !== null && slotAppendInput.querySelector('.mg-button') !== null) {
201
+ this.classList.add('mg-input--is-input-group-append');
202
+ this.classList = new ClassList(this.classList.classes);
203
+ }
204
+ else if (slotAppendInput !== null) {
205
+ this.classList.add('mg-input--is-append-input-slot-content');
206
+ this.classList = new ClassList(this.classList.classes);
207
+ }
208
+ }
209
+ /*************
210
+ * Lifecycle *
211
+ *************/
212
+ componentWillLoad() {
213
+ this.validateValue(this.value);
214
+ // Set displayed value
215
+ this.displayValue = this.readonlyValue;
216
+ this.validateType(this.type);
217
+ this.validateIntegerLength(this.integerLength);
218
+ this.validateDecimalLength(this.decimalLength);
219
+ // return a promise to process action only in the FIRST render().
220
+ // https://stenciljs.com/docs/component-lifecycle#componentwillload
221
+ return setTimeout(() => this.checkValidity(), 0);
222
+ }
223
+ componentDidLoad() {
224
+ this.validateAppendSlot();
225
+ }
226
+ /**
227
+ * Check if component props are well configured on init
228
+ */
229
+ render() {
230
+ return (h(MgInput, { identifier: this.identifier, classList: this.classList, label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, width: this.width, disabled: this.disabled, value: this.value, readonlyValue: this.readonlyValue, tooltip: this.tooltip, displayCharacterLeft: undefined, characterLeftTemplate: undefined, maxlength: undefined, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false },
231
+ h("input", { type: "text", class: "mg-input__box", value: this.displayValue, id: this.identifier, name: this.name, placeholder: this.placeholder, title: this.placeholder, disabled: this.disabled, required: this.required, onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, ref: el => (this.input = el) }),
232
+ h("slot", { name: "append-input" })));
233
+ }
234
+ static get is() { return "mg-input-numeric"; }
235
+ static get encapsulation() { return "shadow"; }
236
+ static get originalStyleUrls() { return {
237
+ "$": ["mg-input-numeric.scss"]
238
+ }; }
239
+ static get styleUrls() { return {
240
+ "$": ["mg-input-numeric.css"]
241
+ }; }
242
+ static get properties() { return {
243
+ "value": {
244
+ "type": "string",
245
+ "mutable": true,
246
+ "complexType": {
247
+ "original": "string",
248
+ "resolved": "string",
249
+ "references": {}
250
+ },
251
+ "required": false,
252
+ "optional": false,
253
+ "docs": {
254
+ "tags": [],
255
+ "text": "Component value"
256
+ },
257
+ "attribute": "value",
258
+ "reflect": true
259
+ },
260
+ "identifier": {
261
+ "type": "string",
262
+ "mutable": false,
263
+ "complexType": {
264
+ "original": "string",
265
+ "resolved": "string",
266
+ "references": {}
267
+ },
268
+ "required": false,
269
+ "optional": true,
270
+ "docs": {
271
+ "tags": [],
272
+ "text": "Identifier is used for the element ID (id is a reserved prop in Stencil.js)\nIf not set, it will be created."
273
+ },
274
+ "attribute": "identifier",
275
+ "reflect": false,
276
+ "defaultValue": "createID('mg-input-numeric')"
277
+ },
278
+ "name": {
279
+ "type": "string",
280
+ "mutable": false,
281
+ "complexType": {
282
+ "original": "string",
283
+ "resolved": "string",
284
+ "references": {}
285
+ },
286
+ "required": false,
287
+ "optional": true,
288
+ "docs": {
289
+ "tags": [],
290
+ "text": "Input name\nIf not set the value equals the identifier"
291
+ },
292
+ "attribute": "name",
293
+ "reflect": false,
294
+ "defaultValue": "this.identifier"
295
+ },
296
+ "label": {
297
+ "type": "string",
298
+ "mutable": false,
299
+ "complexType": {
300
+ "original": "string",
301
+ "resolved": "string",
302
+ "references": {}
303
+ },
304
+ "required": true,
305
+ "optional": false,
306
+ "docs": {
307
+ "tags": [],
308
+ "text": "Input label\nRequired"
309
+ },
310
+ "attribute": "label",
311
+ "reflect": false
312
+ },
313
+ "labelOnTop": {
314
+ "type": "boolean",
315
+ "mutable": false,
316
+ "complexType": {
317
+ "original": "boolean",
318
+ "resolved": "boolean",
319
+ "references": {}
320
+ },
321
+ "required": false,
322
+ "optional": false,
323
+ "docs": {
324
+ "tags": [],
325
+ "text": "Define if label is displayed on top"
326
+ },
327
+ "attribute": "label-on-top",
328
+ "reflect": false
329
+ },
330
+ "labelHide": {
331
+ "type": "boolean",
332
+ "mutable": false,
333
+ "complexType": {
334
+ "original": "boolean",
335
+ "resolved": "boolean",
336
+ "references": {}
337
+ },
338
+ "required": false,
339
+ "optional": false,
340
+ "docs": {
341
+ "tags": [],
342
+ "text": "Define if label is visible"
343
+ },
344
+ "attribute": "label-hide",
345
+ "reflect": false,
346
+ "defaultValue": "false"
347
+ },
348
+ "placeholder": {
349
+ "type": "string",
350
+ "mutable": false,
351
+ "complexType": {
352
+ "original": "string",
353
+ "resolved": "string",
354
+ "references": {}
355
+ },
356
+ "required": false,
357
+ "optional": false,
358
+ "docs": {
359
+ "tags": [],
360
+ "text": "Input placeholder.\nIt should be a word or short phrase that demonstrates the expected type of data, not a replacement for labels or help text."
361
+ },
362
+ "attribute": "placeholder",
363
+ "reflect": false
364
+ },
365
+ "required": {
366
+ "type": "boolean",
367
+ "mutable": false,
368
+ "complexType": {
369
+ "original": "boolean",
370
+ "resolved": "boolean",
371
+ "references": {}
372
+ },
373
+ "required": false,
374
+ "optional": false,
375
+ "docs": {
376
+ "tags": [],
377
+ "text": "Define if input is required"
378
+ },
379
+ "attribute": "required",
380
+ "reflect": false,
381
+ "defaultValue": "false"
382
+ },
383
+ "readonly": {
384
+ "type": "boolean",
385
+ "mutable": false,
386
+ "complexType": {
387
+ "original": "boolean",
388
+ "resolved": "boolean",
389
+ "references": {}
390
+ },
391
+ "required": false,
392
+ "optional": false,
393
+ "docs": {
394
+ "tags": [],
395
+ "text": "Define if input is readonly"
396
+ },
397
+ "attribute": "readonly",
398
+ "reflect": false,
399
+ "defaultValue": "false"
400
+ },
401
+ "disabled": {
402
+ "type": "boolean",
403
+ "mutable": false,
404
+ "complexType": {
405
+ "original": "boolean",
406
+ "resolved": "boolean",
407
+ "references": {}
408
+ },
409
+ "required": false,
410
+ "optional": false,
411
+ "docs": {
412
+ "tags": [],
413
+ "text": "Define if input is disabled"
414
+ },
415
+ "attribute": "disabled",
416
+ "reflect": false,
417
+ "defaultValue": "false"
418
+ },
419
+ "width": {
420
+ "type": "any",
421
+ "mutable": false,
422
+ "complexType": {
423
+ "original": "Width",
424
+ "resolved": "\"full\" | 16 | 2 | 4",
425
+ "references": {
426
+ "Width": {
427
+ "location": "import",
428
+ "path": "../MgInput.conf"
429
+ }
430
+ }
431
+ },
432
+ "required": false,
433
+ "optional": false,
434
+ "docs": {
435
+ "tags": [],
436
+ "text": "Define input width"
437
+ },
438
+ "attribute": "width",
439
+ "reflect": false
440
+ },
441
+ "tooltip": {
442
+ "type": "string",
443
+ "mutable": false,
444
+ "complexType": {
445
+ "original": "string",
446
+ "resolved": "string",
447
+ "references": {}
448
+ },
449
+ "required": false,
450
+ "optional": false,
451
+ "docs": {
452
+ "tags": [],
453
+ "text": "Add a tooltip message next to the input"
454
+ },
455
+ "attribute": "tooltip",
456
+ "reflect": false
457
+ },
458
+ "helpText": {
459
+ "type": "string",
460
+ "mutable": false,
461
+ "complexType": {
462
+ "original": "string",
463
+ "resolved": "string",
464
+ "references": {}
465
+ },
466
+ "required": false,
467
+ "optional": false,
468
+ "docs": {
469
+ "tags": [],
470
+ "text": "Add a help text under the input, usually expected data format and example"
471
+ },
472
+ "attribute": "help-text",
473
+ "reflect": false
474
+ },
475
+ "type": {
476
+ "type": "string",
477
+ "mutable": false,
478
+ "complexType": {
479
+ "original": "string",
480
+ "resolved": "string",
481
+ "references": {}
482
+ },
483
+ "required": false,
484
+ "optional": false,
485
+ "docs": {
486
+ "tags": [],
487
+ "text": "Define numeric type"
488
+ },
489
+ "attribute": "type",
490
+ "reflect": false,
491
+ "defaultValue": "types[0]"
492
+ },
493
+ "max": {
494
+ "type": "number",
495
+ "mutable": false,
496
+ "complexType": {
497
+ "original": "number",
498
+ "resolved": "number",
499
+ "references": {}
500
+ },
501
+ "required": false,
502
+ "optional": false,
503
+ "docs": {
504
+ "tags": [],
505
+ "text": "Maximum value"
506
+ },
507
+ "attribute": "max",
508
+ "reflect": false
509
+ },
510
+ "min": {
511
+ "type": "number",
512
+ "mutable": false,
513
+ "complexType": {
514
+ "original": "number",
515
+ "resolved": "number",
516
+ "references": {}
517
+ },
518
+ "required": false,
519
+ "optional": false,
520
+ "docs": {
521
+ "tags": [],
522
+ "text": "Minimum value"
523
+ },
524
+ "attribute": "min",
525
+ "reflect": false
526
+ },
527
+ "integerLength": {
528
+ "type": "number",
529
+ "mutable": false,
530
+ "complexType": {
531
+ "original": "number",
532
+ "resolved": "number",
533
+ "references": {}
534
+ },
535
+ "required": false,
536
+ "optional": false,
537
+ "docs": {
538
+ "tags": [],
539
+ "text": "Override integer length\ninteger is the number before the decimal point"
540
+ },
541
+ "attribute": "integer-length",
542
+ "reflect": false,
543
+ "defaultValue": "13"
544
+ },
545
+ "decimalLength": {
546
+ "type": "number",
547
+ "mutable": false,
548
+ "complexType": {
549
+ "original": "number",
550
+ "resolved": "number",
551
+ "references": {}
552
+ },
553
+ "required": false,
554
+ "optional": false,
555
+ "docs": {
556
+ "tags": [],
557
+ "text": "Override decimal length\ndecimal is the number after the decimal point"
558
+ },
559
+ "attribute": "decimal-length",
560
+ "reflect": false,
561
+ "defaultValue": "2"
562
+ },
563
+ "valid": {
564
+ "type": "boolean",
565
+ "mutable": true,
566
+ "complexType": {
567
+ "original": "boolean",
568
+ "resolved": "boolean",
569
+ "references": {}
570
+ },
571
+ "required": false,
572
+ "optional": false,
573
+ "docs": {
574
+ "tags": [],
575
+ "text": "Define input pattern to validate"
576
+ },
577
+ "attribute": "valid",
578
+ "reflect": false
579
+ },
580
+ "invalid": {
581
+ "type": "boolean",
582
+ "mutable": true,
583
+ "complexType": {
584
+ "original": "boolean",
585
+ "resolved": "boolean",
586
+ "references": {}
587
+ },
588
+ "required": false,
589
+ "optional": false,
590
+ "docs": {
591
+ "tags": [],
592
+ "text": "Define input pattern error message"
593
+ },
594
+ "attribute": "invalid",
595
+ "reflect": false
596
+ }
597
+ }; }
598
+ static get states() { return {
599
+ "classList": {},
600
+ "errorMessage": {},
601
+ "displayValue": {}
602
+ }; }
603
+ static get events() { return [{
604
+ "method": "valueChange",
605
+ "name": "value-change",
606
+ "bubbles": true,
607
+ "cancelable": true,
608
+ "composed": true,
609
+ "docs": {
610
+ "tags": [],
611
+ "text": "Emmited event when value change"
612
+ },
613
+ "complexType": {
614
+ "original": "number",
615
+ "resolved": "number",
616
+ "references": {}
617
+ }
618
+ }]; }
619
+ static get elementRef() { return "element"; }
620
+ static get watchers() { return [{
621
+ "propName": "value",
622
+ "methodName": "validateValue"
623
+ }, {
624
+ "propName": "type",
625
+ "methodName": "validateType"
626
+ }, {
627
+ "propName": "integerLength",
628
+ "methodName": "validateIntegerLength"
629
+ }, {
630
+ "propName": "decimalLength",
631
+ "methodName": "validateDecimalLength"
632
+ }]; }
633
+ }
@@ -0,0 +1,68 @@
1
+ import { h } from '@stencil/core';
2
+ import { types } from './mg-input-numeric.conf';
3
+ export default {
4
+ component: 'mg-input-numeric',
5
+ title: 'Molecules/Inputs/mg-input-numeric',
6
+ argTypes: {
7
+ type: {
8
+ options: types,
9
+ control: { type: 'select' },
10
+ },
11
+ },
12
+ };
13
+ /**
14
+ * 1. camelCase arguments must be written in the template, for exemple labelOnTop must be placed in the template as label-on-top={args.labelOnTop}
15
+ * 2. boolean arguments with a default true value must be added like display-character-left={args.displayCharacterLeft ? 'true' : 'false'}
16
+ */
17
+ const Template = args => {
18
+ const labelOnTop = args.labelOnTop;
19
+ delete args.labelOnTop;
20
+ const labelHide = args.labelHide;
21
+ delete args.labelHide;
22
+ const helpText = args.helpText;
23
+ delete args.helpText;
24
+ // return element
25
+ return h("mg-input-numeric", Object.assign({}, args, { "label-on-top": labelOnTop, "label-hide": labelHide, "help-text": helpText }));
26
+ };
27
+ /**
28
+ * Global use
29
+ */
30
+ export const MgInputNumeric = Template.bind({});
31
+ MgInputNumeric.args = {
32
+ // Global
33
+ value: '',
34
+ identifier: 'identifier',
35
+ name: 'input-name',
36
+ type: types[0],
37
+ // Label
38
+ label: 'Label',
39
+ labelOnTop: false,
40
+ labelHide: false,
41
+ // Input
42
+ placeholder: 'placeholder',
43
+ required: true,
44
+ disabled: false,
45
+ readonly: false,
46
+ max: undefined,
47
+ min: undefined,
48
+ // Tooltip
49
+ tooltip: 'This is a tooltip',
50
+ // Help Text
51
+ helpText: 'Help text with html <strong>bold</strong>, <em>italic</em>.',
52
+ };
53
+ const TemplateSlot = args => {
54
+ const labelOnTop = args.labelOnTop;
55
+ delete args.labelOnTop;
56
+ const labelHide = args.labelHide;
57
+ delete args.labelHide;
58
+ const helpText = args.helpText;
59
+ delete args.helpText;
60
+ // return element
61
+ return (h("mg-input-numeric", Object.assign({}, args, { "label-on-top": labelOnTop, "label-hide": labelHide, "help-text": helpText }),
62
+ h("span", { slot: "append-input" }, "km")));
63
+ };
64
+ /**
65
+ * Global use
66
+ */
67
+ export const AppendSlot = TemplateSlot.bind({});
68
+ AppendSlot.args = Object.assign({}, MgInputNumeric.args);