@eturnity/eturnity_reusable_components 7.37.5-EPDM-11205.0 → 7.37.5-qa-elisee-7.42.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_reusable_components",
3
- "version": "7.37.5-EPDM-11205.0",
3
+ "version": "7.37.5-qa-elisee-7.42.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="29" height="29" fill="#333" viewBox="0 0 29 29"><path d="m10.5 14 4-8 4 8z"/><path class='fix' fill="#ccc" d="m10.5 16 4 8 4-8z"/></svg>
@@ -0,0 +1,6 @@
1
+ <svg fill="#000000" height="800px" width="800px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
2
+ viewBox="0 0 512 512" xml:space="preserve">
3
+ <path d="M256,0C114.617,0,0,114.615,0,256s114.617,256,256,256s256-114.615,256-256S397.383,0,256,0z M224,320
4
+ c0,8.836-7.164,16-16,16h-32c-8.836,0-16-7.164-16-16V192c0-8.836,7.164-16,16-16h32c8.836,0,16,7.164,16,16V320z M352,320
5
+ c0,8.836-7.164,16-16,16h-32c-8.836,0-16-7.164-16-16V192c0-8.836,7.164-16,16-16h32c8.836,0,16,7.164,16,16V320z"/>
6
+ </svg>
@@ -35,6 +35,9 @@ const theme = {
35
35
  tablet: '768px',
36
36
  tabletLarge: '950px',
37
37
  },
38
+ fonts: {
39
+ mainFont: '"Figtree", sans-serif',
40
+ },
38
41
  borderRadius: '4px',
39
42
  }
40
43
 
@@ -111,10 +111,10 @@
111
111
  props.backgroundColor ? props.backgroundColor : 'transparent'};
112
112
  padding: ${(props) => (props.backgroundColor ? '3px' : '0')};
113
113
  }
