@eturnity/eturnity_reusable_components 7.12.7-EPDM-10299.0 → 7.12.7-EPDM-7951.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 (50) hide show
  1. package/.storybook/preview.js +1 -1
  2. package/package.json +19 -23
  3. package/src/App.vue +2 -2
  4. package/src/components/addNewButton/index.vue +5 -3
  5. package/src/components/buttons/buttonIcon/index.vue +1 -1
  6. package/src/components/buttons/closeButton/index.vue +1 -1
  7. package/src/components/buttons/mainButton/index.vue +6 -1
  8. package/src/components/deleteIcon/DeleteIcon.stories.js +7 -7
  9. package/src/components/deleteIcon/index.vue +25 -21
  10. package/src/components/draggableInputHandle/index.vue +24 -25
  11. package/src/components/dropdown/index.vue +129 -110
  12. package/src/components/errorMessage/index.vue +1 -1
  13. package/src/components/filter/filterSettings.vue +55 -97
  14. package/src/components/filter/index.vue +3 -3
  15. package/src/components/filter/parentDropdown.vue +2 -2
  16. package/src/components/icon/iconCache.js +23 -0
  17. package/src/components/icon/iconCollection.vue +2 -2
  18. package/src/components/icon/index.vue +67 -70
  19. package/src/components/iconWrapper/index.vue +1 -4
  20. package/src/components/infoCard/index.vue +2 -3
  21. package/src/components/infoText/index.vue +1 -1
  22. package/src/components/inputs/checkbox/index.vue +21 -6
  23. package/src/components/inputs/inputNumber/index.vue +10 -10
  24. package/src/components/inputs/inputNumberQuestion/index.vue +1 -1
  25. package/src/components/inputs/inputText/index.vue +3 -3
  26. package/src/components/inputs/radioButton/index.vue +1 -1
  27. package/src/components/inputs/searchInput/index.vue +7 -8
  28. package/src/components/inputs/select/index.vue +199 -55
  29. package/src/components/inputs/select/option/index.vue +5 -5
  30. package/src/components/inputs/slider/index.vue +16 -16
  31. package/src/components/inputs/switchField/index.vue +2 -2
  32. package/src/components/inputs/textAreaInput/index.vue +1 -1
  33. package/src/components/inputs/toggle/index.vue +2 -2
  34. package/src/components/label/index.vue +27 -31
  35. package/src/components/modals/modal/index.vue +2 -6
  36. package/src/components/navigationTabs/index.vue +27 -20
  37. package/src/components/pageSubtitle/index.vue +1 -1
  38. package/src/components/pageTitle/index.vue +4 -4
  39. package/src/components/pagination/index.vue +1 -1
  40. package/src/components/progressBar/index.vue +1 -1
  41. package/src/components/projectMarker/index.vue +10 -7
  42. package/src/components/sideMenu/index.vue +1 -1
  43. package/src/components/spinner/index.vue +6 -11
  44. package/src/components/tableDropdown/index.vue +21 -26
  45. package/src/components/tables/mainTable/exampleNested.vue +1 -1
  46. package/src/components/tables/mainTable/index.vue +10 -9
  47. package/src/components/tables/viewTable/index.vue +2 -2
  48. package/src/components/threeDots/index.vue +1 -1
  49. package/src/components/videoThumbnail/index.vue +95 -100
  50. package/src/main.js +4 -11
@@ -3,7 +3,7 @@
3
3
  <upper-container v-if="filterViews && filterViews.length">
4
4
  <view-container :maxWidth="activeView.length">
5
5
  <select-component
6
- @click.native.stop
6
+ @click.stop
7
7
  selectWidth="100%"
8
8
  selectHeight="36px"
9
9
  fontSize="13px"
@@ -19,10 +19,10 @@
19
19
  <Option
20
20
  v-for="(item, idx) in filterViews"
21
21
  :key="idx + '_view'"
22
- @click.native="$emit('on-view-select', item)"
22
+ @click="$emit('on-view-select', item)"
23
23
  :value="item.name"
24
24
  >{{ item.name }}
25
- <delete-icon @click.native.stop="$emit('on-view-delete', item)"
25
+ <delete-icon @click.stop="$emit('on-view-delete', item)"
26
26
  /></Option>
