@eturnity/eturnity_reusable_components 8.16.2--EPDM-14330.5 → 8.16.2--EPDM-14330.7

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 (103) hide show
  1. package/package.json +1 -1
  2. package/src/assets/svgIcons/ac_power.svg +4 -0
  3. package/src/assets/svgIcons/arrow_long_left.svg +3 -0
  4. package/src/assets/svgIcons/arrow_long_right.svg +3 -0
  5. package/src/assets/svgIcons/chassis_ground_symbol.svg +27 -0
  6. package/src/assets/svgIcons/dc_power.svg +8 -0
  7. package/src/assets/svgIcons/double_arrow_long.svg +4 -0
  8. package/src/assets/svgIcons/ed_ac.svg +3 -0
  9. package/src/assets/svgIcons/ed_acgrid.svg +4 -0
  10. package/src/assets/svgIcons/ed_arrow_both.svg +7 -0
  11. package/src/assets/svgIcons/ed_arrow_left.svg +7 -0
  12. package/src/assets/svgIcons/ed_arrow_right.svg +7 -0
  13. package/src/assets/svgIcons/ed_battery.svg +10 -0
  14. package/src/assets/svgIcons/ed_batteryacinverter.svg +16 -0
  15. package/src/assets/svgIcons/ed_batteryintegratedinverter.svg +19 -0
  16. package/src/assets/svgIcons/ed_cirquitbreaker.svg +4 -0
  17. package/src/assets/svgIcons/ed_cirquitbreaker_magnetic.svg +6 -0
  18. package/src/assets/svgIcons/ed_cirquitbreaker_thermal.svg +4 -0
  19. package/src/assets/svgIcons/ed_cirquitbreaker_thermal_magnetic.svg +5 -0
  20. package/src/assets/svgIcons/ed_consumption.svg +3 -0
  21. package/src/assets/svgIcons/ed_dc.svg +6 -0
  22. package/src/assets/svgIcons/ed_disconnector.svg +4 -0
  23. package/src/assets/svgIcons/ed_disconnector_fuse.svg +4 -0
  24. package/src/assets/svgIcons/ed_disconnector_fuse_switch.svg +4 -0
  25. package/src/assets/svgIcons/ed_disconnector_loadbreak switch.svg +4 -0
  26. package/src/assets/svgIcons/ed_disconnector_switch.svg +4 -0
  27. package/src/assets/svgIcons/ed_disconnector_switch_auto_release.svg +5 -0
  28. package/src/assets/svgIcons/ed_energymanagement_rectangle.svg +3 -0
  29. package/src/assets/svgIcons/ed_evcharger.svg +19 -0
  30. package/src/assets/svgIcons/ed_flexiblecomponent_circle.svg +3 -0
  31. package/src/assets/svgIcons/ed_flexiblecomponent_square.svg +3 -0
  32. package/src/assets/svgIcons/ed_fuse.svg +3 -0
  33. package/src/assets/svgIcons/ed_ground.svg +5 -0
  34. package/src/assets/svgIcons/ed_heatpump.svg +4 -0
  35. package/src/assets/svgIcons/ed_icon_battery.svg +9 -0
  36. package/src/assets/svgIcons/ed_icon_circle.svg +3 -0
  37. package/src/assets/svgIcons/ed_icon_heatpump.svg +3 -0
  38. package/src/assets/svgIcons/ed_icon_inverter.svg +8 -0
  39. package/src/assets/svgIcons/ed_icon_optimizer.svg +11 -0
  40. package/src/assets/svgIcons/ed_integratedbatteryinverter.svg +10 -0
  41. package/src/assets/svgIcons/ed_inverter-blank.svg +3 -0
  42. package/src/assets/svgIcons/ed_mainsconnection.svg +3 -0
  43. package/src/assets/svgIcons/ed_meter_arrowleft.svg +4 -0
  44. package/src/assets/svgIcons/ed_meter_arrowright.svg +4 -0
  45. package/src/assets/svgIcons/ed_meter_bidirectional.svg +5 -0
  46. package/src/assets/svgIcons/ed_networkandsystemprotection_double.svg +14 -0
  47. package/src/assets/svgIcons/ed_networkandsystemprotection_single.svg +7 -0
  48. package/src/assets/svgIcons/ed_pvpanel.svg +7 -0
  49. package/src/assets/svgIcons/ed_rcd.svg +5 -0
  50. package/src/assets/svgIcons/ed_rcd_simple.svg +3 -0
  51. package/src/assets/svgIcons/ed_spd.svg +6 -0
  52. package/src/assets/svgIcons/ed_stringwithoptimizer.svg +33 -0
  53. package/src/assets/svgIcons/ed_stringwithoutoptimizer.svg +17 -0
  54. package/src/assets/svgIcons/ed_transformer.svg +3 -0
  55. package/src/assets/svgIcons/filter.svg +3 -0
  56. package/src/assets/svgIcons/ground_symbol.svg +28 -0
  57. package/src/assets/svgIcons/move_left.svg +3 -0
  58. package/src/assets/svgIcons/move_right.svg +3 -0
  59. package/src/assets/svgIcons/rectangle.svg +3 -0
  60. package/src/assets/svgIcons/refresh.svg +3 -0
  61. package/src/assets/svgIcons/text_icon.svg +3 -0
  62. package/src/assets/theme.js +17 -1
  63. package/src/components/banner/infoBanner/InfoBanner.spec.js +29 -42
  64. package/src/components/barchart/BottomFields.vue +253 -0
  65. package/src/components/barchart/ChartControls.vue +113 -0
  66. package/src/components/barchart/SelectionBox.vue +150 -0
  67. package/src/components/barchart/composables/index.js +5 -0
  68. package/src/components/barchart/composables/useAxisCalculations.js +104 -0
  69. package/src/components/barchart/composables/useChartData.js +114 -0
  70. package/src/components/barchart/composables/useChartScroll.js +61 -0
  71. package/src/components/barchart/composables/useSelection.js +75 -0
  72. package/src/components/barchart/composables/useTooltip.js +100 -0
  73. package/src/components/barchart/index.vue +385 -0
  74. package/src/components/barchart/styles/bottomFields.js +66 -0
  75. package/src/components/barchart/styles/chart.js +272 -0
  76. package/src/components/barchart/styles/chartControls.js +59 -0
  77. package/src/components/buttons/buttonIcon/index.vue +35 -1
  78. package/src/components/buttons/splitButtons/index.vue +86 -0
  79. package/src/components/collapsableInfoText/index.vue +2 -2
  80. package/src/components/errorMessage/errorMessage.spec.js +34 -0
  81. package/src/components/errorMessage/errorMessage.stories.js +35 -0
  82. package/src/components/filter/filterSettings.vue +2 -0
  83. package/src/components/filterComponent/viewFilter.vue +589 -0
  84. package/src/components/filterComponent/viewSettings.vue +63 -2
  85. package/src/components/filterComponent/viewSort.vue +18 -5
  86. package/src/components/icon/index.vue +32 -9
  87. package/src/components/infoText/index.vue +2 -2
  88. package/src/components/infoText/infoText.spec.js +6 -1
  89. package/src/components/inputs/inputNumber/index.vue +14 -2
  90. package/src/components/inputs/searchInput/index.vue +19 -3
  91. package/src/components/inputs/select/index.vue +108 -19
  92. package/src/components/inputs/select/option/index.vue +5 -0
  93. package/src/components/modals/actionModal/actionModal.spec.js +52 -0
  94. package/src/components/modals/actionModal/actionModal.stories.js +53 -0
  95. package/src/components/modals/actionModal/index.vue +6 -6
  96. package/src/components/modals/infoModal/index.vue +49 -19
  97. package/src/components/modals/infoModal/infoModal.spec.js +55 -0
  98. package/src/components/modals/infoModal/infoModal.stories.js +47 -0
  99. package/src/components/modals/modal/index.vue +16 -5
  100. package/src/components/pageSubtitle/PageSubtitle.stories.js +0 -1
  101. package/src/helpers/isObjectEqual.js +22 -0
  102. package/src/helpers/translateLang.js +95 -24
  103. package/src/main.js +1 -0
