@eturnity/eturnity_reusable_components 8.19.8-EPDM-12618.6 → 8.19.8-EPDM-14690.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_reusable_components",
3
- "version": "8.19.8-EPDM-12618.6",
3
+ "version": "8.19.8-EPDM-14690.2",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
@@ -0,0 +1,424 @@
1
+ <template>
2
+ <div class="demo-container">
3
+ <h1>BarChart Component Examples</h1>
4
+
5
+ <h2>1. Basic Bar Chart</h2>
6
+ <BarChart
7
+ :data="basicData"
8
+ :value-formatter="kwhFormatter"
9
+ height="300px"
10
+ width="800px"
11
+ />
12
+
13
+ <h2>2. Bar Chart with Custom Bar Width</h2>
14
+ <BarChart
15
+ :bar-width="80"
16
+ :data="basicData"
17
+ :value-formatter="kwhFormatter"
18
+ height="300px"
19
+ width="800px"
20
+ />
21
+
22
+ <h2>3. Stacked Bar Chart - 3 Series with Legend</h2>
23
+ <BarChart
24
+ :bar-width="80"
25
+ :data="quarterLabels"
26
+ :is-legend-shown="true"
27
+ :series="threeZoneSeries"
28
+ :value-formatter="kwhFormatter"
29
+ height="400px"
30
+ width="800px"
31
+ />
32
+
33
+ <h2>4. Stacked Bar Chart - 6 Series with Multi-Row Legend</h2>
34
+ <BarChart
35
+ :bar-width="60"
36
+ :data="monthLabels"
37
+ :is-legend-shown="true"
38
+ :legends-item-per-row="3"
39
+ :series="tariffZones"
40
+ :value-formatter="kwhFormatter"
41
+ height="400px"
42
+ width="800px"
43
+ />
44
+
45
+ <h2>5. Scrollable Chart with Many Data Points</h2>
46
+ <BarChart
47
+ :bar-width="40"
48
+ :data="dailyData"
49
+ :is-scrollable="true"
50
+ :value-formatter="kwhFormatter"
51
+ height="300px"
52
+ width="800px"
53
+ />
54
+
55
+ <h2>6. Scrollable Chart with Selection</h2>
56
+ <BarChart
57
+ :bar-width="40"
58
+ :data="dailyData"
59
+ :is-scrollable="true"
60
+ :is-selection-enabled="true"
61
+ :selection-size="5"
62
+ :value-formatter="kwhFormatter"
63
+ height="300px"
64
+ width="800px"
65
+ @selection-change="handleSelectionChange"
66
+ />
67
+
68
+ <h2>7. Chart with Top Controls & Time Frame Selector</h2>
69
+ <BarChart
70
+ :bar-width="70"
71
+ :data="quarterLabels"
72
+ :is-legend-shown="true"
73
+ :selected-split-button="selectedTimeFrame"
74
+ :series="threeZoneSeries"
75
+ :split-button-options="timeFrameOptions"
76
+ :value-formatter="kwhFormatter"
77
+ chart-controls-position="top"
78
+ height="350px"
79
+ width="800px"
80
+ @select-split-button="handleTimeFrameSelect"
81
+ />
82
+
83
+ <h2>8. Chart with Bottom Controls & Time Frame Selector</h2>
84
+ <BarChart
85
+ :bar-width="70"
86
+ :data="quarterLabels"
87
+ :is-legend-shown="true"
88
+ :selected-split-button="selectedTimeFrame"
89
+ :series="threeZoneSeries"
90
+ :split-button-options="timeFrameOptions"
91
+ :value-formatter="kwhFormatter"
92
+ chart-controls-position="bottom"
93
+ height="350px"
94
+ width="800px"
95
+ @select-split-button="handleTimeFrameSelect"
96
+ />
97
+
98
+ <h2>9. Chart with Custom Tooltip</h2>
99
+ <BarChart :bar-width="60" :data="basicData" height="300px" width="800px">
100
+ <template #tooltip="{ item }">
101
+ <div style="padding: 8px">
102
+ <div style="font-weight: bold">{{ item.label }}</div>
103
+ <div>Consumption: {{ kwhFormatter(item.segments[0].value) }}</div>
104
+ <div>Peak Time: {{ getPeakTime(item.label) }}</div>
105
+ <div>Efficiency: {{ getEfficiency(item.segments[0].value) }}</div>
106
+ </div>
107
+ </template>
108
+ </BarChart>
109
+
110
+ <h2>10. Chart with Bottom Fields</h2>
111
+ <BarChart
112
+ :bar-width="60"
113
+ :data="basicData"
114
+ :is-bottom-fields-shown="true"
115
+ :value-formatter="kwhFormatter"
116
+ height="300px"
117
+ width="800px"
118
+ @update-value="handleValueUpdate"
119
+ />
120
+
121
+ <h2>11. Scrollable Chart with Bottom Fields</h2>
122
+ <BarChart
123
+ :bar-width="40"
124
+ :data="monthlyData"
125
+ :is-bottom-fields-shown="true"
126
+ :is-scrollable="true"
127
+ :value-formatter="kwhFormatter"
128
+ height="300px"
129
+ width="800px"
130
+ />
131
+
132
+ <h2>12. Stacked Chart with Bottom Fields</h2>
133
+ <BarChart
134
+ :bar-width="70"
135
+ :data="quarterLabels"
136
+ :is-bottom-fields-shown="true"
137
+ :is-legend-shown="true"
138
+ :series="threeZoneSeries"
139
+ :value-formatter="kwhFormatter"
140
+ height="400px"
141
+ width="800px"
142
+ />
143
+
144
+ <h2>13. Scrollable Stacked Chart with Bottom Fields</h2>
145
+ <BarChart
146
+ :bar-width="60"
147
+ :data="monthLabels"
148
+ :is-bottom-fields-shown="true"
149
+ :is-legend-shown="true"
150
+ :is-scrollable="true"
151
+ :legends-item-per-row="3"
152
+ :series="tariffZones"
153
+ :value-formatter="kwhFormatter"
154
+ height="400px"
155
+ width="800px"
156
+ />
157
+
158
+ <h2>14. Chart with Selection and Bottom Fields</h2>
159
+ <BarChart
160
+ :bar-width="40"
161
+ :data="monthlyData"
162
+ :is-bottom-fields-shown="true"
163
+ :is-scrollable="true"
164
+ :is-selection-enabled="true"
165
+ :selection-size="6"
166
+ :value-formatter="kwhFormatter"
167
+ height="350px"
168
+ width="800px"
169
+ @selection-change="handleSelectionChange"
170
+ />
171
+
172
+ <h2>15. Stacked Chart and Bottom Fields</h2>
173
+ <BarChart
174
+ :bar-width="70"
175
+ :data="quarterLabels"
176
+ :is-bottom-fields-shown="true"
177
+ :is-legend-shown="true"
178
+ :series="threeZoneSeries"
179
+ :value-formatter="kwhFormatter"
180
+ height="400px"
181
+ width="800px"
182
+ @selection-change="handleSelectionChange"
183
+ />
184
+ </div>
185
+ </template>
186
+
187
+ <script setup>
188
+ import { ref } from 'vue'
189
+ import BarChart from './components/barchart/index.vue'
190
+
191
+ // Formatters
192
+ const kwhFormatter = (value) => `${value.toLocaleString()} kWh`
193
+
194
+ // Basic data
195
+ const basicData = [
196
+ { label: 'Jan', value: 1200 },
197
+ { label: 'Feb', value: 1800 },
198
+ { label: 'Mar', value: 2200 },
199
+ { label: 'Apr', value: 1600 },
200
+ { label: 'May', value: 2400 },
201
+ { label: 'Jun', value: 2800 },
202
+ { label: 'Jul', value: 2200 },
203
+ { label: 'Aug', value: 1600 },
204
+ { label: 'Sep', value: 2400 },
205
+ { label: 'Oct', value: 2800 },
206
+ { label: 'Nov', value: 2200 },
207
+ { label: 'Dec', value: 1600 },
208
+ ]
209
+
210
+ // Minimal data with fewer points
211
+ const minimalData = [
212
+ { label: 'Q1', value: 3500 },
213
+ { label: 'Q2', value: 4200 },
214
+ { label: 'Q3', value: 5100 },
215
+ { label: 'Q4', value: 4800 },
216
+ ]
217
+
218
+ // Labels for stacked charts
219
+ const quarterLabels = [
220
+ { label: 'Q1' },
221
+ { label: 'Q2' },
222
+ { label: 'Q3' },
223
+ { label: 'Q4' },
224
+ ]
225
+
226
+ const monthLabels = [
227
+ { label: 'Jan' },
228
+ { label: 'Feb' },
229
+ { label: 'Mar' },
230
+ { label: 'Apr' },
231
+ { label: 'May' },
232
+ { label: 'Jun' },
233
+ { label: 'Jul' },
234
+ { label: 'Aug' },
235
+ { label: 'Sep' },
236
+ { label: 'Oct' },
237
+ { label: 'Nov' },
238
+ { label: 'Dec' },
239
+ ]
240
+
241
+ const monthlyData = [
242
+ { label: 'Jan', value: 300 },
243
+ { label: 'Feb', value: 600 },
244
+ { label: 'Mar', value: 1000 },
245
+ { label: 'Apr', value: 1200 },
246
+ { label: 'May', value: 1400 },
247
+ { label: 'Jun', value: 1810 },
248
+ { label: 'Jul', value: 2000 },
249
+ { label: 'Aug', value: 2200 },
250
+ { label: 'Sep', value: 2400 },
251
+ { label: 'Oct', value: 2600 },
252
+ { label: 'Nov', value: 2800 },
253
+ { label: 'Dec', value: 3000 },
254
+ { label: 'Jan 2024', value: 2800 },
255
+ { label: 'Feb 2024', value: 2600 },
256
+ { label: 'Mar 2024', value: 2900 },
257
+ { label: 'Apr 2024', value: 3100 },
258
+ { label: 'May 2024', value: 2700 },
259
+ { label: 'Jun 2024', value: 2500 },
260
+ ]
261
+
262
+ // Three zone series data
263
+ const threeZoneSeries = [
264
+ {
265
+ name: 'Peak Hours',
266
+ data: [
267
+ { label: 'Q1', value: 800 },
268
+ { label: 'Q2', value: 1200 },
269
+ { label: 'Q3', value: 1600 },
270
+ { label: 'Q4', value: 1400 },
271
+ ],
272
+ },
273
+ {
274
+ name: 'Mid-Peak',
275
+ data: [
276
+ { label: 'Q1', value: 600 },
277
+ { label: 'Q2', value: 800 },
278
+ { label: 'Q3', value: 1000 },
279
+ { label: 'Q4', value: 900 },
280
+ ],
281
+ },
282
+ {
283
+ name: 'Off-Peak',
284
+ data: [
285
+ { label: 'Q1', value: 400 },
286
+ { label: 'Q2', value: 500 },
287
+ { label: 'Q3', value: 600 },
288
+ { label: 'Q4', value: 550 },
289
+ ],
290
+ },
291
+ ]
292
+
293
+ // Six zone series data
294
+ const tariffZones = [
295
+ {
296
+ name: 'Residential',
297
+ data: monthLabels.map(() => ({
298
+ label: 'Jan',
299
+ value: Math.floor(Math.random() * 300) + 100,
300
+ })),
301
+ },
302
+ {
303
+ name: 'Commercial',
304
+ data: monthLabels.map(() => ({
305
+ label: 'Jan',
306
+ value: Math.floor(Math.random() * 400) + 200,
307
+ })),
308
+ },
309
+ {
310
+ name: 'Industrial',
311
+ data: monthLabels.map(() => ({
312
+ label: 'Jan',
313
+ value: Math.floor(Math.random() * 500) + 300,
314
+ })),
315
+ },
316
+ {
317
+ name: 'Agricultural',
318
+ data: monthLabels.map(() => ({
319
+ label: 'Jan',
320
+ value: Math.floor(Math.random() * 200) + 100,
321
+ })),
322
+ },
323
+ {
324
+ name: 'Public',
325
+ data: monthLabels.map(() => ({
326
+ label: 'Jan',
327
+ value: Math.floor(Math.random() * 300) + 150,
328
+ })),
329
+ },
330
+ {
331
+ name: 'Special',
332
+ data: monthLabels.map(() => ({
333
+ label: 'Jan',
334
+ value: Math.floor(Math.random() * 250) + 100,
335
+ })),
336
+ },
337
+ ].map((zone) => ({
338
+ ...zone,
339
+ data: zone.data.map((item, index) => ({
340
+ ...item,
341
+ label: monthLabels[index].label,
342
+ })),
343
+ }))
344
+
345
+ // Daily data for scrollable example
346
+ const dailyData = Array.from({ length: 31 }, (_, i) => ({
347
+ label: `Day ${i + 1}`,
348
+ value: Math.floor(Math.random() * 200) + 50,
349
+ }))
350
+
351
+ // Time frame options
352
+ const timeFrameOptions = [
353
+ { label: 'Daily', value: 'daily' },
354
+ { label: 'Weekly', value: 'weekly' },
355
+ { label: 'Monthly', value: 'monthly' },
356
+ { label: 'Yearly', value: 'yearly' },
357
+ ]
358
+ const selectedTimeFrame = ref('monthly')
359
+
360
+ // View options
361
+ const viewOptions = [
362
+ { label: 'Chart', value: 'chart' },
363
+ { label: 'Table', value: 'table' },
364
+ { label: 'Combined', value: 'combined' },
365
+ ]
366
+ const selectedView = ref('chart')
367
+
368
+ // Handlers
369
+ const handleTimeFrameSelect = (value) => {
370
+ selectedTimeFrame.value = value
371
+ console.log(`Time frame changed to: ${value}`)
372
+ }
373
+
374
+ const handleViewSelect = (value) => {
375
+ selectedView.value = value
376
+ console.log(`View changed to: ${value}`)
377
+ }
378
+
379
+ const handleSelectionChange = (selection) => {
380
+ console.log('Selection changed:', selection)
381
+ }
382
+
383
+ const handleValueUpdate = (data) => {
384
+ console.log('Value updated:', data)
385
+ }
386
+
387
+ // Helper for custom tooltip
388
+ const getPeakTime = (month) => {
389
+ const peakTimes = {
390
+ Jan: '6-8 PM',
391
+ Feb: '5-7 PM',
392
+ Mar: '4-6 PM',
393
+ Apr: '3-5 PM',
394
+ May: '2-4 PM',
395
+ Jun: '1-3 PM',
396
+ }
397
+ return peakTimes[month] || 'N/A'
398
+ }
399
+
400
+ const getEfficiency = (value) => {
401
+ if (value < 1500) return 'High Efficiency'
402
+ if (value < 2500) return 'Medium Efficiency'
403
+ return 'Low Efficiency'
404
+ }
405
+ </script>
406
+
407
+ <style scoped>
408
+ .demo-container {
409
+ padding: 20px;
410
+ font-family: 'Figtree', sans-serif;
411
+ }
412
+
413
+ .demo-container > h2 {
414
+ margin: 40px 0 20px;
415
+ color: #333;
416
+ border-bottom: 1px solid #eee;
417
+ padding-bottom: 10px;
418
+ }
419
+
420
+ h1 {
421
+ color: #2c3e50;
422
+ margin-bottom: 30px;
423
+ }
424
+ </style>
@@ -0,0 +1,229 @@
1
+ <template>
2
+ <div
3
+ style="
4
+ margin-top: 100px;
5
+ margin-left: 80px;
6
+ padding-bottom: 100px;
7
+ display: flex;
8
+ flex-direction: column;
9
+ "
10
+ >
11
+ <!-- Simple bar chart -->
12
+ <BarChart
13
+ :bar-width="60"
14
+ chart-controls-position="bottom"
15
+ :data="monthlyData"
16
+ height="400px"
17
+ :is-bottom-fields-shown="true"
18
+ :is-scrollable="false"
19
+ :is-selection-enabled="true"
20
+ :selection-size="3"
21
+ :value-formatter="valueFormatter"
22
+ width="700px"
23
+ @selection-change="handleSelectionChange"
24
+ />
25
+ <br />
26
+ <br />
27
+
28
+ <!-- Stacked bar chart -->
29
+ <BarChart
30
+ :bar-width="60"
31
+ :data="monthLabels"
32
+ height="400px"
33
+ :is-bottom-fields-shown="true"
34
+ :is-legend-shown="true"
35
+ :legends-item-per-row="4"
36
+ :selected-split-button="selectedTimeFrame"
37
+ :series="tariffZones"
38
+ :show-percentage-on-tooltip="true"
39
+ :split-button-options="options"
40
+ :value-formatter="valueFormatter"
41
+ width="700px"
42
+ y-axis-title="Energy (kWh)"
43
+ @input-blur="handleInputBlur"
44
+ @select-split-button="handleSelectSplitButton"
45
+ />
46
+
47
+ <!-- Stacked bar chart -->
48
+ <BarChart
49
+ :bar-width="60"
50
+ :data="monthLabels"
51
+ field-mode="percentage"
52
+ height="400px"
53
+ :is-bottom-fields-shown="true"
54
+ :is-legend-shown="false"
55
+ :legends-item-per-row="4"
56
+ :series="tariffZones"
57
+ :value-formatter="valueFormatter"
58
+ width="700px"
59
+ @input-blur="handleInputBlur"
60
+ @select-split-button="handleSelectSplitButton"
61
+ >
62
+ <!-- <template #tooltip="{ item, segment }">
63
+ <div style="display: flex; flex-direction: column">
64
+ {{ $c.log(item, segment) }}
65
+ <div>{{ item.label }}</div>
66
+ <div>{{ item.segments[0].value }} kWh</div>
67
+ </div>
68
+ </template> -->
69
+ </BarChart>
70
+ </div>
71
+ </template>
72
+
73
+ <script setup>
74
+ import { ref } from 'vue'
75
+ import BarChart from '@/components/barchart/index.vue'
76
+
77
+ const options = [
78
+ { label: 'Day', value: 'day' },
79
+ { label: 'Month', value: 'month' },
80
+ { label: 'Year', value: 'year' },
81
+ ]
82
+
83
+ const selectedTimeFrame = ref('day')
84
+
85
+ const handleSelectSplitButton = (value) => {
86
+ selectedTimeFrame.value = value
87
+ }
88
+
89
+ const monthlyData = [
90
+ { label: 'Jan', value: 300 },
91
+ { label: 'Feb', value: 600 },
92
+ { label: 'Mar', value: 1000 },
93
+ { label: 'Apr', value: 1200 },
94
+ { label: 'May', value: 1400 },
95
+ { label: 'Jun', value: 1810 },
96
+ { label: 'Jul', value: 1400 },
97
+ { label: 'Aug', value: 1200 },
98
+ { label: 'Sep', value: 1000 },
99
+ // { label: 'Oct', value: 800 },
100
+ // { label: 'Nov', value: 600 },
101
+ // { label: 'Dec', value: 400 },
102
+ // { label: 'Jan', value: 300 },
103
+ // { label: 'Feb', value: 600 },
104
+ // { label: 'Mar', value: 1000 },
105
+ // { label: 'Apr', value: 1200 },
106
+ // { label: 'May', value: 1400 },
107
+ // { label: 'Jun', value: 1810 },
108
+ // { label: 'Jul', value: 1400 },
109
+ // { label: 'Aug', value: 1200 },
110
+ // { label: 'Sep', value: 1000 },
111
+ // { label: 'Oct', value: 800 },
112
+ // { label: 'Nov', value: 600 },
113
+ // { label: 'Dec', value: 400 },
114
+
115
+ // ... more months
116
+ ]
117
+
118
+ const monthLabels = [
119
+ { label: 'Jan' },
120
+ { label: 'Feb' },
121
+ { label: 'Mar' },
122
+ { label: 'Apr' },
123
+ { label: 'May' },
124
+ { label: 'Jun' },
125
+ // ... more months
126
+ ]
127
+
128
+ const tariffZones = ref([
129
+ {
130
+ name: 'Tariff Zone 1',
131
+ data: [
132
+ { label: 'Jan', value: 200 },
133
+ { label: 'Feb', value: 130 },
134
+ { label: 'Mar', value: 220 },
135
+ { label: 'Apr', value: 230 },
136
+ { label: 'May', value: 200 },
137
+ { label: 'Jun', value: 210 },
138
+ // ... more months
139
+ ],
140
+ },
141
+ {
142
+ name: 'Tariff Zone 2',
143
+ data: [
144
+ { label: 'Jan', value: 200 },
145
+ { label: 'Feb', value: 100 },
146
+ { label: 'Mar', value: 270 },
147
+ { label: 'Apr', value: 180 },
148
+ { label: 'May', value: 300 },
149
+ { label: 'Jun', value: 250 },
150
+ // ... more months
151
+ ],
152
+ },
153
+ {
154
+ name: 'Tariff Zone 3',
155
+ data: [
156
+ { label: 'Jan', value: 200 },
157
+ { label: 'Feb', value: 100 },
158
+ { label: 'Mar', value: 210 },
159
+ { label: 'Apr', value: 220 },
160
+ { label: 'May', value: 300 },
161
+ { label: 'Jun', value: 190 },
162
+ // ... more months
163
+ ],
164
+ },
165
+ {
166
+ name: 'Tariff Zone 4',
167
+ data: [
168
+ { label: 'Jan', value: 200 },
169
+ { label: 'Feb', value: 100 },
170
+ { label: 'Mar', value: 210 },
171
+ { label: 'Apr', value: 220 },
172
+ { label: 'May', value: 300 },
173
+ { label: 'Jun', value: 190 },
174
+ // ... more months
175
+ ],
176
+ },
177
+ {
178
+ name: 'Tariff Zone 5',
179
+ data: [
180
+ { label: 'Jan', value: 200 },
181
+ { label: 'Feb', value: 100 },
182
+ { label: 'Mar', value: 210 },
183
+ { label: 'Apr', value: 220 },
184
+ { label: 'May', value: 300 },
185
+ { label: 'Jun', value: 190 },
186
+ // ... more months
187
+ ],
188
+ },
189
+ {
190
+ name: 'Tariff Zone 6',
191
+ data: [
192
+ { label: 'Jan', value: 200 },
193
+ { label: 'Feb', value: 100 },
194
+ { label: 'Mar', value: 210 },
195
+ { label: 'Apr', value: 220 },
196
+ { label: 'May', value: 300 },
197
+ { label: 'Jun', value: 190 },
198
+ // ... more months
199
+ ],
200
+ },
201
+ // ... more tariff zones
202
+ ])
203
+
204
+ const valueFormatter = (value) => {
205
+ return `${value} kWh`
206
+ }
207
+
208
+ const handleSelectionChange = (selectedBars) => {
209
+ console.log('selectedBars', selectedBars)
210
+ }
211
+
212
+ const handleInputBlur = (payload) => {
213
+ const newVal = [...tariffZones.value].map((zone) => {
214
+ if (zone.name === payload.seriesName) {
215
+ zone.data = zone.data.map((item) => {
216
+ if (item.label === payload.label) {
217
+ item.value = payload.value
218
+ }
219
+ return item
220
+ })
221
+ }
222
+ return zone
223
+ })
224
+
225
+ tariffZones.value = newVal
226
+ }
227
+ </script>
228
+
229
+ <style lang="scss" scoped></style>