27
27
  </template>
28
28
  </select-component>
@@ -55,28 +55,28 @@
55
55
  ghost-class="ghost"
56
56
  :setData="modifyDragItem"
57
57
  v-model="item.dataOptions"
58
+ itemKey="choice"
58
59
  >
59
- <checkbox-wrapper
60
- v-for="(column, index) in item.dataOptions"
61
- :key="index + 'dataOption'"
62
- >
63
- <drag-container class="drag-container">
64
- <icon :name="'duplicate-1'" size="12px" />
65
- </drag-container>
66
- <checkbox
67
- :label="column.text"
68
- :isChecked="column.selected"
69
- @on-event-handler="
70
- onChange({
71
- dataType: item.type,
72
- value: $event,
73
- choice: column.choice
74
- })
75
- "
76
- size="small"
77
- :isDisabled="column.selected && isCheckboxDisabled"
78
- />
79
- </checkbox-wrapper>
60
+ <template #item="{ element: column }">
61
+ <checkbox-wrapper>
62
+ <drag-container class="drag-container">
63
+ <icon :name="'duplicate-1'" size="12px" />
64
+ </drag-container>
65
+ <checkbox
66
+ :label="column.text"
67
+ :isChecked="column.selected"
68
+ @on-event-handler="
69
+ onChange({
70
+ dataType: item.type,
71
+ value: $event,
72
+ choice: column.choice
73
+ })
74
+ "
75
+ size="small"
76
+ :isDisabled="column.selected && isCheckboxDisabled"
77
+ />
78
+ </checkbox-wrapper>
79
+ </template>
80
80
  </draggable>
81
81
  </checkbox-container>
82
82
  </row-container>
@@ -169,12 +169,19 @@
169
169
  >
170
170
  <row-label :data-id="filter.dataId">{{ filter.label }}</row-label>
171
171
  <grid-container>
172
- <date-picker-input
172
+ <VueDatePicker
173
173
  :placeholder="$gettext('Date from')"
174
- :lang="getDatePickerLanguage()"
175
- type="date"
176
- :value="filter.range.start"
177
- @change="
174
+ :locale="getDatePickerLanguage()"
175
+ :model-value="filter.range.start"
176
+ :enable-time-picker="false"
177
+ :clearable="false"
178
+ :auto-apply="true"
179
+ :disabled-dates="disableFutureDates"
180
+ format="yyyy-MM-dd"
181
+ model-type="format"
182
+ @focus="onDatepickerFocus(filter.range)"
183
+ @close="onDatepickerBlur()"
184
+ @update:model-value="
178
185
  onChange({
179
186
  dataType: item.type,
180
187
  value: $event,
@@ -182,18 +189,20 @@
182
189
  field: filter.field
183
190
  })
184
191
  "
185
- @focus="onDatepickerFocus(filter.range)"
186
- @close="onDatepickerBlur()"
187
- format="YYYY-MM-DD"
188
- valueType="format"
189
- :disabled-date="disableFutureDates"
190
192
  />
191
- <date-picker-input
193
+ <VueDatePicker
192
194
  :placeholder="$gettext('Date to')"
193
- :lang="getDatePickerLanguage()"
194
- type="date"
195
- :value="filter.range.end"
196
- @change="
195
+ :locale="getDatePickerLanguage()"
196
+ :model-value="filter.range.end"
197
+ :enable-time-picker="false"
198
+ :clearable="false"
199
+ :auto-apply="true"
200
+ :disabled-dates="disablePastDates"
201
+ format="yyyy-MM-dd"
202
+ model-type="format"
203
+ @focus="onDatepickerFocus(filter.range)"
204
+ @close="onDatepickerBlur()"
205
+ @update:model-value="
197
206
  onChange({
198
207
  dataType: item.type,
199
208
  value: $event,
@@ -201,11 +210,6 @@
201
210
  field: filter.field
202
211
  })
203
212
  "
204
- @focus="onDatepickerFocus(filter.range)"
205
- @close="onDatepickerBlur()"
206
- format="YYYY-MM-DD"
207
- valueType="format"
208
- :disabled-date="disablePastDates"
209
213
  />
