vue-chrts 0.0.114 → 0.0.115

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 (71) hide show
  1. package/.vscode/extensions.json +3 -0
  2. package/auto-imports.d.ts +58 -0
  3. package/components.d.ts +46 -0
  4. package/image.png +0 -0
  5. package/index.html +14 -0
  6. package/index.js +2 -0
  7. package/package.json +1 -4
  8. package/src/components/Area/AreaChart.vue +141 -0
  9. package/src/components/Area/index.ts +1 -0
  10. package/src/components/AreaStacked/AreaStackedChart.vue +51 -0
  11. package/{dist/components/AreaStacked/index.d.ts → src/components/AreaStacked/index.ts} +1 -1
  12. package/src/components/Bar/BarChart.vue +130 -0
  13. package/src/components/Bar/index.ts +1 -0
  14. package/src/components/Crosshair/Crosshair.vue +46 -0
  15. package/src/components/Crosshair/index.ts +1 -0
  16. package/src/components/Donut/DonutChart.vue +71 -0
  17. package/src/components/Donut/index.ts +1 -0
  18. package/src/components/Line/LineChart.vue +94 -0
  19. package/src/components/Line/index.ts +1 -0
  20. package/src/components/Tooltip.vue +17 -0
  21. package/src/components.ts +6 -0
  22. package/src/index.ts +6 -0
  23. package/src/shims-vue.d.ts +1 -0
  24. package/src-demo/AdminTemplate.vue +5 -0
  25. package/src-demo/App.vue +37 -0
  26. package/src-demo/AreaChartPage.vue +125 -0
  27. package/src-demo/BarChartPage.vue +166 -0
  28. package/src-demo/DashboardTemplate.vue +687 -0
  29. package/src-demo/Homepage.vue +325 -0
  30. package/src-demo/LineChartPage.vue +140 -0
  31. package/src-demo/assets/main.css +34 -0
  32. package/src-demo/components/Progress/Progress.vue +42 -0
  33. package/src-demo/components/Progress/index.ts +1 -0
  34. package/src-demo/components/Status/Status.vue +95 -0
  35. package/src-demo/components/Status/index.ts +1 -0
  36. package/src-demo/components/charts.ts +37 -0
  37. package/src-demo/components/index.ts +49 -0
  38. package/src-demo/data/AreaChartData.ts +294 -0
  39. package/src-demo/data/BarChartData.ts +79 -0
  40. package/src-demo/data/IncomeExpenseData.ts +189 -0
  41. package/src-demo/data/InvestmentData.ts +352 -0
  42. package/src-demo/data/RevenueData.ts +58 -0
  43. package/src-demo/data/VisitorsData.ts +260 -0
  44. package/src-demo/elements/Button.vue +13 -0
  45. package/src-demo/elements/Card.vue +17 -0
  46. package/src-demo/elements/Dropdown.vue +112 -0
  47. package/src-demo/elements/Logo.vue +8 -0
  48. package/src-demo/elements/Table.vue +363 -0
  49. package/src-demo/elements/TopBar.vue +40 -0
  50. package/src-demo/index.ts +58 -0
  51. package/tsconfig.json +11 -0
  52. package/vite.config.ts +59 -0
  53. package/dist/components/Area/AreaChart.vue.d.ts +0 -37
  54. package/dist/components/Area/index.d.ts +0 -1
  55. package/dist/components/AreaStacked/AreaStackedChart.vue.d.ts +0 -18
  56. package/dist/components/Bar/BarChart.vue.d.ts +0 -37
  57. package/dist/components/Bar/index.d.ts +0 -1
  58. package/dist/components/Crosshair/Crosshair.vue.d.ts +0 -38
  59. package/dist/components/Crosshair/index.d.ts +0 -1
  60. package/dist/components/Donut/DonutChart.vue.d.ts +0 -31
  61. package/dist/components/Donut/index.d.ts +0 -1
  62. package/dist/components/Line/LineChart.vue.d.ts +0 -28
  63. package/dist/components/Line/index.d.ts +0 -1
  64. package/dist/components/Tooltip.vue.d.ts +0 -14
  65. package/dist/components.d.ts +0 -6
  66. package/dist/index.cjs +0 -502
  67. package/dist/index.cjs.map +0 -1
  68. package/dist/index.d.ts +0 -5
  69. package/dist/index.js +0 -9615
  70. package/dist/index.js.map +0 -1
  71. /package/{dist → public}/vite.svg +0 -0
