@htlkg/components 0.0.1

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 (79) hide show
  1. package/dist/composables/index.js +388 -0
  2. package/dist/composables/index.js.map +1 -0
  3. package/package.json +41 -0
  4. package/src/composables/index.ts +6 -0
  5. package/src/composables/useForm.test.ts +229 -0
  6. package/src/composables/useForm.ts +130 -0
  7. package/src/composables/useFormValidation.test.ts +189 -0
  8. package/src/composables/useFormValidation.ts +83 -0
  9. package/src/composables/useModal.property.test.ts +164 -0
  10. package/src/composables/useModal.ts +43 -0
  11. package/src/composables/useNotifications.test.ts +166 -0
  12. package/src/composables/useNotifications.ts +81 -0
  13. package/src/composables/useTable.property.test.ts +198 -0
  14. package/src/composables/useTable.ts +134 -0
  15. package/src/composables/useTabs.property.test.ts +247 -0
  16. package/src/composables/useTabs.ts +101 -0
  17. package/src/data/Chart.demo.vue +340 -0
  18. package/src/data/Chart.md +525 -0
  19. package/src/data/Chart.vue +133 -0
  20. package/src/data/DataList.md +80 -0
  21. package/src/data/DataList.test.ts +69 -0
  22. package/src/data/DataList.vue +46 -0
  23. package/src/data/SearchableSelect.md +107 -0
  24. package/src/data/SearchableSelect.vue +124 -0
  25. package/src/data/Table.demo.vue +296 -0
  26. package/src/data/Table.md +588 -0
  27. package/src/data/Table.property.test.ts +548 -0
  28. package/src/data/Table.test.ts +562 -0
  29. package/src/data/Table.unit.test.ts +544 -0
  30. package/src/data/Table.vue +321 -0
  31. package/src/data/index.ts +5 -0
  32. package/src/domain/BrandCard.md +81 -0
  33. package/src/domain/BrandCard.vue +63 -0
  34. package/src/domain/BrandSelector.md +84 -0
  35. package/src/domain/BrandSelector.vue +65 -0
  36. package/src/domain/ProductBadge.md +60 -0
  37. package/src/domain/ProductBadge.vue +47 -0
  38. package/src/domain/UserAvatar.md +84 -0
  39. package/src/domain/UserAvatar.vue +60 -0
  40. package/src/domain/domain-components.property.test.ts +449 -0
  41. package/src/domain/index.ts +4 -0
  42. package/src/forms/DateRange.demo.vue +273 -0
  43. package/src/forms/DateRange.md +337 -0
  44. package/src/forms/DateRange.vue +110 -0
  45. package/src/forms/JsonSchemaForm.demo.vue +549 -0
  46. package/src/forms/JsonSchemaForm.md +112 -0
  47. package/src/forms/JsonSchemaForm.property.test.ts +817 -0
  48. package/src/forms/JsonSchemaForm.test.ts +601 -0
  49. package/src/forms/JsonSchemaForm.unit.test.ts +801 -0
  50. package/src/forms/JsonSchemaForm.vue +615 -0
  51. package/src/forms/index.ts +3 -0
  52. package/src/index.ts +17 -0
  53. package/src/navigation/Breadcrumbs.demo.vue +142 -0
  54. package/src/navigation/Breadcrumbs.md +102 -0
  55. package/src/navigation/Breadcrumbs.test.ts +69 -0
  56. package/src/navigation/Breadcrumbs.vue +58 -0
  57. package/src/navigation/Stepper.demo.vue +337 -0
  58. package/src/navigation/Stepper.md +174 -0
  59. package/src/navigation/Stepper.vue +146 -0
  60. package/src/navigation/Tabs.demo.vue +293 -0
  61. package/src/navigation/Tabs.md +163 -0
  62. package/src/navigation/Tabs.test.ts +176 -0
  63. package/src/navigation/Tabs.vue +104 -0
  64. package/src/navigation/index.ts +5 -0
  65. package/src/overlays/Alert.demo.vue +377 -0
  66. package/src/overlays/Alert.md +248 -0
  67. package/src/overlays/Alert.test.ts +166 -0
  68. package/src/overlays/Alert.vue +70 -0
  69. package/src/overlays/Drawer.md +140 -0
  70. package/src/overlays/Drawer.test.ts +92 -0
  71. package/src/overlays/Drawer.vue +76 -0
  72. package/src/overlays/Modal.demo.vue +149 -0
  73. package/src/overlays/Modal.md +385 -0
  74. package/src/overlays/Modal.test.ts +128 -0
  75. package/src/overlays/Modal.vue +86 -0
  76. package/src/overlays/Notification.md +150 -0
  77. package/src/overlays/Notification.test.ts +96 -0
  78. package/src/overlays/Notification.vue +58 -0
  79. package/src/overlays/index.ts +4 -0