@@ -0,0 +1,59 @@
1
+ import styled from 'vue3-styled-components'
2
+
3
+ export const Container = styled.div`
4
+ width: 100%;
5
+ `
6
+
7
+ export const LegendAndControlsWrapper = styled('div', { leftMargin: String })`
8
+ margin-left: ${(props) => props.leftMargin};
9
+ display: flex;
10
+ justify-content: space-between;
11
+ align-items: center;
12
+ `
13
+
14
+ export const LeftSection = styled.div`
15
+ flex: 1;
16
+ `
17
+
18
+ export const SplitButtonsContainer = styled('div', { position: String })`
19
+ align-self: ${(props) =>
20
+ props.position === 'top' ? 'flex-end' : 'flex-start'};
21
+ `
22
+
23
+ export const LegendGroups = styled.div`
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: 8px;
27
+ `
28
+
29
+ export const LegendRow = styled('div', { rowIndex: Number })`
30
+ display: flex;
31
+ gap: 10px;
32
+ align-items: center;
33
+ justify-content: ${(props) =>
34
+ props.rowIndex === 0 ? 'flex-start' : 'flex-end'};
35
+ `
36
+
37
+ export const LegendItem = styled.div`
38
+ display: flex;
39
+ align-items: center;
40
+ gap: 8px;
41
+ `
42
+
43
+ export const LegendColor = styled('div', {
44
+ gradientFrom: String,
45
+ gradientTo: String,
46
+ })`
47
+ width: 16px;
48
+ height: 16px;
49
+ border-radius: 4px;
50
+ background: ${(props) =>
51
+ `linear-gradient(180deg, ${props.gradientFrom} 0%, ${props.gradientTo} 100%)`};
52
+ `
53
+
54
+ export const LegendText = styled.span`
55
+ font-size: 12px;
56
+ font-weight: 400;
57
+ color: ${(props) => props.theme.semanticColors.teal[800]};
58
+ white-space: nowrap;
59
+ `
@@ -21,6 +21,7 @@
21
21
  iconColor ||
