@datametria/vue-components 2.4.0 → 2.4.2

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 (36) hide show
  1. package/README.md +57 -5
  2. package/dist/index.es.js +5812 -2837
  3. package/dist/index.umd.js +670 -10
  4. package/dist/src/components/DatametriaCheckbox.vue.d.ts +2 -0
  5. package/dist/src/components/DatametriaCheckboxGroup.vue.d.ts +6 -0
  6. package/dist/src/components/DatametriaFileUpload.vue.d.ts +5 -0
  7. package/dist/src/components/DatametriaFloatingBar.vue.d.ts +1 -1
  8. package/dist/src/components/DatametriaInput.vue.d.ts +2 -22
  9. package/dist/src/components/DatametriaNavbar.vue.d.ts +1 -1
  10. package/dist/src/components/DatametriaPasswordInput.vue.d.ts +2 -0
  11. package/dist/src/components/DatametriaRadio.vue.d.ts +2 -0
  12. package/dist/src/components/DatametriaRadioGroup.vue.d.ts +6 -0
  13. package/dist/src/components/DatametriaSelect.vue.d.ts +2 -3
  14. package/dist/src/components/DatametriaSidebar.vue.d.ts +1 -1
  15. package/dist/src/components/DatametriaSwitch.vue.d.ts +8 -1
  16. package/dist/src/components/DatametriaTabs.vue.d.ts +2 -2
  17. package/dist/src/components/DatametriaTextarea.vue.d.ts +6 -0
  18. package/dist/src/composables/useAnalytics.d.ts +8 -0
  19. package/dist/src/types/analytics.d.ts +50 -0
  20. package/dist/vue-components.css +1 -1
  21. package/package.json +3 -2
  22. package/src/components/DatametriaButton.vue +196 -195
  23. package/src/components/DatametriaCheckbox.vue +289 -197
  24. package/src/components/DatametriaCheckboxGroup.vue +161 -58
  25. package/src/components/DatametriaFileUpload.vue +493 -414
  26. package/src/components/DatametriaInput.vue +342 -316
  27. package/src/components/DatametriaPasswordInput.vue +433 -444
  28. package/src/components/DatametriaRadio.vue +240 -151
  29. package/src/components/DatametriaRadioGroup.vue +160 -57
  30. package/src/components/DatametriaSelect.vue +409 -313
  31. package/src/components/DatametriaSortableTable.vue +35 -29
  32. package/src/components/DatametriaSwitch.vue +319 -146
  33. package/src/components/DatametriaTabs.vue +2 -2
  34. package/src/components/DatametriaTextarea.vue +285 -213
  35. package/src/composables/useAnalytics.ts +70 -0
  36. package/src/types/analytics.ts +59 -0