114
- svg path {
114
+ svg path:not(.fix) {
115
115
  ${({ theme, color }) => color && `fill: ${theme.colors[color] || color};`}
116
116
  }
117
- &:hover svg path {
117
+ &:hover svg path:not(.fix) {
118
118
  ${({ theme, hoveredColor }) =>
119
119
  hoveredColor && `fill: ${theme.colors[hoveredColor] || hoveredColor};`}
120
120
  }
@@ -1,6 +1,10 @@
1
1
  <template>
2
- <InfoContainer>
3
- <RCIcon name="info" size="24px" :color="color" />
2
+ <InfoContainer
3
+ background-color="backgrounColor"
4
+ :border-color="borderColor"
5
+ :has-dashed-border="hasDashedBorder"
6
+ >
7
+ <RCIcon :color="color" name="info" size="24px" />
4
8
  <TextContainer>
5
9
  <slot></slot>
6
10
  </TextContainer>
@@ -10,12 +14,24 @@
10
14
  <script>
11
15
  import styled from 'vue3-styled-components'
12
16
  import RCIcon from '../icon'
13
-
14
- const InfoContainer = styled.div`
17
+ const propsContainer = {
18
+ backgroundColor: String,
19
+ hasDashedBorder: Boolean,
20
+ borderColor: String,
21
+ }
22
+ const InfoContainer = styled('div', propsContainer)`
15
23
  display: flex;
16
24
  gap: 15px;
17
- padding: 20px;
18
- border: 1px dashed ${(props) => props.theme.colors.grey4};
25
+ padding: 15px;
26
+ border: 1px ${(props) => (props.hasDashedBorder ? 'dashed' : 'solid')}
27
+ ${(props) =>
28
+ props.theme.colors[props.borderColor]
29
+ ? props.theme.colors[props.borderColor]
30
+ : props.borderColor};
31
+ background-color: ${(props) =>
32
+ props.theme.colors[props.backgroundColor]
33
+ ? props.theme.colors[props.backgroundColor]
34
+ : props.backgroundColor};
19
35
  border-radius: 4px;
20
36
  `
21
37
 
@@ -33,8 +49,19 @@
33
49
  },
34
50
  props: {
35
51
  color: {
36
- required: false
37
- }
38
- }
52
+ required: false,
53
+ },
54
+ backgrounColor: {
55
+ required: false,
56
+ },
57
+ hasDashedBorder: {
58
+ required: false,
59
+ default: true,
60
+ },
61
+ borderColor: {
62
+ required: false,
63
+ default: 'grey4',
64
+ },
65
+ },
39
66
  }
40
67
  </script>
@@ -18,10 +18,11 @@
18
18
  :align-arrow="alignArrow"
19
19
  :half-computed-text-info-width="halfComputedTextInfoWidth"
20
20
  :icon-size="size"
21
+ :info-position="infoPosition"
21
22
  :max-width="maxWidth"
22
23
  :width="width"
23
24
  ><slot></slot>
24
- <span v-html="text"></span>
25
+ <span v-if="text.length > 0" v-html="text"></span>
25
26
  </TextOverlay>
26
27
  </IconWrapper>
27
28
  </ComponentWrapper>
@@ -44,10 +45,14 @@
44
45
  alignArrow: String,
45
46
  width: String,
46
47
  halfComputedTextInfoWidth: Number,
48
+ infoPosition: String,
47
49
  }
48
50
  const TextOverlay = styled('div', textAttrs)`
49
51
  position: absolute;
50
- top: ${(props) => 'calc(' + props.iconSize + ' + 15px)'};
52
+ ${(props) =>
53
+ props.infoPosition == 'top'
54
+ ? 'bottom : calc(' + props.iconSize + ' + 15px)'
55
+ : 'top : calc(' + props.iconSize + ' + 15px)'};
51
56
  ${(props) =>
52
57
  props.alignArrow === 'left'
53
58
  ? 'left: calc(' + props.iconSize + ' /2 - 18px)'
@@ -63,14 +68,17 @@
63
68
  font-weight: 400;
64
69
  line-height: normal;
65
70
  border-radius: 4px;
66
- z-index: 99;
71
+ z-index: 999;
67
72
  color: ${(props) => props.theme.colors.white};
68
73
 
69
74
  :before {
70
75
  content: '';
71
76
  background-color: ${(props) => props.theme.colors.black};
72
77
  position: absolute;
73
- top: 2px;
78
+
79
+ ${(props) =>
80
+ props.infoPosition == 'top' ? 'bottom : -10px' : 'top: 2px'};
81
+
74
82
  ${(props) =>
75
83
  props.alignArrow === 'left'
76
84
  ? 'left:40px;'
@@ -114,26 +122,37 @@
114
122
  props: {
115
123
  text: {
116
124
  required: false,
125
+ default: '',
126
+ type: String,
117
127
  },
118
128
  size: {
119
129
  required: false,
120
130
  default: '14px',
131
+ type: String,
132
+ },
133
+ infoPosition: {
134
+ required: false,
135
+ default: 'bottom',
136
+ type: String,
121
137
  },
122
138
  alignArrow: {
123
139
  required: false,
124
140
  default: 'center',
141
+ type: String,
125
142
  },
126
143
  openTrigger: {
127
144
  required: false,
128
145
  default: 'onHover', // onHover, onClick
146
+ type: String,
129
147
  },
130
148
  width: {
131
149
  required: false,
132
150
  default: '200px',
151
+ type: String,
133
152
  },
134
153
  maxWidth: {
135
- type: String,
136
154
  default: '400px',
155
+ type: String,
137
156
  },
138
157
  },
139
158
  data() {
@@ -3,6 +3,7 @@ import InputText from './index.vue'
3
3
  export default {
4
4
  title: 'InputText',
5
5
  component: InputText,
6
+ tags: ['autodocs'],
6
7
  // argTypes: {},
7
8
  }
8
9
 
@@ -42,8 +43,8 @@ Default.args = {
42
43
  textAlign: 'left',
43
44
  }
44
45
 
45
- export const hasError = Template.bind({})
46
- hasError.args = {
46
+ export const HasError = Template.bind({})
47
+ HasError.args = {
47
48
  placeholder: 'Enter Value',
48
49
  errorMessage: 'This field is required',
49
50
  isError: true,
@@ -2,22 +2,26 @@
2
2
  <Container>
3
3
  <InputWrapper
4
4
  :align-items="alignItems"
5
+ data-test-id="input_wrapper"
5
6
  :has-label="!!label && label.length > 0"
6
7
  >
7
8
  <LabelWrapper v-if="label">
8
9
  <InputLabel
10
+ ref="label"
9
11
  :data-id="labelDataId"
12
+ data-test-id="label_wrapper"
10
13
  :font-size="fontSize"
11
14
  :label-font-color="labelFontColor"
12
15
  >
13
16
  {{ label }}
14
- <OptionalLabel v-if="labelOptional">
17
+ <OptionalLabel v-if="labelOptional" data-test-id="label_optional">
15
18
  ({{ $gettext('Optional') }})
16
19
  </OptionalLabel>
17
20
  </InputLabel>
18
21
  <InfoText
19
- v-if="infoTextMessage"
22
+ v-if="infoTextMessage != ''"
20
23
  :align-arrow="infoTextAlign"
24
+ data-test-id="info_text_message"
21
25
  :size="fontSize ? fontSize : '16px'"
22
26
  :text="infoTextMessage"
23
27
  />
@@ -28,6 +32,7 @@
28
32
  ref="inputElement"
29
33
  :background-color="backgroundColor"
30
34
  :data-id="inputDataId"
35
+ data-test-id="input"
31
36
  :disabled="disabled"
32
37
  :disabled-background-color="disabledBackgroundColor"
33
38
  :font-color="fontColor"
@@ -44,21 +49,26 @@
44
49
  :type="inputTypeData"
45
50
  :value="value"
46
51
  @blur="onInputBlur"
52
+ @focus="onInputFocus"
47
53
  @input="onChangeHandler"
48
54
  @keyup.enter="onEnterPress"
49
55
  />
50
56
  <IconWrapper
51
57
  v-if="inputType === 'password' && !isError"
58
+ data-test-id="password_visiblity_change_icon"
52
59
  size="20px"
53
60
  @click="toggleShowPassword()"
54
61
  >
55
62
  <Icon name="current_variant" size="20px" />
56
63
  </IconWrapper>
57
- <IconWrapper v-if="hasError" size="16px">
64
+ <IconWrapper v-if="hasError" data-test-id="error_wrapper" size="16px">
58
65
  <Icon cursor="default" name="warning" size="16px" />
59
66
  </IconWrapper>
60
67
  </IconContainer>
61
- <ErrorMessage v-if="hasError && hasErrorMessage">
68
+ <ErrorMessage
69
+ v-if="hasError && hasErrorMessage"
70
+ data-test-id="error_message_wrapper"
71
+ >
62
72
  {{ dynamicErrorMessage }}
63
73
  </ErrorMessage>
64
74
  </InputErrorWrapper>
@@ -236,93 +246,123 @@
236
246
  placeholder: {
237
247
  required: false,
238
248
  default: '',
249
+ type: String,
239
250
  },
240
251
  alignItems: {
241
252
  required: false,
242
253
  default: 'horizontal',
254
+ type: String,
255
+ validator(value) {
256
+ return ['horizontal', 'vertical'].includes(value)
257
+ },
243
258
  },
244
259
  isError: {
245
260
  required: false,
246
261
  default: false,
262
+ type: Boolean,
247
263
  },
248
264
  inputWidth: {
249
265
  required: false,
250
266
  default: null,
267
+ type: String,
251
268
  },
252
269
  inputHeight: {
253
270
  required: false,
254
271
  default: null,
272
+ type: String,
255
273
  },
256
274
  minWidth: {
257
275
  required: false,
258
276
  default: null,
277
+ type: String,
259
278
  },
260
279
  value: {
261
280
  required: true,
262
281
  default: null,
282
+ type: String,
263
283
  },
264
284
  errorMessage: {
265
285
  required: false,
266
286
  default: '',
287
+ type: String,
267
288
  },
268
289
  infoTextMessage: {
269
290
  required: false,
291
+ default: '',
292
+ type: String,
270
293
  },
271
294
  infoTextAlign: {
272
295
  required: false,
296
+ default: 'left',
297
+ type: String,
273
298
  },
274
299
  label: {
275
300
  required: false,
301
+ default: '',
302
+ type: String,
276
303
  },
277
304
  labelOptional: {
278
305
  required: false,
279
306
  default: false,
307
+ type: Boolean,
280
308
  },
281
309
  noBorder: {
282
310
  required: false,
283
311
  default: false,
312
+ type: Boolean,
284
313
  },
285
314
  disabled: {
286
315
  required: false,
287
316
  default: false,
317
+ type: Boolean,
288
318
  },
289
319
  fontSize: {
290
320
  required: false,
291
321
  default: null,
322
+ type: String,
292
323
  },
293
324
  inputType: {
294
325
  required: false,
295
326
  default: 'text',
327
+ type: String,
296
328
  },
297
329
  labelFontColor: {
298
330
  required: false,
299
331
  default: 'black',
332
+ type: String,
300
333
  },
301
334
  backgroundColor: {
302
335
  required: false,
336
+ type: String,
303
337
  },
304
338
  disabledBackgroundColor: {
305
339
  required: false,
306
340
  default: null,
341
+ type: String,
307
342
  },
308
343
  fontColor: {
309
344
  required: false,
310
345
  default: 'black',
346
+ type: String,
311
347
  },
312
348
  hasFocus: {
313
349
  required: false,
314
350
  default: false,
351
+ type: Boolean,
315
352
  },
316
353
  borderColor: {
317
354
  required: false,
355
+ type: String,
318
356
  },
319
357
  labelDataId: {
320
358
  required: false,
321
359
  default: '',
360
+ type: String,
322
361
  },
323
362
  inputDataId: {
324
363
  required: false,
325
364
  default: '',
365
+ type: String,
326
366
  },
327
367
  },
328
368
  data() {
@@ -335,12 +375,10 @@
335
375
  return this.isError || this.error
336
376
  },
337
377
  hasErrorMessage() {
338
- return (
339
- (this.errorMessage && this.errorMessage.length > 0) || this.errMessage
340
- )
378
+ return this.errorMessage && this.errorMessage.length > 0
341
379
  },
342
380
  dynamicErrorMessage() {
343
- return this.errMessage || this.errorMessage
381
+ return this.errorMessage
344
382
  },
345
383
  },
346
384
  watch: {
@@ -367,6 +405,9 @@
367
405
  this.validateInput($event.target.value)
368
406
  this.$emit('input-blur', $event.target.value)
369
407
  },
408
+ onInputFocus($event) {
409
+ this.$emit('input-focus', $event.target.value)
410
+ },
370
411
  toggleShowPassword() {
371
412
  this.inputTypeData =
372
413
  this.inputTypeData === 'password' ? 'text' : 'password'