@eturnity/eturnity_reusable_components 7.22.0 → 7.22.2

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/babel.config.js CHANGED
@@ -1,5 +1,3 @@
1
1
  module.exports = {
2
- presets: [
3
- '@vue/cli-plugin-babel/preset'
4
- ]
5
- }
2
+ presets: ['@vue/cli-plugin-babel/preset']
3
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_reusable_components",
3
- "version": "7.22.0",
3
+ "version": "7.22.2",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vue-cli-service serve",
@@ -23,7 +23,6 @@
23
23
  },
24
24
  "devDependencies": {
25
25
  "@babel/core": "7.12.16",
26
- "@babel/eslint-parser": "7.12.16",
27
26
  "@vue/cli-plugin-babel": "5.0.8",
28
27
  "@vue/cli-plugin-eslint": "5.0.8",
29
28
  "@vue/cli-service": "5.0.8",
@@ -0,0 +1,3 @@
1
+ <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M5 10C7.76142 10 10 7.76142 10 5C10 2.23858 7.76142 0 5 0C2.23858 0 0 2.23858 0 5C0 7.76142 2.23858 10 5 10ZM5.875 5.05243V2.125H4.125V5.92743L6.19061 7.47663L7.24061 6.07663L5.875 5.05243Z" fill="white"/>
3
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg width="10" height="16" viewBox="0 0 10 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M4 2C4 3.10457 3.10457 4 2 4C0.89543 4 0 3.10457 0 2C0 0.89543 0.89543 0 2 0C3.10457 0 4 0.89543 4 2Z" fill="#B2B9C5"/>
3
+ <path d="M10 2C10 3.10457 9.10457 4 8 4C6.89543 4 6 3.10457 6 2C6 0.89543 6.89543 0 8 0C9.10457 0 10 0.89543 10 2Z" fill="#B2B9C5"/>
4
+ <path d="M4 8C4 9.10457 3.10457 10 2 10C0.89543 10 0 9.10457 0 8C0 6.89543 0.89543 6 2 6C3.10457 6 4 6.89543 4 8Z" fill="#B2B9C5"/>
5
+ <path d="M10 8C10 9.10457 9.10457 10 8 10C6.89543 10 6 9.10457 6 8C6 6.89543 6.89543 6 8 6C9.10457 6 10 6.89543 10 8Z" fill="#B2B9C5"/>
6
+ <path d="M4 14C4 15.1046 3.10457 16 2 16C0.89543 16 0 15.1046 0 14C0 12.8954 0.89543 12 2 12C3.10457 12 4 12.8954 4 14Z" fill="#B2B9C5"/>
7
+ <path d="M10 14C10 15.1046 9.10457 16 8 16C6.89543 16 6 15.1046 6 14C6 12.8954 6.89543 12 8 12C9.10457 12 10 12.8954 10 14Z" fill="#B2B9C5"/>
8
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="12" viewBox="0 0 14 12" fill="none">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M9.09548 3.62522L10.8209 1.59974L9.53978 0.508423L0.199219 11.4916H13.7992V9.80865H11.9546C11.7571 7.4083 10.7198 5.25339 9.09548 3.62522ZM10.2648 9.80859C10.0777 7.91689 9.26383 6.22054 8.00053 4.91205L3.83843 9.80864L10.2648 9.80859Z" fill="white"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="10" viewBox="0 0 14 10" fill="none">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M0.199219 9.85718V0.142822H1.75351L1.75352 9.85718H0.199219ZM5.38021 8.20572L2.14209 4.99999L5.38021 1.79425V4.19855L8.61833 4.19855V1.79425L11.8564 4.99999L8.61832 8.20572L8.61833 5.80142L5.38021 5.80142V8.20572ZM12.2449 0.142822V9.85718H13.7992V0.142822H12.2449Z" fill="white"/>
3
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
2
+ <path d="M5.33336 14L0 8.66664L1.06667 7.59997L6.40003 12.9333L5.33336 14Z" fill="white"/>
3
+ <path d="M8.42227 9.97776L4.00002 9.99998L4.02224 5.57774L5.67225 7.22775L7.22781 5.67219L5.57781 4.02218L10.0001 3.99996L9.97783 8.4222L8.32782 6.7722L6.77226 8.32776L8.42227 9.97776Z" fill="white"/>
4
+ <path d="M7.59997 1.06667L12.9333 6.40003L14 5.33336L8.66664 0L7.59997 1.06667Z" fill="white"/>
5
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
2
+ <path d="M12.4444 0H1.55556C0.7 0 0 0.7 0 1.55556V12.4444C0 13.3 0.7 14 1.55556 14H12.4444C13.3 14 14 13.3 14 12.4444V1.55556C14 0.7 13.3 0 12.4444 0ZM7.80111 3.15778L8.62556 2.33333L9.72222 3.43L10.8189 2.33333L11.6433 3.15778L10.5467 4.25444L11.6433 5.35111L10.8189 6.17556L9.72222 5.08667L8.62556 6.18333L7.80111 5.35889L8.89778 4.26222L7.80111 3.15778ZM2.52778 3.67111H6.41667V4.83778H2.52778V3.67111ZM6.61111 10.1111H5.05556V11.6667H3.88889V10.1111H2.33333V8.94444H3.88889V7.38889H5.05556V8.94444H6.61111V10.1111ZM11.6667 11.0833H7.77778V9.91667H11.6667V11.0833ZM11.6667 9.13889H7.77778V7.97222H11.6667V9.13889Z" fill="#263238"/>
3
+ </svg>
@@ -100,10 +100,12 @@
100
100
  <option-title> {{ filter.selectedText }} </option-title>
101
101
  </template>
102
102
  <template #dropdown>
103
- <dropdown-checkbox-container @click.stop>
103
+ <dropdown-checkbox-container
104
+ v-for="(filterOption, optionIdx) in filter.choices"
105
+ :key="optionIdx + 'optionIdx'"
106
+ @click.stop
107
+ >
104
108
  <checkbox
105
- v-for="(filterOption, optionIdx) in filter.choices"
106
- :key="optionIdx + 'optionIdx'"
107
109
  :label="filterOption.text"
108
110
  :isChecked="filterOption.selected"
109
111
  @on-event-handler="
@@ -268,6 +270,12 @@
268
270
  :text="buttonText.cancel"
269
271
  @click="$emit('on-cancel-view')"
270
272
  />
273
+ <reset-container v-if="!filterViews || !filterViews.length">
274
+ <reset-button @click="$emit('on-reset-filters')">
275
+ <icon :name="'update'" size="14px" :color="theme.colors.blue" />
276
+ <div>{{ $gettext('reset_filters') }}</div>
277
+ </reset-button>
278
+ </reset-container>
271
279
  </button-container>
272
280
  </container-wrapper>
273
281
  </template>
@@ -329,6 +337,16 @@ const ButtonContainer = styled.div`
329
337
  padding: 15px;
330
338
  `
331
339
 
340
+ const ResetContainer = styled.div`
341
+ display: grid;
342
+ align-content: center;
343
+ margin-left: auto;
344
+ div {
345
+ margin-top: 0;
346
+ align-self: center;
347
+ }
348
+ `
349
+
332
350
  const ColumnContainer = styled.div``
333
351
 
334
352
  const DragContainer = styled.div`
@@ -376,7 +394,7 @@ const DropdownCheckboxContainer = styled.div`
376
394
  display: grid;
377
395
  gap: 6px;
378
396
  width: 100%;
379
- padding: 12px 10px;
397
+ padding: 7px 10px;
380
398
  background: ${(props) => props.theme.colors.grey5};
381
399
  `
382
400
 
@@ -455,6 +473,7 @@ export default {
455
473
  DeleteIcon,
456
474
  UpperContainer,
457
475
  ResetButton,
476
+ ResetContainer,
458
477
  VueDatePicker
459
478
  },
460
479
  props: {
@@ -70,6 +70,9 @@ export default {
70
70
  },
71
71
  settingsTranslations: {
72
72
  required: false
73
+ },
74
+ closeDropdown: {
75
+ required: false
73
76
  }
74
77
  },
75
78
  data() {
@@ -122,6 +125,7 @@ export default {
122
125
  this.$emit('on-filter-view-select', item)
123
126
  },
124
127
  onViewDelete(item) {
128
+ this.onToggleDropdown()
125
129
  this.$emit('on-filter-view-delete', item)
126
130
  },
127
131
  onApplyCurrentView() {
@@ -138,6 +142,13 @@ export default {
138
142
  },
139
143
  beforeDestroy() {
140
144
  document.removeEventListener('click', this.clickOutside)
145
+ },
146
+ watch: {
147
+ closeDropdown(newVal) {
148
+ if (newVal) {
149
+ this.isDropdownOpen = false
150
+ }
151
+ }
141
152
  }
142
153
  }
143
154
  </script>
@@ -26,7 +26,7 @@
26
26
  //To use:
27
27
  // <info-text
28
28
  // text="Veritatis et quasi architecto beatae vitae"
29
- // size="20"
29
+ // size="20px"
30
30
  // alignArrow="right" // which side the arrow should be on
31
31
  // />
32
32
  import theme from '../../assets/theme.js'
@@ -3,10 +3,11 @@
3
3
  <container
4
4
  :checkColor="checkColor"
5
5
  :size="size"
6
- :hasLabel="hasLabel"
6
+ :hasLabel="label && !!label.length"
7
7
  :backgroundColor="backgroundColor"
8
8
  :isChecked="isChecked"
9
9
  :isDisabled="isDisabled"
10
+ :cursorType="cursorType"
10
11
  >
11
12
  <input-checkbox
12
13
  type="checkbox"
@@ -17,7 +18,7 @@
17
18
  <check-wrapper :hasLabel="hasLabel">
18
19
  <span class="checkmark"></span>
19
20
  </check-wrapper>
20
- <label-text v-if="hasLabel">{{ label }}</label-text>
21
+ <label-text v-if="label && !!label.length">{{ label }}</label-text>
21
22
  </container>
22
23
  </component-wrapper>
23
24
  </template>
@@ -33,6 +34,7 @@
33
34
  // size="small"
34
35
  // backgroundColor="red"
35
36
  // :isDisabled="true"
37
+ // cursorType="default"
36
38
  // />
37
39
  import styled from 'vue3-styled-components'
38
40
 
@@ -55,7 +57,8 @@ const containerAttrs = {
55
57
  hasLabel: Boolean,
56
58
  backgroundColor: String,
57
59
  isChecked: Boolean,
58
- isDisabled: Boolean
60
+ isDisabled: Boolean,
61
+ cursorType: String
59
62
  }
60
63
  const Container = styled('label', containerAttrs)`
61
64
  display: grid;
@@ -64,7 +67,7 @@ const Container = styled('label', containerAttrs)`
64
67
  align-content: center;
65
68
  color: ${(props) => props.theme.colors.black};
66
69
  position: relative;
67
- cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'pointer')};
70
+ cursor: ${(props) => (props.isDisabled ? 'not-allowed' : props.cursorType)};
68
71
  font-size: 16px;
69
72
  user-select: none;
70
73
 
@@ -89,7 +92,7 @@ const Container = styled('label', containerAttrs)`
89
92
  : props.theme.colors.green
90
93
  : props.isDisabled
91
94
  ? props.theme.colors.lightGray
92
- : '#fff'};
95
+ : props.theme.colors.white};
93
96
  border-radius: 4px;
