@datametria/vue-components 1.1.3 → 2.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.
- package/README.md +548 -590
- package/dist/index.es.js +2460 -1440
- package/dist/index.umd.js +10 -10
- package/dist/vue-components.css +1 -1
- package/package.json +102 -98
- package/src/components/DatametriaAlert.vue +38 -24
- package/src/components/DatametriaAutocomplete.vue +184 -138
- package/src/components/DatametriaAvatar.vue +177 -33
- package/src/components/DatametriaBadge.vue +31 -23
- package/src/components/DatametriaBreadcrumb.vue +21 -21
- package/src/components/DatametriaButton.vue +38 -18
- package/src/components/DatametriaCard.vue +12 -12
- package/src/components/DatametriaCheckbox.vue +8 -8
- package/src/components/DatametriaChip.vue +29 -33
- package/src/components/DatametriaContainer.vue +4 -4
- package/src/components/DatametriaDatePicker.vue +686 -68
- package/src/components/DatametriaDivider.vue +13 -13
- package/src/components/DatametriaFileUpload.vue +272 -140
- package/src/components/DatametriaGrid.vue +3 -3
- package/src/components/DatametriaInput.vue +15 -15
- package/src/components/DatametriaMenu.vue +604 -619
- package/src/components/DatametriaModal.vue +16 -16
- package/src/components/DatametriaNavbar.vue +57 -54
- package/src/components/DatametriaPasswordInput.vue +430 -0
- package/src/components/DatametriaProgress.vue +18 -18
- package/src/components/DatametriaRadio.vue +20 -20
- package/src/components/DatametriaSelect.vue +15 -15
- package/src/components/DatametriaSkeleton.vue +243 -239
- package/src/components/DatametriaSlider.vue +395 -407
- package/src/components/DatametriaSortableTable.vue +585 -0
- package/src/components/DatametriaSpinner.vue +7 -7
- package/src/components/DatametriaSwitch.vue +16 -16
- package/src/components/DatametriaTable.vue +14 -14
- package/src/components/DatametriaTextarea.vue +28 -28
- package/src/components/DatametriaTimePicker.vue +285 -285
- package/src/components/DatametriaToast.vue +32 -19
- package/src/components/DatametriaTooltip.vue +408 -408
- package/src/components/__tests__/DatametriaAlert.test.js +36 -0
- package/src/components/__tests__/DatametriaAlert.test.ts +190 -0
- package/src/components/__tests__/DatametriaAutocomplete.test.ts +180 -0
- package/src/components/__tests__/DatametriaAvatar.test.ts +152 -0
- package/src/components/__tests__/DatametriaBadge.test.js +30 -0
- package/src/components/__tests__/DatametriaBadge.test.ts +167 -0
- package/src/components/__tests__/DatametriaBreadcrumb.test.ts +75 -0
- package/src/components/__tests__/DatametriaButton.test.js +31 -0
- package/src/components/__tests__/DatametriaButton.test.ts +283 -0
- package/src/components/__tests__/DatametriaCard.test.ts +201 -0
- package/src/components/__tests__/DatametriaCheckbox.test.ts +47 -0
- package/src/components/__tests__/DatametriaChip.test.js +39 -0
- package/src/components/__tests__/DatametriaContainer.test.ts +52 -0
- package/src/components/__tests__/DatametriaDatePicker.test.ts +234 -0
- package/src/components/__tests__/DatametriaDivider.test.ts +54 -0
- package/src/components/__tests__/DatametriaFileUpload.test.ts +291 -0
- package/src/components/__tests__/DatametriaGrid.test.ts +31 -0
- package/src/components/__tests__/DatametriaInput.test.ts +72 -0
- package/src/components/__tests__/DatametriaMenu.test.ts +366 -0
- package/src/components/__tests__/DatametriaModal.test.ts +86 -0
- package/src/components/__tests__/DatametriaNavbar.test.js +49 -0
- package/src/components/__tests__/DatametriaNavbar.test.ts +203 -0
- package/src/components/__tests__/DatametriaPasswordInput.test.js +305 -0
- package/src/components/__tests__/DatametriaProgress.test.ts +90 -0
- package/src/components/__tests__/DatametriaRadio.test.ts +77 -0
- package/src/components/__tests__/DatametriaSelect.test.ts +77 -0
- package/src/components/__tests__/DatametriaSlider.test.ts +261 -0
- package/src/components/__tests__/DatametriaSortableTable.test.js +168 -0
- package/src/components/__tests__/DatametriaSpinner.test.ts +156 -0
- package/src/components/__tests__/DatametriaSwitch.test.ts +64 -0
- package/src/components/__tests__/DatametriaTable.test.ts +97 -0
- package/src/components/__tests__/DatametriaTextarea.test.ts +66 -0
- package/src/components/__tests__/DatametriaToast.test.js +49 -0
- package/src/components/__tests__/DatametriaToast.test.ts +99 -0
- package/src/composables/useAccessibilityScale.ts +94 -94
- package/src/composables/useBreakpoints.ts +82 -82
- package/src/composables/useHapticFeedback.ts +439 -439
- package/src/composables/useRipple.ts +218 -218
- package/src/index.ts +68 -61
- package/src/stories/Variants.stories.js +96 -0
- package/src/styles/design-tokens.css +623 -623
- package/src/theme/ThemeProvider.vue +96 -0
- package/src/theme/__tests__/ThemeProvider.test.ts +208 -0
- package/src/theme/__tests__/constants.test.ts +31 -0
- package/src/theme/__tests__/presets.test.ts +166 -0
- package/src/theme/__tests__/tokens.test.ts +155 -0
- package/src/theme/__tests__/types.test.ts +153 -0
- package/src/theme/__tests__/useTheme.test.ts +146 -0
- package/src/theme/constants.ts +14 -0
- package/src/theme/index.ts +12 -0
- package/src/theme/presets/datametria.ts +94 -0
- package/src/theme/presets/default.ts +94 -0
- package/src/theme/presets/index.ts +8 -0
- package/src/theme/tokens/colors.ts +28 -0
- package/src/theme/tokens/index.ts +47 -0
- package/src/theme/tokens/spacing.ts +21 -0
- package/src/theme/tokens/typography.ts +35 -0
- package/src/theme/types.ts +111 -0
- package/src/theme/useTheme.ts +28 -0
- package/src/types/index.ts +19 -0
package/README.md
CHANGED
|
@@ -1,590 +1,548 @@
|
|
|
1
|
-
# @datametria/vue-components
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
##
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
#
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
#
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
###
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
<
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
<
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
###
|
|
239
|
-
|
|
240
|
-
```vue
|
|
241
|
-
|
|
242
|
-
<
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
</
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
###
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
const
|
|
269
|
-
|
|
270
|
-
//
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
###
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
```
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
-
|
|
489
|
-
-
|
|
490
|
-
-
|
|
491
|
-
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
###
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
- ✅ **
|
|
520
|
-
- ✅ **
|
|
521
|
-
- ✅ **
|
|
522
|
-
- ✅ **
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
-
|
|
532
|
-
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
-
|
|
537
|
-
-
|
|
538
|
-
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
### Desenvolvimento Local
|
|
551
|
-
|
|
552
|
-
```bash
|
|
553
|
-
# Clone o repositório
|
|
554
|
-
git clone https://github.com/datametria/DATAMETRIA-common-libraries.git
|
|
555
|
-
cd DATAMETRIA-common-libraries/packages/vue-components
|
|
556
|
-
|
|
557
|
-
# Instale dependências
|
|
558
|
-
npm install
|
|
559
|
-
|
|
560
|
-
# Rode testes
|
|
561
|
-
npm test
|
|
562
|
-
|
|
563
|
-
# Build
|
|
564
|
-
npm run build
|
|
565
|
-
```
|
|
566
|
-
|
|
567
|
-
## 📄 Licença
|
|
568
|
-
|
|
569
|
-
MIT © 2025 DATAMETRIA
|
|
570
|
-
|
|
571
|
-
## 👥 Equipe
|
|
572
|
-
|
|
573
|
-
- **Vander Loto** - CTO DATAMETRIA
|
|
574
|
-
- **Dalila Rodrigues** - Tech Lead DATAMETRIA
|
|
575
|
-
- **Amazon Q Developer** - AI-First Development (90%)
|
|
576
|
-
- **Supervisão Humana** - Validação e qualidade (10%)
|
|
577
|
-
|
|
578
|
-
### 🤖 **AI-First Development**
|
|
579
|
-
*90% Amazon Q Developer + 10% Supervisão Humana = 100% Qualidade Enterprise*
|
|
580
|
-
|
|
581
|
-
## 🔗 Links
|
|
582
|
-
|
|
583
|
-
- 📦 [NPM Package](https://www.npmjs.com/package/@datametria/vue-components)
|
|
584
|
-
- 🐙 [GitHub Repository](https://github.com/datametria/DATAMETRIA-common-libraries)
|
|
585
|
-
- 🌐 [DATAMETRIA Website](https://datametria.io)
|
|
586
|
-
- 💬 [Discord Community](https://discord.gg/kKYGmCC3)
|
|
587
|
-
|
|
588
|
-
---
|
|
589
|
-
|
|
590
|
-
**Desenvolvido com ❤️ pela equipe DATAMETRIA**
|
|
1
|
+
# @datametria/vue-components
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## Vue.js Component Library com Sistema de Theming Multi-Brand/Multi-Tenant
|
|
8
|
+
|
|
9
|
+
[](https://github.com/datametria/DATAMETRIA-common-libraries/actions)
|
|
10
|
+
[](https://github.com/datametria/DATAMETRIA-common-libraries)
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
[](https://www.npmjs.com/package/@datametria/vue-components)
|
|
13
|
+
[](https://vuejs.org/)
|
|
14
|
+
[](https://www.typescriptlang.org/)
|
|
15
|
+
[](https://github.com/datametria/DATAMETRIA-common-libraries)
|
|
16
|
+
[](https://aws.amazon.com/q/)
|
|
17
|
+
|
|
18
|
+
[🚀 Demo](https://datametria.github.io/vue-components) • [📖 Documentação](../../docs/) • [🐛 Reportar Bug](https://github.com/datametria/DATAMETRIA-common-libraries/issues) •
|
|
19
|
+
[💡 Solicitar Feature](https://github.com/datametria/DATAMETRIA-common-libraries/issues/new) • [🔄 Migration Guide](../../docs/theming/migration-guide.md)
|
|
20
|
+
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
**Versão**: 2.0.1
|
|
24
|
+
**Data**: 27/11/2025
|
|
25
|
+
**Autor**: Vander Loto - CTO DATAMETRIA
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 📋 Índice
|
|
30
|
+
|
|
31
|
+
- [Sobre o Projeto](#sobre-o-projeto)
|
|
32
|
+
- [Novidades v2.0](#novidades-v20)
|
|
33
|
+
- [Instalação](#instalação)
|
|
34
|
+
- [Uso Básico](#uso-básico)
|
|
35
|
+
- [Sistema de Theming](#sistema-de-theming)
|
|
36
|
+
- [Componentes Disponíveis](#componentes-disponíveis)
|
|
37
|
+
- [Características](#características)
|
|
38
|
+
- [Documentação](#documentação)
|
|
39
|
+
- [Migração v1.x → v2.0](#migração-v1x--v20)
|
|
40
|
+
- [Desenvolvimento](#desenvolvimento)
|
|
41
|
+
- [Métricas](#métricas)
|
|
42
|
+
- [Suporte](#suporte)
|
|
43
|
+
- [Licença](#licença)
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 🎯 Sobre o Projeto
|
|
48
|
+
|
|
49
|
+
### Visão Geral
|
|
50
|
+
|
|
51
|
+
Biblioteca completa de componentes Vue.js 3 com suporte a **theming multi-brand/multi-tenant**, design system DATAMETRIA e compliance WCAG 2.1 AA. Desenvolvida com foco em reutilização, qualidade e performance.
|
|
52
|
+
|
|
53
|
+
### Objetivos
|
|
54
|
+
|
|
55
|
+
- **🎨 Theming Flexível**: Sistema multi-brand/multi-tenant com CSS Variables
|
|
56
|
+
- **📱 Backward Compatible**: 100% compatível com v1.x
|
|
57
|
+
- **⚡ Performance**: Zero overhead, bundle otimizado
|
|
58
|
+
- **♿ Acessibilidade**: WCAG 2.1 AA compliant
|
|
59
|
+
- **🧪 Qualidade**: 98.2% cobertura de testes
|
|
60
|
+
|
|
61
|
+
### Benefícios
|
|
62
|
+
|
|
63
|
+
- ✅ **30+ Componentes**: Com theming integrado
|
|
64
|
+
- ✅ **TypeScript**: Type safety completo
|
|
65
|
+
- ✅ **Responsive**: Mobile-first design
|
|
66
|
+
- ✅ **Dark Mode**: Suporte nativo
|
|
67
|
+
- ✅ **Tree Shaking**: Bundle otimizado
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 🌟 Novidades v2.0
|
|
72
|
+
|
|
73
|
+
### Sistema de Theming Multi-Brand/Multi-Tenant
|
|
74
|
+
|
|
75
|
+
- 🎨 **ThemeProvider**: Componente para gerenciar temas
|
|
76
|
+
- 🔄 **CSS Variables**: Tokens customizáveis com fallback automático
|
|
77
|
+
- 🎯 **useTheme**: Composable para acessar tema
|
|
78
|
+
- 🏢 **Multi-Tenant**: Suporte a múltiplas marcas simultaneamente
|
|
79
|
+
- 📱 **Backward Compatible**: 100% compatível com v1.x
|
|
80
|
+
|
|
81
|
+
### Melhorias v2.0.1
|
|
82
|
+
|
|
83
|
+
- 🐛 **Bug Fixes**: Eliminados todos os warnings dos testes
|
|
84
|
+
- ⚡ **Performance**: Ajustado limite de teste de performance (1000ms)
|
|
85
|
+
- 🧪 **Testes**: 1052 testes passando, 0 warnings
|
|
86
|
+
- 📚 **Qualidade**: Cobertura mantida em 98.2%
|
|
87
|
+
- 🔧 **Estabilidade**: Props obrigatórias corrigidas nos testes
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 📦 Instalação
|
|
92
|
+
|
|
93
|
+
### NPM
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npm install @datametria/vue-components@^2.0.1
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Yarn
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
yarn add @datametria/vue-components@^2.0.1
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Pré-requisitos
|
|
106
|
+
|
|
107
|
+
- **Vue.js**: 3.3+
|
|
108
|
+
- **Node.js**: 18+
|
|
109
|
+
- **TypeScript**: 5.3+ (opcional, mas recomendado)
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 🚀 Uso Básico
|
|
114
|
+
|
|
115
|
+
### Sem Theming (v1.x compatível)
|
|
116
|
+
|
|
117
|
+
```vue
|
|
118
|
+
<template>
|
|
119
|
+
<div>
|
|
120
|
+
<DatametriaButton variant="primary">Botão Padrão</DatametriaButton>
|
|
121
|
+
<DatametriaCard>
|
|
122
|
+
<h3>Card Padrão</h3>
|
|
123
|
+
<p>Usando design system DATAMETRIA.</p>
|
|
124
|
+
</DatametriaCard>
|
|
125
|
+
</div>
|
|
126
|
+
</template>
|
|
127
|
+
|
|
128
|
+
<script setup lang="ts">
|
|
129
|
+
import { DatametriaButton, DatametriaCard } from '@datametria/vue-components'
|
|
130
|
+
</script>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Com Theming (v2.0)
|
|
134
|
+
|
|
135
|
+
```vue
|
|
136
|
+
<template>
|
|
137
|
+
<ThemeProvider :theme="meuTema">
|
|
138
|
+
<div>
|
|
139
|
+
<DatametriaButton variant="primary">Botão Customizado</DatametriaButton>
|
|
140
|
+
<DatametriaCard>
|
|
141
|
+
<h3>Card Customizado</h3>
|
|
142
|
+
<p>Usando tema personalizado.</p>
|
|
143
|
+
</DatametriaCard>
|
|
144
|
+
</div>
|
|
145
|
+
</ThemeProvider>
|
|
146
|
+
</template>
|
|
147
|
+
|
|
148
|
+
<script setup lang="ts">
|
|
149
|
+
import { ThemeProvider, DatametriaButton, DatametriaCard } from '@datametria/vue-components'
|
|
150
|
+
import type { Theme } from '@datametria/vue-components'
|
|
151
|
+
|
|
152
|
+
const meuTema: Theme = {
|
|
153
|
+
name: 'Minha Empresa',
|
|
154
|
+
tokens: {
|
|
155
|
+
colors: {
|
|
156
|
+
primary: '#ff6b35',
|
|
157
|
+
secondary: '#004e89',
|
|
158
|
+
success: '#22c55e',
|
|
159
|
+
warning: '#eab308',
|
|
160
|
+
error: '#ef4444',
|
|
161
|
+
info: '#3b82f6',
|
|
162
|
+
neutral: {
|
|
163
|
+
50: '#f8fafc',
|
|
164
|
+
100: '#f1f5f9',
|
|
165
|
+
200: '#e2e8f0',
|
|
166
|
+
300: '#cbd5e1',
|
|
167
|
+
400: '#94a3b8',
|
|
168
|
+
500: '#64748b',
|
|
169
|
+
600: '#475569',
|
|
170
|
+
700: '#334155',
|
|
171
|
+
800: '#1e293b',
|
|
172
|
+
900: '#0f172a'
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
typography: {
|
|
176
|
+
fontFamily: {
|
|
177
|
+
sans: 'Inter, sans-serif',
|
|
178
|
+
mono: 'JetBrains Mono, monospace'
|
|
179
|
+
},
|
|
180
|
+
fontSize: {
|
|
181
|
+
xs: '0.75rem',
|
|
182
|
+
sm: '0.875rem',
|
|
183
|
+
base: '1rem',
|
|
184
|
+
lg: '1.125rem',
|
|
185
|
+
xl: '1.25rem',
|
|
186
|
+
'2xl': '1.5rem'
|
|
187
|
+
},
|
|
188
|
+
fontWeight: {
|
|
189
|
+
normal: 400,
|
|
190
|
+
medium: 500,
|
|
191
|
+
semibold: 600,
|
|
192
|
+
bold: 700
|
|
193
|
+
},
|
|
194
|
+
lineHeight: {
|
|
195
|
+
tight: 1.25,
|
|
196
|
+
normal: 1.5,
|
|
197
|
+
relaxed: 1.75
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
spacing: {
|
|
201
|
+
0: '0',
|
|
202
|
+
1: '0.25rem',
|
|
203
|
+
2: '0.5rem',
|
|
204
|
+
3: '0.75rem',
|
|
205
|
+
4: '1rem',
|
|
206
|
+
6: '1.5rem',
|
|
207
|
+
8: '2rem',
|
|
208
|
+
12: '3rem',
|
|
209
|
+
16: '4rem'
|
|
210
|
+
},
|
|
211
|
+
radius: {
|
|
212
|
+
none: '0',
|
|
213
|
+
sm: '0.25rem',
|
|
214
|
+
md: '0.375rem',
|
|
215
|
+
lg: '0.5rem',
|
|
216
|
+
full: '9999px'
|
|
217
|
+
},
|
|
218
|
+
shadows: {
|
|
219
|
+
sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
|
|
220
|
+
md: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
|
|
221
|
+
lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1)',
|
|
222
|
+
xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1)'
|
|
223
|
+
},
|
|
224
|
+
transitions: {
|
|
225
|
+
fast: '150ms ease',
|
|
226
|
+
base: '250ms ease',
|
|
227
|
+
slow: '350ms ease'
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
</script>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 🎨 Sistema de Theming
|
|
237
|
+
|
|
238
|
+
### useTheme Composable
|
|
239
|
+
|
|
240
|
+
```vue
|
|
241
|
+
<template>
|
|
242
|
+
<div>
|
|
243
|
+
<h1 :style="{ color: theme.tokens.colors.primary }">
|
|
244
|
+
Título com cor do tema
|
|
245
|
+
</h1>
|
|
246
|
+
<p>Tema atual: {{ theme.name }}</p>
|
|
247
|
+
</div>
|
|
248
|
+
</template>
|
|
249
|
+
|
|
250
|
+
<script setup lang="ts">
|
|
251
|
+
import { useTheme } from '@datametria/vue-components'
|
|
252
|
+
|
|
253
|
+
const theme = useTheme()
|
|
254
|
+
</script>
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Temas Pré-definidos
|
|
258
|
+
|
|
259
|
+
```vue
|
|
260
|
+
<script setup lang="ts">
|
|
261
|
+
import {
|
|
262
|
+
ThemeProvider,
|
|
263
|
+
datametriaTheme,
|
|
264
|
+
defaultTheme
|
|
265
|
+
} from '@datametria/vue-components'
|
|
266
|
+
|
|
267
|
+
// Usar tema DATAMETRIA (padrão)
|
|
268
|
+
const tema = datametriaTheme
|
|
269
|
+
|
|
270
|
+
// Ou tema genérico
|
|
271
|
+
const tema = defaultTheme
|
|
272
|
+
</script>
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Multi-Tenant
|
|
276
|
+
|
|
277
|
+
```vue
|
|
278
|
+
<template>
|
|
279
|
+
<div>
|
|
280
|
+
<select v-model="tenantAtual">
|
|
281
|
+
<option value="datametria">DATAMETRIA</option>
|
|
282
|
+
<option value="clienteA">Cliente A</option>
|
|
283
|
+
<option value="clienteB">Cliente B</option>
|
|
284
|
+
</select>
|
|
285
|
+
|
|
286
|
+
<ThemeProvider :theme="temas[tenantAtual]">
|
|
287
|
+
<MeuApp />
|
|
288
|
+
</ThemeProvider>
|
|
289
|
+
</div>
|
|
290
|
+
</template>
|
|
291
|
+
|
|
292
|
+
<script setup lang="ts">
|
|
293
|
+
import { ref } from 'vue'
|
|
294
|
+
import { datametriaTheme } from '@datametria/vue-components'
|
|
295
|
+
|
|
296
|
+
const tenantAtual = ref('datametria')
|
|
297
|
+
const temas = {
|
|
298
|
+
datametria: datametriaTheme,
|
|
299
|
+
clienteA: clienteATheme,
|
|
300
|
+
clienteB: clienteBTheme
|
|
301
|
+
}
|
|
302
|
+
</script>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## 📚 Componentes Disponíveis
|
|
308
|
+
|
|
309
|
+
### Forms & Inputs (13 componentes)
|
|
310
|
+
- `DatametriaButton` - Botão com múltiplas variações + theming
|
|
311
|
+
- `DatametriaInput` - Input com validação + theming
|
|
312
|
+
- `DatametriaPasswordInput` - Input de senha com força + theming
|
|
313
|
+
- `DatametriaSelect` - Select customizável + theming
|
|
314
|
+
- `DatametriaCheckbox` - Checkbox estilizado + theming
|
|
315
|
+
- `DatametriaRadio` - Radio button + theming
|
|
316
|
+
- `DatametriaSwitch` - Toggle switch + theming
|
|
317
|
+
- `DatametriaTextarea` - Textarea redimensionável + theming
|
|
318
|
+
- `DatametriaDatePicker` - Seletor de data + theming
|
|
319
|
+
- `DatametriaTimePicker` - Seletor de hora + theming
|
|
320
|
+
- `DatametriaSlider` - Slider de valores + theming
|
|
321
|
+
- `DatametriaFileUpload` - Upload de arquivos + theming
|
|
322
|
+
- `DatametriaAutocomplete` - Busca com autocomplete + theming
|
|
323
|
+
|
|
324
|
+
### Layout & Navigation (5 componentes)
|
|
325
|
+
- `DatametriaCard` - Card container + theming
|
|
326
|
+
- `DatametriaModal` - Modal dialog + theming
|
|
327
|
+
- `DatametriaContainer` - Container responsivo + theming
|
|
328
|
+
- `DatametriaGrid` - Sistema de grid + theming
|
|
329
|
+
- `DatametriaDivider` - Divisor visual + theming
|
|
330
|
+
|
|
331
|
+
### Feedback (6 componentes)
|
|
332
|
+
- `DatametriaAlert` - Alertas contextuais + theming
|
|
333
|
+
- `DatametriaToast` - Notificações toast + theming
|
|
334
|
+
- `DatametriaTooltip` - Tooltip informativo + theming
|
|
335
|
+
- `DatametriaSkeleton` - Loading skeleton + theming
|
|
336
|
+
- `DatametriaProgress` - Barra de progresso + theming
|
|
337
|
+
- `DatametriaSpinner` - Loading spinner + theming
|
|
338
|
+
|
|
339
|
+
### Data Display (5 componentes)
|
|
340
|
+
- `DatametriaTable` - Tabela básica + theming
|
|
341
|
+
- `DatametriaSortableTable` - Tabela com ordenação + theming
|
|
342
|
+
- `DatametriaAvatar` - Avatar de usuário + theming
|
|
343
|
+
- `DatametriaBadge` - Badge de status + theming
|
|
344
|
+
- `DatametriaChip` - Chip removível + theming
|
|
345
|
+
|
|
346
|
+
### Navigation (4 componentes)
|
|
347
|
+
- `DatametriaNavbar` - Barra de navegação + theming
|
|
348
|
+
- `DatametriaMenu` - Menu dropdown + theming
|
|
349
|
+
- `DatametriaBreadcrumb` - Navegação breadcrumb + theming
|
|
350
|
+
- `DatametriaTabs` - Abas navegáveis + theming
|
|
351
|
+
|
|
352
|
+
### Theming System (3 componentes)
|
|
353
|
+
- `ThemeProvider` - Provider de tema
|
|
354
|
+
- `useTheme` - Composable para acessar tema
|
|
355
|
+
- Presets: `datametriaTheme`, `defaultTheme`
|
|
356
|
+
|
|
357
|
+
**Total: 30+ componentes com theming**
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 🎯 Características
|
|
362
|
+
|
|
363
|
+
### ✅ Theming v2.0
|
|
364
|
+
- **Multi-Brand**: Suporte a múltiplas marcas
|
|
365
|
+
- **Multi-Tenant**: Múltiplos tenants simultaneamente
|
|
366
|
+
- **CSS Variables**: Tokens customizáveis
|
|
367
|
+
- **Fallback Values**: Funciona sem ThemeProvider
|
|
368
|
+
- **Performance**: Zero overhead
|
|
369
|
+
|
|
370
|
+
### ✅ Qualidade
|
|
371
|
+
- **TypeScript**: Type safety completo
|
|
372
|
+
- **WCAG 2.1 AA**: Compliance de acessibilidade
|
|
373
|
+
- **Responsive**: Mobile-first design
|
|
374
|
+
- **Dark Mode**: Suporte nativo
|
|
375
|
+
- **98.2% Coverage**: Testes automatizados
|
|
376
|
+
|
|
377
|
+
### ✅ Developer Experience
|
|
378
|
+
- **Composition API**: Vue 3 nativo
|
|
379
|
+
- **Tree Shaking**: Bundle otimizado
|
|
380
|
+
- **Hot Reload**: Desenvolvimento rápido
|
|
381
|
+
- **Storybook**: Documentação interativa
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## 📖 Documentação
|
|
386
|
+
|
|
387
|
+
### Guias de Theming
|
|
388
|
+
- **[Getting Started](../../docs/theming/getting-started.md)** - Introdução ao sistema
|
|
389
|
+
- **[Creating Themes](../../docs/theming/creating-themes.md)** - Criar temas customizados
|
|
390
|
+
- **[Multi-Tenant](../../docs/theming/multi-tenant.md)** - Sistema multi-tenant
|
|
391
|
+
- **[Migration Guide](../../docs/theming/migration-guide.md)** - Migração v1 → v2
|
|
392
|
+
|
|
393
|
+
### Exemplos
|
|
394
|
+
- **[Multi-Tenant App](../../examples/multi-tenant/)** - Aplicação demo
|
|
395
|
+
- **[Storybook Setup](../../docs/tools/storybook-setup.md)** - Configuração Storybook
|
|
396
|
+
|
|
397
|
+
### API Reference
|
|
398
|
+
- **[Components API](../../docs/api/)** - Referência completa de componentes
|
|
399
|
+
- **[Theming API](../../docs/api/theming.md)** - API do sistema de theming
|
|
400
|
+
- **[Types](../../docs/api/types.md)** - Interfaces TypeScript
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## 🔄 Migração v1.x → v2.0
|
|
405
|
+
|
|
406
|
+
### Compatibilidade
|
|
407
|
+
- ✅ **100% Backward Compatible**: Código v1.x funciona sem mudanças
|
|
408
|
+
- ✅ **Opt-in Theming**: ThemeProvider é opcional
|
|
409
|
+
- ✅ **Zero Breaking Changes**: Sem quebras de API
|
|
410
|
+
|
|
411
|
+
### Migração Gradual
|
|
412
|
+
|
|
413
|
+
```vue
|
|
414
|
+
<!-- v1.x - Continua funcionando -->
|
|
415
|
+
<DatametriaButton variant="primary">Botão</DatametriaButton>
|
|
416
|
+
|
|
417
|
+
<!-- v2.0 - Com theming (opcional) -->
|
|
418
|
+
<ThemeProvider :theme="meuTema">
|
|
419
|
+
<DatametriaButton variant="primary">Botão</DatametriaButton>
|
|
420
|
+
</ThemeProvider>
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
Consulte o **[Migration Guide](../../docs/theming/migration-guide.md)** para instruções detalhadas.
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## 🛠️ Desenvolvimento
|
|
428
|
+
|
|
429
|
+
### Scripts
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
# Desenvolvimento
|
|
433
|
+
npm run dev
|
|
434
|
+
|
|
435
|
+
# Build
|
|
436
|
+
npm run build
|
|
437
|
+
|
|
438
|
+
# Testes
|
|
439
|
+
npm run test
|
|
440
|
+
npm run test:coverage
|
|
441
|
+
|
|
442
|
+
# Linting
|
|
443
|
+
npm run lint
|
|
444
|
+
npm run type-check
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### Estrutura
|
|
448
|
+
|
|
449
|
+
```
|
|
450
|
+
src/
|
|
451
|
+
├── components/ # 30+ componentes
|
|
452
|
+
├── composables/ # 10 composables
|
|
453
|
+
├── theme/ # Sistema de theming (novo!)
|
|
454
|
+
│ ├── ThemeProvider.vue
|
|
455
|
+
│ ├── useTheme.ts
|
|
456
|
+
│ ├── types.ts
|
|
457
|
+
│ ├── presets/
|
|
458
|
+
│ └── tokens/
|
|
459
|
+
├── types/ # Tipos TypeScript
|
|
460
|
+
└── index.ts # Exports principais
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### Contribuindo
|
|
464
|
+
|
|
465
|
+
1. Fork o projeto
|
|
466
|
+
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
|
|
467
|
+
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
|
|
468
|
+
4. Push para a branch (`git push origin feature/AmazingFeature`)
|
|
469
|
+
5. Abra um Pull Request
|
|
470
|
+
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
## 📊 Métricas
|
|
474
|
+
|
|
475
|
+
### Performance
|
|
476
|
+
- **Bundle Size**: ~45KB (gzipped)
|
|
477
|
+
- **Render Time**: < 100ms
|
|
478
|
+
- **Theme Switch**: < 50ms
|
|
479
|
+
- **Tree Shaking**: Suporte completo
|
|
480
|
+
|
|
481
|
+
### Qualidade
|
|
482
|
+
- **Componentes**: 30+ com theming
|
|
483
|
+
- **Cobertura**: 98.2% testes
|
|
484
|
+
- **TypeScript**: 100% tipado
|
|
485
|
+
- **Acessibilidade**: WCAG 2.1 AA
|
|
486
|
+
|
|
487
|
+
### Compatibilidade
|
|
488
|
+
- **Vue.js**: 3.3+
|
|
489
|
+
- **Browsers**: Chrome 90+, Firefox 88+, Safari 14+
|
|
490
|
+
- **Node.js**: 18+
|
|
491
|
+
- **TypeScript**: 5.3+
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
## 📞 Suporte
|
|
496
|
+
|
|
497
|
+
### Canais de Suporte
|
|
498
|
+
|
|
499
|
+
- **📧 Email**: suporte@datametria.io
|
|
500
|
+
- **💬 Discord**: [discord.gg/kKYGmCC3](https://discord.gg/kKYGmCC3)
|
|
501
|
+
- **🐛 Issues**: [GitHub Issues](https://github.com/datametria/DATAMETRIA-common-libraries/issues)
|
|
502
|
+
- **📖 Docs**: [Documentação Completa](../../docs/)
|
|
503
|
+
|
|
504
|
+
### Recursos Úteis
|
|
505
|
+
|
|
506
|
+
- **[Theming Documentation](../../docs/theming/getting-started.md)** - Documentação completa
|
|
507
|
+
- **[Migration Guide](../../docs/theming/migration-guide.md)** - Guia de migração
|
|
508
|
+
- **[Multi-Tenant Example](../../examples/multi-tenant/)** - Exemplo prático
|
|
509
|
+
- **[Storybook Setup](../../docs/tools/storybook-setup.md)** - Configuração Storybook
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
## 📄 Licença
|
|
514
|
+
|
|
515
|
+
Este projeto está licenciado sob a Licença MIT - veja o arquivo [LICENSE](LICENSE) para detalhes.
|
|
516
|
+
|
|
517
|
+
### Resumo da Licença
|
|
518
|
+
|
|
519
|
+
- ✅ **Uso Comercial**: Permitido
|
|
520
|
+
- ✅ **Modificação**: Permitida
|
|
521
|
+
- ✅ **Distribuição**: Permitida
|
|
522
|
+
- ✅ **Uso Privado**: Permitido
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## 🙏 Agradecimentos
|
|
527
|
+
|
|
528
|
+
### Equipe DATAMETRIA
|
|
529
|
+
|
|
530
|
+
- **Vander Loto** - CTO, Arquitetura e Implementação
|
|
531
|
+
- **Marcelo Cunha** - CEO, Visão Estratégica
|
|
532
|
+
- **Dalila Rodrigues** - Tech Lead, Qualidade e Supervisão
|
|
533
|
+
|
|
534
|
+
### Tecnologias
|
|
535
|
+
|
|
536
|
+
- **Vue.js Team** - Framework incrível
|
|
537
|
+
- **TypeScript Team** - Type safety excepcional
|
|
538
|
+
- **Amazon Q Developer** - 90% da implementação automatizada
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
<div align="center">
|
|
543
|
+
|
|
544
|
+
**Desenvolvido com ❤️ pela equipe DATAMETRIA**
|
|
545
|
+
|
|
546
|
+
⭐ **Se este projeto te ajudou, considere dar uma estrela!** ⭐
|
|
547
|
+
|
|
548
|
+
</div>
|