@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.
Files changed (97) hide show
  1. package/README.md +548 -590
  2. package/dist/index.es.js +2460 -1440
  3. package/dist/index.umd.js +10 -10
  4. package/dist/vue-components.css +1 -1
  5. package/package.json +102 -98
  6. package/src/components/DatametriaAlert.vue +38 -24
  7. package/src/components/DatametriaAutocomplete.vue +184 -138
  8. package/src/components/DatametriaAvatar.vue +177 -33
  9. package/src/components/DatametriaBadge.vue +31 -23
  10. package/src/components/DatametriaBreadcrumb.vue +21 -21
  11. package/src/components/DatametriaButton.vue +38 -18
  12. package/src/components/DatametriaCard.vue +12 -12
  13. package/src/components/DatametriaCheckbox.vue +8 -8
  14. package/src/components/DatametriaChip.vue +29 -33
  15. package/src/components/DatametriaContainer.vue +4 -4
  16. package/src/components/DatametriaDatePicker.vue +686 -68
  17. package/src/components/DatametriaDivider.vue +13 -13
  18. package/src/components/DatametriaFileUpload.vue +272 -140
  19. package/src/components/DatametriaGrid.vue +3 -3
  20. package/src/components/DatametriaInput.vue +15 -15
  21. package/src/components/DatametriaMenu.vue +604 -619
  22. package/src/components/DatametriaModal.vue +16 -16
  23. package/src/components/DatametriaNavbar.vue +57 -54
  24. package/src/components/DatametriaPasswordInput.vue +430 -0
  25. package/src/components/DatametriaProgress.vue +18 -18
  26. package/src/components/DatametriaRadio.vue +20 -20
  27. package/src/components/DatametriaSelect.vue +15 -15
  28. package/src/components/DatametriaSkeleton.vue +243 -239
  29. package/src/components/DatametriaSlider.vue +395 -407
  30. package/src/components/DatametriaSortableTable.vue +585 -0
  31. package/src/components/DatametriaSpinner.vue +7 -7
  32. package/src/components/DatametriaSwitch.vue +16 -16
  33. package/src/components/DatametriaTable.vue +14 -14
  34. package/src/components/DatametriaTextarea.vue +28 -28
  35. package/src/components/DatametriaTimePicker.vue +285 -285
  36. package/src/components/DatametriaToast.vue +32 -19
  37. package/src/components/DatametriaTooltip.vue +408 -408
  38. package/src/components/__tests__/DatametriaAlert.test.js +36 -0
  39. package/src/components/__tests__/DatametriaAlert.test.ts +190 -0
  40. package/src/components/__tests__/DatametriaAutocomplete.test.ts +180 -0
  41. package/src/components/__tests__/DatametriaAvatar.test.ts +152 -0
  42. package/src/components/__tests__/DatametriaBadge.test.js +30 -0
  43. package/src/components/__tests__/DatametriaBadge.test.ts +167 -0
  44. package/src/components/__tests__/DatametriaBreadcrumb.test.ts +75 -0
  45. package/src/components/__tests__/DatametriaButton.test.js +31 -0
  46. package/src/components/__tests__/DatametriaButton.test.ts +283 -0
  47. package/src/components/__tests__/DatametriaCard.test.ts +201 -0
  48. package/src/components/__tests__/DatametriaCheckbox.test.ts +47 -0
  49. package/src/components/__tests__/DatametriaChip.test.js +39 -0
  50. package/src/components/__tests__/DatametriaContainer.test.ts +52 -0
  51. package/src/components/__tests__/DatametriaDatePicker.test.ts +234 -0
  52. package/src/components/__tests__/DatametriaDivider.test.ts +54 -0
  53. package/src/components/__tests__/DatametriaFileUpload.test.ts +291 -0
  54. package/src/components/__tests__/DatametriaGrid.test.ts +31 -0
  55. package/src/components/__tests__/DatametriaInput.test.ts +72 -0
  56. package/src/components/__tests__/DatametriaMenu.test.ts +366 -0
  57. package/src/components/__tests__/DatametriaModal.test.ts +86 -0
  58. package/src/components/__tests__/DatametriaNavbar.test.js +49 -0
  59. package/src/components/__tests__/DatametriaNavbar.test.ts +203 -0
  60. package/src/components/__tests__/DatametriaPasswordInput.test.js +305 -0
  61. package/src/components/__tests__/DatametriaProgress.test.ts +90 -0
  62. package/src/components/__tests__/DatametriaRadio.test.ts +77 -0
  63. package/src/components/__tests__/DatametriaSelect.test.ts +77 -0
  64. package/src/components/__tests__/DatametriaSlider.test.ts +261 -0
  65. package/src/components/__tests__/DatametriaSortableTable.test.js +168 -0
  66. package/src/components/__tests__/DatametriaSpinner.test.ts +156 -0
  67. package/src/components/__tests__/DatametriaSwitch.test.ts +64 -0
  68. package/src/components/__tests__/DatametriaTable.test.ts +97 -0
  69. package/src/components/__tests__/DatametriaTextarea.test.ts +66 -0
  70. package/src/components/__tests__/DatametriaToast.test.js +49 -0
  71. package/src/components/__tests__/DatametriaToast.test.ts +99 -0
  72. package/src/composables/useAccessibilityScale.ts +94 -94
  73. package/src/composables/useBreakpoints.ts +82 -82
  74. package/src/composables/useHapticFeedback.ts +439 -439
  75. package/src/composables/useRipple.ts +218 -218
  76. package/src/index.ts +68 -61
  77. package/src/stories/Variants.stories.js +96 -0
  78. package/src/styles/design-tokens.css +623 -623
  79. package/src/theme/ThemeProvider.vue +96 -0
  80. package/src/theme/__tests__/ThemeProvider.test.ts +208 -0
  81. package/src/theme/__tests__/constants.test.ts +31 -0
  82. package/src/theme/__tests__/presets.test.ts +166 -0
  83. package/src/theme/__tests__/tokens.test.ts +155 -0
  84. package/src/theme/__tests__/types.test.ts +153 -0
  85. package/src/theme/__tests__/useTheme.test.ts +146 -0
  86. package/src/theme/constants.ts +14 -0
  87. package/src/theme/index.ts +12 -0
  88. package/src/theme/presets/datametria.ts +94 -0
  89. package/src/theme/presets/default.ts +94 -0
  90. package/src/theme/presets/index.ts +8 -0
  91. package/src/theme/tokens/colors.ts +28 -0
  92. package/src/theme/tokens/index.ts +47 -0
  93. package/src/theme/tokens/spacing.ts +21 -0
  94. package/src/theme/tokens/typography.ts +35 -0
  95. package/src/theme/types.ts +111 -0
  96. package/src/theme/useTheme.ts +28 -0
  97. package/src/types/index.ts +19 -0