94
97
  border: 1px solid
95
98
  ${(props) =>
@@ -183,6 +186,10 @@ export default {
183
186
  dataId: {
184
187
  type: String,
185
188
  default: ''
189
+ },
190
+ cursorType: {
191
+ type: String,
192
+ default: 'pointer'
186
193
  }
187
194
  },
188
195
  computed: {
@@ -313,8 +313,7 @@ export default {
313
313
  return {
314
314
  textInput: '',
315
315
  isFocused: false,
316
- warningIcon: warningIcon,
317
- isBlurred: false
316
+ warningIcon: warningIcon
318
317
  }
319
318
  },
320
319
  props: {
@@ -549,8 +548,7 @@ export default {
549
548
  return array
550
549
  },
551
550
  onInput(event) {
552
- if (this.isBlurred) {
553
- this.isBlurred = false
551
+ if (!this.isFocused) {
554
552
  return
555
553
  }
556
554
  if (event.target.value === '') {
@@ -567,8 +565,6 @@ export default {
567
565
  },
568
566
  onInputBlur(e) {
569
567
  this.isFocused = false
570
- // setting isBlurred so we don't trigger onInput as well
571
- this.isBlurred = true
572
568
  let value = e.target.value
573
569
  let evaluatedInput = this.onEvaluateCode(e)
574
570
  this.onChangeHandler(evaluatedInput ? evaluatedInput : value)
@@ -328,7 +328,7 @@ export default {
328
328
  }
329
329
  },
330
330
  methods: {
331
- onEnterPress(event){
331
+ onEnterPress() {
332
332
  this.$emit('on-enter-click')
333
333
  this.$refs.inputElement.$el.blur()
334
334
  },
@@ -1,12 +1,14 @@
1
1
  <template>
2
2
  <Container
3
3
  :selectWidth="selectWidth"
4
+ :noRelative="noRelative"
4
5
  @mouseenter="mouseEnterHandler"
5
6
  @mouseleave="mouseLeaveHandler"
6
7
  >
7
8
  <input-wrapper
8
9
  :hasLabel="!!label && label.length > 0"
9
10
  :alignItems="alignItems"
11
+ :noRelative="noRelative"
10
12
  >
11
13
  <label-wrapper v-if="label" :data-id="labelDataId">
12
14
  <input-label
@@ -47,6 +49,9 @@
47
49
  :showBorder="showBorder"
48
50
  :data-id="dataId"
49
51
  :paddingLeft="paddingLeft"
52
+ :tablePaddingLeft="tablePaddingLeft"
53
+ :noRelative="noRelative"
54
+ :showDisabledBackground="showDisabledBackground"
50
55
  >
51
56
  <draggableInputHandle
52
57
  v-if="isDraggable && !isSearchBarVisible"
@@ -76,7 +81,7 @@
76
81
  >
77
82
  <slot name="selector" :selectedValue="selectedValue"></slot>
78
83
  </selector>
79
- <Caret @click.stop="toggleCaretDropdown">
84
+ <Caret @click.stop="toggleCaretDropdown" class="caret_dropdown">
80
85
  <icon
81
86
  v-if="isDropdownOpen"
82
87
  name="arrow_up"
@@ -99,7 +104,7 @@
99
104
  />
100
105
  </Caret>
101
106
  </selectButton>
102
- <DropdownWrapper ref="dropdownWrapperRef">
107
+ <DropdownWrapper ref="dropdownWrapperRef" :noRelative="noRelative">
103
108
  <Teleport to="#portal-target">
104
109
  <selectDropdown
105
110
  ref="dropdown"
@@ -118,10 +123,13 @@
118
123
  :fontColor="
119
124
  dropdownFontColor || colorMode == 'dark' ? 'white' : 'black'
120
125
  "
126
+ :noRelative="noRelative"
121
127
  :fontSize="fontSize"
128
+ :minWidth="minWidth"
122
129
  :selectedValue="selectedValue"
123
130
  @option-selected="optionSelected"
124
131
  @option-hovered="optionHovered"
132
+ @mouseleave="optionLeave"
125
133
  >
126
134
  <slot name="dropdown"></slot>
127
135
  </selectDropdown>
@@ -212,11 +220,12 @@ const optionalLabel = styled.span`
212
220
  `
213
221
  const inputProps = {
214
222
  selectWidth: String,
215
- optionWidth: String
223
+ optionWidth: String,
224
+ noRelative: Boolean
216
225
  }
217
226
  const Container = styled('div', inputProps)`
218
227
  width: ${(props) => props.selectWidth};
219
- position: relative;
228
+ position: ${(props) => (props.noRelative ? 'static' : 'relative')};
220
229
  display: inline-block;
221
230
  `
222
231
  const LabelWrapper = styled.div`
@@ -245,15 +254,26 @@ const selectButtonAttrs = {
245
254
  selectMinHeight: String,
246
255
  hasNoPadding: Boolean,
247
256
  showBorder: Boolean,
248
- paddingLeft: String
257
+ paddingLeft: String,
258
+ noRelative: Boolean,
259
+ tablePaddingLeft: String,
260
+ showDisabledBackground: Boolean
249
261
  }
250
262
  const selectButton = styled('div', selectButtonAttrs)`
251
- position: relative;
263
+ position: ${(props) => (props.noRelative ? 'static' : 'relative')};
252
264
  box-sizing: border-box;
253
265
  border-radius: 4px;
254
266
  max-width: ${(props) => (props.selectWidth ? props.selectWidth : '100%')};
255
267
  ${(props) =>
256
- props.hasNoPadding ? '' : `padding-left: ${props.paddingLeft}`};
268
+ props.isSearchBarVisible
269
+ ? ''
270
+ : `padding-left: ${
271
+ props.hasNoPadding
272
+ ? '0'
273
+ : props.tablePaddingLeft
274
+ ? props.tablePaddingLeft
275
+ : props.paddingLeft
276
+ }`};
257
277
  text-align: left;
258
278
  min-height: ${(props) =>
259
279
  props.selectHeight
@@ -274,7 +294,7 @@ const selectButton = styled('div', selectButtonAttrs)`
274
294
  }
275
295
  `}
276
296
  background-color:${(props) =>
277
- props.disabled
297
+ props.disabled && props.showDisabledBackground
278
298
  ? props.theme.colors.grey5
279
299
  : props.theme.colors[props.bgColor]
280
300
  ? props.theme.colors[props.bgColor]
@@ -300,13 +320,16 @@ const selectDropdownAttrs = {
300
320
  fontSize: String,
301
321
  dropdownPosition: Object,
302
322
  hoveredValue: Number | String,
303
- selectedValue: Number | String
323
+ selectedValue: Number | String,
324
+ noRelative: Boolean,
325
+ minWidth: String
304
326
  }
305
327
  const selectDropdown = styled('div', selectDropdownAttrs)`
306
328
  box-sizing: border-box;
307
329
  z-index: ${(props) => (props.isActive ? '2' : '99999')};
308
330
  position: absolute;
309
- top: ${(props) => props.dropdownPosition?.top}px;
331
+ top: ${(props) =>
332
+ props.noRelative ? 'auto' : props.dropdownPosition?.top + 'px'};
310
333
  left: ${(props) => props.dropdownPosition?.left}px;
311
334
  border: ${BORDER_WIDTH} solid ${(props) => props.theme.colors.grey4};
312
335
  border-radius: 4px;
@@ -316,6 +339,12 @@ const selectDropdown = styled('div', selectDropdownAttrs)`
316
339
  padding: 0px;
317
340
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
318
341
  width: ${(props) => (props.optionWidth ? props.optionWidth : '100%')};
342
+ min-width: ${(props) =>
343
+ props.minWidth
344
+ ? props.minWidth
345
+ : props.optionWidth
346
+ ? props.optionWidth
347
+ : '100%'};
319
348
  background-color: ${(props) =>
320
349
  props.theme.colors[props.bgColor]
321
350
  ? props.theme.colors[props.bgColor]
@@ -335,12 +364,17 @@ const selectDropdown = styled('div', selectDropdownAttrs)`
335
364
  font-size: ${(props) => props.fontSize};
336
365
  `
337
366
  selectDropdown.emits = ['option-hovered', 'option-selected']
338
- const DropdownWrapper = styled('div')`
339
- position: relative;
367
+ const DropdownAttrs = { noRelative: Boolean }
368
+ const DropdownWrapper = styled('div', DropdownAttrs)`
369
+ position: ${(props) => (props.noRelative ? 'static' : 'relative')};
340
370
  `
341
- const inputAttrs = { alignItems: String, hasLabel: Boolean }
371
+ const inputAttrs = {
372
+ alignItems: String,
373
+ hasLabel: Boolean,
374
+ noRelative: Boolean
375
+ }
342
376
  const InputWrapper = styled('div', inputAttrs)`
343
- position: relative;
377
+ position: ${(props) => (props.noRelative ? 'static' : 'relative')};
344
378
  display: grid;
345
379
  align-items: center;
346
380
  gap: 8px;
@@ -369,6 +403,10 @@ export default {
369
403
  required: false,
370
404
  default: '13px'
371
405
  },
406
+ noRelative: {
407
+ required: false,
408
+ default: false
409
+ },
372
410
  label: {
373
411
  required: false
374
412
  },
@@ -401,6 +439,9 @@ export default {
401
439
  required: false,
402
440
  default: '36px'
403
441
  },
442
+ minWidth: {
443
+ required: false
444
+ },
404
445
  optionWidth: {
405
446
  required: false,
406
447
  default: null
@@ -476,6 +517,13 @@ export default {
476
517
  type: Boolean,
477
518
  default: false
478
519
  },
520
+ tablePaddingLeft: {
521
+ required: false
522
+ },
523
+ showDisabledBackground: {
524
+ required: false,
525
+ default: true
526
+ },
479
527
  minOptionLength: {
480
528
  type: Number,
481
529
  default: MIN_OPTION_LENGTH
@@ -16,6 +16,7 @@
16
16
  :disabledTextColor="disabledTextColor"
17
17
  :backgroundColor="colorMode == 'dark' ? '#000000' : backgroundColor"
18
18
  :title="hoverText"
19
+ :minWidth="minWidth"
19
20
  :padding="padding"
20
21
  >
21
22
  <slot></slot>
@@ -31,6 +32,7 @@ const optionProps = {
31
32
  hoveredBgColor: String,
32
33
  cursorType: String,
33
34
  backgroundColor: String,
35
+ minWidth: String,
34
36
  disabledBgColor: String,
35
37
  disabledTextColor: String,
36
38
  padding: String
@@ -44,6 +46,7 @@ const optionContainer = styled('div', optionProps)`
44
46
  padding: ${(props) => props.padding};
45
47
  gap: 14px;
46
48
  width: 100%;
49
+ min-width: ${(props) => (props.minWidth ? props.minWidth : '100%')};
47
50
  background-color: ${(props) =>
48
51
  props.isDisabled
49
52
  ? props.theme.colors[props.disabledBgColor]
@@ -106,6 +109,9 @@ export default {
106
109
  required: false,
107
110
  default: false
108
111
  },
112
+ minWidth: {
113
+ required: false
114
+ },
109
115
  disabledBgColor: {
110
116
  required: false,
111
117
  default: 'white'
@@ -49,7 +49,7 @@
49
49
  // label="Question 5"
50
50
  // alignItems="horizontal" // horizontal, vertical
51
51
  // :isDisabled="true"
52
- // . fontSize="13px"
52
+ // fontSize="13px"
53
53
  // />
54
54
  import styled from 'vue3-styled-components'
55
55
  import InfoText from '../../infoText'
@@ -0,0 +1,86 @@
1
+ <template>
2
+ <page-container>
3
+ <marker-container
4
+ :backgroundColor="backgroundColor"
5
+ :hasIcon="!!iconName"
6
+ :cursor="cursor"
7
+ >
8
+ <icon
9
+ v-if="!!iconName"
10
+ :name="iconName"
11
+ color="white"
12
+ size="10px"
13
+ :cursor="cursor"
14
+ />
15
+ <span>{{ label }}</span>
16
+ </marker-container>
17
+ </page-container>
18
+ </template>
19
+
20
+ <script>
21
+ // import MarkerItem from "@eturnity/eturnity_reusable_components/src/components/markerItem"
22
+ // To use:
23
+ // <marker-item
24
+ // label="Label"
25
+ // backgroundColor="#ab5348"
26
+ // iconName="icon_name"
27
+ // cursor="pointer"
28
+ // />
29
+
30
+ import styled from 'vue3-styled-components'
31
+ import Icon from '../icon'
32
+
33
+ const PageContainer = styled.div`
34
+ display: flex;
35
+ align-items: center;
36
+ font-size: 12px;
37
+ line-height: 14px;
38
+ `
39
+
40
+ const MarkerAttrs = {
41
+ backgroundColor: String,
42
+ hasIcon: Boolean,
43
+ cursor: String
44
+ }
45
+ const MarkerContainer = styled('div', MarkerAttrs)`
46
+ display: grid;
47
+ grid-template-columns: ${(props) => (props.hasIcon ? 'auto 1fr' : '1fr')};
48
+ grid-gap: 5px;
49
+ position: relative;
50
+ align-items: center;
51
+ padding: 2px 7px;
52
+ color: ${(props) => props.theme.colors.white};
53
+ background-color: ${(props) =>
54
+ props.backgroundColor ? props.backgroundColor : props.theme.colors.grey3};
55
+ border: 1px solid
56
+ ${(props) =>
57
+ props.backgroundColor ? props.backgroundColor : props.theme.colors.grey3};
58
+ border-radius: 4px;
59
+ white-space: nowrap;
60
+ cursor: ${(props) => (props.isEditionAllowed ? 'pointer' : props.cursor)};
61
+ `
62
+
63
+ export default {
64
+ name: 'project-marker',
65
+ components: {
66
+ PageContainer,
67
+ MarkerContainer,
68
+ Icon
69
+ },
70
+ props: {
71
+ backgroundColor: {
72
+ required: false
73
+ },
74
+ iconName: {
75
+ required: false
76
+ },
77
+ label: {
78
+ required: true
79
+ },
80
+ cursor: {
81
+ required: false,
82
+ default: 'default'
83
+ }
84
+ }
85
+ }
86
+ </script>
@@ -3,11 +3,7 @@
3
3
  <title-text :color="color" :fontSize="fontSize" :uppercase="uppercase">
4
4
  {{ text }}
5
5
  </title-text>
6
- <info-text
7
- v-if="!!infoText"
8
- :text="infoText"
9
- :alignArrow="infoAlign"
10
- />
6
+ <info-text v-if="!!infoText" :text="infoText" :alignArrow="infoAlign" />
11
7
  </title-wrap>
12
8
  </template>
13
9
 
@@ -18,16 +14,16 @@
18
14
  // text="My Page Title"
19
15
  // color="red"
20
16
  // />
21
- import styled from "vue3-styled-components"
22
- import InfoText from "../infoText"
17
+ import styled from 'vue3-styled-components'
18
+ import InfoText from '../infoText'
23
19
 
24
20
  const wrapAttrs = { hasInfoText: Boolean }
25
- const TitleWrap = styled("div", wrapAttrs)`
21
+ const TitleWrap = styled('div', wrapAttrs)`
26
22
  display: grid;
27
23
  align-items: center;
28
24
  grid-gap: 12px;
29
25
  grid-template-columns: ${(props) =>
30
- props.hasInfoText ? "auto auto 1fr" : "1fr"};
26
+ props.hasInfoText ? 'auto auto 1fr' : '1fr'};
31
27
  margin-bottom: 20px;
32
28
  `
33
29
 
@@ -35,7 +31,7 @@ const titleAttrs = { color: String, fontSize: String, uppercase: Boolean }
35
31
  const TitleText = styled('span', titleAttrs)`
36
32
  color: ${(props) => (props.color ? props.color : props.theme.colors.black)};
37
33
  font-weight: bold;
38
- font-size: ${(props) => (props.fontSize ? props.fontSize : '16px')};
34
+ font-size: ${(props) => (props.fontSize ? props.fontSize : '18px')};
39
35
  text-transform: ${(props) => (props.uppercase ? 'uppercase' : 'none')};
40
36
  `
41
37
 
@@ -54,8 +50,7 @@ export default {
54
50
  required: false
55
51
  },
56
52
  fontSize: {
57
- required: false,
58
- default: '16px'
53
+ required: false
59
54
  },
60
55
  uppercase: {
61
56
  required: false,
@@ -63,11 +58,11 @@ export default {
63
58
  },
64
59
  infoText: {
65
60
  required: false,
66
- default: null,
61
+ default: null
67
62
  },
68
63
  infoAlign: {
69
- required: false,
64
+ required: false
70
65
  }
71
- },
66
+ }
72
67
  }
73
68
  </script>
@@ -81,8 +81,6 @@ const paginationWrapper = styled.nav`
81
81
  flex-wrap: wrap;
82
82
  justify-content: flex-end;
83
83
  align-items: center;
84
- margin-bottom: 2px;
85
- margin-top: 10px;
86
84
  `
87
85
  const paginationLink = styled.div`
88
86
  display: flex;
@@ -92,15 +90,18 @@ const paginationLink = styled.div`
92
90
  border-radius: 3px;
93
91
  white-space: nowrap;
94
92
  cursor: pointer;
93
+ color: ${(props) => props.theme.colors.brightBlue};
95
94
 
96
95
  &.active {
97
- color: #fff;
96
+ color: ${(props) => props.theme.colors.white};
98
97
  background-color: ${(props) => props.theme.colors.brightBlue};
99
98
  padding: 7px 12px;
100
99
  border-radius: 4px;
101
100
  }
102
101
  `
103
- const arrowText = styled.div``
102
+ const arrowText = styled.div`
103
+ color: ${(props) => props.theme.colors.brightBlue};
104
+ `
104
105
  const arrowIconContainer = styled.div`
105
106
  margin: 0 10px;
106
107
  display: flex;
@@ -69,7 +69,7 @@
69
69
  </template>
70
70
 
71
71
  <script>
72
- // import ThreeDots from "@eturnity/eturnity_reusable_components/src/components/projectMarker"
72
+ // import ProjectMarker from "@eturnity/eturnity_reusable_components/src/components/projectMarker"
73
73
  // To use:
74
74
  // <project-marker
75
75
  // :activeLanguage="'en-us'"
@@ -0,0 +1,145 @@
1
+ <template>
2
+ <page-container>
3
+ <box-container>
4
+ <selected-container
5
+ >{{ numberSelected }} {{ $gettext('selected') }}</selected-container
6
+ >
7
+ <list-container v-if="optionsList.length">
8
+ <list-item
9
+ v-for="item in optionsList"
10
+ :key="item.type"
11
+ :hoverColor="item.hoverColor"
12
+ @click="$emit('on-' + item.type)"
13
+ >
14
+ {{ item.name }}
15
+ </list-item>
16
+ </list-container>
17
+ <empty-text v-if="!optionsList.length">
18
+ {{ $gettext('no_batch_actions_available') }}
19
+ </empty-text>
20
+ <icon-container @click="$emit('on-close')">
21
+ <icon
22
+ name="close_for_modals,_tool_tips"
23
+ color="white"
24
+ size="14px"
25
+ cursor="pointer"
26
+ />
27
+ </icon-container>
28
+ </box-container>
29
+ </page-container>
30
+ </template>
31
+
32
+ <script>
33
+ // import SelectedOptions from "@eturnity/eturnity_reusable_components/src/components/selectedOptions"
34
+ // optionsList = [
35
+ // {
36
+ // type: 'export',
37
+ // name: 'Export'
38
+ // },
39
+ // {
40
+ // type: 'delete',
41
+ // name: 'Delete',
42
+ // hoverColor: 'red' // default is green
43
+ // }
44
+ // ]
45
+ // @on-${type}="function" should $emit the callback for the 'type' in the optionsList
46
+ // <selected-options
47
+ // :numberSelected="numberSelected"
48
+ // :optionsList="optionsList"
49
+ // @on-close="onCloseFunction()"
50
+ // @on-export="function()" @on-delete="function()"
51
+ // />
52
+ import styled from 'vue3-styled-components'
53
+ import Icon from '../icon'
54
+
55
+ const PageContainer = styled.div`
56
+ position: fixed;
57
+ bottom: 30px;
58
+ left: 50%;
59
+ transform: translateX(-50%);
60
+ `
61
+
62
+ const SelectedContainer = styled.div`
63
+ display: grid;
64
+ align-items: center;
65
+ height: 100%;
66
+ padding-right: 20px;
67
+ border-right: 1px solid rgba(255, 255, 255, 0.2);
68
+ `
69
+
70
+ const BoxContainer = styled.div`
71
+ display: flex;
72
+ align-items: center;
73
+ background-color: ${(props) => props.theme.colors.black};
74
+ opacity: 90%;
75
+ color: ${(props) => props.theme.colors.white};
76
+ border-radius: 4px;
77
+ padding: 8px 10px 8px 20px;
78
+ font-size: 14px;
79
+ height: 40px;
80
+ `
81
+
82
+ const ListContainer = styled.div`
83
+ padding: 0 20px;
84
+ display: flex;
85
+ gap: 20px;
86
+ color: ${(props) => props.theme.colors.white};
87
+ `
88
+
89
+ const ListAttrs = {
90
+ hoverColor: String
91
+ }
92
+ const ListItem = styled('div', ListAttrs)`
93
+ cursor: pointer;
94
+ &:hover {
95
+ color: ${(props) =>
96
+ props.hoverColor
97
+ ? props.theme.colors[props.hoverColor]
98
+ : props.theme.colors.green};
99
+ }
100
+ `
101
+
102
+ const IconContainer = styled.div`
103
+ display: grid;
104
+ align-items: center;
105
+ justify-items: center;
106
+ height: 30px;
107
+ width: 30px;
108
+ cursor: pointer;
109
+ margin-left: 20px;
110
+
111
+ &:hover {
112
+ background: rgba(255, 255, 255, 0.1);
113
+ border-radius: 4px;
114
+ }
115
+ `
116
+
117
+ const EmptyText = styled.div`
118
+ color: ${(props) => props.theme.colors.white};
119
+ font-size: 13px;
120
+ padding-left: 16px;
121
+ `
122
+
123
+ export default {
124
+ name: 'selected-options',
125
+ components: {
126
+ PageContainer,
127
+ BoxContainer,
128
+ SelectedContainer,
129
+ ListContainer,
130
+ ListItem,
131
+ Icon,
132
+ IconContainer,
133
+ EmptyText
134
+ },
135
+ props: {
136
+ optionsList: {
137
+ required: true
138
+ },
139
+ numberSelected: {
140
+ required: true,
141
+ default: 0
142
+ }
143
+ }
144
+ }
145
+ </script>
@@ -40,7 +40,12 @@
40
40
  "
41
41
  @click.stop="onSelectedTemplateClick(item.row)"
42
42
  >
43
- <img :src="fileIcon" alt="icon" width="12" height="16" />
43
+ <!-- <img :src="fileIcon" alt="icon" width="12" height="16" /> -->
44
+ <icon
45
+ name="template_icon_not_clickable"
46
+ :color="theme.colors.brightBlue"
47
+ size="14px"
48
+ />
44
49
  <div>{{ item.value }}</div>
45
50
  </template-link>
46
51
  <no-template v-if="item.type && item.type === 'no-template'">
@@ -178,6 +183,8 @@ import InputText from '../inputs/inputText'
178
183
  import CollapseArrowIcon from '../../assets/icons/collapse_arrow_icon.svg'
179
184
  import SubpositionMarkerIcon from '../../assets/icons/subposition_marker.svg'
180
185
  import fileIconPng from '../../assets/icons/file_icon.png'
186
+ import Icon from '../icon'
187
+ import theme from '@/assets/theme.js'
181
188
 
182
189
  const rowAttrs = { disabled: Boolean, isOpen: Boolean }
183
190
  const DropdownRow = styled('div', rowAttrs)`
@@ -273,6 +280,7 @@ const ArrowWrapper = styled('div', arrowAttrs)`
273
280
  const optionsAttrs = { top: Number, left: Number }
274
281
  const OptionsContainer = styled('div', optionsAttrs)`
275
282
  position: absolute;
283
+ margin-top: 10px;
276
284
  display: grid;
277
285
  grid-template-rows: 1fr auto;
278
286
  left: 20px;
@@ -307,10 +315,6 @@ const OptionsWrapper = styled.div`
307
315
 
308
316
  const OptionsItem = styled('div', containerAttrs)`
309
317
  display: grid;
310
- /* grid-template-columns: 1fr repeat(
311
- ${(props) => props.colSpan},
312
- minmax(50px, auto)
313
- ); */
314
318
  grid-template-columns: ${(props) => props.width};
315
319
  grid-gap: 30px;
316
320
  padding: 10px;
@@ -343,6 +347,7 @@ const TemplateButton = styled.div`
343
347
  display: inline-block;
344
348
  border-radius: 4px;
345
349
  text-align: center;
350
+ margin-left: 15px;
346
351
  `
347
352
 
348
353
  const NoTemplate = styled.div`
@@ -350,14 +355,16 @@ const NoTemplate = styled.div`
350
355
  font-style: italic;
351
356
  overflow: hidden;
352
357
  text-overflow: ellipsis;
358
+ padding-left: 15px;
353
359
  `
354
360
 
355
361
  const TemplateLink = styled.div`
356
- color: ${(props) => props.theme.colors.purple};
362
+ color: ${(props) => props.theme.colors.brightBlue};
357
363
  cursor: pointer;
358
364
  display: grid;
359
365
  grid-template-columns: auto 1fr;
360
366
  grid-gap: 12px;
367
+ padding-left: 15px;
361
368
  `
362
369
 
363
370
  const InputContainer = styled.div`
@@ -433,7 +440,8 @@ export default {
433
440
  ArrowContainer,
434
441
  TextContainer,
435
442
  NestedIcon,
436
- NestedContainer
443
+ NestedContainer,
444
+ Icon
437
445
  },
438
446
  props: {
439
447
  colSpan: {
@@ -599,6 +607,9 @@ export default {
599
607
  computed: {
600
608
  getCustomName() {
601
609
  return this.inputText
610
+ },
611
+ theme() {
612
+ return theme
602
613
  }
603
614
  },
604
615
  watch: {