210
214
  </grid-container>
211
215
  </section-container>
@@ -247,27 +251,26 @@
247
251
  v-if="buttonText.apply_view"
248
252
  type="primary"
249
253
  :text="buttonText.apply_view"
250
- @click.native="$emit('on-apply-current-view')"
254
+ @click="$emit('on-apply-current-view')"
251
255
  />
252
256
  <main-button
253
257
  type="secondary"
254
258
  v-if="buttonText.save_view"
255
259
  :text="buttonText.save_view"
256
- @click.native="$emit('on-save-new-view')"
260
+ @click="$emit('on-save-new-view')"
257
261
  />
258
262
  <main-button
259
263
  type="cancel"
260
264
  v-if="buttonText.cancel"
261
265
  :text="buttonText.cancel"
262
- @click.native="$emit('on-cancel-view')"
266
+ @click="$emit('on-cancel-view')"
263
267
  />
264
268
  </button-container>
265
269
  </container-wrapper>
266
270
  </template>
267
271
 
268
272
  <script>
269
- import styled from 'vue-styled-components'
270
- import DatePicker from 'vue2-datepicker'
273
+ import styled from 'vue3-styled-components'
271
274
  import SelectComponent from '../inputs/select'
272
275
  import Option from '../inputs/select/option'
273
276
  import InputNumber from '../inputs/inputNumber'
@@ -278,12 +281,7 @@ import Icon from '../icon'
278
281
  import DeleteIcon from '../deleteIcon'
279
282
  import { datePickerLang } from '../../helpers/translateLang'
280
283
  import theme from '@/assets/theme.js'
281
- import 'vue2-datepicker/index.css'
282
- import 'vue2-datepicker/locale/de'
283
- import 'vue2-datepicker/locale/en'
284
- import 'vue2-datepicker/locale/es'
285
- import 'vue2-datepicker/locale/fr'
286
- import 'vue2-datepicker/locale/it'
284
+ import VueDatePicker from '@vuepic/vue-datepicker'
287
285
 
288
286
  const ContainerWrapper = styled.div`
289
287
  position: absolute;
@@ -382,46 +380,6 @@ const RowWrapper = styled.div`
382
380
  margin-bottom: 12px;
383
381
  `
384
382
 
385
- const DatePickerInput = styled(DatePicker)`
386
- border: 1px solid ${(props) => props.theme.colors.grey4};
387
- border-radius: 4px;
388
- padding: 7px 12px 7px 7px;
389
- width: 100%;
390
- position: relative;
391
-
392
- &.mx-datepicker {
393
- width: 100% !important;
394
- max-width: 100%;
395
- height: 36px;
396
- align-self: flex-end;
397
- }
398
-
399
- .mx-input-wrapper {
400
- position: unset;
401
-
402
- input {
403
- border: none;
404
- height: auto;
405
- padding: 0;
406
- font-size: 13px;
407
- box-shadow: none;
408
- color: #393939;
409
- vertical-align: bottom;
410
- }
411
-
412
- .mx-input-append {
413
- top: 1px;
414
- }
415
- }
416
-
417
- .mx-input-append {
418
- left: 0;
419
- top: 5px;
420
- height: auto;
421
- cursor: pointer;
422
- }
423
- `
424
-
425
383
  const LabelAttrs = {
426
384
  marginTop: Boolean
427
385
  }
@@ -486,14 +444,14 @@ export default {
486
444
  Icon,
487
445
  DragContainer,
488
446
  InputNumber,
489
- DatePickerInput,
490
447
  RowLabel,
491
448
  SectionContainer,
492
449
  GridContainer,
493
450
  ViewContainer,
494
451
  DeleteIcon,
495
452
  UpperContainer,
496
- ResetButton
453
+ ResetButton,
454
+ VueDatePicker
497
455
  },
498
456
  props: {
499
457
  filterData: {
@@ -29,7 +29,7 @@
29
29
  </template>
30
30
 
31
31
  <script>
32
- import styled from 'vue-styled-components'
32
+ import styled from 'vue3-styled-components'
33
33
  import parentDropdown from './parentDropdown'
34
34
  import filterSettings from './filterSettings'
35
35
 
@@ -93,9 +93,9 @@ export default {
93
93
  }, 100)
94
94
  },
95
95
  clickOutside(event) {
96
- const target = event.target
97
96
  if (
98
- !this.$refs.dropdown.$el.contains(target) &&
97
+ this.$refs.dropdown &&
98
+ !this.$refs.dropdown.$el.contains(event.target) &&
99
99
  !this.preventOutsideClick
100
100
  ) {
101
101
  this.isDropdownOpen = false
@@ -9,7 +9,7 @@
9
9
  </title-text>
10
10
  <arrow-wrapper>
11
11
  <icon
12
- @click.native.stop="$emit('on-toggle')"
12
+ @click.stop="$emit('on-toggle')"
13
13
  :name="isOpen ? 'arrow_up' : 'arrow_down'"
14
14
  size="12px"
15
15
  />
@@ -19,7 +19,7 @@
19
19
  </template>
20
20
 
21
21
  <script>
22
- import styled from 'vue-styled-components'
22
+ import styled from 'vue3-styled-components'
23
23
  import Icon from '../icon'
24
24
 
25
25
  const PageWrapper = styled.div`
