fleetcor-lwc 3.0.1 → 3.3.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 (72) hide show
  1. package/README.md +141 -4
  2. package/frontend/components/flt/button/button.scss +2 -1
  3. package/frontend/components/flt/inputEmail/__test__/inputEmail.test.js +39 -0
  4. package/frontend/components/flt/inputEmail/inputEmail.js +8 -0
  5. package/frontend/components/flt/inputPhone/__test__/radioItem.test.js +56 -0
  6. package/frontend/components/flt/inputPhone/arrow.svg +3 -0
  7. package/frontend/components/flt/inputPhone/close-button.svg +3 -0
  8. package/frontend/components/flt/inputPhone/flags/AD@2x.png +0 -0
  9. package/frontend/components/flt/inputPhone/flags/AL@2x.png +0 -0
  10. package/frontend/components/flt/inputPhone/flags/AT@2x.png +0 -0
  11. package/frontend/components/flt/inputPhone/flags/BA@2x.png +0 -0
  12. package/frontend/components/flt/inputPhone/flags/BE@2x.png +0 -0
  13. package/frontend/components/flt/inputPhone/flags/BG@2x.png +0 -0
  14. package/frontend/components/flt/inputPhone/flags/BY@2x.png +0 -0
  15. package/frontend/components/flt/inputPhone/flags/CH@2x.png +0 -0
  16. package/frontend/components/flt/inputPhone/flags/CZ@2x.png +0 -0
  17. package/frontend/components/flt/inputPhone/flags/DE@2x.png +0 -0
  18. package/frontend/components/flt/inputPhone/flags/DK@2x.png +0 -0
  19. package/frontend/components/flt/inputPhone/flags/EE@2x.png +0 -0
  20. package/frontend/components/flt/inputPhone/flags/ES@2x.png +0 -0
  21. package/frontend/components/flt/inputPhone/flags/FI@2x.png +0 -0
  22. package/frontend/components/flt/inputPhone/flags/FO@2x.png +0 -0
  23. package/frontend/components/flt/inputPhone/flags/FR@2x.png +0 -0
  24. package/frontend/components/flt/inputPhone/flags/GB@2x.png +0 -0
  25. package/frontend/components/flt/inputPhone/flags/GI@2x.png +0 -0
  26. package/frontend/components/flt/inputPhone/flags/GR@2x.png +0 -0
  27. package/frontend/components/flt/inputPhone/flags/HR@2x.png +0 -0
  28. package/frontend/components/flt/inputPhone/flags/HU@2x.png +0 -0
  29. package/frontend/components/flt/inputPhone/flags/IE@2x.png +0 -0
  30. package/frontend/components/flt/inputPhone/flags/IS@2x.png +0 -0
  31. package/frontend/components/flt/inputPhone/flags/IT@2x.png +0 -0
  32. package/frontend/components/flt/inputPhone/flags/LI@2x.png +0 -0
  33. package/frontend/components/flt/inputPhone/flags/LT@2x.png +0 -0
  34. package/frontend/components/flt/inputPhone/flags/LU@2x.png +0 -0
  35. package/frontend/components/flt/inputPhone/flags/LV@2x.png +0 -0
  36. package/frontend/components/flt/inputPhone/flags/MC@2x.png +0 -0
  37. package/frontend/components/flt/inputPhone/flags/MD@2x.png +0 -0
  38. package/frontend/components/flt/inputPhone/flags/ME@2x.png +0 -0
  39. package/frontend/components/flt/inputPhone/flags/MK@2x.png +0 -0
  40. package/frontend/components/flt/inputPhone/flags/MT@2x.png +0 -0
  41. package/frontend/components/flt/inputPhone/flags/NL@2x.png +0 -0
  42. package/frontend/components/flt/inputPhone/flags/NO@2x.png +0 -0
  43. package/frontend/components/flt/inputPhone/flags/PL@2x.png +0 -0
  44. package/frontend/components/flt/inputPhone/flags/PT@2x.png +0 -0
  45. package/frontend/components/flt/inputPhone/flags/RO@2x.png +0 -0
  46. package/frontend/components/flt/inputPhone/flags/RS@2x.png +0 -0
  47. package/frontend/components/flt/inputPhone/flags/RU@2x.png +0 -0
  48. package/frontend/components/flt/inputPhone/flags/SE@2x.png +0 -0
  49. package/frontend/components/flt/inputPhone/flags/SI@2x.png +0 -0
  50. package/frontend/components/flt/inputPhone/flags/SK@2x.png +0 -0
  51. package/frontend/components/flt/inputPhone/flags/SM@2x.png +0 -0
  52. package/frontend/components/flt/inputPhone/flags/UA@2x.png +0 -0
  53. package/frontend/components/flt/inputPhone/flags/VA@2x.png +0 -0
  54. package/frontend/components/flt/inputPhone/inputPhone.html +109 -0
  55. package/frontend/components/flt/inputPhone/inputPhone.js +252 -0
  56. package/frontend/components/flt/inputPhone/inputPhone.scss +288 -0
  57. package/frontend/components/flt/inputPhone/utils.js +325 -0
  58. package/frontend/components/flt/inputText/__test__/inputText.test.js +211 -0
  59. package/frontend/components/flt/inputText/inputText.html +24 -0
  60. package/frontend/components/flt/inputText/inputText.js +99 -0
  61. package/frontend/components/flt/inputText/inputText.scss +124 -0
  62. package/frontend/components/flt/modal/__test__/modal.test.js +30 -0
  63. package/frontend/components/flt/modal/modal.html +6 -0
  64. package/frontend/components/flt/modal/modal.js +8 -0
  65. package/frontend/components/flt/modal/modal.scss +34 -0
  66. package/frontend/components/flt/progressStep/__test__/progressStep.test.js +17 -1
  67. package/frontend/components/flt/progressStep/progressStep.scss +6 -6
  68. package/frontend/core/index.js +2 -0
  69. package/frontend/core/interface/InputElement.js +87 -0
  70. package/frontend/core/interface/ModalViewer.js +26 -0
  71. package/frontend/core/interface/UserDataManager.js +11 -1
  72. package/package.json +12 -7