22
22
  theme.mainButton[appTheme][type][variant].default.textColor
23
23
  "
24
+ :disable-hover="disableIconHover"
24
25
  :fill-type="fillType"
25
26
  :hovered-color="
26
27
  iconColor ||
@@ -33,6 +34,9 @@
33
34
  <ButtonContainer :button-size="buttonSize">
34
35
  {{ text }}
35
36
  </ButtonContainer>
37
+ <NumberContainer v-if="numberCount">
38
+ <NumberText>{{ numberCount }}</NumberText>
39
+ </NumberContainer>
36
40
  </ButtonWrapper>
37
41
  </PageContainer>
38
42
  </template>
@@ -67,7 +71,7 @@
67
71
  }
68
72
  const ButtonWrapper = styled('div', ButtonAttrs)`
69
73
  display: grid;
70
- grid-template-columns: auto 1fr;
74
+ grid-template-columns: auto 1fr auto;
71
75
  font-size: ${(props) =>
72
76
  props.theme?.mainButton?.size?.[props.buttonSize]?.fontSize};
73
77
  color: ${(props) => {
@@ -158,6 +162,25 @@
158
162
  }};
159
163
  `
160
164
 
165
+ const NumberContainer = styled.div`
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ margin-right: 10px;
170
+ `
171
+
172
+ const NumberText = styled.div`
173
+ display: flex;
174
+ align-items: center;
175
+ justify-content: center;
176
+ font-size: 12px;
177
+ font-weight: 400;
178
+ color: ${(props) => props.theme.semanticColors.purple[500]};
179
+ padding: 3px 8px;
180
+ border-radius: 8px;
181
+ background-color: ${(props) => props.theme.semanticColors.purple[50]};
182
+ `
183
+
161
184
  export default {
162
185
  name: 'ButtonIcon',
163
186
  components: {
@@ -166,6 +189,8 @@
166
189
  ButtonWrapper,
167
190
  IconContainer,
168
191
  Icon,
192
+ NumberContainer,
193
+ NumberText,
169
194
  },
170
195
  props: {
171
196
  type: {
@@ -236,6 +261,15 @@
236
261
  default: 'fill',
237
262
  type: String,
238
263
  },
264
+ disableIconHover: {
265
+ type: Boolean,
266
+ default: false,
267
+ },
268
+ numberCount: {
269
+ type: Number,
270
+ required: false,
271
+ default: null,
272
+ },
239
273
  },
240
274
  data() {
241
275
  return {
@@ -0,0 +1,86 @@
1
+ <template>
2
+ <Container>
3
+ <SplitButton
4
+ v-for="(option, index) in options"
5
+ :data-id-key="`${dataIdKey}_${option.value}`"
6
+ :key="index"
7
+ :length="options.length"
8
+ :position="getButtonPosition(index)"
9
+ :selected="modelValue === option.value"
10
+ @click.stop="handleSelect(option.value)"
11
+ >
12
+ {{ option.label }}
13
+ </SplitButton>
14
+ </Container>
15
+ </template>
16
+
17
+ <script setup>
18
+ import styled from 'vue3-styled-components'
19
+ import { computed } from 'vue'
20
+
21
+ const Container = styled.div`
22
+ display: flex;
23
+ width: fit-content;
24
+ `
25
+ const SplitButton = styled('button', {
26
+ selected: Boolean,
27
+ position: String,
28
+ length: Number,
29
+ })`
30
+ padding: 8px 16px;
31
+ border: 1px solid ${(props) => props.theme.semanticColors.teal[100]};
32
+ ${(props) =>
33
+ props.position === 'middle'
34
+ ? `
35
+ border-left: none;
36
+ border-right: none;
37
+ `
38
+ : props.length === 2 && props.position === 'first'
39
+ ? 'border-right: none;'
40
+ : ''}
41
+ border-radius: ${(props) =>
42
+ props.position === 'first'
43
+ ? '4px 0 0 4px'
44
+ : props.position === 'last'
45
+ ? '0 4px 4px 0'
46
+ : '0'};
47
+ font-family: ${(props) => props.theme.fonts.mainFont};
48
+ font-size: 14px;
49
+ font-weight: 400;
50
+ line-height: 100%;
51
+ cursor: pointer;
52
+ background: ${(props) =>
53
+ props.selected ? props.theme.semanticColors.purple[50] : 'transparent'};
54
+ color: ${(props) => props.theme.semanticColors.purple[500]};
55
+ `
56
+
57
+ const props = defineProps({
58
+ options: {
59
+ type: Array,
60
+ required: true,
61
+ // expects array of {label: string, value: string}
62
+ },
63
+ modelValue: {
64
+ type: String,
65
+ required: true,
66
+ },
67
+ dataIdKey: {
68
+ type: String,
69
+ default: '',
70
+ },
71
+ })
72
+
73
+ const emit = defineEmits(['update:modelValue'])
74
+
75
+ const getButtonPosition = computed(() => (index) => {
76
+ if (index === 0) return 'first'
77
+ if (index === props.options.length - 1) return 'last'
78
+
79
+ return 'middle'
80
+ })
81
+
82
+ const handleSelect = (value) => {
83
+ emit('update:modelValue', value)
84
+ emit('click', value)
85
+ }
86
+ </script>
@@ -33,7 +33,7 @@
33
33
  const Text = styled('p', TextAttrs)`
34
34
  display: block;
35
35
  display: -webkit-box;
36
- line-height: 1.3em;
36
+ line-height: 1.5;
37
37
  -webkit-line-clamp: ${(props) => (props.expand ? 'unset' : '4')};
38
38
  -webkit-box-orient: vertical;
39
39
  overflow: hidden;
@@ -49,7 +49,7 @@
49
49
  const ToggleButton = styled('p', TextAttrs)`
50
50
  font-size: ${(props) => props.fontSize}px;
51
51
  cursor: pointer;
52
- color: ${(props) => props.theme.colors.blue};
52
+ color: ${(props) => props.theme.semanticColors.purple[500]};
53
53
  `
54
54
 
55
55
  export default {
@@ -0,0 +1,34 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import ErrorMessage from '@/components/errorMessage'
3
+ import theme from '@/assets/theme'
4
+
5
+ /* eslint-disable */
6
+
7
+ describe('ErrorMessage Component', () => {
8
+ let wrapper
9
+
10
+ beforeEach(() => {
11
+ wrapper = mount(ErrorMessage, {
12
+ props: {},
13
+ slots: {
14
+ default: '<div data-test-id="fake-msg">testing</div>',
15
+ },
16
+ global: {
17
+ provide: {
18
+ theme,
19
+ },
20
+ },
21
+ })
22
+ })
23
+
24
+ test('renders ErrorMessage component with default props', () => {
25
+ expect(wrapper.findAll('[data-test-id="fake-msg"]').length).toBe(1)
26
+ })
27
+
28
+ test('applies the correct CSS class for styling', async () => {
29
+ wrapper.setProps({ marginTop: '20px' })
30
+
31
+ await wrapper.vm.$nextTick()
32
+ expect(wrapper.props().marginTop).toBe('20px')
33
+ })
34
+ })
@@ -0,0 +1,35 @@
1
+ import ErrorMessage from './index.vue'
2
+
3
+ export default {
4
+ title: 'ErrorMessage',
5
+ component: ErrorMessage,
6
+ tags: ['autodocs'],
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+ }
11
+
12
+ // import ErrorMessage from "@eturnity/eturnity_reusable_components/src/components/errorMessage"
13
+ //
14
+ //To use:
15
+ // <error-message>
16
+ // <span>
17
+ // testing error message
18
+ // </span>
19
+ // </error-message>
20
+
21
+ const Template = (args, { argTypes }) => ({
22
+ components: { ErrorMessage },
23
+ props: Object.keys(argTypes),
24
+ template: `
25
+ <ErrorMessage v-bind="$props">
26
+ <span>
27
+ testing error message
28
+ </span>
29
+ </ErrorMessage>`,
30
+ })
31
+
32
+ export const Default = Template.bind({})
33
+ Default.args = {
34
+ marginTop: '13px',
35
+ }
@@ -100,6 +100,7 @@
100
100
  :min-option-length="1"
101
101
  select-height="36px"
102
102
  select-width="100%"
103
+ :should-use-teleport="false"
103
104
  >
104
105
  <template #selector>
105
106
  <OptionTitle> {{ filter.selectedText }} </OptionTitle>
@@ -255,6 +256,7 @@
255
256
  :label="filter.label"
256
257
  select-height="36px"
257
258
  select-width="100%"
259
+ :should-use-teleport="false"
258
260
  >
259
261
  <template #selector="{ selectedValue }">
260
262
  <OptionTitle>