@@ -0,0 +1,23 @@
1
+ const iconCache = {}
2
+
3
+ export const fetchIcon = async (fileName) => {
4
+ if (iconCache[fileName]) {
5
+ return iconCache[fileName]
6
+ }
7
+
8
+ // We need to use "new URL" to load dynamic assets (https://vitejs.dev/guide/assets.html#new-url-url-import-meta-url)
9
+ const fetchUrl = new URL(
10
+ `../../assets/svgIcons/${fileName}.svg`,
11
+ import.meta.url
12
+ ).href
13
+
14
+ try {
15
+ const response = await fetch(fetchUrl)
16
+ const rawFile = await response.text()
17
+ iconCache[fileName] = rawFile
18
+
19
+ return rawFile
20
+ } catch (error) {
21
+ console.error(`Failed to load ${fileName}.svg`)
22
+ }
23
+ }
@@ -16,7 +16,7 @@
16
16
 
17
17
  <script>
18
18
  import icon from './index.vue'
19
- import styled from 'vue-styled-components'
19
+ import styled from 'vue3-styled-components'
20
20
 
21
21
  const Wrapper = styled.div`
22
22
  display: block;
@@ -36,7 +36,7 @@ const IconWrapper = styled.div`
36
36
  margin: 10px;
37
37
  `
38
38
  export default {
39
- name: 'collection',
39
+ name: 'collectionComponent',
40
40
  components: { icon, IconWrapper, Wrapper },
41
41
  props: {
42
42
  size: { required: false },
@@ -1,19 +1,13 @@
1
1
  <template>
2
- <Wrapper :isDisabled="disabled" :size="size" :cursor="cursor">
3
- <icon-image
4
- :disabled="disabled"
5
- :size="size"
6
- :color="color"
7
- :hoveredColor="hoveredColor"
8
- v-html="
9
- require(`!html-loader!./../../assets/svgIcons/${name.toLowerCase()}.svg`)
10
- "
11
- ></icon-image>
12
- <striked-line v-if="isStriked" :color="color" :disabled="disabled" :hoveredColor="hoveredColor"></striked-line>
13
- </Wrapper>
2
+ <wrapper>
3
+ <icon-image>
4
+ <i v-html="icon.html" />
5
+ </icon-image>
6
+ <striked-line v-if="isStriked"></striked-line>
7
+ </wrapper>
14
8
  </template>
15
9
 
16
- <script>
10
+ <script setup>
17
11
  // import Icon from "@eturnity/eturnity_reusable_components/src/components/icon"
18
12
  // How to use:
19
13
  //<icon
@@ -25,92 +19,95 @@
25
19
  // isStriked = "true"
26
20
  // />
27
21
 
28
- import styled from 'vue-styled-components'
22
+ import { onMounted, reactive, watch } from 'vue'
23
+ import styled from 'vue3-styled-components'
24
+ import { fetchIcon } from './iconCache'
29
25
 
30
- const wrapperAttrs = { isDisabled: Boolean, size: String, cursor: String }
31
- const Wrapper = styled('div', wrapperAttrs)`
26
+ const props = defineProps({
27
+ disabled: {
28
+ required: false,
29
+ default: false
30
+ },
31
+ name: {
32
+ required: true
33
+ },
34
+ color: {
35
+ required: false
36
+ },
37
+ hoveredColor: {
38
+ required: false
39
+ },
40
+ size: {
41
+ required: false,
42
+ default: '30px'
43
+ },
44
+ cursor: {
45
+ required: false,
46
+ default: null
47
+ },
48
+ isStriked: {
49
+ required: false,
50
+ default: false
51
+ }
52
+ })
53
+
54
+ const Wrapper = styled('div')`
32
55
  display: flex;
33
56
  position: relative;
34
57
  align-content: center;
35
58
  justify-content: center;
36
- width: ${(props) => props.size};
37
- height: ${(props) => props.size};
38
- min-width: ${(props) => props.size};
39
- min-height: ${(props) => props.size};
40
- cursor: ${(props) => (props.isDisabled ? 'not-allowed' : props.cursor)};
59
+ width: ${props.size};
60
+ height: ${props.size};
61
+ min-width: ${props.size};
62
+ min-height: ${props.size};
63
+ cursor: ${props.disabled ? 'not-allowed' : props.cursor};
41
64
  line-height: 0;
42
65
  `