@@ -0,0 +1,325 @@
1
+ import AL from './flags/AL@2x.png'
2
+ import AD from './flags/AD@2x.png'
3
+ import AT from './flags/AT@2x.png'
4
+ import BY from './flags/BY@2x.png'
5
+ import BE from './flags/BE@2x.png'
6
+ import BA from './flags/BA@2x.png'
7
+ import BG from './flags/BG@2x.png'
8
+ import HR from './flags/HR@2x.png'
9
+ import CZ from './flags/CZ@2x.png'
10
+ import DK from './flags/DK@2x.png'
11
+ import EE from './flags/EE@2x.png'
12
+ import FO from './flags/FO@2x.png'
13
+ import FI from './flags/FI@2x.png'
14
+ import FR from './flags/FR@2x.png'
15
+ import DE from './flags/DE@2x.png'
16
+ import GI from './flags/GI@2x.png'
17
+ import GR from './flags/GR@2x.png'
18
+ import VA from './flags/VA@2x.png'
19
+ import HU from './flags/HU@2x.png'
20
+ import IS from './flags/IS@2x.png'
21
+ import IE from './flags/IE@2x.png'
22
+ import IT from './flags/IT@2x.png'
23
+ import LV from './flags/LV@2x.png'
24
+ import LI from './flags/LI@2x.png'
25
+ import LT from './flags/LT@2x.png'
26
+ import LU from './flags/LU@2x.png'
27
+ import MK from './flags/MK@2x.png'
28
+ import MT from './flags/MT@2x.png'
29
+ import MD from './flags/MD@2x.png'
30
+ import MC from './flags/MC@2x.png'
31
+ import ME from './flags/ME@2x.png'
32
+ import NL from './flags/NL@2x.png'
33
+ import NO from './flags/NO@2x.png'
34
+ import PL from './flags/PL@2x.png'
35
+ import PT from './flags/PT@2x.png'
36
+ import RO from './flags/RO@2x.png'
37
+ import RU from './flags/RU@2x.png'
38
+ import SM from './flags/SM@2x.png'
39
+ import RS from './flags/RS@2x.png'
40
+ import SK from './flags/SK@2x.png'
41
+ import SI from './flags/SI@2x.png'
42
+ import ES from './flags/ES@2x.png'
43
+ import SE from './flags/SE@2x.png'
44
+ import CH from './flags/CH@2x.png'
45
+ import UA from './flags/UA@2x.png'
46
+ import GB from './flags/GB@2x.png'
47
+
48
+ export const COUNTRIES = [
49
+ {
50
+ name: 'Albania',
51
+ dialCode: '+355',
52
+ code: 'AL',
53
+ flag: AL
54
+ },
55
+ {
56
+ name: 'Andorra',
57
+ dialCode: '+376',
58
+ code: 'AD',
59
+ flag: AD
60
+ },
61
+ {
62
+ name: 'Austria',
63
+ dialCode: '+43',
64
+ code: 'AT',
65
+ flag: AT
66
+ },
67
+ {
68
+ name: 'Belarus',
69
+ dialCode: '+375',
70
+ code: 'BY',
71
+ flag: BY
72
+ },
73
+ {
74
+ name: 'Belgium',
75
+ dialCode: '+32',
76
+ code: 'BE',
77
+ flag: BE
78
+ },
79
+ {
80
+ name: 'Bosnia and Herzegovina',
81
+ dialCode: '+387',
82
+ code: 'BA',
83
+ flag: BA
84
+ },
85
+ {
86
+ name: 'Bulgaria',
87
+ dialCode: '+359',
88
+ code: 'BG',
89
+ flag: BG
90
+ },
91
+ {
92
+ name: 'Croatia',
93
+ dialCode: '+385',
94
+ code: 'HR',
95
+ flag: HR
96
+ },
97
+ {
98
+ name: 'Czech Republic',
99
+ dialCode: '+420',
100
+ code: 'CZ',
101
+ flag: CZ
102
+ },
103
+ {
104
+ name: 'Denmark',
105
+ dialCode: '+45',
106
+ code: 'DK',
107
+ flag: DK
108
+ },
109
+ {
110
+ name: 'Estonia',
111
+ dialCode: '+372',
112
+ code: 'EE',
113
+ flag: EE
114
+ },
115
+ {
116
+ name: 'Faroe Islands',
117
+ dialCode: '+298',
118
+ code: 'FO',
119
+ flag: FO
120
+ },
121
+ {
122
+ name: 'Finland',
123
+ dialCode: '+358',
124
+ code: 'FI',
125
+ flag: FI
126
+ },
127
+ {
128
+ name: 'France',
129
+ dialCode: '+33',
130
+ code: 'FR',
131
+ flag: FR
132
+ },
133
+ {
134
+ name: 'Germany',
135
+ dialCode: '+49',
136
+ code: 'DE',
137
+ flag: DE
138
+ },
139
+ {
140
+ name: 'Gibraltar',
141
+ dialCode: '+350',
142
+ code: 'GI',
143
+ flag: GI
144
+ },
145
+ {
146
+ name: 'Greece',
147
+ dialCode: '+30',
148
+ code: 'GR',
149
+ flag: GR
150
+ },
151
+ {
152
+ name: 'Holy See (Vatican City State)',
153
+ dialCode: '+39',
154
+ code: 'VA',
155
+ flag: VA
156
+ },
157
+ {
158
+ name: 'Hungary',
159
+ dialCode: '+36',
160
+ code: 'HU',
161
+ flag: HU
162
+ },
163
+ {
164
+ name: 'Iceland',
165
+ dialCode: '+354',
166
+ code: 'IS',
167
+ flag: IS
168
+ },
169
+ {
170
+ name: 'Ireland',
171
+ dialCode: '+353',
172
+ code: 'IE',
173
+ flag: IE
174
+ },
175
+ {
176
+ name: 'Italy',
177
+ dialCode: '+39',
178
+ code: 'IT',
179
+ flag: IT
180
+ },
181
+ {
182
+ name: 'Latvia',
183
+ dialCode: '+371',
184
+ code: 'LV',
185
+ flag: LV
186
+ },
187
+ {
188
+ name: 'Liechtenstein',
189
+ dialCode: '+423',
190
+ code: 'LI',
191
+ flag: LI
192
+ },
193
+ {
194
+ name: 'Lithuania',
195
+ dialCode: '+370',
196
+ code: 'LT',
197
+ flag: LT
198
+ },
199
+ {
200
+ name: 'Luxembourg',
201
+ dialCode: '+352',
202
+ code: 'LU',
203
+ flag: LU
204
+ },
205
+ {
206
+ name: 'Macedonia',
207
+ dialCode: '+389',
208
+ code: 'MK',
209
+ flag: MK
210
+ },
211
+ {
212
+ name: 'Malta',
213
+ dialCode: '+356',
214
+ code: 'MT',
215
+ flag: MT
216
+ },
217
+ {
218
+ name: 'Moldova',
219
+ dialCode: '+373',
220
+ code: 'MD',
221
+ flag: MD
222
+ },
223
+ {
224
+ name: 'Monaco',
225
+ dialCode: '+377',
226
+ code: 'MC',
227
+ flag: MC
228
+ },
229
+ {
230
+ name: 'Montenegro',
231
+ dialCode: '+382',
232
+ code: 'ME',
233
+ flag: ME
234
+ },
235
+ {
236
+ name: 'Netherlands',
237
+ dialCode: '+31',
238
+ code: 'NL',
239
+ flag: NL
240
+ },
241
+ {
242
+ name: 'Norway',
243
+ dialCode: '+47',
244
+ code: 'NO',
245
+ flag: NO
246
+ },
247
+ {
248
+ name: 'Poland',
249
+ dialCode: '+48',
250
+ code: 'PL',
251
+ flag: PL
252
+ },
253
+ {
254
+ name: 'Portugal',
255
+ dialCode: '+351',
256
+ code: 'PT',
257
+ flag: PT
258
+ },
259
+ {
260
+ name: 'Romania',
261
+ dialCode: '+40',
262
+ code: 'RO',
263
+ flag: RO
264
+ },
265
+ {
266
+ name: 'Russia',
267
+ dialCode: '+7',
268
+ code: 'RU',
269
+ flag: RU
270
+ },
271
+ {
272
+ name: 'San Marino',
273
+ dialCode: '+378',
274
+ code: 'SM',
275
+ flag: SM
276
+ },
277
+ {
278
+ name: 'Serbia',
279
+ dialCode: '+381',
280
+ code: 'RS',
281
+ flag: RS
282
+ },
283
+ {
284
+ name: 'Slovakia',
285
+ dialCode: '+421',
286
+ code: 'SK',
287
+ flag: SK
288
+ },
289
+ {
290
+ name: 'Slovenia',
291
+ dialCode: '+386',
292
+ code: 'SI',
293
+ flag: SI
294
+ },
295
+ {
296
+ name: 'Spain',
297
+ dialCode: '+34',
298
+ code: 'ES',
299
+ flag: ES
300
+ },
301
+ {
302
+ name: 'Sweden',
303
+ dialCode: '+46',
304
+ code: 'SE',
305
+ flag: SE
306
+ },
307
+ {
308
+ name: 'Switzerland',
309
+ dialCode: '+41',
310
+ code: 'CH',
311
+ flag: CH
312
+ },
313
+ {
314
+ name: 'Ukraine',
315
+ dialCode: '+380',
316
+ code: 'UA',
317
+ flag: UA
318
+ },
319
+ {
320
+ name: 'United Kingdom',
321
+ dialCode: '+44',
322
+ code: 'GB',
323
+ flag: GB
324
+ }
325
+ ]
@@ -0,0 +1,211 @@
1
+ import { createElement } from 'lwc'
2
+ import InputText from 'flt/inputText'
3
+
4
+ describe('flt-input-text', () => {
5
+ afterEach(() => {
6
+ while (document.body.firstChild) {
7
+ document.body.removeChild(document.body.firstChild)
8
+ }
9
+ })
10
+
11
+ it('flt-input-text base', async () => {
12
+ const inputTextElement = createElement('flt-input-text', { is: InputText })
13
+ inputTextElement.name = 'description'
14
+ inputTextElement.label = 'Description'
15
+ inputTextElement.placeholder = 'Description'
16
+ document.body.appendChild(inputTextElement)
17
+
18
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text')
19
+ inputTextElement.validate()
20
+ return Promise.resolve().then(async () => {
21
+ await expect(inputTextElement.firstChild.classList).not.toContain(
22
+ 'flt-input-text_success'
23
+ )
24
+ await expect(inputTextElement.isValid()).toBeTruthy()
25
+ let data = inputTextElement.getData()
26
+ await expect(data.placeholder).toBe('Description')
27
+
28
+ inputTextElement.value = 'Hello'
29
+ inputTextElement.dispatchEvent(new CustomEvent('change'))
30
+ inputTextElement.validate()
31
+
32
+ return Promise.resolve().then(async () => {
33
+ await expect(inputTextElement.firstChild.classList).toContain(
34
+ 'flt-input-text_success'
35
+ )
36
+ await expect(inputTextElement.isValid()).toBeTruthy()
37
+ })
38
+ })
39
+ })
40
+
41
+ it('flt-input-text required', async () => {
42
+ const inputTextElement = createElement('flt-input-text', { is: InputText })
43
+ inputTextElement.name = 'FirstName'
44
+ inputTextElement.label = 'First Name'
45
+ inputTextElement.placeholder = 'First Name'
46
+ inputTextElement.required = true
47
+ document.body.appendChild(inputTextElement)
48
+
49
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text')
50
+ inputTextElement.validate()
51
+ return Promise.resolve().then(async () => {
52
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_error')
53
+ await expect(inputTextElement.isValid()).toBeFalsy()
54
+ let data = inputTextElement.getData()
55
+ await expect(data.label).toBe('First Name')
56
+
57
+ inputTextElement.value = 'TestName'
58
+ inputTextElement.dispatchEvent(new CustomEvent('change'))
59
+ inputTextElement.validate()
60
+
61
+ return Promise.resolve().then(async () => {
62
+ await expect(inputTextElement.firstChild.classList).toContain(
63
+ 'flt-input-text_success'
64
+ )
65
+ await expect(inputTextElement.isValid()).toBeTruthy()
66
+ })
67
+ })
68
+ })
69
+
70
+ it('flt-input-text maxLength', async () => {
71
+ const inputTextElement = createElement('flt-input-text', { is: InputText })
72
+ inputTextElement.name = 'FirstName'
73
+ inputTextElement.label = 'First Name'
74
+ inputTextElement.placeholder = 'First Name'
75
+ inputTextElement.required = true
76
+ inputTextElement.maxLength = 10
77
+ document.body.appendChild(inputTextElement)
78
+
79
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text')
80
+ inputTextElement.validate()
81
+ return Promise.resolve().then(async () => {
82
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_error')
83
+ await expect(inputTextElement.isValid()).toBeFalsy()
84
+ let data = inputTextElement.getData()
85
+ await expect(data.label).toBe('First Name')
86
+
87
+ inputTextElement.value = 'TestNameToBig'
88
+ inputTextElement.dispatchEvent(new CustomEvent('change'))
89
+ inputTextElement.validate()
90
+
91
+ return Promise.resolve().then(async () => {
92
+ await expect(inputTextElement.firstChild.classList).toContain(
93
+ 'flt-input-text_error'
94
+ )
95
+ await expect(inputTextElement.isValid()).toBeFalsy()
96
+ })
97
+ })
98
+ })
99
+
100
+ it('flt-input-text minValue & maxValue', async () => {
101
+ const inputTextElement = createElement('flt-input-text', { is: InputText })
102
+ inputTextElement.name = 'FirstName'
103
+ inputTextElement.label = 'First Name'
104
+ inputTextElement.placeholder = 'First Name'
105
+ inputTextElement.required = true
106
+ inputTextElement.minValue = 10
107
+ inputTextElement.maxValue = 100
108
+ document.body.appendChild(inputTextElement)
109
+
110
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text')
111
+ inputTextElement.validate()
112
+ return Promise.resolve().then(async () => {
113
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_error')
114
+ await expect(inputTextElement.isValid()).toBeFalsy()
115
+ let data = inputTextElement.getData()
116
+ await expect(data.name).toBe('FirstName')
117
+
118
+ inputTextElement.value = 9
119
+ inputTextElement.dispatchEvent(new CustomEvent('change'))
120
+ inputTextElement.validate()
121
+ return Promise.resolve().then(async () => {
122
+ await expect(inputTextElement.firstChild.classList).toContain(
123
+ 'flt-input-text_error'
124
+ )
125
+ await expect(inputTextElement.isValid()).toBeFalsy()
126
+
127
+ inputTextElement.value = 1000
128
+ inputTextElement.dispatchEvent(new CustomEvent('change'))
129
+ inputTextElement.validate()
130
+ return Promise.resolve().then(async () => {
131
+ await expect(inputTextElement.firstChild.classList).toContain(
132
+ 'flt-input-text_error'
133
+ )
134
+ await expect(inputTextElement.isValid()).toBeFalsy()
135
+ inputTextElement.value = 50
136
+ inputTextElement.dispatchEvent(new CustomEvent('change'))
137
+ inputTextElement.validate()
138
+ return Promise.resolve().then(async () => {
139
+ await expect(inputTextElement.firstChild.classList).toContain(
140
+ 'flt-input-text_success'
141
+ )
142
+ await expect(inputTextElement.isValid()).toBeTruthy()
143
+ })
144
+ })
145
+ })
146
+ })
147
+ })
148
+
149
+ it('flt-input-text base disabled', async () => {
150
+ const inputTextElement = createElement('flt-input-text', { is: InputText })
151
+ inputTextElement.name = 'description'
152
+ inputTextElement.label = 'Description'
153
+ inputTextElement.placeholder = 'Description'
154
+ inputTextElement.disabled = true
155
+ document.body.appendChild(inputTextElement)
156
+
157
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_disabled')
158
+ inputTextElement.validate()
159
+ const input = inputTextElement.querySelector('input')
160
+ input.dispatchEvent(new Event('focus'))
161
+ input.dispatchEvent(new Event('blur'))
162
+
163
+ return Promise.resolve().then(async () => {
164
+ inputTextElement.value = 'Hello'
165
+ inputTextElement.dispatchEvent(new CustomEvent('change'))
166
+ return Promise.resolve().then(async () => {
167
+ const data = inputTextElement.getData()
168
+ await expect(data.value).toBeFalsy()
169
+
170
+ const labelElement = inputTextElement.querySelector('label')
171
+ labelElement.click()
172
+
173
+ const inputElement = inputTextElement.querySelector('input')
174
+ inputElement.value = 'Hello'
175
+ inputElement.dispatchEvent(new Event('input'))
176
+ inputElement.dispatchEvent(new Event('change'))
177
+ return Promise.resolve().then(async () => {
178
+ await expect(inputTextElement.value).toBeFalsy()
179
+ await expect(inputElement.value).toBeFalsy()
180
+ })
181
+ })
182
+ })
183
+ })
184
+
185
+ it('flt-input-text handle events', async () => {
186
+ const inputTextElement = createElement('flt-input-text', { is: InputText })
187
+ inputTextElement.name = 'description'
188
+ inputTextElement.label = 'Description'
189
+ inputTextElement.placeholder = 'Description'
190
+ document.body.appendChild(inputTextElement)
191
+ const input = inputTextElement.querySelector('input')
192
+ input.focus()
193
+ input.dispatchEvent(new Event('focus'))
194
+ return Promise.resolve().then(async () => {
195
+ await expect(inputTextElement.firstChild.classList).toContain('flt-input-text_active')
196
+ input.value = 'Hello'
197
+ input.dispatchEvent(new Event('input'))
198
+ input.dispatchEvent(new Event('change'))
199
+ input.dispatchEvent(new Event('blur'))
200
+
201
+ return Promise.resolve().then(async () => {
202
+ await expect(inputTextElement.value).toBe('Hello')
203
+ await expect(inputTextElement.firstChild.classList).toContain(
204
+ 'flt-input-text_success'
205
+ )
206
+ input.value = ''
207
+ input.dispatchEvent(new Event('blur'))
208
+ })
209
+ })
210
+ })
211
+ })
@@ -0,0 +1,24 @@
1
+ <template lwc:render-mode="light">
2
+ <div class={inputStyle}>
3
+ <label class="flt-input-text__wrapp" onclick={handleClickHandler} for={name}>
4
+ <div class="flt-input-text__placeholder">{placeholder}</div>
5
+ <div class="flt-input-text__input-block">
6
+ <span lwc:if={prefix} class="flt-input-text__prefix">{prefix}</span>
7
+ <input
8
+ id={name}
9
+ onfocus={handleFocused}
10
+ onblur={handleBlur}
11
+ class="flt-input-text__input"
12
+ maxlength={maxLength}
13
+ type={type}
14
+ disabled={disabled}
15
+ value={displayValue}
16
+ oninput={handleInput}
17
+ onchange={handleChange}
18
+ name={name}
19
+ placeholder={placeholder} />
20
+ </div>
21
+ </label>
22
+ <div class="flt-input-text__error">{errorMessage}</div>
23
+ </div>
24
+ </template>
@@ -0,0 +1,99 @@
1
+ import { api } from 'lwc'
2
+ import { InputElement } from 'fleetcor-lwc'
3
+ import './inputText.scss'
4
+
5
+ export default class InputText extends InputElement {
6
+ focused
7
+ touched
8
+ @api prefix
9
+ @api type = 'text'
10
+ @api placeholderVisible
11
+ @api errorMessage
12
+
13
+ get displayValue() {
14
+ return this.value || ''
15
+ }
16
+
17
+ @api
18
+ validate() {
19
+ if (this.disabled) return
20
+ this.touched = true
21
+ this.error = !this.isValid()
22
+ }
23
+
24
+ @api getData(silent) {
25
+ return {
26
+ ...super.getData(silent),
27
+ type: this.type,
28
+ prefix: this.prefix
29
+ }
30
+ }
31
+
32
+ handleClickHandler(event) {
33
+ if (this.disabled) {
34
+ event.preventDefault()
35
+ }
36
+ }
37
+
38
+ get inputStyle() {
39
+ return this.generateClassNameList({
40
+ 'flt-input-text': true,
41
+ 'flt-input-text_disabled': this.disabled,
42
+ 'flt-input-text_active': this.value || this.focused || this.placeholderVisible,
43
+ 'flt-input-text_error': this.touched && !this.isValid(),
44
+ 'flt-input-text_success': this.value && this.isValid()
45
+ })
46
+ }
47
+
48
+ handleFocused(event) {
49
+ event.stopPropagation()
50
+ if (this.disabled) return
51
+ this.focused = true
52
+ this.dispatchEvent(
53
+ new CustomEvent('focus_happend', {
54
+ detail: null,
55
+ cancelable: true,
56
+ bubbles: true
57
+ })
58
+ )
59
+ }
60
+
61
+ handleBlur(event) {
62
+ event.stopPropagation()
63
+ if (this.disabled) return
64
+ this.focused = false
65
+ this.touched = true
66
+ this.value = (event.target.value || '').trimEnd()
67
+ event.target.value = this.value
68
+ this.dispatchEvent(
69
+ new CustomEvent('blur_happend', {
70
+ detail: null,
71
+ cancelable: true,
72
+ bubbles: true
73
+ })
74
+ )
75
+ }
76
+
77
+ handleInput(event) {
78
+ event.stopPropagation()
79
+ if (this.disabled) {
80
+ event.target.value = ''
81
+ event.preventDefault()
82
+ } else {
83
+ this.value = event.target.value
84
+ this.dispatchEvent(
85
+ new CustomEvent('change', {
86
+ detail: this.getData()
87
+ })
88
+ )
89
+ }
90
+ }
91
+
92
+ handleChange(event) {
93
+ if (this.disabled) {
94
+ event.target.value = ''
95
+ }
96
+ event.stopPropagation()
97
+ event.preventDefault()
98
+ }
99
+ }