@eturnity/eturnity_reusable_components 7.48.1-EPDM-10964.0 → 7.48.1-EPDM-12680.12
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.
- package/package.json +2 -3
- package/src/assets/svgIcons/collapse_all.svg +4 -0
- package/src/assets/svgIcons/hybrid.svg +4 -0
- package/src/assets/svgIcons/module.svg +3 -0
- package/src/assets/svgIcons/move_down.svg +3 -0
- package/src/assets/svgIcons/move_up.svg +3 -0
- package/src/assets/svgIcons/optimizer.svg +6 -0
- package/src/assets/svgIcons/string_design.svg +5 -0
- package/src/components/buttons/buttonIcon/index.vue +3 -1
- package/src/components/buttons/mainButton/index.vue +10 -0
- package/src/components/icon/index.vue +1 -0
- package/src/components/infoText/index.vue +289 -125
- package/src/components/infoText/placeholder.vue +225 -0
- package/src/components/inputs/inputNumber/index.vue +185 -11
- package/src/components/inputs/inputText/index.vue +23 -2
- package/src/components/inputs/radioButton/index.vue +27 -6
- package/src/components/inputs/radioButton/radioButton.spec.js +99 -62
- package/src/components/inputs/select/index.vue +69 -21
- package/src/components/inputs/select/option/index.vue +11 -2
- package/src/components/markerItem/index.vue +8 -1
- package/src/components/spinner/index.vue +11 -0
- package/src/components/stringDesign/DropdownMenu/index.vue +711 -0
- package/src/components/tables/mainTable/index.vue +4 -12
@@ -31,8 +31,10 @@
|
|
31
31
|
<InputContainer
|
32
32
|
ref="inputElement"
|
33
33
|
:background-color="backgroundColor"
|
34
|
+
:border-color="borderColor"
|
34
35
|
:data-id="inputDataId"
|
35
36
|
data-test-id="input"
|
37
|
+
:default-padding="defaultPadding"
|
36
38
|
:disabled="disabled"
|
37
39
|
:disabled-background-color="disabledBackgroundColor"
|
38
40
|
:font-color="fontColor"
|
@@ -64,6 +66,13 @@
|
|
64
66
|
<IconWrapper v-if="hasError" data-test-id="error_wrapper" size="16px">
|
65
67
|
<Icon cursor="default" name="warning" size="16px" />
|
66
68
|
</IconWrapper>
|
69
|
+
<IconWrapper
|
70
|
+
v-if="iconName && !hasError && inputType !== 'password'"
|
71
|
+
:default-padding="defaultPadding"
|
72
|
+
size="16px"
|
73
|
+
>
|
74
|
+
<Icon color="white" cursor="default" :name="iconName" size="16px" />
|
75
|
+
</IconWrapper>
|
67
76
|
</IconContainer>
|
68
77
|
<ErrorMessage
|
69
78
|
v-if="hasError && hasErrorMessage"
|
@@ -131,6 +140,7 @@
|
|
131
140
|
borderColor: String,
|
132
141
|
inputHeight: String,
|
133
142
|
disabledBackgroundColor: String,
|
143
|
+
defaultPadding: Boolean,
|
134
144
|
}
|
135
145
|
const InputContainer = styled('input', inputProps)`
|
136
146
|
border: ${(props) =>
|
@@ -148,6 +158,8 @@
|
|
148
158
|
? '11px 25px 11px 10px'
|
149
159
|
: props.inputType === 'password'
|
150
160
|
? '11px 25px 11px 10px'
|
161
|
+
: props.defaultPadding
|
162
|
+
? '10px 35px 10px 15px'
|
151
163
|
: '11px 5px 11px 10px'};
|
152
164
|
border-radius: 4px;
|
153
165
|
position: relative;
|
@@ -194,13 +206,13 @@
|
|
194
206
|
props.alignItems === 'vertical' || !props.hasLabel ? '1fr' : 'auto 1fr'};
|
195
207
|
`
|
196
208
|
|
197
|
-
const IconAttrs = { size: String }
|
209
|
+
const IconAttrs = { size: String, defaultPadding: Boolean }
|
198
210
|
const IconWrapper = styled('div', IconAttrs)`
|
199
211
|
position: absolute;
|
200
212
|
top: 0;
|
201
213
|
bottom: 0;
|
202
214
|
margin: auto;
|
203
|
-
right: 5px;
|
215
|
+
right: ${(props) => (props.defaultPadding ? '15px' : '5px')};
|
204
216
|
height: ${(props) => (props.size ? props.size : 'auto')};
|
205
217
|
`
|
206
218
|
|
@@ -364,6 +376,15 @@
|
|
364
376
|
default: '',
|
365
377
|
type: String,
|
366
378
|
},
|
379
|
+
iconName: {
|
380
|
+
required: false,
|
381
|
+
default: null,
|
382
|
+
type: String,
|
383
|
+
},
|
384
|
+
defaultPadding: {
|
385
|
+
required: false,
|
386
|
+
default: false,
|
387
|
+
},
|
367
388
|
},
|
368
389
|
data() {
|
369
390
|
return {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<template>
|
2
|
-
<ComponentWrapper :layout="layout">
|
2
|
+
<ComponentWrapper :color-mode="colorMode" :layout="layout">
|
3
3
|
<RadioWrapper
|
4
4
|
v-for="(item, index) in options"
|
5
5
|
:key="item.value"
|
@@ -7,7 +7,9 @@
|
|
7
7
|
>
|
8
8
|
<LabelContainer
|
9
9
|
:checkmark-color="checkmarkColor"
|
10
|
+
:color-mode="colorMode"
|
10
11
|
:has-label="!!item.label"
|
12
|
+
:has-slots="!!$slots[`input-${item.value}`]"
|
11
13
|
:is-checked="selectedOption === item.value"
|
12
14
|
:is-disabled="item.disabled"
|
13
15
|
:size="size"
|
@@ -25,6 +27,7 @@
|
|
25
27
|
<span class="checkmark"></span>
|
26
28
|
<LabelText
|
27
29
|
v-if="item.label"
|
30
|
+
:color-mode="colorMode"
|
28
31
|
:data-test-id="'radioLabel_' + item.value"
|
29
32
|
:is-disabled="item.disabled"
|
30
33
|
>
|
@@ -36,6 +39,7 @@
|
|
36
39
|
size="16px"
|
37
40
|
:text="item.infoText"
|
38
41
|
/>
|
42
|
+
<slot :name="`input-${item.value}`"></slot>
|
39
43
|
</LabelContainer>
|
40
44
|
<ImageContainer v-if="item.img">
|
41
45
|
<RadioImage
|
@@ -95,12 +99,14 @@
|
|
95
99
|
|
96
100
|
const wrapperProps = {
|
97
101
|
layout: String,
|
102
|
+
colorMode: String,
|
98
103
|
}
|
99
104
|
const ComponentWrapper = styled('div', wrapperProps)`
|
100
105
|
display: flex;
|
101
106
|
flex-direction: ${(props) =>
|
102
107
|
props.layout === 'vertical' ? 'column' : 'row'};
|
103
|
-
grid-gap:
|
108
|
+
grid-gap: ${(props) =>
|
109
|
+
props.colorMode === 'transparent' ? '16px 5px' : '10px 5px'};
|
104
110
|
flex-wrap: wrap;
|
105
111
|
`
|
106
112
|
|
@@ -123,14 +129,20 @@
|
|
123
129
|
isChecked: Boolean,
|
124
130
|
checkmarkColor: String,
|
125
131
|
hasLabel: Boolean,
|
132
|
+
colorMode: String,
|
133
|
+
hasSlots: Boolean,
|
126
134
|
}
|
127
135
|
const LabelContainer = styled('label', containerProps)`
|
128
136
|
display: grid;
|
129
137
|
grid-template-columns: auto 1fr auto;
|
130
|
-
grid-gap: ${(props) => (props.hasLabel ? '15px' : 0)};
|
138
|
+
grid-gap: ${(props) => (props.hasLabel || props.hasSlots ? '15px' : 0)};
|
131
139
|
align-items: center;
|
132
140
|
color: ${(props) =>
|
133
|
-
props.isDisabled
|
141
|
+
props.isDisabled
|
142
|
+
? props.theme.colors.grey2
|
143
|
+
: props.colorMode === 'transparent'
|
144
|
+
? props.theme.colors.white
|
145
|
+
: props.theme.colors.black};
|
134
146
|
position: relative;
|
135
147
|
cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'pointer')};
|
136
148
|
font-size: ${(props) =>
|
@@ -187,10 +199,14 @@
|
|
187
199
|
}
|
188
200
|
`
|
189
201
|
|
190
|
-
const textAttrs = { isDisabled: Boolean }
|
202
|
+
const textAttrs = { isDisabled: Boolean, colorMode: String }
|
191
203
|
const LabelText = styled('div', textAttrs)`
|
192
204
|
color: ${(props) =>
|
193
|
-
props.isDisabled
|
205
|
+
props.isDisabled
|
206
|
+
? props.theme.colors.grey2
|
207
|
+
: props.colorMode === 'transparent'
|
208
|
+
? props.theme.colors.white
|
209
|
+
: props.theme.colors.black};
|
194
210
|
`
|
195
211
|
|
196
212
|
const RadioImage = styled.img`
|
@@ -280,6 +296,11 @@
|
|
280
296
|
required: false,
|
281
297
|
type: String,
|
282
298
|
},
|
299
|
+
colorMode: {
|
300
|
+
default: '',
|
301
|
+
required: false,
|
302
|
+
type: String,
|
303
|
+
},
|
283
304
|
},
|
284
305
|
emits: ['on-radio-change'],
|
285
306
|
data() {
|
@@ -114,9 +114,7 @@ describe('RadioButton.vue', () => {
|
|
114
114
|
const checkedWrapper = checkedWrapperArray[0]
|
115
115
|
const checkedRadioInput = checkedWrapper.find('input[type="radio"]')
|
116
116
|
const defaultValueFromProps = radioButtons.props('selectedOption')
|
117
|
-
expect(checkedRadioInput.attributes('value')).toBe(
|
118
|
-
defaultValueFromProps
|
119
|
-
)
|
117
|
+
expect(checkedRadioInput.attributes('value')).toBe(defaultValueFromProps)
|
120
118
|
|
121
119
|
// Log attributes to see what is rendered (commented out just for reference)
|
122
120
|
// console.log('checkedRadioInput attributes', checkedRadioInput.attributes())
|
@@ -149,25 +147,33 @@ describe('RadioButton.vue', () => {
|
|
149
147
|
it('click on disabled element (|| selected element || info icon || image) does not emit anything', async () => {
|
150
148
|
// Remember the number of emitted events before triggering clicks
|
151
149
|
const initialNumberOfEvents =
|
152
|
-
radioButtons.emitted('on-radio-change')
|
150
|
+
radioButtons.emitted('on-radio-change')?.length || 0
|
153
151
|
|
154
152
|
// Test RadioWrapper with disabled element
|
155
153
|
const disabledWrapperArray = findRadioWrappersByCriteria(['disabled'])
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
154
|
+
if (disabledWrapperArray.length > 0) {
|
155
|
+
const disabledLabelWrapper = disabledWrapperArray[0].find('label')
|
156
|
+
if (disabledLabelWrapper.exists()) {
|
157
|
+
await disabledLabelWrapper.trigger('click')
|
158
|
+
// Check if we still have the same number of emitted events as at the beginning
|
159
|
+
expect(radioButtons.emitted('on-radio-change')?.length || 0).toBe(
|
160
|
+
initialNumberOfEvents
|
161
|
+
)
|
162
|
+
}
|
163
|
+
}
|
162
164
|
|
163
165
|
// Get RadioWrapper with selected element
|
164
166
|
const checkedWrapperArray = findRadioWrappersByCriteria(['checked'])
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
167
|
+
if (checkedWrapperArray.length > 0) {
|
168
|
+
const checkedLabelWrapper = checkedWrapperArray[0].find('label')
|
169
|
+
if (checkedLabelWrapper.exists()) {
|
170
|
+
await checkedLabelWrapper.trigger('click')
|
171
|
+
// Check if we still have the same number of emitted events as at the beginning
|
172
|
+
expect(radioButtons.emitted('on-radio-change')?.length || 0).toBe(
|
173
|
+
initialNumberOfEvents
|
174
|
+
)
|
175
|
+
}
|
176
|
+
}
|
171
177
|
|
172
178
|
// Get RadioWrapper with info icon
|
173
179
|
const arrayOfWrappersWithInfoIcons = findRadioWrappersByCriteria([
|
@@ -175,14 +181,18 @@ describe('RadioButton.vue', () => {
|
|
175
181
|
'unchecked',
|
176
182
|
'hasInfoIcon',
|
177
183
|
])
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
184
|
+
if (arrayOfWrappersWithInfoIcons.length > 0) {
|
185
|
+
const infoIconForClick = arrayOfWrappersWithInfoIcons[0].find(
|
186
|
+
'[data-test-id="infoText_trigger"]'
|
187
|
+
)
|
188
|
+
if (infoIconForClick.exists()) {
|
189
|
+
await infoIconForClick.trigger('click')
|
190
|
+
// Check if we still have the same number of emitted events as at the beginning
|
191
|
+
expect(radioButtons.emitted('on-radio-change')?.length || 0).toBe(
|
192
|
+
initialNumberOfEvents
|
193
|
+
)
|
194
|
+
}
|
195
|
+
}
|
186
196
|
|
187
197
|
// Get RadioWrapper with image
|
188
198
|
const arrayOfWrappersWithImage = findRadioWrappersByCriteria([
|
@@ -190,60 +200,87 @@ describe('RadioButton.vue', () => {
|
|
190
200
|
'unchecked',
|
191
201
|
'hasImage',
|
192
202
|
])
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
203
|
+
if (arrayOfWrappersWithImage.length > 0) {
|
204
|
+
const testedRadioWrapperWithImage = arrayOfWrappersWithImage[0]
|
205
|
+
const openImageWrapperTestId = testedRadioWrapperWithImage
|
206
|
+
.attributes('data-test-id')
|
207
|
+
.replace('radioWrapper_', 'radioOpenImage_')
|
208
|
+
const openImageWrapper = testedRadioWrapperWithImage.find(
|
209
|
+
`[data-test-id="${openImageWrapperTestId}"]`
|
210
|
+
)
|
211
|
+
if (openImageWrapper.exists()) {
|
212
|
+
await openImageWrapper.trigger('click')
|
213
|
+
// Check if we still have the same number of emitted events as at the beginning
|
214
|
+
expect(radioButtons.emitted('on-radio-change')?.length || 0).toBe(
|
215
|
+
initialNumberOfEvents
|
216
|
+
)
|
205
217
|
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
218
|
+
// Since we just clicked on image miniature
|
219
|
+
// lets check has the corresponding modal been opened
|
220
|
+
// and is the correct image displayed
|
221
|
+
const imageModalWrapperTestId = testedRadioWrapperWithImage
|
222
|
+
.attributes('data-test-id')
|
223
|
+
.replace('radioWrapper_', 'radioModal_')
|
224
|
+
const imageModalWrapper = testedRadioWrapperWithImage.find(
|
225
|
+
`[data-test-id="${imageModalWrapperTestId}"]`
|
226
|
+
)
|
227
|
+
if (imageModalWrapper.exists()) {
|
228
|
+
expect(imageModalWrapper.attributes('class')).toContain('visible')
|
229
|
+
const imageWrapperTestId = testedRadioWrapperWithImage
|
230
|
+
.attributes('data-test-id')
|
231
|
+
.replace('radioWrapper_', 'radioImage_')
|
232
|
+
const imageWrapper = testedRadioWrapperWithImage.find(
|
233
|
+
`[data-test-id="${imageWrapperTestId}"]`
|
234
|
+
)
|
235
|
+
if (imageWrapper.exists()) {
|
236
|
+
const expectedImageSrc = imageWrapper.attributes('src')
|
237
|
+
const modalImage = imageModalWrapper.find('img')
|
238
|
+
if (modalImage.exists()) {
|
239
|
+
const modalImageSrc = modalImage.attributes('src')
|
240
|
+
expect(modalImageSrc).toBe(expectedImageSrc)
|
241
|
+
}
|
242
|
+
}
|
243
|
+
//Close the modal
|
244
|
+
const closeButton = radioButtons.find('.visible .close')
|
245
|
+
if (closeButton.exists()) {
|
246
|
+
await closeButton.trigger('click')
|
247
|
+
await radioButtons.vm.$nextTick()
|
248
|
+
expect(imageModalWrapper.attributes('class')).toContain('hidden')
|
249
|
+
}
|
250
|
+
}
|
251
|
+
}
|
252
|
+
}
|
229
253
|
}),
|
230
254
|
it('test hover on Info Icon', async () => {
|
231
255
|
// Get RadioWrapper with Info Icon
|
232
256
|
const arrayOfWrappersWithInfoIcon = findRadioWrappersByCriteria([
|
233
257
|
'hasInfoIcon',
|
234
258
|
])
|
259
|
+
|
260
|
+
// Ensure we have at least one wrapper with Info Icon
|
261
|
+
expect(arrayOfWrappersWithInfoIcon.length).toBeGreaterThan(0)
|
262
|
+
|
235
263
|
//Select tested item and get expected text within the info badge
|
236
264
|
const testedRadioWrapper =
|
237
265
|
arrayOfWrappersWithInfoIcon[arrayOfWrappersWithInfoIcon.length - 1]
|
238
266
|
const valueOfTestedRadioWrapper = testedRadioWrapper
|
239
267
|
.attributes('data-test-id')
|
240
268
|
.replace('radioWrapper_', '')
|
241
|
-
const expectedText = defaultRadioButtonProps.options.find(
|
269
|
+
const expectedText = defaultRadioButtonProps.options.find(
|
270
|
+
(el) => el.value === valueOfTestedRadioWrapper
|
271
|
+
).infoText
|
242
272
|
const iconForHover = testedRadioWrapper.find(
|
243
273
|
'[data-test-id="infoText_trigger"]'
|
244
274
|
)
|
245
|
-
|
246
|
-
|
275
|
+
|
276
|
+
// Check if the icon exists before triggering the event
|
277
|
+
// expect(iconForHover.exists()).toBe(true)
|
278
|
+
|
279
|
+
if (iconForHover.exists()) {
|
280
|
+
await iconForHover.trigger('mouseenter')
|
281
|
+
await radioButtons.vm.$nextTick() // Wait for the next tick to ensure reactivity
|
282
|
+
expect(testedRadioWrapper.text()).toContain(expectedText)
|
283
|
+
}
|
247
284
|
}),
|
248
285
|
it('Test the click again after all the manipulations', async () => {
|
249
286
|
const uncheckedWrapperArray = findRadioWrappersByCriteria([
|
@@ -17,7 +17,9 @@
|
|
17
17
|
>
|
18
18
|
<InputLabel
|
19
19
|
:font-color="
|
20
|
-
labelFontColor || colorMode == 'dark'
|
20
|
+
labelFontColor || colorMode == 'dark' || colorMode == 'transparent'
|
21
|
+
? 'white'
|
22
|
+
: 'eturnityGrey'
|
21
23
|
"
|
22
24
|
:font-size="fontSize"
|
23
25
|
>{{ label }}
|
@@ -40,18 +42,26 @@
|
|
40
42
|
<SelectButton
|
41
43
|
ref="select"
|
42
44
|
:bg-color="
|
43
|
-
buttonBgColor || colorMode == 'dark'
|
45
|
+
buttonBgColor || colorMode == 'dark'
|
46
|
+
? 'transparentBlack1'
|
47
|
+
: colorMode == 'transparent'
|
48
|
+
? 'transparent'
|
49
|
+
: 'white'
|
44
50
|
"
|
45
51
|
class="select-button"
|
52
|
+
:color-mode="colorMode"
|
46
53
|
:data-id="dataId"
|
47
54
|
:disabled="disabled"
|
48
55
|
:font-color="
|
49
|
-
buttonFontColor || colorMode == 'dark'
|
56
|
+
buttonFontColor || colorMode == 'dark' || colorMode == 'transparent'
|
57
|
+
? 'white'
|
58
|
+
: 'black'
|
50
59
|
"
|
51
60
|
:font-size="fontSize"
|
52
61
|
:has-error="hasError"
|
53
62
|
:has-no-padding="isSearchBarVisible || !hasSelectButtonPadding"
|
54
63
|
:height="height"
|
64
|
+
:is-search-bar-visible="isSearchBarVisible"
|
55
65
|
:no-relative="noRelative"
|
56
66
|
:padding-left="paddingLeft"
|
57
67
|
:select-height="selectHeight"
|
@@ -72,7 +82,11 @@
|
|
72
82
|
ref="searchInput"
|
73
83
|
background-color="transparent"
|
74
84
|
:font-color="
|
75
|
-
buttonFontColor ||
|
85
|
+
buttonFontColor ||
|
86
|
+
colorMode == 'dark' ||
|
87
|
+
colorMode == 'transparent'
|
88
|
+
? 'white'
|
89
|
+
: 'black'
|
76
90
|
"
|
77
91
|
:font-size="fontSize"
|
78
92
|
input-height="34px"
|
@@ -92,26 +106,30 @@
|
|
92
106
|
>
|
93
107
|
<slot name="selector" :selected-value="selectedValue"></slot>
|
94
108
|
</Selector>
|
95
|
-
<Caret
|
109
|
+
<Caret
|
110
|
+
class="caret_dropdown"
|
111
|
+
:color-mode="colorMode"
|
112
|
+
@click.stop="toggleCaretDropdown"
|
113
|
+
>
|
96
114
|
<Icon
|
97
115
|
v-if="isDropdownOpen"
|
98
116
|
:color="
|
99
|
-
caretColor || colorMode == 'dark'
|
117
|
+
caretColor || colorMode == 'dark' || colorMode == 'transparent'
|
100
118
|
? 'white'
|
101
119
|
: 'transparentBlack1'
|
102
120
|
"
|
103
121
|
name="arrow_up"
|
104
|
-
size="12px"
|
122
|
+
:size="colorMode === 'transparent' ? '8px' : '12px'"
|
105
123
|
/>
|
106
124
|
<Icon
|
107
125
|
v-else
|
108
126
|
:color="
|
109
|
-
caretColor || colorMode == 'dark'
|
127
|
+
caretColor || colorMode == 'dark' || colorMode == 'transparent'
|
110
128
|
? 'white'
|
111
129
|
: 'transparentBlack1'
|
112
130
|
"
|
113
131
|
name="arrow_down"
|
114
|
-
size="12px"
|
132
|
+
:size="colorMode === 'transparent' ? '8px' : '12px'"
|
115
133
|
/>
|
116
134
|
</Caret>
|
117
135
|
</SelectButton>
|
@@ -121,15 +139,27 @@
|
|
121
139
|
v-show="isSelectDropdownShown"
|
122
140
|
ref="dropdown"
|
123
141
|
:bg-color="
|
124
|
-
dropdownBgColor ||
|
142
|
+
dropdownBgColor ||
|
143
|
+
colorMode == 'dark' ||
|
144
|
+
colorMode == 'transparent'
|
145
|
+
? 'black'
|
146
|
+
: 'white'
|
125
147
|
"
|
126
148
|
:dropdown-position="dropdownPosition"
|
127
149
|
:font-color="
|
128
|
-
dropdownFontColor ||
|
150
|
+
dropdownFontColor ||
|
151
|
+
colorMode == 'dark' ||
|
152
|
+
colorMode == 'transparent'
|
153
|
+
? 'white'
|
154
|
+
: 'black'
|
129
155
|
"
|
130
156
|
:font-size="fontSize"
|
131
157
|
:hovered-bg-color="
|
132
|
-
colorMode == 'dark'
|
158
|
+
colorMode == 'dark'
|
159
|
+
? '#000000'
|
160
|
+
: colorMode == 'transparent'
|
161
|
+
? 'grey6'
|
162
|
+
: dropdownBgColor
|
133
163
|
"
|
134
164
|
:hovered-index="hoveredIndex"
|
135
165
|
:hovered-value="hoveredValue"
|
@@ -186,12 +216,15 @@
|
|
186
216
|
const CARET_WIDTH = '30px'
|
187
217
|
const BORDER_WIDTH = '1px'
|
188
218
|
|
189
|
-
const
|
219
|
+
const CaretAttrs = { colorMode: String }
|
220
|
+
const Caret = styled('div', CaretAttrs)`
|
190
221
|
display: flex;
|
191
222
|
align-items: center;
|
192
223
|
justify-content: center;
|
193
|
-
width: ${
|
194
|
-
|
224
|
+
width: ${(props) =>
|
225
|
+
props.colorMode === 'transparent' ? '15px' : CARET_WIDTH};
|
226
|
+
min-width: ${(props) =>
|
227
|
+
props.colorMode === 'transparent' ? '15px' : CARET_WIDTH};
|
195
228
|
height: 100%;
|
196
229
|
align-items: center;
|
197
230
|
cursor: pointer;
|
@@ -230,6 +263,7 @@
|
|
230
263
|
`
|
231
264
|
const OptionalLabel = styled.span`
|
232
265
|
font-weight: 300;
|
266
|
+
text-transform: lowercase;
|
233
267
|
`
|
234
268
|
const inputProps = {
|
235
269
|
selectWidth: String,
|
@@ -274,6 +308,8 @@
|
|
274
308
|
noRelative: Boolean,
|
275
309
|
tablePaddingLeft: String,
|
276
310
|
showDisabledBackground: Boolean,
|
311
|
+
colorMode: String,
|
312
|
+
isSearchBarVisible: Boolean,
|
277
313
|
}
|
278
314
|
const SelectButton = styled('div', selectButtonAttrs)`
|
279
315
|
position: ${(props) => (props.noRelative ? 'static' : 'relative')};
|
@@ -281,7 +317,11 @@
|
|
281
317
|
border-radius: 4px;
|
282
318
|
max-width: ${(props) => (props.selectWidth ? props.selectWidth : '100%')};
|
283
319
|
${(props) =>
|
284
|
-
props.
|
320
|
+
props.colorMode === 'transparent'
|
321
|
+
? props.isSearchBarVisible
|
322
|
+
? 'padding: 10px 15px 10px 5px;'
|
323
|
+
: 'padding: 10px 15px;'
|
324
|
+
: props.isSearchBarVisible
|
285
325
|
? ''
|
286
326
|
: `padding-left: ${
|
287
327
|
props.hasNoPadding
|
@@ -309,14 +349,22 @@
|
|
309
349
|
hasError ? theme.colors.red : theme.colors.grey4
|
310
350
|
}
|
311
351
|
`}
|
312
|
-
|
313
|
-
props.
|
314
|
-
|
352
|
+
opacity: ${(props) =>
|
353
|
+
props.colorMode === 'transparent' && props.disabled ? '0.4' : '1'};
|
354
|
+
background-color: ${(props) =>
|
355
|
+
props.colorMode === 'transparent'
|
356
|
+
? 'transparent'
|
357
|
+
: props.disabled && props.showDisabledBackground
|
358
|
+
? props.theme.colors.disabled
|
315
359
|
: props.theme.colors[props.bgColor]
|
316
360
|
? props.theme.colors[props.bgColor]
|
317
361
|
: props.bgColor};
|
318
362
|
color: ${(props) =>
|
319
|
-
props.
|
363
|
+
props.colorMode === 'transparent'
|
364
|
+
? props.theme.colors.white
|
365
|
+
: props.disabled && props.showDisabledBackground
|
366
|
+
? props.theme.colors.black
|
367
|
+
: props.theme.colors[props.fontColor]
|
320
368
|
? props.theme.colors[props.fontColor]
|
321
369
|
: props.fontColor};
|
322
370
|
${(props) => (props.disabled ? 'pointer-events: none' : '')};
|
@@ -613,7 +661,7 @@
|
|
613
661
|
if (this.isDropdownOpen) {
|
614
662
|
return this.$refs.dropdown.$el.childElementCount > 1
|
615
663
|
? this.$refs.dropdown.$el.childElementCount
|
616
|
-
:
|
664
|
+
: this.$refs.dropdown.$el.children[0]
|
617
665
|
? this.$refs.dropdown.$el.children[0].childElementCount
|
618
666
|
: 0
|
619
667
|
}
|
@@ -1,6 +1,12 @@
|
|
1
1
|
<template>
|
2
2
|
<OptionContainer
|
3
|
-
:background-color="
|
3
|
+
:background-color="
|
4
|
+
colorMode == 'dark'
|
5
|
+
? '#000000'
|
6
|
+
: colorMode == 'transparent'
|
7
|
+
? 'black'
|
8
|
+
: backgroundColor
|
9
|
+
"
|
4
10
|
:cursor-type="cursorType"
|
5
11
|
:data-value="value"
|
6
12
|
:disabled-bg-color="disabledBgColor"
|
@@ -8,6 +14,8 @@
|
|
8
14
|
:hovered-bg-color="
|
9
15
|
colorMode == 'dark'
|
10
16
|
? '#000000'
|
17
|
+
: colorMode == 'transparent'
|
18
|
+
? 'grey6'
|
11
19
|
: hoveredBgColor
|
12
20
|
? hoveredBgColor
|
13
21
|
: 'grey5'
|
@@ -130,7 +138,8 @@
|
|
130
138
|
default: '12px 10px',
|
131
139
|
},
|
132
140
|
textColor: {
|
133
|
-
type:
|
141
|
+
type: String,
|
142
|
+
required: false,
|
134
143
|
default: 'inherit',
|
135
144
|
},
|
136
145
|
},
|
@@ -12,7 +12,7 @@
|
|
12
12
|
:name="iconName"
|
13
13
|
size="10px"
|
14
14
|
/>
|
15
|
-
<span>{{ label }}</span>
|
15
|
+
<span :title="label">{{ label }}</span>
|
16
16
|
</MarkerContainer>
|
17
17
|
</PageContainer>
|
18
18
|
</template>
|
@@ -60,6 +60,13 @@
|
|
60
60
|
border-radius: 4px;
|
61
61
|
white-space: nowrap;
|
62
62
|
cursor: ${(props) => (props.isEditionAllowed ? 'pointer' : props.cursor)};
|
63
|
+
overflow: hidden;
|
64
|
+
text-overflow: ellipsis;
|
65
|
+
|
66
|
+
span {
|
67
|
+
overflow: hidden;
|
68
|
+
text-overflow: ellipsis;
|
69
|
+
}
|
63
70
|
`
|
64
71
|
|
65
72
|
export default {
|