@@ -64,13 +64,13 @@ const handleClose = () => {
64
64
  align-items: center;
65
65
  justify-content: center;
66
66
  z-index: 1000;
67
- padding: 1rem;
67
+ padding: var(--dm-spacing-4, 1rem);
68
68
  }
69
69
 
70
70
  .datametria-modal__content {
71
71
  background: white;
72
- border-radius: 0.5rem;
73
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
72
+ border-radius: var(--dm-radius-lg, 0.5rem);
73
+ box-shadow: var(--dm-shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, 0.1));
74
74
  width: 100%;
75
75
  max-height: 90vh;
76
76
  overflow: auto;
@@ -80,15 +80,15 @@ const handleClose = () => {
80
80
  display: flex;
81
81
  align-items: center;
82
82
  justify-content: space-between;
83
- padding: 1.5rem;
84
- border-bottom: 1px solid #e5e7eb;
83
+ padding: var(--dm-spacing-6, 1.5rem);
84
+ border-bottom: 1px solid var(--dm-neutral-200, #e5e7eb);
85
85
  }
86
86
 
87
87
  .datametria-modal__title {
88
88
  margin: 0;
89
- font-size: 1.25rem;
90
- font-weight: 600;
91
- color: #111827;
89
+ font-size: var(--dm-font-size-xl, 1.25rem);
90
+ font-weight: var(--dm-font-weight-semibold, 600);
91
+ color: var(--dm-neutral-900, #111827);
92
92
  }
93
93
 
94
94
  .datametria-modal__close {
@@ -97,30 +97,30 @@ const handleClose = () => {
97
97
  font-size: 2rem;
98
98
  line-height: 1;
99
99
  cursor: pointer;
100
- color: #6b7280;
100
+ color: var(--dm-neutral-500, #6b7280);
101
101
  padding: 0;
102
102
  width: 2rem;
103
103
  height: 2rem;
104
104
  display: flex;
105
105
  align-items: center;
106
106
  justify-content: center;
107
- border-radius: 0.25rem;
107
+ border-radius: var(--dm-radius-sm, 0.25rem);
108
108
  transition: all 0.2s;
109
109
  }
110
110
 
111
111
  .datametria-modal__close:hover {
112
- background: #f3f4f6;
113
- color: #111827;
112
+ background: var(--dm-neutral-100, #f3f4f6);
113
+ color: var(--dm-neutral-900, #111827);
114
114
  }
115
115
 
116
116
  .datametria-modal__body {
117
- padding: 1.5rem;
117
+ padding: var(--dm-spacing-6, 1.5rem);
118
118
  }
119
119
 
120
120
  .datametria-modal__footer {
121
- padding: 1.5rem;
122
- border-top: 1px solid #e5e7eb;
123
- background: #f9fafb;
121
+ padding: var(--dm-spacing-6, 1.5rem);
122
+ border-top: 1px solid var(--dm-neutral-200, #e5e7eb);
123
+ background: var(--dm-neutral-50, #f9fafb);
124
124
  }
125
125
 
126
126
  .modal-enter-active,
@@ -1,12 +1,6 @@
1
1
  <template>
2
2
  <nav
3
- class="dm-navbar"
4
- :class="[
5
- `dm-navbar--${props.variant}`,
6
- { 'dm-navbar--sticky': props.sticky },
7
- { 'dm-navbar--transparent': props.transparent },
8
- { 'dm-navbar--bordered': props.bordered }
9
- ]"
3
+ :class="navbarClasses"
10
4
  role="navigation"
11
5
  :aria-label="props.ariaLabel"
12
6
  >
@@ -43,11 +37,11 @@
43
37
  </template>
44
38
 
45
39
  <script setup lang="ts">
46
- import { ref } from 'vue'
40
+ import { ref, computed } from 'vue'
47
41
 
48
42
  interface Props {
49
43
  brand?: string
50
- variant?: 'light' | 'dark' | 'transparent'
44
+ variant?: 'light' | 'dark' | 'transparent' | 'primary'
51
45
  sticky?: boolean
52
46
  transparent?: boolean
53
47
  bordered?: boolean
@@ -63,6 +57,23 @@ const props = withDefaults(defineProps<Props>(), {
63
57
  ariaLabel: 'Main navigation'
64
58
  })
65
59
 
60
+ // Validação de props em desenvolvimento
61
+ if (process.env.NODE_ENV === 'development') {
62
+ const validVariants = ['light', 'dark', 'transparent', 'primary']
63
+ if (!validVariants.includes(props.variant)) {
64
+ console.warn(`[DatametriaNavbar] Invalid variant "${props.variant}". Valid options: ${validVariants.join(', ')}`)
65
+ }
66
+ }
67
+
68
+ // Computed para classes CSS
69
+ const navbarClasses = computed(() => [
70
+ 'dm-navbar',
71
+ `dm-navbar--${props.variant}`,
72
+ { 'dm-navbar--sticky': props.sticky },
73
+ { 'dm-navbar--transparent': props.transparent },
74
+ { 'dm-navbar--bordered': props.bordered }
75
+ ])
76
+
66
77
  const isMenuOpen = ref(false)
67
78
 
68
79
  const toggleMenu = () => {
@@ -73,16 +84,25 @@ const toggleMenu = () => {
73
84
  <style scoped>
74
85
  .dm-navbar {
75
86
  width: 100%;
76
- background: var(--dm-white);
77
- border-bottom: 1px solid var(--dm-gray-200);
87
+ background: var(--dm-neutral-50, #ffffff);
88
+ border-bottom: 1px solid var(--dm-neutral-200, #e5e7eb);
78
89
  position: sticky;
79
90
  top: 0;
80
91
  z-index: 100;
81
92
  }
82
93
 
83
94
  .dm-navbar--dark {
84
- background: var(--dm-gray-900);
85
- border-bottom-color: var(--dm-gray-800);
95
+ background: var(--dm-neutral-900, #111827);
96
+ border-bottom-color: var(--dm-neutral-800, #1f2937);
97
+ }
98
+
99
+ .dm-navbar--primary {
100
+ background: var(--dm-primary, #0072CE);
101
+ border-bottom-color: color-mix(in srgb, var(--dm-primary, #0072CE) 90%, black);
102
+ }
103
+
104
+ .dm-navbar--primary .dm-navbar__logo {
105
+ color: var(--dm-neutral-50, #ffffff);
86
106
  }
87
107
 
88
108
  .dm-navbar--transparent {
@@ -93,10 +113,10 @@ const toggleMenu = () => {
93
113
  .dm-navbar__container {
94
114
  max-width: 1280px;
95
115
  margin: 0 auto;
96
- padding: var(--dm-space-4);
116
+ padding: var(--dm-spacing-4, 1rem);
97
117
  display: flex;
98
118
  align-items: center;
99
- gap: var(--dm-space-4);
119
+ gap: var(--dm-spacing-4, 1rem);
100
120
  }
101
121
 
102
122
  .dm-navbar__brand {
@@ -104,21 +124,21 @@ const toggleMenu = () => {
104
124
  }
105
125
 
106
126
  .dm-navbar__logo {
107
- font-size: var(--dm-text-lg);
108
- font-weight: 600;
109
- color: var(--dm-text-primary);
127
+ font-size: var(--dm-font-size-lg, 1.125rem);
128
+ font-weight: var(--dm-font-weight-semibold, 600);
129
+ color: var(--dm-neutral-900, #111827);
110
130
  text-decoration: none;
111
131
  }
112
132
 
113
133
  .dm-navbar--dark .dm-navbar__logo {
114
- color: var(--dm-white);
134
+ color: var(--dm-neutral-50, #ffffff);
115
135
  }
116
136
 
117
137
  .dm-navbar__toggle {
118
138
  display: none;
119
139
  width: 44px;
120
140
  height: 44px;
121
- padding: var(--dm-space-2);
141
+ padding: var(--dm-spacing-2, 0.5rem);
122
142
  border: none;
123
143
  background: transparent;
124
144
  cursor: pointer;
@@ -129,9 +149,9 @@ const toggleMenu = () => {
129
149
  display: block;
130
150
  width: 24px;
131
151
  height: 2px;
132
- background: var(--dm-text-primary);
152
+ background: var(--dm-neutral-900, #111827);
133
153
  position: relative;
134
- transition: var(--dm-transition);
154
+ transition: all 0.2s ease;
135
155
  }
136
156
 
137
157
  .dm-navbar__toggle-icon::before,
@@ -140,8 +160,8 @@ const toggleMenu = () => {
140
160
  position: absolute;
141
161
  width: 24px;
142
162
  height: 2px;
143
- background: var(--dm-text-primary);
144
- transition: var(--dm-transition);
163
+ background: var(--dm-neutral-900, #111827);
164
+ transition: all 0.2s ease;
145
165
  }
146
166
 
147
167
  .dm-navbar__toggle-icon::before {
@@ -155,14 +175,14 @@ const toggleMenu = () => {
155
175
  .dm-navbar__menu {
156
176
  display: flex;
157
177
  align-items: center;
158
- gap: var(--dm-space-4);
178
+ gap: var(--dm-spacing-4, 1rem);
159
179
  flex: 1;
160
180
  }
161
181
 
162
182
  .dm-navbar__actions {
163
183
  display: flex;
164
184
  align-items: center;
165
- gap: var(--dm-space-2);
185
+ gap: var(--dm-spacing-2, 0.5rem);
166
186
  margin-left: auto;
167
187
  }
168
188
 
@@ -178,17 +198,22 @@ const toggleMenu = () => {
178
198
  top: 100%;
179
199
  left: 0;
180
200
  right: 0;
181
- background: var(--dm-white);
182
- border-bottom: 1px solid var(--dm-gray-200);
201
+ background: var(--dm-neutral-50, #ffffff);
202
+ border-bottom: 1px solid var(--dm-neutral-200, #e5e7eb);
183
203
  flex-direction: column;
184
204
  align-items: stretch;
185
- padding: var(--dm-space-4);
205
+ padding: var(--dm-spacing-4, 1rem);
186
206
  display: none;
187
207
  }
188
208
 
189
209
  .dm-navbar--dark .dm-navbar__menu {
190
- background: var(--dm-gray-900);
191
- border-bottom-color: var(--dm-gray-800);
210
+ background: var(--dm-neutral-900, #111827);
211
+ border-bottom-color: var(--dm-neutral-800, #1f2937);
212
+ }
213
+
214
+ .dm-navbar--primary .dm-navbar__menu {
215
+ background: var(--dm-primary, #0072CE);
216
+ border-bottom-color: color-mix(in srgb, var(--dm-primary, #0072CE) 90%, black);
192
217
  }
193
218
 
194
219
  .dm-navbar__menu--open {
@@ -197,31 +222,9 @@ const toggleMenu = () => {
197
222
 
198
223
  .dm-navbar__actions {
199
224
  margin-left: 0;
200
- margin-top: var(--dm-space-4);
225
+ margin-top: var(--dm-spacing-4, 1rem);
201
226
  }
202
227
  }
203
228
 
204
- @media (prefers-color-scheme: dark) {
205
- .dm-navbar {
206
- background: var(--dm-gray-900);
207
- border-bottom-color: var(--dm-gray-800);
208
- }
209
-
210
- .dm-navbar__logo {
211
- color: var(--dm-white);
212
- }
213
-
214
- .dm-navbar__toggle-icon,
215
- .dm-navbar__toggle-icon::before,
216
- .dm-navbar__toggle-icon::after {
217
- background: var(--dm-white);
218
- }
219
229
 
220
- @media (max-width: 768px) {
221
- .dm-navbar__menu {
222
- background: var(--dm-gray-900);
223
- border-bottom-color: var(--dm-gray-800);
224
- }
225
- }
226
- }
227
230
  </style>