43
- const strikedAttrs = { isDisabled: Boolean, color: String, hoveredColor: String }
44
- const strikedLine = styled('div', strikedAttrs)`
66
+ const strikedAttrs = {
67
+ isDisabled: Boolean,
68
+ color: String,
69
+ hoveredColor: String
70
+ }
71
+ const StrikedLine = styled.div`
45
72
  display: flex;
46
73
  position: absolute;
47
- bottom:0;
48
- left:0;
74
+ bottom: 0;
75
+ left: 0;
49
76
  align-content: center;
50
77
  justify-content: center;
51
78
  width: 143%;
52
- height:8%;
53
- background-color: ${(props)=>props.theme.colors[props.color] || props.color};
79
+ height: 8%;
80
+ background-color: ${({ theme }) => theme.colors[props.color] || props.color};
54
81
  min-height: 0;
55
82
  line-height: 0;
56
83
  transform-origin: 0% 100%;
57
84
  transform: rotate(-45deg);
58
85
  `
59
- const IconImageProps = { color: String, hoveredColor: String, size: String }
60
- const IconImage = styled('div', IconImageProps)`
86
+ const IconImage = styled.div`
61
87
  width: 100%;
62
88
  svg {
63
89
  width: 100%;
64
90
  height: 100%;
65
91
  }
66
92
  svg path {
67
- ${(props) =>
68
- props.color && `fill: ${props.theme.colors[props.color] || props.color};`}
93
+ ${({ theme }) =>
94
+ props.color && `fill: ${theme.colors[props.color] || props.color};`}
69
95
  }
70
96
  &:hover > svg path {
71
- ${(props) => props.hoveredColor && `fill: ${props.hoveredColor};`}
97
+ ${props.hoveredColor && `fill: ${props.hoveredColor};`}
72
98
  }
73
99
  &:hover + div {
74
- background-color: ${(props)=>props.hoveredColor};
100
+ background-color: ${props.hoveredColor};
75
101
  }
76
102
  `
77
103
 