@@ -1,61 +1,164 @@
1
- <template>
2
- <div class="datametria-checkbox-group" role="group">
3
- <slot></slot>
4
- </div>
5
- </template>
6
-
7
- <script setup lang="ts">
8
- import { provide, computed } from 'vue'
9
-
10
- interface Props {
11
- modelValue?: (string | number)[]
12
- disabled?: boolean
13
- }
14
-
15
- const props = withDefaults(defineProps<Props>(), {
16
- modelValue: () => [],
17
- disabled: false
18
- })
19
-
20
- const emit = defineEmits<{
21
- 'update:modelValue': [value: (string | number)[]]
22
- change: [value: (string | number)[]]
23
- }>()
24
-
25
- const updateValue = (value: (string | number)[]) => {
26
- emit('update:modelValue', value)
27
- emit('change', value)
28
- }
29
-
30
- provide('checkboxGroup', {
31
- modelValue: computed(() => props.modelValue),
32
- disabled: computed(() => props.disabled),
33
- updateValue
34
- })
35
- </script>
36
-
37
- <style scoped>
38
- .datametria-checkbox-group {
39
- display: inline-flex;
40
- flex-wrap: wrap;
41
- gap: 12px;
42
- }
43
-
44
- /* Dark Mode Support - Hybrid Approach */
45
-
46
- /* Fallback automático (sem JS) */
47
- @media (prefers-color-scheme: dark) {
48
- .datametria-checkbox-group {
49
- background: var(--dm-bg-color-dark, #1e1e1e);
50
- color: var(--dm-text-primary-dark, #e0e0e0);
51
- border-color: var(--dm-border-color-dark, #404040);
52
- }
1
+ <template>
2
+ <div
3
+ class="datametria-checkbox-group"
4
+ :class="groupClasses"
5
+ role="group"
6
+ :aria-label="label"
7
+ :aria-disabled="disabled"
8
+ >
9
+ <label v-if="label" class="datametria-checkbox-group__label">
10
+ {{ label }}
11
+ <span v-if="required" class="datametria-checkbox-group__required">*</span>
12
+ </label>
13
+ <div class="datametria-checkbox-group__content">
14
+ <slot></slot>
15
+ </div>
16
+ <div
17
+ v-if="errorMessage"
18
+ :id="`${groupId}-error`"
19
+ role="alert"
20
+ aria-live="polite"
21
+ class="datametria-checkbox-group__error"
22
+ >
23
+ {{ errorMessage }}
24
+ </div>
25
+ </div>
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ import { provide, computed } from 'vue'
30
+ import { useAnalytics } from '@/composables/useAnalytics'
31
+
32
+ interface Props {
33
+ modelValue?: (string | number)[]
34
+ disabled?: boolean
35
+ label?: string
36
+ required?: boolean
37
+ errorMessage?: string
38
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
39
+ }
40
+
41
+ const props = withDefaults(defineProps<Props>(), {
42
+ modelValue: () => [],
43
+ disabled: false,
44
+ required: false,
45
+ size: 'md'
46
+ })
47
+
48
+ const emit = defineEmits<{
49
+ 'update:modelValue': [value: (string | number)[]]
50
+ change: [value: (string | number)[]]
51
+ }>()
52
+
53
+ const { trackEvent } = useAnalytics()
54
+ const groupId = `datametria-checkbox-group-${Math.random().toString(36).substr(2, 9)}`
55
+
56
+ const groupClasses = computed(() => ({
57
+ 'is-disabled': props.disabled,
58
+ 'is-error': !!props.errorMessage,
59
+ [`datametria-checkbox-group--${props.size}`]: true
60
+ }))
61
+
62
+ const updateValue = (value: (string | number)[]) => {
63
+ emit('update:modelValue', value)
64
+ emit('change', value)
65
+
66
+ trackEvent('checkbox_group_change', {
67
+ component: 'DatametriaCheckboxGroup',
68
+ selectedCount: value.length,
69
+ size: props.size
70
+ })
71
+ }
72
+
73
+ provide('checkboxGroup', {
74
+ modelValue: computed(() => props.modelValue),
75
+ disabled: computed(() => props.disabled),
76
+ updateValue
77
+ })
78
+ </script>
79
+
80
+ <style scoped>
81
+ .datametria-checkbox-group {
82
+ display: inline-flex;
83
+ flex-direction: column;
84
+ width: 100%;
85
+ }
86
+
87
+ .datametria-checkbox-group__label {
88
+ display: block;
89
+ margin-bottom: 8px;
90
+ font-size: 14px;
91
+ font-weight: 500;
92
+ color: var(--color-text-primary, #1f2937);
93
+ }
94
+
95
+ .datametria-checkbox-group__required {
96
+ color: var(--color-error, #ef4444);
97
+ margin-left: 2px;
98
+ }
99
+
100
+ .datametria-checkbox-group__content {
101
+ display: inline-flex;
102
+ flex-wrap: wrap;
103
+ gap: 12px;
104
+ }
105
+
106
+ .datametria-checkbox-group__error {
107
+ margin-top: 4px;
108
+ font-size: 12px;
109
+ color: var(--color-error, #ef4444);
110
+ }
111
+
112
+ .datametria-checkbox-group.is-disabled {
113
+ opacity: 0.6;
114
+ cursor: not-allowed;
53
115
  }
54
116
 
55
- /* Controle manual via useTheme() */
56
- [data-theme="dark"] .datametria-checkbox-group {
57
- background: var(--dm-bg-color-dark, #1e1e1e);
58
- color: var(--dm-text-primary-dark, #e0e0e0);
59
- border-color: var(--dm-border-color-dark, #404040);
117
+ /* Tamanhos */
118
+ .datametria-checkbox-group--xs .datametria-checkbox-group__content {
119
+ gap: 8px;
120
+ }
121
+
122
+ .datametria-checkbox-group--xs .datametria-checkbox-group__label {
123
+ font-size: 11px;
124
+ }
125
+
126
+ .datametria-checkbox-group--sm .datametria-checkbox-group__content {
127
+ gap: 10px;
128
+ }
129
+
130
+ .datametria-checkbox-group--sm .datametria-checkbox-group__label {
131
+ font-size: 12px;
132
+ }
133
+
134
+ .datametria-checkbox-group--md .datametria-checkbox-group__content {
135
+ gap: 12px;
136
+ }
137
+
138
+ .datametria-checkbox-group--md .datametria-checkbox-group__label {
139
+ font-size: 14px;
140
+ }
141
+
142
+ .datametria-checkbox-group--lg .datametria-checkbox-group__content {
143
+ gap: 14px;
144
+ }
145
+
146
+ .datametria-checkbox-group--lg .datametria-checkbox-group__label {
147
+ font-size: 16px;
148
+ }
149
+
150
+ .datametria-checkbox-group--xl .datametria-checkbox-group__content {
151
+ gap: 16px;
152
+ }
153
+
154
+ .datametria-checkbox-group--xl .datametria-checkbox-group__label {
155
+ font-size: 18px;
156
+ }
157
+
158
+ /* Responsividade mobile */
159
+ @media (max-width: 640px) {
160
+ .datametria-checkbox-group__content {
161
+ gap: 16px;
162
+ }
60
163
  }
61
- </style>
164
+ </style>