@@ -0,0 +1,340 @@
1
+ <template>
2
+ <div class="space-y-8">
3
+ <div>
4
+ <h2 class="text-2xl font-bold mb-4">Chart Component Demo</h2>
5
+ <p class="text-gray-600 mb-6">
6
+ Data visualization with multiple chart types powered by ApexCharts.
7
+ </p>
8
+ </div>
9
+
10
+ <!-- Line Chart -->
11
+ <div class="border rounded-lg p-6">
12
+ <h3 class="text-lg font-semibold mb-4">Line Chart</h3>
13
+ <Chart
14
+ id="line-chart"
15
+ title="Monthly Sales"
16
+ type="line"
17
+ :series="lineChartData"
18
+ :options="lineChartOptions"
19
+ :loading="lineLoading"
20
+ @data-point-selection="handlePointClick"
21
+ />
22
+ <button
23
+ @click="refreshLineChart"
24
+ class="mt-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
25
+ >
26
+ Refresh Data
27
+ </button>
28
+ </div>
29
+
30
+ <!-- Area Chart -->
31
+ <div class="border rounded-lg p-6">
32
+ <h3 class="text-lg font-semibold mb-4">Area Chart with Multiple Series</h3>
33
+ <Chart
34
+ id="area-chart"
35
+ title="Website Traffic"
36
+ type="area"
37
+ :series="areaChartData"
38
+ :options="areaChartOptions"
39
+ :loading="areaLoading"
40
+ />
41
+ </div>
42
+
43
+ <!-- Bar Chart -->
44
+ <div class="border rounded-lg p-6">
45
+ <h3 class="text-lg font-semibold mb-4">Bar Chart</h3>
46
+ <Chart
47
+ id="bar-chart"
48
+ title="Quarterly Revenue"
49
+ type="bar"
50
+ :series="barChartData"
51
+ :options="barChartOptions"
52
+ :loading="barLoading"
53
+ />
54
+ </div>
55
+
56
+ <!-- Horizontal Bar Chart -->
57
+ <div class="border rounded-lg p-6">
58
+ <h3 class="text-lg font-semibold mb-4">Horizontal Bar Chart</h3>
59
+ <Chart
60
+ id="horizontal-chart"
61
+ title="Top Locations"
62
+ type="bar"
63
+ :series="horizontalChartData"
64
+ :options="horizontalChartOptions"
65
+ :loading="false"
66
+ horizontal
67
+ />
68
+ </div>
69
+
70
+ <!-- Stacked Bar Chart -->
71
+ <div class="border rounded-lg p-6">
72
+ <h3 class="text-lg font-semibold mb-4">Stacked Bar Chart</h3>
73
+ <Chart
74
+ id="stacked-chart"
75
+ title="Revenue by Product"
76
+ type="bar"
77
+ :series="stackedChartData"
78
+ :options="stackedChartOptions"
79
+ :loading="false"
80
+ stacked
81
+ />
82
+ </div>
83
+
84
+ <!-- Chart with Time Range -->
85
+ <div class="border rounded-lg p-6">
86
+ <h3 class="text-lg font-semibold mb-4">Chart with Time Range Selector</h3>
87
+ <Chart
88
+ id="range-chart"
89
+ title="Analytics Overview"
90
+ type="area"
91
+ :series="rangeChartData"
92
+ :options="rangeChartOptions"
93
+ :loading="rangeLoading"
94
+ :range="selectedRange"
95
+ @range-selected="handleRangeChange"
96
+ />
97
+ <div class="mt-4 flex gap-2">
98
+ <button
99
+ v-for="range in timeRanges"
100
+ :key="range"
101
+ @click="selectedRange = range"
102
+ :class="[
103
+ 'px-4 py-2 rounded',
104
+ selectedRange === range
105
+ ? 'bg-blue-500 text-white'
106
+ : 'bg-gray-200 hover:bg-gray-300'
107
+ ]"
108
+ >
109
+ {{ range.toUpperCase() }}
110
+ </button>
111
+ </div>
112
+ </div>
113
+
114
+ <!-- Empty State -->
115
+ <div class="border rounded-lg p-6">
116
+ <h3 class="text-lg font-semibold mb-4">Empty State</h3>
117
+ <Chart
118
+ id="empty-chart"
119
+ title="No Data Available"
120
+ type="line"
121
+ :series="[]"
122
+ :loading="false"
123
+ :empty="true"
124
+ />
125
+ </div>
126
+
127
+ <!-- Loading State -->
128
+ <div class="border rounded-lg p-6">
129
+ <h3 class="text-lg font-semibold mb-4">Loading State</h3>
130
+ <Chart
131
+ id="loading-chart"
132
+ title="Loading Data..."
133
+ type="area"
134
+ :series="loadingChartData"
135
+ :loading="isLoadingChart"
136
+ />
137
+ <button
138
+ @click="toggleLoadingChart"
139
+ class="mt-4 px-4 py-2 bg-purple-500 text-white rounded hover:bg-purple-600"
140
+ >
141
+ {{ isLoadingChart ? 'Stop Loading' : 'Start Loading' }}
142
+ </button>
143
+ </div>
144
+
145
+ <!-- Chart with Annotations -->
146
+ <div class="border rounded-lg p-6">
147
+ <h3 class="text-lg font-semibold mb-4">Chart with Annotations</h3>
148
+ <Chart
149
+ id="annotation-chart"
150
+ title="Performance Metrics"
151
+ type="line"
152
+ :series="annotationChartData"
153
+ :options="annotationChartOptions"
154
+ :annotations="annotation"
155
+ :loading="false"
156
+ />
157
+ </div>
158
+ </div>
159
+ </template>
160
+
161
+ <script setup lang="ts">
162
+ import { ref } from 'vue';
163
+ import { Chart } from '@htlkg/components';
164
+ import type { ChartSeries, ChartOptions, ChartAnnotation, ChartDateRange } from '@htlkg/components';
165
+
166
+ // Line Chart
167
+ const lineLoading = ref(false);
168
+ const lineChartData = ref<ChartSeries[]>([
169
+ {
170
+ name: 'Revenue',
171
+ data: [30, 40, 45, 50, 49, 60, 70, 91, 125, 140, 165, 180]
172
+ }
173
+ ]);
174
+
175
+ const lineChartOptions: ChartOptions = {
176
+ xaxis: {
177
+ categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
178
+ },
179
+ tooltip: {
180
+ intersect: false
181
+ }
182
+ };
183
+
184
+ function refreshLineChart() {
185
+ lineLoading.value = true;
186
+ setTimeout(() => {
187
+ lineChartData.value = [
188
+ {
189
+ name: 'Revenue',
190
+ data: Array.from({ length: 12 }, () => Math.floor(Math.random() * 200))
191
+ }
192
+ ];
193
+ lineLoading.value = false;
194
+ }, 1000);
195
+ }
196
+
197
+ function handlePointClick(data: any) {
198
+ console.log('Clicked data point:', data);
199
+ alert(`Clicked on data point: ${JSON.stringify(data)}`);
200
+ }
201
+
202
+ // Area Chart
203
+ const areaLoading = ref(false);
204
+ const areaChartData: ChartSeries[] = [
205
+ {
206
+ name: 'Visitors',
207
+ data: [30, 40, 45, 50, 49, 60, 70, 91, 125]
208
+ },
209
+ {
210
+ name: 'Page Views',
211
+ data: [50, 60, 70, 80, 75, 90, 100, 130, 180]
212
+ }
213
+ ];
214
+
215
+ const areaChartOptions: ChartOptions = {
216
+ xaxis: {
217
+ categories: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue']
218
+ }
219
+ };
220
+
221
+ // Bar Chart
222
+ const barLoading = ref(false);
223
+ const barChartData: ChartSeries[] = [
224
+ {
225
+ name: 'Q1',
226
+ data: [44, 55, 41, 67]
227
+ },
228
+ {
229
+ name: 'Q2',
230
+ data: [13, 23, 20, 8]
231
+ }
232
+ ];
233
+
234
+ const barChartOptions: ChartOptions = {
235
+ xaxis: {
236
+ categories: ['Product A', 'Product B', 'Product C', 'Product D']
237
+ }
238
+ };
239
+
240
+ // Horizontal Bar Chart
241
+ const horizontalChartData: ChartSeries[] = [
242
+ {
243
+ name: 'Sessions',
244
+ data: [400, 300, 250, 200, 150]
245
+ }
246
+ ];
247
+
248
+ const horizontalChartOptions: ChartOptions = {
249
+ xaxis: {
250
+ categories: ['New York', 'London', 'Tokyo', 'Paris', 'Berlin']
251
+ }
252
+ };
253
+
254
+ // Stacked Bar Chart
255
+ const stackedChartData: ChartSeries[] = [
256
+ {
257
+ name: 'Product A',
258
+ data: [44, 55, 41, 67, 22, 43]
259
+ },
260
+ {
261
+ name: 'Product B',
262
+ data: [13, 23, 20, 8, 13, 27]
263
+ },
264
+ {
265
+ name: 'Product C',
266
+ data: [11, 17, 15, 15, 21, 14]
267
+ }
268
+ ];
269
+
270
+ const stackedChartOptions: ChartOptions = {
271
+ xaxis: {
272
+ categories: ['Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6']
273
+ }
274
+ };
275
+
276
+ // Range Chart
277
+ const rangeLoading = ref(false);
278
+ const selectedRange = ref<'24h' | '7d' | '1m' | '3m' | 'all'>('7d');
279
+ const timeRanges: Array<'24h' | '7d' | '1m' | '3m' | 'all'> = ['24h', '7d', '1m', '3m', 'all'];
280
+
281
+ const rangeChartData = ref<ChartSeries[]>([
282
+ {
283
+ name: 'Users',
284
+ data: [30, 40, 45, 50, 49, 60, 70]
285
+ }
286
+ ]);
287
+
288
+ const rangeChartOptions: ChartOptions = {
289
+ xaxis: {
290
+ categories: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
291
+ }
292
+ };
293
+
294
+ function handleRangeChange(data: { range: ChartDateRange; chartId: string }) {
295
+ console.log('Range changed:', data);
296
+ rangeLoading.value = true;
297
+ setTimeout(() => {
298
+ // Simulate data fetch
299
+ rangeChartData.value = [
300
+ {
301
+ name: 'Users',
302
+ data: Array.from({ length: 7 }, () => Math.floor(Math.random() * 100))
303
+ }
304
+ ];
305
+ rangeLoading.value = false;
306
+ }, 1000);
307
+ }
308
+
309
+ // Loading Chart
310
+ const isLoadingChart = ref(false);
311
+ const loadingChartData = ref<ChartSeries[]>([
312
+ {
313
+ name: 'Data',
314
+ data: [10, 20, 30, 40, 50]
315
+ }
316
+ ]);
317
+
318
+ function toggleLoadingChart() {
319
+ isLoadingChart.value = !isLoadingChart.value;
320
+ }
321
+
322
+ // Annotation Chart
323
+ const annotationChartData: ChartSeries[] = [
324
+ {
325
+ name: 'Response Time',
326
+ data: [120, 150, 170, 140, 160, 180, 200, 190]
327
+ }
328
+ ];
329
+
330
+ const annotationChartOptions: ChartOptions = {
331
+ xaxis: {
332
+ categories: ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00']
333
+ }
334
+ };
335
+
336
+ const annotation: ChartAnnotation = {
337
+ text: 'Target: 150ms',
338
+ high: 150
339
+ };
340
+ </script>