78
- export default {
79
- name: 'icon',
80
- components: {
81
- IconImage,
82
- Wrapper,
83
- strikedLine
84
- },
85
- props: {
86
- disabled: {
87
- required: false,
88
- default: false
89
- },
90
- name: {
91
- required: true
92
- },
93
- color: {
94
- required: false
95
- },
96
- hoveredColor: {
97
- required: false
98
- },
99
- size: {
100
- required: false,
101
- default: '30px'
102
- },
103
- cursor: {
104
- required: false,
105
- default: null
106
- },
107
- isStriked: {
108
- required: false,
109
- default: false
110
- }
111
- },
112
- data() {
113
- return {}
114
- }
104
+ const icon = reactive({ html: '' })
105
+
106
+ const loadSvg = async () => {
107
+ icon.html = await fetchIcon(props.name.toLowerCase())
115
108
  }
109
+
110
+ onMounted(() => loadSvg())
111
+
112
+ watch(() => props.name, loadSvg)
116
113
  </script>
@@ -42,7 +42,7 @@
42
42
  // size="60px" by default, this is 30px
43
43
  // />
44
44
 
45
- import styled from 'vue-styled-components'
45
+ import styled from 'vue3-styled-components'
46
46
  import icon from '../icon'
47
47
  const wrapperAttrs = {
48
48
  color: String,
@@ -148,9 +148,6 @@ export default {
148
148
  required: false,
149
149
  default: false
150
150
  }
151
- },
152
- data() {
153
- return {}
154
151
  }
155
152
  }
156
153
  </script>
@@ -8,7 +8,7 @@
8
8
  </template>
9
9
 
10
10
  <script>
11
- import styled from 'vue-styled-components'
11
+ import styled from 'vue3-styled-components'
12
12
  import Icon from '../icon'
13
13
 
14
14
  const InfoContainer = styled.div`
@@ -24,7 +24,6 @@ const TextContainer = styled.div`
24
24
  width: 100%;
25
25
  `
26
26
 
27
-
28
27
  export default {
29
28
  name: 'InfoCard',
30
29
  components: {
@@ -33,4 +32,4 @@ export default {
33
32
  TextContainer
34
33
  }
35
34
  }
36
- </script>
35
+ </script>
@@ -30,7 +30,7 @@
30
30
  // alignArrow="right" // which side the arrow should be on
31
31
  // />
32
32
  import theme from '../../assets/theme.js'
33
- import styled from 'vue-styled-components'
33
+ import styled from 'vue3-styled-components'
34
34
  import icon from '../icon'
35
35
 
36
36
  const textAttrs = {
@@ -3,7 +3,7 @@
3
3
  <container
4
4
  :checkColor="checkColor"
5
5
  :size="size"
6
- :hasLabel="!!label.length"
6
+ :hasLabel="hasLabel"
7
7
  :backgroundColor="backgroundColor"
8
8
  :isChecked="isChecked"
9
9
  :isDisabled="isDisabled"
@@ -14,10 +14,10 @@
14
14
  :data-id="dataId"
15
15
  @change="onChangeHandler(!isChecked)"
16
16
  />
17
- <div>
17
+ <check-wrapper :hasLabel="hasLabel">
18
18
  <span class="checkmark"></span>
19
- </div>
20
- <label-text v-if="!!label.length">{{ label }}</label-text>
19
+ </check-wrapper>
20
+ <label-text v-if="hasLabel">{{ label }}</label-text>
21
21
  </container>
22
22
  </component-wrapper>
23
23
  </template>
@@ -34,12 +34,21 @@
34
34
  // backgroundColor="red"
35
35
  // :isDisabled="true"
36
36
  // />
37
- import styled from 'vue-styled-components'
37
+ import styled from 'vue3-styled-components'
38
38
 
39
39
  const ComponentWrapper = styled.div`
40
40
  min-height: 18px;
41
41
  `
42
42
 
43
+ const CheckWrapper = styled('div', { hasLabel: Boolean })`
44
+ ${(props) =>
45
+ props.hasLabel &&
46
+ `
47
+ display: flex;
48
+ align-items: center;
49
+ `}
50
+ `
51
+
43
52
  const containerAttrs = {
44
53
  checkColor: String,
45
54
  size: String,
@@ -145,7 +154,8 @@ export default {
145
154
  ComponentWrapper,
146
155
  Container,
147
156
  InputCheckbox,
148
- LabelText
157
+ LabelText,
158
+ CheckWrapper
149
159
  },
150
160
  props: {
151
161
  label: {
@@ -175,6 +185,11 @@ export default {
175
185
  default: ''
176
186
  }
177
187
  },
188
+ computed: {
189
+ hasLabel() {
190
+ return !!this.label.length
191
+ }
192
+ },
178
193
  methods: {
179
194
  onChangeHandler(value) {
180
195
  if (this.isDisabled) {