@datametria/vue-components 1.1.2 → 1.1.3

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/ACCESSIBILITY.md DELETED
@@ -1,78 +0,0 @@
1
- # ♿ Acessibilidade - DATAMETRIA Vue Components
2
-
3
- ## 🎯 Conformidade WCAG 2.1 AA
4
-
5
- Todos os componentes seguem as diretrizes **WCAG 2.1 nível AA**.
6
-
7
- ## ✅ Features de Acessibilidade
8
-
9
- ### 1. **Navegação por Teclado**
10
- - ✅ Todos os componentes interativos são acessíveis via teclado
11
- - ✅ Focus visível com `outline` e `box-shadow`
12
- - ✅ Tab order lógico
13
-
14
- ### 2. **ARIA Attributes**
15
- - ✅ `aria-label`, `aria-describedby`, `aria-busy`
16
- - ✅ `role` apropriado para cada componente
17
- - ✅ Estados dinâmicos (`aria-disabled`, `aria-checked`)
18
-
19
- ### 3. **Contraste de Cores**
20
- - ✅ Contraste mínimo 4.5:1 para texto normal
21
- - ✅ Contraste mínimo 3:1 para texto grande
22
- - ✅ Brand colors testadas: #0072CE, #4B0078
23
-
24
- ### 4. **Touch Targets**
25
- - ✅ Mínimo 44x44px em mobile (WCAG 2.5.5)
26
- - ✅ Espaçamento adequado entre elementos
27
- - ✅ `-webkit-tap-highlight-color: transparent`
28
-
29
- ### 5. **Screen Readers**
30
- - ✅ Labels descritivos
31
- - ✅ Estados anunciados (loading, error, success)
32
- - ✅ Estrutura semântica HTML
33
-
34
- ## 📋 Checklist por Componente
35
-
36
- ### DatametriaButton
37
- - ✅ `aria-busy` quando loading
38
- - ✅ `aria-disabled` quando disabled
39
- - ✅ Focus visível
40
- - ✅ Min-height 44px em mobile
41
-
42
- ### DatametriaInput
43
- - ✅ `<label>` associado com `for`
44
- - ✅ `aria-describedby` para mensagens de erro
45
- - ✅ `required` attribute
46
- - ✅ Focus ring visível
47
-
48
- ### DatametriaCheckbox
49
- - ✅ Input nativo para compatibilidade
50
- - ✅ Label clicável
51
- - ✅ Estados visuais claros
52
-
53
- ### DatametriaModal
54
- - ✅ `role="dialog"`
55
- - ✅ `aria-modal="true"`
56
- - ✅ Focus trap
57
- - ✅ ESC para fechar
58
-
59
- ### DatametriaAlert
60
- - ✅ `role="alert"` para anúncio automático
61
- - ✅ Ícones com `aria-hidden="true"`
62
- - ✅ Texto descritivo
63
-
64
- ## 🧪 Testes de Acessibilidade
65
-
66
- ```bash
67
- # Instalar ferramentas
68
- npm install -D @axe-core/vue vitest-axe
69
-
70
- # Rodar testes
71
- npm run test:a11y
72
- ```
73
-
74
- ## 📚 Recursos
75
-
76
- - [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
77
- - [ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/)
78
- - [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/)
package/DESIGN-SYSTEM.md DELETED
@@ -1,70 +0,0 @@
1
- # 🎨 Design System Integration
2
-
3
- ## Brand Colors
4
-
5
- ```css
6
- --dm-primary: #0072CE /* Azul DATAMETRIA */
7
- --dm-secondary: #4B0078 /* Roxo DATAMETRIA */
8
- ```
9
-
10
- ## Design Tokens
11
-
12
- Todos os componentes usam **CSS Custom Properties** do Design System:
13
-
14
- ### Colors
15
- - `--dm-primary`, `--dm-secondary`
16
- - `--dm-success`, `--dm-error`, `--dm-warning`
17
- - `--dm-gray-50` até `--dm-gray-900`
18
-
19
- ### Spacing
20
- - `--dm-space-2` (0.5rem)
21
- - `--dm-space-3` (0.75rem)
22
- - `--dm-space-4` (1rem)
23
-
24
- ### Typography
25
- - `--dm-text-sm` (0.875rem)
26
- - `--dm-text-base` (1rem)
27
- - `--dm-text-lg` (1.125rem)
28
-
29
- ### Effects
30
- - `--dm-radius` (0.375rem)
31
- - `--dm-transition` (200ms ease-in-out)
32
- - `--dm-focus-ring` (box-shadow para focus)
33
-
34
- ## Responsive Design
35
-
36
- ### Breakpoints
37
- - Mobile: < 640px
38
- - Tablet: 640px - 1024px
39
- - Desktop: > 1024px
40
-
41
- ### Typography Scaling
42
- ```css
43
- @media (max-width: 640px) {
44
- --dm-text-sm: 0.8rem;
45
- --dm-text-base: 0.9rem;
46
- }
47
- ```
48
-
49
- ## Touch Targets
50
-
51
- Todos os elementos interativos têm **mínimo 44x44px** em mobile (WCAG 2.5.5).
52
-
53
- ## Dark Mode
54
-
55
- Suporte nativo via `useTheme()` composable:
56
-
57
- ```typescript
58
- const { isDark, toggleTheme } = useTheme()
59
- ```
60
-
61
- ## Customização
62
-
63
- Override tokens no seu projeto:
64
-
65
- ```css
66
- :root {
67
- --dm-primary: #YOUR_COLOR;
68
- --dm-radius: 0.5rem;
69
- }
70
- ```
package/PROGRESS.md DELETED
@@ -1,327 +0,0 @@
1
- # 📊 Progresso de Implementação - @datametria/vue-components
2
-
3
- **Versão:** 1.3.0
4
- **Última atualização:** 27/10/2025
5
- **Meta:** 56 componentes + 8 composables
6
- **Status:** 🎉 175/175 testes passando, 95.28% coverage
7
-
8
- ---
9
-
10
- ## 🏆 Conquistas Recentes
11
-
12
- ### 27/10/2025 - META ATINGIDA! 95.28% Coverage 🏆
13
-
14
- ✅ **175/175 testes passando** (100%)
15
- ✅ **95.28% cobertura total** (statements) - META SUPERADA!
16
- ✅ **77.6% branches** | **76.38% functions**
17
- ✅ **41 arquivos de teste** (26 componentes + 6 composables + 1 index + expansões)
18
- ✅ **Composables 100% coverage** (statements)
19
- ✅ **Componentes 94.09% coverage** (statements)
20
- ✅ **Mocking avançado** com axios, navigator.clipboard, localStorage
21
- ✅ **Fake timers** para debounce e auto-reset
22
-
23
- **Correções Finais (27/10/2025):**
24
-
25
- #### useAPI (3 correções)
26
- - ✅ Axios movido para dependencies (não devDependencies)
27
- - ✅ Error handling retorna `error.message` ao invés de Error object
28
- - ✅ BaseURL absoluta em testes (`http://localhost`)
29
-
30
- #### useLocalStorage (2 correções)
31
- - ✅ Implementado `watch()` para sincronizar com localStorage
32
- - ✅ NextTick aguarda watch antes de validar storage
33
-
34
- #### useValidation (1 correção)
35
- - ✅ Validators retornam boolean ao invés de objeto
36
-
37
- #### useTheme (1 correção)
38
- - ✅ Exportados métodos `setDark()` e `setLight()` além de `toggle()`
39
-
40
- #### src/index.ts (1 correção)
41
- - ✅ Types não são testados em runtime (apenas TypeScript)
42
-
43
- **Correções do Ciclo Anterior (27/10/2025):**
44
-
45
- #### DatametriaAutocomplete (2 correções)
46
- - ✅ Adicionado mensagem "No results" quando filteredOptions está vazio
47
- - ✅ Implementado `handleBlur()` com timeout de 200ms para fechar dropdown
48
-
49
- #### DatametriaFileUpload (2 correções)
50
- - ✅ Adicionada classe `dm-file-upload--dragging` no dragOver
51
- - ✅ Corrigido evento `update:modelValue` no drop
52
-
53
- #### DatametriaNavbar (3 correções)
54
- - ✅ Adicionadas props `sticky`, `transparent`, `bordered`
55
- - ✅ Implementado binding dinâmico de classes com array
56
- - ✅ Classes de variantes agora aplicadas corretamente
57
-
58
- #### useTheme (2 correções)
59
- - ✅ Auto-inicialização ao primeiro uso (carrega do localStorage)
60
- - ✅ Implementado listener para `matchMedia` (detecta preferência do sistema)
61
- - ✅ Adicionado flag `initialized` para evitar múltiplas inicializações
62
-
63
- **Lições Aprendidas:**
64
- - Import correto: `import '@testing-library/jest-dom/vitest'`
65
- - Peer dependencies: vitest e @vitest/coverage-v8 mesma major version
66
- - Classes CSS: usar prefixo completo `datametria-component--variant`
67
- - ESM: Scripts devem usar `import` ao invés de `require`
68
- - Teleport: Componentes com teleport precisam de target no DOM
69
- - Props obrigatórias: Sempre fornecer props required nos testes
70
- - Mocking: vi.mock() deve vir antes dos imports para funcionar
71
- - Fake Timers: vi.useFakeTimers() + vi.advanceTimersByTime() para testes assíncronos
72
- - Navigator API: Mockar navigator.clipboard com Object.assign()
73
- - LocalStorage: Limpar com localStorage.clear() no beforeEach()
74
- - Axios: Mockar com vi.mocked(axios).mockResolvedValue()
75
- - Composables: Testar todos os métodos e edge cases para alta cobertura
76
- - **Blur Events**: Usar setTimeout() para permitir clicks antes de fechar dropdowns
77
- - **Dynamic Classes**: Usar array syntax para múltiplas classes condicionais
78
- - **Auto-initialization**: Composables podem auto-inicializar no primeiro uso
79
-
80
- ---
81
-
82
- ## 🎯 Visão Geral
83
-
84
- | Categoria | Implementado | Total | Progresso |
85
- |-----------|--------------|-------|-----------|
86
- | **Componentes** | 26 | 56 | 46% |
87
- | **Composables** | 6 | 8 | 75% |
88
- | **Design System** | ✅ | ✅ | 100% |
89
- | **Acessibilidade** | ✅ | ✅ | 100% |
90
- | **Responsividade** | ✅ | ✅ | 100% |
91
-
92
- ---
93
-
94
- ## ✅ Componentes Implementados (14/56)
95
-
96
- ### 🔘 Form Components (10/15)
97
- - [x] **DatametriaButton** - 4 variants, 3 sizes, loading, ARIA, responsive
98
- - [x] **DatametriaInput** - Label, validation, error, ARIA, responsive
99
- - [x] **DatametriaSelect** - Options, placeholder, validation, ARIA
100
- - [x] **DatametriaCheckbox** - Custom checkmark, label, ARIA
101
- - [x] **DatametriaRadio** - Circular checkmark, label, ARIA, group support
102
- - [x] **DatametriaSwitch** - Toggle animation, role="switch", ARIA
103
- - [x] **DatametriaTextarea** - Character counter, resize, validation, ARIA
104
- - [x] **DatametriaDatePicker** - Native date input, min/max, validation, ARIA
105
- - [x] **DatametriaFileUpload** - Drag-and-drop, multiple files, preview, size format
106
- - [x] **DatametriaAutocomplete** - Filter, keyboard nav, role="combobox", ARIA
107
- - [ ] DatametriaTimePicker
108
- - [ ] DatametriaSlider
109
- - [ ] DatametriaColorPicker
110
- - [ ] DatametriaMultiSelect
111
- - [ ] DatametriaRating
112
-
113
- ### 📦 Layout Components (5/10)
114
- - [x] **DatametriaCard** - Header/footer slots, padding, variants
115
- - [x] **DatametriaModal** - Teleport, closable, size, ARIA
116
- - [x] **DatametriaContainer** - 4 sizes, fluid variant, padding responsivo
117
- - [x] **DatametriaGrid** - Cols/gap configuráveis, responsive breakpoints
118
- - [x] **DatametriaDivider** - Horizontal/vertical, dashed, label slot, role="separator"
119
- - [ ] DatametriaStack
120
- - [ ] DatametriaAccordion
121
- - [ ] DatametriaCollapse
122
- - [ ] DatametriaSidebar
123
- - [ ] DatametriaDrawer
124
-
125
- ### 🔔 Feedback Components (4/8)
126
- - [x] **DatametriaAlert** - 4 variants, closable, ARIA
127
- - [x] **DatametriaToast** - Teleport, auto-close timer, 4 variants, role="alert", aria-live
128
- - [x] **DatametriaProgress** - role="progressbar", aria-valuenow, 4 variants, animado
129
- - [x] **DatametriaSpinner** - SVG animado, 3 sizes, 3 variants, role="status"
130
- - [ ] DatametriaNotification
131
- - [ ] DatametriaSkeleton
132
- - [ ] DatametriaTooltip
133
-
134
- ### 📊 Data Display (4/10)
135
- - [x] **DatametriaTable** - Columns, slots, empty state
136
- - [x] **DatametriaAvatar** - Image/initials fallback, 4 sizes, rounded, error handling
137
- - [x] **DatametriaBadge** - 6 variants, 3 sizes, slot custom, aria-label
138
- - [x] **DatametriaChip** - 6 variants, closable, clickable, icon slot, keyboard nav
139
- - [ ] DatametriaList
140
- - [ ] DatametriaTimeline
141
- - [ ] DatametriaTree
142
- - [ ] DatametriaTag
143
- - [ ] DatametriaStatistic
144
- - [ ] DatametriaEmpty
145
- - [ ] DatametriaDescription
146
-
147
- ### 🧭 Navigation (3/8)
148
- - [x] **DatametriaNavbar** - Slots (brand, menu, actions), toggle mobile, sticky, variants
149
- - [x] **DatametriaBreadcrumb** - aria-current, separator custom, click event
150
- - [x] **DatametriaTabs** - role="tablist", keyboard nav (arrows), indicator animado
151
- - [ ] DatametriaMenu
152
- - [ ] DatametriaPagination
153
- - [ ] DatametriaSteps
154
- - [ ] DatametriaDropdown
155
- - [ ] DatametriaLink
156
-
157
- ### 🎨 Advanced (0/5)
158
- - [ ] DatametriaCarousel
159
- - [ ] DatametriaCalendar
160
- - [ ] DatametriaChart
161
- - [ ] DatametriaMap
162
- - [ ] DatametriaEditor
163
-
164
- ---
165
-
166
- ## 🎨 Composables Implementados (6/8)
167
-
168
- ### ✅ Core Composables (3/3)
169
- - [x] **useTheme** - Dark mode, localStorage, system preference
170
- - [x] **useValidation** - Validators (required, email, minLength, maxLength)
171
- - [x] **useAPI** - HTTP client (get, post, put, delete), loading/error
172
-
173
- ### 📋 Utility Composables (3/5)
174
- - [x] **useLocalStorage** - Sync automático, JSON parse/stringify, watch deep
175
- - [x] **useDebounce** - Delay configurável (default 300ms), cleanup timeout
176
- - [x] **useClipboard** - Copy/read, estado copied (auto-reset 2s), error handling
177
- - [ ] useIntersectionObserver
178
- - [ ] useMediaQuery
179
-
180
- ---
181
-
182
- ## 🎨 Design System
183
-
184
- ### ✅ Implementado (100%)
185
- - [x] Design Tokens CSS (`design-tokens.css`)
186
- - [x] Brand Colors (#0072CE, #4B0078)
187
- - [x] Spacing System (--dm-space-*)
188
- - [x] Typography Scale (--dm-text-*)
189
- - [x] Color Palette (--dm-gray-*, semantic colors)
190
- - [x] Border Radius (--dm-radius)
191
- - [x] Transitions (--dm-transition)
192
- - [x] Focus Ring (--dm-focus-ring)
193
- - [x] Dark Mode Support
194
-
195
- ---
196
-
197
- ## ♿ Acessibilidade
198
-
199
- ### ✅ WCAG 2.1 AA (100%)
200
- - [x] ARIA Attributes (aria-label, aria-busy, aria-disabled)
201
- - [x] Keyboard Navigation
202
- - [x] Focus Visible (--dm-focus-ring)
203
- - [x] Screen Reader Support
204
- - [x] Contraste 4.5:1 mínimo
205
- - [x] Touch Targets 44x44px
206
- - [x] Semantic HTML
207
- - [x] Documentação (ACCESSIBILITY.md)
208
-
209
- ---
210
-
211
- ## 📱 Responsividade
212
-
213
- ### ✅ Mobile-First (100%)
214
- - [x] Breakpoints (mobile < 640px, tablet 640-1024px, desktop > 1024px)
215
- - [x] Typography Scaling
216
- - [x] Touch-Friendly (44px min-height)
217
- - [x] Tap Highlight Removed
218
- - [x] Responsive Spacing
219
- - [x] Fluid Typography
220
-
221
- ---
222
-
223
- ## 📚 Documentação
224
-
225
- ### ✅ Criada
226
- - [x] README.md - Instalação e uso básico
227
- - [x] ACCESSIBILITY.md - Guia de acessibilidade WCAG 2.1 AA
228
- - [x] DESIGN-SYSTEM.md - Integração Design System
229
- - [x] PROGRESS.md - Este arquivo
230
-
231
- ### 📋 Pendente
232
- - [ ] CONTRIBUTING.md - Guia de contribuição
233
- - [ ] CHANGELOG.md - Histórico de versões
234
- - [ ] Storybook - Documentação interativa
235
- - [ ] API Reference - Documentação completa de props/events
236
-
237
- ---
238
-
239
- ## 🚀 Roadmap
240
-
241
- ### Q1 2026 - Foundation (Atual)
242
- - [x] Setup inicial do pacote NPM
243
- - [x] Design System integrado
244
- - [x] Acessibilidade WCAG 2.1 AA
245
- - [x] 26 componentes implementados (46%)
246
- - [x] 6 composables implementados (75%)
247
- - [x] Setup de testes (Vitest + Testing Library)
248
- - [x] 41 arquivos de teste criados (26 componentes + 6 composables + 1 index + expansões)
249
- - [x] 175 testes implementados ✅
250
- - [x] 100% testes passando (0 falhas) ✅
251
- - [x] 95.28% cobertura total atingida ✅ (META SUPERADA!)
252
-
253
- ### Q2 2026 - Expansion
254
- - [ ] 30 componentes adicionais (total 56)
255
- - [ ] Cobertura de testes 95%+
256
- - [ ] Storybook completo
257
- - [ ] CI/CD pipeline
258
- - [ ] Publicação no NPM
259
-
260
- ### Q3 2026 - Advanced
261
- - [ ] 28 componentes restantes
262
- - [ ] Composables avançados
263
- - [ ] Temas customizáveis
264
- - [ ] Playground online
265
-
266
- ---
267
-
268
- ## 📊 Métricas
269
-
270
- | Métrica | Meta | Atual | Status |
271
- |---------|------|-------|--------|
272
- | **Componentes** | 56 | 26 | 🟡 46% |
273
- | **Composables** | 8 | 6 | 🟡 75% |
274
- | **Cobertura Testes** | 95% | 95.28% (175 testes, 0 falhas) | ✅ 100% da meta |
275
- | **Acessibilidade** | WCAG 2.1 AA | WCAG 2.1 AA | ✅ 100% |
276
- | **Design System** | 100% | 100% | ✅ 100% |
277
- | **Documentação** | 100% | 40% | 🟡 40% |
278
-
279
- ---
280
-
281
- ## 🎯 Próximos Passos
282
-
283
- ### Prioridade Alta
284
- 1. ✅ ~~Implementar componentes form restantes (Radio, Switch, Textarea)~~ - Concluído
285
- 2. ✅ ~~Implementar componentes form avançados (DatePicker, FileUpload, Autocomplete)~~ - Concluído
286
- 3. ✅ ~~Implementar componentes navigation (Navbar, Tabs, Breadcrumb)~~ - Concluído
287
- 4. ✅ ~~Implementar componentes feedback (Toast, Progress, Spinner)~~ - Concluído
288
- 5. ✅ ~~Implementar componentes data display (Avatar, Badge, Chip)~~ - Concluído
289
- 6. ✅ ~~Implementar componentes layout (Container, Grid, Divider)~~ - Concluído
290
- 7. ✅ ~~Implementar composables utility (useLocalStorage, useDebounce, useClipboard)~~ - Concluído
291
- 8. ✅ ~~Criar arquivo index.ts para exportar todos os componentes e composables~~ - Concluído
292
- 9. ✅ ~~Atualizar package.json com exports e types~~ - Concluído
293
- 10. ✅ ~~Setup de testes (Vitest + Testing Library)~~ - Concluído
294
- 11. ✅ ~~Criar testes básicos para 26 componentes~~ - Concluído
295
- 12. ✅ ~~Criar testes básicos para 6 composables~~ - Concluído
296
- 13. ✅ ~~Expandir testes para composables~~ - Concluído
297
- 14. ✅ ~~Corrigir falhas de testes (Autocomplete, FileUpload, Navbar, useTheme)~~ - Concluído
298
- 15. ✅ ~~Atingir 100% testes passando~~ - Concluído (175/175)
299
- 16. ✅ ~~Expandir para 95% cobertura~~ - Concluído (95.28%!)
300
-
301
- ### Prioridade Média
302
- 5. 📋 Implementar feedback components (Toast, Notification, Progress)
303
- 6. 📋 Implementar data display (List, Timeline, Avatar)
304
- 7. 📋 Criar Storybook
305
- 8. 📋 CI/CD pipeline
306
-
307
- ### Prioridade Baixa
308
- 9. 🟢 Componentes advanced (Carousel, Calendar, Chart)
309
- 10. 🟢 Temas customizáveis
310
- 11. 🟢 Playground online
311
-
312
- ---
313
-
314
- ## 📝 Notas
315
-
316
- - **Design System**: Totalmente integrado com CSS Custom Properties
317
- - **Acessibilidade**: Todos os componentes seguem WCAG 2.1 AA
318
- - **Responsividade**: Mobile-first com breakpoints definidos
319
- - **TypeScript**: 100% tipado com interfaces exportadas
320
- - **Vue 3**: Composition API com `<script setup>`
321
- - **I18n**: Não incluído - usuários devem usar vue-i18n ou solução própria
322
- - **Router**: Não incluído - usuários devem usar vue-router
323
-
324
- ---
325
-
326
- **Mantido por:** Vander Loto - CTO DATAMETRIA
327
- **Próxima revisão:** 27/01/2026