@@ -0,0 +1,49 @@
1
+ // index.ts
2
+ import Progress from './Progress/Progress.vue';
3
+ import Status from './Status/Status.vue';
4
+ import Tooltip from './Tooltip/Tooltip.vue';
5
+ import type {
6
+ AreaChartType,
7
+ AreaStackedChartType,
8
+ BarChartType,
9
+ DonutChartType,
10
+ LineChartType,
11
+ PaginationPositionType,
12
+
13
+ // Also import the prop types
14
+ AreaChartProps,
15
+ AreaStackedChartProps,
16
+ BarChartProps,
17
+ DonutChartProps,
18
+ LineChartProps
19
+ } from './charts';
20
+
21
+ export { Progress, Status, Tooltip };
22
+
23
+ // Re-export prop types for easier access
24
+ export type {
25
+ AreaChartProps,
26
+ AreaStackedChartProps,
27
+ BarChartProps,
28
+ DonutChartProps,
29
+ LineChartProps
30
+ };
31
+
32
+ // Define the return type of loadCharts
33
+ export interface ChartModules {
34
+ AreaChart: AreaChartType;
35
+ AreaStackedChart: AreaStackedChartType;
36
+ BarChart: BarChartType;
37
+ DonutChart: DonutChartType;
38
+ LineChart: LineChartType;
39
+ PaginationPosition: PaginationPositionType;
40
+ }
41
+
42
+ export const loadCharts = (): Promise<ChartModules> => {
43
+ if ((import.meta as any).client || typeof window !== 'undefined') {
44
+ return import('./charts').then((module) => {
45
+ return module;
46
+ });
47
+ }
48
+ return Promise.resolve({} as ChartModules);
49
+ };
@@ -0,0 +1,294 @@
1
+ import type { BulletLegendItemInterface } from '@unovis/ts'
2
+
3
+ /* Demo data for homepage */
4
+ export const categories1: Record<string, BulletLegendItemInterface> = {
5
+ desktop: { name: 'Desktop', color: '#38bdf8' },
6
+ mobile: { name: 'Mobile', color: '#00dc82' }
7
+ }
8
+
9
+ export const categories2: Record<string, BulletLegendItemInterface> = {
10
+ temperature: { name: 'Temperature', color: '#00dc82' }
11
+ }
12
+
13
+ export const categories3: Record<string, BulletLegendItemInterface> = {
14
+ desktop: { name: 'Desktop', color: '#156F36' },
15
+ mobile: { name: 'Mobile', color: '#4ade80' }
16
+ }
17
+
18
+ export const categories4: Record<string, BulletLegendItemInterface> = {
19
+ firstTime: { name: 'First time', color: '#156F36' },
20
+ returning: { name: 'Returning', color: '#156F3640' }
21
+ }
22
+
23
+ export const categories5: Record<string, BulletLegendItemInterface> = {
24
+ desktop: { name: 'Desktop', color: '#4ade80' }
25
+ }
26
+
27
+ export interface AreaChartItem1 {
28
+ date: string
29
+ desktop: number
30
+ mobile: number
31
+ }
32
+
33
+ export const AreaChartData1: AreaChartItem1[] = [
34
+ { date: '2024-04-01', desktop: 222, mobile: 150 },
35
+ { date: '2024-04-02', desktop: 180, mobile: 97 },
36
+ { date: '2024-04-03', desktop: 167, mobile: 120 },
37
+ { date: '2024-04-04', desktop: 260, mobile: 240 },
38
+ { date: '2024-04-05', desktop: 373, mobile: 290 },
39
+ // { date: '2024-04-06', desktop: 340, mobile: 310 },
40
+ // { date: '2024-04-07', desktop: 245, mobile: 180 },
41
+ // { date: '2024-04-08', desktop: 409, mobile: 320 },
42
+ // { date: '2024-04-09', desktop: 110, mobile: 59 },
43
+ // { date: '2024-04-10', desktop: 261, mobile: 190 },
44
+ // { date: '2024-04-11', desktop: 350, mobile: 327 },
45
+ // { date: '2024-04-12', desktop: 292, mobile: 210 },
46
+ // { date: '2024-04-13', desktop: 380, mobile: 342 },
47
+ // { date: '2024-04-14', desktop: 220, mobile: 137 },
48
+ // { date: '2024-04-15', desktop: 170, mobile: 120 },
49
+ // { date: '2024-04-16', desktop: 190, mobile: 138 },
50
+ // { date: '2024-04-17', desktop: 446, mobile: 360 },
51
+ // { date: '2024-04-18', desktop: 410, mobile: 364 },
52
+ // { date: '2024-04-19', desktop: 243, mobile: 180 },
53
+ // { date: '2024-04-20', desktop: 150, mobile: 89 },
54
+ // { date: '2024-04-21', desktop: 200, mobile: 137 },
55
+ // { date: '2024-04-22', desktop: 224, mobile: 170 },
56
+ // { date: '2024-04-23', desktop: 230, mobile: 138 },
57
+ // { date: '2024-04-24', desktop: 387, mobile: 290 },
58
+ // { date: '2024-04-25', desktop: 250, mobile: 215 },
59
+ // { date: '2024-04-26', desktop: 130, mobile: 75 },
60
+ // { date: '2024-04-27', desktop: 420, mobile: 383 },
61
+ // { date: '2024-04-28', desktop: 180, mobile: 122 },
62
+ // { date: '2024-04-29', desktop: 315, mobile: 240 },
63
+ // { date: '2024-04-30', desktop: 454, mobile: 380 },
64
+ // { date: '2024-05-01', desktop: 220, mobile: 165 },
65
+ // { date: '2024-05-02', desktop: 310, mobile: 293 },
66
+ // { date: '2024-05-03', desktop: 247, mobile: 190 },
67
+ // { date: '2024-05-04', desktop: 420, mobile: 385 },
68
+ // { date: '2024-05-05', desktop: 481, mobile: 390 },
69
+ // { date: '2024-05-06', desktop: 520, mobile: 489 },
70
+ // { date: '2024-05-07', desktop: 388, mobile: 300 },
71
+ // { date: '2024-05-08', desktop: 210, mobile: 149 },
72
+ // { date: '2024-05-09', desktop: 227, mobile: 180 },
73
+ // { date: '2024-05-10', desktop: 330, mobile: 293 },
74
+ // { date: '2024-05-11', desktop: 335, mobile: 270 },
75
+ // { date: '2024-05-12', desktop: 240, mobile: 197 },
76
+ // { date: '2024-05-13', desktop: 197, mobile: 160 },
77
+ // { date: '2024-05-14', desktop: 490, mobile: 448 },
78
+ // { date: '2024-05-15', desktop: 473, mobile: 473 },
79
+ // { date: '2024-06-01', desktop: 222, mobile: 150 },
80
+ // { date: '2024-06-02', desktop: 180, mobile: 97 },
81
+ // { date: '2024-06-03', desktop: 167, mobile: 120 },
82
+ // { date: '2024-06-04', desktop: 260, mobile: 240 },
83
+ // { date: '2024-06-05', desktop: 373, mobile: 290 },
84
+ // { date: '2024-06-06', desktop: 340, mobile: 310 },
85
+ // { date: '2024-06-07', desktop: 245, mobile: 180 },
86
+ // { date: '2024-06-08', desktop: 409, mobile: 320 },
87
+ // { date: '2024-06-09', desktop: 110, mobile: 59 },
88
+ // { date: '2024-06-10', desktop: 261, mobile: 190 },
89
+ // { date: '2024-06-11', desktop: 350, mobile: 327 },
90
+ // { date: '2024-06-12', desktop: 292, mobile: 210 },
91
+ // { date: '2024-06-13', desktop: 380, mobile: 342 },
92
+ // { date: '2024-06-14', desktop: 220, mobile: 137 },
93
+ // { date: '2024-06-15', desktop: 170, mobile: 120 },
94
+ // { date: '2024-06-16', desktop: 190, mobile: 138 },
95
+ // { date: '2024-06-17', desktop: 446, mobile: 360 },
96
+ // { date: '2024-06-18', desktop: 410, mobile: 364 },
97
+ // { date: '2024-06-19', desktop: 243, mobile: 180 },
98
+ // { date: '2024-06-20', desktop: 150, mobile: 89 },
99
+ // { date: '2024-06-21', desktop: 200, mobile: 137 },
100
+ // { date: '2024-06-22', desktop: 224, mobile: 170 },
101
+ // { date: '2024-06-23', desktop: 230, mobile: 138 },
102
+ // { date: '2024-06-24', desktop: 387, mobile: 290 },
103
+ // { date: '2024-06-25', desktop: 250, mobile: 215 },
104
+ // { date: '2024-06-26', desktop: 130, mobile: 75 },
105
+ // { date: '2024-06-27', desktop: 420, mobile: 383 },
106
+ // { date: '2024-06-28', desktop: 180, mobile: 122 },
107
+ // { date: '2024-06-29', desktop: 315, mobile: 240 },
108
+ // { date: '2024-06-30', desktop: 454, mobile: 380 },
109
+ // { date: '2024-07-01', desktop: 220, mobile: 165 },
110
+ // { date: '2024-07-02', desktop: 310, mobile: 293 },
111
+ // { date: '2024-07-03', desktop: 247, mobile: 190 },
112
+ // { date: '2024-07-04', desktop: 420, mobile: 385 },
113
+ // { date: '2024-07-05', desktop: 481, mobile: 390 },
114
+ // { date: '2024-07-06', desktop: 520, mobile: 489 },
115
+ // { date: '2024-07-07', desktop: 388, mobile: 300 },
116
+ // { date: '2024-07-08', desktop: 210, mobile: 149 },
117
+ // { date: '2024-07-09', desktop: 227, mobile: 180 },
118
+ // { date: '2024-07-10', desktop: 330, mobile: 293 },
119
+ // { date: '2024-07-11', desktop: 335, mobile: 270 },
120
+ // { date: '2024-07-12', desktop: 240, mobile: 197 },
121
+ // { date: '2024-07-13', desktop: 197, mobile: 160 },
122
+ // { date: '2024-07-14', desktop: 490, mobile: 448 },
123
+ // { date: '2024-07-15', desktop: 473, mobile: 473 }
124
+ ]
125
+
126
+ export interface AreaChartItem2 {
127
+ hour: string
128
+ temperature: number
129
+ }
130
+
131
+ export const AreaChartData2: AreaChartItem2[] = [
132
+ { hour: '00:00', temperature: 12.8 },
133
+ { hour: '01:00', temperature: 12.4 },
134
+ { hour: '02:00', temperature: 12.2 },
135
+ { hour: '03:00', temperature: 8.9 },
136
+ { hour: '04:00', temperature: 8.7 },
137
+ { hour: '05:00', temperature: 8.3 },
138
+ { hour: '06:00', temperature: 8.3 },
139
+ { hour: '07:00', temperature: 8.3 },
140
+ { hour: '08:00', temperature: 10.5 },
141
+ { hour: '09:00', temperature: 12.0 },
142
+ { hour: '10:00', temperature: 13.0 },
143
+ { hour: '11:00', temperature: 14.2 },
144
+ { hour: '12:00', temperature: 15.5 },
145
+ { hour: '13:00', temperature: 16.8 },
146
+ { hour: '14:00', temperature: 17.5 },
147
+ { hour: '15:00', temperature: 18.1 },
148
+ { hour: '16:00', temperature: 18.2 },
149
+ { hour: '17:00', temperature: 17.8 },
150
+ { hour: '18:00', temperature: 17.2 },
151
+ { hour: '19:00', temperature: 16.5 },
152
+ { hour: '20:00', temperature: 15.8 },
153
+ { hour: '21:00', temperature: 14.9 },
154
+ { hour: '22:00', temperature: 14.2 },
155
+ { hour: '23:00', temperature: 13.5 }
156
+ ]
157
+
158
+ export const AreaChartData3 = [
159
+ {
160
+ time: '00:00',
161
+ returning: 0,
162
+ firstTime: 0
163
+ },
164
+ {
165
+ time: '01:00',
166
+ returning: 400,
167
+ firstTime: 600
168
+ },
169
+ {
170
+ time: '02:00',
171
+ returning: 300,
172
+ firstTime: 300
173
+ },
174
+ {
175
+ time: '03:00',
176
+ returning: 300,
177
+ firstTime: 300
178
+ },
179
+ {
180
+ time: '04:00',
181
+ returning: 200,
182
+ firstTime: 300
183
+ },
184
+ {
185
+ time: '05:00',
186
+ returning: 111,
187
+ firstTime: 222
188
+ },
189
+ {
190
+ time: '06:00',
191
+ returning: 125,
192
+ firstTime: 125
193
+ },
194
+ {
195
+ time: '07:00',
196
+ returning: 0,
197
+ firstTime: 0
198
+ },
199
+ {
200
+ time: '08:00',
201
+ returning: 300,
202
+ firstTime: 250
203
+ },
204
+ {
205
+ time: '09:00',
206
+ returning: 0,
207
+ firstTime: 0
208
+ },
209
+ {
210
+ time: '10:00',
211
+ returning: 250,
212
+ firstTime: 350
213
+ },
214
+ {
215
+ time: '11:00',
216
+ returning: 125,
217
+ firstTime: 175
218
+ },
219
+ {
220
+ time: '12:00',
221
+ returning: 0,
222
+ firstTime: 0
223
+ },
224
+
225
+ {
226
+ time: '13:00',
227
+ returning: 0,
228
+ firstTime: 0
229
+ },
230
+ {
231
+ time: '14:00',
232
+ returning: 0,
233
+ firstTime: 0
234
+ },
235
+ {
236
+ time: '15:00',
237
+ returning: 0,
238
+ firstTime: 0
239
+ },
240
+ {
241
+ time: '16:00',
242
+ returning: 0,
243
+ firstTime: 0
244
+ },
245
+ {
246
+ time: '17:00',
247
+ returning: 0,
248
+ firstTime: 0
249
+ },
250
+ {
251
+ time: '18:00',
252
+ returning: 50,
253
+ firstTime: 50
254
+ },
255
+ {
256
+ time: '19:00',
257
+ returning: 50,
258
+ firstTime: 50
259
+ },
260
+ {
261
+ time: '20:00',
262
+ returning: 50,
263
+ firstTime: 50
264
+ },
265
+ {
266
+ time: '21:00',
267
+ returning: 0,
268
+ firstTime: 0
269
+ },
270
+ {
271
+ time: '22:00',
272
+ returning: 0,
273
+ firstTime: 0
274
+ },
275
+ {
276
+ time: '23:00',
277
+ returning: 0,
278
+ firstTime: 0
279
+ },
280
+ {
281
+ time: '00:00',
282
+ returning: 0,
283
+ firstTime: 0
284
+ }
285
+ ]
286
+
287
+ export const AreaChartData4 = [
288
+ { month: "January", desktop: 186 },
289
+ { month: "February", desktop: 305 },
290
+ { month: "March", desktop: 237 },
291
+ { month: "April", desktop: 73 },
292
+ { month: "May", desktop: 209 },
293
+ { month: "June", desktop: 214 },
294
+ ]
@@ -0,0 +1,79 @@
1
+ export interface ElectionDatum {
2
+ year: number
3
+ democrat: number
4
+ republican: number
5
+ other: number
6
+ }
7
+
8
+ export function capitalize(s: string): string {
9
+ return s.charAt(0).toUpperCase() + s.slice(1)
10
+ }
11
+
12
+ export const BarChartData: ElectionDatum[] = [
13
+ {
14
+ year: 1980,
15
+ republican: 43642639,
16
+ democrat: 35480948,
17
+ other: 6505863,
18
+ },
19
+ {
20
+ year: 1984,
21
+ republican: 54166829,
22
+ democrat: 37449813,
23
+ other: 811015,
24
+ },
25
+ {
26
+ year: 1988,
27
+ republican: 48642640,
28
+ democrat: 41716679,
29
+ other: 817798,
30
+ },
31
+ {
32
+ year: 1992,
33
+ republican: 38798913,
34
+ democrat: 44856747,
35
+ other: 20663272,
36
+ },
37
+ {
38
+ year: 1996,
39
+ republican: 39003697,
40
+ democrat: 47295351,
41
+ other: 9625419,
42
+ },
43
+ {
44
+ year: 2000,
45
+ republican: 50311372,
46
+ democrat: 50830580,
47
+ other: 4071625,
48
+ },
49
+ {
50
+ year: 2004,
51
+ republican: 61872711,
52
+ democrat: 58894561,
53
+ other: 1212870,
54
+ },
55
+ {
56
+ year: 2008,
57
+ republican: 59613835,
58
+ democrat: 69338846,
59
+ other: 1956116,
60
+ },
61
+ {
62
+ year: 2012,
63
+ republican: 60670117,
64
+ democrat: 65752017,
65
+ other: 1501463,
66
+ },
67
+ {
68
+ year: 2016,
69
+ republican: 62692670,
70
+ democrat: 65677288,
71
+ other: 4292059,
72
+ },
73
+ {
74
+ year: 2020,
75
+ democrat: 81268908,
76
+ republican: 74216146,
77
+ other: 1246094,
78
+ },
79
+ ]
@@ -0,0 +1,189 @@
1
+ import type { BulletLegendItemInterface } from "@unovis/ts"
2
+
3
+ export interface IncomeExpenseItem {
4
+ month: string
5
+ year: number
6
+ income: {
7
+ salary: number
8
+ sideHustle: number
9
+ total: number
10
+ }
11
+ expenses: {
12
+ rent: number
13
+ groceries: number
14
+ utilities: number
15
+ transportation: number
16
+ entertainment: number
17
+ eatingOut: number
18
+ other: number
19
+ total: number
20
+ }
21
+ }
22
+
23
+
24
+ export const categories: Record<string, BulletLegendItemInterface> = {
25
+ income: { name: 'Income', color: '#10b981' },
26
+ expenses: { name: 'Expenses', color: '#3b82f6' }
27
+ }
28
+
29
+ export const IncomeExpenseData: IncomeExpenseItem[] = [
30
+ {
31
+ month: 'January',
32
+ year: 2024,
33
+ income: {
34
+ salary: 2000,
35
+ sideHustle: 200,
36
+ total: 2200
37
+ },
38
+ expenses: {
39
+ rent: 1500,
40
+ groceries: 400,
41
+ utilities: 200,
42
+ transportation: 150,
43
+ entertainment: 300,
44
+ eatingOut: 250,
45
+ other: 100,
46
+ total: 2900
47
+ }
48
+
49
+ },
50
+ {
51
+ month: 'February',
52
+ year: 2024,
53
+ income: {
54
+ salary: 4000,
55
+ sideHustle: 100,
56
+ total: 4100
57
+ },
58
+ expenses: {
59
+ rent: 1500,
60
+ groceries: 450,
61
+ utilities: 250,
62
+ transportation: 150,
63
+ entertainment: 200,
64
+ eatingOut: 300,
65
+ other: 150,
66
+ total: 3000
67
+ }
68
+
69
+ },
70
+ {
71
+ month: 'March',
72
+ year: 2024,
73
+ income: {
74
+ salary: 2000,
75
+ sideHustle: 100,
76
+ total: 2100
77
+ },
78
+ expenses: {
79
+ rent: 1500,
80
+ groceries: 420,
81
+ utilities: 220,
82
+ transportation: 180,
83
+ entertainment: 350,
84
+ eatingOut: 200,
85
+ other: 120,
86
+ total: 2990
87
+ }
88
+ },
89
+ {
90
+ month: 'April',
91
+ year: 2024,
92
+ income: {
93
+ salary: 2300,
94
+ sideHustle: 100,
95
+ total: 2400
96
+ },
97
+ expenses: {
98
+ rent: 1500,
99
+ groceries: 450,
100
+ utilities: 250,
101
+ transportation: 150,
102
+ entertainment: 200,
103
+ eatingOut: 300,
104
+ other: 150,
105
+ total: 1400
106
+ }
107
+
108
+ },
109
+ {
110
+ month: 'May',
111
+ year: 2024,
112
+ income: {
113
+ salary: 4000,
114
+ sideHustle: 100,
115
+ total: 4100
116
+ },
117
+ expenses: {
118
+ rent: 1500,
119
+ groceries: 450,
120
+ utilities: 250,
121
+ transportation: 150,
122
+ entertainment: 200,
123
+ eatingOut: 300,
124
+ other: 150,
125
+ total: 3000
126
+ }
127
+
128
+ },
129
+ {
130
+ month: 'Jun',
131
+ year: 2024,
132
+ income: {
133
+ salary: 3000,
134
+ sideHustle: 100,
135
+ total: 3100
136
+ },
137
+ expenses: {
138
+ rent: 1500,
139
+ groceries: 450,
140
+ utilities: 250,
141
+ transportation: 150,
142
+ entertainment: 200,
143
+ eatingOut: 300,
144
+ other: 150,
145
+ total: 3000
146
+ }
147
+
148
+ },
149
+ {
150
+ month: 'Jul',
151
+ year: 2024,
152
+ income: {
153
+ salary: 3200,
154
+ sideHustle: 600,
155
+ total: 3800
156
+ },
157
+ expenses: {
158
+ rent: 1500,
159
+ groceries: 450,
160
+ utilities: 250,
161
+ transportation: 150,
162
+ entertainment: 200,
163
+ eatingOut: 300,
164
+ other: 150,
165
+ total: 3000
166
+ }
167
+
168
+ },
169
+ {
170
+ month: 'Aug',
171
+ year: 2024,
172
+ income: {
173
+ salary: 3000,
174
+ sideHustle: 100,
175
+ total: 3100
176
+ },
177
+ expenses: {
178
+ rent: 1500,
179
+ groceries: 450,
180
+ utilities: 250,
181
+ transportation: 150,
182
+ entertainment: 200,
183
+ eatingOut: 300,
184
+ other: 150,
185
+ total: 2000
186
+ }
187
+
188
+ }
189
+ ]